diff --git a/.ncurc.json b/.ncurc.json deleted file mode 100644 index 274f30e..0000000 --- a/.ncurc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "reject": ["winduum"] -} diff --git a/.stylelintrc b/.stylelintrc index 89b11e1..99dd830 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -5,14 +5,15 @@ ], "rules": { "@stylistic/selector-list-comma-newline-after": "always-multi-line", - "@stylistic/max-line-length": 160, + "@stylistic/max-line-length": 240, "at-rule-no-unknown": [true, {"ignoreAtRules": ["layer", "tailwind"]}], "length-zero-no-unit": [true, {"ignore": ["custom-properties"]}], "property-no-vendor-prefix": [true, { "ignoreProperties": "appearance" }], "number-max-precision": [4, { "ignoreProperties": "letter-spacing" }], "selector-class-pattern": null, "import-notation": "string", - "media-feature-range-notation": "prefix" + "media-feature-range-notation": "prefix", + "property-no-unknown": [true, { "ignoreProperties": ["/^mso-/"]} ] }, "ignoreFiles": ["**/+.css"] } diff --git a/CHANGELOG b/CHANGELOG.md similarity index 91% rename from CHANGELOG rename to CHANGELOG.md index bf71b3a..7841a9a 100644 --- a/CHANGELOG +++ b/CHANGELOG.md @@ -1,28 +1,34 @@ -v3.7.5 +## v4.0.0 +* feat(bc): added winduum-stimulus +* feat(bc): externalize stimulus controllers and modules +* feat(bc): new file structure +* feat(bc): updated to eslint v9, added neostandard + +## v3.7.5 * feat: deps update * fix: swup replace tag selector * fix: readme logo -v3.7.4 +## v3.7.4 * feat: updated to eslint v9 and neostandard * feat: naja update * feat: updated deps -v3.7.3 +## v3.7.3 * feat: updated to naja 3.2 * feat: updated to swup 3.7 -v3.7.2 +## v3.7.2 * fix: ui-check validate method * fix: lib-form example * fix: ui-control, ui-check dynamic import * feat: deps update -v3.7.1 +## v3.7.1 * feat: updated to winduum 1.2.0 * feat(bc): removed tippy, added c-popover as alternative -v3.7.0 +## v3.7.0 * feat(bc): added winduum c-drawer * feat(bc): changed layout components from ids to classes * feat(bc): removed l-default wrapper in Layout/Main.tpl @@ -51,62 +57,62 @@ v3.7.0 * feat: new modern favicons * feat: updated to vite v5.2 -v3.6.5 +## v3.6.5 * feat: cookie consent update * feat: manual chunks -v3.6.4 +## v3.6.4 * feat: update winduum v1.0.0 * fix: swup transition and containers -v3.6.3 +## v3.6.3 * feat: update winduum v0.9.0 * fix: swup scroll -v3.6.2 +## v3.6.2 * feat: update winduum v0.7.0 -v3.6.1 +## v3.6.1 * feat: update winduum v0.6.0 -v3.6.0 +## v3.6.0 * feat: updated deps - winduum v0.5.0, tailwindcss v3.4 * feat: updated stylelint, added @stylistic/stylelint * feat: updated media vars in `main.json` -v3.5.8 +## v3.5.8 * feat: icon.svg uses symbols * feat: vite v5, vituum v1.1, newlogic-core v2.1 -v3.5.7 +## v3.5.7 * feat: remove service worker * feat: simplified inputStep -v3.5.6 +## v3.5.6 * feat: update winduum to 0.4.0 -v3.5.5 +## v3.5.5 * feat: added preload and modulepreload to main.json -v3.5.4 +## v3.5.4 * feat: added swup and stimulus as top-level await -v3.5.3 +## v3.5.3 * feat: tailwindcss emails * feat: improved form submitter loading state * feat: improved lib-naja makeRequest * fix: cleanup deleted userfiles -v3.5.2 +## v3.5.2 * feat: naja `get` stimulus method changed to `makeRequest` * feat: dependencies update * fix: datepicker attributes and change event -v3.5.1 +## v3.5.1 * feat(bc): swup v4 update * feat: dependencies update -v3.5.0 +## v3.5.0 * feat(bc): added winduum 0.3.x and its components * feat(bc): added new winduum color pallet with `color-mix`, colors now have also `-rgb` variants for better compatibility * feat(bc): removed `Libraries/Anchor.js` @@ -120,18 +126,17 @@ v3.5.0 * feat: `vanilla-datepicker` replaced with `air-datepicker` * feat: added `replaceScript.js` function - -v3.4.2 +## v3.4.2 * feat: vituum v1 update * feat: newlogic core v2 update * feat: deps update -v3.4.1 +## v3.4.1 * feat: minor changes from winduum * feat: removed seamless polyfill * feat: update stylelint v32 and added stylelint-stylistic plugin -v3.4.0 +## v3.4.0 * feat: added winduum native dialog with better accessibility * feat: added winduum tailwind plugin and new css breakpoints * feat: changed emails root to src/views/email @@ -142,7 +147,7 @@ v3.4.0 * feat(bc): lib-dialog fetch expects "content" in response, instead of "dialog" * fix: dynamic imports with @vite-ignore -v3.3.1 +## v3.3.1 * feat: swup v3 update * feat: dependencies update * feat: added loading before send to lib-form @@ -150,7 +155,7 @@ v3.3.1 * feat: added sklik retargetingHit to swup * feat: added najaLoad to loadStimulus function -v3.3.0 +## v3.3.0 * feat: added email posthtml examples * feat(bc): removed stimulus helpers - queryTarget, getValue etc. * feat: improved form validation @@ -166,14 +171,14 @@ v3.3.0 * feat: added :has postcss plugin * fix: native slider counterMax -v3.2.0 +## v3.2.0 * feat(bc): changed gulp to vituum * feat: stimulus v3.1 update * feat: cookieconsent improvements * feat: changed c-form to lib-form * feat: added lib-script controller -v3.1.0 +## v3.1.0 * feat: tailwind v3 update * feat: stimulus v3 update * feat: iconfont replaced with svg icons @@ -182,35 +187,35 @@ v3.1.0 * feat: most of callbacks replaced with promises * feat: complete refactor of CSS and JS -v3.0.13 +## v3.0.13 * feat: recaptcha enterprise -v3.0.12 +## v3.0.12 * feat: eslint import extensions * feat: newlogic core update, es-module-shims update * fix: core->main js in twig -v3.0.11 +## v3.0.11 * feat: stylint custom properties units * feat: stimulus window instance -v3.0.10 +## v3.0.10 * feat: stylelint and reformat to standard -v3.0.9 +## v3.0.9 * remove: preload / bodyLoaded functionality -v3.0.8 +## v3.0.8 * feat: eslint and reformat to standard -v3.0.7 +## v3.0.7 * feat: tippy for interactive dropdowns -v3.0.6 +## v3.0.6 * feat: improved form controls -v3.0.5 +## v3.0.5 * improved: stimulus loaded as @stimulus/core -v3.0.0 +## v3.0.0 * feat: initial release diff --git a/README.md b/README.md index 4c4778e..f31cf15 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Logo + Logo

