From ff1c00d2b90a5087c5767abe2686d241780fe826 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Mon, 16 Dec 2024 10:46:29 +0000
Subject: [PATCH 01/19] base64 spinner
---
internal/templates/partials/spinner.templ | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/internal/templates/partials/spinner.templ b/internal/templates/partials/spinner.templ
index ccd4e98d..e39c13fa 100644
--- a/internal/templates/partials/spinner.templ
+++ b/internal/templates/partials/spinner.templ
@@ -1,10 +1,18 @@
package partials
// Spinner renders a loading spinner
-templ Spinner() {
+templ SpinnerLink() {
}
+
+templ Spinner() {
+
+}
From f423e0a34f621b25e0cd050b07b1adcfa61a7cb5 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Mon, 16 Dec 2024 11:43:11 +0000
Subject: [PATCH 02/19] dep updates
---
frontend/package.json | 12 +-
frontend/pnpm-lock.yaml | 166 +++++-----
frontend/public/assets/css/kiosk.css | 477 +++++++++------------------
frontend/public/assets/js/kiosk.js | 2 +-
4 files changed, 241 insertions(+), 416 deletions(-)
diff --git a/frontend/package.json b/frontend/package.json
index 250250ab..1e62f959 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -19,20 +19,22 @@
},
"devDependencies": {
"autoprefixer": "^10.4.20",
- "browserslist": "^4.24.2",
+ "browserslist": "^4.24.3",
"date-fns": "^4.1.0",
"esbuild": "^0.24.0",
- "eslint": "^9.16.0",
- "eslint-plugin-compat": "^6.0.1",
+ "eslint": "^9.17.0",
+ "eslint-plugin-compat": "^6.0.2",
"globals": "^15.13.0",
- "htmx.org": "^2.0.3",
+ "htmx.org": "^2.0.4",
"postcss": "^8.4.49",
"postcss-cli": "^11.0.0",
"postcss-nested": "^7.0.2",
"typescript": "^5.7.2"
},
"browserslist": [
- "> 0.3%",
+ "> 0.2%",
+ "not ios 11",
+ "not android 131",
"not op_mini all",
"not IE 11"
]
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index ec14b838..b31084a0 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -12,8 +12,8 @@ importers:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.49)
browserslist:
- specifier: ^4.24.2
- version: 4.24.2
+ specifier: ^4.24.3
+ version: 4.24.3
date-fns:
specifier: ^4.1.0
version: 4.1.0
@@ -21,17 +21,17 @@ importers:
specifier: ^0.24.0
version: 0.24.0
eslint:
- specifier: ^9.16.0
- version: 9.16.0
+ specifier: ^9.17.0
+ version: 9.17.0
eslint-plugin-compat:
- specifier: ^6.0.1
- version: 6.0.1(eslint@9.16.0)
+ specifier: ^6.0.2
+ version: 6.0.2(eslint@9.17.0)
globals:
specifier: ^15.13.0
version: 15.13.0
htmx.org:
- specifier: ^2.0.3
- version: 2.0.3
+ specifier: ^2.0.4
+ version: 2.0.4
postcss:
specifier: ^8.4.49
version: 8.4.49
@@ -201,28 +201,28 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.0':
- resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==}
+ '@eslint/config-array@0.19.1':
+ resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.9.0':
- resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==}
+ '@eslint/core@0.9.1':
+ resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.2.0':
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.16.0':
- resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==}
+ '@eslint/js@9.17.0':
+ resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@2.1.4':
- resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
+ '@eslint/object-schema@2.1.5':
+ resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.3':
- resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
+ '@eslint/plugin-kit@0.2.4':
+ resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
@@ -245,8 +245,8 @@ packages:
resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
engines: {node: '>=18.18'}
- '@mdn/browser-compat-data@5.6.20':
- resolution: {integrity: sha512-TOxHxwNNtZ+HWnmhBgBCKYwevIqxi5HOshnBg7Fac3R95EFGm3ir0HDUG1ujBG3i8zjXimp3GZK1lfsjkbmydg==}
+ '@mdn/browser-compat-data@5.6.24':
+ resolution: {integrity: sha512-xNoWeI2TJN5UNTqpqpK0uGncUW1cL+QksxKfNblXsQ6Uu8ONVHcqLbTZxs6+/VMFEE4ZdRzI3j+0Mw3oJtdsyg==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -298,8 +298,8 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- ast-metadata-inferer@0.8.0:
- resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==}
+ ast-metadata-inferer@0.8.1:
+ resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==}
autoprefixer@10.4.20:
resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
@@ -322,8 +322,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.24.2:
- resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
+ browserslist@4.24.3:
+ resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -331,8 +331,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001686:
- resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==}
+ caniuse-lite@1.0.30001689:
+ resolution: {integrity: sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -368,8 +368,8 @@ packages:
date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
- debug@4.3.7:
- resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -384,8 +384,8 @@ packages:
resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
engines: {node: '>= 0.6.0'}
- electron-to-chromium@1.5.68:
- resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==}
+ electron-to-chromium@1.5.73:
+ resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -403,8 +403,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- eslint-plugin-compat@6.0.1:
- resolution: {integrity: sha512-0MeIEuoy8kWkOhW38kK8hU4vkb6l/VvyjpuYDymYOXmUY9NvTgyErF16lYuX+HPS5hkmym7lfA+XpYZiWYWmYA==}
+ eslint-plugin-compat@6.0.2:
+ resolution: {integrity: sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==}
engines: {node: '>=18.x'}
peerDependencies:
eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -421,8 +421,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.16.0:
- resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==}
+ eslint@9.17.0:
+ resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -533,8 +533,8 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- htmx.org@2.0.3:
- resolution: {integrity: sha512-AeoJUAjkCVVajbfKX+3sVQBTCt8Ct4lif1T+z/tptTXo8+8yyq3QIMQQe/IT+R8ssfrO1I0DeX4CAronzCL6oA==}
+ htmx.org@2.0.4:
+ resolution: {integrity: sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
@@ -594,8 +594,8 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- lilconfig@3.1.2:
- resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
locate-path@6.0.0:
@@ -630,8 +630,8 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- node-releases@2.0.18:
- resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -943,27 +943,29 @@ snapshots:
'@esbuild/win32-x64@0.24.0':
optional: true
- '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0)':
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)':
dependencies:
- eslint: 9.16.0
+ eslint: 9.17.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.0':
+ '@eslint/config-array@0.19.1':
dependencies:
- '@eslint/object-schema': 2.1.4
- debug: 4.3.7
+ '@eslint/object-schema': 2.1.5
+ debug: 4.4.0
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/core@0.9.0': {}
+ '@eslint/core@0.9.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
'@eslint/eslintrc@3.2.0':
dependencies:
ajv: 6.12.6
- debug: 4.3.7
+ debug: 4.4.0
espree: 10.3.0
globals: 14.0.0
ignore: 5.3.2
@@ -974,11 +976,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.16.0': {}
+ '@eslint/js@9.17.0': {}
- '@eslint/object-schema@2.1.4': {}
+ '@eslint/object-schema@2.1.5': {}
- '@eslint/plugin-kit@0.2.3':
+ '@eslint/plugin-kit@0.2.4':
dependencies:
levn: 0.4.1
@@ -995,7 +997,7 @@ snapshots:
'@humanwhocodes/retry@0.4.1': {}
- '@mdn/browser-compat-data@5.6.20': {}
+ '@mdn/browser-compat-data@5.6.24': {}
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -1041,14 +1043,14 @@ snapshots:
argparse@2.0.1: {}
- ast-metadata-inferer@0.8.0:
+ ast-metadata-inferer@0.8.1:
dependencies:
- '@mdn/browser-compat-data': 5.6.20
+ '@mdn/browser-compat-data': 5.6.24
autoprefixer@10.4.20(postcss@8.4.49):
dependencies:
- browserslist: 4.24.2
- caniuse-lite: 1.0.30001686
+ browserslist: 4.24.3
+ caniuse-lite: 1.0.30001689
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -1068,16 +1070,16 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.24.2:
+ browserslist@4.24.3:
dependencies:
- caniuse-lite: 1.0.30001686
- electron-to-chromium: 1.5.68
- node-releases: 2.0.18
- update-browserslist-db: 1.1.1(browserslist@4.24.2)
+ caniuse-lite: 1.0.30001689
+ electron-to-chromium: 1.5.73
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.1(browserslist@4.24.3)
callsites@3.1.0: {}
- caniuse-lite@1.0.30001686: {}
+ caniuse-lite@1.0.30001689: {}
chalk@4.1.2:
dependencies:
@@ -1120,7 +1122,7 @@ snapshots:
date-fns@4.1.0: {}
- debug@4.3.7:
+ debug@4.4.0:
dependencies:
ms: 2.1.3
@@ -1128,7 +1130,7 @@ snapshots:
dependency-graph@0.11.0: {}
- electron-to-chromium@1.5.68: {}
+ electron-to-chromium@1.5.73: {}
emoji-regex@8.0.0: {}
@@ -1163,13 +1165,13 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-plugin-compat@6.0.1(eslint@9.16.0):
+ eslint-plugin-compat@6.0.2(eslint@9.17.0):
dependencies:
- '@mdn/browser-compat-data': 5.6.20
- ast-metadata-inferer: 0.8.0
- browserslist: 4.24.2
- caniuse-lite: 1.0.30001686
- eslint: 9.16.0
+ '@mdn/browser-compat-data': 5.6.24
+ ast-metadata-inferer: 0.8.1
+ browserslist: 4.24.3
+ caniuse-lite: 1.0.30001689
+ eslint: 9.17.0
find-up: 5.0.0
globals: 15.13.0
lodash.memoize: 4.1.2
@@ -1184,15 +1186,15 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.16.0:
+ eslint@9.17.0:
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0)
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0)
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.0
- '@eslint/core': 0.9.0
+ '@eslint/config-array': 0.19.1
+ '@eslint/core': 0.9.1
'@eslint/eslintrc': 3.2.0
- '@eslint/js': 9.16.0
- '@eslint/plugin-kit': 0.2.3
+ '@eslint/js': 9.17.0
+ '@eslint/plugin-kit': 0.2.4
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.1
@@ -1201,7 +1203,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.3.7
+ debug: 4.4.0
escape-string-regexp: 4.0.0
eslint-scope: 8.2.0
eslint-visitor-keys: 4.2.0
@@ -1319,7 +1321,7 @@ snapshots:
has-flag@4.0.0: {}
- htmx.org@2.0.3: {}
+ htmx.org@2.0.4: {}
ignore@5.3.2: {}
@@ -1371,7 +1373,7 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- lilconfig@3.1.2: {}
+ lilconfig@3.1.3: {}
locate-path@6.0.0:
dependencies:
@@ -1398,7 +1400,7 @@ snapshots:
natural-compare@1.4.0: {}
- node-releases@2.0.18: {}
+ node-releases@2.0.19: {}
normalize-path@3.0.0: {}
@@ -1458,7 +1460,7 @@ snapshots:
postcss-load-config@5.1.0(postcss@8.4.49):
dependencies:
- lilconfig: 3.1.2
+ lilconfig: 3.1.3
yaml: 2.6.1
optionalDependencies:
postcss: 8.4.49
@@ -1557,9 +1559,9 @@ snapshots:
universalify@2.0.1: {}
- update-browserslist-db@1.1.1(browserslist@4.24.2):
+ update-browserslist-db@1.1.1(browserslist@4.24.3):
dependencies:
- browserslist: 4.24.2
+ browserslist: 4.24.3
escalade: 3.2.0
picocolors: 1.1.1
diff --git a/frontend/public/assets/css/kiosk.css b/frontend/public/assets/css/kiosk.css
index 5b03012d..f62a744b 100644
--- a/frontend/public/assets/css/kiosk.css
+++ b/frontend/public/assets/css/kiosk.css
@@ -191,16 +191,14 @@ body {
max-height: 80px;
left: 50%;
top: 50%;
- -webkit-transform: translate(-50%);
- -moz-transform: translate(-50%);
- -ms-transform: translate(-50%);
- transform: translate(-50%);
+ -moz-transform: translate(-50%);
+ -ms-transform: translate(-50%);
+ transform: translate(-50%);
}
/* src/css/frame.css */
.frame {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
width: 100%;
@@ -215,15 +213,12 @@ body {
}
.frame--image {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
+ -moz-box-pack: center;
+ justify-content: center;
+ -moz-box-align: center;
+ align-items: center;
width: 100%;
height: 100%;
}
@@ -285,29 +280,24 @@ body {
}
.frame--layout-splitview .frame--image {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
+ -moz-box-pack: center;
+ justify-content: center;
+ -moz-box-align: center;
+ align-items: center;
}
.layout-splitview-landscape .frame {
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
border: 0.4rem solid black;
border-radius: 0.75rem;
}
.layout-splitview-landscape.frameless .frame {
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
border: none;
border-radius: 0;
}
@@ -330,15 +320,12 @@ body {
}
.frame--layout-splitview-landscape .frame--image {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
+ -moz-box-pack: center;
+ justify-content: center;
+ -moz-box-align: center;
+ align-items: center;
}
.transition-none.frameless .frame {
background-color: transparent;
@@ -349,14 +336,6 @@ body {
transition: opacity 1s ease-out;
will-change: opacity;
}
-@-webkit-keyframes fade-in {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
@-moz-keyframes fade-in {
from {
opacity: 0;
@@ -374,12 +353,10 @@ body {
}
}
.transition-cross-fade .frame {
- -webkit-animation-name: fade-in;
- -moz-animation-name: fade-in;
- animation-name: fade-in;
- -webkit-animation-fill-mode: forwards;
- -moz-animation-fill-mode: forwards;
- animation-fill-mode: forwards;
+ -moz-animation-name: fade-in;
+ animation-name: fade-in;
+ -moz-animation-fill-mode: forwards;
+ animation-fill-mode: forwards;
opacity: 0;
will-change: opacity;
}
@@ -390,17 +367,14 @@ body {
}
.image--metadata {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
gap: 0.5rem;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
- -webkit-align-items: flex-end;
- -moz-box-align: end;
- align-items: flex-end;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
+ -moz-box-align: end;
+ align-items: flex-end;
bottom: 0;
right: 0;
max-width: 70vw;
@@ -463,10 +437,9 @@ body {
display: inline-block;
font-size: 0.84rem;
font-weight: bold;
- -webkit-transform: translate(0.0625rem, -0.1875rem);
- -moz-transform: translate(0.0625rem, -0.1875rem);
- -ms-transform: translate(0.0625rem, -0.1875rem);
- transform: translate(0.0625rem, -0.1875rem);
+ -moz-transform: translate(0.0625rem, -0.1875rem);
+ -ms-transform: translate(0.0625rem, -0.1875rem);
+ transform: translate(0.0625rem, -0.1875rem);
}
.image--metadata--exif--seperator {
opacity: 0.3;
@@ -477,17 +450,14 @@ body {
}
.frame--layout-splitview:nth-child(1) .image--metadata {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
gap: 0.5rem;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
- -webkit-align-items: flex-start;
- -moz-box-align: start;
- align-items: flex-start;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
+ -moz-box-align: start;
+ align-items: flex-start;
bottom: 0;
left: 0;
right: unset;
@@ -498,54 +468,44 @@ body {
text-shadow: 0 0 1.25rem rgba(0, 0, 0, 0.6);
}
.frame--image-zoom img {
- -webkit-animation-direction: normal;
- -moz-animation-direction: normal;
- animation-direction: normal;
- -webkit-animation-duration: inherit;
- -moz-animation-duration: inherit;
- animation-duration: inherit;
+ -moz-animation-direction: normal;
+ animation-direction: normal;
+ -moz-animation-duration: inherit;
+ animation-duration: inherit;
-moz-transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
- -webkit-animation-fill-mode: forwards;
- -moz-animation-fill-mode: forwards;
- animation-fill-mode: forwards;
- -webkit-transform-origin: inherit;
- -moz-transform-origin: inherit;
- -ms-transform-origin: inherit;
- transform-origin: inherit;
+ -moz-animation-fill-mode: forwards;
+ animation-fill-mode: forwards;
+ -moz-transform-origin: inherit;
+ -ms-transform-origin: inherit;
+ transform-origin: inherit;
-o-object-position: inherit;
object-position: inherit;
will-change: scale;
}
.frame .frame--image-zoom-in img {
- -webkit-animation-name: image-zoom-in;
- -moz-animation-name: image-zoom-in;
- animation-name: image-zoom-in;
+ -moz-animation-name: image-zoom-in;
+ animation-name: image-zoom-in;
}
.frame .frame--image-zoom-out img {
- -webkit-animation-name: image-zoom-out;
- -moz-animation-name: image-zoom-out;
- animation-name: image-zoom-out;
+ -moz-animation-name: image-zoom-out;
+ animation-name: image-zoom-out;
}
.frame .frame--image-smart-zoom-out img {
- -webkit-animation-name: image-smart-zoom-out;
- -moz-animation-name: image-smart-zoom-out;
- animation-name: image-smart-zoom-out;
+ -moz-animation-name: image-smart-zoom-out;
+ animation-name: image-smart-zoom-out;
}
.frame .frame--image-smart-zoom-in img {
- -webkit-animation-name: image-smart-zoom-in;
- -moz-animation-name: image-smart-zoom-in;
- animation-name: image-smart-zoom-in;
+ -moz-animation-name: image-smart-zoom-in;
+ animation-name: image-smart-zoom-in;
}
.polling-paused .frame {
- -webkit-animation-play-state: paused;
- -moz-animation-play-state: paused;
- animation-play-state: paused;
+ -moz-animation-play-state: paused;
+ animation-play-state: paused;
}
.polling-paused .frame img {
- -webkit-animation-play-state: paused;
- -moz-animation-play-state: paused;
- animation-play-state: paused;
+ -moz-animation-play-state: paused;
+ animation-play-state: paused;
}
@media screen and (max-width: 31.25rem) {
.image--metadata {
@@ -588,7 +548,6 @@ body {
left: 0;
width: 100%;
height: 100%;
- display: -webkit-flex;
display: -moz-box;
display: flex;
gap: 0.4rem;
@@ -599,19 +558,15 @@ body {
width: 100%;
height: 100%;
background-color: rgb(51 52 96 / 60%);
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
- -webkit-justify-content: space-between;
- -moz-box-pack: justify;
- justify-content: space-between;
+ -moz-box-align: center;
+ align-items: center;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
+ -moz-box-pack: justify;
+ justify-content: space-between;
gap: 2rem;
padding: 6rem 3rem 3rem 3rem;
color: #fff;
@@ -619,22 +574,18 @@ body {
overflow: hidden;
}
.polling-paused.more-info #more-info .more-info--image .more-info--image--data {
- display: -webkit-flex;
display: -moz-box;
display: flex;
width: -webkit-fit-content;
width: -moz-fit-content;
width: fit-content;
- -webkit-flex: 1;
- -moz-box-flex: 1;
- flex: 1;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
+ -moz-box-flex: 1;
+ flex: 1;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
+ -moz-box-pack: center;
+ justify-content: center;
gap: 1rem;
}
.polling-paused.more-info #more-info .more-info--image h3 {
@@ -645,39 +596,32 @@ body {
text-decoration: none;
}
.polling-paused.more-info #more-info .more-info--image .more-info--image--qr-code {
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-align-items: flex-end;
- -moz-box-align: end;
- align-items: flex-end;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
+ -moz-box-align: end;
+ align-items: flex-end;
+ -moz-box-pack: center;
+ justify-content: center;
}
.polling-paused.more-info #more-info .more-info--image .more-info--image--qr-code img {
max-width: 14rem;
border-radius: 0.5rem;
}
.polling-paused.more-info.layout-splitview-landscape #more-info {
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
}
.polling-paused.more-info.layout-splitview-landscape #more-info .more-info--image {
- -webkit-flex-direction: row;
- -moz-box-orient: horizontal;
- -moz-box-direction: normal;
- flex-direction: row;
+ -moz-box-orient: horizontal;
+ -moz-box-direction: normal;
+ flex-direction: row;
}
.more-info--button-group {
- display: -webkit-flex;
display: -moz-box;
display: flex;
gap: 1rem;
- -webkit-flex-wrap: wrap;
- flex-wrap: wrap;
+ flex-wrap: wrap;
padding-top: 1rem;
}
.more-info--webhook,
@@ -716,15 +660,12 @@ body {
/* src/css/error.css */
.error-container {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
+ -moz-box-pack: center;
+ justify-content: center;
+ -moz-box-align: center;
+ align-items: center;
width: 100%;
height: 100%;
background-color: #000;
@@ -804,26 +745,22 @@ body {
}
#clock-weather-container {
position: absolute;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
- -webkit-justify-content: space-between;
- -moz-box-pack: justify;
- justify-content: space-between;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
+ -moz-box-pack: justify;
+ justify-content: space-between;
height: 100%;
top: 0;
left: 0;
z-index: var(--z-clock);
}
.layout-splitview #clock-weather-container {
- -webkit-flex-direction: row;
- -moz-box-orient: horizontal;
- -moz-box-direction: normal;
- flex-direction: row;
+ -moz-box-orient: horizontal;
+ -moz-box-direction: normal;
+ flex-direction: row;
width: 100%;
height: auto;
}
@@ -880,25 +817,20 @@ body {
left: 50%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-50%, -50%);
- -moz-transform: translate(-50%, -50%);
- -ms-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
+ -moz-transform: translate(-50%, -50%);
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
opacity: 0.1;
z-index: var(--z-sleep-clock);
line-height: 1;
- -webkit-animation-name: clock-screesaver;
- -moz-animation-name: clock-screesaver;
- animation-name: clock-screesaver;
- -webkit-animation-duration: 3600s;
- -moz-animation-duration: 3600s;
- animation-duration: 3600s;
- -webkit-animation-timing-function: step-end;
- -moz-animation-timing-function: step-end;
- animation-timing-function: step-end;
- -webkit-animation-iteration-count: infinite;
- -moz-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
+ -moz-animation-name: clock-screesaver;
+ animation-name: clock-screesaver;
+ -moz-animation-duration: 3600s;
+ animation-duration: 3600s;
+ -moz-animation-timing-function: step-end;
+ animation-timing-function: step-end;
+ -moz-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
}
.sleep .clock--date {
font-size: 8vw;
@@ -910,88 +842,6 @@ body {
.sleep #clock::before {
display: none;
}
-@-webkit-keyframes clock-screesaver {
- 0% {
- top: 50%;
- left: 50%;
- bottom: unset;
- right: unset;
- -webkit-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- }
- 11% {
- top: 5%;
- left: 5%;
- bottom: unset;
- right: unset;
- -webkit-transform: translate(-5%, -5%);
- transform: translate(-5%, -5%);
- }
- 22% {
- top: unset;
- left: unset;
- bottom: 5%;
- right: 5%;
- -webkit-transform: translate(5%, 5%);
- transform: translate(5%, 5%);
- }
- 33% {
- top: 5%;
- left: unset;
- bottom: unset;
- right: 5%;
- -webkit-transform: translate(5%, -5%);
- transform: translate(5%, -5%);
- }
- 44% {
- top: unset;
- left: 5%;
- bottom: 5%;
- right: unset;
- -webkit-transform: translate(-5%, 5%);
- transform: translate(-5%, 5%);
- }
- 55% {
- top: 5%;
- left: 50%;
- bottom: unset;
- right: unset;
- -webkit-transform: translate(-50%, -5%);
- transform: translate(-50%, -5%);
- }
- 66% {
- top: unset;
- left: unset;
- bottom: 5%;
- right: 50%;
- -webkit-transform: translate(50%, 5%);
- transform: translate(50%, 5%);
- }
- 77% {
- top: 50%;
- left: unset;
- bottom: unset;
- right: 5%;
- -webkit-transform: translate(5%, -50%);
- transform: translate(5%, -50%);
- }
- 88% {
- top: 50%;
- left: 5%;
- bottom: unset;
- right: unset;
- -webkit-transform: translate(-5%, -50%);
- transform: translate(-5%, -50%);
- }
- 100% {
- top: 50%;
- left: 50%;
- bottom: unset;
- right: unset;
- -webkit-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- }
-}
@-moz-keyframes clock-screesaver {
0% {
top: 50%;
@@ -1080,90 +930,80 @@ body {
left: 50%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-50%, -50%);
- -moz-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
+ -moz-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
}
11% {
top: 5%;
left: 5%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-5%, -5%);
- -moz-transform: translate(-5%, -5%);
- transform: translate(-5%, -5%);
+ -moz-transform: translate(-5%, -5%);
+ transform: translate(-5%, -5%);
}
22% {
top: unset;
left: unset;
bottom: 5%;
right: 5%;
- -webkit-transform: translate(5%, 5%);
- -moz-transform: translate(5%, 5%);
- transform: translate(5%, 5%);
+ -moz-transform: translate(5%, 5%);
+ transform: translate(5%, 5%);
}
33% {
top: 5%;
left: unset;
bottom: unset;
right: 5%;
- -webkit-transform: translate(5%, -5%);
- -moz-transform: translate(5%, -5%);
- transform: translate(5%, -5%);
+ -moz-transform: translate(5%, -5%);
+ transform: translate(5%, -5%);
}
44% {
top: unset;
left: 5%;
bottom: 5%;
right: unset;
- -webkit-transform: translate(-5%, 5%);
- -moz-transform: translate(-5%, 5%);
- transform: translate(-5%, 5%);
+ -moz-transform: translate(-5%, 5%);
+ transform: translate(-5%, 5%);
}
55% {
top: 5%;
left: 50%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-50%, -5%);
- -moz-transform: translate(-50%, -5%);
- transform: translate(-50%, -5%);
+ -moz-transform: translate(-50%, -5%);
+ transform: translate(-50%, -5%);
}
66% {
top: unset;
left: unset;
bottom: 5%;
right: 50%;
- -webkit-transform: translate(50%, 5%);
- -moz-transform: translate(50%, 5%);
- transform: translate(50%, 5%);
+ -moz-transform: translate(50%, 5%);
+ transform: translate(50%, 5%);
}
77% {
top: 50%;
left: unset;
bottom: unset;
right: 5%;
- -webkit-transform: translate(5%, -50%);
- -moz-transform: translate(5%, -50%);
- transform: translate(5%, -50%);
+ -moz-transform: translate(5%, -50%);
+ transform: translate(5%, -50%);
}
88% {
top: 50%;
left: 5%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-5%, -50%);
- -moz-transform: translate(-5%, -50%);
- transform: translate(-5%, -50%);
+ -moz-transform: translate(-5%, -50%);
+ transform: translate(-5%, -50%);
}
100% {
top: 50%;
left: 50%;
bottom: unset;
right: unset;
- -webkit-transform: translate(-50%, -50%);
- -moz-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
+ -moz-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
}
}
@@ -1199,18 +1039,15 @@ body {
}
.weather {
position: relative;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-flex-direction: column;
- -moz-box-orient: vertical;
- -moz-box-direction: normal;
- flex-direction: column;
+ -moz-box-orient: vertical;
+ -moz-box-direction: normal;
+ flex-direction: column;
font-size: 1rem;
z-index: 1;
}
.weather--temp {
- display: -webkit-flex;
display: -moz-box;
display: flex;
font-size: 3rem;
@@ -1218,7 +1055,6 @@ body {
gap: 0.5rem;
}
.weather--temp--value {
- display: -webkit-flex;
display: -moz-box;
display: flex;
}
@@ -1227,14 +1063,12 @@ body {
padding: 0.6rem 0 0 0.1rem;
}
.weather--description {
- display: -webkit-flex;
display: -moz-box;
display: flex;
padding-top: 0.1rem;
gap: 0.5rem;
- -webkit-align-items: end;
- -moz-box-align: end;
- align-items: end;
+ -moz-box-align: end;
+ align-items: end;
}
.weather--description--icon {
width: 1rem;
@@ -1252,9 +1086,8 @@ body {
.layout-splitview #weather,
.layout-splitview .weather {
text-align: right;
- -webkit-align-items: flex-end;
- -moz-box-align: end;
- align-items: flex-end;
+ -moz-box-align: end;
+ align-items: flex-end;
}
.layout-splitview .weather--theme-fade::before {
content: "";
@@ -1275,8 +1108,7 @@ body {
.weather--theme-solid {
background-color: rgba(0, 0, 0, 0.6);
border-radius: 0 2rem 0 0;
- -webkit-align-self: start;
- align-self: start;
+ align-self: start;
}
.sleep #weather {
display: none;
@@ -1289,12 +1121,10 @@ body {
right: 0;
bottom: 0;
left: 0;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
+ -moz-box-pack: center;
+ justify-content: center;
width: 100%;
height: 100%;
z-index: var(--z-interaction);
@@ -1311,17 +1141,15 @@ body {
height: 50%;
}
.navigation {
- display: -webkit-flex;
display: -moz-box;
display: flex;
gap: 1.4rem;
position: absolute;
top: 1rem;
right: 50%;
- -webkit-transform: translateX(50%);
- -moz-transform: translateX(50%);
- -ms-transform: translateX(50%);
- transform: translateX(50%);
+ -moz-transform: translateX(50%);
+ -ms-transform: translateX(50%);
+ transform: translateX(50%);
padding: 0.5rem;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 40rem;
@@ -1336,15 +1164,12 @@ body {
.navigation--item {
width: 3.62rem;
height: 3.62rem;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
- -webkit-justify-content: center;
- -moz-box-pack: center;
- justify-content: center;
+ -moz-box-align: center;
+ align-items: center;
+ -moz-box-pack: center;
+ justify-content: center;
cursor: pointer;
}
.navigation--item:hover {
@@ -1391,7 +1216,6 @@ body {
height: 1.5rem;
}
.navigation--media-buttons {
- display: -webkit-flex;
display: -moz-box;
display: flex;
}
@@ -1444,19 +1268,16 @@ body {
position: absolute;
top: 2rem;
left: 50%;
- -webkit-transform: translate(-50%);
- -moz-transform: translate(-50%);
- -ms-transform: translate(-50%);
- transform: translate(-50%);
+ -moz-transform: translate(-50%);
+ -ms-transform: translate(-50%);
+ transform: translate(-50%);
padding: 0;
margin: 0;
color: #fff;
- display: -webkit-flex;
display: -moz-box;
display: flex;
- -webkit-align-items: center;
- -moz-box-align: center;
- align-items: center;
+ -moz-box-align: center;
+ align-items: center;
gap: 0.7rem;
font-size: 1.5rem;
opacity: 0.1;
diff --git a/frontend/public/assets/js/kiosk.js b/frontend/public/assets/js/kiosk.js
index 4321bdfc..1d7b8a3a 100644
--- a/frontend/public/assets/js/kiosk.js
+++ b/frontend/public/assets/js/kiosk.js
@@ -1 +1 @@
-var kiosk=(()=>{var de=Object.defineProperty,Rt=Object.defineProperties,It=Object.getOwnPropertyDescriptor,qt=Object.getOwnPropertyDescriptors,Nt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Wt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Wt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>Rt(e,qt(t));var Vt=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},_t=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Nt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=It(t,o))||r.enumerable});return e};var Bt=e=>_t(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=u=>{try{s(n.next(u))}catch(l){o(l)}},a=u=>{try{s(n.throw(u))}catch(l){o(l)}},s=u=>u.done?r(u.value):Promise.resolve(u.value).then(i,a);s((n=n.apply(e,t)).next())});var Jn={};Vt(Jn,{checkHistoryExists:()=>zn,cleanupFrames:()=>Qn,clientData:()=>Gn,releaseRequestLock:()=>Lt,setRequestLock:()=>Mt,startPolling:()=>Je});var Ut=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.3"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/
]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){let t=e.getRootNode&&e.getRootNode();return t&&t instanceof window.ShadowRoot?getDocument().body.contains(t.host):getDocument().body.contains(e)}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){return e=resolveTarget(e),t.indexOf("closest ")===0?[closest(asElement(e),normalizeSelector(t.substr(8)))]:t.indexOf("find ")===0?[find(asParentNode(e),normalizeSelector(t.substr(5)))]:t==="next"?[asElement(e).nextElementSibling]:t.indexOf("next ")===0?[scanForwardQuery(e,normalizeSelector(t.substr(5)),!!n)]:t==="previous"?[asElement(e).previousElementSibling]:t.indexOf("previous ")===0?[scanBackwardsQuery(e,normalizeSelector(t.substr(9)),!!n)]:t==="document"?[document]:t==="window"?[window]:t==="body"?[document.body]:t==="root"?[getRootNode(e,!!n)]:t==="host"?[e.getRootNode().host]:t.indexOf("global ")===0?querySelectorAllExt(e,t.slice(7),!0):toArray(asParentNode(getRootNode(e,!!n)).querySelectorAll(normalizeSelector(t)))}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substr(0,e.indexOf(":")),o=e.substr(e.indexOf(":")+1,e.length)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let u,l=t.cloneNode(!0);u=getDocument().createDocumentFragment(),u.appendChild(l),isInlineSwap(i,s)||(u=asParentNode(l));let f={shouldSwap:!0,target:s,fragment:u};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(u),swapWithStyle(i,s,s,u,n),restorePreservedElements()),forEach(n.elts,function(c){triggerEvent(c,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),u=s&&s.querySelector(a+"[id='"+i+"']");if(u&&u!==s){let l=r.cloneNode();cloneAttributes(r,u),n.tasks.push(function(){cloneAttributes(r,l)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(l){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let l=makeFragment(t);if(s.title=l.title,r.selectOOB){let f=r.selectOOB.split(",");for(let c=0;c0?getWindow().setTimeout(u,n.settleDelay):u()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,u=consumeUntil(o,/[,\[\s]/);if(u!=="")if(u==="every"){let l={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),l.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(l.eventFilter=i),r.push(l)}else{let l={trigger:u};var i=maybeGenerateConditional(e,o,"event");for(i&&(l.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let c=o.shift();if(c==="changed")l.changed=!0;else if(c==="once")l.once=!0;else if(c==="consume")l.consume=!0;else if(c==="delay"&&o[0]===":")o.shift(),l.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(c==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}l.from=a}else c==="target"&&o[0]===":"?(o.shift(),l.target=consumeCSSSelector(o)):c==="throttle"&&o[0]===":"?(o.shift(),l.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):c==="queue"&&o[0]===":"?(o.shift(),l.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):c==="root"&&o[0]===":"?(o.shift(),l[c]=consumeCSSSelector(o)):c==="threshold"&&o[0]===":"?(o.shift(),l[c]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(l)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let u=asElement(a);if(eltIsDisabled(u)){cleanUpElement(u);return}issueAjaxRequest(r,o,u,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&closest(n,"form")!==null||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let u=function(l){if(!bodyContains(e)){s.removeEventListener(r.trigger,u);return}if(ignoreBoostedAnchorCtrlClick(e,l)||((o||shouldCancel(l,e))&&l.preventDefault(),maybeFilterEvent(r,e,l)))return;let f=getInternalData(l);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&l.stopPropagation(),r.target&&l.target&&!matches(asElement(l.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let c=event.target,d=c.value,m=i.lastValue.get(r);if(m.has(c)&&m.get(c)===d)return;m.set(c,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,l),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,l)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,l))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:u,on:s}),s.addEventListener(r.trigger,u)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,u){let l=asElement(s);if(closest(l,htmx.config.disableSelector)){cleanUpElement(l);return}issueAjaxRequest(o,i,l,u)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let l=a.lastButtonClicked||e,f=getRawAttribute(l,"name");addValueToFormData(f,l.value,o)}let u=findAttributeTargets(e,"hx-include");return forEach(u,function(l){processInputValue(n,r,i,asElement(l),s),matches(l,"form")||forEach(asParentNode(l).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.substr(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(u.indexOf("show:")===0){var o=u.substr(5).split(":");let c=o.pop();var i=o.length>0?o.join(":"):null;r.show=c,r.showTarget=i}else if(u.indexOf("focus-scroll:")===0){let l=u.substr(13);r.focusScroll=l=="true"}else s==0?r.swapStyle=u:logError("Unknown modifier in hx-swap: "+u)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.substr(11),a=!0):i.indexOf("js:")===0&&(i=i.substr(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let u in s)s.hasOwnProperty(u)&&r[u]==null&&(r[u]=s[u])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var u=new Promise(function(E,S){a=E,s=S});n==null&&(n=getDocument().body);let l=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),u;let c=o.targetOverride||asElement(getTarget(n));if(c==null||c==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),u;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let E=getRawAttribute(m,"formaction");E!=null&&(t=E);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let y=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:c,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:y})===!1)return maybeCall(a),u;let T=n,p=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(p){let E=p.split(":"),S=E[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),p=(E[1]||"drop").trim(),d=getInternalData(T),p==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),u;if(p==="abort"){if(d.xhr)return maybeCall(a),u;A=!0}else p==="replace"?triggerEvent(T,"htmx:abort"):p.indexOf("queue")===0&&(b=(p.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let E=getInternalData(r);E&&E.triggerSpec&&E.triggerSpec.queue&&(b=E.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),u}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:c}))return maybeCall(a),P(),u}if(y&&!i&&!confirm(y))return maybeCall(a),P(),u;let M=getHeaders(n,c,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(c,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ue=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,k={boosted:Ie,useUrlParams:ue,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:c,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",k))return maybeCall(a),P(),u;if(t=k.path,e=k.verb,M=k.headers,v=formDataFromObject(k.parameters),q=k.errors,ue=k.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",k),maybeCall(a),P(),u;let qe=t.split("#"),kt=qe[0],we=qe[1],N=t;if(ue&&(N=kt,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,k))return triggerErrorEvent(n,"htmx:invalidPath",k),maybeCall(s),u;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=k.withCredentials,x.timeout=k.timeout,!X.noHeaders){for(let E in M)if(M.hasOwnProperty(E)){let S=M[E];safelySetHeaderValue(x,E,S)}}let O={xhr:x,target:c,requestConfig:k,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let E=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),l(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ce,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;E.length>0&&S==null;){let W=E.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(E){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:E},O)),E}},x.onerror=function(){removeRequestIndicators(ce,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ce,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ce,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),u;var ce=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(E){forEach([x,x.upload],function(S){S.addEventListener(E,function(W){triggerEvent(n,"htmx:xhr:"+E,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Ft=ue?null:encodeParamsForBody(x,n,v);return x.send(Ft),u}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),u=getClosestAttributeValue(e,"hx-replace-url"),l=getInternalData(e).boosted,f=null,c=null;return s?(f="push",c=s):u?(f="replace",c=u):l&&(f="push",c=a||i),c?c==="false"?{}:(c==="true"&&(c=a||i),t.pathInfo.anchor&&c.indexOf("#")===-1&&(c=c+"#"+t.pathInfo.anchor),{type:f,path:c}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}c&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Ut;var oe=!1,Z=Yt();function Yt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function Xt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():Xt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,jt;function Ge(e,t,n,r){Se=e,ze=t,R=n,jt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,Qt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function Qt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function zt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?zt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Gt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Gt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var Jt={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},$t={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Kt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:Jt,defaultWidth:"full"}),time:Ee({formats:$t,defaultWidth:"full"}),dateTime:Ee({formats:Kt,defaultWidth:"full"})};var Zt={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>Zt[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var en={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},tn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},nn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},rn={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},on={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},sn=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:sn,era:te({values:en,defaultWidth:"wide"}),quarter:te({values:tn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:nn,defaultWidth:"wide"}),day:te({values:rn,defaultWidth:"wide"}),dayPeriod:te({values:on,defaultWidth:"wide",formattingValues:an,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(s)?un(s,c=>c.test(a)):ln(s,c=>c.test(a)),l;l=e.valueCallback?e.valueCallback(u):u,l=n.valueCallback?n.valueCallback(l):l;let f=t.slice(a.length);return{value:l,rest:f}}}function ln(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var cn=/^(\d+)(th|st|nd|rd)?/i,fn=/\d+/i,dn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},mn={any:[/^b/i,/^(a|c)/i]},hn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},gn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},pn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},bn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},xn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},vn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:cn,parsePattern:fn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:dn,defaultMatchWidth:"wide",parsePatterns:mn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:hn,defaultMatchWidth:"wide",parsePatterns:gn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:pn,defaultMatchWidth:"wide",parsePatterns:bn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:xn,defaultMatchWidth:"any",parsePatterns:vn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var wn={};function B(){return wn}var Tn=Math.pow(10,8)*24*60*60*1e3,Ar=-Tn,ye=6048e5,ot=864e5;var Sn=3600;var it=Sn*24,Pr=it*7,Cn=it*365.2425,Hn=Cn/12,Mr=Hn*3,De=Symbol.for("constructDateFrom");function L(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return L(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=L.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Pe(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Pe(r),a=Pe(o),s=+i-Ae(i),u=+a-Ae(a);return Math.round((s-u)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ut(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,u,l,f,c,d,m,y;let n=B(),r=(y=(m=(f=(l=t==null?void 0:t.weekStartsOn)!=null?l:(u=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:u.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.weekStartsOn)!=null?y:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ct(e,t){let n=pe(e,t),r=L((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ct(n);return Math.round(r/ye)+1}function be(e,t){var f,c,d,m,y,T,p,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(p=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(c=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:c.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?p:(T=(y=o.locale)==null?void 0:y.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=L((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),u=L((t==null?void 0:t.in)||e,0);u.setFullYear(r,0,i),u.setHours(0,0,0,0);let l=V(u,t);return+n>=+s?r+1:+n>=+l?r:r-1}function dt(e,t){var s,u,l,f,c,d,m,y;let n=B(),r=(y=(m=(f=(l=t==null?void 0:t.firstWeekContainsDate)!=null?l:(u=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:u.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.firstWeekContainsDate)!=null?y:1,o=be(e,t),i=L((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/ye)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Me={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=pe(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ut(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var Et=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},yt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},On=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return Et(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Et(r,t)).replace("{{time}}",yt(o,t))},pt={p:yt,P:On};var Dn=/^D+$/,An=/^Y+$/,Pn=["D","DD","YY","YYYY"];function bt(e){return Dn.test(e)}function xt(e){return An.test(e)}function vt(e,t,n){let r=Mn(e,t,n);if(console.warn(r),Pn.includes(e))throw new RangeError(r)}function Mn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,kn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Fn=/^'([^]*?)'?$/,Rn=/''/g,In=/[a-zA-Z]/;function Le(e,t,n){var f,c,d,m,y,T,p,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(c=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?c:Oe,i=(x=(A=(T=(y=n==null?void 0:n.firstWeekContainsDate)!=null?y:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(p=r.locale)==null?void 0:p.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let u=t.match(kn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=pt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:qn(H)};if(Me[v])return{isToken:!0,value:H};if(v.match(In))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(u=o.localize.preprocessor(s,u));let l={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return u.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Me[v[0]];return X(s,v,o.localize,l)}).join("")}function qn(e){let t=e.match(Fn);return t?t[1].replace(Rn,"'"):e}var Nn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},ke=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Nn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new ke(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Wn=2,Pt,I=JSON.parse(((Pt=document.getElementById("kiosk-data"))==null?void 0:Pt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),Vn=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),_n=h.find("#kiosk"),Bn=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),Dt=h.find(".navigation--next-image"),At=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Un(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,_n,Bn,xe):console.error("Could not start polling"),Dt&&At?Qe(Dt,At):console.error("Menu buttons not found"),jn()})}function Yn(){Ue(Vn,$)}function Xn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function jn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),Xn();break}}),$==null||$.addEventListener("click",Yn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function Qn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Wn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function Mt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function Lt(){je(),ve=!1}function zn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}Mt(e)}function Gn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}document.addEventListener("DOMContentLoaded",()=>{Un()});return Bt(Jn);})();
+var kiosk=(()=>{var de=Object.defineProperty,Rt=Object.defineProperties,It=Object.getOwnPropertyDescriptor,qt=Object.getOwnPropertyDescriptors,Nt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Wt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Wt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>Rt(e,qt(t));var Vt=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},_t=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Nt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=It(t,o))||r.enumerable});return e};var Bt=e=>_t(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Jn={};Vt(Jn,{checkHistoryExists:()=>zn,cleanupFrames:()=>Qn,clientData:()=>Gn,releaseRequestLock:()=>Lt,setRequestLock:()=>Mt,startPolling:()=>Je});var Ut=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(E,S){a=E,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let E=getRawAttribute(m,"formaction");E!=null&&(t=E);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let p=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:p})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let E=y.split(":"),S=E[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(E[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let E=getInternalData(r);E&&E.triggerSpec&&E.triggerSpec.queue&&(b=E.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(p&&!i&&!confirm(p))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,k={boosted:Ie,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",k))return maybeCall(a),P(),l;if(t=k.path,e=k.verb,M=k.headers,v=formDataFromObject(k.parameters),q=k.errors,ce=k.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",k),maybeCall(a),P(),l;let qe=t.split("#"),kt=qe[0],we=qe[1],N=t;if(ce&&(N=kt,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,k))return triggerErrorEvent(n,"htmx:invalidPath",k),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=k.withCredentials,x.timeout=k.timeout,!X.noHeaders){for(let E in M)if(M.hasOwnProperty(E)){let S=M[E];safelySetHeaderValue(x,E,S)}}let O={xhr:x,target:u,requestConfig:k,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let E=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;E.length>0&&S==null;){let W=E.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(E){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:E},O)),E}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(E){forEach([x,x.upload],function(S){S.addEventListener(E,function(W){triggerEvent(n,"htmx:xhr:"+E,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Ft=ce?null:encodeParamsForBody(x,n,v);return x.send(Ft),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Ut;var oe=!1,Z=Yt();function Yt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function Xt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():Xt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,jt;function Ge(e,t,n,r){Se=e,ze=t,R=n,jt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,Qt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function Qt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function zt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?zt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Gt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Gt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var Jt={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},$t={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Kt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:Jt,defaultWidth:"full"}),time:Ee({formats:$t,defaultWidth:"full"}),dateTime:Ee({formats:Kt,defaultWidth:"full"})};var Zt={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>Zt[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var en={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},tn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},nn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},rn={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},on={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},sn=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:sn,era:te({values:en,defaultWidth:"wide"}),quarter:te({values:tn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:nn,defaultWidth:"wide"}),day:te({values:rn,defaultWidth:"wide"}),dayPeriod:te({values:on,defaultWidth:"wide",formattingValues:an,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?cn(s,u=>u.test(a)):ln(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function ln(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function cn(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var un=/^(\d+)(th|st|nd|rd)?/i,fn=/\d+/i,dn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},mn={any:[/^b/i,/^(a|c)/i]},hn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},gn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},pn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},yn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},bn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},xn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},vn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:un,parsePattern:fn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:dn,defaultMatchWidth:"wide",parsePatterns:mn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:hn,defaultMatchWidth:"wide",parsePatterns:gn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:pn,defaultParseWidth:"any"}),day:ne({matchPatterns:yn,defaultMatchWidth:"wide",parsePatterns:bn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:xn,defaultMatchWidth:"any",parsePatterns:vn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var wn={};function B(){return wn}var Tn=Math.pow(10,8)*24*60*60*1e3,Ar=-Tn,pe=6048e5,ot=864e5;var Sn=3600;var it=Sn*24,Pr=it*7,Cn=it*365.2425,Hn=Cn/12,Mr=Hn*3,De=Symbol.for("constructDateFrom");function L(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return L(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=L.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Pe(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Pe(r),a=Pe(o),s=+i-Ae(i),l=+a-Ae(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?p:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=ye(e,t),r=L((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/pe)+1}function be(e,t){var f,u,d,m,p,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(p=o.locale)==null?void 0:p.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=L((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=L((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?p:1,o=be(e,t),i=L((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/pe)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Me={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=ye(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var Et=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},pt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},On=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return Et(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Et(r,t)).replace("{{time}}",pt(o,t))},yt={p:pt,P:On};var Dn=/^D+$/,An=/^Y+$/,Pn=["D","DD","YY","YYYY"];function bt(e){return Dn.test(e)}function xt(e){return An.test(e)}function vt(e,t,n){let r=Mn(e,t,n);if(console.warn(r),Pn.includes(e))throw new RangeError(r)}function Mn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,kn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Fn=/^'([^]*?)'?$/,Rn=/''/g,In=/[a-zA-Z]/;function Le(e,t,n){var f,u,d,m,p,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:Oe,i=(x=(A=(T=(p=n==null?void 0:n.firstWeekContainsDate)!=null?p:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(kn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:qn(H)};if(Me[v])return{isToken:!0,value:H};if(v.match(In))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Me[v[0]];return X(s,v,o.localize,c)}).join("")}function qn(e){let t=e.match(Fn);return t?t[1].replace(Rn,"'"):e}var Nn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},ke=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Nn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new ke(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Wn=2,Pt,I=JSON.parse(((Pt=document.getElementById("kiosk-data"))==null?void 0:Pt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),Vn=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),_n=h.find("#kiosk"),Bn=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),Dt=h.find(".navigation--next-image"),At=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Un(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,_n,Bn,xe):console.error("Could not start polling"),Dt&&At?Qe(Dt,At):console.error("Menu buttons not found"),jn()})}function Yn(){Ue(Vn,$)}function Xn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function jn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),Xn();break}}),$==null||$.addEventListener("click",Yn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function Qn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Wn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function Mt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function Lt(){je(),ve=!1}function zn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}Mt(e)}function Gn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}document.addEventListener("DOMContentLoaded",()=>{Un()});return Bt(Jn);})();
From d4718e11087517e791303193ce711ddbc34ed074 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Mon, 16 Dec 2024 14:37:20 +0000
Subject: [PATCH 03/19] display album/person name
---
internal/config/config.go | 5 ++
internal/immich/immich.go | 76 ++++++++++---------
internal/immich/immich_album.go | 10 ++-
internal/immich/immich_person.go | 12 +++
internal/kiosk/kiosk.go | 14 ++++
internal/routes/routes_image_helpers.go | 13 ++--
.../templates/components/image/metadata.templ | 7 ++
internal/utils/utils.go | 4 +-
8 files changed, 94 insertions(+), 47 deletions(-)
create mode 100644 internal/kiosk/kiosk.go
diff --git a/internal/config/config.go b/internal/config/config.go
index 46f63730..64c57bf7 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -212,6 +212,11 @@ type Config struct {
// CustomCSS use custom css file
CustomCSS bool `json:"customCSS" mapstructure:"custom_css" query:"custom_css" form:"custom_css" default:"true"`
+ // ShowAlbumName whether to display the album name
+ ShowAlbumName bool `json:"showAlbumName" mapstructure:"show_album_name" query:"show_album_name" form:"show_album_name" default:"false"`
+ // ShowPersonName whether to display the person name
+ ShowPersonName bool `json:"showPersonName" mapstructure:"show_person_name" query:"show_person_name" form:"show_person_name" default:"false"`
+
// ShowImageTime whether to display image time
ShowImageTime bool `json:"showImageTime" mapstructure:"show_image_time" query:"show_image_time" form:"show_image_time" default:"false"`
// ImageTimeFormat whether to use 12 of 24 hour format
diff --git a/internal/immich/immich.go b/internal/immich/immich.go
index 3d7656e1..2c07bc62 100644
--- a/internal/immich/immich.go
+++ b/internal/immich/immich.go
@@ -14,6 +14,8 @@ import (
"github.com/patrickmn/go-cache"
"github.com/damongolding/immich-kiosk/internal/config"
+ "github.com/damongolding/immich-kiosk/internal/immich_open_api"
+ "github.com/damongolding/immich-kiosk/internal/kiosk"
)
type ImageOrientation string
@@ -29,11 +31,6 @@ const (
AudioType ImmichAssetType = "AUDIO"
OtherType ImmichAssetType = "OTHER"
- AlbumKeywordAll string = "all"
- AlbumKeywordShared string = "shared"
- AlbumKeywordFavourites string = "favourites"
- AlbumKeywordFavorites string = "favorites"
-
AssetSizeThumbnail string = "thumbnail"
AssetSizeOriginal string = "original"
)
@@ -132,41 +129,46 @@ type Face struct {
}
type ImmichAsset struct {
- ID string `json:"id"`
- DeviceAssetID string `json:"-"` // `json:"deviceAssetId"`
- OwnerID string `json:"-"` // `json:"ownerId"`
- DeviceID string `json:"-"` // `json:"deviceId"`
- LibraryID string `json:"-"` // `json:"libraryId"`
- Type ImmichAssetType `json:"type"`
- OriginalPath string `json:"-"` // `json:"originalPath"`
- OriginalFileName string `json:"originalFileName"`
- OriginalMimeType string `json:"originalMimeType"` // `json:"originalMimeType"`
- Resized bool `json:"-"` // `json:"resized"`
- Thumbhash string `json:"-"` // `json:"thumbhash"`
- FileCreatedAt time.Time `json:"-"` // `json:"fileCreatedAt"`
- FileModifiedAt time.Time `json:"-"` // `json:"fileModifiedAt"`
- LocalDateTime time.Time `json:"localDateTime"` // `json:"localDateTime"`
- UpdatedAt time.Time `json:"-"` // `json:"updatedAt"`
- IsFavorite bool `json:"isFavorite"`
- IsArchived bool `json:"isArchived"`
- IsTrashed bool `json:"isTrashed"`
- Duration string `json:"-"` // `json:"duration"`
- ExifInfo ExifInfo `json:"exifInfo"`
- LivePhotoVideoID any `json:"-"` // `json:"livePhotoVideoId"`
- People []Person `json:"people"`
- UnassignedFaces []Face `json:"unassignedFaces"`
- Checksum string `json:"checksum"` // `json:"checksum"`
- StackCount any `json:"-"` // `json:"stackCount"`
- IsOffline bool `json:"-"` // `json:"isOffline"`
- HasMetadata bool `json:"-"` // `json:"hasMetadata"`
- DuplicateID any `json:"-"` // `json:"duplicateId"`
- RatioWanted ImageOrientation `json:"-"`
- IsPortrait bool `json:"-"`
- IsLandscape bool `json:"-"`
+ ID string `json:"id"`
+ DeviceAssetID string `json:"-"` // `json:"deviceAssetId"`
+ OwnerID string `json:"-"` // `json:"ownerId"`
+ DeviceID string `json:"-"` // `json:"deviceId"`
+ LibraryID string `json:"-"` // `json:"libraryId"`
+ Type ImmichAssetType `json:"type"`
+ OriginalPath string `json:"-"` // `json:"originalPath"`
+ OriginalFileName string `json:"originalFileName"`
+ OriginalMimeType string `json:"originalMimeType"`
+ Resized bool `json:"-"` // `json:"resized"`
+ Thumbhash string `json:"-"` // `json:"thumbhash"`
+ FileCreatedAt time.Time `json:"-"` // `json:"fileCreatedAt"`
+ FileModifiedAt time.Time `json:"-"` // `json:"fileModifiedAt"`
+ LocalDateTime time.Time `json:"localDateTime"`
+ UpdatedAt time.Time `json:"-"` // `json:"updatedAt"`
+ IsFavorite bool `json:"isFavorite"`
+ IsArchived bool `json:"isArchived"`
+ IsTrashed bool `json:"isTrashed"`
+ Duration string `json:"-"` // `json:"duration"`
+ ExifInfo ExifInfo `json:"exifInfo"`
+ LivePhotoVideoID any `json:"-"` // `json:"livePhotoVideoId"`
+ People []Person `json:"people"`
+ UnassignedFaces []Face `json:"unassignedFaces"`
+ Checksum string `json:"checksum"`
+ StackCount any `json:"-"` // `json:"stackCount"`
+ IsOffline bool `json:"-"` // `json:"isOffline"`
+ HasMetadata bool `json:"-"` // `json:"hasMetadata"`
+ DuplicateID any `json:"-"` // `json:"duplicateId"`
+
+ // Data added and used by Kiosk
+ RatioWanted ImageOrientation `json:"-"`
+ IsPortrait bool `json:"-"`
+ IsLandscape bool `json:"-"`
+ KioskSource kiosk.Source `json:"-"`
+ KioskSourceName string `json:"-"`
}
type ImmichAlbum struct {
ID string `json:"id"`
+ AlbumName string `json:"albumName"`
Assets []ImmichAsset `json:"assets"`
AssetCount int `json:"assetCount"`
}
@@ -229,7 +231,7 @@ func NewImage(base config.Config) ImmichAsset {
type ImmichApiCall func(string, string, []byte) ([]byte, error)
type ImmichApiResponse interface {
- ImmichAsset | []ImmichAsset | ImmichAlbum | ImmichAlbums | ImmichPersonStatistics | int | ImmichSearchMetadataResponse | []Face
+ ImmichAsset | []ImmichAsset | ImmichAlbum | ImmichAlbums | ImmichPersonStatistics | int | ImmichSearchMetadataResponse | []Face | immich_open_api.PersonResponseDto
}
func FlushApiCache() {
diff --git a/internal/immich/immich_album.go b/internal/immich/immich_album.go
index 18cedc9b..e080072b 100644
--- a/internal/immich/immich_album.go
+++ b/internal/immich/immich_album.go
@@ -9,6 +9,7 @@ import (
"slices"
"github.com/charmbracelet/log"
+ "github.com/damongolding/immich-kiosk/internal/kiosk"
"github.com/damongolding/immich-kiosk/internal/utils"
)
@@ -38,7 +39,6 @@ func (i *ImmichAsset) albums(requestID string, shared bool) (ImmichAlbums, error
return immichApiFail(albums, err, body, apiUrl.String())
}
-
err = json.Unmarshal(body, &albums)
if err != nil {
return immichApiFail(albums, err, body, apiUrl.String())
@@ -97,21 +97,21 @@ func (i *ImmichAsset) countAssetsInAlbums(albums ImmichAlbums) int {
// AlbumImageCount retrieves the number of images in a specific album from Immich.
func (i *ImmichAsset) AlbumImageCount(albumID string, requestID string) (int, error) {
switch albumID {
- case AlbumKeywordAll:
+ case kiosk.AlbumKeywordAll:
albums, err := i.allAlbums(requestID)
if err != nil {
return 0, fmt.Errorf("failed to get all albums: %w", err)
}
return i.countAssetsInAlbums(albums), nil
- case AlbumKeywordShared:
+ case kiosk.AlbumKeywordShared:
albums, err := i.allSharedAlbums(requestID)
if err != nil {
return 0, fmt.Errorf("failed to get shared albums: %w", err)
}
return i.countAssetsInAlbums(albums), nil
- case AlbumKeywordFavourites, AlbumKeywordFavorites:
+ case kiosk.AlbumKeywordFavourites, kiosk.AlbumKeywordFavorites:
favouriteImagesCount, err := i.favouriteImagesCount(requestID)
if err != nil {
return 0, fmt.Errorf("failed to get favorite images: %w", err)
@@ -158,6 +158,8 @@ func (i *ImmichAsset) RandomImageFromAlbum(albumID, requestID, kioskDeviceID str
return fmt.Errorf("no images found for album %s", albumID)
}
+ i.KioskSourceName = album.AlbumName
+
return nil
}
diff --git a/internal/immich/immich_person.go b/internal/immich/immich_person.go
index 324625e2..0eb6f138 100644
--- a/internal/immich/immich_person.go
+++ b/internal/immich/immich_person.go
@@ -7,6 +7,7 @@ import (
"math/rand/v2"
"net/url"
"path"
+ "strings"
"github.com/charmbracelet/log"
"github.com/google/go-querystring/query"
@@ -206,6 +207,9 @@ func (i *ImmichAsset) RandomImageOfPerson(personID, requestID, kioskDeviceID str
}
*i = img
+
+ i.PersonName(personID)
+
return nil
}
@@ -213,3 +217,11 @@ func (i *ImmichAsset) RandomImageOfPerson(personID, requestID, kioskDeviceID str
apiCache.Delete(apiUrl.String())
return i.RandomImageOfPerson(personID, requestID, kioskDeviceID, isPrefetch)
}
+
+func (i *ImmichAsset) PersonName(personID string) {
+ for _, person := range i.People {
+ if strings.EqualFold(person.ID, personID) {
+ i.KioskSourceName = person.Name
+ }
+ }
+}
diff --git a/internal/kiosk/kiosk.go b/internal/kiosk/kiosk.go
new file mode 100644
index 00000000..64ce474e
--- /dev/null
+++ b/internal/kiosk/kiosk.go
@@ -0,0 +1,14 @@
+package kiosk
+
+type Source string
+
+const (
+ AlbumKeywordAll string = "all"
+ AlbumKeywordShared string = "shared"
+ AlbumKeywordFavourites string = "favourites"
+ AlbumKeywordFavorites string = "favorites"
+
+ SourceAlbums Source = "ALBUM"
+ SourcePerson Source = "PERSON"
+ SourceRandom Source = "RANDOM"
+)
diff --git a/internal/routes/routes_image_helpers.go b/internal/routes/routes_image_helpers.go
index 3034600f..19714fb8 100644
--- a/internal/routes/routes_image_helpers.go
+++ b/internal/routes/routes_image_helpers.go
@@ -11,6 +11,7 @@ import (
"github.com/damongolding/immich-kiosk/internal/common"
"github.com/damongolding/immich-kiosk/internal/config"
"github.com/damongolding/immich-kiosk/internal/immich"
+ "github.com/damongolding/immich-kiosk/internal/kiosk"
imageComponent "github.com/damongolding/immich-kiosk/internal/templates/components/image"
"github.com/damongolding/immich-kiosk/internal/utils"
"github.com/damongolding/immich-kiosk/internal/webhooks"
@@ -82,25 +83,25 @@ func retrieveImage(immichImage *immich.ImmichAsset, pickedAsset utils.WeightedAs
defer viewDataCacheMutex.Unlock()
switch pickedAsset.Type {
- case "ALBUM":
+ case kiosk.SourceAlbums:
switch pickedAsset.ID {
- case immich.AlbumKeywordAll:
+ case kiosk.AlbumKeywordAll:
pickedAlbumID, err := immichImage.RandomAlbumFromAllAlbums(requestID, excludedAlbums)
if err != nil {
return err
}
pickedAsset.ID = pickedAlbumID
- case immich.AlbumKeywordShared:
+ case kiosk.AlbumKeywordShared:
pickedAlbumID, err := immichImage.RandomAlbumFromSharedAlbums(requestID, excludedAlbums)
if err != nil {
return err
}
pickedAsset.ID = pickedAlbumID
- case immich.AlbumKeywordFavourites, immich.AlbumKeywordFavorites:
+ case kiosk.AlbumKeywordFavourites, kiosk.AlbumKeywordFavorites:
return immichImage.RandomImageFromFavourites(requestID, kioskDeviceID, isPrefetch)
}
return immichImage.RandomImageFromAlbum(pickedAsset.ID, requestID, kioskDeviceID, isPrefetch)
- case "PERSON":
+ case kiosk.SourcePerson:
return immichImage.RandomImageOfPerson(pickedAsset.ID, requestID, kioskDeviceID, isPrefetch)
default:
return immichImage.RandomImage(requestID, kioskDeviceID, isPrefetch)
@@ -148,6 +149,8 @@ func processImage(immichImage *immich.ImmichAsset, requestConfig config.Config,
return nil, err
}
+ immichImage.KioskSource = pickedImage.Type
+
return fetchImagePreview(immichImage, requestID, kioskDeviceID, isPrefetch)
}
diff --git a/internal/templates/components/image/metadata.templ b/internal/templates/components/image/metadata.templ
index 0bb834f8..9c5e8ffa 100644
--- a/internal/templates/components/image/metadata.templ
+++ b/internal/templates/components/image/metadata.templ
@@ -9,6 +9,7 @@ import (
"github.com/damongolding/immich-kiosk/internal/common"
"github.com/damongolding/immich-kiosk/internal/config"
"github.com/damongolding/immich-kiosk/internal/immich"
+ "github.com/damongolding/immich-kiosk/internal/kiosk"
"github.com/damongolding/immich-kiosk/internal/utils"
)
@@ -107,9 +108,15 @@ func ImageDateTime(viewData common.ViewData, imageIndex int) string {
// imageMetadata renders the metadata for an image, including date, time, EXIF information, location, and ID.
// The display of each piece of information is controlled by the ViewData settings.
templ imageMetadata(viewData common.ViewData, imageIndex int) {
+ {{ showAlbemPersonName := (viewData.ShowAlbumName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourceAlbums) || (viewData.ShowPersonName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourcePerson) }}
{{ showDateTime := viewData.ShowImageDate || viewData.ShowImageTime }}
{{ showDescription := viewData.ShowImageDescription && viewData.Images[imageIndex].ImmichImage.ExifInfo.Description != "" }}
+ if showAlbemPersonName {
+
+ { viewData.Images[imageIndex].ImmichImage.KioskSourceName }
+
+ }
if showDateTime {
{ ImageDateTime(viewData, imageIndex) }
diff --git a/internal/utils/utils.go b/internal/utils/utils.go
index 37357b32..c1374df2 100644
--- a/internal/utils/utils.go
+++ b/internal/utils/utils.go
@@ -37,6 +37,7 @@ import (
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/log"
"github.com/damongolding/immich-kiosk/internal/config"
+ "github.com/damongolding/immich-kiosk/internal/kiosk"
"github.com/disintegration/imaging"
"github.com/google/uuid"
@@ -55,8 +56,9 @@ const (
// WeightedAsset represents an asset with a type and ID
type WeightedAsset struct {
- Type string
+ Type kiosk.Source
ID string
+ Name string
}
// AssetWithWeighting represents a WeightedAsset with an associated weight value
From 180ea6efe696e1bdd790f5830b208229f138f254 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Mon, 16 Dec 2024 15:49:18 +0000
Subject: [PATCH 04/19] typos
---
internal/routes/routes_image_helpers.go | 4 ++--
internal/templates/components/image/metadata.templ | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/internal/routes/routes_image_helpers.go b/internal/routes/routes_image_helpers.go
index 19714fb8..9b7bd1c8 100644
--- a/internal/routes/routes_image_helpers.go
+++ b/internal/routes/routes_image_helpers.go
@@ -37,7 +37,7 @@ func gatherPeopleAndAlbums(immichImage *immich.ImmichAsset, requestConfig config
}
peopleAndAlbums = append(peopleAndAlbums, utils.AssetWithWeighting{
- Asset: utils.WeightedAsset{Type: "PERSON", ID: person},
+ Asset: utils.WeightedAsset{Type: kiosk.SourcePerson, ID: person},
Weight: personAssetCount,
})
}
@@ -55,7 +55,7 @@ func gatherPeopleAndAlbums(immichImage *immich.ImmichAsset, requestConfig config
}
peopleAndAlbums = append(peopleAndAlbums, utils.AssetWithWeighting{
- Asset: utils.WeightedAsset{Type: "ALBUM", ID: album},
+ Asset: utils.WeightedAsset{Type: kiosk.SourceAlbums, ID: album},
Weight: albumAssetCount,
})
}
diff --git a/internal/templates/components/image/metadata.templ b/internal/templates/components/image/metadata.templ
index 9c5e8ffa..ac3f21f5 100644
--- a/internal/templates/components/image/metadata.templ
+++ b/internal/templates/components/image/metadata.templ
@@ -108,11 +108,11 @@ func ImageDateTime(viewData common.ViewData, imageIndex int) string {
// imageMetadata renders the metadata for an image, including date, time, EXIF information, location, and ID.
// The display of each piece of information is controlled by the ViewData settings.
templ imageMetadata(viewData common.ViewData, imageIndex int) {
- {{ showAlbemPersonName := (viewData.ShowAlbumName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourceAlbums) || (viewData.ShowPersonName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourcePerson) }}
+ {{ showAlbumPersonName := (viewData.ShowAlbumName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourceAlbums) || (viewData.ShowPersonName && viewData.Images[imageIndex].ImmichImage.KioskSource == kiosk.SourcePerson) }}
{{ showDateTime := viewData.ShowImageDate || viewData.ShowImageTime }}
{{ showDescription := viewData.ShowImageDescription && viewData.Images[imageIndex].ImmichImage.ExifInfo.Description != "" }}
- if showAlbemPersonName {
+ if showAlbumPersonName {
{ viewData.Images[imageIndex].ImmichImage.KioskSourceName }
From 4999cf6045fb71bc085d0ee759801dbd9464e493 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Mon, 16 Dec 2024 18:11:01 +0000
Subject: [PATCH 05/19] Update taskfile.yml
---
taskfile.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/taskfile.yml b/taskfile.yml
index 58729261..af7574cf 100644
--- a/taskfile.yml
+++ b/taskfile.yml
@@ -1,6 +1,6 @@
version: "3"
env:
- VERSION: 0.14.5
+ VERSION: 0.14.6-beta.1
includes:
frontend:
From 643e2bc94f2488c0ef676d9cb36ecd89cd59d374 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 10:23:12 +0000
Subject: [PATCH 06/19] fix for multiple albums and people
---
internal/templates/views/views_home.templ | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/internal/templates/views/views_home.templ b/internal/templates/views/views_home.templ
index ef49a5e1..07a29cd1 100644
--- a/internal/templates/views/views_home.templ
+++ b/internal/templates/views/views_home.templ
@@ -76,9 +76,17 @@ templ Home(viewData common.ViewData) {
}
From ef75086cc361f453f500bac7ab18226233108471 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 10:29:49 +0000
Subject: [PATCH 07/19] Update taskfile.yml
---
taskfile.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/taskfile.yml b/taskfile.yml
index af7574cf..d7b05e91 100644
--- a/taskfile.yml
+++ b/taskfile.yml
@@ -1,6 +1,6 @@
version: "3"
env:
- VERSION: 0.14.6-beta.1
+ VERSION: 0.14.6-beta.2
includes:
frontend:
From ae56b08a9d0048f28908cf984b81314c49650582 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 11:31:56 +0000
Subject: [PATCH 08/19] catch is requestData, which happens when a refresh is
called
---
internal/routes/routes_cache.go | 2 +-
internal/routes/routes_clock.go | 2 +-
internal/routes/routes_home.go | 2 +-
internal/routes/routes_image.go | 4 ++--
internal/routes/routes_previous_image.go | 2 +-
internal/routes/routes_sleep.go | 2 +-
internal/routes/routes_weather.go | 2 +-
internal/routes/routes_webhooks.go | 2 +-
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/internal/routes/routes_cache.go b/internal/routes/routes_cache.go
index eb612455..3a08cb7e 100644
--- a/internal/routes/routes_cache.go
+++ b/internal/routes/routes_cache.go
@@ -15,7 +15,7 @@ func FlushCache(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_clock.go b/internal/routes/routes_clock.go
index 1d40827a..a16d278a 100644
--- a/internal/routes/routes_clock.go
+++ b/internal/routes/routes_clock.go
@@ -15,7 +15,7 @@ func Clock(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_home.go b/internal/routes/routes_home.go
index aceefc45..c72e8f7b 100644
--- a/internal/routes/routes_home.go
+++ b/internal/routes/routes_home.go
@@ -24,7 +24,7 @@ func Home(baseConfig *config.Config) echo.HandlerFunc {
})
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_image.go b/internal/routes/routes_image.go
index 062789f2..143517d3 100644
--- a/internal/routes/routes_image.go
+++ b/internal/routes/routes_image.go
@@ -19,7 +19,7 @@ func NewImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
@@ -71,7 +71,7 @@ func NewRawImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_previous_image.go b/internal/routes/routes_previous_image.go
index a4db192d..f9d7b5f0 100644
--- a/internal/routes/routes_previous_image.go
+++ b/internal/routes/routes_previous_image.go
@@ -24,7 +24,7 @@ func PreviousImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_sleep.go b/internal/routes/routes_sleep.go
index aa0ca53c..2fe41b98 100644
--- a/internal/routes/routes_sleep.go
+++ b/internal/routes/routes_sleep.go
@@ -17,7 +17,7 @@ func Sleep(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_weather.go b/internal/routes/routes_weather.go
index c7bae9aa..ddbdc2ac 100644
--- a/internal/routes/routes_weather.go
+++ b/internal/routes/routes_weather.go
@@ -15,7 +15,7 @@ func Weather(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
diff --git a/internal/routes/routes_webhooks.go b/internal/routes/routes_webhooks.go
index b809f1dd..a4fc8009 100644
--- a/internal/routes/routes_webhooks.go
+++ b/internal/routes/routes_webhooks.go
@@ -19,7 +19,7 @@ func Webhooks(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil {
+ if err != nil || requestData == nil {
return err
}
From 7a4d6c657428925046210416916c825889ab9dd8 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 11:50:57 +0000
Subject: [PATCH 09/19] better refresh messaging
---
internal/routes/routes_cache.go | 7 ++++++-
internal/routes/routes_clock.go | 7 ++++++-
internal/routes/routes_home.go | 7 ++++++-
internal/routes/routes_image.go | 14 ++++++++++++--
internal/routes/routes_previous_image.go | 7 ++++++-
internal/routes/routes_sleep.go | 7 ++++++-
internal/routes/routes_weather.go | 7 ++++++-
internal/routes/routes_webhooks.go | 7 ++++++-
8 files changed, 54 insertions(+), 9 deletions(-)
diff --git a/internal/routes/routes_cache.go b/internal/routes/routes_cache.go
index 3a08cb7e..0369c78e 100644
--- a/internal/routes/routes_cache.go
+++ b/internal/routes/routes_cache.go
@@ -15,10 +15,15 @@ func FlushCache(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
viewDataCacheMutex.Lock()
defer viewDataCacheMutex.Unlock()
diff --git a/internal/routes/routes_clock.go b/internal/routes/routes_clock.go
index a16d278a..688e8762 100644
--- a/internal/routes/routes_clock.go
+++ b/internal/routes/routes_clock.go
@@ -15,10 +15,15 @@ func Clock(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
diff --git a/internal/routes/routes_home.go b/internal/routes/routes_home.go
index c72e8f7b..711a550d 100644
--- a/internal/routes/routes_home.go
+++ b/internal/routes/routes_home.go
@@ -24,10 +24,15 @@ func Home(baseConfig *config.Config) echo.HandlerFunc {
})
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
diff --git a/internal/routes/routes_image.go b/internal/routes/routes_image.go
index 143517d3..fc50b8fa 100644
--- a/internal/routes/routes_image.go
+++ b/internal/routes/routes_image.go
@@ -19,10 +19,15 @@ func NewImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
deviceID := requestData.DeviceID
@@ -71,10 +76,15 @@ func NewRawImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
diff --git a/internal/routes/routes_previous_image.go b/internal/routes/routes_previous_image.go
index f9d7b5f0..c0c9b570 100644
--- a/internal/routes/routes_previous_image.go
+++ b/internal/routes/routes_previous_image.go
@@ -24,10 +24,15 @@ func PreviousImage(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
kioskDeviceID := requestData.DeviceID
diff --git a/internal/routes/routes_sleep.go b/internal/routes/routes_sleep.go
index 2fe41b98..faea6628 100644
--- a/internal/routes/routes_sleep.go
+++ b/internal/routes/routes_sleep.go
@@ -17,10 +17,15 @@ func Sleep(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
diff --git a/internal/routes/routes_weather.go b/internal/routes/routes_weather.go
index ddbdc2ac..52c8eb44 100644
--- a/internal/routes/routes_weather.go
+++ b/internal/routes/routes_weather.go
@@ -15,10 +15,15 @@ func Weather(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestID := requestData.RequestID
weatherLocation := c.QueryParam("weather")
diff --git a/internal/routes/routes_webhooks.go b/internal/routes/routes_webhooks.go
index a4fc8009..d034546d 100644
--- a/internal/routes/routes_webhooks.go
+++ b/internal/routes/routes_webhooks.go
@@ -19,10 +19,15 @@ func Webhooks(baseConfig *config.Config) echo.HandlerFunc {
return func(c echo.Context) error {
requestData, err := InitializeRequestData(c, baseConfig)
- if err != nil || requestData == nil {
+ if err != nil {
return err
}
+ if requestData == nil {
+ log.Info("Refreshing clients")
+ return nil
+ }
+
requestConfig := requestData.RequestConfig
requestID := requestData.RequestID
kioskDeviceID := requestData.DeviceID
From f017f82c6b7b6899ef56e25487a3ac8c28a05291 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 11:57:44 +0000
Subject: [PATCH 10/19] Update routes_home.go
---
internal/routes/routes_home.go | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/internal/routes/routes_home.go b/internal/routes/routes_home.go
index 711a550d..34a4fb29 100644
--- a/internal/routes/routes_home.go
+++ b/internal/routes/routes_home.go
@@ -45,11 +45,9 @@ func Home(baseConfig *config.Config) echo.HandlerFunc {
var customCss []byte
- if utils.FileExists("./custom.css") {
- customCss, err = os.ReadFile("./custom.css")
- if err != nil {
- log.Error("reading custom css", "err", err)
- }
+ customCss, err = loadCustomCSS()
+ if err != nil {
+ log.Error("loading custom css", "err", err)
}
queryParams := c.QueryParams()
@@ -68,3 +66,10 @@ func Home(baseConfig *config.Config) echo.HandlerFunc {
return Render(c, http.StatusOK, views.Home(viewData))
}
}
+
+func loadCustomCSS() ([]byte, error) {
+ if !utils.FileExists("./custom.css") {
+ return nil, nil
+ }
+ return os.ReadFile("./custom.css")
+}
From 62607dd4aff448c5d6a8b8977c4db3f8d4f233d2 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 12:22:43 +0000
Subject: [PATCH 11/19] Update immich_helpers.go
---
internal/immich/immich_helpers.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/internal/immich/immich_helpers.go b/internal/immich/immich_helpers.go
index 478c1ecf..482ffcea 100644
--- a/internal/immich/immich_helpers.go
+++ b/internal/immich/immich_helpers.go
@@ -211,6 +211,7 @@ func (i *ImmichAsset) addRatio() {
// AssetInfo fetches the image information from Immich
func (i *ImmichAsset) AssetInfo(requestID string) {
+
var immichAsset ImmichAsset
u, err := url.Parse(requestConfig.ImmichUrl)
From 8d3c6ea492f7382d0c7769fdc3db3942f01f39e0 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 12:30:42 +0000
Subject: [PATCH 12/19] push err up a level on AssetInfo
---
internal/immich/immich_helpers.go | 13 ++++++-------
internal/routes/routes_previous_image.go | 5 ++++-
internal/routes/routes_webhooks.go | 5 ++++-
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/internal/immich/immich_helpers.go b/internal/immich/immich_helpers.go
index 482ffcea..56e2115c 100644
--- a/internal/immich/immich_helpers.go
+++ b/internal/immich/immich_helpers.go
@@ -210,14 +210,13 @@ func (i *ImmichAsset) addRatio() {
}
// AssetInfo fetches the image information from Immich
-func (i *ImmichAsset) AssetInfo(requestID string) {
+func (i *ImmichAsset) AssetInfo(requestID string) error {
var immichAsset ImmichAsset
u, err := url.Parse(requestConfig.ImmichUrl)
if err != nil {
- log.Error(err)
- return
+ return err
}
apiUrl := url.URL{
@@ -230,18 +229,18 @@ func (i *ImmichAsset) AssetInfo(requestID string) {
body, err := immichApiCall("GET", apiUrl.String(), nil)
if err != nil {
_, err = immichApiFail(immichAsset, err, body, apiUrl.String())
- log.Error("fetching asset info", "err", err)
- return
+ return fmt.Errorf("fetching asset info: err %v", err)
}
err = json.Unmarshal(body, &immichAsset)
if err != nil {
_, err = immichApiFail(immichAsset, err, body, apiUrl.String())
- log.Error("fetching asset info", "err", err)
- return
+ return fmt.Errorf("fetching asset info: err %v", err)
}
*i = immichAsset
+
+ return nil
}
// ImagePreview fetches the raw image data from Immich
diff --git a/internal/routes/routes_previous_image.go b/internal/routes/routes_previous_image.go
index c0c9b570..d06bdddb 100644
--- a/internal/routes/routes_previous_image.go
+++ b/internal/routes/routes_previous_image.go
@@ -76,7 +76,10 @@ func PreviousImage(baseConfig *config.Config) echo.HandlerFunc {
go func(image *immich.ImmichAsset, requestID string, wg *sync.WaitGroup) {
defer wg.Done()
- image.AssetInfo(requestID)
+ err := image.AssetInfo(requestID)
+ if err != nil {
+ log.Error(err)
+ }
}(&image, requestID, &wg)
diff --git a/internal/routes/routes_webhooks.go b/internal/routes/routes_webhooks.go
index d034546d..9d389c73 100644
--- a/internal/routes/routes_webhooks.go
+++ b/internal/routes/routes_webhooks.go
@@ -96,7 +96,10 @@ func Webhooks(baseConfig *config.Config) echo.HandlerFunc {
image := immich.NewImage(requestConfig)
image.ID = imageID
- image.AssetInfo(requestID)
+ err := image.AssetInfo(requestID)
+ if err != nil {
+ log.Error(err)
+ }
viewData.Images[i] = common.ViewImageData{
ImmichImage: image,
From 30eb0a4e4c14e3bc6292f7fdd00be6f37bdbd27a Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 13:01:23 +0000
Subject: [PATCH 13/19] docs
---
README.md | 4 ++++
config.example.yaml | 14 ++++++++------
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index a137635a..0acbc513 100644
--- a/README.md
+++ b/README.md
@@ -262,6 +262,8 @@ services:
KIOSK_IMAGE_EFFECT_AMOUNT: 120
KIOSK_USE_ORIGINAL_IMAGE: false
# Image metadata
+ KIOSK_SHOW_ALBUM_NAME: false
+ KIOSK_SHOW_PERSON_NAME: false
KIOSK_SHOW_IMAGE_TIME: false
KIOSK_IMAGE_TIME_FORMAT: 24
KIOSK_SHOW_IMAGE_DATE: false
@@ -357,6 +359,8 @@ See the file `config.example.yaml` for an example config file
| [image_effect](#image-effects) | KIOSK_IMAGE_EFFECT | zoom \| smart-zoom | "" | Add an effect to images. |
| [image_effect_amount](#image-effects) | KIOSK_IMAGE_EFFECT_AMOUNT | int | 120 | Set the intensity of the image effect. Use a number between 100 (minimum) and higher, without the % symbol. |
| use_original_image | KIOSK_USE_ORIGINAL_IMAGE | bool | false | Use the original image. NOTE: If the original is not a png, gif, jpeg or webp Kiosk will fallback to using the preview. |
+| show_album_name | KIOSK_SHOW_ALBUM_NAME | bool | false | Display the album name if one or more album IDs are specified. |
+| show_person_name | KIOSK_SHOW_PERSON_NAME | bool | false | Display the person name if one or more person IDs are specified. |
| show_image_time | KIOSK_SHOW_IMAGE_TIME | bool | false | Display image time from METADATA (if available). |
| image_time_format | KIOSK_IMAGE_TIME_FORMAT | 12 \| 24 | 24 | Display image time in either 12 hour or 24 hour format. Can either be 12 or 24. |
| show_image_date | KIOSK_SHOW_IMAGE_DATE | bool | false | Display the image date from METADATA (if available). |
diff --git a/config.example.yaml b/config.example.yaml
index ce8e8328..d366e319 100644
--- a/config.example.yaml
+++ b/config.example.yaml
@@ -3,9 +3,9 @@ immich_api_key: ""
immich_url: ""
## Clock
-show_time: false # true or false
+show_time: false
time_format: 24 # 12 or 24
-show_date: false # true or false
+show_date: false
date_format: YYYY/MM/DD
## Kiosk behaviour
@@ -48,15 +48,17 @@ cross_fade_transition_duration: 1 # in seconds
## Image display settings
show_progress: false # display a progress bar
-image_fit: contain # how the image fits the screen. Options are none, contain and cover
-image_effect: none
+image_fit: contain # Options are none, contain and cover
+image_effect: none # Options are none, zoom and smart-zoom
image_effect_amount: 120
use_original_image: false # use the original file.
## Image METADATA
-show_image_time: false # true or false
+show_album_name: false
+show_person_name: false
+show_image_time: false
image_time_format: 24 # 12 or 24
-show_image_date: false # true or false
+show_image_date: false
image_date_format: YYYY-MM-DD
show_image_description: false
show_image_exif: false
From 903989804504d2bd4b12348d024aa1be1054bcfc Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 13:02:16 +0000
Subject: [PATCH 14/19] Update taskfile.yml
---
taskfile.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/taskfile.yml b/taskfile.yml
index d7b05e91..d0ff9e3d 100644
--- a/taskfile.yml
+++ b/taskfile.yml
@@ -1,6 +1,6 @@
version: "3"
env:
- VERSION: 0.14.6-beta.2
+ VERSION: 0.14.6
includes:
frontend:
From 7698b897fabffe2f6f057027c4b995ea178ca60e Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 13:14:11 +0000
Subject: [PATCH 15/19] Update codeql.yml
---
.github/workflows/codeql.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index c4ff25b3..6ba95cd8 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -34,7 +34,7 @@ jobs:
include:
- language: go
build-mode: manual
- - language: javascript-typescript
+ - language: typescript
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
From c6b0985bbefb2a40e6b01c729cccb1a3ac75b927 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 14:41:51 +0000
Subject: [PATCH 16/19] move configRequest listener to TS
---
frontend/public/assets/js/kiosk.js | 2 +-
frontend/src/ts/kiosk.ts | 47 +++++++++++++++++++++++
internal/templates/views/views_home.templ | 18 ---------
3 files changed, 48 insertions(+), 19 deletions(-)
diff --git a/frontend/public/assets/js/kiosk.js b/frontend/public/assets/js/kiosk.js
index 1d7b8a3a..e32d785a 100644
--- a/frontend/public/assets/js/kiosk.js
+++ b/frontend/public/assets/js/kiosk.js
@@ -1 +1 @@
-var kiosk=(()=>{var de=Object.defineProperty,Rt=Object.defineProperties,It=Object.getOwnPropertyDescriptor,qt=Object.getOwnPropertyDescriptors,Nt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Wt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Wt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>Rt(e,qt(t));var Vt=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},_t=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Nt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=It(t,o))||r.enumerable});return e};var Bt=e=>_t(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Jn={};Vt(Jn,{checkHistoryExists:()=>zn,cleanupFrames:()=>Qn,clientData:()=>Gn,releaseRequestLock:()=>Lt,setRequestLock:()=>Mt,startPolling:()=>Je});var Ut=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML('
'+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n
=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(E,S){a=E,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let E=getRawAttribute(m,"formaction");E!=null&&(t=E);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let p=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:p})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let E=y.split(":"),S=E[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(E[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let E=getInternalData(r);E&&E.triggerSpec&&E.triggerSpec.queue&&(b=E.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(p&&!i&&!confirm(p))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,k={boosted:Ie,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",k))return maybeCall(a),P(),l;if(t=k.path,e=k.verb,M=k.headers,v=formDataFromObject(k.parameters),q=k.errors,ce=k.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",k),maybeCall(a),P(),l;let qe=t.split("#"),kt=qe[0],we=qe[1],N=t;if(ce&&(N=kt,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,k))return triggerErrorEvent(n,"htmx:invalidPath",k),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=k.withCredentials,x.timeout=k.timeout,!X.noHeaders){for(let E in M)if(M.hasOwnProperty(E)){let S=M[E];safelySetHeaderValue(x,E,S)}}let O={xhr:x,target:u,requestConfig:k,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let E=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;E.length>0&&S==null;){let W=E.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(E){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:E},O)),E}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(E){forEach([x,x.upload],function(S){S.addEventListener(E,function(W){triggerEvent(n,"htmx:xhr:"+E,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Ft=ce?null:encodeParamsForBody(x,n,v);return x.send(Ft),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Ut;var oe=!1,Z=Yt();function Yt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function Xt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():Xt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,jt;function Ge(e,t,n,r){Se=e,ze=t,R=n,jt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,Qt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function Qt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function zt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?zt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Gt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Gt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var Jt={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},$t={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Kt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:Jt,defaultWidth:"full"}),time:Ee({formats:$t,defaultWidth:"full"}),dateTime:Ee({formats:Kt,defaultWidth:"full"})};var Zt={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>Zt[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var en={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},tn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},nn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},rn={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},on={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},sn=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:sn,era:te({values:en,defaultWidth:"wide"}),quarter:te({values:tn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:nn,defaultWidth:"wide"}),day:te({values:rn,defaultWidth:"wide"}),dayPeriod:te({values:on,defaultWidth:"wide",formattingValues:an,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?cn(s,u=>u.test(a)):ln(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function ln(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function cn(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var un=/^(\d+)(th|st|nd|rd)?/i,fn=/\d+/i,dn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},mn={any:[/^b/i,/^(a|c)/i]},hn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},gn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},pn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},yn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},bn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},xn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},vn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:un,parsePattern:fn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:dn,defaultMatchWidth:"wide",parsePatterns:mn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:hn,defaultMatchWidth:"wide",parsePatterns:gn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:pn,defaultParseWidth:"any"}),day:ne({matchPatterns:yn,defaultMatchWidth:"wide",parsePatterns:bn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:xn,defaultMatchWidth:"any",parsePatterns:vn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var wn={};function B(){return wn}var Tn=Math.pow(10,8)*24*60*60*1e3,Ar=-Tn,pe=6048e5,ot=864e5;var Sn=3600;var it=Sn*24,Pr=it*7,Cn=it*365.2425,Hn=Cn/12,Mr=Hn*3,De=Symbol.for("constructDateFrom");function L(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return L(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=L.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Pe(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Pe(r),a=Pe(o),s=+i-Ae(i),l=+a-Ae(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?p:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=ye(e,t),r=L((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/pe)+1}function be(e,t){var f,u,d,m,p,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(p=o.locale)==null?void 0:p.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=L((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=L((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?p:1,o=be(e,t),i=L((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/pe)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Me={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=ye(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var Et=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},pt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},On=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return Et(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Et(r,t)).replace("{{time}}",pt(o,t))},yt={p:pt,P:On};var Dn=/^D+$/,An=/^Y+$/,Pn=["D","DD","YY","YYYY"];function bt(e){return Dn.test(e)}function xt(e){return An.test(e)}function vt(e,t,n){let r=Mn(e,t,n);if(console.warn(r),Pn.includes(e))throw new RangeError(r)}function Mn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,kn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Fn=/^'([^]*?)'?$/,Rn=/''/g,In=/[a-zA-Z]/;function Le(e,t,n){var f,u,d,m,p,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:Oe,i=(x=(A=(T=(p=n==null?void 0:n.firstWeekContainsDate)!=null?p:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(kn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:qn(H)};if(Me[v])return{isToken:!0,value:H};if(v.match(In))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Me[v[0]];return X(s,v,o.localize,c)}).join("")}function qn(e){let t=e.match(Fn);return t?t[1].replace(Rn,"'"):e}var Nn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},ke=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Nn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new ke(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Wn=2,Pt,I=JSON.parse(((Pt=document.getElementById("kiosk-data"))==null?void 0:Pt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),Vn=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),_n=h.find("#kiosk"),Bn=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),Dt=h.find(".navigation--next-image"),At=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Un(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,_n,Bn,xe):console.error("Could not start polling"),Dt&&At?Qe(Dt,At):console.error("Menu buttons not found"),jn()})}function Yn(){Ue(Vn,$)}function Xn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function jn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),Xn();break}}),$==null||$.addEventListener("click",Yn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function Qn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Wn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function Mt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function Lt(){je(),ve=!1}function zn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}Mt(e)}function Gn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}document.addEventListener("DOMContentLoaded",()=>{Un()});return Bt(Jn);})();
+var kiosk=(()=>{var de=Object.defineProperty,It=Object.defineProperties,qt=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Vt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>It(e,Nt(t));var _t=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=qt(t,o))||r.enumerable});return e};var Ut=e=>Bt(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Zn={};_t(Zn,{checkHistoryExists:()=>Gn,cleanupFrames:()=>zn,clientData:()=>Jn,releaseRequestLock:()=>Lt,setRequestLock:()=>kt,startPolling:()=>Je});var Yt=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(E,S){a=E,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let E=getRawAttribute(m,"formaction");E!=null&&(t=E);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let p=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:p})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let E=y.split(":"),S=E[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(E[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let E=getInternalData(r);E&&E.triggerSpec&&E.triggerSpec.queue&&(b=E.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(p&&!i&&!confirm(p))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,L={boosted:Ie,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",L))return maybeCall(a),P(),l;if(t=L.path,e=L.verb,M=L.headers,v=formDataFromObject(L.parameters),q=L.errors,ce=L.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",L),maybeCall(a),P(),l;let qe=t.split("#"),Ft=qe[0],we=qe[1],N=t;if(ce&&(N=Ft,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,L))return triggerErrorEvent(n,"htmx:invalidPath",L),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=L.withCredentials,x.timeout=L.timeout,!X.noHeaders){for(let E in M)if(M.hasOwnProperty(E)){let S=M[E];safelySetHeaderValue(x,E,S)}}let O={xhr:x,target:u,requestConfig:L,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let E=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;E.length>0&&S==null;){let W=E.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(E){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:E},O)),E}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(E){forEach([x,x.upload],function(S){S.addEventListener(E,function(W){triggerEvent(n,"htmx:xhr:"+E,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Rt=ce?null:encodeParamsForBody(x,n,v);return x.send(Rt),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Yt;var oe=!1,Z=Xt();function Xt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function jt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():jt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,Qt;function Ge(e,t,n,r){Se=e,ze=t,R=n,Qt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,zt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function zt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function Gt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?Gt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Jt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Jt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $t={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kt={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:$t,defaultWidth:"full"}),time:Ee({formats:Kt,defaultWidth:"full"}),dateTime:Ee({formats:Zt,defaultWidth:"full"})};var en={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>en[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var tn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},on={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ln=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:ln,era:te({values:tn,defaultWidth:"wide"}),quarter:te({values:nn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rn,defaultWidth:"wide"}),day:te({values:on,defaultWidth:"wide"}),dayPeriod:te({values:an,defaultWidth:"wide",formattingValues:sn,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?un(s,u=>u.test(a)):cn(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function cn(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var fn=/^(\d+)(th|st|nd|rd)?/i,dn=/\d+/i,mn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},hn={any:[/^b/i,/^(a|c)/i]},gn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},En={any:[/1/i,/2/i,/3/i,/4/i]},pn={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},bn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},xn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},wn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:fn,parsePattern:dn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:gn,defaultMatchWidth:"wide",parsePatterns:En,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:pn,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:bn,defaultMatchWidth:"wide",parsePatterns:xn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:vn,defaultMatchWidth:"any",parsePatterns:wn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var Tn={};function B(){return Tn}var Sn=Math.pow(10,8)*24*60*60*1e3,kr=-Sn,pe=6048e5,ot=864e5;var Cn=3600;var it=Cn*24,Lr=it*7,Hn=it*365.2425,On=Hn/12,Fr=On*3,De=Symbol.for("constructDateFrom");function k(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return k(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=k.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Pe(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Pe(r),a=Pe(o),s=+i-Ae(i),l=+a-Ae(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?p:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=ye(e,t),r=k((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/pe)+1}function be(e,t){var f,u,d,m,p,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(p=o.locale)==null?void 0:p.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=k((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=k((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?p:1,o=be(e,t),i=k((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/pe)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Me={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=ye(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var Et=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},pt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Dn=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return Et(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Et(r,t)).replace("{{time}}",pt(o,t))},yt={p:pt,P:Dn};var An=/^D+$/,Pn=/^Y+$/,Mn=["D","DD","YY","YYYY"];function bt(e){return An.test(e)}function xt(e){return Pn.test(e)}function vt(e,t,n){let r=kn(e,t,n);if(console.warn(r),Mn.includes(e))throw new RangeError(r)}function kn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Fn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Rn=/^'([^]*?)'?$/,In=/''/g,qn=/[a-zA-Z]/;function ke(e,t,n){var f,u,d,m,p,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:Oe,i=(x=(A=(T=(p=n==null?void 0:n.firstWeekContainsDate)!=null?p:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(Fn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:Nn(H)};if(Me[v])return{isToken:!0,value:H};if(v.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Me[v[0]];return X(s,v,o.localize,c)}).join("")}function Nn(e){let t=e.match(Rn);return t?t[1].replace(In,"'"):e}var Wn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},Le=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=ke(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=ke(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Wn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new Le(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Vn=2,Mt,I=JSON.parse(((Mt=document.getElementById("kiosk-data"))==null?void 0:Mt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),_n=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),Bn=h.find("#kiosk"),Dt=h.findAll(".kiosk-param"),Un=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),At=h.find(".navigation--next-image"),Pt=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Yn(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,Bn,Un,xe):console.error("Could not start polling"),At&&Pt?Qe(At,Pt):console.error("Menu buttons not found"),Qn()})}function Xn(){Ue(_n,$)}function jn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function Qn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),jn();break}}),$==null||$.addEventListener("click",Xn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function zn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Vn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function kt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function Lt(){je(),ve=!1}function Gn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}kt(e)}function Jn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}function $n(e){return e.replace(/[<>]/g,"")}function Kn(e,t,n){let r=$n(n);e[t]?Array.isArray(e[t])?e[t].push(r):e[t]=[e[t],r]:e[t]=r}Dt.length>0&&document.body.addEventListener("htmx:configRequest",function(e){Dt.forEach(t=>{Kn(e.detail.parameters,t.name,t.value)})});document.addEventListener("DOMContentLoaded",()=>{Yn()});return Ut(Zn);})();
diff --git a/frontend/src/ts/kiosk.ts b/frontend/src/ts/kiosk.ts
index 937e9a7f..2bd02d68 100644
--- a/frontend/src/ts/kiosk.ts
+++ b/frontend/src/ts/kiosk.ts
@@ -26,6 +26,7 @@ interface HTMXEvent extends Event {
preventDefault: () => void;
detail: {
successful: boolean;
+ parameters: Record;
};
}
@@ -78,6 +79,7 @@ const fullScreenButtonSeperator = htmx.find(
".navigation--fullscreen-separator",
) as HTMLElement | null;
const kiosk = htmx.find("#kiosk") as HTMLElement | null;
+const kioskQueries = htmx.findAll(".kiosk-param");
const menu = htmx.find(".navigation") as HTMLElement | null;
const menuInteraction = htmx.find(
"#navigation-interaction-area--menu",
@@ -344,6 +346,51 @@ function clientData(): BrowserData {
};
}
+/**
+ * Sanitizes input string by removing angle brackets
+ * @param value - The input string to sanitize
+ * @returns Sanitized string with < and > characters removed
+ */
+function sanitiseInput(value: string): string {
+ return value.replace(/[<>]/g, "");
+}
+
+/**
+ * Updates request parameters by adding sanitized values
+ * @param params - Object containing request parameters
+ * @param name - Name of the parameter to update
+ * @param value - Value to add to the parameter
+ * @description Handles both single values and arrays:
+ * - For new parameters: sets sanitized value directly
+ * - For existing parameters: converts to array if needed
+ * - For array parameters: appends sanitized value
+ */
+function updateRequestParameters(
+ params: Record,
+ name: string,
+ value: string,
+) {
+ const sanitisedValue = sanitiseInput(value);
+ if (params[name]) {
+ if (Array.isArray(params[name])) {
+ params[name].push(sanitisedValue);
+ } else {
+ params[name] = [params[name], sanitisedValue];
+ }
+ } else {
+ params[name] = sanitisedValue;
+ }
+}
+
+// Add kiosk query parameters to HTMX requests
+if (kioskQueries.length > 0) {
+ document.body.addEventListener("htmx:configRequest", function (e: HTMXEvent) {
+ kioskQueries.forEach((q: HTMLInputElement) => {
+ updateRequestParameters(e.detail.parameters, q.name, q.value);
+ });
+ });
+}
+
// Initialize Kiosk when the DOM is fully loaded
document.addEventListener("DOMContentLoaded", () => {
init();
diff --git a/internal/templates/views/views_home.templ b/internal/templates/views/views_home.templ
index 07a29cd1..59d60732 100644
--- a/internal/templates/views/views_home.templ
+++ b/internal/templates/views/views_home.templ
@@ -72,24 +72,6 @@ templ Home(viewData common.ViewData) {
"showMoreInfo": viewData.ShowMoreInfo,
})
- if len(viewData.Queries) > 0 {
-
- }
}
}
From 0e153697ef01da473d3f2a2d96d7f27987ff7771 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 15:20:09 +0000
Subject: [PATCH 17/19] better sanitise
---
frontend/src/ts/kiosk.ts | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/frontend/src/ts/kiosk.ts b/frontend/src/ts/kiosk.ts
index 2bd02d68..ae6b5536 100644
--- a/frontend/src/ts/kiosk.ts
+++ b/frontend/src/ts/kiosk.ts
@@ -352,7 +352,12 @@ function clientData(): BrowserData {
* @returns Sanitized string with < and > characters removed
*/
function sanitiseInput(value: string): string {
- return value.replace(/[<>]/g, "");
+ return value
+ .replace(/[<>]/g, "")
+ .replace(/[&]/g, "&")
+ .replace(/["]/g, """)
+ .replace(/[']/g, "'")
+ .replace(/[`]/g, "`");
}
/**
From 2e2e5126dbaadc4fe4b7f4e073224f5cca20d158 Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Wed, 18 Dec 2024 15:30:12 +0000
Subject: [PATCH 18/19] immutable params
---
frontend/public/assets/js/kiosk.js | 2 +-
frontend/src/ts/kiosk.ts | 26 +++++++++++++++++++-------
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/frontend/public/assets/js/kiosk.js b/frontend/public/assets/js/kiosk.js
index e32d785a..cf7acee9 100644
--- a/frontend/public/assets/js/kiosk.js
+++ b/frontend/public/assets/js/kiosk.js
@@ -1 +1 @@
-var kiosk=(()=>{var de=Object.defineProperty,It=Object.defineProperties,qt=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Vt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>It(e,Nt(t));var _t=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=qt(t,o))||r.enumerable});return e};var Ut=e=>Bt(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Zn={};_t(Zn,{checkHistoryExists:()=>Gn,cleanupFrames:()=>zn,clientData:()=>Jn,releaseRequestLock:()=>Lt,setRequestLock:()=>kt,startPolling:()=>Je});var Yt=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(E,S){a=E,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let E=getRawAttribute(m,"formaction");E!=null&&(t=E);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let p=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:p})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let E=y.split(":"),S=E[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(E[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let E=getInternalData(r);E&&E.triggerSpec&&E.triggerSpec.queue&&(b=E.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(p&&!i&&!confirm(p))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,L={boosted:Ie,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",L))return maybeCall(a),P(),l;if(t=L.path,e=L.verb,M=L.headers,v=formDataFromObject(L.parameters),q=L.errors,ce=L.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",L),maybeCall(a),P(),l;let qe=t.split("#"),Ft=qe[0],we=qe[1],N=t;if(ce&&(N=Ft,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,L))return triggerErrorEvent(n,"htmx:invalidPath",L),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=L.withCredentials,x.timeout=L.timeout,!X.noHeaders){for(let E in M)if(M.hasOwnProperty(E)){let S=M[E];safelySetHeaderValue(x,E,S)}}let O={xhr:x,target:u,requestConfig:L,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let E=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;E.length>0&&S==null;){let W=E.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(E){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:E},O)),E}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(E){forEach([x,x.upload],function(S){S.addEventListener(E,function(W){triggerEvent(n,"htmx:xhr:"+E,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Rt=ce?null:encodeParamsForBody(x,n,v);return x.send(Rt),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Yt;var oe=!1,Z=Xt();function Xt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function jt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():jt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,Qt;function Ge(e,t,n,r){Se=e,ze=t,R=n,Qt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,zt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function zt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function Gt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?Gt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Jt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Jt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $t={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kt={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:$t,defaultWidth:"full"}),time:Ee({formats:Kt,defaultWidth:"full"}),dateTime:Ee({formats:Zt,defaultWidth:"full"})};var en={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>en[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var tn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},on={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ln=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:ln,era:te({values:tn,defaultWidth:"wide"}),quarter:te({values:nn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rn,defaultWidth:"wide"}),day:te({values:on,defaultWidth:"wide"}),dayPeriod:te({values:an,defaultWidth:"wide",formattingValues:sn,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?un(s,u=>u.test(a)):cn(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function cn(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var fn=/^(\d+)(th|st|nd|rd)?/i,dn=/\d+/i,mn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},hn={any:[/^b/i,/^(a|c)/i]},gn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},En={any:[/1/i,/2/i,/3/i,/4/i]},pn={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},bn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},xn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},wn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:fn,parsePattern:dn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:gn,defaultMatchWidth:"wide",parsePatterns:En,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:pn,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:bn,defaultMatchWidth:"wide",parsePatterns:xn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:vn,defaultMatchWidth:"any",parsePatterns:wn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var Tn={};function B(){return Tn}var Sn=Math.pow(10,8)*24*60*60*1e3,kr=-Sn,pe=6048e5,ot=864e5;var Cn=3600;var it=Cn*24,Lr=it*7,Hn=it*365.2425,On=Hn/12,Fr=On*3,De=Symbol.for("constructDateFrom");function k(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return k(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=k.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Pe(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Pe(r),a=Pe(o),s=+i-Ae(i),l=+a-Ae(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?p:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=ye(e,t),r=k((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/pe)+1}function be(e,t){var f,u,d,m,p,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(p=o.locale)==null?void 0:p.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=k((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=k((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,p;let n=B(),r=(p=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?p:1,o=be(e,t),i=k((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/pe)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Me={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=ye(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var Et=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},pt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Dn=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return Et(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",Et(r,t)).replace("{{time}}",pt(o,t))},yt={p:pt,P:Dn};var An=/^D+$/,Pn=/^Y+$/,Mn=["D","DD","YY","YYYY"];function bt(e){return An.test(e)}function xt(e){return Pn.test(e)}function vt(e,t,n){let r=kn(e,t,n);if(console.warn(r),Mn.includes(e))throw new RangeError(r)}function kn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Fn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Rn=/^'([^]*?)'?$/,In=/''/g,qn=/[a-zA-Z]/;function ke(e,t,n){var f,u,d,m,p,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:Oe,i=(x=(A=(T=(p=n==null?void 0:n.firstWeekContainsDate)!=null?p:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(Fn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:Nn(H)};if(Me[v])return{isToken:!0,value:H};if(v.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Me[v[0]];return X(s,v,o.localize,c)}).join("")}function Nn(e){let t=e.match(Rn);return t?t[1].replace(In,"'"):e}var Wn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},Le=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=ke(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=ke(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Wn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new Le(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Vn=2,Mt,I=JSON.parse(((Mt=document.getElementById("kiosk-data"))==null?void 0:Mt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),_n=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),Bn=h.find("#kiosk"),Dt=h.findAll(".kiosk-param"),Un=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),At=h.find(".navigation--next-image"),Pt=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Yn(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,Bn,Un,xe):console.error("Could not start polling"),At&&Pt?Qe(At,Pt):console.error("Menu buttons not found"),Qn()})}function Xn(){Ue(_n,$)}function jn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function Qn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),jn();break}}),$==null||$.addEventListener("click",Xn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function zn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Vn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function kt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function Lt(){je(),ve=!1}function Gn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}kt(e)}function Jn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}function $n(e){return e.replace(/[<>]/g,"")}function Kn(e,t,n){let r=$n(n);e[t]?Array.isArray(e[t])?e[t].push(r):e[t]=[e[t],r]:e[t]=r}Dt.length>0&&document.body.addEventListener("htmx:configRequest",function(e){Dt.forEach(t=>{Kn(e.detail.parameters,t.name,t.value)})});document.addEventListener("DOMContentLoaded",()=>{Yn()});return Ut(Zn);})();
+var kiosk=(()=>{var de=Object.defineProperty,It=Object.defineProperties,qt=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,We=Object.getOwnPropertySymbols;var _e=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var Ve=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,me=(e,t)=>{for(var n in t||(t={}))_e.call(t,n)&&Ve(e,n,t[n]);if(We)for(var n of We(t))Vt.call(t,n)&&Ve(e,n,t[n]);return e},Be=(e,t)=>It(e,Nt(t));var _t=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!_e.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=qt(t,o))||r.enumerable});return e};var Ut=e=>Bt(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Zn={};_t(Zn,{checkHistoryExists:()=>Gn,cleanupFrames:()=>zn,clientData:()=>Jn,releaseRequestLock:()=>Lt,setRequestLock:()=>kt,startPolling:()=>Je});var Yt=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(p,S){a=p,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let p=getRawAttribute(m,"formaction");p!=null&&(t=p);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let E=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:E})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let p=y.split(":"),S=p[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(p[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let p=getInternalData(r);p&&p.triggerSpec&&p.triggerSpec.queue&&(b=p.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(E&&!i&&!confirm(E))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),qe=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,L={boosted:qe,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",L))return maybeCall(a),P(),l;if(t=L.path,e=L.verb,M=L.headers,v=formDataFromObject(L.parameters),q=L.errors,ce=L.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",L),maybeCall(a),P(),l;let Ne=t.split("#"),Ft=Ne[0],Te=Ne[1],N=t;if(ce&&(N=Ft,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),Te&&(N+="#"+Te))),!verifyPath(n,N,L))return triggerErrorEvent(n,"htmx:invalidPath",L),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=L.withCredentials,x.timeout=L.timeout,!X.noHeaders){for(let p in M)if(M.hasOwnProperty(p)){let S=M[p];safelySetHeaderValue(x,p,S)}}let O={xhr:x,target:u,requestConfig:L,etc:o,boosted:qe,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:Te}};if(x.onload=function(){try{let p=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;p.length>0&&S==null;){let W=p.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(p){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:p},O)),p}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(p){forEach([x,x.upload],function(S){S.addEventListener(p,function(W){triggerEvent(n,"htmx:xhr:"+p,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Rt=ce?null:encodeParamsForBody(x,n,v);return x.send(Rt),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Yt;var oe=!1,Z=Xt();function Xt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Se=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function jt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Se=!0)}function he(){document.body&&(document.body.classList.remove("more-info"),Se=!1)}function ge(){Se?he():jt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,pe=null,se=null,z=!1,Ce,ze,R,Qt;function Ge(e,t,n,r){Ce=e,ze=t,R=n,Qt=r}function He(e){se!==null&&(pe+=e-se,se=null);let t=e-pe,n=Math.min(t/Ce,1);if(D&&(D.style.width=`${n*100}%`),t>=Ce){h.trigger(ze,"kiosk-new-image"),pe=e,zt();return}Q=requestAnimationFrame(He)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),pe=performance.now(),se=null,Q=requestAnimationFrame(He),document.body.classList.remove("polling-paused"),he(),z=!1}function zt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function Oe(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function Gt(e=!1){z&&(Q=requestAnimationFrame(He),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&he(),z=!1)}function ee(e=!1){z?Gt(e):Oe()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Jt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Jt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $t={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kt={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:$t,defaultWidth:"full"}),time:Ee({formats:Kt,defaultWidth:"full"}),dateTime:Ee({formats:Zt,defaultWidth:"full"})};var en={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>en[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var tn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},on={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ln=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:ln,era:te({values:tn,defaultWidth:"wide"}),quarter:te({values:nn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rn,defaultWidth:"wide"}),day:te({values:on,defaultWidth:"wide"}),dayPeriod:te({values:an,defaultWidth:"wide",formattingValues:sn,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?un(s,u=>u.test(a)):cn(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function cn(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var fn=/^(\d+)(th|st|nd|rd)?/i,dn=/\d+/i,mn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},hn={any:[/^b/i,/^(a|c)/i]},gn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},pn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},bn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},xn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},wn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:fn,parsePattern:dn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:gn,defaultMatchWidth:"wide",parsePatterns:pn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:bn,defaultMatchWidth:"wide",parsePatterns:xn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:vn,defaultMatchWidth:"any",parsePatterns:wn,defaultParseWidth:"any"})};var De={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var Tn={};function B(){return Tn}var Sn=Math.pow(10,8)*24*60*60*1e3,kr=-Sn,ye=6048e5,ot=864e5;var Cn=3600;var it=Cn*24,Lr=it*7,Hn=it*365.2425,On=Hn/12,Fr=On*3,Ae=Symbol.for("constructDateFrom");function k(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&Ae in e?e[Ae](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return k(t||e,e)}function Pe(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=k.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Me(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Me(r),a=Me(o),s=+i-Pe(i),l=+a-Pe(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?E:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=be(e,t),r=k((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/ye)+1}function xe(e,t){var f,u,d,m,E,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(E=o.locale)==null?void 0:E.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=k((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=k((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?E:1,o=xe(e,t),i=k((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/ye)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ke={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=xe(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=be(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var pt=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},Et=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Dn=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return pt(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",pt(r,t)).replace("{{time}}",Et(o,t))},yt={p:Et,P:Dn};var An=/^D+$/,Pn=/^Y+$/,Mn=["D","DD","YY","YYYY"];function bt(e){return An.test(e)}function xt(e){return Pn.test(e)}function vt(e,t,n){let r=kn(e,t,n);if(console.warn(r),Mn.includes(e))throw new RangeError(r)}function kn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Fn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Rn=/^'([^]*?)'?$/,In=/''/g,qn=/[a-zA-Z]/;function Le(e,t,n){var f,u,d,m,E,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:De,i=(x=(A=(T=(E=n==null?void 0:n.firstWeekContainsDate)!=null?E:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(Fn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:Nn(H)};if(ke[v])return{isToken:!0,value:H};if(v.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=ke[v[0]];return X(s,v,o.localize,c)}).join("")}function Nn(e){let t=e.match(Rn);return t?t[1].replace(In,"'"):e}var Wn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},Fe=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Wn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new Fe(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Vn=2,Mt,I=JSON.parse(((Mt=document.getElementById("kiosk-data"))==null?void 0:Mt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),_n=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),Bn=h.find("#kiosk"),Dt=h.findAll(".kiosk-param"),Un=h.find(".navigation"),Re=h.find("#navigation-interaction-area--menu"),ve=h.find(".navigation--play-pause"),At=h.find(".navigation--next-image"),Pt=h.find(".navigation--prev-image"),Ie=h.find(".navigation--more-info"),le=h.find("#offline"),we=!1;function Yn(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,Bn,Un,ve):console.error("Could not start polling"),At&&Pt?Qe(At,Pt):console.error("Menu buttons not found"),Qn()})}function Xn(){Ue(_n,$)}function jn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),ge()):(e||ee(),ge())}function Qn(){Re==null||Re.addEventListener("click",()=>ee()),ve==null||ve.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),jn();break}}),$==null||$.addEventListener("click",Xn),Ye($),Ie==null||Ie.addEventListener("click",()=>ge()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function zn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Vn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function kt(e){if(we){e.preventDefault();return}Oe(!1),Xe(),we=!0}function Lt(){je(),we=!1}function Gn(e){let t=h.findAll(".kiosk-history--entry");if(we||t.length<2){e.preventDefault();return}kt(e)}function Jn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}function $n(e){return e.replace(/[<>]/g,"").replace(/[&]/g,"&").replace(/["]/g,""").replace(/[']/g,"'").replace(/[`]/g,"`")}function Kn(e,t,n){let r=me({},e),o=$n(n);return e[t]?Array.isArray(e[t])?r[t]=[...r[t],o]:r[t]=[r[t],o]:r[t]=o,r}Dt.length>0&&document.body.addEventListener("htmx:configRequest",function(e){Dt.forEach(t=>{e.detail.parameters=Kn(e.detail.parameters,t.name,t.value)})});document.addEventListener("DOMContentLoaded",()=>{Yn()});return Ut(Zn);})();
diff --git a/frontend/src/ts/kiosk.ts b/frontend/src/ts/kiosk.ts
index ae6b5536..dee8625f 100644
--- a/frontend/src/ts/kiosk.ts
+++ b/frontend/src/ts/kiosk.ts
@@ -347,9 +347,14 @@ function clientData(): BrowserData {
}
/**
- * Sanitizes input string by removing angle brackets
+ * Sanitizes input string by escaping special characters
* @param value - The input string to sanitize
- * @returns Sanitized string with < and > characters removed
+ * @returns Sanitized string with HTML special characters escaped to prevent XSS:
+ * - < and > converted to empty string
+ * - & converted to &
+ * - " converted to "
+ * - ' converted to '
+ * - ` converted to `
*/
function sanitiseInput(value: string): string {
return value
@@ -374,24 +379,31 @@ function updateRequestParameters(
params: Record,
name: string,
value: string,
-) {
+): Record {
+ const newParams = { ...params };
const sanitisedValue = sanitiseInput(value);
if (params[name]) {
if (Array.isArray(params[name])) {
- params[name].push(sanitisedValue);
+ newParams[name] = [...(newParams[name] as string), sanitisedValue];
} else {
- params[name] = [params[name], sanitisedValue];
+ newParams[name] = [newParams[name] as string, sanitisedValue];
}
} else {
- params[name] = sanitisedValue;
+ newParams[name] = sanitisedValue;
}
+
+ return newParams;
}
// Add kiosk query parameters to HTMX requests
if (kioskQueries.length > 0) {
document.body.addEventListener("htmx:configRequest", function (e: HTMXEvent) {
kioskQueries.forEach((q: HTMLInputElement) => {
- updateRequestParameters(e.detail.parameters, q.name, q.value);
+ e.detail.parameters = updateRequestParameters(
+ e.detail.parameters,
+ q.name,
+ q.value,
+ );
});
});
}
From 96af35a8618b1a983cc92e880367d6a41fc07d4d Mon Sep 17 00:00:00 2001
From: Damon <2184238+damongolding@users.noreply.github.com>
Date: Thu, 19 Dec 2024 10:55:03 +0000
Subject: [PATCH 19/19] better param handling on frontend
---
frontend/public/assets/js/kiosk.js | 2 +-
frontend/src/ts/kiosk.ts | 64 ++++++++++++------------------
2 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/frontend/public/assets/js/kiosk.js b/frontend/public/assets/js/kiosk.js
index cf7acee9..1e26a2ad 100644
--- a/frontend/public/assets/js/kiosk.js
+++ b/frontend/public/assets/js/kiosk.js
@@ -1 +1 @@
-var kiosk=(()=>{var de=Object.defineProperty,It=Object.defineProperties,qt=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,We=Object.getOwnPropertySymbols;var _e=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var Ve=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,me=(e,t)=>{for(var n in t||(t={}))_e.call(t,n)&&Ve(e,n,t[n]);if(We)for(var n of We(t))Vt.call(t,n)&&Ve(e,n,t[n]);return e},Be=(e,t)=>It(e,Nt(t));var _t=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!_e.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=qt(t,o))||r.enumerable});return e};var Ut=e=>Bt(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Zn={};_t(Zn,{checkHistoryExists:()=>Gn,cleanupFrames:()=>zn,clientData:()=>Jn,releaseRequestLock:()=>Lt,setRequestLock:()=>kt,startPolling:()=>Je});var Yt=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(p,S){a=p,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let p=getRawAttribute(m,"formaction");p!=null&&(t=p);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let E=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:E})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let p=y.split(":"),S=p[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(p[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let p=getInternalData(r);p&&p.triggerSpec&&p.triggerSpec.queue&&(b=p.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let P=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),P(),l}if(E&&!i&&!confirm(E))return maybeCall(a),P(),l;let M=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(M["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(M=mergeObjects(M,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),qe=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,L={boosted:qe,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:M,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",L))return maybeCall(a),P(),l;if(t=L.path,e=L.verb,M=L.headers,v=formDataFromObject(L.parameters),q=L.errors,ce=L.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",L),maybeCall(a),P(),l;let Ne=t.split("#"),Ft=Ne[0],Te=Ne[1],N=t;if(ce&&(N=Ft,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),Te&&(N+="#"+Te))),!verifyPath(n,N,L))return triggerErrorEvent(n,"htmx:invalidPath",L),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=L.withCredentials,x.timeout=L.timeout,!X.noHeaders){for(let p in M)if(M.hasOwnProperty(p)){let S=M[p];safelySetHeaderValue(x,p,S)}}let O={xhr:x,target:u,requestConfig:L,etc:o,boosted:qe,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:Te}};if(x.onload=function(){try{let p=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;p.length>0&&S==null;){let W=p.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),P()}catch(p){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:p},O)),p}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),P()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),P()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),P()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),P(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(p){forEach([x,x.upload],function(S){S.addEventListener(p,function(W){triggerEvent(n,"htmx:xhr:"+p,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Rt=ce?null:encodeParamsForBody(x,n,v);return x.send(Rt),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Yt;var oe=!1,Z=Xt();function Xt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Se=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function jt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Se=!0)}function he(){document.body&&(document.body.classList.remove("more-info"),Se=!1)}function ge(){Se?he():jt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,pe=null,se=null,z=!1,Ce,ze,R,Qt;function Ge(e,t,n,r){Ce=e,ze=t,R=n,Qt=r}function He(e){se!==null&&(pe+=e-se,se=null);let t=e-pe,n=Math.min(t/Ce,1);if(D&&(D.style.width=`${n*100}%`),t>=Ce){h.trigger(ze,"kiosk-new-image"),pe=e,zt();return}Q=requestAnimationFrame(He)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),pe=performance.now(),se=null,Q=requestAnimationFrame(He),document.body.classList.remove("polling-paused"),he(),z=!1}function zt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function Oe(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function Gt(e=!1){z&&(Q=requestAnimationFrame(He),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&he(),z=!1)}function ee(e=!1){z?Gt(e):Oe()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Jt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Jt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Ee(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $t={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kt={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:Ee({formats:$t,defaultWidth:"full"}),time:Ee({formats:Kt,defaultWidth:"full"}),dateTime:Ee({formats:Zt,defaultWidth:"full"})};var en={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>en[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var tn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},on={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ln=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:ln,era:te({values:tn,defaultWidth:"wide"}),quarter:te({values:nn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rn,defaultWidth:"wide"}),day:te({values:on,defaultWidth:"wide"}),dayPeriod:te({values:an,defaultWidth:"wide",formattingValues:sn,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?un(s,u=>u.test(a)):cn(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function cn(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var fn=/^(\d+)(th|st|nd|rd)?/i,dn=/\d+/i,mn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},hn={any:[/^b/i,/^(a|c)/i]},gn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},pn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},bn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},xn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},wn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:fn,parsePattern:dn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:gn,defaultMatchWidth:"wide",parsePatterns:pn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:bn,defaultMatchWidth:"wide",parsePatterns:xn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:vn,defaultMatchWidth:"any",parsePatterns:wn,defaultParseWidth:"any"})};var De={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var Tn={};function B(){return Tn}var Sn=Math.pow(10,8)*24*60*60*1e3,kr=-Sn,ye=6048e5,ot=864e5;var Cn=3600;var it=Cn*24,Lr=it*7,Hn=it*365.2425,On=Hn/12,Fr=On*3,Ae=Symbol.for("constructDateFrom");function k(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&Ae in e?e[Ae](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return k(t||e,e)}function Pe(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=k.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Me(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Me(r),a=Me(o),s=+i-Pe(i),l=+a-Pe(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?E:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=be(e,t),r=k((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/ye)+1}function xe(e,t){var f,u,d,m,E,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(E=o.locale)==null?void 0:E.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=k((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=k((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?E:1,o=xe(e,t),i=k((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/ye)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ke={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=xe(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=be(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var pt=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},Et=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Dn=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return pt(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",pt(r,t)).replace("{{time}}",Et(o,t))},yt={p:Et,P:Dn};var An=/^D+$/,Pn=/^Y+$/,Mn=["D","DD","YY","YYYY"];function bt(e){return An.test(e)}function xt(e){return Pn.test(e)}function vt(e,t,n){let r=kn(e,t,n);if(console.warn(r),Mn.includes(e))throw new RangeError(r)}function kn(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var Ln=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Fn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Rn=/^'([^]*?)'?$/,In=/''/g,qn=/[a-zA-Z]/;function Le(e,t,n){var f,u,d,m,E,T,y,b,A,x,P,U,F,M,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:De,i=(x=(A=(T=(E=n==null?void 0:n.firstWeekContainsDate)!=null?E:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(M=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(P=n==null?void 0:n.locale)==null?void 0:P.options)==null?void 0:U.weekStartsOn)!=null?M:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(Fn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(Ln).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:Nn(H)};if(ke[v])return{isToken:!0,value:H};if(v.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=ke[v[0]];return X(s,v,o.localize,c)}).join("")}function Nn(e){let t=e.match(Rn);return t?t[1].replace(In,"'"):e}var Wn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},Fe=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Wn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new Fe(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Vn=2,Mt,I=JSON.parse(((Mt=document.getElementById("kiosk-data"))==null?void 0:Mt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),_n=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),Bn=h.find("#kiosk"),Dt=h.findAll(".kiosk-param"),Un=h.find(".navigation"),Re=h.find("#navigation-interaction-area--menu"),ve=h.find(".navigation--play-pause"),At=h.find(".navigation--next-image"),Pt=h.find(".navigation--prev-image"),Ie=h.find(".navigation--more-info"),le=h.find("#offline"),we=!1;function Yn(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,Bn,Un,ve):console.error("Could not start polling"),At&&Pt?Qe(At,Pt):console.error("Menu buttons not found"),Qn()})}function Xn(){Ue(_n,$)}function jn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),ge()):(e||ee(),ge())}function Qn(){Re==null||Re.addEventListener("click",()=>ee()),ve==null||ve.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),jn();break}}),$==null||$.addEventListener("click",Xn),Ye($),Ie==null||Ie.addEventListener("click",()=>ge()),h.on("htmx:sendError",()=>{if(Lt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function zn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Vn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function kt(e){if(we){e.preventDefault();return}Oe(!1),Xe(),we=!0}function Lt(){je(),we=!1}function Gn(e){let t=h.findAll(".kiosk-history--entry");if(we||t.length<2){e.preventDefault();return}kt(e)}function Jn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}function $n(e){return e.replace(/[<>]/g,"").replace(/[&]/g,"&").replace(/["]/g,""").replace(/[']/g,"'").replace(/[`]/g,"`")}function Kn(e,t,n){let r=me({},e),o=$n(n);return e[t]?Array.isArray(e[t])?r[t]=[...r[t],o]:r[t]=[r[t],o]:r[t]=o,r}Dt.length>0&&document.body.addEventListener("htmx:configRequest",function(e){Dt.forEach(t=>{e.detail.parameters=Kn(e.detail.parameters,t.name,t.value)})});document.addEventListener("DOMContentLoaded",()=>{Yn()});return Ut(Zn);})();
+var kiosk=(()=>{var de=Object.defineProperty,It=Object.defineProperties,qt=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertyNames,Ne=Object.getOwnPropertySymbols;var Ve=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var We=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_e=(e,t)=>{for(var n in t||(t={}))Ve.call(t,n)&&We(e,n,t[n]);if(Ne)for(var n of Ne(t))Vt.call(t,n)&&We(e,n,t[n]);return e},Be=(e,t)=>It(e,Nt(t));var _t=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!Ve.call(e,o)&&o!==n&&de(e,o,{get:()=>t[o],enumerable:!(r=qt(t,o))||r.enumerable});return e};var Ut=e=>Bt(de({},"__esModule",{value:!0}),e);var j=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{s(n.next(l))}catch(c){o(c)}},a=l=>{try{s(n.throw(l))}catch(c){o(c)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,a);s((n=n.apply(e,t)).next())});var Kn={};_t(Kn,{checkHistoryExists:()=>Gn,cleanupFrames:()=>zn,clientData:()=>Jn,releaseRequestLock:()=>kt,setRequestLock:()=>Lt,startPolling:()=>Je});var Yt=function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.4"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return!t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return"unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return!!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0])}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value)}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t)}catch(o){logError(o)}finally{t.remove()}}})}function makeFragment(e){let t=e.replace(/]*)?>[\s\S]*?<\/head>/i,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title}else{let i=parseHTML(''+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText)}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e()}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){return e.getRootNode({composed:!0})===document}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch(t){return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt)})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n)}}function logNone(){htmx.logger=null}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null},t):parentElt(e).removeChild(e)}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null},n):e.classList&&e.classList.add(t))}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")))}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t)}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t)}),addClassToElement(asElement(e),t)}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){if(t.indexOf("global ")===0)return querySelectorAllExt(e,t.slice(7),!0);e=resolveTarget(e);let r=[];{let a=0,s=0;for(let l=0;l"&&a--}s0;){let a=normalizeSelector(r.shift()),s;a.indexOf("closest ")===0?s=closest(asElement(e),normalizeSelector(a.substr(8))):a.indexOf("find ")===0?s=find(asParentNode(e),normalizeSelector(a.substr(5))):a==="next"||a==="nextElementSibling"?s=asElement(e).nextElementSibling:a.indexOf("next ")===0?s=scanForwardQuery(e,normalizeSelector(a.substr(5)),!!n):a==="previous"||a==="previousElementSibling"?s=asElement(e).previousElementSibling:a.indexOf("previous ")===0?s=scanBackwardsQuery(e,normalizeSelector(a.substr(9)),!!n):a==="document"?s=document:a==="window"?s=window:a==="body"?s=document.body:a==="root"?s=getRootNode(e,!!n):a==="host"?s=e.getRootNode().host:i.push(a),s&&o.push(s)}if(i.length>0){let a=i.join(","),s=asParentNode(getRootNode(e,!!n));o.push(...toArray(s.querySelectorAll(a)))}return o}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n,r){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t,options:n}:{target:resolveTarget(e),event:asString(t),listener:n,options:r}}function addEventListenerImpl(e,t,n,r){return ready(function(){let i=processEventArgs(e,t,n,r);i.target.addEventListener(i.event,i.listener,i.options)}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener)}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return[findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(i=e.substring(0,e.indexOf(":")),o=e.substring(e.indexOf(":")+1)):i=e),t.removeAttribute("hx-swap-oob"),t.removeAttribute("data-hx-swap-oob");let a=querySelectorAllExt(r,o,!1);return a?(forEach(a,function(s){let l,c=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(i,s)||(l=asParentNode(c));let f={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",f)&&(s=f.target,f.shouldSwap&&(handlePreservedElements(l),swapWithStyle(i,s,s,l,n),restorePreservedElements()),forEach(n.elts,function(u){triggerEvent(u,"htmx:oobAfterSwap",f)}))}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function restorePreservedElements(){let e=find("#--htmx-preserve-pantry--");if(e){for(let t of[...e.children]){let n=find("#"+t.id);n.parentNode.moveBefore(t,n),n.remove()}e.remove()}}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);if(r!=null)if(t.moveBefore){let o=find("#--htmx-preserve-pantry--");o==null&&(getDocument().body.insertAdjacentHTML("afterend",""),o=find("#--htmx-preserve-pantry--")),o.moveBefore(r,null)}else t.parentNode.replaceChild(r,t)})}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),a=r.tagName.replace(":","\\:"),s=asParentNode(e),l=s&&s.querySelector(a+"[id='"+i+"']");if(l&&l!==s){let c=r.cloneNode();cloneAttributes(r,l),n.tasks.push(function(){cloneAttributes(r,c)})}}})}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load")}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n!=null&&n.focus()}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o))}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=r.contextElement?getRootNode(r.contextElement,!1):getDocument(),i=document.activeElement,a={};try{a={elt:i,start:i?i.selectionStart:null,end:i?i.selectionEnd:null}}catch(c){}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else{let c=makeFragment(t);if(s.title=c.title,r.selectOOB){let f=r.selectOOB.split(",");for(let u=0;u0?getWindow().setTimeout(l,n.settleDelay):l()}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let a=o[i];isRawObject(a)?n=a.target!==void 0?a.target:n:a={value:a},triggerEvent(n,i,a)}}else{let o=r.split(",");for(let i=0;i0;){let a=t[0];if(a==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let s=maybeEval(e,function(){return Function(o)()},function(){return!0});return s.source=o,s}catch(s){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:s,source:o}),null}}}else a==="["&&r++;isPossibleRelativeReference(a,i,n)?o+="(("+n+"."+a+") ? ("+n+"."+a+") : (window."+a+"))":o=o+a,i=t.shift()}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let s=o.length,l=consumeUntil(o,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(c.eventFilter=i),r.push(c)}else{let c={trigger:l};var i=maybeGenerateConditional(e,o,"event");for(i&&(c.eventFilter=i),consumeUntil(o,NOT_WHITESPACE);o.length>0&&o[0]!==",";){let u=o.shift();if(u==="changed")c.changed=!0;else if(u==="once")c.once=!0;else if(u==="consume")c.consume=!0;else if(u==="delay"&&o[0]===":")o.shift(),c.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(u==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var a=consumeCSSSelector(o);else{var a=consumeUntil(o,WHITESPACE_OR_COMMA);if(a==="closest"||a==="find"||a==="next"||a==="previous"){o.shift();let m=consumeCSSSelector(o);m.length>0&&(a+=" "+m)}}c.from=a}else u==="target"&&o[0]===":"?(o.shift(),c.target=consumeCSSSelector(o)):u==="throttle"&&o[0]===":"?(o.shift(),c.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):u==="queue"&&o[0]===":"?(o.shift(),c.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):u==="root"&&o[0]===":"?(o.shift(),c[u]=consumeCSSSelector(o)):u==="threshold"&&o[0]===":"?(o.shift(),c[u]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});consumeUntil(o,NOT_WHITESPACE)}r.push(c)}o.length===s&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE)}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r)}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n))},n.pollInterval)}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else{let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action"),(o==null||o==="")&&(o=getDocument().location.href),r==="get"&&o.includes("?")&&(o=o.replace(/\?[^#]+/,""))}n.forEach(function(i){addEventListener(e,function(a,s){let l=asElement(a);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(r,o,l,s)},t,i,!0)})}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&(matches(n,"[form]")||closest(n,"form")!==null)||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return!1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),a;r.from?a=querySelectorAllExt(e,r.from):a=[e],r.changed&&("lastValue"in i||(i.lastValue=new WeakMap),a.forEach(function(s){i.lastValue.has(r)||i.lastValue.set(r,new WeakMap),i.lastValue.get(r).set(s,s.value)})),forEach(a,function(s){let l=function(c){if(!bodyContains(e)){s.removeEventListener(r.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(e,c)||((o||shouldCancel(c,e))&&c.preventDefault(),maybeFilterEvent(r,e,c)))return;let f=getInternalData(c);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&c.stopPropagation(),r.target&&c.target&&!matches(asElement(c.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0}if(r.changed){let u=event.target,d=u.value,m=i.lastValue.get(r);if(m.has(u)&&m.get(u)===d)return;m.set(u,d)}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,c),i.throttle=getWindow().setTimeout(function(){i.throttle=null},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,c)},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,c))}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:l,on:s}),s.addEventListener(r.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e)}))},200))}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed")},{once:!0}))}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,triggerEvent(e,"htmx:trigger"),t(e))};r>0?getWindow().setTimeout(o,r):o()}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(a){addTriggerHandler(e,a,t,function(s,l){let c=asElement(s);if(closest(c,htmx.config.disableSelector)){cleanUpElement(c);return}issueAjaxRequest(o,i,c,l)})})}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(a){for(let s=0;s0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t)}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return!1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return[]}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t)}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null)}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(a){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,a))})};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i})}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(s){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:s,cache:i}),i.shift()}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),a=makeSettleInfo(i);handleTitle(r.title),handlePreservedElements(r),swapInnerHTML(i,o,a),restorePreservedElements(),settleImmediately(a.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response})}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n)},t.send()}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(t.title),handlePreservedElements(n),swapInnerHTML(r,n,o),restorePreservedElements(),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll)},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t})}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e)}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass)}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","")}),t}function removeRequestIndicators(e,t){forEach(e.concat(t),function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||1)-1}),forEach(e,function(n){getInternalData(n).requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass)}),forEach(t,function(n){getInternalData(n).requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o))}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),a=r.value;r instanceof HTMLSelectElement&&r.multiple&&(a=toArray(r.querySelectorAll("option:checked")).map(function(s){return s.value})),r instanceof HTMLInputElement&&r.files&&(a=toArray(r.files)),addValueToFormData(i,a,t),o&&validateElement(r,n)}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n)}),new FormData(r).forEach(function(i,a){i instanceof File&&i.name===""||addValueToFormData(a,i,t)}))}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})))}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n)}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],a=getInternalData(e);a.lastButtonClicked&&!bodyContains(a.lastButtonClicked)&&(a.lastButtonClicked=null);let s=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(a.lastButtonClicked&&(s=s&&a.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),s),processInputValue(n,r,i,e,s),a.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let c=a.lastButtonClicked||e,f=getRawAttribute(c,"name");addValueToFormData(f,c.value,o)}let l=findAttributeTargets(e,"hx-include");return forEach(l,function(c){processInputValue(n,r,i,asElement(c),s),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,s)})}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n)}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.slice(4).split(","),function(r){r=r.trim(),e.delete(r)}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i)})}),r}}else return e}function isAnchorLink(e){return!!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let a=splitOnWhitespace(n);if(a.length>0)for(let s=0;s0?o.join(":"):null;r.scroll=f,r.scrollTarget=i}else if(l.indexOf("show:")===0){var o=l.slice(5).split(":");let u=o.pop();var i=o.length>0?o.join(":"):null;r.show=u,r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);r.focusScroll=c=="true"}else s==0?r.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t))}),r!=null?r:usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n)}function makeSettleInfo(e){return{tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight)}if(t.show){var o=null;if(t.showTarget){let a=t.showTarget;t.showTarget==="window"&&(a="body"),o=asElement(querySelectorExt(n,a))}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),a=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.slice(11),a=!0):i.indexOf("js:")===0&&(i=i.slice(3),a=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let s;a?s=maybeEval(e,function(){return Function("return ("+i+")")()},{}):s=parseJSON(i);for(let l in s)s.hasOwnProperty(l)&&r[l]==null&&(r[l]=s[l])}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n)}catch(r){e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true")}}function getPathFromResponse(e){if(e.responseURL&&typeof URL!="undefined")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch(t){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL})}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){if(e=e.toLowerCase(),n){if(n instanceof Element||typeof n=="string")return issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n)||DUMMY_ELT,returnPromise:!0});{let r=resolveTarget(n.target);return(n.target&&!r||n.source&&!r&&!resolveTarget(n.source))&&(r=DUMMY_ELT),issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:r,swapOverride:n.swap,select:n.select,returnPromise:!0})}}else return issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(e[n]&&typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r)}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i)}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i)})}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(a){e.append(t,a)}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol"){let o=Reflect.get(t,n);return typeof o=="function"?function(){return o.apply(e,arguments)}:o}if(n==="toJSON")return()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),r&&typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o)}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let a=null,s=null;if(o=o!=null?o:{},o.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(p,S){a=p,s=S});n==null&&(n=getDocument().body);let c=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(a),l;let u=o.targetOverride||asElement(getTarget(n));if(u==null||u==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(s),l;let d=getInternalData(n),m=d.lastButtonClicked;if(m){let p=getRawAttribute(m,"formaction");p!=null&&(t=p);let S=getRawAttribute(m,"formmethod");S!=null&&S.toLowerCase()!=="dialog"&&(e=S)}let E=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:u,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(W){return issueAjaxRequest(e,t,n,r,o,!!W)},question:E})===!1)return maybeCall(a),l;let T=n,y=getClosestAttributeValue(n,"hx-sync"),b=null,A=!1;if(y){let p=y.split(":"),S=p[0].trim();if(S==="this"?T=findThisElement(n,"hx-sync"):T=asElement(querySelectorExt(n,S)),y=(p[1]||"drop").trim(),d=getInternalData(T),y==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(a),l;if(y==="abort"){if(d.xhr)return maybeCall(a),l;A=!0}else y==="replace"?triggerEvent(T,"htmx:abort"):y.indexOf("queue")===0&&(b=(y.split(" ")[1]||"last").trim())}if(d.xhr)if(d.abortable)triggerEvent(T,"htmx:abort");else{if(b==null){if(r){let p=getInternalData(r);p&&p.triggerSpec&&p.triggerSpec.queue&&(b=p.triggerSpec.queue)}b==null&&(b="last")}return d.queuedRequests==null&&(d.queuedRequests=[]),b==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)}):b==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o)})),maybeCall(a),l}let x=new XMLHttpRequest;d.xhr=x,d.abortable=A;let M=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()()},U=getClosestAttributeValue(n,"hx-prompt");if(U){var F=prompt(U);if(F===null||!triggerEvent(n,"htmx:prompt",{prompt:F,target:u}))return maybeCall(a),M(),l}if(E&&!i&&!confirm(E))return maybeCall(a),M(),l;let P=getHeaders(n,u,F);e!=="get"&&!usesFormData(n)&&(P["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(P=mergeObjects(P,o.headers));let C=getInputValues(n,e),q=C.errors,Y=C.formData;o.values&&overrideFormData(Y,formDataFromObject(o.values));let K=formDataFromObject(getExpressionVars(n)),H=overrideFormData(Y,K),v=filterValues(H,n);htmx.config.getCacheBusterParam&&e==="get"&&v.set("org.htmx.cache-buster",getRawAttribute(u,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),Ie=getInternalData(n).boosted,ce=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,k={boosted:Ie,useUrlParams:ce,formData:v,parameters:formDataProxy(v),unfilteredFormData:H,unfilteredParameters:formDataProxy(H),headers:P,target:u,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",k))return maybeCall(a),M(),l;if(t=k.path,e=k.verb,P=k.headers,v=formDataFromObject(k.parameters),q=k.errors,ce=k.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",k),maybeCall(a),M(),l;let qe=t.split("#"),Ft=qe[0],we=qe[1],N=t;if(ce&&(N=Ft,!v.keys().next().done&&(N.indexOf("?")<0?N+="?":N+="&",N+=urlEncode(v),we&&(N+="#"+we))),!verifyPath(n,N,k))return triggerErrorEvent(n,"htmx:invalidPath",k),maybeCall(s),l;if(x.open(e.toUpperCase(),N,!0),x.overrideMimeType("text/html"),x.withCredentials=k.withCredentials,x.timeout=k.timeout,!X.noHeaders){for(let p in P)if(P.hasOwnProperty(p)){let S=P[p];safelySetHeaderValue(x,p,S)}}let O={xhr:x,target:u,requestConfig:k,etc:o,boosted:Ie,select:f,pathInfo:{requestPath:t,finalRequestPath:N,responsePath:null,anchor:we}};if(x.onload=function(){try{let p=hierarchyForElt(n);if(O.pathInfo.responsePath=getPathFromResponse(x),c(n,O),O.keepIndicators!==!0&&removeRequestIndicators(ue,fe),triggerEvent(n,"htmx:afterRequest",O),triggerEvent(n,"htmx:afterOnLoad",O),!bodyContains(n)){let S=null;for(;p.length>0&&S==null;){let W=p.shift();bodyContains(W)&&(S=W)}S&&(triggerEvent(S,"htmx:afterRequest",O),triggerEvent(S,"htmx:afterOnLoad",O))}maybeCall(a),M()}catch(p){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:p},O)),p}},x.onerror=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendError",O),maybeCall(s),M()},x.onabort=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:sendAbort",O),maybeCall(s),M()},x.ontimeout=function(){removeRequestIndicators(ue,fe),triggerErrorEvent(n,"htmx:afterRequest",O),triggerErrorEvent(n,"htmx:timeout",O),maybeCall(s),M()},!triggerEvent(n,"htmx:beforeRequest",O))return maybeCall(a),M(),l;var ue=addRequestIndicatorClasses(n),fe=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(p){forEach([x,x.upload],function(S){S.addEventListener(p,function(W){triggerEvent(n,"htmx:xhr:"+p,{lengthComputable:W.lengthComputable,loaded:W.loaded,total:W.total})})})}),triggerEvent(n,"htmx:beforeSend",O);let Rt=ce?null:encodeParamsForBody(x,n,v);return x.send(Rt),l}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,a=t.pathInfo.responsePath,s=getClosestAttributeValue(e,"hx-push-url"),l=getClosestAttributeValue(e,"hx-replace-url"),c=getInternalData(e).boosted,f=null,u=null;return s?(f="push",u=s):l?(f="replace",u=l):c&&(f="push",u=a||i),u?u==="false"?{}:(u==="true"&&(u=a||i),t.pathInfo.anchor&&u.indexOf("#")===-1&&(u=u+"#"+t.pathInfo.anchor),{type:f,path:u}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(F,b.swapDelay):F()}u&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t))}}let extensions={};function extensionBase(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return!0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return!1},handleSwap:function(e,t,n,r){return!1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t)}function removeExtension(e){delete extensions[e]}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i)}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e)}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","")}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort()});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent})})):n&&n(r)},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null},0)}),htmx}(),h=Yt;var oe=!1,Z=Xt();function Xt(){let e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled"]];for(let[t,n,r,o]of e)if(t in document.documentElement)return{requestFullscreen:t,exitFullscreen:n,fullscreenElement:r,fullscreenEnabled:o};return{requestFullscreen:null,exitFullscreen:null,fullscreenElement:null,fullscreenEnabled:null}}function Ue(e,t){var n;oe?Z.exitFullscreen&&document[Z.exitFullscreen]():(n=e[Z.requestFullscreen])==null||n.call(e),oe=!oe,t==null||t.classList.toggle("navigation--fullscreen-enabled")}function Ye(e){document.addEventListener("fullscreenchange",()=>{oe=!!document[Z.fullscreenElement],e==null||e.classList.toggle("navigation--fullscreen-enabled",oe)})}var ie,ae,Te=!1;function Xe(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.addClass(ie,"disabled"),h.addClass(ae,"disabled")}function je(){if(!ie||!ae){console.error("Navigation buttons not initialized");return}h.removeClass(ie,"disabled"),h.removeClass(ae,"disabled")}function jt(){document.body&&document.body.classList.contains("polling-paused")&&(document.body.classList.add("more-info"),Te=!0)}function me(){document.body&&(document.body.classList.remove("more-info"),Te=!1)}function he(){Te?me():jt()}function Qe(e,t){if(!e||!t)throw new Error("Both navigation buttons must be provided");ie=e,ae=t}var Q=null,D,ge=null,se=null,z=!1,Se,ze,R,Qt;function Ge(e,t,n,r){Se=e,ze=t,R=n,Qt=r}function Ce(e){se!==null&&(ge+=e-se,se=null);let t=e-ge,n=Math.min(t/Se,1);if(D&&(D.style.width=`${n*100}%`),t>=Se){h.trigger(ze,"kiosk-new-image"),ge=e,zt();return}Q=requestAnimationFrame(Ce)}function Je(){D=h.find(".progress--bar"),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),ge=performance.now(),se=null,Q=requestAnimationFrame(Ce),document.body.classList.remove("polling-paused"),me(),z=!1}function zt(){z&&Q===null||(cancelAnimationFrame(Q),D==null||D.classList.add("progress--bar-paused"))}function He(e=!0){z&&Q===null||(cancelAnimationFrame(Q),se=performance.now(),D==null||D.classList.add("progress--bar-paused"),e&&(R==null||R.classList.remove("navigation-hidden"),document.body.classList.add("polling-paused")),z=!0)}function Gt(e=!1){z&&(Q=requestAnimationFrame(Ce),D==null||D.classList.remove("progress--bar-paused"),R==null||R.classList.add("navigation-hidden"),document.body.classList.remove("polling-paused"),e&&me(),z=!1)}function ee(e=!1){z?Gt(e):He()}var $e=()=>j(void 0,null,function*(){let e=null,t=()=>j(void 0,null,function*(){if("wakeLock"in navigator)try{e=yield navigator.wakeLock.request("screen"),e.addEventListener("release",()=>{e=null})}catch(r){if(r instanceof TypeError)try{e=yield navigator.wakeLock.request(),e.addEventListener("release",()=>{e=null})}catch(o){console.error("Failed to acquire Wake Lock:",o)}else console.error("Error acquiring Wake Lock:",r)}}),n=()=>j(void 0,null,function*(){document.visibilityState==="visible"&&(yield t())});return document.addEventListener("visibilitychange",n),yield t(),()=>{document.removeEventListener("visibilitychange",n),e==null||e.release()}});var Jt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ke=(e,t,n)=>{let r,o=Jt[e];return typeof o=="string"?r=o:t===1?r=o.one:r=o.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function pe(e){return(t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var $t={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kt={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zt={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:pe({formats:$t,defaultWidth:"full"}),time:pe({formats:Kt,defaultWidth:"full"}),dateTime:pe({formats:Zt,defaultWidth:"full"})};var en={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},et=(e,t,n,r)=>en[e];function te(e){return(t,n)=>{let r=n!=null&&n.context?String(n.context):"standalone",o;if(r==="formatting"&&e.formattingValues){let a=e.defaultFormattingWidth||e.defaultWidth,s=n!=null&&n.width?String(n.width):a;o=e.formattingValues[s]||e.formattingValues[a]}else{let a=e.defaultWidth,s=n!=null&&n.width?String(n.width):e.defaultWidth;o=e.values[s]||e.values[a]}let i=e.argumentCallback?e.argumentCallback(t):t;return o[i]}}var tn={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rn={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},on={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},an={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sn={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ln=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},tt={ordinalNumber:ln,era:te({values:tn,defaultWidth:"wide"}),quarter:te({values:nn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rn,defaultWidth:"wide"}),day:te({values:on,defaultWidth:"wide"}),dayPeriod:te({values:an,defaultWidth:"wide",formattingValues:sn,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{let r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;let a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?un(s,u=>u.test(a)):cn(s,u=>u.test(a)),c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;let f=t.slice(a.length);return{value:c,rest:f}}}function cn(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function un(e,t){for(let n=0;n{let r=t.match(e.matchPattern);if(!r)return null;let o=r[0],i=t.match(e.parsePattern);if(!i)return null;let a=e.valueCallback?e.valueCallback(i[0]):i[0];a=n.valueCallback?n.valueCallback(a):a;let s=t.slice(o.length);return{value:a,rest:s}}}var fn=/^(\d+)(th|st|nd|rd)?/i,dn=/\d+/i,mn={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},hn={any:[/^b/i,/^(a|c)/i]},gn={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},pn={any:[/1/i,/2/i,/3/i,/4/i]},En={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},yn={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},bn={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},xn={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},vn={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},wn={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},rt={ordinalNumber:nt({matchPattern:fn,parsePattern:dn,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),quarter:ne({matchPatterns:gn,defaultMatchWidth:"wide",parsePatterns:pn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:En,defaultMatchWidth:"wide",parsePatterns:yn,defaultParseWidth:"any"}),day:ne({matchPatterns:bn,defaultMatchWidth:"wide",parsePatterns:xn,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:vn,defaultMatchWidth:"any",parsePatterns:wn,defaultParseWidth:"any"})};var Oe={code:"en-US",formatDistance:Ke,formatLong:Ze,formatRelative:et,localize:tt,match:rt,options:{weekStartsOn:0,firstWeekContainsDate:1}};var Tn={};function B(){return Tn}var Sn=Math.pow(10,8)*24*60*60*1e3,Pr=-Sn,Ee=6048e5,ot=864e5;var Cn=3600;var it=Cn*24,Lr=it*7,Hn=it*365.2425,On=Hn/12,kr=On*3,De=Symbol.for("constructDateFrom");function L(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&De in e?e[De](t):e instanceof Date?new e.constructor(t):new Date(t)}function w(e,t){return L(t||e,e)}function Ae(e){let t=w(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function at(e,...t){let n=L.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Me(e,t){let n=w(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function st(e,t,n){let[r,o]=at(n==null?void 0:n.in,e,t),i=Me(r),a=Me(o),s=+i-Ae(i),l=+a-Ae(a);return Math.round((s-l)/ot)}function lt(e,t){let n=w(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ct(e,t){let n=w(e,t==null?void 0:t.in);return st(n,lt(n))+1}function V(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.weekStartsOn)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.weekStartsOn)!=null?f:n.weekStartsOn)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.weekStartsOn)!=null?E:0,o=w(e,t==null?void 0:t.in),i=o.getDay(),a=(i=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function ut(e,t){let n=ye(e,t),r=L((t==null?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),G(r)}function ft(e,t){let n=w(e,t==null?void 0:t.in),r=+G(n)-+ut(n);return Math.round(r/Ee)+1}function be(e,t){var f,u,d,m,E,T,y,b;let n=w(e,t==null?void 0:t.in),r=n.getFullYear(),o=B(),i=(b=(y=(m=(d=t==null?void 0:t.firstWeekContainsDate)!=null?d:(u=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:u.firstWeekContainsDate)!=null?m:o.firstWeekContainsDate)!=null?y:(T=(E=o.locale)==null?void 0:E.options)==null?void 0:T.firstWeekContainsDate)!=null?b:1,a=L((t==null?void 0:t.in)||e,0);a.setFullYear(r+1,0,i),a.setHours(0,0,0,0);let s=V(a,t),l=L((t==null?void 0:t.in)||e,0);l.setFullYear(r,0,i),l.setHours(0,0,0,0);let c=V(l,t);return+n>=+s?r+1:+n>=+c?r:r-1}function dt(e,t){var s,l,c,f,u,d,m,E;let n=B(),r=(E=(m=(f=(c=t==null?void 0:t.firstWeekContainsDate)!=null?c:(l=(s=t==null?void 0:t.locale)==null?void 0:s.options)==null?void 0:l.firstWeekContainsDate)!=null?f:n.firstWeekContainsDate)!=null?m:(d=(u=n.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)!=null?E:1,o=be(e,t),i=L((t==null?void 0:t.in)||e,0);return i.setFullYear(o,0,r),i.setHours(0,0,0,0),V(i,t)}function mt(e,t){let n=w(e,t==null?void 0:t.in),r=+V(n,t)-+dt(n,t);return Math.round(r/Ee)+1}function g(e,t){let n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}var _={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return g(t==="yy"?r%100:r,t.length)},M(e,t){let n=e.getMonth();return t==="M"?String(n+1):g(n+1,2)},d(e,t){return g(e.getDate(),t.length)},a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return g(e.getHours()%12||12,t.length)},H(e,t){return g(e.getHours(),t.length)},m(e,t){return g(e.getMinutes(),t.length)},s(e,t){return g(e.getSeconds(),t.length)},S(e,t){let n=t.length,r=e.getMilliseconds(),o=Math.trunc(r*Math.pow(10,n-3));return g(o,t.length)}};var re={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Pe={G:function(e,t,n){let r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){let r=e.getFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return _.y(e,t)},Y:function(e,t,n,r){let o=be(e,r),i=o>0?o:1-o;if(t==="YY"){let a=i%100;return g(a,2)}return t==="Yo"?n.ordinalNumber(i,{unit:"year"}):g(i,t.length)},R:function(e,t){let n=ye(e);return g(n,t.length)},u:function(e,t){let n=e.getFullYear();return g(n,t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return g(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return g(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return _.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return g(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let o=mt(e,r);return t==="wo"?n.ordinalNumber(o,{unit:"week"}):g(o,t.length)},I:function(e,t,n){let r=ft(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):g(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):_.d(e,t)},D:function(e,t,n){let r=ct(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):g(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return g(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});case"eeee":default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return g(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});case"cccc":default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),o=r===0?7:r;switch(t){case"i":return String(o);case"ii":return g(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let o=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r=e.getHours(),o;switch(r===12?o=re.noon:r===0?o=re.midnight:o=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r=e.getHours(),o;switch(r>=17?o=re.evening:r>=12?o=re.afternoon:r>=4?o=re.morning:o=re.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return _.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):_.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):g(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):_.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):_.s(e,t)},S:function(e,t){return _.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return gt(r);case"XXXX":case"XX":return J(r);case"XXXXX":case"XXX":default:return J(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return gt(r);case"xxxx":case"xx":return J(r);case"xxxxx":case"xxx":default:return J(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ht(r,":");case"OOOO":default:return"GMT"+J(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ht(r,":");case"zzzz":default:return"GMT"+J(r,":")}},t:function(e,t,n){let r=Math.trunc(+e/1e3);return g(r,t.length)},T:function(e,t,n){return g(+e,t.length)}};function ht(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return i===0?n+String(o):n+String(o)+t+g(i,2)}function gt(e,t){return e%60===0?(e>0?"-":"+")+g(Math.abs(e)/60,2):J(e,t)}function J(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),o=g(Math.trunc(r/60),2),i=g(r%60,2);return n+o+t+i}var pt=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},Et=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Dn=(e,t)=>{let n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return pt(e,t);let i;switch(r){case"P":i=t.dateTime({width:"short"});break;case"PP":i=t.dateTime({width:"medium"});break;case"PPP":i=t.dateTime({width:"long"});break;case"PPPP":default:i=t.dateTime({width:"full"});break}return i.replace("{{date}}",pt(r,t)).replace("{{time}}",Et(o,t))},yt={p:Et,P:Dn};var An=/^D+$/,Mn=/^Y+$/,Pn=["D","DD","YY","YYYY"];function bt(e){return An.test(e)}function xt(e){return Mn.test(e)}function vt(e,t,n){let r=Ln(e,t,n);if(console.warn(r),Pn.includes(e))throw new RangeError(r)}function Ln(e,t,n){let r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function wt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Tt(e){return!(!wt(e)&&typeof e!="number"||isNaN(+w(e)))}var kn=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Fn=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Rn=/^'([^]*?)'?$/,In=/''/g,qn=/[a-zA-Z]/;function Le(e,t,n){var f,u,d,m,E,T,y,b,A,x,M,U,F,P,C,q,Y,K;let r=B(),o=(u=(f=n==null?void 0:n.locale)!=null?f:r.locale)!=null?u:Oe,i=(x=(A=(T=(E=n==null?void 0:n.firstWeekContainsDate)!=null?E:(m=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:m.firstWeekContainsDate)!=null?T:r.firstWeekContainsDate)!=null?A:(b=(y=r.locale)==null?void 0:y.options)==null?void 0:b.firstWeekContainsDate)!=null?x:1,a=(K=(Y=(P=(F=n==null?void 0:n.weekStartsOn)!=null?F:(U=(M=n==null?void 0:n.locale)==null?void 0:M.options)==null?void 0:U.weekStartsOn)!=null?P:r.weekStartsOn)!=null?Y:(q=(C=r.locale)==null?void 0:C.options)==null?void 0:q.weekStartsOn)!=null?K:0,s=w(e,n==null?void 0:n.in);if(!Tt(s))throw new RangeError("Invalid time value");let l=t.match(Fn).map(H=>{let v=H[0];if(v==="p"||v==="P"){let X=yt[v];return X(H,o.formatLong)}return H}).join("").match(kn).map(H=>{if(H==="''")return{isToken:!1,value:"'"};let v=H[0];if(v==="'")return{isToken:!1,value:Nn(H)};if(Pe[v])return{isToken:!0,value:H};if(v.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character `"+v+"`");return{isToken:!1,value:H}});o.localize.preprocessor&&(l=o.localize.preprocessor(s,l));let c={firstWeekContainsDate:i,weekStartsOn:a,locale:o};return l.map(H=>{if(!H.isToken)return H.value;let v=H.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&xt(v)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&bt(v))&&vt(v,t,String(e));let X=Pe[v[0]];return X(s,v,o.localize,c)}).join("")}function Nn(e){let t=e.match(Rn);return t?t[1].replace(In,"'"):e}var Wn=5e3,St={TWELVE_HOUR:"h:mma",TWENTY_FOUR_HOUR:"HH:mm"},ke=class{constructor(t){this.config=t,this.elements=this.initialiseElements()}initialiseElements(){let t=document.getElementById("clock");if(!t)throw new Error("Clock element not found");return{main:t,date:document.querySelector(".clock--date"),time:document.querySelector(".clock--time")}}updateDate(t){if(!(!this.config.showDate||!this.elements.date))try{this.elements.date.innerHTML=Le(t,this.config.dateFormat)}catch(n){console.error("Error formatting date:",n),this.elements.date.innerHTML=t.toLocaleDateString()}}updateTime(t){if(!this.config.showTime||!this.elements.time)return;let n=this.config.timeFormat==="12"?St.TWELVE_HOUR:St.TWENTY_FOUR_HOUR;try{let r=Le(t,n);this.elements.time.innerHTML=this.config.timeFormat==="12"?r.toLowerCase():r}catch(r){console.error("Error formatting time:",r),this.elements.time.innerHTML=t.toLocaleTimeString()}}render(){let t=new Date;this.updateDate(t),this.updateTime(t)}start(){this.intervalId&&this.stop(),this.render(),this.intervalId=window.setInterval(()=>this.render(),Wn)}stop(){this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=void 0)}};function Ct(e,t,n,r){let o={showDate:e,dateFormat:t,showTime:n,timeFormat:r},i=new ke(o);i.start();let a=()=>i.stop();return window.addEventListener("unload",a),Object.assign(i,{cleanup:()=>window.removeEventListener("unload",a)})}var Vn=2,Pt,I=JSON.parse(((Pt=document.getElementById("kiosk-data"))==null?void 0:Pt.textContent)||"{}"),Ht=h.parseInterval(`${I.refresh}s`),_n=document.body,$=h.find(".navigation--fullscreen"),Ot=h.find(".navigation--fullscreen-separator"),Bn=h.find("#kiosk"),Dt=h.findAll(".kiosk-param"),Un=h.find(".navigation"),Fe=h.find("#navigation-interaction-area--menu"),xe=h.find(".navigation--play-pause"),At=h.find(".navigation--next-image"),Mt=h.find(".navigation--prev-image"),Re=h.find(".navigation--more-info"),le=h.find("#offline"),ve=!1;function Yn(){return j(this,null,function*(){I.debugVerbose&&h.logAll(),(I.showDate||I.showTime)&&Ct(I.showDate,I.dateFormat,I.showTime,I.timeFormat),I.disableScreensaver&&(yield $e()),"serviceWorker"in navigator&&navigator.serviceWorker.register("/assets/js/sw.js").then(function(e){console.log("ServiceWorker registration successful")},function(e){console.log("ServiceWorker registration failed: ",e)}),Z.requestFullscreen||($&&h.remove($),Ot&&h.remove(Ot)),Ht?Ge(Ht,Bn,Un,xe):console.error("Could not start polling"),At&&Mt?Qe(At,Mt):console.error("Menu buttons not found"),Qn()})}function Xn(){Ue(_n,$)}function jn(){let e=document.body.classList.contains("polling-paused"),t=document.body.classList.contains("more-info");e&&t?(ee(),he()):(e||ee(),he())}function Qn(){Fe==null||Fe.addEventListener("click",()=>ee()),xe==null||xe.addEventListener("click",()=>ee()),document.addEventListener("keydown",e=>{if(e.target===document.body)switch(e.code){case"Space":e.preventDefault(),ee(!0);break;case"KeyI":if(!I.showMoreInfo)return;e.preventDefault(),jn();break}}),$==null||$.addEventListener("click",Xn),Ye($),Re==null||Re.addEventListener("click",()=>he()),h.on("htmx:sendError",()=>{if(kt(),!le){console.error("offline svg missing");return}h.addClass(le,"offline")}),h.on("htmx:afterRequest",function(e){if(!le){console.error("offline svg missing");return}e.detail.successful?h.removeClass(le,"offline"):h.addClass(le,"offline")})}function zn(){return j(this,null,function*(){let e=h.findAll(".frame");if(!(e!=null&&e.length)){console.debug("No frames found to clean up");return}if(e.length>Vn)try{h.remove(e[0])}catch(t){console.error("Failed to remove frame:",t)}})}function Lt(e){if(ve){e.preventDefault();return}He(!1),Xe(),ve=!0}function kt(){je(),ve=!1}function Gn(e){let t=h.findAll(".kiosk-history--entry");if(ve||t.length<2){e.preventDefault();return}Lt(e)}function Jn(){return{client_width:window.innerWidth,client_height:window.innerHeight}}function $n(e){return e.replace(/[<>]/g,"").replace(/[&]/g,"&").replace(/["]/g,""").replace(/[']/g,"'").replace(/[`]/g,"`")}Dt.length>0&&document.body.addEventListener("htmx:configRequest",function(e){var t;if(!((t=e.detail)!=null&&t.parameters)){console.warn("Request parameters object not found");return}try{Dt.forEach(n=>{if(!(n instanceof HTMLInputElement)){console.warn(`Element ${n} is not an input`);return}if(!n.name||!n.value){console.debug(`Skipping invalid input: ${n}`);return}let r=$n(n.value);e.detail.parameters.append(n.name,r)})}catch(n){console.error("Error processing parameters:",n)}});document.addEventListener("DOMContentLoaded",()=>{Yn()});return Ut(Kn);})();
diff --git a/frontend/src/ts/kiosk.ts b/frontend/src/ts/kiosk.ts
index dee8625f..d9e94378 100644
--- a/frontend/src/ts/kiosk.ts
+++ b/frontend/src/ts/kiosk.ts
@@ -26,7 +26,8 @@ interface HTMXEvent extends Event {
preventDefault: () => void;
detail: {
successful: boolean;
- parameters: Record;
+ parameters: FormData;
+ method: string;
};
}
@@ -365,46 +366,33 @@ function sanitiseInput(value: string): string {
.replace(/[`]/g, "`");
}
-/**
- * Updates request parameters by adding sanitized values
- * @param params - Object containing request parameters
- * @param name - Name of the parameter to update
- * @param value - Value to add to the parameter
- * @description Handles both single values and arrays:
- * - For new parameters: sets sanitized value directly
- * - For existing parameters: converts to array if needed
- * - For array parameters: appends sanitized value
- */
-function updateRequestParameters(
- params: Record,
- name: string,
- value: string,
-): Record {
- const newParams = { ...params };
- const sanitisedValue = sanitiseInput(value);
- if (params[name]) {
- if (Array.isArray(params[name])) {
- newParams[name] = [...(newParams[name] as string), sanitisedValue];
- } else {
- newParams[name] = [newParams[name] as string, sanitisedValue];
- }
- } else {
- newParams[name] = sanitisedValue;
- }
-
- return newParams;
-}
-
// Add kiosk query parameters to HTMX requests
if (kioskQueries.length > 0) {
document.body.addEventListener("htmx:configRequest", function (e: HTMXEvent) {
- kioskQueries.forEach((q: HTMLInputElement) => {
- e.detail.parameters = updateRequestParameters(
- e.detail.parameters,
- q.name,
- q.value,
- );
- });
+ if (!e.detail?.parameters) {
+ console.warn("Request parameters object not found");
+ return;
+ }
+
+ try {
+ kioskQueries.forEach((q: HTMLInputElement) => {
+ if (!(q instanceof HTMLInputElement)) {
+ console.warn(`Element ${q} is not an input`);
+ return;
+ }
+
+ if (!q.name || !q.value) {
+ console.debug(`Skipping invalid input: ${q}`);
+ return;
+ }
+
+ const sanitizedValue = sanitiseInput(q.value);
+
+ e.detail.parameters.append(q.name, sanitizedValue);
+ });
+ } catch (error) {
+ console.error("Error processing parameters:", error);
+ }
});
}