From dee9766f6cb2bd8535aa00bffdb9c0cdbd350e12 Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:22:52 +0500 Subject: [PATCH 01/13] Update npm packages --- package-lock.json | 714 ++++++++++++++++++++++++---------------------- package.json | 8 +- 2 files changed, 371 insertions(+), 351 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d949ab..f377b4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,8 +19,8 @@ "@rollup/plugin-virtual": "^3.0.2", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", - "@vitest/coverage-v8": "^4.0.15", - "@vitest/ui": "^4.0.15", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/ui": "^4.0.16", "cross-env": "^10.1.0", "glob": "^13.0.0", "gulp": "^5.0.1", @@ -29,20 +29,20 @@ "gulplog": "^2.2.0", "jsdom": "^27.3.0", "rimraf": "^6.1.2", - "rollup": "^4.53.3", + "rollup": "^4.53.5", "rollup-plugin-bundle-size": "^1.0.3", "strip-comments": "^2.0.1", "terser": "^5.44.1", - "vitest": "^4.0.15" + "vitest": "^4.0.16" }, "peerDependencies": { "alpinejs": "^3.13.0" } }, "node_modules/@acemir/cssom": { - "version": "0.9.28", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.28.tgz", - "integrity": "sha512-LuS6IVEivI75vKN8S04qRD+YySP0RmU/cV8UNukhQZvprxF+76Z43TNo/a08eCodaGhT1Us8etqS1ZRY9/Or0A==", + "version": "0.9.29", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.29.tgz", + "integrity": "sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==", "dev": true, "license": "MIT" }, @@ -54,9 +54,9 @@ "license": "MIT" }, "node_modules/@asamuzakjp/css-color": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.0.tgz", - "integrity": "sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", + "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -64,7 +64,7 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.2.2" + "lru-cache": "^11.2.4" } }, "node_modules/@asamuzakjp/dom-selector": { @@ -296,9 +296,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.14.tgz", - "integrity": "sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==", + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.21.tgz", + "integrity": "sha512-plP8N8zKfEZ26figX4Nvajx8DuzfuRpLTqglQ5d0chfnt35Qt3X+m6ASZ+rG0D0kxe/upDVNwSIVJP5n4FuNfw==", "dev": true, "funding": [ { @@ -313,9 +313,6 @@ "license": "MIT-0", "engines": { "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" } }, "node_modules/@csstools/css-tokenizer": { @@ -346,9 +343,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -363,9 +360,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -380,9 +377,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -397,9 +394,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -414,9 +411,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -431,9 +428,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -448,9 +445,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -465,9 +462,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -482,9 +479,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -499,9 +496,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -516,9 +513,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -533,9 +530,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -550,9 +547,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -567,9 +564,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -584,9 +581,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -601,9 +598,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -618,9 +615,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -635,9 +632,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -652,9 +649,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -669,9 +666,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -686,9 +683,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -703,9 +700,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -720,9 +717,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -737,9 +734,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -754,9 +751,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -771,9 +768,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -1046,9 +1043,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", - "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", "cpu": [ "arm" ], @@ -1060,9 +1057,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", - "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", "cpu": [ "arm64" ], @@ -1074,9 +1071,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", - "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", "cpu": [ "arm64" ], @@ -1088,9 +1085,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", - "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", "cpu": [ "x64" ], @@ -1102,9 +1099,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", - "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", "cpu": [ "arm64" ], @@ -1116,9 +1113,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", - "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", "cpu": [ "x64" ], @@ -1130,9 +1127,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", - "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", "cpu": [ "arm" ], @@ -1144,9 +1141,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", - "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", "cpu": [ "arm" ], @@ -1158,9 +1155,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", - "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", "cpu": [ "arm64" ], @@ -1172,9 +1169,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", - "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", "cpu": [ "arm64" ], @@ -1186,9 +1183,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", - "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", "cpu": [ "loong64" ], @@ -1200,9 +1197,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", - "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", "cpu": [ "ppc64" ], @@ -1214,9 +1211,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", - "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", "cpu": [ "riscv64" ], @@ -1228,9 +1225,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", - "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", "cpu": [ "riscv64" ], @@ -1242,9 +1239,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", - "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", "cpu": [ "s390x" ], @@ -1256,9 +1253,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", "cpu": [ "x64" ], @@ -1270,9 +1267,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", - "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", "cpu": [ "x64" ], @@ -1284,9 +1281,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", - "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", "cpu": [ "arm64" ], @@ -1298,9 +1295,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", - "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", "cpu": [ "arm64" ], @@ -1312,9 +1309,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", - "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", "cpu": [ "ia32" ], @@ -1326,9 +1323,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", - "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", "cpu": [ "x64" ], @@ -1340,9 +1337,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", - "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", "cpu": [ "x64" ], @@ -1387,9 +1384,9 @@ } }, "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, @@ -1480,9 +1477,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", - "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, "license": "MIT", "dependencies": { @@ -1508,14 +1505,14 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.15.tgz", - "integrity": "sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.16.tgz", + "integrity": "sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "ast-v8-to-istanbul": "^0.3.8", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", @@ -1530,8 +1527,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.15", - "vitest": "4.0.15" + "@vitest/browser": "4.0.16", + "vitest": "4.0.16" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -1540,16 +1537,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.15.tgz", - "integrity": "sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", + "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.15", - "@vitest/utils": "4.0.15", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -1558,13 +1555,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.15.tgz", - "integrity": "sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", + "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.15", + "@vitest/spy": "4.0.16", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -1595,9 +1592,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.15.tgz", - "integrity": "sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", + "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", "dev": true, "license": "MIT", "dependencies": { @@ -1608,13 +1605,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.15.tgz", - "integrity": "sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", + "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "pathe": "^2.0.3" }, "funding": { @@ -1622,13 +1619,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.15.tgz", - "integrity": "sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", + "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.15", + "@vitest/pretty-format": "4.0.16", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -1637,9 +1634,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.15.tgz", - "integrity": "sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", + "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", "dev": true, "license": "MIT", "funding": { @@ -1647,13 +1644,13 @@ } }, "node_modules/@vitest/ui": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.15.tgz", - "integrity": "sha512-sxSyJMaKp45zI0u+lHrPuZM1ZJQ8FaVD35k+UxVrha1yyvQ+TZuUYllUixwvQXlB7ixoDc7skf3lQPopZIvaQw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.16.tgz", + "integrity": "sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", @@ -1665,17 +1662,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.0.15" + "vitest": "4.0.16" } }, "node_modules/@vitest/utils": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.15.tgz", - "integrity": "sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", + "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.15", + "@vitest/pretty-format": "4.0.16", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1723,9 +1720,9 @@ } }, "node_modules/alpinejs": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.0.tgz", - "integrity": "sha512-lpokA5okCF1BKh10LG8YjqhfpxyHBk4gE7boIgVHltJzYoM7O9nK3M7VlntLEJGsVmu7U/RzUWajmHREGT38Eg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.3.tgz", + "integrity": "sha512-fSI6F5213FdpMC4IWaup92KhuH3jBX0VVqajRJ6cOTCy1cL6888KyXdGO+seAAkn+g6fnrxBqQEx6gRpQ5EZoQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1892,9 +1889,9 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", - "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.9.tgz", + "integrity": "sha512-dSC6tJeOJxbZrPzPbv5mMd6CMiQ1ugaVXXPRad2fXUSsy1kstFn9XQWemV9VW7Y7kpxgQ/4WMoZfwdH8XSU48w==", "dev": true, "license": "MIT", "dependencies": { @@ -1949,9 +1946,9 @@ } }, "node_modules/b4a": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.2.tgz", - "integrity": "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -1979,11 +1976,19 @@ } }, "node_modules/bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -2165,37 +2170,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -2355,14 +2329,14 @@ "license": "MIT" }, "node_modules/cssstyle": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.4.tgz", - "integrity": "sha512-KyOS/kJMEq5O9GdPnaf82noigg5X5DYn0kZPJTaAsCUaBizp6Xa1y9D4Qoqf/JazEXWuruErHgVXwjN5391ZJw==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.5.tgz", + "integrity": "sha512-GlsEptulso7Jg0VaOZ8BXQi3AkYM5BOJKEO/rjMidSCq70FkIC5y0eawrCXeYzxgt3OCf4Ls+eoxN+/05vN0Ag==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.1.0", - "@csstools/css-syntax-patches-for-csstree": "1.0.14", + "@asamuzakjp/css-color": "^4.1.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.21", "css-tree": "^3.1.0" }, "engines": { @@ -2517,9 +2491,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2530,32 +2504,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, "node_modules/escalade": { @@ -4109,9 +4083,9 @@ } }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -4335,6 +4309,13 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4436,13 +4417,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4515,9 +4496,9 @@ } }, "node_modules/rollup": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", - "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4531,28 +4512,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.3", - "@rollup/rollup-android-arm64": "4.53.3", - "@rollup/rollup-darwin-arm64": "4.53.3", - "@rollup/rollup-darwin-x64": "4.53.3", - "@rollup/rollup-freebsd-arm64": "4.53.3", - "@rollup/rollup-freebsd-x64": "4.53.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", - "@rollup/rollup-linux-arm-musleabihf": "4.53.3", - "@rollup/rollup-linux-arm64-gnu": "4.53.3", - "@rollup/rollup-linux-arm64-musl": "4.53.3", - "@rollup/rollup-linux-loong64-gnu": "4.53.3", - "@rollup/rollup-linux-ppc64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-musl": "4.53.3", - "@rollup/rollup-linux-s390x-gnu": "4.53.3", - "@rollup/rollup-linux-x64-gnu": "4.53.3", - "@rollup/rollup-linux-x64-musl": "4.53.3", - "@rollup/rollup-openharmony-arm64": "4.53.3", - "@rollup/rollup-win32-arm64-msvc": "4.53.3", - "@rollup/rollup-win32-ia32-msvc": "4.53.3", - "@rollup/rollup-win32-x64-gnu": "4.53.3", - "@rollup/rollup-win32-x64-msvc": "4.53.3", + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", "fsevents": "~2.3.2" } }, @@ -4628,10 +4609,24 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, "node_modules/safer-buffer": { @@ -4655,9 +4650,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4836,6 +4831,13 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4851,7 +4853,7 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -5046,22 +5048,22 @@ } }, "node_modules/tldts": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.16.tgz", - "integrity": "sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", + "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.16" + "tldts-core": "^7.0.19" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.16.tgz", - "integrity": "sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", + "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", "dev": true, "license": "MIT" }, @@ -5352,13 +5354,13 @@ } }, "node_modules/vite": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.7.tgz", - "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -5427,19 +5429,19 @@ } }, "node_modules/vitest": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.15.tgz", - "integrity": "sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", + "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.15", - "@vitest/mocker": "4.0.15", - "@vitest/pretty-format": "4.0.15", - "@vitest/runner": "4.0.15", - "@vitest/snapshot": "4.0.15", - "@vitest/spy": "4.0.15", - "@vitest/utils": "4.0.15", + "@vitest/expect": "4.0.16", + "@vitest/mocker": "4.0.16", + "@vitest/pretty-format": "4.0.16", + "@vitest/runner": "4.0.16", + "@vitest/snapshot": "4.0.16", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -5467,10 +5469,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.15", - "@vitest/browser-preview": "4.0.15", - "@vitest/browser-webdriverio": "4.0.15", - "@vitest/ui": "4.0.15", + "@vitest/browser-playwright": "4.0.16", + "@vitest/browser-preview": "4.0.16", + "@vitest/browser-webdriverio": "4.0.16", + "@vitest/ui": "4.0.16", "happy-dom": "*", "jsdom": "*" }, @@ -5597,6 +5599,24 @@ "node": ">=8" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 1f7e948..dff4668 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "@rollup/plugin-virtual": "^3.0.2", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", - "@vitest/coverage-v8": "^4.0.15", - "@vitest/ui": "^4.0.15", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/ui": "^4.0.16", "cross-env": "^10.1.0", "glob": "^13.0.0", "gulp": "^5.0.1", @@ -54,10 +54,10 @@ "gulplog": "^2.2.0", "jsdom": "^27.3.0", "rimraf": "^6.1.2", - "rollup": "^4.53.3", + "rollup": "^4.53.5", "rollup-plugin-bundle-size": "^1.0.3", "strip-comments": "^2.0.1", "terser": "^5.44.1", - "vitest": "^4.0.15" + "vitest": "^4.0.16" } } From 33f66faf2fe270fa2768a278e9f17ed8edfe20fd Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:30:38 +0500 Subject: [PATCH 02/13] Remove comments and trim whitespace only in minified bundles --- rollup.config.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index a928381..da206ea 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -17,10 +17,10 @@ import { const is_production = process.env.NODE_ENV === "production"; -const global_plugins = [ +const global_plugins = optimize => [ node_resolve(), - remove_comments(), - trim_ws(), + optimize && remove_comments(), + optimize && trim_ws(), bundle_size(), alias({ entries: [ @@ -73,7 +73,7 @@ function create_configuration({ plugin_name, input, format, optimize }) { })] }, plugins: [ - ...global_plugins, + ...global_plugins(optimize), replace({ preventAssignment: true, values: { From 675afc7f7835be2e73a3993eb6e4bc181abd2733 Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:32:10 +0500 Subject: [PATCH 03/13] Use regular string literal --- src/plugins/router/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/router/router.js b/src/plugins/router/router.js index 443e1dc..464ac97 100644 --- a/src/plugins/router/router.js +++ b/src/plugins/router/router.js @@ -9,7 +9,7 @@ export default function({ $data, addScopeToNode, directive, magic, reactive }) { const router = $data(el).$router; if (!router && (value === "outlet" || value === "link")) { - warn(`no x-router directive found`); + warn("no x-router directive found"); return; } From 4bb50c7c74a6f10a151810c32eba2f7215867b5c Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:36:45 +0500 Subject: [PATCH 04/13] Improve x-router warning messages for better clarity --- src/plugins/router/router.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/router/router.js b/src/plugins/router/router.js index 464ac97..a7cfbe7 100644 --- a/src/plugins/router/router.js +++ b/src/plugins/router/router.js @@ -9,7 +9,7 @@ export default function({ $data, addScopeToNode, directive, magic, reactive }) { const router = $data(el).$router; if (!router && (value === "outlet" || value === "link")) { - warn("no x-router directive found"); + warn(`x-router:${value} is missing a parent x-router`) return; } @@ -157,7 +157,7 @@ export default function({ $data, addScopeToNode, directive, magic, reactive }) { function process_outlet() { if (router.outlet) { - warn("x-router:outlet already specified", router.outlet, el); + warn("x-router:outlet is already present", router.outlet, el); } else { router.outlet = el; From 2bbfe9e51edc102add41b08c5a573579de26aa9a Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:38:53 +0500 Subject: [PATCH 05/13] Formatting package.json files --- src/plugins/bound/package.json | 40 +++++++++++++-------------- src/plugins/destroy/package.json | 38 ++++++++++++------------- src/plugins/format/package.json | 42 ++++++++++++++-------------- src/plugins/fragment/package.json | 44 ++++++++++++++--------------- src/plugins/hotkey/package.json | 46 +++++++++++++++---------------- src/plugins/main/package.json | 46 +++++++++++++++---------------- src/plugins/match/package.json | 38 ++++++++++++------------- src/plugins/router/package.json | 42 ++++++++++++++-------------- src/plugins/template/package.json | 42 ++++++++++++++-------------- src/plugins/when/package.json | 42 ++++++++++++++-------------- 10 files changed, 210 insertions(+), 210 deletions(-) diff --git a/src/plugins/bound/package.json b/src/plugins/bound/package.json index 5330b6a..85e90d5 100644 --- a/src/plugins/bound/package.json +++ b/src/plugins/bound/package.json @@ -1,21 +1,21 @@ { - "name": "@ramstack/alpinegear-bound", - "version": "0.0.0", - "description": "@ramstack/alpinegear-bound provides the 'x-bound' Alpine.js directive, which allows for two-way binding of input elements and their associated data properties.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/bound" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-binding", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-bound.js", - "module": "alpinegear-bound.esm.js" - } + "name": "@ramstack/alpinegear-bound", + "version": "0.0.0", + "description": "@ramstack/alpinegear-bound provides the 'x-bound' Alpine.js directive, which allows for two-way binding of input elements and their associated data properties.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/bound" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-binding", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-bound.js", + "module": "alpinegear-bound.esm.js" +} diff --git a/src/plugins/destroy/package.json b/src/plugins/destroy/package.json index 25458bf..75fdef3 100644 --- a/src/plugins/destroy/package.json +++ b/src/plugins/destroy/package.json @@ -1,20 +1,20 @@ { - "name": "@ramstack/alpinegear-destroy", - "version": "0.0.0", - "description": "@ramstack/alpinegear-destroy provides 'x-destroy' Alpine.js directive, which is the opposite of 'x-init' and allows you to execute code when an element is removed from the DOM.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/destroy" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-destroy.js", - "module": "alpinegear-destroy.esm.js" - } + "name": "@ramstack/alpinegear-destroy", + "version": "0.0.0", + "description": "@ramstack/alpinegear-destroy provides 'x-destroy' Alpine.js directive, which is the opposite of 'x-init' and allows you to execute code when an element is removed from the DOM.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/destroy" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-destroy.js", + "module": "alpinegear-destroy.esm.js" +} diff --git a/src/plugins/format/package.json b/src/plugins/format/package.json index 790d50d..0a9ff21 100644 --- a/src/plugins/format/package.json +++ b/src/plugins/format/package.json @@ -1,22 +1,22 @@ { - "name": "@ramstack/alpinegear-format", - "version": "0.0.0", - "description": "@ramstack/alpinegear-format provides 'x-format' Alpine.js directive, which allows you to easily interpolate text using a template syntax similar to what's available in Vue.js.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/format" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "formatting", - "template", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-format.js", - "module": "alpinegear-format.esm.js" - } + "name": "@ramstack/alpinegear-format", + "version": "0.0.0", + "description": "@ramstack/alpinegear-format provides 'x-format' Alpine.js directive, which allows you to easily interpolate text using a template syntax similar to what's available in Vue.js.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/format" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "formatting", + "template", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-format.js", + "module": "alpinegear-format.esm.js" +} diff --git a/src/plugins/fragment/package.json b/src/plugins/fragment/package.json index 29e329d..6ceeed9 100644 --- a/src/plugins/fragment/package.json +++ b/src/plugins/fragment/package.json @@ -1,23 +1,23 @@ { - "name": "@ramstack/alpinegear-fragment", - "version": "0.0.0", - "description": "@ramstack/alpinegear-fragment provides 'x-format' Alpine.js directive, allowing for fragment-like behavior similar to what's available in frameworks like 'Vue.js' or 'React', where multiple root elements can be grouped together.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/fragment" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "fragment", - "alpinejs-fragment", - "alpinejs-directive", - "alpinejs-plugin", - "template" - ], - "main": "alpinegear-fragment.js", - "module": "alpinegear-fragment.esm.js" - } + "name": "@ramstack/alpinegear-fragment", + "version": "0.0.0", + "description": "@ramstack/alpinegear-fragment provides 'x-format' Alpine.js directive, allowing for fragment-like behavior similar to what's available in frameworks like 'Vue.js' or 'React', where multiple root elements can be grouped together.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/fragment" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "fragment", + "alpinejs-fragment", + "alpinejs-directive", + "alpinejs-plugin", + "template" + ], + "main": "alpinegear-fragment.js", + "module": "alpinegear-fragment.esm.js" +} diff --git a/src/plugins/hotkey/package.json b/src/plugins/hotkey/package.json index e82b04b..16d1e67 100644 --- a/src/plugins/hotkey/package.json +++ b/src/plugins/hotkey/package.json @@ -1,24 +1,24 @@ { - "name": "@ramstack/alpinegear-hotkey", - "version": "0.0.0", - "description": "@ramstack/alpinegear-hotkey provides 'x-hotkey' Alpine.js directive, allowing easily handle keyboard shortcuts.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/hotkey" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "hotkey", - "shortcut", - "alpinejs-hotkey", - "alpinejs-shortcut", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-hotkey.js", - "module": "alpinegear-hotkey.esm.js" - } + "name": "@ramstack/alpinegear-hotkey", + "version": "0.0.0", + "description": "@ramstack/alpinegear-hotkey provides 'x-hotkey' Alpine.js directive, allowing easily handle keyboard shortcuts.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/hotkey" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "hotkey", + "shortcut", + "alpinejs-hotkey", + "alpinejs-shortcut", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-hotkey.js", + "module": "alpinegear-hotkey.esm.js" +} diff --git a/src/plugins/main/package.json b/src/plugins/main/package.json index c49d2a5..22dfd14 100644 --- a/src/plugins/main/package.json +++ b/src/plugins/main/package.json @@ -1,24 +1,24 @@ { - "name": "@ramstack/alpinegear-main", - "version": "0.0.0", - "description": "@ramstack/alpinegear-main is a combined plugin that includes several Alpine.js directives, providing a convenient all-in-one package.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/main" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-binding", - "alpinejs-fragment", - "alpinejs-directive", - "alpinejs-plugin", - "template", - "formatting" - ], - "main": "alpinegear-main.js", - "module": "alpinegear-main.esm.js" - } + "name": "@ramstack/alpinegear-main", + "version": "0.0.0", + "description": "@ramstack/alpinegear-main is a combined plugin that includes several Alpine.js directives, providing a convenient all-in-one package.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/main" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-binding", + "alpinejs-fragment", + "alpinejs-directive", + "alpinejs-plugin", + "template", + "formatting" + ], + "main": "alpinegear-main.js", + "module": "alpinegear-main.esm.js" +} diff --git a/src/plugins/match/package.json b/src/plugins/match/package.json index f84c6a3..1efcb9d 100644 --- a/src/plugins/match/package.json +++ b/src/plugins/match/package.json @@ -1,20 +1,20 @@ { - "name": "@ramstack/alpinegear-match", - "version": "0.0.0", - "description": "@ramstack/alpinegear-match provides the 'x-match' Alpine.js directive, which functions similarly to the 'switch' statement in many programming languages, allowing to conditionally render elements based on matching cases.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/match" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-match.js", - "module": "alpinegear-match.esm.js" - } + "name": "@ramstack/alpinegear-match", + "version": "0.0.0", + "description": "@ramstack/alpinegear-match provides the 'x-match' Alpine.js directive, which functions similarly to the 'switch' statement in many programming languages, allowing to conditionally render elements based on matching cases.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/match" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-match.js", + "module": "alpinegear-match.esm.js" +} diff --git a/src/plugins/router/package.json b/src/plugins/router/package.json index 712f596..c3bd64d 100644 --- a/src/plugins/router/package.json +++ b/src/plugins/router/package.json @@ -1,22 +1,22 @@ { - "name": "@ramstack/alpinegear-router", - "version": "0.0.0", - "description": "@ramstack/alpinegear-router provides routing-related directives for Alpine.js, enabling client-side navigation and routing functionality.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/router" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-router", - "alpinejs-routing", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-router.js", - "module": "alpinegear-router.esm.js" - } + "name": "@ramstack/alpinegear-router", + "version": "0.0.0", + "description": "@ramstack/alpinegear-router provides routing-related directives for Alpine.js, enabling client-side navigation and routing functionality.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/router" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-router", + "alpinejs-routing", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-router.js", + "module": "alpinegear-router.esm.js" +} diff --git a/src/plugins/template/package.json b/src/plugins/template/package.json index 4702e92..eba3c98 100644 --- a/src/plugins/template/package.json +++ b/src/plugins/template/package.json @@ -1,22 +1,22 @@ { - "name": "@ramstack/alpinegear-template", - "version": "0.0.0", - "description": "@ramstack/alpinegear-template provides 'x-template' Alpine.js directive, that enhances template management, providing better control over reusable template blocks, dynamic and recursive component rendering.", - "author": "Rameel Burhan", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/template" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "template", - "formatting", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "alpinegear-template.js", - "module": "alpinegear-template.esm.js" - } + "name": "@ramstack/alpinegear-template", + "version": "0.0.0", + "description": "@ramstack/alpinegear-template provides 'x-template' Alpine.js directive, that enhances template management, providing better control over reusable template blocks, dynamic and recursive component rendering.", + "author": "Rameel Burhan", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/template" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "template", + "formatting", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "alpinegear-template.js", + "module": "alpinegear-template.esm.js" +} diff --git a/src/plugins/when/package.json b/src/plugins/when/package.json index 151a87a..2958359 100644 --- a/src/plugins/when/package.json +++ b/src/plugins/when/package.json @@ -1,22 +1,22 @@ { - "name": "@ramstack/alpinegear-when", - "version": "0.0.0", - "description": "@ramstack/alpinegear-when provides additional directives, magic functions, and utilities for a more productive development experience", - "author": { - "name": "Rameel Burhan", - "email": "rameel-b@hotmail.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", - "directory": "src/plugins/when" - }, - "keywords": [ - "alpine.js", - "alpinejs", - "alpinejs-directive", - "alpinejs-plugin" - ], - "main": "dist/alpinegear-when.js" - } + "name": "@ramstack/alpinegear-when", + "version": "0.0.0", + "description": "@ramstack/alpinegear-when provides additional directives, magic functions, and utilities for a more productive development experience", + "author": { + "name": "Rameel Burhan", + "email": "rameel-b@hotmail.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/rameel/ramstack.alpinegear.js.git", + "directory": "src/plugins/when" + }, + "keywords": [ + "alpine.js", + "alpinejs", + "alpinejs-directive", + "alpinejs-plugin" + ], + "main": "dist/alpinegear-when.js" +} From 7da08a2c620f860fa3316f13831a1b55af9c74af Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 22:40:56 +0500 Subject: [PATCH 06/13] Rename requestclose event to beforeclose --- src/plugins/dialog/README.md | 8 ++++---- src/plugins/dialog/index.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/dialog/README.md b/src/plugins/dialog/README.md index 8033fce..1173f64 100644 --- a/src/plugins/dialog/README.md +++ b/src/plugins/dialog/README.md @@ -145,7 +145,7 @@ All events are dispatched from the `x-dialog` root element. * `event.detail.state` contains the new state (`true` / `false`) * Non-cancelable, does not bubble -### `requestclose` +### `beforeclose` * Fired **before** the dialog is closed * Cancelable, does not bubble @@ -161,7 +161,7 @@ If this event is canceled, the dialog remains **open**. * `event.detail.value` contains the return value Example: -`value="Yes"` → `close:yes` +`value="Yes"` >> `close:yes` ### `close` @@ -173,7 +173,7 @@ Example: ```html
@@ -236,7 +236,7 @@ The resolved value is the dialog's return value. Closes the dialog programmatically. * `returnValue` — string returned by the dialog -* Closing can be prevented by canceling `requestclose` +* Closing can be prevented by canceling `beforeclose` ## Source Code diff --git a/src/plugins/dialog/index.js b/src/plugins/dialog/index.js index 44ccb73..dc0f852 100644 --- a/src/plugins/dialog/index.js +++ b/src/plugins/dialog/index.js @@ -149,7 +149,7 @@ function plugin({ bind, directive }) { const { owner, panel } = get_dialog_info(); const detail = { value }; - if (dispatch(owner, "requestclose", detail, { cancelable: true })) { + if (dispatch(owner, "beforeclose", detail, { cancelable: true })) { value && dispatch(owner, "close:" + value.toLowerCase(), detail); dispatch(owner, "close", detail); panel.close(value); From 63486a9ee4032c878835c5d29bf6c883b10cbbcb Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 23:00:47 +0500 Subject: [PATCH 07/13] Expose dialog methods (open, show, close) on the the root x-dialog DOM element --- src/plugins/dialog/index.js | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/plugins/dialog/index.js b/src/plugins/dialog/index.js index dc0f852..eb93089 100644 --- a/src/plugins/dialog/index.js +++ b/src/plugins/dialog/index.js @@ -39,19 +39,27 @@ function plugin({ bind, directive }) { modal: value === "modal" }; + Object.defineProperty(el, "open", { + get() { + return !!el._r_dialog?.panel.open; + } + }); + + Object.assign(el, { + show() { + return dialog_show(); + }, + close(value) { + dialog_close(value); + } + }); + bind(el, { "x-data"() { return { open: false, show() { - const { panel, modal } = get_dialog_info(); - if (panel) { - return new Promise(resolve => { - listen(panel, "close", () => resolve(panel.returnValue), { once: true }); - panel[modal ? "showModal" : "show"](); - }); - } - return Promise.resolve(); + return dialog_show(); }, close(value) { dialog_close(value); @@ -143,6 +151,19 @@ function plugin({ bind, directive }) { }); } + function dialog_show() { + const { panel, modal } = get_dialog_info(); + + if (panel) { + return new Promise(resolve => { + listen(panel, "close", () => resolve(panel.returnValue), { once: true }); + panel[modal ? "showModal" : "show"](); + }); + } + + return Promise.resolve(); + } + function dialog_close(value) { value ??= ""; From 7e9295d7d4e815dc055b1abc09c1742fb41d40cc Mon Sep 17 00:00:00 2001 From: rameel Date: Fri, 19 Dec 2025 23:01:13 +0500 Subject: [PATCH 08/13] Clean up and formatting --- src/plugins/dialog/index.js | 43 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/plugins/dialog/index.js b/src/plugins/dialog/index.js index eb93089..98a4ce3 100644 --- a/src/plugins/dialog/index.js +++ b/src/plugins/dialog/index.js @@ -67,25 +67,6 @@ function plugin({ bind, directive }) { } } }); - - cleanup( - // - // Listening to the "submit" event on the document element, ensuring (to some extent) - // that our handler executes last among all handlers listening for this event. - // This allows us to determine whether the event was canceled by someone else. - // - listen(document, "submit", e => { - if (e.target.method === "dialog" && closest(e.target, n => n === el) && !e.defaultPrevented) { - // - // Prevent the dialog from closing immediately, - // as we need to trigger our own custom events first. - // - e.preventDefault(); - - dialog_close(e.submitter?.value); - } - }) - ); } function process_panel() { @@ -94,7 +75,7 @@ function plugin({ bind, directive }) { } if (!is_dialog(el)) { - warn("x-dialog:panel can only be used on a 'dialog' element"); + warn("x-dialog:panel should be used on a element"); return; } @@ -106,9 +87,8 @@ function plugin({ bind, directive }) { this.open = el.open; }, "@toggle"(e) { - el.open && dispatch(owner, "open"); + (this.open = el.open) && dispatch(owner, "open"); dispatch(owner, "toggle", { state: e.newState }); - this.open = el.open; }, "@cancel.prevent"() { dialog_close(); @@ -130,6 +110,25 @@ function plugin({ bind, directive }) { } } }); + + cleanup( + // + // Listening to the "submit" event on the document element, ensuring (to some extent) + // that our handler executes last among all handlers listening for this event. + // This allows us to determine whether the event was canceled by someone else. + // + listen(document, "submit", e => { + if (e.target.method === "dialog" && closest(e.target, n => n === el) && !e.defaultPrevented) { + // + // Prevent the dialog from closing immediately, + // as we need to trigger our own custom events first. + // + e.preventDefault(); + + dialog_close(e.submitter?.value); + } + }) + ); } function process_trigger() { From e80257546b1e04abb7781797d5b21fcf36fa4e67 Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 20 Dec 2025 00:42:40 +0500 Subject: [PATCH 09/13] Update README --- src/plugins/dialog/README.md | 110 ++++++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/src/plugins/dialog/README.md b/src/plugins/dialog/README.md index 1173f64..686ea14 100644 --- a/src/plugins/dialog/README.md +++ b/src/plugins/dialog/README.md @@ -213,16 +213,120 @@ Value-scoped close events make integration with `htmx` straightforward and js-fr
``` +## Nested dialogs + +Nesting `x-dialog` components directly in the DOM is **not supported** and results in **undefined behavior**. + +This limitation is intentional and is based on native HTML constraints: + +* The `` element does not define consistent behavior for nested dialogs +* HTML forms cannot be safely nested +* Buttons inside nested dialogs may be treated as part of an outer form +* Validation and submission semantics become unpredictable across browsers + +For these reasons, we do not attempt to emulate or implement workarounds for nested dialog behavior. + +### Recommended pattern + +A common use case that appears to require nested dialogs is **confirming a destructive or cancel action** +while a dialog is already open (for example, canceling a form with unsaved data). + +Instead of nesting dialogs, the recommended approach is to **guard the close operation** using a secondary dialog. + +```html +
+ + + +
+