@@ -10,7 +10,7 @@ # 🎨 Newlogic UI -Lightweight, modern and modular CSS framework with the best principles +Where Innovation Meets Simplicity. - 💡 Modern - 📦 Modular @@ -18,41 +18,37 @@ Lightweight, modern and modular CSS framework with the best principles - ✨️ Progressive - ⚡️ Fast -Newlogic UI is component framework with easy syntax for backend integration. Modern approach of CSS properties, enriched with utility classes from TailwindCSS and powered by Winduum. - -Javascript implementation is only **28 kB** and mainly intended for use on backend rendered websites and applications with PHP framework Nette +Component framework for modern backend driven web applications. Powered by Vite and Winduum. ## ⚙️ Under the hood -* **[Vituum](https://vituum.dev/)** - plugins for Vite, adds support for template engines and more. * **[Newlogic Core](https://github.com/newlogic-digital/core)** - starter pack for creating modern web applications. Powered by Vite and Vituum. -* **[ESM](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules)** - completely written in modern JS syntax - esnext, ES modules, etc. -* **[PostCSS](https://postcss.org/)** - completely written in modern CSS syntax - nesting, variables, etc. -* **[Tailwind CSS](https://tailwindcss.com/)** - rich utility classes for everything +* **[Vituum](https://vituum.dev/)** - plugins for Vite, adds support for template engines, and more. +* **[Vite](https://vituum.dev/)** - next generation frontend tooling +* **[Winduum](https://winduum.dev/)** - a small modest CSS component framework for TailwindCSS +* **[Tailwind CSS](https://tailwindcss.com/)** - rapidly build modern websites without ever leaving your HTML +* **[Naja](https://naja.js.org/)** - a full-featured JS client-side AJAX library for Nette Framework * **[Stimulus](https://stimulus.hotwire.dev/)** - a modest JavaScript framework for the HTML you already have -* **Dark mode** - creating dark mode was never easier -* **Easy syntax** - .ui-btn (ui elements), .c-component (components), .c-section (sections) etc. - +* **[Swup](https://next.ui.newlogic.cz/docs/.html)** - versatile and extensible page transition library for server-rendered websites -Newlogic UI uses Newlogic Core, which compiles modern JS and CSS syntax via Vite and Vituum. Source code can be used with any other tools or even different environment than NodeJS, e.g. Deno and is written in W3C standards and should be runnable in current or future version of browsers. ## 🪄 Get started -Creating a new project (with Vituum and Newlogic Core) +Creating a new project ```sh -$ git clone --depth 1 https://github.com/newlogic-digital/ui.git newlogic-ui-project -$ cd newlogic-ui-project && npm i +git clone --depth 1 https://github.com/newlogic-digital/ui.git newlogic-ui-project +cd newlogic-ui-project && npm i ``` ```sh -$ vite +npm run dev ``` or ```sh -$ vituum build +npm run build ``` ___ Or in any other environment ```sh -$ npm i @newlogic-digital/ui +npm i @newlogic-digital/ui ``` ```css @@ -67,8 +63,8 @@ import "@newlogic-digital/ui/src/scripts/main.js" ### Requirements -- [Node.js LTS (16.x)](https://nodejs.org/en/download/) -- [NPM (9.x)](https://www.npmjs.com/package/npm) or any other package manager +- [Node.js LTS (22.x)](https://nodejs.org/en/download/) +- [NPM (10.x)](https://www.npmjs.com/package/npm) or any other package manager ## Licence GNU GPLv3 diff --git a/package-lock.json b/package-lock.json index 582749f..2960c68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,34 +1,36 @@ { "name": "@newlogic-digital/ui", - "version": "3.7.5", + "version": "4.0.0-beta.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@newlogic-digital/ui", - "version": "3.7.5", + "version": "4.0.0-beta.2", "hasInstallScript": true, "license": "GNU GPLv3", "dependencies": { "@floating-ui/dom": "^1.6.12", "@hotwired/stimulus": "^3.2.2", "@newlogic-digital/cookieconsent-js": "^1.0.0", + "@newlogic-digital/naja-extensions": "^0.2.5", + "@newlogic-digital/stimulus-components": "^0.0.9", + "@newlogic-digital/swup-plugins": "^0.1.4", "@newlogic-digital/utils-js": "^1.1.1", - "@simonwep/pickr": "^1.9.1", - "air-datepicker": "^3.5.3", - "eslint": "^9.15.0", "naja": "^3.2.1", - "neostandard": "^0.11.8", - "stylelint-config-standard": "^36.0.1", + "slide-element": "^2.3.1", "swup": "^4.8.1", - "winduum": "^1.2.4" + "winduum": "^2.0.4", + "winduum-stimulus": "^2.0.6" }, "devDependencies": { - "@newlogic-digital/core": "^2.1.2", + "@newlogic-digital/core": "^3.0.0-next.4", "@stylistic/stylelint-config": "^2.0.0", "@tailwindcss/container-queries": "^0.1.1", - "@types/grecaptcha": "^3.0.9", + "eslint": "^9.15.0", + "neostandard": "^0.11.8", "npm-check-updates": "^17.1.11", + "stylelint-config-standard": "^36.0.1", "vite": "^5.4.11" }, "engines": { @@ -52,6 +54,7 @@ "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -66,12 +69,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -118,6 +123,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, "funding": [ { "type": "github", @@ -140,6 +146,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, "funding": [ { "type": "github", @@ -159,6 +166,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, "funding": [ { "type": "github", @@ -205,6 +213,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz", "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==", + "dev": true, "funding": [ { "type": "github", @@ -250,6 +259,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, "license": "MIT", "funding": { "type": "github", @@ -651,6 +661,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -669,6 +680,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -681,6 +693,7 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -690,6 +703,7 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.4", @@ -704,6 +718,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -714,6 +729,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -726,6 +742,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -735,6 +752,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -758,6 +776,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -768,6 +787,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -780,6 +800,7 @@ "version": "9.15.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -789,6 +810,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -798,6 +820,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "levn": "^0.4.1" @@ -841,6 +864,7 @@ "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18.0" @@ -850,6 +874,7 @@ "version": "0.16.6", "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", @@ -863,6 +888,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18" @@ -876,6 +902,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, "license": "Apache-2.0", "funding": { "type": "github", @@ -886,6 +913,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" @@ -899,6 +927,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18" @@ -1057,32 +1086,69 @@ } }, "node_modules/@newlogic-digital/core": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@newlogic-digital/core/-/core-2.1.2.tgz", - "integrity": "sha512-QXK4CoSJWJIC3Pihd9LlkIm3MUWP5FVz06ZvSUEYOvGFGwcEaNiZorG3L+fUFhO8Yd7OohAE1pwLpYPMjyRtIw==", + "version": "3.0.0-next.4", + "resolved": "https://registry.npmjs.org/@newlogic-digital/core/-/core-3.0.0-next.4.tgz", + "integrity": "sha512-HDmzzWqhl7B76A+6Lv7FZori4ip38+4RlY6FqJUmPNf0afNjmm7fBoLGCssGlhoEpZ7AwzcY8ntmydisD64f/A==", "dev": true, "license": "MIT", "dependencies": { - "@vituum/vite-plugin-juice": "^1.2.0", - "@vituum/vite-plugin-latte": "^1.1.0", + "@vituum/vite-plugin-juice": "^1.3.0", + "@vituum/vite-plugin-latte": "^1.2.1", "@vituum/vite-plugin-posthtml": "^1.1.0", "@vituum/vite-plugin-send": "^1.1.0", - "@vituum/vite-plugin-tailwindcss": "^1.1.0", + "@vituum/vite-plugin-tailwindcss": "^1.2.0", "@vituum/vite-plugin-twig": "^1.1.0", + "browserslist": "^4.24.0", + "browserslist-to-esbuild": "^2.1.1", "fast-glob": "^3.3.2", "fs-extra": "^11.2.0", "html-minifier-terser": "^7.2.0", "lodash": "^4.17.21", - "picocolors": "^1.0.0", + "picocolors": "^1.1.0", "posthtml": "^0.16.6", - "posthtml-prism": "^2.0.0", + "posthtml-prism": "^2.0.1", "prismjs": "^1.29.0", - "vituum": "^1.1.0" + "vituum": "^1.1.1" }, "engines": { "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/@newlogic-digital/naja-extensions": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@newlogic-digital/naja-extensions/-/naja-extensions-0.2.5.tgz", + "integrity": "sha512-9bX1zcYAJJTFR8PwxFUX4PoT1N0efEn7uHphVtpO4tkAiG0xnDS2V1hFyk/QZ1gWIaTNCOZnsAocwzzbEM3cQg==", + "license": "MIT", + "dependencies": { + "@newlogic-digital/utils-js": "^1.1.1", + "naja": "^3.2.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@newlogic-digital/stimulus-components": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@newlogic-digital/stimulus-components/-/stimulus-components-0.0.9.tgz", + "integrity": "sha512-sd0cv5ZB/Jd/ebIqqaWXvN12IApohnZfptMGwF5vrd6OU2gvVkVnxRta0gaw7GdWCdeGRVYvzP0zBVBvLPQd4g==", + "dependencies": { + "@hotwired/stimulus": "^3.2.2", + "@newlogic-digital/utils-js": "^1.1.0" + } + }, + "node_modules/@newlogic-digital/swup-plugins": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@newlogic-digital/swup-plugins/-/swup-plugins-0.1.4.tgz", + "integrity": "sha512-L3VuFgq/hhsXLjQeK1JQD+nPHr75gOU2Vs0uRLkjTTjUYPDPhOvpYA/YOP6y3KlFSyCpGo66hsEAGHNafBXDYA==", + "license": "MIT", + "dependencies": { + "@swup/plugin": "^4", + "swup": "^4" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@newlogic-digital/utils-js": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@newlogic-digital/utils-js/-/utils-js-1.1.1.tgz", @@ -1096,6 +1162,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -1109,6 +1176,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -1118,6 +1186,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1390,20 +1459,11 @@ "win32" ] }, - "node_modules/@simonwep/pickr": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.9.1.tgz", - "integrity": "sha512-fR3qmfAcPf/HSFS7GEnTmZLM3+xERv1+jyMBbzT63ilRRM8veYjI7ELvkHHKk0/du3lHp7uh/FqatjM3646X1g==", - "license": "MIT", - "dependencies": { - "core-js": "3.37.0", - "nanopop": "2.4.2" - } - }, "node_modules/@stylistic/eslint-plugin": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.11.0.tgz", "integrity": "sha512-PNRHbydNG5EH8NK4c+izdJlxajIR6GxcUhzsYNRsn6Myep4dsZt0qFCz3rCPnkvgO5FYibDcMqgNHUT+zvjYZw==", + "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^8.13.0", @@ -1423,6 +1483,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1470,6 +1531,15 @@ "stylelint": "^16.8.0" } }, + "node_modules/@swup/plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@swup/plugin/-/plugin-4.0.0.tgz", + "integrity": "sha512-3Kq31BJxnzoPg643YxGoWQggoU6VPKZpdE5CqqmP7wwkpCYTzkRmrfcQ29mGhsSS7xfS7D33iZoBiwY+wPoo2A==", + "license": "MIT", + "dependencies": { + "swup": "^4.0.0" + } + }, "node_modules/@tailwindcss/container-queries": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@tailwindcss/container-queries/-/container-queries-0.1.1.tgz", @@ -1484,12 +1554,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" - }, - "node_modules/@types/grecaptcha": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/grecaptcha/-/grecaptcha-3.0.9.tgz", - "integrity": "sha512-fFxMtjAvXXMYTzDFK5NpcVB7WHnrHVLl00QzEGpuFxSAC789io6M+vjcn+g5FTEamIJtJr/IHkCDsqvJxeWDyw==", "dev": true, "license": "MIT" }, @@ -1497,12 +1561,14 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", @@ -1536,6 +1602,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "8.15.0", @@ -1564,6 +1631,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", + "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.15.0", @@ -1581,6 +1649,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", + "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "8.15.0", @@ -1608,6 +1677,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", + "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1621,6 +1691,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "8.15.0", @@ -1649,6 +1720,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -1676,6 +1748,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", + "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.15.0", @@ -1788,6 +1861,7 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -1800,21 +1874,17 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/air-datepicker": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/air-datepicker/-/air-datepicker-3.5.3.tgz", - "integrity": "sha512-Elf9gLhv/jidN1+TfeRJYMQRUfYx5apXw2dY5DuAMPRnNtQ4Iw9fTTJK772osmXSUB9xQ2Y8Q1Pt6pgBOQLPQw==", - "license": "MIT" - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -1841,6 +1911,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1850,6 +1921,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -1893,12 +1965,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -1915,6 +1989,7 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -1935,6 +2010,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1944,6 +2020,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -1964,6 +2041,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -1982,6 +2060,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -2000,6 +2079,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2016,6 +2096,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -2038,6 +2119,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2085,6 +2167,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -2100,6 +2183,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/binary-extensions": { @@ -2126,6 +2210,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2135,6 +2220,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2176,6 +2262,25 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/browserslist-to-esbuild": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz", + "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^13.0.0" + }, + "bin": { + "browserslist-to-esbuild": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "browserslist": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2187,6 +2292,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2206,6 +2312,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2257,6 +2364,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2368,6 +2476,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2380,12 +2489,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, "license": "MIT" }, "node_modules/commander": { @@ -2402,23 +2513,14 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, - "node_modules/core-js": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", - "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -2445,6 +2547,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2459,6 +2562,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12 || >=16" @@ -2485,6 +2589,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.1.tgz", "integrity": "sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==", + "dev": true, "license": "MIT", "dependencies": { "mdn-data": "2.12.1", @@ -2511,6 +2616,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -2523,6 +2629,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -2540,6 +2647,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2557,6 +2665,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -2574,6 +2683,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2591,6 +2701,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/deepmerge": { @@ -2607,6 +2718,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2624,6 +2736,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -2660,6 +2773,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -2679,6 +2793,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -2788,6 +2903,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/encoding-sniffer": { @@ -2808,6 +2924,7 @@ "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -2834,6 +2951,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2843,6 +2961,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -2852,6 +2971,7 @@ "version": "1.23.5", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -2912,6 +3032,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -2924,6 +3045,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2933,6 +3055,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2959,6 +3082,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2971,6 +3095,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", @@ -2985,6 +3110,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.0" @@ -2994,6 +3120,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.4", @@ -3073,6 +3200,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3085,6 +3213,7 @@ "version": "9.15.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -3144,6 +3273,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.4" @@ -3159,6 +3289,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, "funding": [ "https://github.com/sponsors/ota-meshi", "https://opencollective.com/eslint" @@ -3180,6 +3311,7 @@ "version": "17.13.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.13.2.tgz", "integrity": "sha512-MhBAKkT01h8cOXcTBTlpuR7bxH5OBUNpUXefsvwSVEy46cY4m/Kzr2osUCQvA3zJFD6KuCeNNDv0+HDuWk/OcA==", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.1", @@ -3205,6 +3337,7 @@ "version": "15.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3217,6 +3350,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.1.0.tgz", "integrity": "sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==", + "dev": true, "license": "ISC", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3232,6 +3366,7 @@ "version": "7.37.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.8", @@ -3264,6 +3399,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3274,6 +3410,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -3286,6 +3423,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3295,6 +3433,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -3311,6 +3450,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3323,6 +3463,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3333,6 +3474,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -3345,6 +3487,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.14.0", @@ -3362,6 +3505,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -3374,6 +3518,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -3386,6 +3531,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -3395,6 +3541,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3404,12 +3551,14 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3426,6 +3575,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -3438,24 +3588,28 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4.9.1" @@ -3465,6 +3619,7 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -3481,6 +3636,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" @@ -3493,6 +3649,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3505,6 +3662,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -3521,6 +3679,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -3534,12 +3693,14 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.3" @@ -3617,6 +3778,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3626,6 +3788,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -3644,6 +3807,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3653,6 +3817,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3672,6 +3837,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -3689,6 +3855,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -3722,6 +3889,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -3734,6 +3902,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" @@ -3746,6 +3915,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, "license": "MIT", "dependencies": { "ini": "^1.3.5", @@ -3760,6 +3930,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -3772,6 +3943,7 @@ "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3784,6 +3956,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", @@ -3800,6 +3973,7 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -3820,12 +3994,14 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, "license": "MIT" }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" @@ -3838,18 +4014,21 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, "license": "MIT" }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3859,6 +4038,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3868,6 +4048,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -3880,6 +4061,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3892,6 +4074,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3904,6 +4087,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -3919,6 +4103,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3953,6 +4138,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3998,6 +4184,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -4007,6 +4194,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -4023,6 +4211,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -4032,12 +4221,14 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4052,6 +4243,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -4068,12 +4260,14 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4089,6 +4283,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" @@ -4114,6 +4309,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -4130,6 +4326,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4142,6 +4339,7 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4157,6 +4355,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" @@ -4172,6 +4371,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4187,6 +4387,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4196,6 +4397,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2" @@ -4208,6 +4410,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4217,6 +4420,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4232,6 +4436,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4251,6 +4456,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4263,6 +4469,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4275,6 +4482,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4284,6 +4492,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4299,6 +4508,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4308,6 +4518,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -4324,6 +4535,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4336,6 +4548,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7" @@ -4351,6 +4564,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4366,6 +4580,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" @@ -4381,6 +4596,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" @@ -4396,6 +4612,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4408,6 +4625,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2" @@ -4420,6 +4638,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4436,18 +4655,21 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/iterator.prototype": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", @@ -4480,7 +4702,7 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -4497,6 +4719,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4509,24 +4732,28 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, "license": "MIT" }, "node_modules/jsonfile": { @@ -4546,6 +4773,7 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.6", @@ -4591,6 +4819,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -4600,6 +4829,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4609,12 +4839,14 @@ "version": "0.34.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true, "license": "MIT" }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -4638,12 +4870,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -4677,18 +4911,21 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -4701,6 +4938,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/lower-case": { @@ -4724,6 +4962,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, "license": "MIT", "funding": { "type": "github", @@ -4734,6 +4973,7 @@ "version": "2.12.1", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.1.tgz", "integrity": "sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==", + "dev": true, "license": "CC0-1.0" }, "node_modules/mensch": { @@ -4747,6 +4987,7 @@ "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -4759,6 +5000,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -4768,6 +5010,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -4794,6 +5037,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -4819,6 +5063,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/mz": { @@ -4843,6 +5088,7 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, "funding": [ { "type": "github", @@ -4857,22 +5103,18 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanopop": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.4.2.tgz", - "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==", - "license": "MIT" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, "license": "MIT" }, "node_modules/neostandard": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.11.8.tgz", "integrity": "sha512-gKgvK0EDlA0x7F1hMu/UdPCRtSSG4d9CBxVym4PMWoHz8+a1ffEz2fPU5FMH3RUqzL1ACvroUMiywMGWZSY+Mw==", + "dev": true, "license": "MIT", "dependencies": { "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", @@ -4899,6 +5141,7 @@ "version": "15.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -4939,6 +5182,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4986,6 +5230,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5005,6 +5250,7 @@ "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5017,6 +5263,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5026,6 +5273,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -5044,6 +5292,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5058,6 +5307,7 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5076,6 +5326,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5102,6 +5353,7 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -5119,6 +5371,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -5134,6 +5387,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -5167,6 +5421,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -5179,6 +5434,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -5248,6 +5504,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5257,6 +5514,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5266,6 +5524,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, "license": "MIT" }, "node_modules/path-scurry": { @@ -5295,6 +5554,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5304,6 +5564,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/peowly/-/peowly-1.3.2.tgz", "integrity": "sha512-BYIrwr8JCXY49jUZscgw311w9oGEKo7ux/s+BxrhKTQbiQ0iYNdZNJ5LgagaeercQdFHwnR7Z5IxxFWVQ+BasQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18.6.0" @@ -5313,12 +5574,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -5351,6 +5614,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5360,6 +5624,7 @@ "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5726,6 +5991,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, "license": "MIT" }, "node_modules/postcss-safe-parser": { @@ -5749,6 +6015,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -5762,6 +6029,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, "license": "MIT" }, "node_modules/posthtml": { @@ -6073,6 +6341,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -6092,6 +6361,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -6103,6 +6373,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6112,6 +6383,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -6132,6 +6404,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, "license": "MIT" }, "node_modules/read-cache": { @@ -6161,6 +6434,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6189,6 +6463,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6217,6 +6492,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6226,6 +6502,7 @@ "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -6243,6 +6520,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -6252,6 +6530,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -6261,6 +6540,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -6309,6 +6589,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -6332,6 +6613,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6350,6 +6632,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -6374,6 +6657,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6386,6 +6670,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -6403,6 +6688,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -6418,6 +6704,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -6430,6 +6717,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6439,6 +6727,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6457,6 +6746,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -6469,6 +6759,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6478,6 +6769,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -6501,6 +6793,12 @@ "node": "*" } }, + "node_modules/slide-element": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/slide-element/-/slide-element-2.3.1.tgz", + "integrity": "sha512-DBDX3fGmrL4lED9PGHv1254sHiQp5KsdeOJ+ohAdU1qOaolAHxYT9Wa5TjW1cw4Oh05Rq2fYpeIp1tFdQBg2Ug==", + "license": "ISC" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6515,6 +6813,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -6535,6 +6834,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6565,6 +6865,7 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6591,6 +6892,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.1.3", @@ -6601,6 +6903,7 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6619,6 +6922,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6633,6 +6937,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6650,6 +6955,7 @@ "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" @@ -6676,6 +6982,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6695,6 +7002,7 @@ "version": "16.10.0", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz", "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6757,6 +7065,7 @@ "version": "14.0.1", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6779,6 +7088,7 @@ "version": "36.0.1", "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6804,12 +7114,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^5.0.0" @@ -6822,6 +7134,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.3.1", @@ -6835,6 +7148,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -6844,6 +7158,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6870,6 +7185,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6912,6 +7228,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -6924,6 +7241,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0", @@ -6940,6 +7258,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6951,7 +7270,8 @@ "node_modules/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true }, "node_modules/swup": { "version": "4.8.1", @@ -6969,6 +7289,7 @@ "version": "6.8.2", "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -6985,6 +7306,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -7001,6 +7323,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/tailwindcss": { @@ -7081,6 +7404,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7139,6 +7463,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -7151,6 +7476,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -7220,6 +7546,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -7232,6 +7559,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -7246,6 +7574,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -7265,6 +7594,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -7285,6 +7615,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -7311,6 +7642,7 @@ "version": "5.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -7325,6 +7657,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", + "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "8.15.0", @@ -7351,6 +7684,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -7417,6 +7751,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -7426,6 +7761,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/valid-data-url": { @@ -7672,6 +8008,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -7687,6 +8024,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", @@ -7703,6 +8041,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.6", @@ -7729,6 +8068,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, "license": "MIT", "dependencies": { "is-map": "^2.0.3", @@ -7747,6 +8087,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -7763,18 +8104,29 @@ } }, "node_modules/winduum": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/winduum/-/winduum-1.2.4.tgz", - "integrity": "sha512-FgEed8iFoQbIWdwI0vkuGhkOZ2OErbQRyV9Reqyd4q7F/Z+q6B+BBNqGtSGnIf8X7PQAFLKFNUpqFz8hpW/GYQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/winduum/-/winduum-2.0.4.tgz", + "integrity": "sha512-cs3T0Q6fzbfqQqjpvUl74lR5nddE1qi469ZfK/pu6WjfyA57DQ2JvdGZ2RKhFAsbKzjzZukowny2xflNek1HSQ==", "engines": { "node": ">=20.0.0", "npm": ">=9.0.0" } }, + "node_modules/winduum-stimulus": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/winduum-stimulus/-/winduum-stimulus-2.0.6.tgz", + "integrity": "sha512-vEyjE1G44Q4UBSJJ/2vzpKDVNBy/PrvGPqSEg3r2T/m2bJh4zsfhstvlr1TzkcEk7HgIC0l5/mbTfDrbHzRgkQ==", + "dependencies": { + "@hotwired/stimulus": "^3.2.2", + "@newlogic-digital/utils-js": "^1.1.1", + "winduum": "^2.0.2" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7888,6 +8240,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -7914,6 +8267,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index 8806cef..2ac0e22 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@newlogic-digital/ui", - "version": "3.7.5", + "version": "4.0.0-beta.2", "type": "module", "main": "vite.config.js", "author": "New Logic Studio s.r.o.", @@ -26,24 +26,32 @@ "@floating-ui/dom": "^1.6.12", "@hotwired/stimulus": "^3.2.2", "@newlogic-digital/cookieconsent-js": "^1.0.0", + "@newlogic-digital/naja-extensions": "^0.2.5", + "@newlogic-digital/stimulus-components": "^0.0.9", + "@newlogic-digital/swup-plugins": "^0.1.4", "@newlogic-digital/utils-js": "^1.1.1", - "@simonwep/pickr": "^1.9.1", - "air-datepicker": "^3.5.3", - "eslint": "^9.15.0", "naja": "^3.2.1", - "neostandard": "^0.11.8", - "stylelint-config-standard": "^36.0.1", + "slide-element": "^2.3.1", "swup": "^4.8.1", - "winduum": "^1.2.4" + "winduum": "^2.0.4", + "winduum-stimulus": "^2.0.6" }, "devDependencies": { - "@newlogic-digital/core": "^2.1.2", + "@newlogic-digital/core": "^3.0.0-next.4", "@stylistic/stylelint-config": "^2.0.0", "@tailwindcss/container-queries": "^0.1.1", - "@types/grecaptcha": "^3.0.9", + "eslint": "^9.15.0", + "neostandard": "^0.11.8", "npm-check-updates": "^17.1.11", + "stylelint-config-standard": "^36.0.1", "vite": "^5.4.11" }, + "browserslist": [ + "> 1%", + "last 2 major versions", + "not kaios > 0", + "not dead" + ], "files": [ "src" ], diff --git a/src/data/main.json b/src/data/main.json index 26685ac..a24adb0 100644 --- a/src/data/main.json +++ b/src/data/main.json @@ -1,6 +1,7 @@ { "baseUrl": "https://localhost:5173", "lang": "en", + "cookieConsent": true, "prefetch": [ "https://cdn.jsdelivr.net", "https://fonts.gstatic.com", @@ -12,12 +13,6 @@ "rel": "preload stylesheet", "as": "style", "crossorigin": true - }, - { - "href": "https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJnecnFHGPezSQ.woff2", - "as": "font", - "type": "font/woff2", - "crossorigin": true } ], "assets": { @@ -30,28 +25,11 @@ "main": "/src/scripts/main.js" } }, - "layout": { - "cookies": true, - "nav": [ - { - "name": "Home", - "url": "/" - }, - { - "name": "Documentation", - "url": "/ui" - }, - { - "name": "Icons", - "url": "/ui-icons" - } - ] - }, "media": { "min-xl": "(min-width: 1216px)", "max-lg": "(max-width: 959px)", "min-lg": "(min-width: 960px)", - "min-md": "(min-width: 768px)", + "min-md": "(min-width: 744px)", "max-md": "(max-width: 767px)", "min-xs": "(min-width: 360px)" }, diff --git a/src/data/nav.json b/src/data/nav.json new file mode 100644 index 0000000..1a6de6c --- /dev/null +++ b/src/data/nav.json @@ -0,0 +1,12 @@ +{ + "nav": [ + { + "name": "Home", + "url": "/" + }, + { + "name": "Gdpr", + "url": "/gdpr" + } + ] +} diff --git a/src/emails/styles/main.css b/src/emails/styles/main.css deleted file mode 100644 index 99ddef9..0000000 --- a/src/emails/styles/main.css +++ /dev/null @@ -1,92 +0,0 @@ -@import "tailwindcss/base.css"; -@import "tailwindcss/components.css"; -@import "tailwindcss/utilities.css"; -@import "tailwindcss/variants.css"; -@import "main/Base/font.css"; -@import "main/Ui/+.css"; -@import "main/Components/+.css"; - -:where([class*="border-"]) { - border-width: 0; - border-style: solid; -} - -body { - margin: 0; - padding: 0; -} - -table { - width: 100%; -} - -a { - &, img { - text-decoration: none; - color: rgb(var(--color-main)); - } - - & img { - font-weight: 700; - } -} - -.l-main { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Roboto, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - width: 600px; -} - -.l-main-body { - background-color: rgb(var(--color-body-secondary)); - border-radius: var(--rounded); - - & > tr { - &:first-child > td { - padding-top: var(--spacing-container-inner); - } - - &:last-child > td { - padding-bottom: var(--spacing-container-inner); - } - } -} - -.dark-img { - display: none !important; -} - -@media (prefers-color-scheme: dark) { - body { - background-color: rgb(var(--color-body-primary-dark)); - color: rgb(var(--color-light)); - border-radius: var(--rounded); - } - - a { - &, img { - color: rgb(var(--color-light)) !important; - } - } - - .l-main-body { - background-color: rgb(var(--color-body-secondary-dark)) !important; - } - - [class*="border-main/10"] { - border-color: rgba(var(--color-light), 0.15) !important; - } - - [class*="text-main"] { - &, & span { - color: rgb(var(--color-light)) !important; - } - } - - .light-img { - display: none !important; - } - - .dark-img { - display: block !important; - } -} diff --git a/src/emails/styles/main/+.css b/src/emails/styles/main/+.css deleted file mode 100644 index 060af0b..0000000 --- a/src/emails/styles/main/+.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "Base/+.css"; -@import "Components/+.css"; -@import "Ui/+.css"; diff --git a/src/emails/styles/main/Base/+.css b/src/emails/styles/main/Base/+.css deleted file mode 100644 index d06cebb..0000000 --- a/src/emails/styles/main/Base/+.css +++ /dev/null @@ -1,2 +0,0 @@ -@import "config.css"; -@import "font.css"; diff --git a/src/emails/styles/main/Base/config.css b/src/emails/styles/main/Base/config.css deleted file mode 100644 index 996a7a7..0000000 --- a/src/emails/styles/main/Base/config.css +++ /dev/null @@ -1,22 +0,0 @@ -:root { - --color-primary: 131, 205, 79; - --color-main: 21, 23, 26; - --color-body-primary: 255, 255, 255; - --color-body-secondary: 245, 245, 245; - --color-body-tertiary: 230, 230, 230; - --color-light: 255, 255, 255; -} - -:root { - --color-body-primary-dark: 21, 23, 26; - --color-body-secondary-dark: 41, 43, 46; - --color-body-tertiary-dark: 61, 63, 66; -} - -:root { - --spacing-container: 20px; - --spacing-container-inner: 30px; - --rounded: 20px; - --transition-background: background-color 0.2s ease; - --transition-color: color 0.2s ease; -} diff --git a/src/emails/styles/main/Components/+.css b/src/emails/styles/main/Components/+.css deleted file mode 100644 index e30644a..0000000 --- a/src/emails/styles/main/Components/+.css +++ /dev/null @@ -1 +0,0 @@ -@import "Card.css"; diff --git a/src/emails/styles/main/Components/Card.css b/src/emails/styles/main/Components/Card.css deleted file mode 100644 index 88f73c5..0000000 --- a/src/emails/styles/main/Components/Card.css +++ /dev/null @@ -1,12 +0,0 @@ -.c-card { - background-color: rgb(var(--color-body-tertiary)); - border-radius: var(--rounded); - - @media (prefers-color-scheme: dark) { - background-color: rgb(var(--color-body-tertiary-dark)) !important; - } - - & > tr > td { - padding: 28px 24px; - } -} diff --git a/src/emails/styles/main/Ui/+.css b/src/emails/styles/main/Ui/+.css deleted file mode 100644 index b9f8959..0000000 --- a/src/emails/styles/main/Ui/+.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "Btn.css"; -@import "Heading.css"; -@import "Text.css"; diff --git a/src/emails/styles/main/Ui/Btn.css b/src/emails/styles/main/Ui/Btn.css deleted file mode 100644 index 890dc9b..0000000 --- a/src/emails/styles/main/Ui/Btn.css +++ /dev/null @@ -1,78 +0,0 @@ -.ui-btn-group { - width: auto; - - & td { - padding-top: 10px; - padding-bottom: 10px; - } -} - - -.ui-btn { - padding: 10px 15px; - background-color: rgb(var(--color-primary)); - font-size: 12px; - border-radius: var(--rounded); - font-weight: 700; - transition: var(--transition-background), var(--transition-color); - - &.lg { - padding: 20px; - border-radius: 999px; - font-size: 16px; - } - - &, & span { - color: rgb(var(--color-light)); - text-decoration: none; - } - - & span { - transition: var(--transition-color); - } - - &.ghosted { - background-color: transparent; - - &, & span { - color: rgb(var(--color-primary)); - } - } - - &:hover { - background-color: rgba(var(--color-primary), 0.8) !important; - - &[class*="text-main"] { - background-color: rgba(var(--color-main), 0.15) !important; - } - } -} - -.ui-btn-table { - & table { - background-color: rgb(var(--color-primary)); - width: auto; - border-radius: 999px; - font-weight: 700; - transition: var(--transition-background), var(--transition-color); - } - - & td { - padding: 16px 20px; - } - - &, & span { - color: rgb(var(--color-light)); - text-decoration: none; - } - - &:hover { - & table { - background-color: rgba(var(--color-primary), 0.8) !important; - - &[class*="text-main"] { - background-color: rgba(var(--color-main), 0.15) !important; - } - } - } -} diff --git a/src/emails/styles/main/Ui/Heading.css b/src/emails/styles/main/Ui/Heading.css deleted file mode 100644 index c2448fb..0000000 --- a/src/emails/styles/main/Ui/Heading.css +++ /dev/null @@ -1,8 +0,0 @@ -.ui-heading { - font-size: 16px; - font-weight: 700; - - &.lg { - font-size: 28px; - } -} diff --git a/src/emails/templates.test/Sections/Footer.latte b/src/emails/templates.test/Sections/Footer.latte deleted file mode 100644 index c064ce3..0000000 --- a/src/emails/templates.test/Sections/Footer.latte +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -
- - - - - -
- Název webu
- Adresa -
- info@example.com
- (+420) 111 222 333 -
-
- - diff --git a/src/emails/templates.test/Sections/Header.latte b/src/emails/templates.test/Sections/Header.latte deleted file mode 100644 index 9d5d540..0000000 --- a/src/emails/templates.test/Sections/Header.latte +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - - - - -
- - Logo - - Logo - - - - - - - -
- Zobrazit web -
-
- - - -
-
- - - diff --git a/src/emails/templates.test/Sections/Text.latte b/src/emails/templates.test/Sections/Text.latte deleted file mode 100644 index c8dbc9d..0000000 --- a/src/emails/templates.test/Sections/Text.latte +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - -
- - - - - - - -
- Lorem ipsum -
- Hello David,
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. -
-
- - - diff --git a/src/emails/templates/.gitkeep b/src/emails/templates/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/pages/dialog/basic.json.latte b/src/pages/dialog/basic.json.latte new file mode 100644 index 0000000..86ae5f8 --- /dev/null +++ b/src/pages/dialog/basic.json.latte @@ -0,0 +1,5 @@ +{capture $dialog} + {include TEMPLATES_DIR . 'components/dialog/DialogBasic.latte'} +{/capture} + +{$dialog|json('content')|noescape} diff --git a/src/pages/email/index.json b/src/pages/email/index.json new file mode 100644 index 0000000..5b5ac81 --- /dev/null +++ b/src/pages/email/index.json @@ -0,0 +1,12 @@ +{ + "title": "Email", + "template": "./src/templates/emails/layouts/default.latte", + "body": [ + { + "src": "emails/components/Header.latte" + }, + { + "src": "emails/components/Content.latte" + } + ] +} diff --git a/src/pages/gdpr.json b/src/pages/gdpr.json new file mode 100644 index 0000000..70283a1 --- /dev/null +++ b/src/pages/gdpr.json @@ -0,0 +1,11 @@ +{ + "title": "GDPR", + "body": [ + { + "src": "components/Content.latte" + }, + { + "src": "components/cookieconsent/CookieConsentContent.latte" + } + ] +} diff --git a/src/pages/index.json b/src/pages/index.json new file mode 100644 index 0000000..fa27afb --- /dev/null +++ b/src/pages/index.json @@ -0,0 +1,8 @@ +{ + "title": "Playground", + "body": [ + { + "src": "components/Playground.latte" + } + ] +} diff --git a/src/pages/popover/info.json.latte b/src/pages/popover/info.json.latte new file mode 100644 index 0000000..15522a1 --- /dev/null +++ b/src/pages/popover/info.json.latte @@ -0,0 +1,12 @@ +{capture $content} +

