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() { Loading spinner } + +templ Spinner() { + Loading 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('");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"," ."+htmx.config.indicatorClass+"{opacity:0} ."+htmx.config.requestClass+" ."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+htmx.config.requestClass+"."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ")}}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('");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"," ."+htmx.config.indicatorClass+"{opacity:0} ."+htmx.config.requestClass+" ."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+htmx.config.requestClass+"."+htmx.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ")}}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 { + + } if showDateTime {