Create an account

+ + + + + +
+ + +
+
+
+
+ +
+ + You have unsaved changes. Discard them? + + + + +
+``` + +### NOTE + +The `beforeclose` event is dispatched **synchronously**. + +Because of this, the decision to cancel the close operation **must be made synchronously during event dispatch**. +If the event handler returns a `Promise` or performs asynchronous work before calling `preventDefault()`, +the event dispatch will already have completed and the dialog will close regardless. + +For this reason: + +* `beforeclose` handlers **must not rely on `async / await`** +* `event.preventDefault()` **must be called synchronously** +* any asynchronous confirmation logic must be deferred until after the close has been canceled + +In the example above, this is why the confirmation dialog is shown *after* the close has been prevented: + +1. `beforeclose` is dispatched synchronously +2. The handler immediately calls `event.preventDefault()` +3. The close operation is canceled +4. A secondary dialog is shown using `show().then(...)` +5. If the user confirms, the original dialog is closed programmatically + ## Properties and Methods All properties and methods are available within the `x-dialog` scope. +In addition, the same API is exposed on the root DOM element to which the `x-dialog` directive is applied. +This allows imperative control via `x-ref` when needed. + +```js +const result = await this.$refs.dialog.show(); +``` +```js +const el = document.getElementById("dialog"); +const result = await el.show(); +``` + + ### `open` (readonly) A boolean representing the dialog state: - -* `true` — dialog is open -* `false` — dialog is closed +* `true` — dialog is open; otherwise, closed ### `show(): Promise` From c866e62e4d59e8cb590c8c879b34d7b9e7c14480 Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 20 Dec 2025 00:53:13 +0500 Subject: [PATCH 10/13] Update README --- src/plugins/dialog/README.md | 57 +++++++----------------------------- 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/src/plugins/dialog/README.md b/src/plugins/dialog/README.md index 686ea14..3e9cfab 100644 --- a/src/plugins/dialog/README.md +++ b/src/plugins/dialog/README.md @@ -5,8 +5,8 @@ `@ramstack/alpinegear-dialog` is a **headless dialog directive for Alpine.js** built on top of the native HTML `` element. -It allows you to describe dialog behavior declaratively, without coupling logic to JavaScript code, -which makes it especially suitable for **progressive enhancement** and **seamless integration with htmx**. +It allows you to describe dialog behavior declaratively, without coupling logic to JavaScript code. +This makes it especially suitable for **progressive enhancement** and **seamless integration with htmx**. The plugin provides a small set of composable directives that together form a dialog "component", while leaving markup, layout, and styling entirely up to you. @@ -17,7 +17,7 @@ while leaving markup, layout, and styling entirely up to you. * Supports **modal** and **non-modal** dialogs * Built on the native `` element * Value-based close semantics -* Promise-based API for imperative usage +* Promise-based API for imperative control * Value-scoped events for htmx integration * No styling or markup constraints (headless UI) @@ -93,7 +93,7 @@ The root directive `x-dialog` supports two display modes: The `x-dialog:action` directive closes the dialog when activated. * The `value` attribute defines the dialog's return value -* If `value` is omitted, an empty string (`""`) is used +* If `value` is omitted, an empty string (`""`) is used as the return value The return value is propagated through events and the Promise-based API. @@ -141,7 +141,7 @@ All events are dispatched from the `x-dialog` root element. ### `toggle` -* Fired whenever the dialog state changes +* Fired whenever the dialog open state changes * `event.detail.state` contains the new state (`true` / `false`) * Non-cancelable, does not bubble @@ -191,7 +191,7 @@ Example: ``` -## HTXM Integration +## HTMX Integration Value-scoped close events make integration with `htmx` straightforward and js-free. @@ -224,7 +224,7 @@ This limitation is intentional and is based on native HTML constraints: * Buttons inside nested dialogs may be treated as part of an outer form * Validation and submission semantics become unpredictable across browsers -For these reasons, we do not attempt to emulate or implement workarounds for nested dialog behavior. +For these reasons, we intentionally do not attempt to emulate or implement workarounds for nested dialog behavior. ### Recommended pattern @@ -289,7 +289,7 @@ Instead of nesting dialogs, the recommended approach is to **guard the close ope The `beforeclose` event is dispatched **synchronously**. -Because of this, the decision to cancel the close operation **must be made synchronously during event dispatch**. +As a result, the decision to cancel the close operation **must be made synchronously during event dispatch**. If the event handler returns a `Promise` or performs asynchronous work before calling `preventDefault()`, the event dispatch will already have completed and the dialog will close regardless. @@ -326,11 +326,11 @@ const result = await el.show(); ### `open` (readonly) A boolean representing the dialog state: -* `true` — dialog is open; otherwise, closed +* `true` — dialog is open; otherwise `false` ### `show(): Promise` -Displays the dialog using the configured mode (modal or non-modal). +Displays the dialog using the configured display mode (modal or non-modal). Returns a `Promise` that resolves when the dialog is closed. The resolved value is the dialog's return value. @@ -349,43 +349,6 @@ You can find the source code for this plugin on GitHub: https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog -## Related projects - -**[@ramstack/alpinegear-main](https://www.npmjs.com/package/@ramstack/alpinegear-main)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/main))
-Provides a combined plugin that includes several useful directives. -This package aggregates multiple individual plugins, offering a convenient all-in-one bundle. -Included directives: `x-bound`, `x-format`, `x-fragment`, `x-match`, `x-template`, and `x-when`. - -**[@ramstack/alpinegear-bound](https://www.npmjs.com/package/@ramstack/alpinegear-bound)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/bound))
-Provides the `x-bound` directive, which allows for two-way binding of input elements and their associated data properties. -It works similarly to the binding provided by [Svelte](https://svelte.dev/docs/element-directives#bind-property) -and also supports synchronizing values between two `Alpine.js` data properties. - -**[@ramstack/alpinegear-template](https://www.npmjs.com/package/@ramstack/alpinegear-template)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/template))
-Provides the `x-template` directive, which allows you to define a template once anywhere in the DOM and reference it by its ID. - -**[@ramstack/alpinegear-fragment](https://www.npmjs.com/package/@ramstack/alpinegear-fragment)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/fragment))
-Provides the `x-fragment` directive, which allows for fragment-like behavior similar to what's available in frameworks -like `Vue.js` or `React`, where multiple root elements can be grouped together. - -**[@ramstack/alpinegear-match](https://www.npmjs.com/package/@ramstack/alpinegear-match)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/match))
-Provides the `x-match` directive, which functions similarly to the `switch` statement in many programming languages, -allowing you to conditionally render elements based on matching cases. - -**[@ramstack/alpinegear-when](https://www.npmjs.com/package/@ramstack/alpinegear-when)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/when))
-Provides the `x-when` directive, which allows for conditional rendering of elements similar to `x-if`, but supports multiple root elements. - -**[@ramstack/alpinegear-destroy](https://www.npmjs.com/package/@ramstack/alpinegear-destroy)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/destroy))
-Provides the `x-destroy` directive, which is the opposite of `x-init` and allows you to hook into the cleanup phase -of any element, running a callback when the element is removed from the DOM. - -**[@ramstack/alpinegear-hotkey](https://www.npmjs.com/package/@ramstack/alpinegear-hotkey)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/hotkey))
-Provides the `x-hotkey` directive, which allows you to easily handle keyboard shortcuts within your Alpine.js components or application. - -**[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
-Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. - - ## Contributions Bug reports and contributions are welcome. From c7691be39646823821a5d3767f7a7c58e89d99db Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 20 Dec 2025 01:03:01 +0500 Subject: [PATCH 11/13] Update README --- src/plugins/bound/README.md | 5 +++++ src/plugins/destroy/README.md | 5 +++++ src/plugins/dialog/README.md | 36 ++++++++++++++++++++++++++++++++++ src/plugins/format/README.md | 5 +++++ src/plugins/fragment/README.md | 5 +++++ src/plugins/hotkey/README.md | 5 +++++ src/plugins/main/README.md | 5 +++++ src/plugins/match/README.md | 5 +++++ src/plugins/router/README.md | 5 +++++ src/plugins/template/README.md | 5 +++++ src/plugins/when/README.md | 5 +++++ 11 files changed, 86 insertions(+) diff --git a/src/plugins/bound/README.md b/src/plugins/bound/README.md index 7d8b4ec..64811ae 100644 --- a/src/plugins/bound/README.md +++ b/src/plugins/bound/README.md @@ -387,6 +387,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/destroy/README.md b/src/plugins/destroy/README.md index 0db9804..0638b7f 100644 --- a/src/plugins/destroy/README.md +++ b/src/plugins/destroy/README.md @@ -99,6 +99,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/dialog/README.md b/src/plugins/dialog/README.md index 3e9cfab..ae91897 100644 --- a/src/plugins/dialog/README.md +++ b/src/plugins/dialog/README.md @@ -348,6 +348,42 @@ You can find the source code for this plugin on GitHub: https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog +## Related projects + +**[@ramstack/alpinegear-main](https://www.npmjs.com/package/@ramstack/alpinegear-main)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/main))
+Provides a combined plugin that includes several useful directives. +This package aggregates multiple individual plugins, offering a convenient all-in-one bundle. +Included directives: `x-bound`, `x-format`, `x-fragment`, `x-match`, `x-template`, and `x-when`. + +**[@ramstack/alpinegear-bound](https://www.npmjs.com/package/@ramstack/alpinegear-bound)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/bound))
+Provides the `x-bound` directive, which allows for two-way binding of input elements and their associated data properties. +It works similarly to the binding provided by [Svelte](https://svelte.dev/docs/element-directives#bind-property) +and also supports synchronizing values between two `Alpine.js` data properties. + +**[@ramstack/alpinegear-template](https://www.npmjs.com/package/@ramstack/alpinegear-template)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/template))
+Provides the `x-template` directive, which allows you to define a template once anywhere in the DOM and reference it by its ID. + +**[@ramstack/alpinegear-fragment](https://www.npmjs.com/package/@ramstack/alpinegear-fragment)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/fragment))
+Provides the `x-fragment` directive, which allows for fragment-like behavior similar to what's available in frameworks +like `Vue.js` or `React`, where multiple root elements can be grouped together. + +**[@ramstack/alpinegear-match](https://www.npmjs.com/package/@ramstack/alpinegear-match)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/match))
+Provides the `x-match` directive, which functions similarly to the `switch` statement in many programming languages, +allowing you to conditionally render elements based on matching cases. + +**[@ramstack/alpinegear-when](https://www.npmjs.com/package/@ramstack/alpinegear-when)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/when))
+Provides the `x-when` directive, which allows for conditional rendering of elements similar to `x-if`, but supports multiple root elements. + +**[@ramstack/alpinegear-destroy](https://www.npmjs.com/package/@ramstack/alpinegear-destroy)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/destroy))
+Provides the `x-destroy` directive, which is the opposite of `x-init` and allows you to hook into the cleanup phase +of any element, running a callback when the element is removed from the DOM. + +**[@ramstack/alpinegear-hotkey](https://www.npmjs.com/package/@ramstack/alpinegear-hotkey)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/hotkey))
+Provides the `x-hotkey` directive, which allows you to easily handle keyboard shortcuts within your Alpine.js components or application. + +**[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
+Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/format/README.md b/src/plugins/format/README.md index c8c9658..68f6323 100644 --- a/src/plugins/format/README.md +++ b/src/plugins/format/README.md @@ -197,6 +197,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/fragment/README.md b/src/plugins/fragment/README.md index aec770d..ecd718b 100644 --- a/src/plugins/fragment/README.md +++ b/src/plugins/fragment/README.md @@ -133,6 +133,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/hotkey/README.md b/src/plugins/hotkey/README.md index 0e9af2a..e93255a 100644 --- a/src/plugins/hotkey/README.md +++ b/src/plugins/hotkey/README.md @@ -194,6 +194,11 @@ of any element, running a callback when the element is removed from the DOM. **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/main/README.md b/src/plugins/main/README.md index a287cd0..ad0f0de 100644 --- a/src/plugins/main/README.md +++ b/src/plugins/main/README.md @@ -173,6 +173,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/match/README.md b/src/plugins/match/README.md index d290552..4985762 100644 --- a/src/plugins/match/README.md +++ b/src/plugins/match/README.md @@ -144,6 +144,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/router/README.md b/src/plugins/router/README.md index d0f6e03..d05c1bc 100644 --- a/src/plugins/router/README.md +++ b/src/plugins/router/README.md @@ -372,6 +372,11 @@ of any element, running a callback when the element is removed from the DOM. **[@ramstack/alpinegear-hotkey](https://www.npmjs.com/package/@ramstack/alpinegear-hotkey)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/hotkey))
Provides the `x-hotkey` directive, which allows you to easily handle keyboard shortcuts within your Alpine.js components or application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/template/README.md b/src/plugins/template/README.md index 915988c..0db39ea 100644 --- a/src/plugins/template/README.md +++ b/src/plugins/template/README.md @@ -202,6 +202,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. diff --git a/src/plugins/when/README.md b/src/plugins/when/README.md index ea84e4d..cea960a 100644 --- a/src/plugins/when/README.md +++ b/src/plugins/when/README.md @@ -130,6 +130,11 @@ Provides the `x-hotkey` directive, which allows you to easily handle keyboard sh **[@ramstack/alpinegear-router](https://www.npmjs.com/package/@ramstack/alpinegear-router)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/router))
Provides the `x-router` and `x-route` directives, which enable client-side navigation and routing functionality within your Alpine.js application. +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive for Alpine.js based on the native HTML `` element. +It supports declarative composition, value-based close semantics, and both modal and non-modal dialogs, +with optional Promise-based imperative control. + ## Contributions Bug reports and contributions are welcome. From 50a971c1388770b014b098f1e599c124053f9f7f Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 20 Dec 2025 01:16:54 +0500 Subject: [PATCH 12/13] Update README --- src/plugins/dialog/README.md | 47 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/plugins/dialog/README.md b/src/plugins/dialog/README.md index ae91897..a39f7d9 100644 --- a/src/plugins/dialog/README.md +++ b/src/plugins/dialog/README.md @@ -3,7 +3,7 @@ [![NPM](https://img.shields.io/npm/v/@ramstack/alpinegear-dialog)](https://www.npmjs.com/package/@ramstack/alpinegear-dialog) [![MIT](https://img.shields.io/github/license/rameel/ramstack.alpinegear.js)](https://github.com/rameel/ramstack.alpinegear.js/blob/main/LICENSE) -`@ramstack/alpinegear-dialog` is a **headless dialog directive for Alpine.js** built on top of the native HTML `` element. +`@ramstack/alpinegear-dialog` is a **headless dialog directive for Alpine.js**, built on top of the native HTML `` element. It allows you to describe dialog behavior declaratively, without coupling logic to JavaScript code. This makes it especially suitable for **progressive enhancement** and **seamless integration with htmx**. @@ -19,7 +19,7 @@ while leaving markup, layout, and styling entirely up to you. * Value-based close semantics * Promise-based API for imperative control * Value-scoped events for htmx integration -* No styling or markup constraints (headless UI) +* Completely headless (no markup or styling constraints) ## Installation @@ -76,17 +76,17 @@ Alpine.start(); Dialogs are composed using the following directives: -* `x-dialog` – dialog root and scope provider (`x-dialog:modal` enables modal behavior) -* `x-dialog:trigger` – element that opens the dialog -* `x-dialog:panel` – the dialog panel (must be a `` element) -* `x-dialog:action` – closes the dialog and optionally provides a return value +* `x-dialog` — dialog root and scope provider (`x-dialog:modal` enables modal behavior) +* `x-dialog:trigger` — element that opens the dialog +* `x-dialog:panel` — the dialog panel (must be a `` element) +* `x-dialog:action` — closes the dialog and optionally provides a return value ### Dialog Modes -The root directive `x-dialog` supports two display modes: +The root `x-dialog` directive supports two display modes: * **Non-modal dialog** (default) -* **Modal dialog**, enabled by using `x-dialog:modal` +* **Modal dialog**, enabled via `x-dialog:modal` ### Actions and return values @@ -95,9 +95,9 @@ The `x-dialog:action` directive closes the dialog when activated. * The `value` attribute defines the dialog's return value * If `value` is omitted, an empty string (`""`) is used as the return value -The return value is propagated through events and the Promise-based API. +The return value is propagated through both **events** and the **Promise-based API**. -## Forms in dialogs +### Forms in Dialogs Dialogs can contain forms and fully rely on the browser's native form handling. @@ -121,14 +121,14 @@ Dialogs can contain forms and fully rely on the browser's native form handling. ``` -### Notes +#### Notes * `x-dialog:action` is **optional** inside `
` * Native form validation applies automatically * The dialog closes only if validation succeeds * `formnovalidate` allows closing the dialog without triggering validation -In short, the dialog behaves exactly like a standard HTML dialog with a form. +In practice, the dialog behaves exactly like a standard HTML `` with a form. ## Events @@ -193,7 +193,7 @@ Example: ## HTMX Integration -Value-scoped close events make integration with `htmx` straightforward and js-free. +Value-scoped close events make integration with **htmx** straightforward and JavaScript-free. ```html
``` -## Nested dialogs +## Nested Dialogs Nesting `x-dialog` components directly in the DOM is **not supported** and results in **undefined behavior**. -This limitation is intentional and is based on native HTML constraints: +This limitation is intentional and follows native HTML constraints: * The `` element does not define consistent behavior for nested dialogs * HTML forms cannot be safely nested @@ -249,8 +249,8 @@ Instead of nesting dialogs, the recommended approach is to **guard the close ope }); } } - }" -> + }"> + @@ -285,21 +285,21 @@ Instead of nesting dialogs, the recommended approach is to **guard the close ope
``` -### NOTE +### Important Note on `beforeclose` The `beforeclose` event is dispatched **synchronously**. As a result, the decision to cancel the close operation **must be made synchronously during event dispatch**. -If the event handler returns a `Promise` or performs asynchronous work before calling `preventDefault()`, +If the handler returns a `Promise` or performs asynchronous work before calling `preventDefault()`, the event dispatch will already have completed and the dialog will close regardless. For this reason: * `beforeclose` handlers **must not rely on `async / await`** * `event.preventDefault()` **must be called synchronously** -* any asynchronous confirmation logic must be deferred until after the close has been canceled +* Any asynchronous confirmation logic must occur *after* the close has been canceled -In the example above, this is why the confirmation dialog is shown *after* the close has been prevented: +In the example above, the flow is: 1. `beforeclose` is dispatched synchronously 2. The handler immediately calls `event.preventDefault()` @@ -307,22 +307,23 @@ In the example above, this is why the confirmation dialog is shown *after* the c 4. A secondary dialog is shown using `show().then(...)` 5. If the user confirms, the original dialog is closed programmatically + ## Properties and Methods All properties and methods are available within the `x-dialog` scope. -In addition, the same API is exposed on the root DOM element to which the `x-dialog` directive is applied. +In addition, the same API is exposed on the **root DOM element** to which the `x-dialog` directive is applied. This allows imperative control via `x-ref` when needed. ```js const result = await this.$refs.dialog.show(); ``` + ```js const el = document.getElementById("dialog"); const result = await el.show(); ``` - ### `open` (readonly) A boolean representing the dialog state: From 9a0234a152ba11eb6830423ce729457286787540 Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 20 Dec 2025 01:25:44 +0500 Subject: [PATCH 13/13] Update README --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d661477..2d87c5f 100644 --- a/README.md +++ b/README.md @@ -144,12 +144,33 @@ Provides routing-related directives, enabling client-side navigation and routing ``` +**[@ramstack/alpinegear-dialog](https://www.npmjs.com/package/@ramstack/alpinegear-dialog)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/dialog))
+Provides a headless dialog directive, built on the native HTML `` element. +It enables declarative composition of modal and non-modal dialogs with value-based close semantics, +Promise-based imperative control, and seamless integration with htmx. + +```html +
+ + + + + Are you sure you want to delete this item? + +
+ + +
+
+
+``` **[@ramstack/alpinegear-destroy](https://www.npmjs.com/package/@ramstack/alpinegear-destroy)** ([README](https://github.com/rameel/ramstack.alpinegear.js/tree/main/src/plugins/destroy))
Provides `x-destroy` provides directive, which is the opposite of `x-init` and allows you to execute code when an element is removed from the DOM. ```html -