+ + +
+{/capture} + +{$content|json('content')|noescape} + diff --git a/src/scripts/Components/+.js b/src/scripts/Components/+.js deleted file mode 100644 index e866dcc..0000000 --- a/src/scripts/Components/+.js +++ /dev/null @@ -1,2 +0,0 @@ -import './Drawer.js' -import './Popover.js' diff --git a/src/scripts/Components/Drawer.js b/src/scripts/Components/Drawer.js deleted file mode 100644 index 0539c3d..0000000 --- a/src/scripts/Components/Drawer.js +++ /dev/null @@ -1,60 +0,0 @@ -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' -import { showDrawer, closeDrawer, scrollDrawer } from 'winduum/src/components/drawer/index.js' - -LibStimulus.register('c-drawer', class extends Controller { - static values = { - inertMatch: { - type: String, - default: ':where(.c-drawer, .l-header)' - } - } - - connect() { - this.scrollReset() - this.element.addEventListener('click', ({ target }) => { - if (target === this.element) this.close() - }) - } - - scrollReset() { - this.element.scroll({ left: this.element.scrollWidth, behavior: 'instant' }) - } - - scroll({ target }) { - scrollDrawer(target) - } - - inert(inert) { - [...document.body.children].forEach((element) => { - if (!element.matches(this.inertMatchValue)) (element.inert = inert) - }) - } - - show() { - this.scrollReset() - this.element.classList.add('active') - showDrawer(this.element) - this.inert(true) - } - - close() { - closeDrawer(this.element) - } - - toggle({ currentTarget }) { - this.activeButton = currentTarget - - if (!currentTarget.classList.contains('active')) { - currentTarget.classList.add('active') - this.show() - } else { - this.close() - } - } - - dismiss() { - this.element.classList.remove('active') - this.activeButton?.classList?.remove('active') - this.inert(false) - } -}) diff --git a/src/scripts/Components/Popover.js b/src/scripts/Components/Popover.js deleted file mode 100644 index eacfa45..0000000 --- a/src/scripts/Components/Popover.js +++ /dev/null @@ -1,65 +0,0 @@ -import { Controller, LibStimulus } from '../Libraries/Stimulus.js' -import { dataset, fetchJson } from '@newlogic-digital/utils-js' -import initAfter from '../Utils/initAfter.js' - -LibStimulus.register('c-popover', class extends Controller { - static values = { - url: String, - insertTo: String, - manual: Boolean - } - - async toggle({ currentTarget, params }) { - const { togglePopover } = await import('winduum/src/components/popover/index.js') - const hasUrlValue = this.hasUrlValue && !this.popoverTarget - - if (hasUrlValue) await this.fetch() - - this.popoverTarget = document.getElementById(currentTarget.getAttribute('popovertarget')) - - if (hasUrlValue) initAfter(this.popoverTarget) - - await togglePopover(currentTarget, params) - } - - async hide() { - if (this.popoverActionTarget.ariaExpanded !== 'true') return - - const { hidePopover } = await import('winduum/src/components/popover/index.js') - - await hidePopover(this.popoverActionTarget) - } - - async dismiss({ target }) { - if (this.popoverActionTarget.ariaExpanded !== 'true') return - - if (!this.popoverTarget.contains(target) && !this.popoverActionTarget.isEqualNode(target) && this.popoverActionTarget.ariaExpanded === 'true') { - await this.hide() - } - } - - async fetch() { - this.popoverActionTarget.classList.add('loading', 'cursor-wait') - - const { content } = await fetchJson(this.urlValue) - - this.popoverActionTarget.classList.remove('loading', 'cursor-wait') - - const insertElement = !this.hasInsertToValue ? this.popoverActionTarget : document.querySelector(this.insertToValue) - insertElement.insertAdjacentHTML(!this.hasInsertToValue ? 'afterend' : 'beforeend', content) - - return content - } - - connect() { - this.popoverActionTarget = this.element.querySelector('[popovertargetaction]') - - if (!this.popoverActionTarget) return - - ;(!this.hasManualValue || !this.manualValue) && dataset(this.popoverActionTarget, 'action').add( - `click->c-popover#${this.popoverActionTarget.getAttribute('popovertargetaction')}:prevent`, - 'keydown.esc@window->c-popover#hide', - 'click@window->c-popover#dismiss' - ) - } -}) diff --git a/src/scripts/Layout/+.js b/src/scripts/Layout/+.js deleted file mode 100644 index 7730f4e..0000000 --- a/src/scripts/Layout/+.js +++ /dev/null @@ -1 +0,0 @@ -import './Header.js' diff --git a/src/scripts/Layout/Header.js b/src/scripts/Layout/Header.js deleted file mode 100644 index 54d5fdc..0000000 --- a/src/scripts/Layout/Header.js +++ /dev/null @@ -1,20 +0,0 @@ -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' - -LibStimulus.register('l-header', class extends Controller { - static targets = ['logo', 'nav'] - - connect() { - if (!document.querySelector('.l-nav')) { - this.element.insertAdjacentHTML('afterend', ` - - `) - - const drawerContentElement = document.querySelector('.l-nav .c-drawer-content') - - drawerContentElement.insertAdjacentHTML('beforeend', this.logoTarget.outerHTML) - drawerContentElement.insertAdjacentHTML('beforeend', this.navTarget.outerHTML) - } - } -}) diff --git a/src/scripts/Libraries/+.js b/src/scripts/Libraries/+.js deleted file mode 100644 index 9edcd6d..0000000 --- a/src/scripts/Libraries/+.js +++ /dev/null @@ -1,10 +0,0 @@ -import './CookieConsent.js' -import './Dialog.js' -import './Form.js' -import './Naja.js' -import './ReCaptcha.js' -import './Reveal.js' -import './Ripple.js' -import './Stimulus.js' -export { default as Swup } from './Swup.js' -import './Toaster.js' diff --git a/src/scripts/Libraries/CookieConsent.js b/src/scripts/Libraries/CookieConsent.js deleted file mode 100644 index cc1c5f6..0000000 --- a/src/scripts/Libraries/CookieConsent.js +++ /dev/null @@ -1,80 +0,0 @@ -import { LibStimulus, Controller } from './Stimulus.js' -import { appendCookieConsent, setCookieConsent } from '@newlogic-digital/cookieconsent-js' -import { showDialog, closeDialog } from 'winduum/src/components/dialog/index.js' - -export const getCookieConsentItem = (key = 'cookieconsent-js') => localStorage.getItem(key) - -export const initCookieConsent = (element = document, type = getCookieConsentItem() ?? []) => { - element.querySelectorAll('[data-lib-cookieconsent]').forEach((element) => { - if (type.includes(element.getAttribute('data-lib-cookieconsent'))) { - appendCookieConsent(element, { - ignoreAttributeName: /(type|data-lib-cookieconsent)/ - }) - } - }) -} - -LibStimulus.register('c-dialog-cookieconsent', class extends Controller { - async connect() { - initCookieConsent() - - if (document.querySelector('.c-form-cookieconsent')) { - return - } - - if (!getCookieConsentItem() || parseInt(getCookieConsentItem('cookieconsent-js-expire')) < Date.now()) { - setTimeout(async () => { - await showDialog(this.element, { closable: false }) - }, 1500) - } else { - this.element.remove() - } - } - - async approve() { - await this.hide(['performance', 'marketing']) - } - - async decline() { - await this.hide([]) - } - - async hide(type) { - await setCookieConsent(type) - initCookieConsent(document, type) - await closeDialog(this.element, { remove: true }) - } -}) - -LibStimulus.register('c-form-cookieconsent', class extends Controller { - connect() { - document.querySelector('.c-dialog-cookieconsent')?.close() - - this.element.querySelectorAll('input:not([disabled])').forEach((input) => { - input.checked = false - }) - - JSON.parse(getCookieConsentItem())?.forEach((type) => { - if (this.element.querySelector(`input[value="${type}"]`) !== null) { - this.element.querySelector(`input[value="${type}"]`).checked = true - } - }) - } - - async update() { - const type = [] - - this.element.querySelectorAll('input:not([disabled])').forEach((input) => { - input.checked && type.push(input.value) - }) - - await setCookieConsent(type) - location.reload() - } - - disconnect() { - if ((!getCookieConsentItem() || parseInt(getCookieConsentItem('cookieconsent-js-expire')) < Date.now())) { - document.querySelector('.c-dialog-cookieconsent')?.showModal() - } - } -}) diff --git a/src/scripts/Libraries/Dialog.js b/src/scripts/Libraries/Dialog.js deleted file mode 100644 index 3536418..0000000 --- a/src/scripts/Libraries/Dialog.js +++ /dev/null @@ -1,28 +0,0 @@ -import { Controller, LibStimulus } from './../Libraries/Stimulus.js' -import { insertDialog, closeDialog, dialogSelector } from 'winduum/src/components/dialog/index.js' -import initAfter from '../Utils/initAfter.js' -import { fetchJson } from '@newlogic-digital/utils-js' - -LibStimulus.register('lib-dialog', class extends Controller { - async show({ currentTarget, params }) { - const loadingClasses = (params.loadingClass ?? 'loading cursor-wait').split(' ') - - currentTarget.classList.add(...loadingClasses) - - await this.fetch(params.url, params) - - currentTarget.classList.remove(...loadingClasses) - } - - async close({ currentTarget, params }) { - await closeDialog(currentTarget.closest('dialog'), { remove: params.remove ?? true }) - } - - async fetch(url, options) { - const { content } = await fetchJson(url) - - await insertDialog(content, options) - - initAfter(dialogSelector('.c-dialog')) - } -}) diff --git a/src/scripts/Libraries/Form.js b/src/scripts/Libraries/Form.js deleted file mode 100644 index 6a0b7fa..0000000 --- a/src/scripts/Libraries/Form.js +++ /dev/null @@ -1,13 +0,0 @@ -import { LibStimulus, Controller } from './Stimulus.js' -import { validateForm } from 'winduum/src/components/form/index.js' - -LibStimulus.register('lib-form', class extends Controller { - connect() { - this.element.noValidate = true - this.element.addEventListener('submit', this.validate) - } - - async validate(event) { - validateForm(event) - } -}) diff --git a/src/scripts/Libraries/Naja.js b/src/scripts/Libraries/Naja.js deleted file mode 100644 index 225c141..0000000 --- a/src/scripts/Libraries/Naja.js +++ /dev/null @@ -1,37 +0,0 @@ -import { Controller, LibStimulus, initStimulus } from './Stimulus.js' -import { initCookieConsent } from './CookieConsent.js' -import { - initNaja, - NajaRecaptchaExtension, - NajaFormValidityExtension -} from '../Utils/naja.js' -import naja from 'naja' -import LibSwup from './Swup.js' - -LibStimulus.register('lib-naja', class extends Controller { - async initialize() { - naja.uiHandler.selector = '[data-naja]' - - await initNaja(this.element, false) - - if (naja.initialized) return - - naja.uiHandler.addEventListener('interaction', ({ detail }) => { - detail.element.dispatchEvent(new CustomEvent('naja:interaction', { bubbles: true, cancelable: true })) - }) - - naja.snippetHandler.addEventListener('afterUpdate', ({ detail }) => { - detail.snippet.dispatchEvent(new CustomEvent('naja:afterUpdate', { bubbles: true, cancelable: true })) - - initStimulus(detail.snippet) - initNaja(detail.snippet) - initCookieConsent(detail.snippet) - - LibSwup.cache.clear() - }) - - naja.registerExtension(NajaRecaptchaExtension) - naja.registerExtension(NajaFormValidityExtension) - naja.initialize() - } -}) diff --git a/src/scripts/Libraries/ReCaptcha.js b/src/scripts/Libraries/ReCaptcha.js deleted file mode 100644 index 4235696..0000000 --- a/src/scripts/Libraries/ReCaptcha.js +++ /dev/null @@ -1,25 +0,0 @@ -import { LibStimulus, Controller } from './Stimulus.js' -import { importScript } from '@newlogic-digital/utils-js' -import cdn from '../Utils/cdn.js' - -LibStimulus.register('lib-recaptcha', class extends Controller { - static values = { - api: String, - action: String - } - - connect() { - importScript(cdn.recaptcha.replace('{apikey}', this.apiValue)) - } - - execute(event) { - if (event?.detail?.recaptchaExecuted) return - - window.grecaptcha.enterprise.ready(() => { - window.grecaptcha.enterprise.execute(this.apiValue, { action: this.actionValue ?? 'form' }).then((token) => { - this.element.gtoken.value = token - this.element.dispatchEvent(new CustomEvent('submit', { cancelable: true, detail: { recaptchaExecuted: true } })) - }) - }) - } -}) diff --git a/src/scripts/Libraries/Reveal.js b/src/scripts/Libraries/Reveal.js deleted file mode 100644 index dffebcb..0000000 --- a/src/scripts/Libraries/Reveal.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Controller, LibStimulus } from './Stimulus.js' -import { dataset } from '@newlogic-digital/utils-js' - -LibStimulus.register('lib-reveal', class extends Controller { - static targets = ['item'] - - intersectionObserver() { - this.observer = new IntersectionObserver((entries, observer) => { - entries.forEach((entry) => { - if (entry.intersectionRatio > 0.1 && !entry.target.classList.contains('in')) { - entry.target.classList.add('in') - - if (entry.target.dataset.controllerNameParam) { - dataset(entry.target, 'controller').add(entry.target.dataset.controllerNameParam) - } - } - }) - }, { - threshold: 0.1 - }) - } - - itemTargetConnected(element) { - if (!this.observer) this.intersectionObserver() - - this.observer?.observe(element) - } - - itemTargetDisconnected(element) { - this.observer?.unobserve(element) - } -}) diff --git a/src/scripts/Libraries/Ripple.js b/src/scripts/Libraries/Ripple.js deleted file mode 100644 index cdd8f4b..0000000 --- a/src/scripts/Libraries/Ripple.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Controller, LibStimulus } from './Stimulus.js' -import { showRipple } from 'winduum/src/utilities/ripple/index.js' - -LibStimulus.register('lib-ripple', class extends Controller { - async show(event) { - showRipple(event) - } -}) diff --git a/src/scripts/Libraries/Stimulus.js b/src/scripts/Libraries/Stimulus.js deleted file mode 100644 index 3874429..0000000 --- a/src/scripts/Libraries/Stimulus.js +++ /dev/null @@ -1,56 +0,0 @@ -import { Application, Controller } from '@hotwired/stimulus' -import { dataset } from '@newlogic-digital/utils-js' - -function initActions(parent, selectors) { - if (!parent) return - - selectors.forEach(([selector, action]) => { - parent.querySelectorAll(selector).forEach((element) => { - dataset(element, 'action').add(action) - }) - }) -} - -function initControllers(parent, selectors) { - if (!parent) return - - selectors.forEach((selector) => { - [...parent.getElementsByClassName(selector)].forEach((element) => { - dataset(element, 'controller').add(selector) - }) - }) -} - -function initStimulus(element, { controllers, actions } = { - controllers: ['ui-control', 'ui-text', 'ui-check'], - actions: [['.ui-btn', 'click->lib-ripple#show'], ['.ui-check', 'change->ui-check#validate']] -}) { - initControllers(element, controllers) - initActions(element, actions) -} - -const LibStimulus = new Application(document.documentElement) - -const getController = (...arg) => LibStimulus.getControllerForElementAndIdentifier(...arg) - -const delegateController = (name, method, event = {}, selector) => { - const controller = getController(document.querySelector(selector || `.${name}`), name) - - if (controller) return method ? controller[method](event) : controller -} - -LibStimulus.start().then(() => initStimulus(document.body)) - -LibStimulus.register('controller', class extends Controller { - delegate(event) { - delegateController(event.params.name, event.params.method, event, event.params.selector) - } - - load({ currentTarget, params }) { - dataset(currentTarget, 'controller').add(params.name) - } -}) - -window.LibStimulus = { default: LibStimulus, Controller, initStimulus, delegateController } - -export { LibStimulus, Controller, initStimulus, getController, delegateController } diff --git a/src/scripts/Libraries/Swup.js b/src/scripts/Libraries/Swup.js deleted file mode 100644 index 96c5a01..0000000 --- a/src/scripts/Libraries/Swup.js +++ /dev/null @@ -1,77 +0,0 @@ -import { dialogSelector } from 'winduum/src/components/dialog/index.js' -import { delegateController } from './Stimulus.js' -import Swup from 'swup' -import initAfter from '../Utils/initAfter.js' - -const LibSwup = new Swup({ - containers: ['.l-main', '.l-header'].filter(element => document.querySelector(element)), - ignoreVisit: (url, { el }) => el?.closest('[data-no-swup], [data-naja]'), - animationSelector: '.swup-transition' -}) - -LibSwup.hooks.on('animation:out:start', async () => { - document.body.classList.remove('overflow-hidden') - - delegateController('c-drawer', 'close') - delegateController('lib-dialog', 'close', { - currentTarget: dialogSelector('.c-dialog') - }, 'body') -}) - -LibSwup.hooks.before('scroll:top', (visit, { options }) => { - if (visit.from.url !== visit.to.url) (options.behavior = 'instant') -}) - -/** @var {Array} dataLayer */ -/** @var {Function} rc */ -/** @var {Function} retargetingHit */ -/** @var {Function} conversionHit */ -/** @var {Object} retargetingConf */ -/** @var {Object} conversionConf */ -/** @var {Function} fbq */ -LibSwup.hooks.on('content:replace', (visit, { page }) => { - const content = new DOMParser().parseFromString(page.html, 'text/html') - - content.querySelectorAll('[data-lib-replace-tag]').forEach((element) => { - const replaceTag = document.querySelector(`[data-lib-replace-tag="${element.dataset.libReplaceTag}"]`) - const placement = element.closest('head') ? document.head : replaceTag.parentElement - - replaceTag ? (replaceTag.outerHTML = element.outerHTML) : placement.insertAdjacentHTML('beforeend', element.outerHTML) - }) - - LibSwup.options.containers.forEach((selector) => { - initAfter(document.querySelector(selector)) - }) - - window.dataLayer && window.dataLayer.push({ - event: 'page_view' - }) - - window.rc?.retargetingHit && window.rc.retargetingHit(window.retargetingConf ?? {}) - window.rc?.conversionHit && window.rc.conversionHit(window.conversionConf ?? {}) - - window.fbq && window.fbq('track', 'PageView') -}) - -LibSwup.hooks.on('cache:set', (visit, { page }) => { - LibSwup.cache.update(page.url, { created: Date.now(), ttl: 1000 * 60 }) -}) - -LibSwup.hooks.before('page:load', () => { - // noinspection JSCheckFunctionSignatures - LibSwup.cache.prune((url, { created, ttl }) => Date.now() > created + ttl) -}) - -document.addEventListener('click', ({ target }) => { - const noSwup = target.closest('[data-no-swup]') - - if (!noSwup) return - - if (noSwup.classList.contains('ui-btn')) { - noSwup.classList.add('loading') - } else { - noSwup.classList.add('cursor-wait') - } -}) - -export default LibSwup diff --git a/src/scripts/Libraries/Toaster.js b/src/scripts/Libraries/Toaster.js deleted file mode 100644 index bdfdc32..0000000 --- a/src/scripts/Libraries/Toaster.js +++ /dev/null @@ -1,55 +0,0 @@ -import { Controller, LibStimulus } from '../Libraries/Stimulus.js' - -export const insertToaster = async (element, options) => { - if (!document.querySelector('.c-toaster')) { - element.insertAdjacentHTML('beforeend', `
    `) - } -} - -export const insertToast = async (element, options) => { - const { showToast } = await import('winduum/src/components/toaster/index.js') - - element.insertAdjacentHTML('beforeend', ` -
  1. -
    -
    -
    ${options.title ?? ''}
    -
    ${options.text ?? ''}
    -
    - -
    -
  2. - `) - - await showToast(element.children[element.children.length - 1], { - autoHide: false, - ...options?.show - }) -} - -LibStimulus.register('lib-toaster', class extends Controller { - static targets = ['toaster', 'show'] - - async show({ params }) { - await insertToaster(document.querySelector('dialog[open]') || document.body) - await insertToast(this.toasterTarget, params) - } - - async showTargetConnected(element) { - await this.show({ - params: JSON.parse(element.innerHTML) - }) - } -}) - -LibStimulus.register('c-toast', class extends Controller { - async close() { - const { closeToast } = await import('winduum/src/components/toaster/index.js') - - await closeToast(this.element) - } -}) diff --git a/src/scripts/Sections/+.js b/src/scripts/Sections/+.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/scripts/Ui/+.js b/src/scripts/Ui/+.js deleted file mode 100644 index 96e3d9c..0000000 --- a/src/scripts/Ui/+.js +++ /dev/null @@ -1,4 +0,0 @@ -import './Check.js' -import './Control.js' -import './ControlSelect.js' -import './Text.js' diff --git a/src/scripts/Ui/Check.js b/src/scripts/Ui/Check.js deleted file mode 100644 index ca417a7..0000000 --- a/src/scripts/Ui/Check.js +++ /dev/null @@ -1,8 +0,0 @@ -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' -import { validateField } from 'winduum/src/components/form/index.js' - -LibStimulus.register('ui-check', class extends Controller { - async validate({ currentTarget }) { - validateField(currentTarget) - } -}) diff --git a/src/scripts/Ui/Control.js b/src/scripts/Ui/Control.js deleted file mode 100644 index ca1197c..0000000 --- a/src/scripts/Ui/Control.js +++ /dev/null @@ -1,194 +0,0 @@ -import cdn from '../Utils/cdn.js' -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' -import { importStyle } from '@newlogic-digital/utils-js' -import { validateField } from 'winduum/src/components/form/index.js' - -LibStimulus.register('ui-control', class extends Controller { - static targets = ['number'] - - static values = { - dateOptions: { - default: {}, - type: Object - }, - dateDisabled: { - default: [], - type: Array - } - } - - async connect() { - validateField(this.element, { validate: false }) - - this.element.addEventListener('change', () => validateField(this.element)) - - if (this.element.querySelector('select')) { - return - } - - this.typeNumber() - - await this.typeDate() - - await this.typeColor() - } - - async typeDate() { - const input = this.element.querySelector('[type^="date"], [type="month"]') - - if (input) { - const AirDatepicker = (await import('air-datepicker')).default - const localeUrl = cdn.datepickerLang - const locale = (await import(/* @vite-ignore */ localeUrl)).default.default - const minDate = input.min ?? '' - const maxDate = input.max ?? '' - const timepicker = input.type === 'datetime-local' - const monthView = input.type === 'month' - ? { - view: 'months', - minView: 'months', - dateFormat: 'MMMM yyyy', - altFieldDateFormat: 'yyyy-MM' - } - : {} - - const attributes = [...input.attributes].filter(({ name }) => name.match(/(required|placeholder)/)).map(({ name, value }) => `${name}="${value}"`).join(' ') - - input.setAttribute('type', 'hidden') - - input.insertAdjacentHTML('afterend', ``) - - const inputText = this.element.querySelector('[type="text"]') - - if (input.id) { - inputText.id = input.id + '-datepicker' - } - - inputText.addEventListener('keydown', (e) => { - const key = e.key.toLowerCase() - - if (key !== 'backspace' && key !== 'tab') { - e.preventDefault() - } else if (key === 'backspace') { - this.datepicker.clear() - inputText.dispatchEvent(new Event('change', { bubbles: true })) - } - }) - - this.datepicker = new AirDatepicker(inputText, { - locale, - timepicker, - minDate, - maxDate, - startDate: input.value, - selectedDates: input.value, - altField: input, - autoClose: true, - container: this.element, - minutesStep: 5, - altFieldDateFormat: 'yyyy-MM-dd', - buttons: ['today', 'clear'], - ...monthView, - ...this.dateOptionsValue, - onRenderCell: ({ date, cellType }) => { - if (cellType === 'day' && this.dateDisabledValue.includes(this.datepicker.formatDate(date, 'yyyy-MM-dd'))) { - return { - disabled: true - } - } - }, - onShow: () => { - this.datepicker.$datepicker.querySelectorAll('.air-datepicker-button').forEach((element) => { - element.setAttribute('type', 'button') - element.setAttribute('tabindex', '-1') - }) - }, - onSelect: ({ date }) => { - input.dispatchEvent(new Event('change', { bubbles: true })) - } - }) - } - } - - async typeColor() { - if (this.element.querySelector('[type="color"]') !== null) { - const Pickr = (await import('@simonwep/pickr')).default - const input = this.element.querySelector('input') - - await importStyle(cdn.pickrCss) - - input.setAttribute('inputmode', 'none') - input.setAttribute('type', 'text') - input.setAttribute('maxlength', '9') - input.setAttribute('pattern', '^#?([a-fA-F0-9]{8}|[a-fA-F0-9]{6}|[a-fA-F0-9]{3})$') - - this.element.insertAdjacentHTML('afterbegin', '
    ') - - const pickr = new Pickr({ - el: input, - useAsButton: true, - theme: 'nano', - position: 'bottom-start', - components: { - preview: true, - opacity: true, - hue: true, - interaction: { - hex: true, - rgba: true, - input: true - } - } - }).on('init', (pickr) => { - pickr.setColor(input.value) - }).on('change', (color) => { - input.value = color.toHEXA().toString() - this.element.querySelector('.color').style['background-color'] = color.toHEXA().toString() - }).on('hide', (pickr) => { - pickr.applyColor() - input.dispatchEvent(new Event('change', { bubbles: true })) - }) - - input.addEventListener('change', ({ target }) => { - pickr.setColor(target.value) - }) - } - } - - typeNumber() { - if (this.element.querySelector('[type="number"]') && !this.hasNumberTarget) { - if (!this.element.querySelector('.ms-auto')) { - this.element.insertAdjacentHTML('beforeend', '
    ') - } - - this.element.querySelector('.ms-auto').insertAdjacentHTML('beforeend', ` -
    - - -
    - `) - } - } - - stepUp() { - this.element.querySelector('input:not([hidden])').stepUp() - this.element.querySelector('input:not([hidden])').dispatchEvent(new Event('change', { bubbles: true })) - } - - stepDown() { - this.element.querySelector('input:not([hidden])').stepDown() - this.element.querySelector('input:not([hidden])').dispatchEvent(new Event('change', { bubbles: true })) - } - - showPicker() { - this.element.querySelector('input:not([hidden])').showPicker() - } - - showDatepicker() { - this.datepicker.$el.focus() - } -}) diff --git a/src/scripts/Ui/ControlSelect.js b/src/scripts/Ui/ControlSelect.js deleted file mode 100644 index ac59b9a..0000000 --- a/src/scripts/Ui/ControlSelect.js +++ /dev/null @@ -1,25 +0,0 @@ -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' -import { dataset } from '@newlogic-digital/utils-js' - -LibStimulus.register('ui-control-select', class extends Controller { - connect() { - this.select = this.element.querySelector('select') - const option = this.element.querySelectorAll('[data-option]') - - if (option[0]) { - option.forEach((option) => { - if (option.dataset.disabled) { - return - } - - dataset(option, 'action').add('click->ui-control-select#choose', 'keydown.enter->ui-control-select#choose') - }) - } - } - - choose({ currentTarget }) { - this.select.value = currentTarget.dataset.option - this.select.dispatchEvent(new Event('change', { bubbles: true })) - document.activeElement.blur() - } -}) diff --git a/src/scripts/Ui/Text.js b/src/scripts/Ui/Text.js deleted file mode 100644 index 668fa40..0000000 --- a/src/scripts/Ui/Text.js +++ /dev/null @@ -1,21 +0,0 @@ -import { LibStimulus, Controller } from '../Libraries/Stimulus.js' - -LibStimulus.register('ui-text', class extends Controller { - connect() { - function wrap(element, wrapper) { - element.parentNode.insertBefore(wrapper, element) - wrapper.appendChild(element) - } - - this.element.querySelectorAll('table').forEach((table) => { - wrap(table, new DOMParser().parseFromString('
    ', 'text/html').body.firstChild) - }) - - this.element.querySelectorAll('iframe').forEach((iframe) => { - if (iframe.width && iframe.height) { - iframe.style.aspectRatio = iframe.width + '/' + iframe.height - iframe.style.height = 'auto' - } - }) - } -}) diff --git a/src/scripts/Utils/+.js b/src/scripts/Utils/+.js deleted file mode 100644 index dc24cd1..0000000 --- a/src/scripts/Utils/+.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as cdn } from './cdn.js' -export { default as initAfter } from './initAfter.js' -import './utilities.js' diff --git a/src/scripts/Utils/cdn.js b/src/scripts/Utils/cdn.js deleted file mode 100644 index 1be7707..0000000 --- a/src/scripts/Utils/cdn.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - recaptcha: 'https://www.google.com/recaptcha/enterprise.js?render={apikey}', - pickrCss: 'https://cdn.jsdelivr.net/npm/@simonwep/pickr@1.8.2/dist/themes/nano.min.css', - datepickerLang: `https://cdn.jsdelivr.net/npm/air-datepicker@3.3.5/locale/${document.documentElement.lang}.js/+esm` -} diff --git a/src/scripts/Utils/naja.js b/src/scripts/Utils/naja.js deleted file mode 100644 index 95ad6f9..0000000 --- a/src/scripts/Utils/naja.js +++ /dev/null @@ -1,41 +0,0 @@ -import naja from 'naja' - -export const initNaja = (element, bindUI = true, selectors = 'button, [role="button"]') => { - bindUI && naja.uiHandler.bindUI(element) - - element.querySelectorAll(`:where(${selectors})${naja.uiHandler.selector}`).forEach((element) => { - if (element.form && element.type === 'submit') return - - element.addEventListener('click', (event) => { - naja.uiHandler.processInteraction(element, element.dataset.najaMethod ?? 'GET', element.dataset.najaUrl, element.dataset.najaData, {}, event) - }) - }) -} - -export const NajaFormValidityExtension = { - initialize(naja) { - naja.uiHandler.addEventListener('interaction', (event) => { - const { element } = event.detail - - if (element?.form && !element.form.reportValidity()) { - event.preventDefault() - } - }) - } -} - -export const NajaRecaptchaExtension = { - initialize(naja) { - naja.uiHandler.addEventListener('interaction', (event) => { - const { element } = event.detail - - if ( - (element.form ?? element)?.dataset?.controller?.includes('lib-recaptcha') - && !event.detail?.originalEvent?.detail?.recaptchaExecuted - ) { - event.preventDefault() - return false - } - }) - } -} diff --git a/src/scripts/Utils/utilities.js b/src/scripts/Utils/utilities.js deleted file mode 100644 index dd9ccca..0000000 --- a/src/scripts/Utils/utilities.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Controller, LibStimulus } from '../Libraries/Stimulus.js' - -LibStimulus.register('utils', class extends Controller { - darkMode() { - document.documentElement.classList.toggle('dark') - localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light' - } -}) diff --git a/src/scripts/components/(ui)/+.js b/src/scripts/components/(ui)/+.js new file mode 100644 index 0000000..9fa4b0c --- /dev/null +++ b/src/scripts/components/(ui)/+.js @@ -0,0 +1,12 @@ +import './Button.js' +import './Compare.js' +import './Control.js' +import './ControlSelect.js' +import './Details.js' +import './Dialog.js' +import './Drawer.js' +import './Form.js' +import './Popover.js' +import './Range.js' +import './Tabs.js' +import './Toast.js' diff --git a/src/scripts/components/(ui)/Button.js b/src/scripts/components/(ui)/Button.js new file mode 100644 index 0000000..718569a --- /dev/null +++ b/src/scripts/components/(ui)/Button.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Button } from 'winduum-stimulus/components/button/index.js' + +useStimulus.register('x-button', Button) diff --git a/src/scripts/components/(ui)/Compare.js b/src/scripts/components/(ui)/Compare.js new file mode 100644 index 0000000..b74cb8e --- /dev/null +++ b/src/scripts/components/(ui)/Compare.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Compare } from 'winduum-stimulus/components/compare/index.js' + +useStimulus.register('x-compare', Compare) diff --git a/src/scripts/components/(ui)/Control.js b/src/scripts/components/(ui)/Control.js new file mode 100644 index 0000000..58b1cda --- /dev/null +++ b/src/scripts/components/(ui)/Control.js @@ -0,0 +1,11 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Control } from 'winduum-stimulus/components/control/index.js' +import { validateField } from 'winduum/src/components/form/index.js' + +useStimulus.register('x-control', class extends Control { + connect() { + validateField(this.element, { validate: false }) + + this.element.addEventListener('change', () => validateField(this.element)) + } +}) diff --git a/src/scripts/components/(ui)/ControlSelect.js b/src/scripts/components/(ui)/ControlSelect.js new file mode 100644 index 0000000..074f41f --- /dev/null +++ b/src/scripts/components/(ui)/ControlSelect.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { ControlSelect } from '@newlogic-digital/stimulus-components/src/control-select/index.js' + +useStimulus.register('x-control-select', ControlSelect) diff --git a/src/scripts/components/(ui)/Details.js b/src/scripts/components/(ui)/Details.js new file mode 100644 index 0000000..3727b75 --- /dev/null +++ b/src/scripts/components/(ui)/Details.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Details } from 'winduum-stimulus/components/details/index.js' + +useStimulus.register('x-details', Details) diff --git a/src/scripts/components/(ui)/Dialog.js b/src/scripts/components/(ui)/Dialog.js new file mode 100644 index 0000000..502d877 --- /dev/null +++ b/src/scripts/components/(ui)/Dialog.js @@ -0,0 +1,17 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Dialog } from 'winduum-stimulus/components/dialog/index.js' + +useStimulus.register('x-dialog', class extends Dialog { + connect() { + super.connect() + + this.element.addEventListener('x-dialog:show', () => this.appendToaster(this.element)) + this.element.addEventListener('close', () => this.appendToaster(document.body)) + } + + appendToaster(parentElement) { + const toasterElement = document.querySelector('.x-toaster') + + if (toasterElement) parentElement.appendChild(toasterElement) + } +}) diff --git a/src/scripts/components/(ui)/Drawer.js b/src/scripts/components/(ui)/Drawer.js new file mode 100644 index 0000000..07a5f8e --- /dev/null +++ b/src/scripts/components/(ui)/Drawer.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Drawer } from 'winduum-stimulus/components/drawer/index.js' + +useStimulus.register('x-drawer', Drawer) diff --git a/src/scripts/components/(ui)/Form.js b/src/scripts/components/(ui)/Form.js new file mode 100644 index 0000000..ee5fb02 --- /dev/null +++ b/src/scripts/components/(ui)/Form.js @@ -0,0 +1,15 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Form } from 'winduum-stimulus/components/form/index.js' +import { validateForm } from 'winduum/src/components/form/index.js' + +useStimulus.register('x-form', class extends Form { + requestSubmit() { + this.element.requestSubmit() + } + + reset(event) { + this.element.reset() + + validateForm(event, { validateOptions: { validate: false } }) + } +}) diff --git a/src/scripts/components/(ui)/Popover.js b/src/scripts/components/(ui)/Popover.js new file mode 100644 index 0000000..07d0e29 --- /dev/null +++ b/src/scripts/components/(ui)/Popover.js @@ -0,0 +1,13 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Popover } from 'winduum-stimulus/components/popover/index.js' +import { nextRepaint } from 'winduum/src/common.js' + +useStimulus.register('x-popover', class extends Popover { + async actionToggle() { + this.element.querySelector('[popovertargetaction]').setAttribute(`data-${this.identifier}-target`, 'action') + + await nextRepaint() + + await this.toggle({ currentTarget: this.actionTarget }) + } +}) diff --git a/src/scripts/components/(ui)/Range.js b/src/scripts/components/(ui)/Range.js new file mode 100644 index 0000000..3c3eb31 --- /dev/null +++ b/src/scripts/components/(ui)/Range.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Range } from 'winduum-stimulus/components/range/index.js' + +useStimulus.register('x-range', Range) diff --git a/src/scripts/components/(ui)/Tabs.js b/src/scripts/components/(ui)/Tabs.js new file mode 100644 index 0000000..8906b6d --- /dev/null +++ b/src/scripts/components/(ui)/Tabs.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Tabs } from 'winduum-stimulus/components/tabs/index.js' + +useStimulus.register('x-tabs', Tabs) diff --git a/src/scripts/components/(ui)/Toast.js b/src/scripts/components/(ui)/Toast.js new file mode 100644 index 0000000..e590651 --- /dev/null +++ b/src/scripts/components/(ui)/Toast.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { Toast } from 'winduum-stimulus/components/toast/index.js' + +useStimulus.register('x-toast', Toast) diff --git a/src/scripts/components/+.js b/src/scripts/components/+.js new file mode 100644 index 0000000..95e27f6 --- /dev/null +++ b/src/scripts/components/+.js @@ -0,0 +1,5 @@ +import './(ui)/+.js' +import './App.js' +import './ReCaptcha.js' +import './Reveal.js' +import './cookieconsent/+.js' diff --git a/src/scripts/components/App.js b/src/scripts/components/App.js new file mode 100644 index 0000000..95b4684 --- /dev/null +++ b/src/scripts/components/App.js @@ -0,0 +1,5 @@ +import { Controller, useStimulus } from '../composables/stimulus.js' + +useStimulus.register('x-app', class extends Controller { + // YOUR GLOBAL METHODS +}) diff --git a/src/scripts/components/ReCaptcha.js b/src/scripts/components/ReCaptcha.js new file mode 100644 index 0000000..acf0c6b --- /dev/null +++ b/src/scripts/components/ReCaptcha.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../composables/stimulus.js' +import { ReCaptcha } from '@newlogic-digital/stimulus-components/src/recaptcha/index.js' + +useStimulus.register('x-recaptcha', ReCaptcha) diff --git a/src/scripts/components/Reveal.js b/src/scripts/components/Reveal.js new file mode 100644 index 0000000..863fd0b --- /dev/null +++ b/src/scripts/components/Reveal.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../composables/stimulus.js' +import { Reveal } from '@newlogic-digital/stimulus-components/src/reveal/index.js' + +useStimulus.register('x-reveal', Reveal) diff --git a/src/scripts/components/cookieconsent/+.js b/src/scripts/components/cookieconsent/+.js new file mode 100644 index 0000000..46ba960 --- /dev/null +++ b/src/scripts/components/cookieconsent/+.js @@ -0,0 +1,2 @@ +import './CookieConsentDialog.js' +import './CookieConsentForm.js' diff --git a/src/scripts/components/cookieconsent/CookieConsentDialog.js b/src/scripts/components/cookieconsent/CookieConsentDialog.js new file mode 100644 index 0000000..b271b40 --- /dev/null +++ b/src/scripts/components/cookieconsent/CookieConsentDialog.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { CookieConsentDialog } from '@newlogic-digital/stimulus-components/src/cookieconsent/index.js' + +useStimulus.register('x-cookieconsent-dialog', CookieConsentDialog) diff --git a/src/scripts/components/cookieconsent/CookieConsentForm.js b/src/scripts/components/cookieconsent/CookieConsentForm.js new file mode 100644 index 0000000..cd718b8 --- /dev/null +++ b/src/scripts/components/cookieconsent/CookieConsentForm.js @@ -0,0 +1,4 @@ +import { useStimulus } from '../../composables/stimulus.js' +import { CookieConsentForm } from '@newlogic-digital/stimulus-components/src/cookieconsent/index.js' + +useStimulus.register('x-cookieconsent-form', CookieConsentForm) diff --git a/src/scripts/composables/+.js b/src/scripts/composables/+.js new file mode 100644 index 0000000..f237b52 --- /dev/null +++ b/src/scripts/composables/+.js @@ -0,0 +1,3 @@ +import './naja.js' +import './stimulus.js' +export { default as swup } from './swup.js' diff --git a/src/scripts/composables/naja.js b/src/scripts/composables/naja.js new file mode 100644 index 0000000..9034f28 --- /dev/null +++ b/src/scripts/composables/naja.js @@ -0,0 +1,26 @@ +import { default as useNaja } from 'naja' +import { + initNaja, + NajaCoreExtension, + NajaInvokeExtension, + NajaCheckValidityExtension +} from '@newlogic-digital/naja-extensions' +import { initCookieConsent } from '@newlogic-digital/cookieconsent-js' +import { initStimulus } from './stimulus.js' +import useSwup from './swup.js' + +useNaja.registerExtension(NajaCoreExtension()) +useNaja.registerExtension(NajaInvokeExtension()) +useNaja.registerExtension(NajaCheckValidityExtension()) + +useNaja.snippetHandler.addEventListener('afterUpdate', ({ detail }) => { + initStimulus(detail.snippet) + initNaja(detail.snippet) + initCookieConsent(detail.snippet) + + useSwup.cache.clear() +}) + +useNaja.initialize() + +export { useNaja, initNaja } diff --git a/src/scripts/composables/stimulus.js b/src/scripts/composables/stimulus.js new file mode 100644 index 0000000..3a2abc2 --- /dev/null +++ b/src/scripts/composables/stimulus.js @@ -0,0 +1,30 @@ +import { Application, Controller } from '@hotwired/stimulus' +import { InvokeFetch } from 'winduum-stimulus/utilities/invoke/index.js' +import stimulus from 'winduum-stimulus' +import { initAfter } from '../utils/+.js' + +const initConfig = { + controllers: ['x-button', 'x-control', 'x-text', 'x-check', 'x-dialog'], + actions: [ + ['.x-button', 'click->x-button#ripple'], + ['.x-check', 'change->x-form#validateForm'], + ['[data-invoke-action]:not([data-naja], [data-action*="invoke#action"])', 'invoke#action'] + ] +} + +const useStimulus = new Application(document.documentElement) + +const useController = (controller, target, application = useStimulus) => + stimulus.useController(controller, target, application) + +const initStimulus = (element, { controllers, actions } = initConfig) => + stimulus.initStimulus(element, { controllers, actions }) + +useStimulus.start().then(() => initStimulus(document.body)) +useStimulus.register('invoke', class extends InvokeFetch { + onFetchComplete(element) { + initAfter(element) + } +}) + +export { useStimulus, useController, Controller, initStimulus, initConfig } diff --git a/src/scripts/composables/swup.js b/src/scripts/composables/swup.js new file mode 100644 index 0000000..11b1038 --- /dev/null +++ b/src/scripts/composables/swup.js @@ -0,0 +1,22 @@ +import Swup from 'swup' +import { SwupCorePlugin } from '@newlogic-digital/swup-plugins' +import initAfter from '../utils/initAfter.js' +import { useController } from 'winduum-stimulus' + +const useSwup = new Swup({ + containers: ['.x-main', '.x-header'], + plugins: [new SwupCorePlugin()] +}) + +useSwup.hooks.on('animation:out:start', async () => { + useController('x-drawer', '.x-drawer').invoke('close') + useController('x-dialog', '.x-dialog').invoke('close') +}) + +useSwup.hooks.on('content:replace', () => { + useSwup.options.containers.forEach((selector) => { + initAfter(document.querySelector(selector)) + }) +}) + +export default useSwup diff --git a/src/scripts/main.js b/src/scripts/main.js index b4c51cd..6d2e613 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -1,7 +1,4 @@ -import './Libraries/+.js' -import './Layout/+.js' -import './Sections/+.js' -import './Components/+.js' -import './Ui/+.js' -import './Utils/utilities.js' +import './composables/stimulus.js' +import './composables/swup.js' +import './components/+.js' import.meta.glob('/src/assets/**') diff --git a/src/scripts/utils/+.js b/src/scripts/utils/+.js new file mode 100644 index 0000000..0018d97 --- /dev/null +++ b/src/scripts/utils/+.js @@ -0,0 +1 @@ +export { default as initAfter } from './initAfter.js' diff --git a/src/scripts/Utils/initAfter.js b/src/scripts/utils/initAfter.js similarity index 54% rename from src/scripts/Utils/initAfter.js rename to src/scripts/utils/initAfter.js index 57b13c2..c01115d 100644 --- a/src/scripts/Utils/initAfter.js +++ b/src/scripts/utils/initAfter.js @@ -1,7 +1,7 @@ import { replaceScripts } from '@newlogic-digital/utils-js' -import { initStimulus } from '../Libraries/Stimulus.js' -import { initCookieConsent } from '../Libraries/CookieConsent.js' -import { initNaja } from './naja.js' +import { initCookieConsent } from '@newlogic-digital/cookieconsent-js' +import { initStimulus } from '../composables/stimulus.js' +import { initNaja } from '../composables/naja.js' export default function initAfter(element) { initStimulus(element) diff --git a/src/styles/Components/+.css b/src/styles/Components/+.css deleted file mode 100644 index c821a6c..0000000 --- a/src/styles/Components/+.css +++ /dev/null @@ -1,5 +0,0 @@ -@import "Dialog/+.css"; -@import "Drawer.css"; -@import "Field.css"; -@import "Popover.css"; -@import "Toaster.css"; diff --git a/src/styles/Components/Dialog/+.css b/src/styles/Components/Dialog/+.css deleted file mode 100644 index add5630..0000000 --- a/src/styles/Components/Dialog/+.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "Content.css"; -@import "CookieConsent.css"; -@import "Default.css"; diff --git a/src/styles/Components/Dialog/Content.css b/src/styles/Components/Dialog/Content.css deleted file mode 100644 index c3dc4cc..0000000 --- a/src/styles/Components/Dialog/Content.css +++ /dev/null @@ -1,2 +0,0 @@ -@import "winduum/src/components/dialog/content.css"; -@import "winduum/src/components/dialog/content-props.css"; diff --git a/src/styles/Components/Dialog/Default.css b/src/styles/Components/Dialog/Default.css deleted file mode 100644 index c884d29..0000000 --- a/src/styles/Components/Dialog/Default.css +++ /dev/null @@ -1,2 +0,0 @@ -@import "winduum/src/components/dialog/default.css"; -@import "winduum/src/components/dialog/default-props.css"; diff --git a/src/styles/Components/Drawer.css b/src/styles/Components/Drawer.css deleted file mode 100644 index 12f254d..0000000 --- a/src/styles/Components/Drawer.css +++ /dev/null @@ -1,18 +0,0 @@ -@import "winduum/src/components/drawer/default-props.css"; -@import "winduum/src/components/drawer/default.css"; -@import "winduum/src/components/drawer/content-props.css"; -@import "winduum/src/components/drawer/content.css"; - -.c-drawer { - --c-drawer-content-width: min(calc(100vw - 2rem), 22rem); - --c-drawer-content-height: 100dvh; - - &:not(.active) { - opacity: 0; - } -} - -.c-drawer-content { - overflow-y: auto; - overscroll-behavior: contain; -} diff --git a/src/styles/Layout/+.css b/src/styles/Layout/+.css deleted file mode 100644 index 6cbd57e..0000000 --- a/src/styles/Layout/+.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "Header.css"; -@import "Main.css"; -@import "Nav.css"; diff --git a/src/styles/Layout/Header.css b/src/styles/Layout/Header.css deleted file mode 100644 index ae3907b..0000000 --- a/src/styles/Layout/Header.css +++ /dev/null @@ -1,18 +0,0 @@ -:root { - --l-header-height: 4rem; - --l-scroll-padding-top: calc(var(--l-header-height) + 1rem); -} - -.l-header { - position: sticky; - top: 0; - z-index: var(--z-20); - padding-inline: 2rem calc(2rem + var(--c-dialog-scrollbar-width, 0rem)); - background-color: var(--color-dark); - color: var(--color-light); - height: var(--l-header-height); - - .dark & { - background-color: var(--color-body-secondary); - } -} diff --git a/src/styles/Layout/Nav.css b/src/styles/Layout/Nav.css deleted file mode 100644 index 1bca5c1..0000000 --- a/src/styles/Layout/Nav.css +++ /dev/null @@ -1,23 +0,0 @@ -.l-nav { - .c-drawer-content { - padding: 2rem; - } - - [data-part~="logo"] { - display: flex; - padding: 0.75rem 0 2.5rem; - } - - [data-part~="nav"] { - display: flex; - flex-direction: column; - gap: 0.5rem; - align-items: flex-start; - - & a { - padding: 0.5rem 0; - font-size: 1.75rem; - display: block; - } - } -} diff --git a/src/styles/Libraries/+.css b/src/styles/Libraries/+.css deleted file mode 100644 index 04600e6..0000000 --- a/src/styles/Libraries/+.css +++ /dev/null @@ -1,2 +0,0 @@ -@import "Datepicker.css"; -@import "Pickr.css"; diff --git a/src/styles/Libraries/Datepicker.css b/src/styles/Libraries/Datepicker.css deleted file mode 100644 index e330150..0000000 --- a/src/styles/Libraries/Datepicker.css +++ /dev/null @@ -1,54 +0,0 @@ -@import "air-datepicker/air-datepicker.css"; - -.air-datepicker { - --adp-btn-color: var(--color-primary); - --adp-day-name-color: var(--color-primary); - --adp-color-current-date: var(--color-main); - --adp-cell-background-color-selected: var(--color-primary); - --adp-cell-background-color-selected-hover: var(--color-primary); - --adp-cell-border-radius: var(--rounded); - --adp-border-radius: var(--rounded); - - .dark & { - --adp-background-color: var(--color-body-tertiary); - --adp-background-color-hover: var(--color-body-secondary); - --adp-background-color-active: var(--color-body-secondary); - --adp-color: var(--color-main); - --adp-color-secondary: var(--color-main); - --adp-color-other-month: color-mix(in srgb, var(--color-main) 50%, var(--color-dark)); - --adp-border-color: var(--color-body-secondary); - --adp-border-color-inner: var(--color-body-secondary); - --adp-border-color-inline: var(--color-body-secondary); - } - - font-family: inherit; - - & input[type="range"] { - border: 0; - outline: 0; - } - - .air-datepicker--pointer { - &::after { - background: var(--adp-background-color); - } - } - - .air-datepicker-cell { - &.-current- { - --sq: 0.25rem; - --bottom: 0.25rem; - - &::before { - content: ""; - width: var(--sq); - height: var(--sq); - border-radius: var(--rounded-full); - background-color: var(--color-success); - position: absolute; - bottom: var(--bottom); - left: calc(50% - var(--sq) / 2); - } - } - } -} diff --git a/src/styles/Libraries/Pickr.css b/src/styles/Libraries/Pickr.css deleted file mode 100644 index 01bd0ec..0000000 --- a/src/styles/Libraries/Pickr.css +++ /dev/null @@ -1,13 +0,0 @@ -.pcr-app { - border-radius: var(--rounded); - overflow: hidden; - - .dark & { - background: var(--color-body-secondary); - - .pcr-interaction input { - background: var(--color-body-tertiary); - box-shadow: none; - } - } -} diff --git a/src/styles/Sections/+.css b/src/styles/Sections/+.css deleted file mode 100644 index e77c617..0000000 --- a/src/styles/Sections/+.css +++ /dev/null @@ -1 +0,0 @@ -/* empty */ \ No newline at end of file diff --git a/src/styles/Ui/+.css b/src/styles/Ui/+.css deleted file mode 100644 index 60b06e5..0000000 --- a/src/styles/Ui/+.css +++ /dev/null @@ -1,16 +0,0 @@ -@import "Badge.css"; -@import "Btn.css"; -@import "Check.css"; -@import "Control.css"; -@import "ControlSelect.css"; -@import "Group.css"; -@import "Heading.css"; -@import "Image.css"; -@import "Info.css"; -@import "Label.css"; -@import "Link.css"; -@import "Notice.css"; -@import "Progress.css"; -@import "Switch.css"; -@import "Text.css"; -@import "Title.css"; diff --git a/src/styles/Ui/Badge.css b/src/styles/Ui/Badge.css deleted file mode 100644 index da14680..0000000 --- a/src/styles/Ui/Badge.css +++ /dev/null @@ -1,8 +0,0 @@ -@import "winduum/src/ui/badge/default.css"; -@import "winduum/src/ui/badge/default-props.css"; -@import "winduum/src/ui/badge/sm.css"; -@import "winduum/src/ui/badge/lg.css"; -@import "winduum/src/ui/badge/bordered.css"; -@import "winduum/src/ui/badge/muted.css"; -@import "winduum/src/ui/badge/square.css"; -@import "winduum/src/ui/badge/circle.css"; diff --git a/src/styles/Ui/Btn.css b/src/styles/Ui/Btn.css deleted file mode 100644 index 09aff68..0000000 --- a/src/styles/Ui/Btn.css +++ /dev/null @@ -1,14 +0,0 @@ -@import "winduum/src/ui/btn/default.css"; -@import "winduum/src/ui/btn/default-props.css"; -@import "winduum/src/ui/btn/lg.css"; -@import "winduum/src/ui/btn/sm.css"; -@import "winduum/src/ui/btn/interactive.css"; -@import "winduum/src/ui/btn/interactive-props.css"; -@import "winduum/src/ui/btn/loading.css"; -@import "winduum/src/ui/btn/loading-props.css"; -@import "winduum/src/ui/btn/wide.css"; -@import "winduum/src/ui/btn/bordered.css"; -@import "winduum/src/ui/btn/ghosted.css"; -@import "winduum/src/ui/btn/muted.css"; -@import "winduum/src/ui/btn/square.css"; -@import "winduum/src/ui/btn/circle.css"; diff --git a/src/styles/Ui/Check.css b/src/styles/Ui/Check.css deleted file mode 100644 index 459baab..0000000 --- a/src/styles/Ui/Check.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/check/index.css"; diff --git a/src/styles/Ui/Control.css b/src/styles/Ui/Control.css deleted file mode 100644 index 7e45d15..0000000 --- a/src/styles/Ui/Control.css +++ /dev/null @@ -1,57 +0,0 @@ -@import "winduum/src/ui/control/default.css"; -@import "winduum/src/ui/control/default-props.css"; -@import "winduum/src/ui/control/interactive.css"; -@import "winduum/src/ui/control/interactive-props.css"; -@import "winduum/src/ui/control/file.css"; -@import "winduum/src/ui/control/select.css"; -@import "winduum/src/ui/control/select-props.css"; -@import "winduum/src/ui/control/icon.css"; -@import "winduum/src/ui/control/icon-props.css"; -@import "winduum/src/ui/control/floating.css"; -@import "winduum/src/ui/control/floating-props.css"; -@import "winduum/src/ui/control/invalid.css"; - -.ui-control { - --ui-control-font-size: var(--text-sm); - - &.active label, - :where(input, textarea):is(:focus, [placeholder]) ~ label, - :where(select):is([data-placeholder]) ~ label, - &:has(.-active-) label { - transform: translateY(calc(var(--ui-control-label-translate-y) * -1)) scale(var(--ui-control-label-scale)); - opacity: var(--ui-control-label-focus-opacity, 0.5); - } - - &:has(label):not(.active) select:not([data-placeholder]) { - font-size: 0; - height: inherit; - - & option { - font-size: var(--ui-control-font-size); - } - } - - :where(.color) { - width: var(--ui-control-icon-size); - height: var(--ui-control-icon-size); - border-radius: 50%; - overflow: hidden; - display: block; - border: 1px solid rgb(0 0 0 / 15%); - } - - :where([type="number"]) { - -moz-appearance: textfield; - - &::-webkit-outer-spin-button, - &::-webkit-inner-spin-button { - -webkit-appearance: none; - } - } - - :where(input) { - &::-webkit-calendar-picker-indicator { - display: none; - } - } -} diff --git a/src/styles/Ui/ControlSelect.css b/src/styles/Ui/ControlSelect.css deleted file mode 100644 index 1001269..0000000 --- a/src/styles/Ui/ControlSelect.css +++ /dev/null @@ -1,57 +0,0 @@ -.ui-control[data-controller~="ui-control-select"] { - position: relative; - cursor: pointer; - - & select { - pointer-events: none; - } - - & div[aria-hidden] { - grid-area: c-control; - will-change: transform; - border-radius: inherit; - position: absolute; - background-color: var(--color-body); - z-index: 100; - inset-inline: 0; - top: 100%; - margin-top: 0.5rem; - border: 1px solid color-mix(in srgb, currentcolor 10%, transparent); - transform: scaleY(0); - opacity: 0; - transition: var(--transition-opacity), var(--transition-transform); - transition-timing-function: cubic-bezier(0.54, 1.5, 0.38, 1.11); - transition-duration: 200ms; - backface-visibility: hidden; - transform-origin: center top; - user-select: none; - max-height: 12rem; - overflow-y: auto; - box-shadow: 0 0.15em 1.5em 0 color-mix(in srgb, var(--color-dark) 5%, transparent), 0 0 1em 0 color-mix(in srgb, var(--color-dark) 5%, transparent); - padding: 0.375rem; - color: currentcolor; - cursor: default; - - & [data-option] { - padding: calc(var(--ui-control-px) / 1.5) var(--ui-control-px); - cursor: pointer; - transition: var(--transition-background); - font-size: var(--ui-control-font-size); - border-radius: inherit; - - &[data-disabled] { - opacity: 0.5; - pointer-events: none; - } - - &:is(:hover, :focus) { - background-color: color-mix(in srgb, var(--color-accent) 10%, transparent); - } - } - } - - &:focus-within select ~ div[aria-hidden] { - opacity: 1; - transform: none; - } -} diff --git a/src/styles/Ui/Group.css b/src/styles/Ui/Group.css deleted file mode 100644 index 580261e..0000000 --- a/src/styles/Ui/Group.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/group/index.css"; diff --git a/src/styles/Ui/Heading.css b/src/styles/Ui/Heading.css deleted file mode 100644 index 3d8227e..0000000 --- a/src/styles/Ui/Heading.css +++ /dev/null @@ -1,4 +0,0 @@ -@import "winduum/src/ui/heading/default.css"; -@import "winduum/src/ui/heading/default-props.css"; -@import "winduum/src/ui/heading/sm.css"; -@import "winduum/src/ui/heading/lg.css"; diff --git a/src/styles/Ui/Image.css b/src/styles/Ui/Image.css deleted file mode 100644 index b03d011..0000000 --- a/src/styles/Ui/Image.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/image/index.css"; diff --git a/src/styles/Ui/Info.css b/src/styles/Ui/Info.css deleted file mode 100644 index 9b4be05..0000000 --- a/src/styles/Ui/Info.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/info/index.css"; diff --git a/src/styles/Ui/Label.css b/src/styles/Ui/Label.css deleted file mode 100644 index 6d9d29c..0000000 --- a/src/styles/Ui/Label.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/label/index.css"; diff --git a/src/styles/Ui/Link.css b/src/styles/Ui/Link.css deleted file mode 100644 index 7de7cf6..0000000 --- a/src/styles/Ui/Link.css +++ /dev/null @@ -1,8 +0,0 @@ -@import "winduum/src/ui/link/default.css"; -@import "winduum/src/ui/link/interactive.css"; -@import "winduum/src/ui/link/interactive-props.css"; - -.ui-link { - --ui-link-font-weight: var(--font-medium); - --ui-link-font-size: var(--text-sm); -} diff --git a/src/styles/Ui/Notice.css b/src/styles/Ui/Notice.css deleted file mode 100644 index ac4f1c8..0000000 --- a/src/styles/Ui/Notice.css +++ /dev/null @@ -1,9 +0,0 @@ -@import "winduum/src/ui/notice/index.css"; - -.ui-notice { - align-items: flex-start; - - hr { - width: 100%; - } -} diff --git a/src/styles/Ui/Progress.css b/src/styles/Ui/Progress.css deleted file mode 100644 index 9552759..0000000 --- a/src/styles/Ui/Progress.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/progress/index.css"; diff --git a/src/styles/Ui/Switch.css b/src/styles/Ui/Switch.css deleted file mode 100644 index 0032e00..0000000 --- a/src/styles/Ui/Switch.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/switch/index.css"; diff --git a/src/styles/Ui/Text.css b/src/styles/Ui/Text.css deleted file mode 100644 index c57df5c..0000000 --- a/src/styles/Ui/Text.css +++ /dev/null @@ -1 +0,0 @@ -@import "winduum/src/ui/text/index.css"; diff --git a/src/styles/Ui/Title.css b/src/styles/Ui/Title.css deleted file mode 100644 index afd4334..0000000 --- a/src/styles/Ui/Title.css +++ /dev/null @@ -1,4 +0,0 @@ -@import "winduum/src/ui/title/default.css"; -@import "winduum/src/ui/title/default-props.css"; -@import "winduum/src/ui/title/sm.css"; -@import "winduum/src/ui/title/lg.css"; diff --git a/src/styles/Utils/+.css b/src/styles/Utils/+.css deleted file mode 100644 index e03e191..0000000 --- a/src/styles/Utils/+.css +++ /dev/null @@ -1,6 +0,0 @@ -@import "breakpoints.css"; -@import "config.css"; -@import "default.css"; -@import "keyframes.css"; -@import "theme/+.css"; -@import "utilities.css"; diff --git a/src/styles/Utils/config.css b/src/styles/Utils/config.css deleted file mode 100644 index 626c517..0000000 --- a/src/styles/Utils/config.css +++ /dev/null @@ -1,16 +0,0 @@ -@import "winduum/src/base/config/font.css"; -@import "winduum/src/base/config/mask.css"; -@import "winduum/src/base/config/rounded.css"; -@import "winduum/src/base/config/spacing.css"; -@import "winduum/src/base/config/text.css"; -@import "winduum/src/base/config/transition.css"; -@import "winduum/src/base/config/z.css"; - -:root, :host { - --container: min(100% - (var(--container-padding) * 2), var(--container-width)); - --container-lg: min(100% - (var(--container-padding) * 2), var(--container-lg-width)); - --container-width: 80rem; - --container-lg-width: 90rem; - --container-padding: 5vw; - --container-padding-calc: max(calc(50vw - (var(--container-width) / 2)), var(--container-padding)); -} diff --git a/src/styles/Utils/theme/+.css b/src/styles/Utils/theme/+.css deleted file mode 100644 index 520f553..0000000 --- a/src/styles/Utils/theme/+.css +++ /dev/null @@ -1 +0,0 @@ -@import "main.css"; diff --git a/src/styles/Utils/theme/main.css b/src/styles/Utils/theme/main.css deleted file mode 100644 index c62f8e5..0000000 --- a/src/styles/Utils/theme/main.css +++ /dev/null @@ -1,33 +0,0 @@ -:root, :host { - --font-primary: "Poppins", sans-serif; - --font-secondary: "Poppins", sans-serif; - --space: srgb; - --scheme: dark; - --color-accent: var(--color-primary); - --color-accent-foreground: var(--color-primary-foreground); - --color-primary: #83cd4f; - --color-primary-foreground: var(--color-dark); - --color-main: #111315; - --color-main-foreground: var(--color-body); - --color-main-primary: var(--color-main); - --color-main-secondary: color-mix(in var(--space), var(--color-main) 75%, var(--color-main-foreground)); - --color-main-tertiary: color-mix(in var(--space), var(--color-main) 50%, var(--color-main-foreground)); - --color-body: #fff; - --color-body-foreground: var(--color-main); - --color-body-primary: var(--color-body); - --color-body-secondary: color-mix(in var(--space), var(--color-body) 95%, var(--color-body-foreground)); - --color-body-tertiary: color-mix(in var(--space), var(--color-body) 90%, var(--color-body-foreground)); - --color-light: #fff; - --color-light-foreground: var(--color-dark); - --color-dark: #111315; - --color-dark-foreground: var(--color-light); - --color-success: #16a34a; - --color-error: #dc2626; - --color-warning: #eab308; - --color-info: #0ea5e9; - - &.dark { - --color-main: #c9d1d9; - --color-body: #0e1116; - } -} diff --git a/src/styles/Utils/utilities.css b/src/styles/Utils/utilities.css deleted file mode 100644 index 136b7e3..0000000 --- a/src/styles/Utils/utilities.css +++ /dev/null @@ -1,42 +0,0 @@ -@import "winduum/src/utilities/common.css"; -@import "winduum/src/utilities/container/default.css"; -@import "winduum/src/utilities/ripple/index.css"; -@import "winduum/src/utilities/skeleton/index.css"; -@import "winduum/src/utilities/underline.css"; -@import "winduum/src/utilities/swap/index.css"; - -.container { - width: var(--container); - margin-inline: auto; -} - -.reveal { - opacity: 0; - transition-property: var(--transition); - transition-timing-function: var(--ease-in-out); - transition-duration: 0.75s; - will-change: transform; - - @media (prefers-reduced-motion) { - opacity: 1; - transform: none; - } - - @media print { - opacity: 1; - transform: none; - } - - &:is(.in), .no-js & { - opacity: 1; - transform: none; - } -} - -.no-scrollbar { - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } -} diff --git a/src/styles/base/+.css b/src/styles/base/+.css new file mode 100644 index 0000000..5bec4d9 --- /dev/null +++ b/src/styles/base/+.css @@ -0,0 +1,4 @@ +@import "./breakpoints.css"; +@import "./defaults.css"; +@import "./keyframes.css"; +@import "./transitions.css"; diff --git a/src/styles/Utils/breakpoints.css b/src/styles/base/breakpoints.css similarity index 100% rename from src/styles/Utils/breakpoints.css rename to src/styles/base/breakpoints.css diff --git a/src/styles/Utils/default.css b/src/styles/base/defaults.css similarity index 58% rename from src/styles/Utils/default.css rename to src/styles/base/defaults.css index 21655fa..ccf9989 100644 --- a/src/styles/Utils/default.css +++ b/src/styles/base/defaults.css @@ -1,10 +1,11 @@ @import "winduum/src/base/defaults.css"; +@import "winduum/tailwindcss/base/defaults.css"; :where(svg) { display: block; &:has([href]) { - stroke-width: 2; + stroke-width: 1.5; stroke: currentcolor; fill: none; } @@ -24,3 +25,12 @@ padding: 0; margin: 0; } + +:where([type="number"]) { + -moz-appearance: textfield; + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + } +} diff --git a/src/styles/Utils/keyframes.css b/src/styles/base/keyframes.css similarity index 100% rename from src/styles/Utils/keyframes.css rename to src/styles/base/keyframes.css diff --git a/src/styles/base/transitions.css b/src/styles/base/transitions.css new file mode 100644 index 0000000..cf48494 --- /dev/null +++ b/src/styles/base/transitions.css @@ -0,0 +1,12 @@ +@import "winduum/src/base/transitions.css"; + +.view-transition-main { + html.swup-enabled & { + transition: opacity var(--view-transition-main-duration); + opacity: 1; + } + + html.is-animating & { + opacity: 0; + } +} diff --git a/src/styles/components/(layout)/+.css b/src/styles/components/(layout)/+.css new file mode 100644 index 0000000..2a9b368 --- /dev/null +++ b/src/styles/components/(layout)/+.css @@ -0,0 +1,2 @@ +@import "./Header.css"; +@import "./Main.css"; diff --git a/src/styles/components/(layout)/Header.css b/src/styles/components/(layout)/Header.css new file mode 100644 index 0000000..3bd3e05 --- /dev/null +++ b/src/styles/components/(layout)/Header.css @@ -0,0 +1,11 @@ +:root { + --x-header-height: 4rem; + --scroll-padding-top: calc(var(--x-header-height) + 1rem); +} + +.x-header { + position: sticky; + top: 0; + z-index: var(--z-index-20); + height: var(--x-header-height); +} diff --git a/src/styles/Layout/Main.css b/src/styles/components/(layout)/Main.css similarity index 54% rename from src/styles/Layout/Main.css rename to src/styles/components/(layout)/Main.css index 0f92361..ad95af3 100644 --- a/src/styles/Layout/Main.css +++ b/src/styles/components/(layout)/Main.css @@ -1,5 +1,5 @@ html { - scroll-padding-top: var(--l-scroll-padding-top); + scroll-padding-top: var(--scroll-padding-top); @media (min-width: 60em) and (max-width: 75.9375rem) { font-size: 87.5%; @@ -13,19 +13,8 @@ body { overflow-x: clip; } -.l-main { +.x-main { flex-grow: 1; display: flex; flex-direction: column; - - &.swup-transition { - html.swup-enabled & { - transition: opacity 0.15s; - opacity: 1; - } - - html.is-animating & { - opacity: 0; - } - } } diff --git a/src/styles/components/(ui)/+.css b/src/styles/components/(ui)/+.css new file mode 100644 index 0000000..5387aeb --- /dev/null +++ b/src/styles/components/(ui)/+.css @@ -0,0 +1,23 @@ +@import "./Badge.css"; +@import "./Button.css"; +@import "./Check.css"; +@import "./Compare.css"; +@import "./Control.css"; +@import "./ControlSelect.css"; +@import "./Drawer.css"; +@import "./Field.css"; +@import "./Group.css"; +@import "./Heading.css"; +@import "./Image.css"; +@import "./Info.css"; +@import "./Label.css"; +@import "./Link.css"; +@import "./Notice.css"; +@import "./Popover.css"; +@import "./Progress.css"; +@import "./Range.css"; +@import "./Switch.css"; +@import "./Text.css"; +@import "./Title.css"; +@import "./Toaster.css"; +@import "./dialog/+.css"; diff --git a/src/styles/components/(ui)/Badge.css b/src/styles/components/(ui)/Badge.css new file mode 100644 index 0000000..e8434db --- /dev/null +++ b/src/styles/components/(ui)/Badge.css @@ -0,0 +1,8 @@ +@import "winduum/src/components/badge/props/default.css"; +@import "winduum/src/components/badge/default.css"; +@import "winduum/src/components/badge/sm.css"; +@import "winduum/src/components/badge/lg.css"; +@import "winduum/src/components/badge/bordered.css"; +@import "winduum/src/components/badge/muted.css"; +@import "winduum/src/components/badge/square.css"; +@import "winduum/src/components/badge/circle.css"; diff --git a/src/styles/components/(ui)/Button.css b/src/styles/components/(ui)/Button.css new file mode 100644 index 0000000..a1c7d82 --- /dev/null +++ b/src/styles/components/(ui)/Button.css @@ -0,0 +1,12 @@ +@import "winduum/src/components/button/props/default.css"; +@import "winduum/src/components/button/props/interactive.css"; +@import "winduum/src/components/button/default.css"; +@import "winduum/src/components/button/lg.css"; +@import "winduum/src/components/button/sm.css"; +@import "winduum/src/components/button/interactive.css"; +@import "winduum/src/components/button/bordered.css"; +@import "winduum/src/components/button/ghosted.css"; +@import "winduum/src/components/button/muted.css"; +@import "winduum/src/components/button/square.css"; +@import "winduum/src/components/button/circle.css"; +@import "winduum/src/components/button/spinner.css"; diff --git a/src/styles/components/(ui)/Check.css b/src/styles/components/(ui)/Check.css new file mode 100644 index 0000000..4e727e5 --- /dev/null +++ b/src/styles/components/(ui)/Check.css @@ -0,0 +1 @@ +@import "winduum/src/components/check/index.css"; diff --git a/src/styles/components/(ui)/Compare.css b/src/styles/components/(ui)/Compare.css new file mode 100644 index 0000000..15287c6 --- /dev/null +++ b/src/styles/components/(ui)/Compare.css @@ -0,0 +1 @@ +@import "winduum/src/components/compare/index.css"; diff --git a/src/styles/components/(ui)/Control.css b/src/styles/components/(ui)/Control.css new file mode 100644 index 0000000..eb9c367 --- /dev/null +++ b/src/styles/components/(ui)/Control.css @@ -0,0 +1,29 @@ +@import "winduum/src/components/control/props/default.css"; +@import "winduum/src/components/control/props/floating.css"; +@import "winduum/src/components/control/props/select.css"; +@import "winduum/src/components/control/props/icon.css"; +@import "winduum/src/components/control/default.css"; +@import "winduum/src/components/control/interactive.css"; +@import "winduum/src/components/control/file.css"; +@import "winduum/src/components/control/select.css"; +@import "winduum/src/components/control/icon.css"; +@import "winduum/src/components/control/floating.css"; +@import "winduum/src/components/control/invalid.css"; + +.x-control { + &[data-active] label, + :where(input, textarea):is(:focus, [placeholder]) ~ label, + :where(select):is([data-placeholder]) ~ label { + transform: translateY(calc(var(--x-control-label-translate-y) * -1)) scale(var(--x-control-label-scale)); + opacity: var(--x-control-label-focus-opacity, 0.5); + } + + &:has(label):not([data-active]) select:not([data-placeholder]) { + font-size: 0; + height: inherit; + + & option { + font-size: var(--x-control-font-size); + } + } +} diff --git a/src/styles/components/(ui)/ControlSelect.css b/src/styles/components/(ui)/ControlSelect.css new file mode 100644 index 0000000..c1d48b8 --- /dev/null +++ b/src/styles/components/(ui)/ControlSelect.css @@ -0,0 +1 @@ +@import "@newlogic-digital/stimulus-components/src/control-select/index.css"; diff --git a/src/styles/components/(ui)/Drawer.css b/src/styles/components/(ui)/Drawer.css new file mode 100644 index 0000000..bc83f9a --- /dev/null +++ b/src/styles/components/(ui)/Drawer.css @@ -0,0 +1,14 @@ +@import "winduum/src/components/drawer/props/default.css"; +@import "winduum/src/components/drawer/props/content.css"; +@import "winduum/src/components/drawer/default.css"; +@import "winduum/src/components/drawer/content.css"; + +.x-drawer { + --x-drawer-content-width: min(calc(100vw - 2rem), 22rem); + --x-drawer-content-height: 100dvh; +} + +.x-drawer-content { + overflow-y: auto; + overscroll-behavior: contain; +} diff --git a/src/styles/Components/Field.css b/src/styles/components/(ui)/Field.css similarity index 100% rename from src/styles/Components/Field.css rename to src/styles/components/(ui)/Field.css diff --git a/src/styles/components/(ui)/Group.css b/src/styles/components/(ui)/Group.css new file mode 100644 index 0000000..b34e56f --- /dev/null +++ b/src/styles/components/(ui)/Group.css @@ -0,0 +1 @@ +@import "winduum/src/components/group/index.css"; diff --git a/src/styles/components/(ui)/Heading.css b/src/styles/components/(ui)/Heading.css new file mode 100644 index 0000000..6ed35a9 --- /dev/null +++ b/src/styles/components/(ui)/Heading.css @@ -0,0 +1,4 @@ +@import "winduum/src/components/heading/props/default.css"; +@import "winduum/src/components/heading/default.css"; +@import "winduum/src/components/heading/sm.css"; +@import "winduum/src/components/heading/lg.css"; diff --git a/src/styles/components/(ui)/Image.css b/src/styles/components/(ui)/Image.css new file mode 100644 index 0000000..c064047 --- /dev/null +++ b/src/styles/components/(ui)/Image.css @@ -0,0 +1 @@ +@import "winduum/src/components/image/index.css"; diff --git a/src/styles/components/(ui)/Info.css b/src/styles/components/(ui)/Info.css new file mode 100644 index 0000000..a94664c --- /dev/null +++ b/src/styles/components/(ui)/Info.css @@ -0,0 +1 @@ +@import "winduum/src/components/info/index.css"; diff --git a/src/styles/components/(ui)/Label.css b/src/styles/components/(ui)/Label.css new file mode 100644 index 0000000..fa92033 --- /dev/null +++ b/src/styles/components/(ui)/Label.css @@ -0,0 +1 @@ +@import "winduum/src/components/label/index.css"; diff --git a/src/styles/components/(ui)/Link.css b/src/styles/components/(ui)/Link.css new file mode 100644 index 0000000..026c27b --- /dev/null +++ b/src/styles/components/(ui)/Link.css @@ -0,0 +1,2 @@ +@import "winduum/src/components/link/default.css"; +@import "winduum/src/components/link/interactive.css"; diff --git a/src/styles/components/(ui)/Notice.css b/src/styles/components/(ui)/Notice.css new file mode 100644 index 0000000..85ea028 --- /dev/null +++ b/src/styles/components/(ui)/Notice.css @@ -0,0 +1 @@ +@import "winduum/src/components/notice/index.css"; diff --git a/src/styles/Components/Popover.css b/src/styles/components/(ui)/Popover.css similarity index 100% rename from src/styles/Components/Popover.css rename to src/styles/components/(ui)/Popover.css diff --git a/src/styles/components/(ui)/Progress.css b/src/styles/components/(ui)/Progress.css new file mode 100644 index 0000000..a580786 --- /dev/null +++ b/src/styles/components/(ui)/Progress.css @@ -0,0 +1 @@ +@import "winduum/src/components/progress/index.css"; diff --git a/src/styles/components/(ui)/Range.css b/src/styles/components/(ui)/Range.css new file mode 100644 index 0000000..d9d274e --- /dev/null +++ b/src/styles/components/(ui)/Range.css @@ -0,0 +1 @@ +@import "winduum/src/components/range/index.css"; diff --git a/src/styles/components/(ui)/Switch.css b/src/styles/components/(ui)/Switch.css new file mode 100644 index 0000000..a4abb7f --- /dev/null +++ b/src/styles/components/(ui)/Switch.css @@ -0,0 +1 @@ +@import "winduum/src/components/switch/index.css"; diff --git a/src/styles/components/(ui)/Text.css b/src/styles/components/(ui)/Text.css new file mode 100644 index 0000000..92444a7 --- /dev/null +++ b/src/styles/components/(ui)/Text.css @@ -0,0 +1 @@ +@import "winduum/src/components/text/index.css"; diff --git a/src/styles/components/(ui)/Title.css b/src/styles/components/(ui)/Title.css new file mode 100644 index 0000000..878aa0b --- /dev/null +++ b/src/styles/components/(ui)/Title.css @@ -0,0 +1,4 @@ +@import "winduum/src/components/title/props/default.css"; +@import "winduum/src/components/title/default.css"; +@import "winduum/src/components/title/sm.css"; +@import "winduum/src/components/title/lg.css"; diff --git a/src/styles/Components/Toaster.css b/src/styles/components/(ui)/Toaster.css similarity index 100% rename from src/styles/Components/Toaster.css rename to src/styles/components/(ui)/Toaster.css diff --git a/src/styles/components/(ui)/dialog/+.css b/src/styles/components/(ui)/dialog/+.css new file mode 100644 index 0000000..90c4871 --- /dev/null +++ b/src/styles/components/(ui)/dialog/+.css @@ -0,0 +1,2 @@ +@import "./Dialog.css"; +@import "./DialogContent.css"; diff --git a/src/styles/components/(ui)/dialog/Dialog.css b/src/styles/components/(ui)/dialog/Dialog.css new file mode 100644 index 0000000..9100811 --- /dev/null +++ b/src/styles/components/(ui)/dialog/Dialog.css @@ -0,0 +1,2 @@ +@import "winduum/src/components/dialog/props/default.css"; +@import "winduum/src/components/dialog/default.css"; diff --git a/src/styles/components/(ui)/dialog/DialogContent.css b/src/styles/components/(ui)/dialog/DialogContent.css new file mode 100644 index 0000000..a57515c --- /dev/null +++ b/src/styles/components/(ui)/dialog/DialogContent.css @@ -0,0 +1,2 @@ +@import "winduum/src/components/dialog/props/content.css"; +@import "winduum/src/components/dialog/content.css"; diff --git a/src/styles/components/+.css b/src/styles/components/+.css new file mode 100644 index 0000000..b1703e1 --- /dev/null +++ b/src/styles/components/+.css @@ -0,0 +1,3 @@ +@import "./(layout)/+.css"; +@import "./(ui)/+.css"; +@import "./cookieconsent/+.css"; diff --git a/src/styles/components/cookieconsent/+.css b/src/styles/components/cookieconsent/+.css new file mode 100644 index 0000000..76f51b2 --- /dev/null +++ b/src/styles/components/cookieconsent/+.css @@ -0,0 +1 @@ +@import "./CookieConsentDialog.css"; diff --git a/src/styles/Components/Dialog/CookieConsent.css b/src/styles/components/cookieconsent/CookieConsentDialog.css similarity index 64% rename from src/styles/Components/Dialog/CookieConsent.css rename to src/styles/components/cookieconsent/CookieConsentDialog.css index 563ebfa..0ef2c89 100644 --- a/src/styles/Components/Dialog/CookieConsent.css +++ b/src/styles/components/cookieconsent/CookieConsentDialog.css @@ -1,14 +1,14 @@ -.c-dialog-cookieconsent { - .c-dialog-content { +.x-cookieconsent-dialog { + .x-dialog-content { max-width: 32rem; } &.center { - .c-dialog-content { + .x-dialog-content { max-width: 26rem; text-align: center; - & .ui-image { + & .x-image { margin-left: auto; margin-right: auto; } diff --git a/src/styles/emails/+.css b/src/styles/emails/+.css new file mode 100644 index 0000000..7b54ec5 --- /dev/null +++ b/src/styles/emails/+.css @@ -0,0 +1,5 @@ +@import "./base/+.css"; +@import "./components/+.css"; +@import "./main.css"; +@import "./theme/+.css"; +@import "./utils/+.css"; diff --git a/src/styles/emails/base/+.css b/src/styles/emails/base/+.css new file mode 100644 index 0000000..a893fe1 --- /dev/null +++ b/src/styles/emails/base/+.css @@ -0,0 +1,2 @@ +@import "./defaults.css"; +@import "./fonts.css"; diff --git a/src/styles/emails/base/defaults.css b/src/styles/emails/base/defaults.css new file mode 100644 index 0000000..a9d0664 --- /dev/null +++ b/src/styles/emails/base/defaults.css @@ -0,0 +1,22 @@ +body { + margin: 0; + padding: 0; + background-color: var(--color-body); +} + +img { + max-width: 100%; +} + +a { + transition: color 0.15s; + + &, img { + text-decoration: none; + color: var(--color-main); + } + + & img { + font-weight: 700; + } +} diff --git a/src/emails/styles/main/Base/font.css b/src/styles/emails/base/fonts.css similarity index 100% rename from src/emails/styles/main/Base/font.css rename to src/styles/emails/base/fonts.css diff --git a/src/styles/emails/components/+.css b/src/styles/emails/components/+.css new file mode 100644 index 0000000..752b39f --- /dev/null +++ b/src/styles/emails/components/+.css @@ -0,0 +1,4 @@ +@import "./Button.css"; +@import "./Heading.css"; +@import "./Main.css"; +@import "./Text.css"; diff --git a/src/styles/emails/components/Button.css b/src/styles/emails/components/Button.css new file mode 100644 index 0000000..ce7bce3 --- /dev/null +++ b/src/styles/emails/components/Button.css @@ -0,0 +1,31 @@ +.x-button { + a { + line-height: 24px; + mso-line-height-rule: exactly; + border-radius: var(--radius); + display: inline-block; + border: 1px solid var(--color-primary); + padding: 5px 12px; + font-size: 14px; + font-weight: 700; + + &, span { + text-decoration: none; + color: var(--color-primary-foreground); + } + } + + .x-button-content { + border-radius: var(--radius); + transition: background-color 0.15s; + background-color: var(--color-primary); + + &:hover { + background-color: var(--color-primary-hover) !important; + + a { + border: 1px solid var(--color-primary-hover) !important; + } + } + } +} diff --git a/src/styles/emails/components/Heading.css b/src/styles/emails/components/Heading.css new file mode 100644 index 0000000..3f10b12 --- /dev/null +++ b/src/styles/emails/components/Heading.css @@ -0,0 +1,7 @@ +.x-heading { + font-size: 24px; + line-height: 28px; + font-weight: 700; + mso-line-height-rule: exactly; + font-family: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} diff --git a/src/styles/emails/components/Main.css b/src/styles/emails/components/Main.css new file mode 100644 index 0000000..28a2c19 --- /dev/null +++ b/src/styles/emails/components/Main.css @@ -0,0 +1,13 @@ +.x-main { + font-family: Roboto, Tahoma, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + background-color: var(--color-body); + color: var(--color-main); + color-scheme: light; + min-width: 320px; + box-sizing: content-box; +} + +.x-main-body { + background-color: var(--color-body-primary); + border-radius: var(--radius); +} diff --git a/src/emails/styles/main/Ui/Text.css b/src/styles/emails/components/Text.css similarity index 50% rename from src/emails/styles/main/Ui/Text.css rename to src/styles/emails/components/Text.css index 824e99c..bf0177a 100644 --- a/src/emails/styles/main/Ui/Text.css +++ b/src/styles/emails/components/Text.css @@ -1,12 +1,14 @@ -.ui-text { - font-size: 14px; - font-weight: 400; +.x-text { + font-size: 16px; line-height: 24px; mso-line-height-rule: exactly; + b, strong { + font-weight: 700; + } + &.sm { - font-size: 13px; - font-weight: 400; + font-size: 14px; line-height: 20px; } } diff --git a/src/styles/emails/main.css b/src/styles/emails/main.css new file mode 100644 index 0000000..7555dd5 --- /dev/null +++ b/src/styles/emails/main.css @@ -0,0 +1,9 @@ +@import "tailwindcss/base.css"; +@import "tailwindcss/components.css"; +@import "tailwindcss/utilities.css"; +@import "tailwindcss/variants.css"; +@import "base/+.css"; +@import "theme/config.css"; +@import "theme/default.css"; +@import "components/+.css"; +@import "utils/+.css"; diff --git a/src/styles/emails/theme/+.css b/src/styles/emails/theme/+.css new file mode 100644 index 0000000..594ed5b --- /dev/null +++ b/src/styles/emails/theme/+.css @@ -0,0 +1,2 @@ +@import "./config.css"; +@import "./default.css"; diff --git a/src/styles/emails/theme/config.css b/src/styles/emails/theme/config.css new file mode 100644 index 0000000..afb3f59 --- /dev/null +++ b/src/styles/emails/theme/config.css @@ -0,0 +1,5 @@ +:root { + --spacing-container: 24px; + --radius: 12px; + --container: 600px; +} diff --git a/src/styles/emails/theme/default.css b/src/styles/emails/theme/default.css new file mode 100644 index 0000000..ee2202c --- /dev/null +++ b/src/styles/emails/theme/default.css @@ -0,0 +1,13 @@ +:root { + --color-primary: #83cd4f; + --color-primary-hover: #73b346; + --color-primary-foreground: #000; + --color-main: var(--color-main-primary); + --color-main-primary: #000; + --color-body: var(--color-body-secondary); + --color-body-primary: #fff; + --color-body-secondary: #f3f2f6; + --color-body-tertiary: #fcfcfd; + --color-light: #fff; + --color-dark: #000; +} diff --git a/src/styles/emails/utils/+.css b/src/styles/emails/utils/+.css new file mode 100644 index 0000000..1bd4124 --- /dev/null +++ b/src/styles/emails/utils/+.css @@ -0,0 +1 @@ +@import "./common.css"; diff --git a/src/styles/emails/utils/common.css b/src/styles/emails/utils/common.css new file mode 100644 index 0000000..fd2dada --- /dev/null +++ b/src/styles/emails/utils/common.css @@ -0,0 +1,29 @@ +.container { + min-width: var(--container); + width: var(--container); + + @media (max-width: 647px) { + min-width: 100% !important; + width: 100% !important; + } +} + +.underline { + text-decoration: underline; +} + +.border-r { + border-right: 1px solid; +} + +.border-l { + border-left: 1px solid; +} + +.border-b { + border-bottom: 1px solid; +} + +.border-t { + border-top: 1px solid; +} diff --git a/src/styles/main.css b/src/styles/main.css index 6cfbbc0..335d07a 100644 --- a/src/styles/main.css +++ b/src/styles/main.css @@ -1,16 +1,10 @@ @import "winduum/src/base/reset.css"; -@import "./Utils/default.css"; -@import "./Utils/breakpoints.css"; -@import "./Utils/keyframes.css"; -@import "./Utils/config.css"; -@import "./Utils/theme/+.css"; -@import "./Libraries/+.css"; -@import "./Layout/+.css" layer(components); -@import "./Ui/+.css" layer(components); -@import "./Components/+.css" layer(components); -@import "./Sections/+.css" layer(components); -@import "./Utils/utilities.css" layer(components); @import "tailwindcss/base.css"; +@import "winduum/tailwindcss/base/defaults.css"; +@import "./base/+.css"; +@import "./theme/main.css"; +@import "./components/+.css" layer(components); +@import "./utils/+.css"; @import "tailwindcss/components.css"; @import "tailwindcss/utilities.css"; @import "tailwindcss/variants.css"; diff --git a/src/styles/theme/+.css b/src/styles/theme/+.css new file mode 100644 index 0000000..252b954 --- /dev/null +++ b/src/styles/theme/+.css @@ -0,0 +1 @@ +@import "./main.css"; diff --git a/src/styles/theme/main.css b/src/styles/theme/main.css new file mode 100644 index 0000000..a512d84 --- /dev/null +++ b/src/styles/theme/main.css @@ -0,0 +1,39 @@ +@import "winduum/src/theme/config/font.css"; +@import "winduum/src/theme/config/mask.css"; +@import "winduum/src/theme/config/radius.css"; +@import "winduum/src/theme/config/spacing.css"; +@import "winduum/src/theme/config/transition.css"; +@import "winduum/src/theme/config/z.css"; + +:root, :host { + --default-font-family: "Poppins", sans-serif; + --default-color-space: srgb; + --default-color-scheme: inherit; + --color-accent: var(--color-primary); + --color-accent-foreground: var(--color-primary-foreground); + --color-primary: #83cd4f; + --color-primary-foreground: var(--color-dark); + --color-main: #111315; + --color-main-foreground: var(--color-body); + --color-main-primary: var(--color-main); + --color-main-secondary: color-mix(in var(--default-color-space), var(--color-main) 75%, var(--color-main-foreground)); + --color-main-tertiary: color-mix(in var(--default-color-space), var(--color-main) 50%, var(--color-main-foreground)); + --color-body: #fff; + --color-body-foreground: var(--color-main); + --color-body-primary: var(--color-body); + --color-body-secondary: color-mix(in var(--default-color-space), var(--color-body) 95%, var(--color-body-foreground)); + --color-body-tertiary: color-mix(in var(--default-color-space), var(--color-body) 90%, var(--color-body-foreground)); + --color-light: #fff; + --color-light-foreground: var(--color-dark); + --color-dark: #111315; + --color-dark-foreground: var(--color-light); + --color-success: #16a34a; + --color-error: #dc2626; + --color-warning: #eab308; + --color-info: #0ea5e9; + + &.dark { + --color-main: #c9d1d9; + --color-body: #0e1116; + } +} diff --git a/src/styles/tinymce.css b/src/styles/tinymce.css index 27d0dec..e6fd4d6 100644 --- a/src/styles/tinymce.css +++ b/src/styles/tinymce.css @@ -1,34 +1,2 @@ -@import "Utils/theme/main.css"; -@import "Utils/config.css"; -@import "Ui/Text.css"; - -.ui-text { - & .row { - display: flex; - box-sizing: border-box; - flex-wrap: wrap; - - & > .col { - box-sizing: border-box; - padding-top: 0; - padding-bottom: 0; - border: 1px dotted rgb(0 0 0 / 50%); - - &.col-6 { - width: calc(6 / 12 * 100%); - } - - &.col-8 { - width: calc(8 / 12 * 100%); - } - - &.col-4 { - width: calc(4 / 12 * 100%); - } - - &.col-3 { - width: calc(3 / 12 * 100%); - } - } - } -} +@import "./theme/main.css"; +@import "./components/(ui)/Text.css"; diff --git a/src/styles/utils/+.css b/src/styles/utils/+.css new file mode 100644 index 0000000..85e0656 --- /dev/null +++ b/src/styles/utils/+.css @@ -0,0 +1,4 @@ +@import "./container.css"; +@import "./index.css"; +@import "./reveal.css"; +@import "./scrollbar.css"; diff --git a/src/styles/utils/container.css b/src/styles/utils/container.css new file mode 100644 index 0000000..52c3361 --- /dev/null +++ b/src/styles/utils/container.css @@ -0,0 +1,5 @@ +@import "winduum/src/utilities/container/index.css"; + +:root, :host { + --container-width: 80rem; +} diff --git a/src/styles/utils/index.css b/src/styles/utils/index.css new file mode 100644 index 0000000..9c63287 --- /dev/null +++ b/src/styles/utils/index.css @@ -0,0 +1,8 @@ +@import "winduum/src/utilities/animation.css" layer(components); +@import "winduum/src/utilities/ripple/index.css" layer(components); +@import "winduum/src/utilities/skeleton/index.css" layer(components); +@import "winduum/src/utilities/underline.css" layer(components); +@import "winduum/src/utilities/swap/index.css" layer(components); +@import "winduum/src/utilities/spinner/default.css" layer(components); +@import "winduum/src/utilities/dot.css" layer(components); +@import "./+.css" layer(components); diff --git a/src/styles/utils/reveal.css b/src/styles/utils/reveal.css new file mode 100644 index 0000000..e08ae9f --- /dev/null +++ b/src/styles/utils/reveal.css @@ -0,0 +1,22 @@ +.reveal { + opacity: 0; + transition-property: var(--default-transition-property); + transition-timing-function: var(--transition-timing-function-in-out); + transition-duration: 0.75s; + will-change: transform; + + @media (prefers-reduced-motion) { + opacity: 1; + transform: none; + } + + @media print { + opacity: 1; + transform: none; + } + + &:is([data-in]), .no-js & { + opacity: 1; + transform: none; + } +} diff --git a/src/styles/utils/scrollbar.css b/src/styles/utils/scrollbar.css new file mode 100644 index 0000000..b031146 --- /dev/null +++ b/src/styles/utils/scrollbar.css @@ -0,0 +1,23 @@ +.no-scrollbar { + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } +} + +.scrollbar { + scrollbar-width: thin; + scrollbar-color: var(--color-primary) var(--color-body-primary); + overscroll-behavior: contain; + + &::-webkit-scrollbar { + width: 0.375rem; + background-color: transparent; + } + + &::-webkit-scrollbar-thumb { + background: var(--color-primary); + border-radius: var(--radius-full); + } +} diff --git a/src/templates/Components/Dialog/CookieConsent.latte b/src/templates/Components/Dialog/CookieConsent.latte deleted file mode 100644 index 3c80dc5..0000000 --- a/src/templates/Components/Dialog/CookieConsent.latte +++ /dev/null @@ -1,27 +0,0 @@ -{var $center = true} - - -
    -
    - {if true} -
    - -
    - {/if} -
    Nastavení soukromí a cookies 🍪
    -
    -
    -

    Webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookies.

    -

    Následující volbou souhlasíte s našimi zásady ochrany osobních údajů a cookies. Svá nastavení můžete kdykoli změnit.

    -
    -
    -
    - -
    -
    - Přizpůsobit - -
    -
    -
    -
    diff --git a/src/templates/Layout/Footer.latte b/src/templates/Layout/Footer.latte deleted file mode 100644 index e69de29..0000000 diff --git a/src/templates/Layout/Header.latte b/src/templates/Layout/Header.latte deleted file mode 100644 index 5c38b26..0000000 --- a/src/templates/Layout/Header.latte +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/src/templates/Sections/Site.latte b/src/templates/Sections/Site.latte deleted file mode 100644 index 6e057c3..0000000 --- a/src/templates/Sections/Site.latte +++ /dev/null @@ -1,213 +0,0 @@ -{import TEMPLATES_DIR . 'Ui/+.latte'} - -
    -
    -
    -
    -
    -
    Popover
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    -
    Popover
    -
    -
    - -
    - - -
    -
    -
    - -
    -
    -
    -
    - - - - - - -
    -
    - -
    -
    - -
    - - -
    -
    -
    -
    - {embed UiControl} - - - {/embed} -
    -
    - {embed UiControl} - - - {/embed} -
    -
    - {embed UiControl} - - - {/embed} -
    -
    - {embed UiControlSelect} - - - {/embed} -
    -
    - {embed UiControlSelect} - - - {/embed} -
    -
    - {embed UiControl} - -
    -
    -
    - {/embed} -
    -
    - {embed UiControl} - - {/embed} -
    -
    - {var $disabledDays = '["2023-07-13"]'} - {embed UiControlDate, attributes: 'data-ui-control-date-disabled-value="' . ($disabledDays|escapeHtml) . '"'} - - {/embed} -
    -
    - {embed UiControlDate} - - {/embed} -
    -
    - {embed UiControlDate} - - - {/embed} -
    -
    - {embed UiControlTime} - - {/embed} -
    -
    -
    - - - -
    -
    -
    -
    - {embed UiCheck} - - - {/embed} -
    -
    -
    - - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    / -
    -
    - - -
    - -
    -
    -
    -
    diff --git a/src/templates/Sections/Ui.latte b/src/templates/Sections/Ui.latte deleted file mode 100644 index 62725cc..0000000 --- a/src/templates/Sections/Ui.latte +++ /dev/null @@ -1,8 +0,0 @@ -{if isset($control->intro)} - {include 'Ui/Intro.html'} -{elseif isset($control->icons)} - {include 'Ui/Icons.html'} -{else} - {include 'Ui/Docs/@styles.html'} - {include 'Ui/Docs/Default.latte'} -{/if} diff --git a/src/templates/Sections/Ui/Docs/@intro.html b/src/templates/Sections/Ui/Docs/@intro.html deleted file mode 100644 index 3156f4c..0000000 --- a/src/templates/Sections/Ui/Docs/@intro.html +++ /dev/null @@ -1,48 +0,0 @@ -
    -
    -

    Get started

    -
    -

    Minimal versions are Node.js 16+ and NPM 9+

    -
    -
    -
    -

    Installation

    -
    -

    In existing project (with Vituum and Newlogic Core)

    -
    -
    
    -            npm i
    -        
    -
    -

    Creating a new project (with Vituum and Newlogic Core)

    -
    -
    
    -            $ git clone --depth 1 https://github.com/newlogic-digital/ui.git . && rm -r .git
    -            $ npm i
    -        
    -
    -

    Use with in any other environment

    -
    -
    
    -            $ npm i @newlogic-digital/ui
    -        
    -
    
    -            /* main.css or separate modules */
    -            @import "@newlogic-digital/ui/src/styles/main.css"
    -        
    -
    
    -            /* main.js or separate modules */
    -            import "@newlogic-digital/ui/src/scripts/main.js"
    -        
    -
    -
    -
    -

    Core

    -
    -

    Vituum and Newlogic Core is used as the main toolset, the complete documentation is at vituum.dev.

    -

    Newlogic Core is predefined config with plugins, filters etc. - core.newlogic.cz

    -

    Winduum is used as a main CSS component framework, learn more about it at winduum.dev

    -
    -
    -
    -
    diff --git a/src/templates/Sections/Ui/Docs/@nav.html b/src/templates/Sections/Ui/Docs/@nav.html deleted file mode 100644 index 21c8d4e..0000000 --- a/src/templates/Sections/Ui/Docs/@nav.html +++ /dev/null @@ -1,134 +0,0 @@ -
    -
    -
    -

    Get started

    - -
    - - -
    -
    diff --git a/src/templates/Sections/Ui/Docs/@styles.html b/src/templates/Sections/Ui/Docs/@styles.html deleted file mode 100644 index b206b6b..0000000 --- a/src/templates/Sections/Ui/Docs/@styles.html +++ /dev/null @@ -1,96 +0,0 @@ - - diff --git a/src/templates/Sections/Ui/Docs/Default.latte b/src/templates/Sections/Ui/Docs/Default.latte deleted file mode 100644 index 9d0bc55..0000000 --- a/src/templates/Sections/Ui/Docs/Default.latte +++ /dev/null @@ -1,979 +0,0 @@ -
    -
    - {include '@nav.html'} -
    -
    - {include '@intro.html'} -
    -
    -

    Components

    -
    -

    Examples of basic components that can be used in Newlogic UI, see winduum.dev for complete docs.

    -
    -
    -
    -

    Heading

    -
    -

    See ui/heading for more info.

    -
    - {capture $code} -

    Big heading

    - {/capture}{$code|code('html', true)|noescape} - - {capture $code} -

    Normal heading

    - {/capture}{$code|code('html', true)|noescape} - - {capture $code} -

    Small heading

    - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Title

    -
    -

    See ui/title for more info.

    -
    - {capture $code} - Title - {/capture}{$code|code('html', true)|noescape} - - {capture $code} - Title - {/capture}{$code|code('html', true)|noescape} - - {capture $code} - Title - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Button

    -
    -

    See ui/button for more info.

    -
    - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    - -
    -

    Control

    -
    -

    See ui/control for more info.

    -
    - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - - - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - - - -
    -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    -
    -
    -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - - - -
    -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -

    Check

    -
    -

    See ui/check for more info.

    -
    - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} -
    -
    -

    Notice

    -
    -

    See ui/notice for more info.

    -
    - {capture $code} -
    - Warning notice -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Success notice -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Info notice -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Error notice -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Error notice -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    -
    -

    Nicely done!

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in elit iaculis, tristique nisi ut, mollis tellus. Nunc venenatis elit vel placerat commodo. Vestibulum odio neque, hendrerit nec venenatis at, tincidunt ut magna. Etiam hendrerit ultrices pharetra.

    -
    -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Info notice -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Warning notice -
    - -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    -
    -

    Badly done!

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in elit iaculis, tristique nisi ut, mollis tellus. Nunc venenatis elit vel placerat commodo. Vestibulum odio neque, hendrerit nec venenatis at, tincidunt ut magna. Etiam hendrerit ultrices pharetra.

    -
    -
    - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -

    Badge

    -
    -

    See ui/badge for more info.

    -
    - {capture $code} -
    - Default -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Dark -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Light -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    - Primary -
    - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - Secondary - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} - - {/capture}{$code|code('html', true)|noescape} - {capture $code} -
    -
    - npm -
    -
    - 7.1.2 -
    -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Progress

    -
    -

    See ui/progress for more info.

    -
    -
    - {capture $code} - 15% - {/capture}{$code|code('html', true)|noescape} - {capture $code} - 15% - {/capture}{$code|code('html', true)|noescape} - - {capture $code} - 15% - {/capture}{$code|code('html', true)|noescape} - {capture $code} - 15% - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -
    -

    Text

    -
    -

    See ui/text for more info.

    -
    - {capture $code} -
    -

    h1 heading

    -

    h2 heading

    -

    h3 heading

    -

    h4 heading

    -
    h5 heading
    -
    h6 heading
    -

    Lorem ipsum dolor

    -
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget efficitur - metus. In bibendum nisi et dui sagittis efficitur. Proin porttitor diam at quam - finibus, quis porttitor turpis ullamcorper. Quisque iaculis imperdiet nunc in - hendrerit. Nulla facilisi. Sed at sodales ex. Vivamus ornare auctor ligula et - lobortis. Nunc metus augue, tristique vitae sagittis ac, interdum eu nisl. - Curabitur aliquet, lectus ut interdum commodo, ipsum elit gravida libero, in - laoreet lectus nisl a erat. Sed consequat justo pulvinar turpis pharetra mattis. - Phasellus non pretium libero.

    -

    -
      -
    • Lorem ipsum dolor sit amet, consectetur. Donec eget efficitur metus In - bibendum nisi et dui -
    • -
    • Donec eget efficitur metus
    • -
    -

    -
      -
    • Lorem ipsum dolor sit amet, consectetur. Donec eget efficitur metus In - bibendum nisi et dui -
    • -
    • Donec eget efficitur metus
    • -
    -

    -
      -
    • Lorem ipsum dolor sit amet, consectetur. Donec eget efficitur metus In - bibendum nisi et dui -
    • -
    • Donec eget efficitur metus
    • -
    -

    -
      -
    1. Lorem ipsum dolor sit amet, consectetur. Donec eget efficitur metus In - bibendum nisi et dui -
    2. -
    3. Donec eget efficitur metus
    4. -
    -
      -
    1. Coffee
    2. -
    3. Tea
    4. -
    5. Milk
    6. -
    -
      -
    1. Coffee
    2. -
    3. Tea
    4. -
    5. Milk
    6. -
    -
      -
    1. Coffee
    2. -
    3. Tea
    4. -
    5. Milk
    6. -
    -
      -
    1. Coffee
    2. -
    3. Tea
    4. -
    5. Milk
    6. -
    -
      -
    1. Coffee
    2. -
    3. Tea
    4. -
    5. Milk
    6. -
    -

    -
    Ut venenatis, nisl scelerisque sollicitudin fermentum, quam libero hendrerit ipsum, ut blandit est tellus sit amet turpis.
    -

    -
    - -
    - Figure 1: Some beautiful placeholders -
    -
    -

    Heading

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    -

    - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -

    Image

    -
    -

    Images should be wrapped inside .ui-image class and as div or picture

    -

    You can add lazyload for the images with loading="lazy" attribute.

    -

    To maintain ratio of the images you have to add ratio class from TailwindCSS, for example aspect-[4/3] or add width and height attributes to image.

    -
    -
    - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    - {capture $code} - - - - - {/capture}{$code|code('html', true)|noescape} -
    -
    -

    Lazyload can be added also on iframe

    -
    -
    - {capture $code} -
    - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -
    -
    -
    -

    Libraries

    -
    -
    -

    Form

    -
    -

    Provides javascript form validation upon send via data-controller="lib-form" attribute.

    -
    - {capture $code} -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    Protected with reCAPTCHA (Privacy policy - Terms of use)
    -
    - -
    -
    - -
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Dialog

    -
    -
    Usage on click
    -

    You can add data-action="click->lib-dialog#show" on any element with attribute data-lib-dialog-url-param which is url to *.json file or url request which contains html. For closing the dialog window, you can add data-action="click->lib-dialog#close" to any element inside the dialog.

    -
    Usage on page load
    -

    To open dialog upon page load, add data-lib-dialog-open-option attribute on data-controller="lib-dialog" (by default located on body),

    -

    Url is passed as data-lib-dialog-url-option, you can also add selector to data-lib-dialog-open-option, HTML content of that selector opens as a dialog.

    -
    Tokens (c-dialog-content)
    -
      -
    • scrollable - scroll inside dialog
    • -
    -
    Attributes (click->lib-dialog#show)
    -
      -
    • data-lib-dialog-url-param - url of *.json file
    • -
    • data-lib-dialog-remove-param - true/false whenever to remove dialog element from dom after closing
    • -
    • data-lib-dialog-append-param - true/false whenever to append new dialog element after the previous dialog, otherwise the previous is replaced
    • -
    -

    See libraries/dialog for more info.

    -
    - {capture $code} - - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Ripple

    -
    -

    The ripple effect is automatically applied to buttons and other components

    -

    The effect is possible apply anywhere using the attribute data-action="click->lib#ripple"

    -

    Background color can be changed with CSS property --lib-ripple-bg

    -
    Methods
    -
      -
    • initialization to any selector: LibRipple(element)
    • -
    -
    - {capture $code} -
    Ripple me
    - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    Drawer

    -
    -
    Files:
    -
      -
    • src/scripts/Libraries/Drawer.js
    • -
    • src/styles/Libraries/Drawer.css
    • -
    -
    -
    -
    -
    -

    Datepicker

    -
    -

    Air Datepicker is used as library in ui-control for type="date" and type="datetime-local".

    -
    Files:
    -
      -
    • src/styles/Libraries/Datepicker.css
    • -
    -
    -
    -
    -
    -

    Swup

    -
    -

    Full-page animations between pages are done using Swup

    -

    Everything is automatic and if the JS is correctly defined via Stimulus, all JS is reinitialized after site navigation

    -

    If you do not want to use Swup on a specific link, you can use the attribute data-no-swup

    -
    Files:
    -
      -
    • src/scripts/Libraries/Swup.js
    • -
    -
    -
    -
    -
    -

    Tippy

    -
    -

    For dropdowns and tooltips the Tippy.js library is used

    -

    Tippy properties can be freely modified using attributes data-tippy-*

    -

    The basic properties are defined by data-lib-tippy="type, template"

    -
      -
    • type can be dropdown or tooltip with variants -arrow and -full (full width view on your phone)
    • -
    • template can be id section with html or url for fetch (the response must contain json with the key content)
    • -
    -
    Methods
    -
      -
    • initialization: new LibTippy(element, attributes)
    • -
    -
    Files:
    -
      -
    • src/scripts/Libraries/Tippy.js
    • -
    -

    Loading tippy template from external file:

    -
    - {capture $code} - - {/capture}{$code|code('html', true)|noescape} -
    -

    Loading a tippy template from an inline template

    -
    - {capture $code} - - - {/capture}{$code|code('html', true)|noescape} -
    -

    Classic tooltip

    -
    - {capture $code} - - {/capture}{$code|code('html', true)|noescape} -
    -
    -
    -

    CookieConsent

    -
    -
    Files:
    -
      -
    • src/scripts/Libraries/CookieConsent.js
    • -
    • src/styles/Components/Dialog/CookieConsent.css
    • -
    • src/styles/Components/Form/CookieConsent.css
    • -
    -
    -
    -
    -
    -

    ReCaptcha

    -
    -

    Uses Google's recaptcha-enterprise

    -

    ReCaptcha can be added to various types of forms, which can be optionally distinguished with attribute data-lib-recaptcha-action-value

    -

    Api key has to be added with data-lib-recaptcha-api-value attribute

    -

    It can be evaluated upon submitting the form, with attribute data-action="submit->lib-recaptcha#execute:prevent" or can be submitted with data-naja which sends form via naja.

    -
    Files:
    -
      -
    • src/scripts/Libraries/ReCaptcha.js
    • -
    -
    - {capture $code} -
    - - -
    - {/capture}{$code|code('html', false)|noescape} -
    -
    -
    -

    Stimulus

    -
    -

    Stimulus is used for controller definitions, events and other JS interactions.

    -

    This library ensures the life of individual components and initializes them automatically when the content is redrawn.

    -

    Stimulus uses three main attributes data-controller (component definition), data-action (event definition - click, change etc.), data-target (target element in DOM)

    -

    Usage example with all attributes:

    -
    -
    
    -                                
    - -
    -
    -
    -
    
    -                                import { LibStimulus, Controller, getController } from "../Libraries/Stimulus.js";
    -
    -                                LibStimulus.register("lib-example", class extends Controller {
    -                                    // alternative target definitions (you can also use this.queryTarget or this.queryTargetAll instead)
    -                                    static targets = ['item']
    -                                    static classes = [ 'active' ]
    -                                    static values = {
    -                                        text: Number
    -                                    }
    -
    -                                    connect() {
    -                                        // starts when the controller is loaded into DOM
    -                                    }
    -
    -                                    disconnect() {
    -                                        // starts when the controller is deleted from DOM, use mainly if event listeners that are outside the controller are created in connect
    -                                    }
    -
    -                                    show({ currentTarget }) {
    -                                        // specific action to which the event can be applied
    -
    -                                        // refer to a specific target element and add a class and color settings
    -                                        this.itemTarget.classList.add(this.activeClass);
    -                                        this.itemTarget.style.color = currentTarget.dataset.actionColor;
    -
    -                                        // extract custom text defined by the controller, this always refers to the controller
    -                                        if (!this.hasTextValue) {
    -                                            this.textValue = 1;
    -                                        }
    -
    -                                        this.itemTarget.textContent = this.textValue;
    -                                        this.textValue = 2;
    -
    -                                        // This method can be used to communicate with another controller
    -                                        getController(document.querySelector(".other_controller"), "other_controller").doSomething()
    -                                    }
    -                                })
    -                            
    -
    -

    To fully understand the functionality, we recommend studying documentation

    -
    -
    -
    -
    -
    -
    -
    diff --git a/src/templates/Sections/Ui/Icons.html b/src/templates/Sections/Ui/Icons.html deleted file mode 100644 index 464f778..0000000 --- a/src/templates/Sections/Ui/Icons.html +++ /dev/null @@ -1,30 +0,0 @@ -
    -
    -

    Icons

    -
    -

    Basic icon set from heroicons.com. You can add more in your body as symbol

    -
    -
    -
    - diff --git a/src/templates/Sections/Ui/Intro.html b/src/templates/Sections/Ui/Intro.html deleted file mode 100644 index f4dde3c..0000000 --- a/src/templates/Sections/Ui/Intro.html +++ /dev/null @@ -1,119 +0,0 @@ -
    -
    -
    -

    Lightweight, modern and modular CSS framework with best principles

    -
    -

    Component framework with easy syntax for backend integration. Modern approach of CSS properties, enriched with utility classes from TailwindCSS and powered by Winduum

    -
    -
    -

    Javascript implementation is minimal and mainly intended for use on backend rendered websites and applications with PHP framework Nette

    -
    - -
    - git clone --depth 1 https://github.com/newlogic-digital/ui.git . && npm i -
    -
    -
    -

    Under the hood

    - -
    -
    Newlogic Core
    -
    Vite
    -
    Vituum
    -
    PostCSS
    -
    TailwindCSS
    -
    Stimulus
    -
    Swup
    -
    Lightweight
    -
    Modern
    -
    Modular
    -
    Accessible
    -
    Responsive
    -
    Progressive
    -
    Fast
    -
    Dark Mode
    -
    Easy syntax
    -
    CSS Properties
    -
    ES Modules
    -
    Dynamic Imports
    -
    Lazyloading
    -
    Mobile First
    -
    Backend First
    -
    Made for Nette
    -
    -
    -

    Newlogic UI uses Newlogic Core, which compiles modern JS and CSS syntax via Vite and Vituum. Source code can be used with any other tools or even different environment than NodeJS, e.g. Deno and is written in W3C standards and should be runnable in current or future version of browsers.

    -
    -
    - -
    -
    diff --git a/src/templates/Ui/+.latte b/src/templates/Ui/+.latte deleted file mode 100644 index 1ec51a6..0000000 --- a/src/templates/Ui/+.latte +++ /dev/null @@ -1,5 +0,0 @@ -{import 'Check.latte'} -{import 'Control.latte'} -{import 'ControlDate.latte'} -{import 'ControlTime.latte'} -{import 'ControlSelect.latte'} diff --git a/src/templates/Ui/Check.latte b/src/templates/Ui/Check.latte deleted file mode 100644 index 4b205b7..0000000 --- a/src/templates/Ui/Check.latte +++ /dev/null @@ -1,7 +0,0 @@ -
    - {block body}{/block} - {block label}{/block} -
    diff --git a/src/templates/Ui/Control.latte b/src/templates/Ui/Control.latte deleted file mode 100644 index 06f3c52..0000000 --- a/src/templates/Ui/Control.latte +++ /dev/null @@ -1,9 +0,0 @@ -
    - {block iconl}{/block} - {block body}{/block} - {block iconr}{/block} - {block label}{/block} -
    diff --git a/src/templates/Ui/ControlDate.latte b/src/templates/Ui/ControlDate.latte deleted file mode 100644 index 728c01b..0000000 --- a/src/templates/Ui/ControlDate.latte +++ /dev/null @@ -1,14 +0,0 @@ -
    - {block iconl}{/block} - {block body}{/block} -
    - {block iconr}{/block} - - - -
    - {block label}{/block} -
    diff --git a/src/templates/Ui/ControlSelect.latte b/src/templates/Ui/ControlSelect.latte deleted file mode 100644 index 3904f8f..0000000 --- a/src/templates/Ui/ControlSelect.latte +++ /dev/null @@ -1,9 +0,0 @@ -
    - {block iconl}{/block} - {block body}{/block} - {block iconr}{/block} - {block label}{/block} -
    diff --git a/src/templates/Ui/ControlTime.latte b/src/templates/Ui/ControlTime.latte deleted file mode 100644 index 2b8ce16..0000000 --- a/src/templates/Ui/ControlTime.latte +++ /dev/null @@ -1,14 +0,0 @@ -
    - {block iconl}{/block} - {block body}{/block} -
    - {block iconr}{/block} - - - -
    - {block label}{/block} -
    diff --git a/src/templates/components/(layout)/Footer.latte b/src/templates/components/(layout)/Footer.latte new file mode 100644 index 0000000..73b26f3 --- /dev/null +++ b/src/templates/components/(layout)/Footer.latte @@ -0,0 +1 @@ + diff --git a/src/templates/components/(layout)/Header.latte b/src/templates/components/(layout)/Header.latte new file mode 100644 index 0000000..a4c0aef --- /dev/null +++ b/src/templates/components/(layout)/Header.latte @@ -0,0 +1,7 @@ +
    + +
    diff --git a/src/templates/components/(ui)/Toast.latte b/src/templates/components/(ui)/Toast.latte new file mode 100644 index 0000000..3f22bf0 --- /dev/null +++ b/src/templates/components/(ui)/Toast.latte @@ -0,0 +1,9 @@ +
  3. +
    +
    +
    Hello toast
    +
    Amazing toast
    +
    + +
    +
  4. diff --git a/src/templates/Sections/Text.latte b/src/templates/components/Content.latte similarity index 97% rename from src/templates/Sections/Text.latte rename to src/templates/components/Content.latte index 4c35b0b..507aa6d 100644 --- a/src/templates/Sections/Text.latte +++ b/src/templates/components/Content.latte @@ -1,6 +1,6 @@ -
    -

    Zásady ochrany osobních údajů

    -
    +
    +

    Zásady ochrany osobních údajů

    +

    Správce osobních údajů a subjekt údajů

    Správcem osobních údajů je společnost provozující tento web, rezervační službu.

    Subjektem údajů je fyzická osoba, která správci poskytla svoje osobní údaje na základě nájemní smlouvy, kupní diff --git a/src/templates/components/Playground.latte b/src/templates/components/Playground.latte new file mode 100644 index 0000000..6dc4483 --- /dev/null +++ b/src/templates/components/Playground.latte @@ -0,0 +1,229 @@ +

    +
    + +
    +
    +
    + + + +
    +
    +
    +
    + + +
    +
    + +
    +
    asdf
    +
    +
    +
    + +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + +
    +
    + + + +
    +
    + +
    + +
    + + + +
    +
    + +
    + +
    + +
    + +
    + +
    + 0 +
    + +
    + +
    + +
    +
    + + + + +
    +
    + All +
    + + + +
    +
    + + +
    +
    +

    Info

    + +
    +
    +
    + {foreach range(1, 44) as $i} +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget efficitur metus. In bibendum nisi et dui sagittis efficitur.

    + {/foreach} +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + + +
    + Image 1 + Image 2 +
    +
    + +
    + + diff --git a/src/templates/Sections/CookieConsent.latte b/src/templates/components/cookieconsent/CookieConsentContent.latte similarity index 94% rename from src/templates/Sections/CookieConsent.latte rename to src/templates/components/cookieconsent/CookieConsentContent.latte index f16459c..cdd56e0 100644 --- a/src/templates/Sections/CookieConsent.latte +++ b/src/templates/components/cookieconsent/CookieConsentContent.latte @@ -1,6 +1,6 @@ -
    -

    Zásady používání cookies

    -
    +
    +

    Zásady používání cookies

    +

    Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookies. Pokud nepovolíte využití reklamních cookies, web bude používat pouze cookies nezbytné k tomu, abyste se mohli pohybovat po webu a používat jeho @@ -65,5 +65,5 @@

    - {include '../Components/Form/CookieConsent.latte'} + {include 'CookieConsentForm.latte'}
    diff --git a/src/templates/components/cookieconsent/CookieConsentDialog.latte b/src/templates/components/cookieconsent/CookieConsentDialog.latte new file mode 100644 index 0000000..2019766 --- /dev/null +++ b/src/templates/components/cookieconsent/CookieConsentDialog.latte @@ -0,0 +1,27 @@ +{var $center = true} + + +
    +
    + {if true} +
    + +
    + {/if} +
    Nastavení soukromí a cookies 🍪
    +
    +
    +

    Webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookies.

    +

    Následující volbou souhlasíte s našimi zásady ochrany osobních údajů a cookies. Svá nastavení můžete kdykoli změnit.

    +
    +
    +
    + +
    +
    + Přizpůsobit + +
    +
    +
    +
    diff --git a/src/templates/Components/Form/CookieConsent.latte b/src/templates/components/cookieconsent/CookieConsentForm.latte similarity index 84% rename from src/templates/Components/Form/CookieConsent.latte rename to src/templates/components/cookieconsent/CookieConsentForm.latte index 810f2c2..eb4a890 100644 --- a/src/templates/Components/Form/CookieConsent.latte +++ b/src/templates/components/cookieconsent/CookieConsentForm.latte @@ -1,6 +1,6 @@ -
    +
    -
    +

    Nastavení cookies

    Následujícím nastavením můžete upravit jaké soubory cookie @@ -9,39 +9,39 @@

    -
    +
    Nutné cookies

    Tyto soubory cookies jsou nezbytně nutné pro váš pohyb po webové stránce a využívání všech funkcí, např. nastavení preferencí soukromí, přihlašování nebo vyplňování formulářů. Bez těchto cookies by nebylo možné řádně poskytovat služby požadované při používání naší stránky. Nezbytně nutné cookies nevyžadují souhlas uživatele dle příslušných právních předpisů. Můžete si také nakonfigurovat webový prohlížeč a nezbytně nutné soubory cookies zablokovat, ovšem následně se může stát, že nebudete moci používat všechny funkce stránky tak, jak byste chtěli.

    -
    -
    +
    Statistické soubory cookies

    Tyto soubory cookie nám umožňují počítat návštěvy a zdroje návštěvnosti, abychom mohli měřit a zlepšovat výkon našich stránek. Pomáhají nám zjistit, které stránky jsou nejoblíbenější a které nejméně, a vidět, jak se návštěvníci na webu pohybují, což nám pomáhá optimalizovat váš zážitek. Všechny informace, které tyto soubory cookie shromažďují, jsou agregované, a proto anonymní. Pokud tyto soubory cookie nepovolíte, nebudeme moci používat vaše údaje tímto způsobem.

    -
    -
    +
    Reklamní soubory cookies

    Tyto soubory cookies (zvané také cílené nebo reklamní cookies) se používají k zobrazování reklam na stránkách třetích stran, které by více odpovídaly vaší osobě a vašim zájmům. Používají se také k omezení počtu shlédnutí reklam a měření účinností reklamních kampaní.

    -
    - +
    diff --git a/src/templates/Components/Dialog/Basic.latte b/src/templates/components/dialog/DialogBasic.latte similarity index 60% rename from src/templates/Components/Dialog/Basic.latte rename to src/templates/components/dialog/DialogBasic.latte index d52a800..2c67826 100644 --- a/src/templates/Components/Dialog/Basic.latte +++ b/src/templates/components/dialog/DialogBasic.latte @@ -1,15 +1,15 @@ - -
    + +
    -

    Info

    -
    -
    +
    {foreach range(1, 44) as $i}

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget efficitur metus. In bibendum nisi et dui sagittis efficitur.

    {/foreach} @@ -17,7 +17,7 @@
    - +
    diff --git a/src/templates/emails/components/Content.latte b/src/templates/emails/components/Content.latte new file mode 100644 index 0000000..2d1c615 --- /dev/null +++ b/src/templates/emails/components/Content.latte @@ -0,0 +1,29 @@ + + + + + + + + + + + + +
    + Lorem ipsum +
    + Hello David,
    + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. +
    + + + + +
    + Button +
    +
    + + + diff --git a/src/templates/emails/components/Footer.latte b/src/templates/emails/components/Footer.latte new file mode 100644 index 0000000..26a2005 --- /dev/null +++ b/src/templates/emails/components/Footer.latte @@ -0,0 +1,13 @@ + + + + + + +
    + ahoj@email.cz
    + (+420) 123 456 789
    + po-pá 9:00 - 17:30 +
    + + diff --git a/src/templates/emails/components/Header.latte b/src/templates/emails/components/Header.latte new file mode 100644 index 0000000..e9ebe16 --- /dev/null +++ b/src/templates/emails/components/Header.latte @@ -0,0 +1,8 @@ + + + + Logo + + + + diff --git a/src/emails/templates.test/Layout.latte b/src/templates/emails/layouts/default.latte similarity index 68% rename from src/emails/templates.test/Layout.latte rename to src/templates/emails/layouts/default.latte index 86e9289..89e25ca 100644 --- a/src/emails/templates.test/Layout.latte +++ b/src/templates/emails/layouts/default.latte @@ -6,7 +6,7 @@ - {var $forceLightMode = false} + {var $forceLightMode = true} {if $forceLightMode} @@ -17,19 +17,19 @@ {/if} - - - - - -
    - - -
    -
    + + + + + {include '../components/Footer.latte'} +
    + + {include '../../utils/sections.latte', sections => $body} +
    +
    diff --git a/src/templates/Layout/Main.latte b/src/templates/layouts/default.latte similarity index 57% rename from src/templates/Layout/Main.latte rename to src/templates/layouts/default.latte index dafa870..26da4e1 100644 --- a/src/templates/Layout/Main.latte +++ b/src/templates/layouts/default.latte @@ -2,7 +2,7 @@ - {$page->title} + {$title} @@ -10,7 +10,7 @@ - + @@ -22,25 +22,20 @@ {/if} {if isset($preload)} - {foreach $preload as $url} - rel)}rel="{$url->rel}"{else}rel="preload"{/if} - href="{$url->href|asset}" - {if isset($url->as)}as="{$url->as}"{/if} - {if isset($url->type)}type="{$url->type}"{/if} - {if isset($url->crossorigin)}crossorigin{/if} - > - {/foreach} + rel)}rel="{$url->rel}"{else}rel="preload"{/if} + {if isset($url->as)}as="{$url->as}"{/if} + {if isset($url->type)}type="{$url->type}"{/if} + {if isset($url->crossorigin)}crossorigin{/if} + > {/if} - {foreach $assets->css->all as $url} - - {/foreach} + {if isset($modulepreload)} - {foreach $modulepreload as $url} - - {/foreach} + {/if}