diff --git a/package.json b/package.json index d25128e..5d73276 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "vite": "^5.2.13" }, "dependencies": { + "@halo-dev/api-client": "^2.19.0", "alpinejs": "^3.14.0", "pupa": "^3.1.0", "tocbot": "^4.28.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9959ca2..a533170 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,9 @@ settings: importers: .: dependencies: + "@halo-dev/api-client": + specifier: ^2.19.0 + version: 2.19.0(axios@1.7.7) alpinejs: specifier: ^3.14.0 version: 3.14.1 @@ -307,6 +310,12 @@ packages: { integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + "@halo-dev/api-client@2.19.0": + resolution: + { integrity: sha512-VcHd0IFAVpQesTA3VRSmZns3g7UXP5hVgZYVjqB5VdWmzYbsBYZqQb73lKjPIRZ6YZ0IOSfjHT426ADgkgaA0A== } + peerDependencies: + axios: ^1.7.x + "@humanwhocodes/config-array@0.11.14": resolution: { integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== } @@ -809,6 +818,10 @@ packages: resolution: { integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== } + asynckit@0.4.0: + resolution: + { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== } + autoprefixer@10.4.19: resolution: { integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== } @@ -817,6 +830,10 @@ packages: peerDependencies: postcss: ^8.1.0 + axios@1.7.7: + resolution: + { integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== } + balanced-match@1.0.2: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } @@ -909,6 +926,11 @@ packages: resolution: { integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== } + call-bind@1.0.7: + resolution: + { integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== } + engines: { node: ">= 0.4" } + callsites@3.1.0: resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } @@ -1022,6 +1044,11 @@ packages: resolution: { integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== } + combined-stream@1.0.8: + resolution: + { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } + engines: { node: ">= 0.8" } + commander@12.1.0: resolution: { integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== } @@ -1129,6 +1156,11 @@ packages: { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== } engines: { node: ">=10" } + define-data-property@1.1.4: + resolution: + { integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== } + engines: { node: ">= 0.4" } + define-lazy-prop@3.0.0: resolution: { integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== } @@ -1144,6 +1176,11 @@ packages: { integrity: sha512-MTZdZsuNxSBL92rsjx3VFWe57OpRlikyLbcx2B5Dmdv6oScqpMrvpY7zHLMymrUxo3U5+suPUMsNgW/+SZB1lg== } engines: { node: ">= 14" } + delayed-stream@1.0.0: + resolution: + { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } + engines: { node: ">=0.4.0" } + deprecation@2.3.1: resolution: { integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== } @@ -1209,6 +1246,16 @@ packages: resolution: { integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== } + es-define-property@1.0.0: + resolution: + { integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== } + engines: { node: ">= 0.4" } + + es-errors@1.3.0: + resolution: + { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: ">= 0.4" } + es-get-iterator@1.1.2: resolution: { integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== } @@ -1429,11 +1476,26 @@ packages: resolution: { integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== } + follow-redirects@1.15.8: + resolution: + { integrity: sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig== } + engines: { node: ">=4.0" } + peerDependencies: + debug: "*" + peerDependenciesMeta: + debug: + optional: true + form-data-encoder@2.1.3: resolution: { integrity: sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ== } engines: { node: ">= 14.17" } + form-data@4.0.0: + resolution: + { integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== } + engines: { node: ">= 6" } + formdata-polyfill@4.0.10: resolution: { integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== } @@ -1462,6 +1524,10 @@ packages: resolution: { integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== } + function-bind@1.1.2: + resolution: + { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } + function.prototype.name@1.1.5: resolution: { integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== } @@ -1480,6 +1546,11 @@ packages: resolution: { integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== } + get-intrinsic@1.2.4: + resolution: + { integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== } + engines: { node: ">= 0.4" } + get-stream@6.0.1: resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } @@ -1547,6 +1618,10 @@ packages: { integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + gopd@1.0.1: + resolution: + { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } + got@12.6.1: resolution: { integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== } @@ -1578,6 +1653,15 @@ packages: resolution: { integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== } + has-property-descriptors@1.0.2: + resolution: + { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } + + has-proto@1.0.3: + resolution: + { integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== } + engines: { node: ">= 0.4" } + has-symbols@1.0.3: resolution: { integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== } @@ -1598,6 +1682,11 @@ packages: { integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== } engines: { node: ">= 0.4.0" } + hasown@2.0.2: + resolution: + { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } + engines: { node: ">= 0.4" } + http-cache-semantics@4.1.1: resolution: { integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== } @@ -2248,6 +2337,11 @@ packages: resolution: { integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== } + object-inspect@1.13.2: + resolution: + { integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== } + engines: { node: ">= 0.4" } + object-keys@1.1.1: resolution: { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } @@ -2582,6 +2676,11 @@ packages: { integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== } engines: { node: ">=12.20" } + qs@6.13.0: + resolution: + { integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== } + engines: { node: ">=0.6" } + queue-microtask@1.2.3: resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } @@ -2747,6 +2846,11 @@ packages: engines: { node: ">=10" } hasBin: true + set-function-length@1.2.2: + resolution: + { integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== } + engines: { node: ">= 0.4" } + shebang-command@2.0.0: resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } @@ -2767,6 +2871,11 @@ packages: resolution: { integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== } + side-channel@1.0.6: + resolution: + { integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== } + engines: { node: ">= 0.4" } + signal-exit@3.0.7: resolution: { integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== } @@ -3318,6 +3427,11 @@ snapshots: "@eslint/js@8.57.0": {} + "@halo-dev/api-client@2.19.0(axios@1.7.7)": + dependencies: + axios: 1.7.7 + qs: 6.13.0 + "@humanwhocodes/config-array@0.11.14": dependencies: "@humanwhocodes/object-schema": 2.0.3 @@ -3734,6 +3848,8 @@ snapshots: dependencies: retry: 0.13.1 + asynckit@0.4.0: {} + autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.0 @@ -3744,6 +3860,14 @@ snapshots: postcss: 8.4.38 postcss-value-parser: 4.2.0 + axios@1.7.7: + dependencies: + follow-redirects: 1.15.8 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + balanced-match@1.0.2: {} base64-js@1.5.1: {} @@ -3834,6 +3958,14 @@ snapshots: function-bind: 1.1.1 get-intrinsic: 1.1.3 + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -3912,6 +4044,10 @@ snapshots: colorette@2.0.20: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@12.1.0: {} commander@4.1.1: {} @@ -3988,6 +4124,12 @@ snapshots: defer-to-connect@2.0.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + define-lazy-prop@3.0.0: {} define-properties@1.1.4: @@ -4002,6 +4144,8 @@ snapshots: esprima: 4.0.1 vm2: 3.9.19 + delayed-stream@1.0.0: {} + deprecation@2.3.1: {} didyoumean@1.2.2: {} @@ -4065,6 +4209,12 @@ snapshots: es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + es-get-iterator@1.1.2: dependencies: call-bind: 1.0.2 @@ -4324,8 +4474,16 @@ snapshots: flatted@3.2.7: {} + follow-redirects@1.15.8: {} + form-data-encoder@2.1.3: {} + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -4345,6 +4503,8 @@ snapshots: function-bind@1.1.1: {} + function-bind@1.1.2: {} + function.prototype.name@1.1.5: dependencies: call-bind: 1.0.2 @@ -4362,6 +4522,14 @@ snapshots: has: 1.0.3 has-symbols: 1.0.3 + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + get-stream@6.0.1: {} get-stream@8.0.1: {} @@ -4440,6 +4608,10 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + got@12.6.1: dependencies: "@sindresorhus/is": 5.3.0 @@ -4468,6 +4640,12 @@ snapshots: dependencies: get-intrinsic: 1.1.3 + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + has-symbols@1.0.3: {} has-tostringtag@1.0.0: @@ -4480,6 +4658,10 @@ snapshots: dependencies: function-bind: 1.1.1 + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + http-cache-semantics@4.1.1: {} http-proxy-agent@7.0.0: @@ -4922,6 +5104,8 @@ snapshots: object-inspect@1.12.2: {} + object-inspect@1.13.2: {} + object-keys@1.1.1: {} object.assign@4.1.4: @@ -5177,6 +5361,10 @@ snapshots: dependencies: escape-goat: 4.0.0 + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -5357,6 +5545,15 @@ snapshots: dependencies: lru-cache: 6.0.0 + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -5375,6 +5572,13 @@ snapshots: get-intrinsic: 1.1.3 object-inspect: 1.12.2 + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + signal-exit@3.0.7: {} signal-exit@4.1.0: {} diff --git a/src/alpine-data/ui-permission.ts b/src/alpine-data/ui-permission.ts new file mode 100644 index 0000000..0a93f45 --- /dev/null +++ b/src/alpine-data/ui-permission.ts @@ -0,0 +1,40 @@ +import type { UserPermission } from "@halo-dev/api-client"; + +interface State { + userPermission?: UserPermission; + init: () => void; + shouldDisplay?: boolean; + fetchUserPermission: () => void; +} + +export default (currentUser: string, permission: string): State => ({ + userPermission: undefined, + + init() { + this.fetchUserPermission(); + }, + + get shouldDisplay() { + if (currentUser === "anonymousUser") { + return false; + } + + if (!this.userPermission) { + return false; + } + + if (this.userPermission.uiPermissions.includes(permission)) { + return true; + } + + return false; + }, + + async fetchUserPermission() { + const response = await fetch(`/apis/api.console.halo.run/v1alpha1/users/-/permissions`); + + if (response.ok) { + this.userPermission = await response.json(); + } + }, +}); diff --git a/src/main.ts b/src/main.ts index 5e763b4..2827578 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,7 @@ import colorSchemeSwitcher from "./alpine-data/color-scheme-switcher"; import upvote from "./alpine-data/upvote"; import share from "./alpine-data/share"; import logout from "./alpine-data/logout"; +import uiPermission from "./alpine-data/ui-permission"; window.Alpine = Alpine; @@ -17,6 +18,8 @@ Alpine.data("upvote", upvote); // @ts-ignore Alpine.data("share", share); Alpine.data("logout", logout); +// @ts-ignore +Alpine.data("uiPermission", uiPermission); Alpine.start(); diff --git a/templates/assets/dist/main.iife.js b/templates/assets/dist/main.iife.js index a6d12e8..55730f8 100644 --- a/templates/assets/dist/main.iife.js +++ b/templates/assets/dist/main.iife.js @@ -1,5 +1,5 @@ -var main=function(k){"use strict";var Pe=!1,je=!1,z=[],Re=-1;function ir(e){or(e)}function or(e){z.includes(e)||z.push(e),sr()}function Ot(e){let t=z.indexOf(e);t!==-1&&t>Re&&z.splice(t,1)}function sr(){!je&&!Pe&&(Pe=!0,queueMicrotask(ar))}function ar(){Pe=!1,je=!0;for(let e=0;ee.effect(t,{scheduler:n=>{qe?ir(n):n()}}),Tt=e.raw}function Lt(e){K=e}function ur(e){let t=()=>{};return[r=>{let i=K(r);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),Q(i))},i},()=>{t()}]}function It(e,t){let n=!0,r,i=K(()=>{let o=e();JSON.stringify(o),n?r=o:queueMicrotask(()=>{t(o,r),r=o}),n=!1});return()=>Q(i)}var Nt=[],kt=[],Mt=[];function fr(e){Mt.push(e)}function He(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,kt.push(t))}function $t(e){Nt.push(e)}function Pt(e,t,n){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(n)}function jt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([n,r])=>{(t===void 0||t.includes(n))&&(r.forEach(i=>i()),delete e._x_attributeCleanups[n])})}function dr(e){if(e._x_cleanups)for(;e._x_cleanups.length;)e._x_cleanups.pop()()}var Fe=new MutationObserver(Ke),De=!1;function Be(){Fe.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),De=!0}function Rt(){pr(),Fe.disconnect(),De=!1}var re=[];function pr(){let e=Fe.takeRecords();re.push(()=>e.length>0&&Ke(e));let t=re.length;queueMicrotask(()=>{if(re.length===t)for(;re.length>0;)re.shift()()})}function C(e){if(!De)return e();Rt();let t=e();return Be(),t}var ze=!1,ge=[];function hr(){ze=!0}function _r(){ze=!1,Ke(ge),ge=[]}function Ke(e){if(ze){ge=ge.concat(e);return}let t=new Set,n=new Set,r=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&n.add(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,l=e[o].oldValue,c=()=>{r.has(s)||r.set(s,[]),r.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&l===null?c():s.hasAttribute(a)?(u(),c()):u()}i.forEach((o,s)=>{jt(s,o)}),r.forEach((o,s)=>{Nt.forEach(a=>a(s,o))});for(let o of n)t.has(o)||kt.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)n.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Mt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,n=null,r=null,i=null}function qt(e){return oe(Z(e))}function ie(e,t,n){return e._x_dataStack=[t,...Z(n||e)],()=>{e._x_dataStack=e._x_dataStack.filter(r=>r!==t)}}function Z(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?Z(e.host):e.parentNode?Z(e.parentNode):[]}function oe(e){return new Proxy({objects:e},gr)}var gr={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(n=>Object.prototype.hasOwnProperty.call(n,t)||Reflect.has(n,t))},get({objects:e},t,n){return t=="toJSON"?mr:Reflect.get(e.find(r=>Reflect.has(r,t))||{},t,n)},set({objects:e},t,n,r){const i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o!=null&&o.set&&(o!=null&&o.get)?o.set.call(r,n)||!0:Reflect.set(i,t,n)}};function mr(){return Reflect.ownKeys(this).reduce((t,n)=>(t[n]=Reflect.get(this,n),t),{})}function Ht(e){let t=r=>typeof r=="object"&&!Array.isArray(r)&&r!==null,n=(r,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(r)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let l=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?r[o]=s.initialize(e,l,o):t(s)&&s!==r&&!(s instanceof Element)&&n(s,l)})};return n(e)}function Ft(e,t=()=>{}){let n={initialValue:void 0,_x_interceptor:!0,initialize(r,i,o){return e(this.initialValue,()=>vr(r,i),s=>We(r,i,s),i,o)}};return t(n),r=>{if(typeof r=="object"&&r!==null&&r._x_interceptor){let i=n.initialize.bind(n);n.initialize=(o,s,a)=>{let l=r.initialize(o,s,a);return n.initialValue=l,i(o,s,a)}}else n.initialValue=r;return n}}function vr(e,t){return t.split(".").reduce((n,r)=>n[r],e)}function We(e,t,n){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=n;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),We(e[t[0]],t.slice(1),n)}}var Dt={};function T(e,t){Dt[e]=t}function Ue(e,t){return Object.entries(Dt).forEach(([n,r])=>{let i=null;function o(){if(i)return i;{let[s,a]=Vt(t);return i={interceptor:Ft,...s},He(t,a),i}}Object.defineProperty(e,`$${n}`,{get(){return r(t,o())},enumerable:!1})}),e}function yr(e,t,n,...r){try{return n(...r)}catch(i){se(i,e,t)}}function se(e,t,n=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:n}),console.warn(`Alpine Expression Error: ${e.message} +var main=function(k){"use strict";var $e=!1,je=!1,K=[],Re=-1;function ir(e){or(e)}function or(e){K.includes(e)||K.push(e),sr()}function Ot(e){let t=K.indexOf(e);t!==-1&&t>Re&&K.splice(t,1)}function sr(){!je&&!$e&&($e=!0,queueMicrotask(ar))}function ar(){$e=!1,je=!0;for(let e=0;ee.effect(t,{scheduler:n=>{qe?ir(n):n()}}),Tt=e.raw}function Lt(e){U=e}function ur(e){let t=()=>{};return[r=>{let i=U(r);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),Q(i))},i},()=>{t()}]}function It(e,t){let n=!0,r,i=U(()=>{let o=e();JSON.stringify(o),n?r=o:queueMicrotask(()=>{t(o,r),r=o}),n=!1});return()=>Q(i)}var Nt=[],kt=[],Mt=[];function fr(e){Mt.push(e)}function He(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,kt.push(t))}function Pt(e){Nt.push(e)}function $t(e,t,n){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(n)}function jt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([n,r])=>{(t===void 0||t.includes(n))&&(r.forEach(i=>i()),delete e._x_attributeCleanups[n])})}function dr(e){if(e._x_cleanups)for(;e._x_cleanups.length;)e._x_cleanups.pop()()}var Fe=new MutationObserver(Ke),De=!1;function Be(){Fe.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),De=!0}function Rt(){pr(),Fe.disconnect(),De=!1}var re=[];function pr(){let e=Fe.takeRecords();re.push(()=>e.length>0&&Ke(e));let t=re.length;queueMicrotask(()=>{if(re.length===t)for(;re.length>0;)re.shift()()})}function C(e){if(!De)return e();Rt();let t=e();return Be(),t}var ze=!1,ge=[];function hr(){ze=!0}function _r(){ze=!1,Ke(ge),ge=[]}function Ke(e){if(ze){ge=ge.concat(e);return}let t=new Set,n=new Set,r=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&n.add(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,l=e[o].oldValue,c=()=>{r.has(s)||r.set(s,[]),r.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&l===null?c():s.hasAttribute(a)?(u(),c()):u()}i.forEach((o,s)=>{jt(s,o)}),r.forEach((o,s)=>{Nt.forEach(a=>a(s,o))});for(let o of n)t.has(o)||kt.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)n.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Mt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,n=null,r=null,i=null}function qt(e){return oe(Z(e))}function ie(e,t,n){return e._x_dataStack=[t,...Z(n||e)],()=>{e._x_dataStack=e._x_dataStack.filter(r=>r!==t)}}function Z(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?Z(e.host):e.parentNode?Z(e.parentNode):[]}function oe(e){return new Proxy({objects:e},gr)}var gr={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(n=>Object.prototype.hasOwnProperty.call(n,t)||Reflect.has(n,t))},get({objects:e},t,n){return t=="toJSON"?mr:Reflect.get(e.find(r=>Reflect.has(r,t))||{},t,n)},set({objects:e},t,n,r){const i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o!=null&&o.set&&(o!=null&&o.get)?o.set.call(r,n)||!0:Reflect.set(i,t,n)}};function mr(){return Reflect.ownKeys(this).reduce((t,n)=>(t[n]=Reflect.get(this,n),t),{})}function Ht(e){let t=r=>typeof r=="object"&&!Array.isArray(r)&&r!==null,n=(r,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(r)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let l=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?r[o]=s.initialize(e,l,o):t(s)&&s!==r&&!(s instanceof Element)&&n(s,l)})};return n(e)}function Ft(e,t=()=>{}){let n={initialValue:void 0,_x_interceptor:!0,initialize(r,i,o){return e(this.initialValue,()=>vr(r,i),s=>Ue(r,i,s),i,o)}};return t(n),r=>{if(typeof r=="object"&&r!==null&&r._x_interceptor){let i=n.initialize.bind(n);n.initialize=(o,s,a)=>{let l=r.initialize(o,s,a);return n.initialValue=l,i(o,s,a)}}else n.initialValue=r;return n}}function vr(e,t){return t.split(".").reduce((n,r)=>n[r],e)}function Ue(e,t,n){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=n;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),Ue(e[t[0]],t.slice(1),n)}}var Dt={};function T(e,t){Dt[e]=t}function We(e,t){return Object.entries(Dt).forEach(([n,r])=>{let i=null;function o(){if(i)return i;{let[s,a]=Vt(t);return i={interceptor:Ft,...s},He(t,a),i}}Object.defineProperty(e,`$${n}`,{get(){return r(t,o())},enumerable:!1})}),e}function yr(e,t,n,...r){try{return n(...r)}catch(i){se(i,e,t)}}function se(e,t,n=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:n}),console.warn(`Alpine Expression Error: ${e.message} ${n?'Expression: "'+n+`" -`:""}`,t),setTimeout(()=>{throw e},0)}var me=!0;function Bt(e){let t=me;me=!1;let n=e();return me=t,n}function W(e,t,n={}){let r;return A(e,t)(i=>r=i,n),r}function A(...e){return zt(...e)}var zt=Kt;function xr(e){zt=e}function Kt(e,t){let n={};Ue(n,e);let r=[n,...Z(e)],i=typeof t=="function"?br(r,t):Sr(r,t,e);return yr.bind(null,e,t,i)}function br(e,t){return(n=()=>{},{scope:r={},params:i=[]}={})=>{let o=t.apply(oe([r,...e]),i);ve(n,o)}}var Ve={};function wr(e,t){if(Ve[e])return Ve[e];let n=Object.getPrototypeOf(async function(){}).constructor,r=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new n(["__self","scope"],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return se(s,t,e),Promise.resolve()}})();return Ve[e]=o,o}function Sr(e,t,n){let r=wr(t,n);return(i=()=>{},{scope:o={},params:s=[]}={})=>{r.result=void 0,r.finished=!1;let a=oe([o,...e]);if(typeof r=="function"){let l=r(r,a).catch(c=>se(c,n,t));r.finished?(ve(i,r.result,a,s,n),r.result=void 0):l.then(c=>{ve(i,c,a,s,n)}).catch(c=>se(c,n,t)).finally(()=>r.result=void 0)}}}function ve(e,t,n,r,i){if(me&&typeof t=="function"){let o=t.apply(n,r);o instanceof Promise?o.then(s=>ve(e,s,n,r)).catch(s=>se(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var Je="x-";function ee(e=""){return Je+e}function Cr(e){Je=e}var ye={};function S(e,t){return ye[e]=t,{before(n){if(!ye[n]){console.warn(String.raw`Cannot find directive \`${n}\`. \`${e}\` will use the default order of execution`);return}const r=U.indexOf(n);U.splice(r>=0?r:U.indexOf("DEFAULT"),0,e)}}}function Er(e){return Object.keys(ye).includes(e)}function Ye(e,t,n){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,l])=>({name:a,value:l})),s=Wt(o);o=o.map(a=>s.find(l=>l.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let r={};return t.map(Xt((o,s)=>r[o]=s)).filter(Qt).map(Tr(r,n)).sort(Lr).map(o=>Or(e,o))}function Wt(e){return Array.from(e).map(Xt()).filter(t=>!Qt(t))}var Xe=!1,ae=new Map,Ut=Symbol();function Ar(e){Xe=!0;let t=Symbol();Ut=t,ae.set(t,[]);let n=()=>{for(;ae.get(t).length;)ae.get(t).shift()();ae.delete(t)},r=()=>{Xe=!1,n()};e(n),r()}function Vt(e){let t=[],n=a=>t.push(a),[r,i]=ur(e);return t.push(i),[{Alpine:fe,effect:r,cleanup:n,evaluateLater:A.bind(A,e),evaluate:W.bind(W,e)},()=>t.forEach(a=>a())]}function Or(e,t){let n=()=>{},r=ye[t.type]||n,[i,o]=Vt(e);Pt(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(r.inline&&r.inline(e,t,i),r=r.bind(r,e,t,i),Xe?ae.get(Ut).push(r):r())};return s.runCleanups=o,s}var Jt=(e,t)=>({name:n,value:r})=>(n.startsWith(e)&&(n=n.replace(e,t)),{name:n,value:r}),Yt=e=>e;function Xt(e=()=>{}){return({name:t,value:n})=>{let{name:r,value:i}=Gt.reduce((o,s)=>s(o),{name:t,value:n});return r!==t&&e(r,t),{name:r,value:i}}}var Gt=[];function Ge(e){Gt.push(e)}function Qt({name:e}){return Zt().test(e)}var Zt=()=>new RegExp(`^${Je}([^:^.]+)\\b`);function Tr(e,t){return({name:n,value:r})=>{let i=n.match(Zt()),o=n.match(/:([a-zA-Z0-9\-_:]+)/),s=n.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[n]||n;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(l=>l.replace(".","")),expression:r,original:a}}}var Qe="DEFAULT",U=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",Qe,"teleport"];function Lr(e,t){let n=U.indexOf(e.type)===-1?Qe:e.type,r=U.indexOf(t.type)===-1?Qe:t.type;return U.indexOf(n)-U.indexOf(r)}function le(e,t,n={}){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0,cancelable:!0}))}function q(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>q(i,t));return}let n=!1;if(t(e,()=>n=!0),n)return;let r=e.firstElementChild;for(;r;)q(r,t),r=r.nextElementSibling}function O(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var en=!1;function Ir(){en&&O("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),en=!0,document.body||O("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `