@atscript/ui-styles 0.1.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,1289 @@
1
+ import { a as getHelperClasses, i as getComponentClasses, n as componentClasses, o as helperAliases, r as componentPackages, t as kebabize } from "./kebab-CAodBEsa.mjs";
2
+ import presetIcons from "@unocss/preset-icons";
3
+ import { defineShortcuts, defineShortcuts as defineShortcuts$1, mergeVunorShortcuts, mergeVunorShortcuts as mergeVunorShortcuts$1, presetVunor, toUnoShortcut, vunorShortcuts } from "vunor/theme";
4
+ //#region src/extractor.ts
5
+ function createAsExtractor(opts = {}) {
6
+ const exclude = new Set(opts.excludeComponents ?? []);
7
+ const helperNames = Object.keys(helperAliases);
8
+ const helperPattern = helperNames.length ? new RegExp(`(?:^|[^.\\w])(${helperNames.join("|")})\\s*\\(`, "g") : null;
9
+ return {
10
+ name: "atscript-ui-components",
11
+ order: -1,
12
+ extract({ code }) {
13
+ if (!code) return void 0;
14
+ if (!code.includes("@atscript/") && !code.includes("<As") && !code.includes("<as-") && !helperNames.some((name) => code.includes(name))) return;
15
+ const matched = /* @__PURE__ */ new Set();
16
+ const addClassesFor = (kebab) => {
17
+ if (exclude.has(kebab)) return;
18
+ const list = componentClasses[kebab];
19
+ if (!list) return;
20
+ for (const cls of list) matched.add(cls);
21
+ };
22
+ for (const [, name] of code.matchAll(/['"]@atscript\/(?:vue-form|vue-table|vue-wf)\/(as-[\w-]+)['"]/g)) addClassesFor(name);
23
+ for (const [, names] of code.matchAll(/import\s*(?:type\s*)?\{([^}]+)\}\s*from\s*['"]@atscript\/(?:vue-form|vue-table|vue-wf)['"]/g)) for (const ident of names.split(",")) {
24
+ const name = ident.trim().split(/\s+as\s+/)[0];
25
+ if (/^As[A-Z]/.test(name)) addClassesFor(kebabize(name));
26
+ }
27
+ for (const [, name] of code.matchAll(/<(as-[\w-]+|As[A-Z][\w]*)/g)) addClassesFor(name.startsWith("As") ? kebabize(name) : name);
28
+ if (helperPattern) for (const [, helper] of code.matchAll(helperPattern)) for (const kebab of helperAliases[helper] ?? []) addClassesFor(kebab);
29
+ return matched.size > 0 ? matched : void 0;
30
+ }
31
+ };
32
+ }
33
+ //#endregion
34
+ //#region src/generated/baked-icons.ts
35
+ const bakedIcons = {
36
+ "arrow-down": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m205.66 149.66l-72 72a8 8 0 0 1-11.32 0l-72-72a8 8 0 0 1 11.32-11.32L120 196.69V40a8 8 0 0 1 16 0v156.69l58.34-58.35a8 8 0 0 1 11.32 11.32\"/></svg>",
37
+ "arrow-up": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M205.66 117.66a8 8 0 0 1-11.32 0L136 59.31V216a8 8 0 0 1-16 0V59.31l-58.34 58.35a8 8 0 0 1-11.32-11.32l72-72a8 8 0 0 1 11.32 0l72 72a8 8 0 0 1 0 11.32\"/></svg>",
38
+ check: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m232.49 80.49l-128 128a12 12 0 0 1-17 0l-56-56a12 12 0 1 1 17-17L96 183L215.51 63.51a12 12 0 0 1 17 17Z\"/></svg>",
39
+ "check-square": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M173.66 98.34a8 8 0 0 1 0 11.32l-56 56a8 8 0 0 1-11.32 0l-24-24a8 8 0 0 1 11.32-11.32L112 148.69l50.34-50.35a8 8 0 0 1 11.32 0M224 48v160a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16m-16 160V48H48v160z\"/></svg>",
40
+ "chevron-double-down": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M213.66 130.34a8 8 0 0 1 0 11.32l-80 80a8 8 0 0 1-11.32 0l-80-80a8 8 0 0 1 11.32-11.32L128 204.69l74.34-74.35a8 8 0 0 1 11.32 0m-91.32 11.32a8 8 0 0 0 11.32 0l80-80a8 8 0 0 0-11.32-11.32L128 124.69L53.66 50.34a8 8 0 0 0-11.32 11.32Z\"/></svg>",
41
+ "chevron-double-left": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M205.66 202.34a8 8 0 0 1-11.32 11.32l-80-80a8 8 0 0 1 0-11.32l80-80a8 8 0 0 1 11.32 11.32L131.31 128ZM51.31 128l74.35-74.34a8 8 0 0 0-11.32-11.32l-80 80a8 8 0 0 0 0 11.32l80 80a8 8 0 0 0 11.32-11.32Z\"/></svg>",
42
+ "chevron-double-right": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m141.66 133.66l-80 80a8 8 0 0 1-11.32-11.32L124.69 128L50.34 53.66a8 8 0 0 1 11.32-11.32l80 80a8 8 0 0 1 0 11.32m80-11.32l-80-80a8 8 0 0 0-11.32 11.32L204.69 128l-74.35 74.34a8 8 0 0 0 11.32 11.32l80-80a8 8 0 0 0 0-11.32\"/></svg>",
43
+ "chevron-double-up": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M213.66 194.34a8 8 0 0 1-11.32 11.32L128 131.31l-74.34 74.35a8 8 0 0 1-11.32-11.32l80-80a8 8 0 0 1 11.32 0Zm-160-68.68L128 51.31l74.34 74.35a8 8 0 0 0 11.32-11.32l-80-80a8 8 0 0 0-11.32 0l-80 80a8 8 0 0 0 11.32 11.32\"/></svg>",
44
+ "chevron-down": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80a8 8 0 0 1 11.32-11.32L128 164.69l74.34-74.35a8 8 0 0 1 11.32 11.32\"/></svg>",
45
+ "chevron-left": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M165.66 202.34a8 8 0 0 1-11.32 11.32l-80-80a8 8 0 0 1 0-11.32l80-80a8 8 0 0 1 11.32 11.32L91.31 128Z\"/></svg>",
46
+ "chevron-right": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m181.66 133.66l-80 80a8 8 0 0 1-11.32-11.32L164.69 128L90.34 53.66a8 8 0 0 1 11.32-11.32l80 80a8 8 0 0 1 0 11.32\"/></svg>",
47
+ "chevron-up": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M213.66 165.66a8 8 0 0 1-11.32 0L128 91.31l-74.34 74.35a8 8 0 0 1-11.32-11.32l80-80a8 8 0 0 1 11.32 0l80 80a8 8 0 0 1 0 11.32\"/></svg>",
48
+ close: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128L50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z\"/></svg>",
49
+ columns: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 4a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm6-1v18m6-18v18\"/></svg>",
50
+ ellipsis: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M140 128a12 12 0 1 1-12-12a12 12 0 0 1 12 12m56-12a12 12 0 1 0 12 12a12 12 0 0 0-12-12m-136 0a12 12 0 1 0 12 12a12 12 0 0 0-12-12\"/></svg>",
51
+ eye: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M9.5 12c2.206 0 4-1.794 4-4s-1.794-4-4-4s-4 1.794-4 4s1.794 4 4 4m1.5 1H8c-3.309 0-6 2.691-6 6v1h15v-1c0-3.309-2.691-6-6-6\"/><path fill=\"currentColor\" d=\"M16.604 11.048a5.67 5.67 0 0 0 .751-3.44c-.179-1.784-1.175-3.361-2.803-4.44l-1.105 1.666c1.119.742 1.8 1.799 1.918 2.974a3.7 3.7 0 0 1-1.072 2.986l-1.192 1.192l1.618.475C18.951 13.701 19 17.957 19 18h2c0-1.789-.956-5.285-4.396-6.952\"/></svg>",
52
+ "eye-off": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M16.604 11.048a5.67 5.67 0 0 0 .751-3.44c-.179-1.784-1.175-3.361-2.803-4.44l-1.105 1.666c1.119.742 1.8 1.799 1.918 2.974a3.7 3.7 0 0 1-1.072 2.986l-1.192 1.192l1.618.475C18.951 13.701 19 17.957 19 18h2c0-1.789-.956-5.285-4.396-6.952\"/><path fill=\"currentColor\" d=\"M9.5 12c2.206 0 4-1.794 4-4s-1.794-4-4-4s-4 1.794-4 4s1.794 4 4 4m0-6c1.103 0 2 .897 2 2s-.897 2-2 2s-2-.897-2-2s.897-2 2-2m1.5 7H8c-3.309 0-6 2.691-6 6v1h2v-1c0-2.206 1.794-4 4-4h3c2.206 0 4 1.794 4 4v1h2v-1c0-3.309-2.691-6-6-6\"/></svg>",
53
+ "eye-slash": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path stroke-linejoin=\"round\" d=\"M10.73 5.073A11 11 0 0 1 12 5c4.664 0 8.4 2.903 10 7a11.6 11.6 0 0 1-1.555 2.788M6.52 6.519C4.48 7.764 2.9 9.693 2 12c1.6 4.097 5.336 7 10 7a10.44 10.44 0 0 0 5.48-1.52m-7.6-7.6a3 3 0 1 0 4.243 4.243\"/><path d=\"m4 4l16 16\"/></g></svg>",
54
+ "field-empty": "<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2 12V10H3V12C3 12.5523 3.44772 13 4 13V14C2.96435 14 2.113 13.2128 2.01074 12.2041L2 12ZM6 13V14H4V13H6ZM2 4C2 2.89543 2.89543 2 4 2H6V3H4C3.44772 3 3 3.44772 3 4V6H2V4ZM14 6H13V4C13 3.44772 12.5523 3 12 3H10V2H12L12.2041 2.01074C13.2128 2.113 14 2.96435 14 4V6Z\" fill=\"currentColor\"/>\n<path d=\"M14 10V11L11 14H10V12C10 10.8954 10.8954 10 12 10H14ZM11 12.793L12.793 11H12C11.4477 11 11 11.4477 11 12V12.793Z\" fill=\"currentColor\"/>\n</svg>\n",
55
+ "field-fill": "<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M13.7542 4.23998L14.3287 3.63522C14.7022 3.24205 14.6943 2.62283 14.3108 2.23936L13.7606 1.68921C13.3772 1.30574 12.7579 1.29781 12.3648 1.67132L11.7857 2.22143M13.7542 4.23998L10.104 8.132C9.96644 8.27868 9.78785 8.38048 9.59154 8.4241L7.3835 8.91478C7.20488 8.95447 7.04553 8.79512 7.08522 8.6165L7.5759 6.40844C7.61952 6.21215 7.72131 6.03356 7.86798 5.89599L11.7857 2.22143M13.7542 4.23998L11.7857 2.22143\" stroke=\"currentColor\" stroke-miterlimit=\"1.7013\"/>\n<path d=\"M14 10V11L11 14H10V12C10 10.8954 10.8954 10 12 10H14ZM11 12.793L12.793 11H12C11.4477 11 11 11.4477 11 12V12.793Z\" fill=\"currentColor\"/>\n<path d=\"M4 13V14H11V13H4Z\" fill=\"currentColor\"/>\n<path d=\"M14 11H13V7L14 6V11Z\" fill=\"currentColor\"/>\n<path d=\"M4 14V13C3.44772 13 3 12.5523 3 12V4C3 3.44772 3.44772 3 4 3H9L10 2H4C2.89543 2 2 2.89543 2 4V12L2.01074 12.2041C2.113 13.2128 2.96435 14 4 14Z\" fill=\"currentColor\"/>\n</svg>\n",
56
+ filter: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M6 12h12m-9 6h6\"/></svg>",
57
+ "filter-ops": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M6 12h11m-8 6h2m7.42-2.39a2.1 2.1 0 0 1 1.485-.615a2.1 2.1 0 0 1 1.485.615a2.1 2.1 0 0 1 0 2.97L18 22h-3v-3z\"/></svg>",
58
+ grip: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M104 60a12 12 0 1 1-12-12a12 12 0 0 1 12 12m60 12a12 12 0 1 0-12-12a12 12 0 0 0 12 12m-72 44a12 12 0 1 0 12 12a12 12 0 0 0-12-12m72 0a12 12 0 1 0 12 12a12 12 0 0 0-12-12m-72 68a12 12 0 1 0 12 12a12 12 0 0 0-12-12m72 0a12 12 0 1 0 12 12a12 12 0 0 0-12-12\"/></svg>",
59
+ loading: "<svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"4\" cy=\"12\" r=\"0\"><animate begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/><animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/><animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/><animate id=\"spinner_lo66\" begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/><animate id=\"spinner_z0Or\" begin=\"spinner_lo66.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/></circle><circle cx=\"4\" cy=\"12\" r=\"3\"><animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/><animate begin=\"spinner_OLMs.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/><animate id=\"spinner_JsnR\" begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/><animate id=\"spinner_Aguh\" begin=\"spinner_JsnR.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/><animate begin=\"spinner_Aguh.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/></circle><circle cx=\"12\" cy=\"12\" r=\"3\"><animate begin=\"0;spinner_z0Or.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/><animate id=\"spinner_hSjk\" begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/><animate id=\"spinner_UHR2\" begin=\"spinner_hSjk.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/><animate begin=\"spinner_UHR2.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/><animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/></circle><circle cx=\"20\" cy=\"12\" r=\"3\"><animate id=\"spinner_4v5M\" begin=\"0;spinner_z0Or.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"3;0\" fill=\"freeze\"/><animate id=\"spinner_OLMs\" begin=\"spinner_4v5M.end\" attributeName=\"cx\" dur=\"0.001s\" values=\"20;4\" fill=\"freeze\"/><animate begin=\"spinner_OLMs.end\" attributeName=\"r\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"0;3\" fill=\"freeze\"/><animate begin=\"spinner_UHR2.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"4;12\" fill=\"freeze\"/><animate begin=\"spinner_Aguh.end\" attributeName=\"cx\" calcMode=\"spline\" dur=\"0.5s\" keySplines=\".36,.6,.31,1\" values=\"12;20\" fill=\"freeze\"/></circle></svg>",
60
+ menu: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\"/></svg>",
61
+ moon: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M233.54 142.23a8 8 0 0 0-8-2a88.08 88.08 0 0 1-109.8-109.8a8 8 0 0 0-10-10a104.84 104.84 0 0 0-52.91 37A104 104 0 0 0 136 224a103.1 103.1 0 0 0 62.52-20.88a104.84 104.84 0 0 0 37-52.91a8 8 0 0 0-1.98-7.98m-44.64 48.11A88 88 0 0 1 65.66 67.11a89 89 0 0 1 31.4-26A106 106 0 0 0 96 56a104.11 104.11 0 0 0 104 104a106 106 0 0 0 14.92-1.06a89 89 0 0 1-26.02 31.4\"/></svg>",
62
+ pin: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m235.32 81.37l-60.69-60.68a16 16 0 0 0-22.63 0l-53.63 53.8c-10.66-3.34-35-7.37-60.4 13.14a16 16 0 0 0-1.29 23.78L85 159.71l-42.66 42.63a8 8 0 0 0 11.32 11.32L96.29 171l48.29 48.29A16 16 0 0 0 155.9 224h1.13a15.93 15.93 0 0 0 11.64-6.33c19.64-26.1 17.75-47.32 13.19-60L235.33 104a16 16 0 0 0-.01-22.63M224 92.69l-57.27 57.46a8 8 0 0 0-1.49 9.22c9.46 18.93-1.8 38.59-9.34 48.62L48 100.08c12.08-9.74 23.64-12.31 32.48-12.31A40.1 40.1 0 0 1 96.81 91a8 8 0 0 0 9.25-1.51L163.32 32L224 92.68Z\"/></svg>",
63
+ "pin-filled": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m235.33 104l-53.47 53.65c4.56 12.67 6.45 33.89-13.19 60A15.93 15.93 0 0 1 157 224h-1.13a16 16 0 0 1-11.32-4.69L96.29 171l-42.63 42.66a8 8 0 0 1-11.32-11.32L85 159.71l-48.3-48.3A16 16 0 0 1 38 87.63c25.42-20.51 49.75-16.48 60.4-13.14L152 20.7a16 16 0 0 1 22.63 0l60.69 60.68a16 16 0 0 1 .01 22.62\"/></svg>",
64
+ plus: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M224 128a8 8 0 0 1-8 8h-80v80a8 8 0 0 1-16 0v-80H40a8 8 0 0 1 0-16h80V40a8 8 0 0 1 16 0v80h80a8 8 0 0 1 8 8\"/></svg>",
65
+ refresh: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M224 48v48a8 8 0 0 1-8 8h-48a8 8 0 0 1 0-16h28.69l-14.63-14.63a79.56 79.56 0 0 0-56.13-23.43h-.45a79.52 79.52 0 0 0-55.89 22.77a8 8 0 0 1-11.18-11.44a96 96 0 0 1 135 .79L208 76.69V48a8 8 0 0 1 16 0m-37.59 135.29a80 80 0 0 1-112.47-.66L59.31 168H88a8 8 0 0 0 0-16H40a8 8 0 0 0-8 8v48a8 8 0 0 0 16 0v-28.69l14.63 14.63A95.43 95.43 0 0 0 130 222.06h.53a95.36 95.36 0 0 0 67.07-27.33a8 8 0 0 0-11.18-11.44Z\"/></svg>",
66
+ search: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m229.66 218.34l-50.07-50.06a88.11 88.11 0 1 0-11.31 11.31l50.06 50.07a8 8 0 0 0 11.32-11.32M40 112a72 72 0 1 1 72 72a72.08 72.08 0 0 1-72-72\"/></svg>",
67
+ settings: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M128 80a48 48 0 1 0 48 48a48.05 48.05 0 0 0-48-48m0 80a32 32 0 1 1 32-32a32 32 0 0 1-32 32m109.94-52.79a8 8 0 0 0-3.89-5.4l-29.83-17l-.12-33.62a8 8 0 0 0-2.83-6.08a111.9 111.9 0 0 0-36.72-20.67a8 8 0 0 0-6.46.59L128 41.85L97.88 25a8 8 0 0 0-6.47-.6a112.1 112.1 0 0 0-36.68 20.75a8 8 0 0 0-2.83 6.07l-.15 33.65l-29.83 17a8 8 0 0 0-3.89 5.4a106.5 106.5 0 0 0 0 41.56a8 8 0 0 0 3.89 5.4l29.83 17l.12 33.62a8 8 0 0 0 2.83 6.08a111.9 111.9 0 0 0 36.72 20.67a8 8 0 0 0 6.46-.59L128 214.15L158.12 231a7.9 7.9 0 0 0 3.9 1a8.1 8.1 0 0 0 2.57-.42a112.1 112.1 0 0 0 36.68-20.73a8 8 0 0 0 2.83-6.07l.15-33.65l29.83-17a8 8 0 0 0 3.89-5.4a106.5 106.5 0 0 0-.03-41.52m-15 34.91l-28.57 16.25a8 8 0 0 0-3 3c-.58 1-1.19 2.06-1.81 3.06a7.94 7.94 0 0 0-1.22 4.21l-.15 32.25a95.9 95.9 0 0 1-25.37 14.3L134 199.13a8 8 0 0 0-3.91-1h-3.83a8.1 8.1 0 0 0-4.1 1l-28.84 16.1A96 96 0 0 1 67.88 201l-.11-32.2a8 8 0 0 0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.1 8.1 0 0 0-3-3.06l-28.6-16.29a90.5 90.5 0 0 1 0-28.26l28.52-16.28a8 8 0 0 0 3-3c.58-1 1.19-2.06 1.81-3.06a7.94 7.94 0 0 0 1.22-4.21l.15-32.25a95.9 95.9 0 0 1 25.37-14.3L122 56.87a8 8 0 0 0 4.1 1h3.64a8.1 8.1 0 0 0 4.1-1l28.84-16.1A96 96 0 0 1 188.12 55l.11 32.2a8 8 0 0 0 1.22 4.22c.62 1 1.23 2 1.8 3.06a8.1 8.1 0 0 0 3 3.06l28.6 16.29a90.5 90.5 0 0 1 .05 28.29Z\"/></svg>",
68
+ "sort-asc": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M126 128a6 6 0 0 1-6 6H48a6 6 0 0 1 0-12h72a6 6 0 0 1 6 6M48 70h136a6 6 0 0 0 0-12H48a6 6 0 0 0 0 12m56 116H48a6 6 0 0 0 0 12h56a6 6 0 0 0 0-12m124.24-22.24a6 6 0 0 0-8.48 0L190 193.51V112a6 6 0 0 0-12 0v81.51l-29.76-29.75a6 6 0 0 0-8.48 8.48l40 40a6 6 0 0 0 8.48 0l40-40a6 6 0 0 0 0-8.48\"/></svg>",
69
+ sorters: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h7m-7 6h7m-7 6h9m2-9l3-3l3 3m-3-3v12\"/></svg>",
70
+ star: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M239.18 97.26A16.38 16.38 0 0 0 224.92 86l-59-4.76l-22.78-55.09a16.36 16.36 0 0 0-30.27 0L90.11 81.23L31.08 86a16.46 16.46 0 0 0-9.37 28.86l45 38.83L53 211.75a16.38 16.38 0 0 0 24.5 17.82l50.5-31.08l50.53 31.08A16.4 16.4 0 0 0 203 211.75l-13.76-58.07l45-38.83a16.43 16.43 0 0 0 4.94-17.59m-15.34 5.47l-48.7 42a8 8 0 0 0-2.56 7.91l14.88 62.8a.37.37 0 0 1-.17.48c-.18.14-.23.11-.38 0l-54.72-33.65a8 8 0 0 0-8.38 0l-54.72 33.67c-.15.09-.19.12-.38 0a.37.37 0 0 1-.17-.48l14.88-62.8a8 8 0 0 0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16a8 8 0 0 0 6.72-4.94l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153 91.86a8 8 0 0 0 6.75 4.92l63.92 5.16c.15 0 .24 0 .33.29s0 .4-.16.5\"/></svg>",
71
+ "star-filled": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m234.29 114.85l-45 38.83L203 211.75a16.4 16.4 0 0 1-24.5 17.82L128 198.49l-50.53 31.08A16.4 16.4 0 0 1 53 211.75l13.76-58.07l-45-38.83A16.46 16.46 0 0 1 31.08 86l59-4.76l22.76-55.08a16.36 16.36 0 0 1 30.27 0l22.75 55.08l59 4.76a16.46 16.46 0 0 1 9.37 28.86Z\"/></svg>",
72
+ sun: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M120 40V16a8 8 0 0 1 16 0v24a8 8 0 0 1-16 0m72 88a64 64 0 1 1-64-64a64.07 64.07 0 0 1 64 64m-16 0a48 48 0 1 0-48 48a48.05 48.05 0 0 0 48-48M58.34 69.66a8 8 0 0 0 11.32-11.32l-16-16a8 8 0 0 0-11.32 11.32Zm0 116.68l-16 16a8 8 0 0 0 11.32 11.32l16-16a8 8 0 0 0-11.32-11.32M192 72a8 8 0 0 0 5.66-2.34l16-16a8 8 0 0 0-11.32-11.32l-16 16A8 8 0 0 0 192 72m5.66 114.34a8 8 0 0 0-11.32 11.32l16 16a8 8 0 0 0 11.32-11.32ZM48 128a8 8 0 0 0-8-8H16a8 8 0 0 0 0 16h24a8 8 0 0 0 8-8m80 80a8 8 0 0 0-8 8v24a8 8 0 0 0 16 0v-24a8 8 0 0 0-8-8m112-88h-24a8 8 0 0 0 0 16h24a8 8 0 0 0 0-16\"/></svg>",
73
+ trash: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m20 9l-1.995 11.346A2 2 0 0 1 16.035 22h-8.07a2 2 0 0 1-1.97-1.654L4 9m17-3h-5.625M3 6h5.625m0 0V4a2 2 0 0 1 2-2h2.75a2 2 0 0 1 2 2v2m-6.75 0h6.75\"/></svg>",
74
+ "value-help": "<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M13 11V12H6V11H13ZM14 10V3C14 2.44772 13.5523 2 13 2H6C5.44772 2 5 2.44772 5 3V10C5 10.5523 5.44772 11 6 11V12C4.96435 12 4.113 11.2128 4.01074 10.2041L4 10V3C4 1.89543 4.89543 1 6 1H13L13.2041 1.01074C14.2128 1.113 15 1.96435 15 3V10L14.9893 10.2041C14.8938 11.1457 14.1457 11.8938 13.2041 11.9893L13 12V11C13.5523 11 14 10.5523 14 10Z\" fill=\"currentColor\"/>\n<path d=\"M11 13V14H4V13H11Z\" fill=\"currentColor\"/>\n<path d=\"M11 13V14L11.2041 13.9893C11.8579 13.923 12.4185 13.542 12.732 13H11Z\" fill=\"currentColor\"/>\n<path d=\"M4 14V13C3.44772 13 3 12.5523 3 12V5V3.26756C2.4022 3.61337 2 4.25972 2 5V12L2.01074 12.2041C2.113 13.2128 2.96435 14 4 14Z\" fill=\"currentColor\"/>\n<path d=\"M14 4V5H4V4H14Z\" fill=\"currentColor\"/>\n</svg>\n",
75
+ warning: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m-8-80V80a8 8 0 0 1 16 0v56a8 8 0 0 1-16 0m20 36a12 12 0 1 1-12-12a12 12 0 0 1 12 12\"/></svg>"
76
+ };
77
+ const commonShortcuts = mergeVunorShortcuts$1([defineShortcuts$1({
78
+ "as-kbd": "inline-flex items-center justify-center min-w-[1.5em] h-[1.5em] px-$xs rounded-r0 layer-2 text-callout font-mono font-600 text-current/70 leading-none shrink-0",
79
+ "as-description": "text-callout text-current/60 m-0",
80
+ "as-overlay": "inner-loading rounded-r2 text-current-hl pointer-events-none",
81
+ "as-overlay-icon": "i-as-loading text-[3em]",
82
+ "as-close-btn": {
83
+ "": "inline-grid place-items-center size-fingertip-s p-0 border-0 bg-transparent text-current/80 cursor-pointer leading-none rounded-base flex-shrink-0 transition-colors duration-120 text-[1.25em]",
84
+ "hover:": "layer-2 text-current"
85
+ },
86
+ "as-dialog-close": "as-close-btn ml-auto"
87
+ })]);
88
+ //#endregion
89
+ //#region src/shortcuts/form/as-action.ts
90
+ const asActionShortcuts = defineShortcuts$1({
91
+ "as-action-field": { "[&>button]:": "as-submit-btn" },
92
+ "as-submit-btn": "scope-primary c8-filled btn self-end"
93
+ });
94
+ //#endregion
95
+ //#region src/shortcuts/form/as-array.ts
96
+ const asArrayShortcuts = defineShortcuts$1({
97
+ "as-array-add-row": "as-grid-item flex justify-start mt-$xs",
98
+ "as-array-add-btn": {
99
+ "": "inline-flex items-center gap-$xs h-fingertip-s px-$m border-1 border-dashed rounded-base bg-transparent text-current/60 cursor-pointer transition-all duration-120 disabled-soft",
100
+ "hover:not-disabled:": "border-current-hl text-current-hl bg-current-hl/10"
101
+ },
102
+ "as-array-items-chip": "inline-flex items-center h-[1.5em] px-$s rounded-base text-callout font-600 leading-none shrink-0 layer-2 text-current",
103
+ "as-array-error": "scope-error text-callout text-current-hl"
104
+ });
105
+ //#endregion
106
+ //#region src/shortcuts/form/as-checkbox-radio.ts
107
+ const asCheckboxRadioShortcuts = defineShortcuts$1({
108
+ "as-checkbox-field": {
109
+ "[&_label]:": "flex items-center gap-$s text-current cursor-pointer font-normal flex-1 min-w-0",
110
+ "[&_input[type=checkbox]]:": "scope-primary size-[1em] m-0 p-0 border-0 shadow-none bg-transparent [accent-color:rgb(var(--current-hl))] cursor-pointer"
111
+ },
112
+ "as-checkbox-row": "flex items-center gap-$s w-full",
113
+ "as-checkbox-indeterminate": "opacity-60",
114
+ "as-radio-group": {
115
+ "": "flex flex-col gap-$s",
116
+ "[&_label]:": "flex items-center gap-$s text-current cursor-pointer font-normal",
117
+ "[&_input[type=radio]]:": "scope-primary size-[1em] m-0 p-0 border-0 shadow-none bg-transparent [accent-color:rgb(var(--current-hl))] cursor-pointer"
118
+ }
119
+ });
120
+ //#endregion
121
+ //#region src/shortcuts/form/as-collapsible.ts
122
+ const asCollapsibleShortcuts = defineShortcuts$1({
123
+ "as-collapsible-section": "border-t-1 first:border-t-0 pt-$m [&:not(:has(+_.as-collapsible-section))]:(pb-$m border-b-1) [&>summary]:list-none [&>summary::-webkit-details-marker]:hidden",
124
+ "as-collapsible-island": "border-1 rounded-r2 p-$m [&>summary]:list-none [&>summary::-webkit-details-marker]:hidden",
125
+ "as-collapsible-island-even": "layer-0",
126
+ "as-collapsible-island-odd": "layer-1",
127
+ "as-collapsible-summary": "flex items-center gap-$m text-left cursor-pointer group",
128
+ "as-collapsible-header": "flex-1 flex flex-col gap-$xxs min-w-0",
129
+ "as-collapsible-title-row": "flex items-center gap-$s min-w-0",
130
+ "as-collapsible-title": "text-body-l font-600 m-0",
131
+ "as-collapsible-title-nested": "text-body font-600 m-0",
132
+ "as-collapsible-title-index": "text-current/60 font-400 font-mono normal-case",
133
+ "as-collapsible-description": "as-description",
134
+ "as-collapsible-chevron": "i-as-chevron-down w-[1.1em] h-[1.1em] shrink-0 text-current-muted group-hover:scope-primary group-hover:text-current-hl [transition:transform_150ms_ease]",
135
+ "as-collapsible-chevron-collapsed": "rotate--90",
136
+ "as-collapsible-body": "mt-$m as-form-grid",
137
+ "as-collapsible-error": "as-grid-item scope-error text-callout text-current-hl mb-$xs",
138
+ "as-collapsible-error-badge": "scope-error surface-500 inline-flex items-center justify-center min-w-[1.4em] h-[1.4em] px-$xxs rounded-r0 text-callout font-mono font-600 leading-none shrink-0"
139
+ });
140
+ //#endregion
141
+ //#region src/shortcuts/form/_shared.ts
142
+ const inputBase = "scope-primary layer-0 i8-bare h-fingertip-m px-$s w-full box-border";
143
+ //#endregion
144
+ //#region src/shortcuts/form/as-decimal-number.ts
145
+ /**
146
+ * Decimal + number default renderers — the "bank UX" shell. Both share
147
+ * the same merged-chrome family: ONE bordered container that paints the
148
+ * border, focus ring, hover, and error state. The inputs inside are
149
+ * seamless leaves with no chrome of their own.
150
+ *
151
+ * Inner inputs must override the descendant rules in `as-default-field`
152
+ * (which paint `inputBase` chrome on every nested `<input>` via a
153
+ * `.as-default-field :is(input:not(...))` selector, specificity 0,1,2).
154
+ * A bare per-input class shortcut (`as-decimal-integer`, specificity
155
+ * 0,1,0) cannot beat that on its own — so the reset properties below
156
+ * ship with UnoCSS `!` qualifiers (= !important) on border/outline/
157
+ * ring/bg/h/px to win the cascade regardless of selector weight.
158
+ *
159
+ * AsDecimal layout: `[ prefix? | integer | . | decimal | suffix? ]` —
160
+ * two inputs joined by a separator pill, plus optional leading and
161
+ * trailing adornment pills.
162
+ *
163
+ * AsNumber layout: `[ prefix? | value | suffix? ]` — single input with
164
+ * optional leading and trailing adornment pills.
165
+ *
166
+ * `AsInput` shares the same adornment pill classes (`as-prefix`,
167
+ * `as-suffix`) and the `as-input-shell` merged chrome when at least
168
+ * one adornment is present.
169
+ */
170
+ const innerInputReset = "!w-auto !bg-transparent !border-0 !outline-0 !ring-0 !shadow-none !h-full !px-0 !layer-0 font-mono text-scope-dark-0 dark:text-scope-light-0";
171
+ const shellBase = `flex w-full min-w-0 items-center gap-0 ${inputBase} px-$xs py-0`;
172
+ const adornmentBase = "text-current/60 select-none whitespace-nowrap";
173
+ const asDecimalNumberShortcuts = defineShortcuts$1({
174
+ "as-prefix": adornmentBase,
175
+ "as-suffix": adornmentBase,
176
+ "as-prefix-icon": "text-current/60 select-none shrink-0 text-[1.25em] inline-flex items-center",
177
+ "as-suffix-icon": "text-current/60 select-none shrink-0 text-[1.25em] inline-flex items-center",
178
+ "as-decimal": {
179
+ "": shellBase,
180
+ "hover:": "border-current/30",
181
+ "focus-within:": "current-border-hl outline i8-apply-outline",
182
+ "[&.error]:": "scope-error current-border-hl border-current",
183
+ "[&.error]:focus-within:": "scope-error current-border-hl border-current outline i8-apply-outline",
184
+ "[&.as-decimal-negative_.as-prefix]:": "text-current-hl",
185
+ "[&:has(:is(.as-prefix,.as-prefix-icon))_.as-decimal-integer]:": "!pl-$xs",
186
+ "[&:has(:is(.as-suffix,.as-suffix-icon))_.as-decimal-decimal]:": "!pr-$xs",
187
+ "[&:has(:is(.as-suffix,.as-suffix-icon)):not(:has(.as-decimal-decimal))_.as-decimal-integer]:": "!pr-$xs"
188
+ },
189
+ "as-decimal-integer": `${innerInputReset} flex-1 min-w-0 text-right disabled:!text-current/40 disabled:!cursor-not-allowed`,
190
+ "as-decimal-sep": "text-current/60 select-none px-0",
191
+ "as-decimal-decimal": `${innerInputReset} flex-none min-w-0 text-left disabled:!text-current/40 disabled:!cursor-not-allowed`,
192
+ "as-number": {
193
+ "": shellBase,
194
+ "hover:": "border-current/30",
195
+ "focus-within:": "current-border-hl outline i8-apply-outline",
196
+ "[&.error]:": "scope-error current-border-hl border-current",
197
+ "[&.error]:focus-within:": "scope-error current-border-hl border-current outline i8-apply-outline",
198
+ "[&:has(:is(.as-prefix,.as-prefix-icon))_.as-number-input]:": "!pl-$xs",
199
+ "[&:has(:is(.as-suffix,.as-suffix-icon))_.as-number-input]:": "!pr-$xs"
200
+ },
201
+ "as-number-input": `${innerInputReset} flex-1 min-w-0 text-right disabled:!text-current/40 disabled:!cursor-not-allowed`,
202
+ "as-input-shell": {
203
+ "": shellBase,
204
+ "hover:": "border-current/30",
205
+ "focus-within:": "current-border-hl outline i8-apply-outline",
206
+ "[&.error]:": "scope-error current-border-hl border-current",
207
+ "[&.error]:focus-within:": "scope-error current-border-hl border-current outline i8-apply-outline",
208
+ "[&_input,&_textarea]:": "!w-auto !bg-transparent !border-0 !outline-0 !ring-0 !shadow-none !h-full !px-0 !layer-0 flex-1 min-w-0",
209
+ "[&:has(:is(.as-prefix,.as-prefix-icon))_input,&:has(:is(.as-prefix,.as-prefix-icon))_textarea]:": "!pl-$xs",
210
+ "[&:has(:is(.as-suffix,.as-suffix-icon))_input,&:has(:is(.as-suffix,.as-suffix-icon))_textarea]:": "!pr-$xs"
211
+ }
212
+ });
213
+ //#endregion
214
+ //#region src/shortcuts/form/as-dropdown.ts
215
+ const asDropdownShortcuts = defineShortcuts$1({
216
+ "as-dropdown": "relative inline-flex items-center",
217
+ "as-dropdown-anchor": "relative",
218
+ "as-dropdown-trigger": {
219
+ "": "inline-flex items-center gap-$xs h-[1.5em] px-$s border-1 bg-transparent text-callout text-current/60 rounded-base cursor-pointer leading-none transition-all duration-120 disabled-soft",
220
+ "hover:not-disabled:": "border-current-hl text-current-hl"
221
+ },
222
+ "as-dropdown-menu": "scope-primary popup-card layer-1 absolute top-full left-0 z-[50] min-w-[10em] mt-$xs py-$xs",
223
+ "as-dropdown-item": {
224
+ "": "block w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer",
225
+ "hover:": "layer-3 text-current-hl"
226
+ },
227
+ "as-dropdown-item--active": "bg-current-hl/10 text-current-hl font-500",
228
+ "as-variant-trigger": {
229
+ "": "inline-flex items-center h-[1.5em] px-$s text-callout font-mono leading-none border-1 layer-0 text-current/60 rounded-base cursor-pointer transition-all duration-120 disabled-soft flex-shrink-0",
230
+ "hover:not-disabled:": "scope-primary bg-current-hl/10 text-current-hl",
231
+ "[details:not([open])_&]:": "hidden"
232
+ }
233
+ });
234
+ //#endregion
235
+ //#region src/shortcuts/form/as-field.ts
236
+ const clearBtnChrome = "border-1 layer-0 text-current/60 rounded-base cursor-pointer transition-all duration-120 disabled-soft";
237
+ const clearBtnHover = "scope-error bg-current-hl/10 text-current-hl";
238
+ const asFieldShortcuts = defineShortcuts$1({
239
+ "as-default-field": {
240
+ "": "as-grid-item flex flex-col gap-$xs relative",
241
+ "[&_label]:": "font-600",
242
+ "[&.required_.as-field-label]:after:": "content-[\"_*\"] scope-error text-current-hl font-700 ml-[0.1em]",
243
+ "[&.error_.as-error-slot]:": "scope-error text-current-hl",
244
+ "[&_:is(input:not([type=checkbox]):not([type=radio]),select,textarea)]:": inputBase,
245
+ "[&_:is(input:not([type=checkbox]):not([type=radio]),select,textarea):hover]:": "border-current/30",
246
+ "[&_:is(input:not([type=checkbox]):not([type=radio]),select,textarea):focus]:": "current-border-hl outline i8-apply-outline",
247
+ "[&_:is(input:not([type=checkbox]):not([type=radio]),select,textarea):disabled]:": "layer-2 text-current/40 cursor-not-allowed",
248
+ "[&_:is(input:not([type=checkbox]):not([type=radio]),textarea):read-only]:": "layer-2",
249
+ "[&_textarea]:": "resize-y min-h-[80px] py-$s leading-[1.45]",
250
+ "[&_input[type=number]]:": "text-right",
251
+ "[&_select]:": "pr-[1.75em] cursor-pointer appearance-none [color-scheme:light_dark] whitespace-nowrap !bg-current",
252
+ "[&.error_:is(input:not([type=checkbox]):not([type=radio]),select,textarea)]:": "scope-error current-border-hl border-current",
253
+ "[&.error_:is(input:not([type=checkbox]):not([type=radio]),select,textarea):hover]:": "scope-error current-border-hl border-current",
254
+ "[&.error_:is(input:not([type=checkbox]):not([type=radio]),select,textarea):focus]:": "scope-error current-border-hl border-current outline i8-apply-outline"
255
+ },
256
+ "as-select-wrap": "relative block w-full",
257
+ "as-select-caret": "absolute right-$s top-1/2 -translate-y-1/2 text-current/60 text-[1em] pointer-events-none",
258
+ "as-field-label": "font-600",
259
+ "as-field-header-row": "flex items-center gap-$xs min-h-[1.5em]",
260
+ "as-field-header-content": "flex flex-wrap items-center gap-x-$xs gap-y-[0.15em] flex-1 min-w-0",
261
+ "as-field-header-actions": "flex items-center gap-$xs flex-shrink-0",
262
+ "as-field-input-row": "flex items-center gap-$xs [&>input]:flex-1 [&>select]:flex-1 [&>textarea]:flex-1",
263
+ "as-error-slot": "leading-[1] text-callout text-current/60",
264
+ "as-field-description": "as-description -mt-[0.2em]",
265
+ "as-field-label-index": "text-current/60 font-400 font-mono normal-case",
266
+ "as-optional-clear": {
267
+ "": `inline-flex items-center h-[1.5em] px-$s text-callout leading-none ${clearBtnChrome}`,
268
+ "hover:not-disabled:": clearBtnHover
269
+ },
270
+ "as-field-remove-btn": {
271
+ "": `inline-grid place-items-center h-[1.5em] w-[1.5em] text-callout ${clearBtnChrome}`,
272
+ "hover:not-disabled:": clearBtnHover
273
+ },
274
+ "as-field-remove-btn-icon": "i-as-close text-[1em]"
275
+ });
276
+ //#endregion
277
+ //#region src/shortcuts/form/as-form.ts
278
+ const asFormShortcuts = defineShortcuts$1({
279
+ "as-form": "relative flex flex-col gap-$m",
280
+ "as-form-title": "text-[1.54em] font-700 tracking-[-0.02em]",
281
+ "as-form-description": "as-description",
282
+ "as-form-error": "scope-error surface-50 border-1 rounded-r2 px-$m py-$s mb-$s text-callout text-current-hl flex items-center gap-$s",
283
+ "as-form-error-message": "flex-1 min-w-0",
284
+ "as-form-error-dismiss": "c8-light inline-flex items-center h-fingertip-s px-$s rounded-r1 cursor-pointer text-callout font-600",
285
+ "as-form-overlay": "as-overlay",
286
+ "as-form-overlay-icon": "as-overlay-icon"
287
+ });
288
+ //#endregion
289
+ //#region src/shortcuts/form/as-form-grid.ts
290
+ /**
291
+ * 12-col grid scaffold for form children. Every struct/array/tuple body wraps
292
+ * its iteration in `as-form-grid`; every field's outer wrapper composes
293
+ * `as-grid-item` (default `col-span-full row-span-1` footprint, identical
294
+ * effect to today's stacked layout). Authors override the footprint via
295
+ * `@ui.form.grid.colSpan` / `@ui.form.grid.rowSpan`; AsField stamps the
296
+ * resolved classes (`col-span-N`, `row-span-N`, plus
297
+ * `as-narrow:col-span-N` / `as-narrow:row-span-N` for the narrow track)
298
+ * onto each field's outer wrapper.
299
+ *
300
+ * `[container-type:inline-size]` + `[container-name:as-grid]` register a
301
+ * named CSS containment context so the narrow variant `as-narrow:` (defined
302
+ * in the form-grid preset) resolves against this grid's inline size — not
303
+ * the viewport. Nested grids re-evaluate independently, so an inner grid
304
+ * inside a `colSpan "6"` slot stacks automatically when the outer hits
305
+ * narrow.
306
+ */
307
+ const asFormGridShortcuts = defineShortcuts$1({
308
+ "as-form-grid": "grid grid-cols-12 gap-$m [container-type:inline-size] [container-name:as-grid]",
309
+ "as-grid-item": "col-span-full row-span-1"
310
+ });
311
+ //#endregion
312
+ //#region src/shortcuts/form/as-no-data.ts
313
+ const asNoDataShortcuts = defineShortcuts$1({
314
+ "as-no-data": {
315
+ "": "flex items-center justify-center gap-$s h-fingertip-m px-$m w-full border-1 border-dashed rounded-base bg-transparent text-current/60 text-callout cursor-pointer transition-all duration-140",
316
+ "hover:": "border-current-hl text-current-hl bg-current-hl/10"
317
+ },
318
+ "as-no-data-textarea": {
319
+ "": "flex items-center justify-center gap-$s min-h-[5rem] py-$s px-$m w-full border-1 border-dashed rounded-base bg-transparent text-current/60 text-callout cursor-pointer transition-all duration-140",
320
+ "hover:": "border-current-hl text-current-hl bg-current-hl/10"
321
+ },
322
+ "as-no-data-text": "font-mono text-callout tracking-wide min-w-[8em]",
323
+ "as-no-data-icon": "inline-flex items-center justify-center leading-none flex-shrink-0 [&>span]:text-[1.4em]"
324
+ });
325
+ //#endregion
326
+ //#region src/shortcuts/form/as-object.ts
327
+ const asObjectShortcuts = defineShortcuts$1({
328
+ "as-object-empty": "layer-0 border-1 border-dashed rounded-r2 p-$m flex flex-col items-start gap-$s",
329
+ "as-object-empty-add": "c8-chrome inline-flex items-center gap-$xs h-fingertip-s px-$m rounded-base font-600 text-callout shrink-0",
330
+ "as-object-empty-add-icon": "text-[1.2em] leading-none"
331
+ });
332
+ //#endregion
333
+ //#region src/shortcuts/form/as-ref.ts
334
+ const asRefShortcuts = defineShortcuts$1({
335
+ "as-ref-root": "block w-full",
336
+ "as-ref-anchor": "flex items-center relative [&>input]:flex-1",
337
+ "as-ref-input": inputBase,
338
+ "as-ref-clear": {
339
+ "": "absolute right-$s top-1/2 -translate-y-1/2 p-0 border-0 bg-transparent text-current/50 cursor-pointer leading-none",
340
+ "hover:": "scope-error text-current-hl"
341
+ },
342
+ "as-ref-loading": "flex items-center justify-center h-fingertip-m w-full box-border border-1 layer-0 rounded-base",
343
+ "as-ref-spinner": "i-as-loading text-current-hl text-[1.25em] opacity-70",
344
+ "as-ref-content": "scope-primary popup-card layer-1 z-[50] w-[var(--reka-combobox-trigger-width)]",
345
+ "as-ref-viewport": "max-h-[15em] overflow-y-auto py-$xs",
346
+ "as-ref-item": {
347
+ "": "flex items-baseline gap-$m px-$m py-$s cursor-pointer",
348
+ "data-[highlighted]:": "layer-3",
349
+ "data-[state=checked]:": "bg-current-hl/10 text-current-hl"
350
+ },
351
+ "as-ref-item-id": "font-mono text-callout text-current/50 flex-shrink-0 min-w-[2em] text-right",
352
+ "as-ref-item-label": "text-current flex-1",
353
+ "as-ref-item-description": "as-description",
354
+ "as-ref-status": "flex items-center justify-center px-$m py-$m text-current/50"
355
+ });
356
+ //#endregion
357
+ //#region src/shortcuts/form/index.ts
358
+ const formShortcuts = mergeVunorShortcuts$1([
359
+ asFormShortcuts,
360
+ asFormGridShortcuts,
361
+ asFieldShortcuts,
362
+ asDecimalNumberShortcuts,
363
+ asCheckboxRadioShortcuts,
364
+ asCollapsibleShortcuts,
365
+ asObjectShortcuts,
366
+ asArrayShortcuts,
367
+ asNoDataShortcuts,
368
+ asDropdownShortcuts,
369
+ asRefShortcuts,
370
+ asActionShortcuts
371
+ ]);
372
+ //#endregion
373
+ //#region src/shortcuts/table/_shared.ts
374
+ const dialogOverlay = "fixed inset-0 bg-black/30 z-[100]";
375
+ const dialogBase = "layer-0 fixed z-[101] flex flex-col outline-none inset-0 size-full sm:inset-auto sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-r3 sm:shadow-popup sm:border-1";
376
+ const smallInputBase = "scope-primary layer-0 i8-bare flex-1 h-fingertip-s px-$s min-w-[8em]";
377
+ const chipBase = "inline-flex items-center px-$s py-[0.15em] rounded-r0 text-callout whitespace-nowrap";
378
+ const searchWrap = "relative flex-1 min-w-0 flex items-stretch";
379
+ const searchIcon = "absolute left-$s top-1/2 -translate-y-1/2 text-current/50 pointer-events-none inline-flex text-body";
380
+ const menuItemIconHl = "[&_.as-column-menu-item-icon]:text-current-hl";
381
+ const dialogCancelBtn = "scope-neutral c8-chrome btn";
382
+ const dialogConfirmBtn = "scope-primary c8-filled btn";
383
+ /**
384
+ * Confirm-button intent variant block shared by `as-confirm-dialog-confirm-*`
385
+ * and `as-action-form-submit-*`. The caller maps `action.intent → scope` via
386
+ * `intentToScope` (runtime); this returns the matching CSS-side overrides.
387
+ *
388
+ * Only retunes scope; never overrides text color (`c8-filled` derives the
389
+ * contrasting fg — red text on red bg if we touch it). `primary`/`secondary`
390
+ * are bare scope tokens because the base shortcut already paints `c8-filled`
391
+ * and they don't need the `!`-flagged override.
392
+ */
393
+ function buildDialogConfirmVariants(prefix) {
394
+ const base = `[&.${prefix}]:`;
395
+ return {
396
+ [`${prefix}-good`]: { [base]: "!scope-good" },
397
+ [`${prefix}-error`]: { [base]: "!scope-error" },
398
+ [`${prefix}-warn`]: { [base]: "!scope-warn" },
399
+ [`${prefix}-primary`]: "scope-primary",
400
+ [`${prefix}-secondary`]: "scope-secondary",
401
+ [`${prefix}-neutral`]: { [base]: "!scope-neutral" }
402
+ };
403
+ }
404
+ /**
405
+ * Build the `as-{prefix}-intent-*` shortcut variants used by `<AsRowActions>`
406
+ * and `<AsTableActions>`. Both render a base button + dropdown-menu items;
407
+ * intent affects them identically — only the class prefix differs. Returns
408
+ * the map keys ready to spread into `defineShortcuts({ ... })`.
409
+ *
410
+ * Filled-button branch (`[&.{prefix}-btn]:`) only retunes scope; `c8-filled`
411
+ * derives the contrasting foreground (NEVER override text color or the
412
+ * contrast vanishes — red text on red bg). Menu-item branch is neutral at
413
+ * rest, scope-tinted only on hover/highlighted; only the icon picks up
414
+ * `text-current-hl`. `:is([data-highlighted=''])` wraps the attribute
415
+ * selector to keep nested `[]` parseable inside arbitrary-variant brackets
416
+ * (CLAUDE.md documents the silent-fail issue with raw nested brackets).
417
+ *
418
+ * `intent: "warning"` is forward-compat — pending the field landing in
419
+ * `TDbActionIntent` in `@atscript/db`. Wired now so the moment db-client
420
+ * ships it, controllers can opt in without UI changes.
421
+ */
422
+ function buildActionsIntentVariants(prefix) {
423
+ const btn = `[&.${prefix}-btn]:`;
424
+ const item = `.${prefix}-menu-item`;
425
+ const itemIcon = `${item}-icon`;
426
+ function tinted(scope) {
427
+ return {
428
+ [btn]: `!scope-${scope}`,
429
+ [`[&${item}]:hover:`]: `!scope-${scope} !bg-current-hl/10`,
430
+ [`[&${item}]:data-[highlighted]:`]: `!scope-${scope} !bg-current-hl/10`,
431
+ [`[&${item}:hover_${itemIcon}]:`]: "!text-current-hl",
432
+ [`[&${item}:is([data-highlighted=''])_${itemIcon}]:`]: "!text-current-hl"
433
+ };
434
+ }
435
+ return {
436
+ [`${prefix}-intent-positive`]: tinted("good"),
437
+ [`${prefix}-intent-negative`]: tinted("error"),
438
+ [`${prefix}-intent-warning`]: tinted("warn"),
439
+ [`${prefix}-intent-primary`]: "scope-primary",
440
+ [`${prefix}-intent-secondary`]: "scope-secondary"
441
+ };
442
+ }
443
+ //#endregion
444
+ //#region src/shortcuts/table/as-action-form.ts
445
+ const asActionFormShortcuts = defineShortcuts$1({
446
+ "as-action-form-overlay": dialogOverlay,
447
+ "as-action-form-content": `${dialogBase} sm:!h-auto sm:w-[min(560px,92vw)] sm:max-h-[90vh]`,
448
+ "as-action-form-header": "relative flex items-center gap-$m px-$l py-$m border-b-1 flex-shrink-0",
449
+ "as-action-form-title": "m-0 text-body-l font-600 whitespace-nowrap tracking-[-0.01em] flex-shrink-0",
450
+ "as-action-form-ids": "flex items-center gap-$xs flex-1 min-w-0 overflow-hidden",
451
+ "as-action-form-ids-measure": "absolute top-0 left-0 invisible pointer-events-none flex items-center gap-$xs whitespace-nowrap",
452
+ "as-action-form-id": "inline-flex items-center px-$xs h-[1.5em] rounded-base layer-2 text-callout font-500 whitespace-nowrap",
453
+ "as-action-form-id-more": "inline-flex items-center px-$xs h-[1.5em] rounded-base layer-2 text-callout text-current/70 italic whitespace-nowrap",
454
+ "as-action-form-close": "as-dialog-close",
455
+ "as-action-form-body": "flex-1 min-h-0 overflow-y-auto px-$l py-$m flex flex-col gap-$m",
456
+ "as-action-form-description": "m-0 text-body text-current/80 whitespace-pre-line",
457
+ "as-action-form-status": "m-0 text-body text-current/70",
458
+ "as-action-form-error": "m-0 text-body scope-error text-current-hl",
459
+ "as-action-form-footer": "flex items-center justify-end gap-$s px-$l py-$m border-t-1 flex-shrink-0",
460
+ "as-action-form-cancel": dialogCancelBtn,
461
+ "as-action-form-submit": dialogConfirmBtn,
462
+ ...buildDialogConfirmVariants("as-action-form-submit")
463
+ });
464
+ //#endregion
465
+ //#region src/shortcuts/table/as-cell.ts
466
+ const asCellShortcuts = defineShortcuts$1({
467
+ "as-cell-decimal": "text-right tabular-nums font-mono",
468
+ "as-cell-chips": { "": "flex flex-nowrap gap-$xs items-center max-w-full overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:h-0 [&::-webkit-scrollbar]:w-0" },
469
+ "as-cell-chip": "as-tag-chip flex-shrink-0",
470
+ "as-cell-json-trigger": {
471
+ "": "inline-flex items-center gap-$xs cursor-pointer text-current/70 font-mono text-callout border-0 bg-transparent p-0 outline-none",
472
+ "hover:": "text-current-hl",
473
+ "focus-visible:": "current-outline-hl outline i8-apply-outline"
474
+ },
475
+ "as-cell-json-trigger-glyph": "font-700",
476
+ "as-cell-json-trigger-count": "text-current/50",
477
+ "as-cell-json-popup": "scope-primary popup-card max-w-[40em] max-h-[24em] overflow-auto p-$m z-[100]",
478
+ "as-cell-json-pre": "font-mono text-callout whitespace-pre m-0"
479
+ });
480
+ //#endregion
481
+ //#region src/shortcuts/table/as-column-menu.ts
482
+ const asColumnMenuShortcuts = defineShortcuts$1({
483
+ "as-column-menu-content": "scope-primary popup-card whitespace-nowrap py-$xs min-w-[14em]",
484
+ "as-column-menu-label": "px-$m pt-$s pb-$xs text-callout font-mono font-600 tracking-[0.14em] uppercase text-current/50",
485
+ "as-column-menu-item": {
486
+ "": "flex items-center gap-$s w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer outline-none",
487
+ "hover:": "layer-3",
488
+ "data-[highlighted]:": "layer-3"
489
+ },
490
+ "as-column-menu-item-icon": "inline-flex text-[1.25em] text-current/60 shrink-0",
491
+ "as-column-menu-item-label": "flex-1 min-w-0 overflow-hidden text-ellipsis",
492
+ "as-column-menu-item-hint": "inline-flex items-center justify-center min-w-[1.5em] h-[1.5em] px-$xs rounded-r0 layer-2 text-callout font-mono font-600 text-current/70 leading-none shrink-0",
493
+ "as-column-menu-item-badge": "inline-flex items-center justify-center min-w-[1.5em] h-[1.5em] px-$xs rounded-r0 bg-current-hl/10 text-current-hl text-callout font-mono font-600 leading-none shrink-0",
494
+ "as-column-menu-item-active": `bg-current-hl/10 text-current-hl font-500 ${menuItemIconHl}`,
495
+ "as-column-menu-item-danger": {
496
+ "": `scope-error text-current-hl ${menuItemIconHl}`,
497
+ "hover:": "bg-current-hl/10",
498
+ "data-[highlighted]:": "bg-current-hl/10"
499
+ },
500
+ "as-column-menu-separator": "h-0 my-$xs border-t-1"
501
+ });
502
+ //#endregion
503
+ //#region src/shortcuts/table/as-config-dialog.ts
504
+ const asConfigDialogShortcuts = defineShortcuts$1({
505
+ "as-config-dialog-overlay": dialogOverlay,
506
+ "as-config-dialog-content": `${dialogBase} sm:w-[640px] sm:max-w-[92vw] sm:h-[clamp(500px,70vh,600px)]`,
507
+ "as-config-dialog-header": "flex items-center gap-$m px-$l py-$m border-b-1 flex-shrink-0",
508
+ "as-config-dialog-title": "m-0 text-body-l font-600 whitespace-nowrap tracking-[-0.01em]",
509
+ "as-config-dialog-close": "as-dialog-close",
510
+ "as-config-dialog-tabs": "flex flex-col flex-1 min-h-0",
511
+ "as-config-dialog-footer": "flex items-center gap-$s px-$l py-$m border-t-1 flex-shrink-0"
512
+ });
513
+ //#endregion
514
+ //#region src/shortcuts/table/as-config-tab.ts
515
+ const asConfigTabShortcuts = defineShortcuts$1({
516
+ "as-config-tabs-list": "flex gap-0 flex-shrink-0 border-b-1 px-$l",
517
+ "as-config-tab-trigger": {
518
+ "": "scope-primary relative inline-flex items-center gap-$s px-$m py-$s border-0 border-b-2 border-b-transparent bg-transparent font-500 text-current/60 cursor-pointer whitespace-nowrap outline-none transition-all duration-120",
519
+ "hover:": "text-current",
520
+ "data-[state=active]:": "text-current [border-bottom-color:rgb(var(--current-hl))] font-600"
521
+ },
522
+ "as-config-tab-icon": "inline-block size-[1em] text-[1.25em] shrink-0",
523
+ "as-config-tab-summary": "flex flex-col gap-[0.15em] px-$l py-$s border-t-1 flex-shrink-0",
524
+ "as-config-tab-summary-count": "text-callout text-current font-500",
525
+ "as-config-tab-summary-count-num": "font-600",
526
+ "as-config-tab-summary-hint": "as-description",
527
+ "as-config-tab-content": "flex flex-col flex-1 min-h-0 data-[state=inactive]:hidden",
528
+ "as-config-tab-count": { "": "inline-flex items-center justify-center min-w-[18px] h-[18px] px-$xs rounded-full layer-2 text-callout text-current/70 font-500 leading-none" },
529
+ "as-config-tab-count-active": "bg-current-hl/10 text-current-hl",
530
+ "as-config-field-count": { "": "scope-primary inline-flex items-center justify-center min-w-[18px] h-[18px] px-$xs rounded-full bg-current-hl/10 text-current-hl text-callout font-500 leading-none flex-shrink-0" },
531
+ "as-config-field-label-wrap": "flex items-center gap-$xs flex-1 min-w-0",
532
+ "as-config-field-label-text": "overflow-hidden text-ellipsis whitespace-nowrap min-w-0"
533
+ });
534
+ //#endregion
535
+ //#region src/shortcuts/table/as-confirm-dialog.ts
536
+ /**
537
+ * `<AsConfirmDialog>` Tier-2 default. Replaces `window.confirm()` for action
538
+ * prompts. Compact dialog (no full-screen mobile takeover — confirm prompts
539
+ * are short and read better as a centered card on every viewport).
540
+ *
541
+ * Confirm button intent variants mirror `as-table-actions-intent-*`: the
542
+ * caller passes `intent` from the action; this shortcut surface flips the
543
+ * scope so `negative → scope-error`, `positive → scope-good`, etc. without
544
+ * the consumer touching colors directly.
545
+ */
546
+ const asConfirmDialogShortcuts = defineShortcuts$1({
547
+ "as-confirm-dialog-overlay": dialogOverlay,
548
+ "as-confirm-dialog-content": `${dialogBase} !inset-auto !top-1/2 !left-1/2 !-translate-x-1/2 !-translate-y-1/2 !size-auto !rounded-r3 !shadow-popup !border-1 min-w-0 sm:min-w-[320px] max-w-[min(520px,92vw)]`,
549
+ "as-confirm-dialog-body-wrap": "flex flex-col gap-$m py-$m px-$l",
550
+ "as-confirm-dialog-title": "!m-0 !p-0 text-body-l font-600",
551
+ "as-confirm-dialog-body": "!m-0 !p-0 text-body text-current/80 whitespace-pre-line",
552
+ "as-confirm-dialog-footer": "flex items-center justify-end gap-$s px-$l py-$m border-t-1",
553
+ "as-confirm-dialog-cancel": dialogCancelBtn,
554
+ "as-confirm-dialog-confirm": dialogConfirmBtn,
555
+ ...buildDialogConfirmVariants("as-confirm-dialog-confirm")
556
+ });
557
+ //#endregion
558
+ //#region src/shortcuts/table/as-filter-dialog.ts
559
+ const asFilterDialogShortcuts = defineShortcuts$1({
560
+ "as-filter-dialog-overlay": dialogOverlay,
561
+ "as-filter-dialog-content": `${dialogBase} sm:w-[560px] sm:max-w-[92vw] sm:h-[clamp(500px,70vh,600px)]`,
562
+ "as-filter-dialog-has-value-help": "sm:w-[640px]",
563
+ "as-filter-dialog-header": "flex items-center justify-between gap-$m px-$l py-$m border-b-1",
564
+ "as-filter-dialog-title": "m-0 text-body-l font-600 tracking-[-0.01em] flex items-center gap-$s",
565
+ "as-filter-dialog-title-label": "text-current/60 font-500",
566
+ "as-filter-dialog-title-value": "text-current font-600",
567
+ "as-filter-dialog-close": "as-close-btn",
568
+ "as-filter-dialog-body": "px-$l py-$m overflow-y-auto flex-1 flex flex-col gap-$m",
569
+ "as-filter-dialog-tabs": "flex flex-col flex-1 min-h-0",
570
+ "as-filter-dialog-tab-content": "flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden",
571
+ "as-filter-dialog-tab-conditions": "px-$l py-$m overflow-y-auto flex-col gap-$m",
572
+ "as-filter-dialog-chips-bar": "layer-1 flex flex-col gap-$s px-$l py-$m border-t-1 flex-shrink-0 max-h-[10em] overflow-y-auto",
573
+ "as-filter-dialog-chips-header": "flex items-center justify-between text-callout text-current/60",
574
+ "as-filter-dialog-chips-count": "text-current font-600",
575
+ "as-filter-dialog-clear-all": {
576
+ "": "border-0 bg-transparent text-callout font-500 text-current/70 cursor-pointer p-0 whitespace-nowrap",
577
+ "hover:": "underline text-current"
578
+ },
579
+ "as-filter-dialog-chips": "flex flex-wrap gap-$xs",
580
+ "as-filter-dialog-chip": `${chipBase} gap-$xs bg-current-hl/10 border-1 border-current-hl/40 text-current-hl`,
581
+ "as-filter-dialog-chips-more": `${chipBase} text-current/70 font-500 italic`,
582
+ "as-filter-dialog-chip-remove": {
583
+ "": "inline-grid place-items-center size-fingertip-xs cursor-pointer opacity-70 leading-none border-0 bg-transparent text-inherit text-body",
584
+ "hover:": "opacity-100"
585
+ },
586
+ "as-filter-value-help": "flex flex-col flex-1 min-h-0 mx-$l my-$m border-1 rounded-r2 overflow-hidden",
587
+ "as-filter-value-help-toolbar": "layer-1 flex items-center gap-$s px-$m py-$s border-b-1 flex-shrink-0",
588
+ "as-filter-value-help-filters": "layer-1 flex items-center flex-wrap gap-$xs px-$m py-$s border-b-1 flex-shrink-0 empty:hidden",
589
+ "as-filter-value-help-search-wrap": searchWrap,
590
+ "as-filter-value-help-search-icon": searchIcon,
591
+ "as-filter-value-help-search": `${smallInputBase} pl-[2em]`,
592
+ "as-filter-value-help-count": "inline-flex items-center gap-$s ml-auto text-callout text-current/50 whitespace-nowrap flex-shrink-0",
593
+ "as-filter-value-help-filters-toggle": {
594
+ "": "inline-grid place-items-center size-fingertip-s border-1 rounded-base layer-0 text-current/70 cursor-pointer leading-none transition-colors duration-120",
595
+ "hover:": "layer-2 text-current"
596
+ },
597
+ "as-filter-value-help-filters-toggle-active": "bg-current-hl/10 border-current-hl text-current-hl",
598
+ "as-filter-value-help-table": "flex flex-col flex-1 min-h-0 overflow-hidden",
599
+ "as-filter-condition-row": "grid grid-cols-[150px_1fr_28px] gap-$s items-center",
600
+ "as-filter-condition-select": "scope-primary layer-0 i8-bare h-fingertip-m px-$s pr-[1.75em] min-w-0 cursor-pointer appearance-none",
601
+ "as-filter-condition-remove": {
602
+ "": "inline-grid place-items-center size-fingertip-xs border-0 bg-transparent text-current/70 cursor-pointer rounded-base leading-none flex-shrink-0 transition-colors duration-120 text-[1em]",
603
+ "hover:": "scope-error layer-2 text-current-hl"
604
+ },
605
+ "as-filter-add-condition": {
606
+ "": "py-$xs px-0 border-0 bg-transparent text-current-hl cursor-pointer text-left",
607
+ "hover:": "underline"
608
+ },
609
+ "as-filter-input": "scope-primary layer-0 i8-bare flex-1 h-fingertip-m px-$s min-w-0",
610
+ "as-filter-input-disabled": "flex-1 h-fingertip-m layer-1 rounded-base border-1 min-w-0",
611
+ "as-filter-select": "cursor-pointer",
612
+ "as-filter-input-range": "flex items-center gap-$xs flex-1",
613
+ "as-filter-input-range-sep": "text-current/50 flex-shrink-0",
614
+ "as-filter-shortcuts": "flex flex-wrap items-center gap-$xs pt-$xs border-t-1",
615
+ "as-filter-shortcuts-label": "text-callout text-current/50 flex-shrink-0",
616
+ "as-filter-shortcut-btn": {
617
+ "": "px-$s py-[0.15em] border-1 rounded-base layer-2 text-callout text-current/70 cursor-pointer whitespace-nowrap transition-all duration-120",
618
+ "hover:": "border-current-hl text-current-hl bg-current-hl/10"
619
+ },
620
+ "as-filter-dialog-footer": "flex items-center gap-$s px-$l py-$m border-t-1",
621
+ "as-filter-dialog-footer-right": "flex gap-$s ml-auto",
622
+ "as-filter-btn": "scope-neutral c8-chrome btn font-600",
623
+ "as-filter-btn-apply": "scope-primary c8-filled btn",
624
+ "as-filter-btn-clear": {
625
+ "": "scope-error inline-flex items-center h-fingertip-m px-$s border-0 bg-transparent text-callout font-500 text-current-hl cursor-pointer",
626
+ "hover:": "underline"
627
+ },
628
+ "as-filter-btn-ghost": {
629
+ "": "inline-flex items-center h-fingertip-m px-$s border-0 bg-transparent text-callout text-current/70 font-500 cursor-pointer rounded-base transition-colors duration-120",
630
+ "hover:": "layer-2 text-current"
631
+ }
632
+ });
633
+ //#endregion
634
+ //#region src/shortcuts/table/as-filter-field.ts
635
+ const asFilterFieldShortcuts = defineShortcuts$1({
636
+ "as-filter-field": {
637
+ "": "scope-primary inline-flex items-stretch h-fingertip-m border-1 rounded-base layer-0 current-outline-hl min-w-[12em] max-w-[24em] flex-shrink-0 overflow-hidden",
638
+ "hover:": "border-current-hover",
639
+ "focus-within:": "current-border-hl outline i8-apply-outline",
640
+ "aria-disabled:": "pointer-events-none cursor-wait"
641
+ },
642
+ "as-filter-field-loading": "flex items-center justify-center flex-1 min-w-0 h-full text-current-hl text-[1.25em] opacity-70",
643
+ "as-filter-field-loading-icon": "i-as-loading",
644
+ "as-filter-field-label": {
645
+ "": "inline-flex items-center px-$s layer-2 text-current/80 text-callout font-500 border-r-1 whitespace-nowrap flex-shrink-0 cursor-pointer transition-colors duration-120",
646
+ "[.as-filter-field:focus-within_&]:": "bg-current-hl/10 text-current-hl font-600"
647
+ },
648
+ "as-filter-field-body": "flex items-stretch flex-1 min-w-0",
649
+ "as-filter-field-input": "flex items-stretch flex-1 min-w-0 h-full cursor-text",
650
+ "as-filter-field-chips": "flex items-center gap-$xs min-w-0 h-full px-$xs flex-nowrap overflow-x-auto overflow-y-hidden select-none [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
651
+ "as-filter-field-chip": "inline-flex items-center gap-[0.15em] h-[1.5em] px-[0.2em] pl-$xs bg-current-hl/10 border-1 border-current-hl/40 rounded-r0 text-callout text-current-hl whitespace-nowrap flex-shrink-0",
652
+ "as-filter-field-chip-remove": {
653
+ "": "cursor-pointer opacity-70 size-fingertip-xs inline-grid place-items-center text-callout leading-none",
654
+ "hover:": "opacity-100"
655
+ },
656
+ "as-filter-field-search": "border-0 outline-none flex-1 min-w-[64px] p-0 m-0 bg-transparent placeholder:text-current/50",
657
+ "as-filter-field-f4": {
658
+ "": "inline-grid place-items-center w-fingertip-s border-0 border-l-1 bg-transparent text-current/70 cursor-pointer flex-shrink-0 transition-colors duration-120 text-[1.25em] leading-none",
659
+ "hover:": "layer-2 text-current-hl",
660
+ "[.as-filter-field:focus-within_&]:": "text-current-hl"
661
+ },
662
+ "as-filter-field-dropdown": "scope-primary popup-card min-w-[20em] max-w-[36em] flex flex-col outline-none w-[max(var(--reka-popper-anchor-width,320px),320px)]",
663
+ "as-filter-field-dropdown-body": "relative flex flex-col min-w-0 min-h-[12em]",
664
+ "as-filter-field-dropdown-footer": {
665
+ "": "flex gap-$s px-$s py-$xs border-t-1 justify-end",
666
+ "[&_button]:": "inline-flex items-center gap-$xs px-$s py-$xs border-0 bg-transparent text-callout text-current-hl cursor-pointer",
667
+ "[&_button:hover]:": "[&_:not(.as-kbd)]:underline"
668
+ }
669
+ });
670
+ //#endregion
671
+ //#region src/shortcuts/table/as-fpill.ts
672
+ const asFpillShortcuts = defineShortcuts$1({
673
+ "as-fpill": {
674
+ "": "scope-primary inline-flex items-stretch h-fingertip-m border-1 rounded-base layer-0 current-outline-hl flex-shrink-0 max-w-[24em] min-w-0 overflow-hidden",
675
+ "hover:": "border-current-hover",
676
+ "focus-within:": "current-border-hl outline i8-apply-outline"
677
+ },
678
+ "as-fpill-active": "border-current-hl",
679
+ "as-fpill-label": "inline-flex items-center px-$s layer-2 text-current/80 text-callout font-500 border-r-1 whitespace-nowrap flex-shrink-0",
680
+ "as-fpill-label-active": "bg-current-hl/10 text-current-hl",
681
+ "as-fpill-body": "flex items-stretch flex-1 min-w-[8em] cursor-text",
682
+ "as-fpill-chips": "flex items-center gap-$xs px-$xs min-w-0 h-full flex-nowrap overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
683
+ "as-fpill-input": "flex-1 min-w-[64px] border-0 bg-transparent outline-none p-0 h-full placeholder:text-current/50",
684
+ "as-fpill-chip": "inline-flex items-center gap-[0.15em] h-[1.5em] px-[0.2em] pl-$xs bg-current-hl/10 border-1 border-current-hl/40 rounded-r0 text-callout text-current-hl whitespace-nowrap flex-shrink-0",
685
+ "as-fpill-chip-remove": {
686
+ "": "cursor-pointer opacity-70 size-fingertip-xs inline-flex items-center justify-center border-0 bg-transparent text-inherit",
687
+ "hover:": "opacity-100"
688
+ },
689
+ "as-fpill-vh": {
690
+ "": "inline-grid place-items-center w-fingertip-s border-0 border-l-1 bg-transparent text-current/60 cursor-pointer flex-shrink-0 transition-colors duration-120",
691
+ "hover:": "layer-2 text-current-hl"
692
+ }
693
+ });
694
+ //#endregion
695
+ //#region src/shortcuts/table/as-orderable-list.ts
696
+ const asOrderableListShortcuts = defineShortcuts$1({
697
+ "as-orderable-list-box": "flex flex-col flex-1 min-h-0 mx-$l my-$m border-1 rounded-r2 overflow-hidden",
698
+ "as-orderable-list-toolbar": "layer-1 flex items-center gap-$s px-$m py-$s border-b-1 flex-shrink-0",
699
+ "as-orderable-list-search-wrap": searchWrap,
700
+ "as-orderable-list-search-icon": searchIcon,
701
+ "as-orderable-list-search": `${smallInputBase} pl-[2em]`,
702
+ "as-orderable-list-toolbar-actions": "flex gap-$xs flex-shrink-0",
703
+ "as-orderable-list-toolbar-btn": "scope-neutral c8-chrome btn h-fingertip-s text-callout font-600 leading-none whitespace-nowrap",
704
+ "as-orderable-list-items": "flex-1 overflow-y-auto flex flex-col",
705
+ "as-orderable-list-item": {
706
+ "": "relative cursor-pointer outline-none transition-colors duration-120 border-b-1 last:border-b-0",
707
+ "hover:": "layer-1",
708
+ "data-[highlighted]:": "layer-1"
709
+ },
710
+ "as-orderable-list-item-dragging": "opacity-25",
711
+ "as-orderable-list-item-disabled": "pointer-events-none cursor-default",
712
+ "as-orderable-list-item-content": "flex items-center gap-$s px-$s py-[0.15em] min-h-fingertip-s",
713
+ "as-orderable-list-grip": "inline-grid place-items-center size-[0.8em] text-current/40 cursor-grab active:cursor-grabbing shrink-0 text-[1.25em] hover:text-current/70",
714
+ "as-orderable-list-grip-disabled": "opacity-40 cursor-default pointer-events-none",
715
+ "as-orderable-list-checkbox": {
716
+ "": "scope-primary text-body size-[1.25em] border-1 border-scope-light-3 dark:border-scope-dark-3 rounded-[0.2em] flex items-center justify-center flex-shrink-0 cursor-pointer layer-0 transition-all duration-120",
717
+ "group-data-[state=checked]:": "bg-current-hl border-current-hl text-white",
718
+ "group-aria-selected:": "bg-current-hl border-current-hl text-white"
719
+ },
720
+ "as-orderable-list-checkbox-disabled": "opacity-50",
721
+ "as-orderable-list-check-icon": "i-as-check size-[0.9em] text-white",
722
+ "as-orderable-list-item-body": "flex items-center gap-$s flex-1 min-w-0",
723
+ "as-orderable-list-item-label": "flex-1 overflow-hidden text-ellipsis whitespace-nowrap",
724
+ "as-orderable-list-item-actions": {
725
+ "": "inline-flex items-center gap-[0.15em] p-[0.15em] border-1 rounded-r2 layer-0 flex-shrink-0 opacity-0 pointer-events-none transition-opacity duration-120 group-hover:opacity-100 group-hover:pointer-events-auto group-focus-within:opacity-100 group-focus-within:pointer-events-auto shadow-popup",
726
+ "[&_button]:": "inline-grid place-items-center size-fingertip-xs p-0 border-0 bg-transparent cursor-pointer text-current/60 leading-none rounded-base transition-colors duration-120 text-callout",
727
+ "[&_button:hover:not(:disabled)]:": "bg-current-hl/10 text-current-hl",
728
+ "[&_button:disabled]:": "opacity-35 cursor-not-allowed"
729
+ },
730
+ "as-orderable-list-drop-indicator": "absolute left-0 right-0 -top-px h-[2px] bg-current-hl pointer-events-none z-[1] before:content-[''] before:absolute before:left-0 before:-top-[0.15em] before:w-[6px] before:h-[6px] before:bg-current-hl before:rounded-full"
731
+ });
732
+ //#endregion
733
+ //#region src/shortcuts/table/as-page.ts
734
+ const asPageShortcuts = defineShortcuts$1({
735
+ "as-page-header": "flex items-start justify-between gap-$m px-$l pt-$l pb-$m",
736
+ "as-page-header-titles": "flex flex-col gap-[0.15em] min-w-0",
737
+ "as-page-header-eyebrow": "font-mono text-callout font-600 tracking-[0.14em] uppercase text-current/70 mb-$xs",
738
+ "as-page-header-title-row": "flex items-center gap-$s min-w-0",
739
+ "as-page-header-title": "m-0 text-[1.54em] font-600 tracking-[-0.02em]",
740
+ "as-page-header-sub": "text-callout text-current/70 mt-[0.15em]",
741
+ "as-page-header-actions": "flex items-center gap-$xs flex-shrink-0",
742
+ "as-page-title-toggle": {
743
+ "": "scope-primary c8-flat btn btn-square h-fingertip-s",
744
+ "[&_>span]:": "text-[1.25em]"
745
+ },
746
+ "as-page-toolbar-btn": "scope-neutral c8-chrome btn text-callout leading-none",
747
+ "as-page-toolbar-island": "inline-flex items-stretch surface-0 border-1 rounded-base overflow-hidden [&_>button:not(:first-child)]:border-l-1",
748
+ "as-page-toolbar-island-btn": {
749
+ "": "scope-neutral btn btn-square bg-transparent border-0",
750
+ "hover:not-disabled:": "current-bg-scope-light-1 bg-current",
751
+ "dark:hover:not-disabled:": "current-bg-scope-dark-1",
752
+ "[&_>span]:": "text-[1.25em]"
753
+ },
754
+ "as-page-toolbar": "grid grid-cols-[minmax(240px,1fr)_auto] items-center gap-x-$m gap-y-$s px-$l pb-$m min-w-0",
755
+ "as-page-search": "relative min-w-0 col-start-1",
756
+ "as-page-search-icon": searchIcon,
757
+ "as-page-search-input": "scope-primary layer-0 i8-bare w-full h-fingertip-m pl-[2em] pr-$s",
758
+ "as-page-toolbar-right": "flex items-center gap-$s flex-shrink-0 col-start-2 min-h-fingertip-m",
759
+ "as-page-pill": "inline-flex items-center gap-$xs px-$s py-$xs rounded-r0 layer-2 text-current/70 text-callout font-mono whitespace-nowrap",
760
+ "as-page-pill-strong": "text-current font-600",
761
+ "as-page-filters-row": "flex items-center gap-$s flex-wrap min-w-0 col-span-2",
762
+ "as-page-selection-summary": "ml-auto flex items-center gap-$s",
763
+ "as-page-selection-count": "scope-primary font-mono text-callout font-600 text-current-hl",
764
+ "as-page-clear": {
765
+ "": "inline-flex items-center gap-$xs h-fingertip-m px-$s border-0 bg-transparent text-current/70 text-callout cursor-pointer ml-auto transition-colors duration-120",
766
+ "hover:": "text-current-hl"
767
+ }
768
+ });
769
+ //#endregion
770
+ //#region src/shortcuts/table/as-preset-dialog.ts
771
+ /**
772
+ * `<AsPresetDialog>` Tier-2 default. Centred-card management dialog
773
+ * (mirroring `<AsConfirmDialog>` chrome) with a single scrollable list of
774
+ * preset rows. Composed exclusively through vunor primitives so consumer
775
+ * themes re-skin without touching this file.
776
+ */
777
+ const asPresetDialogShortcuts = defineShortcuts$1({
778
+ "as-preset-dialog-overlay": dialogOverlay,
779
+ "as-preset-dialog-content": `${dialogBase} sm:!inset-auto sm:!top-1/2 sm:!left-1/2 sm:!-translate-x-1/2 sm:!-translate-y-1/2 sm:!size-auto sm:!rounded-r3 sm:!shadow-popup sm:!border-1 sm:min-w-[560px] sm:max-w-[min(820px,92vw)] sm:max-h-[min(80vh,720px)]`,
780
+ "as-preset-dialog-header": "flex items-center gap-$m px-$l py-$m border-b-1",
781
+ "as-preset-dialog-title": "!m-0 !p-0 text-body-l font-600 min-w-0",
782
+ "as-preset-dialog-counter": "inline-flex items-center px-$s py-$xxs rounded-r2 layer-2 text-callout text-current/60 font-mono whitespace-nowrap",
783
+ "as-preset-dialog-close": {
784
+ "": "ml-auto scope-neutral c8-flat btn btn-square h-fingertip-s rounded-base",
785
+ "hover:": "layer-2"
786
+ },
787
+ "as-preset-dialog-body": "flex flex-col flex-1 min-h-0 overflow-y-auto py-$xs",
788
+ "as-preset-dialog-section": "flex flex-col",
789
+ "as-preset-dialog-section-header": "px-$l pt-$m pb-$xs text-callout uppercase tracking-wider text-current/50 select-none font-500",
790
+ "as-preset-dialog-toolbar": "flex items-center gap-$m px-$l py-$s border-b-1 layer-1",
791
+ "as-preset-dialog-search": "relative flex-1 min-w-0",
792
+ "as-preset-dialog-search-icon": "absolute left-$s top-1/2 -translate-y-1/2 text-current/50 text-[1em] pointer-events-none w-[1em] h-[1em]",
793
+ "as-preset-dialog-search-input": "scope-primary layer-0 i8-bare w-full h-fingertip-s pl-$xl pr-$s rounded-r1",
794
+ "as-preset-dialog-legend": "hidden sm:flex items-center gap-$m text-callout text-current/60 shrink-0",
795
+ "as-preset-dialog-legend-item": "inline-flex items-center gap-$xs",
796
+ "as-preset-dialog-legend-icon": "text-[1.05em]",
797
+ "as-preset-dialog-empty": "px-$l py-$m text-body text-current/60 text-center !m-0",
798
+ "as-preset-dialog-row": {
799
+ "": "flex items-center gap-$xs px-$l py-$xs border-0 border-b-1 outline-none",
800
+ "hover:": "layer-3",
801
+ "[&[data-deleted]]:": "opacity-40",
802
+ "[&[data-deleted]_.as-preset-dialog-row-label-text]:": "line-through"
803
+ },
804
+ "as-preset-dialog-row-active": "shrink-0 cursor-pointer accent-primary-500",
805
+ "as-preset-dialog-row-default": {
806
+ "": "scope-neutral c8-flat inline-flex items-center justify-center size-fingertip-s rounded-base cursor-pointer text-current/40 shrink-0",
807
+ "hover:": "scope-primary layer-2 text-current-hl",
808
+ "[&[data-on]]:": "scope-primary layer-2 border-1 current-border-hl text-primary-500"
809
+ },
810
+ "as-preset-dialog-row-fav": {
811
+ "": "scope-neutral c8-flat inline-flex items-center justify-center size-fingertip-s rounded-base cursor-pointer text-current/40 shrink-0",
812
+ "hover:": "scope-primary layer-2 text-current-hl",
813
+ "[&[data-on]]:": "scope-primary layer-2 border-1 current-border-hl text-primary-500"
814
+ },
815
+ "as-preset-dialog-row-fav-spacer": "inline-block size-fingertip-s shrink-0",
816
+ "as-preset-dialog-row-label": "flex-1 min-w-0 flex items-center gap-$s",
817
+ "as-preset-dialog-row-label-text": {
818
+ "": "truncate text-body",
819
+ "[&[data-pending]]:": "italic text-primary-500",
820
+ "[&[data-pending]]:after:": "content-['*'] ml-$xxs not-italic"
821
+ },
822
+ "as-preset-dialog-row-rename": "scope-primary layer-0 i8-bare flex-1 min-w-0 h-fingertip-s px-$s rounded-r1",
823
+ "as-preset-dialog-row-meta": "text-callout text-current/60 whitespace-nowrap",
824
+ "as-preset-dialog-row-owner": "hidden sm:block shrink-0 w-[7em] text-callout text-current/60 truncate whitespace-nowrap",
825
+ "as-preset-dialog-row-owner-self": "italic",
826
+ "as-preset-dialog-row-public-spacer": "inline-block size-fingertip-s shrink-0",
827
+ "as-preset-dialog-row-delete-spacer": "inline-block size-fingertip-s shrink-0",
828
+ "as-preset-dialog-aspect-strip": "hidden sm:inline-flex items-stretch shrink-0 h-[1.6em] border-1 rounded-base bg-transparent",
829
+ "as-preset-dialog-aspect-chip": {
830
+ "": "relative inline-flex items-center justify-center text-[1em] text-current/25 px-$xs",
831
+ "[&[data-on]]:": "text-primary-500",
832
+ "[&:not(:first-child)]:before:": "content-[''] absolute left-0 top-$xxs bottom-$xxs w-0 border-l-1"
833
+ },
834
+ "as-preset-dialog-row-public-toggle": {
835
+ "": "scope-neutral c8-flat inline-flex items-center justify-center size-fingertip-s rounded-base cursor-pointer text-current/40 shrink-0",
836
+ "hover:": "scope-primary layer-2 text-current-hl",
837
+ "[&[data-on]]:": "scope-primary layer-2 border-1 current-border-hl text-primary-500"
838
+ },
839
+ "as-preset-dialog-row-public-indicator": "inline-flex items-center justify-center size-fingertip-s rounded-base text-primary-500 shrink-0",
840
+ "as-preset-dialog-row-delete": {
841
+ "": "scope-neutral c8-flat inline-flex items-center justify-center size-fingertip-s rounded-base cursor-pointer text-current/40 shrink-0",
842
+ "hover:": "scope-error layer-2 text-current-hl",
843
+ "[&[data-on]]:": "scope-error text-current-hl"
844
+ },
845
+ "as-preset-dialog-footer": "flex items-center justify-between gap-$s px-$l py-$m",
846
+ "as-preset-dialog-footer-status": "flex items-center gap-$xs min-w-0",
847
+ "as-preset-dialog-footer-unsaved": "inline-flex items-center gap-$xs text-callout text-current/60",
848
+ "as-preset-dialog-footer-unsaved-dot": "inline-block w-[0.55em] h-[0.55em] rounded-full bg-primary-500 shrink-0",
849
+ "as-preset-dialog-footer-actions": "flex items-center gap-$s",
850
+ "as-preset-dialog-footer-close": "scope-neutral c8-chrome btn",
851
+ "as-preset-dialog-footer-save": {
852
+ "": "scope-primary c8-filled btn",
853
+ "[&:disabled]:": "pointer-events-none"
854
+ }
855
+ });
856
+ //#endregion
857
+ //#region src/shortcuts/table/as-preset-picker.ts
858
+ /**
859
+ * `<AsPresetPicker>` Tier-1 dropdown shortcuts. Built on `DropdownMenuRoot`
860
+ * so all keyboard / focus management comes from reka-ui. Composed only
861
+ * through vunor primitives (`scope-*`, `layer-*`, `c8-*`, `i8-*`,
862
+ * `fingertip-*`, spacing tokens) so consumer themes re-skin the picker
863
+ * without touching this file.
864
+ *
865
+ * Class families:
866
+ * `as-preset-picker` — outermost wrapper (inline-block)
867
+ * `as-preset-picker-trigger` — main button (label + ★ + `*` + chevron)
868
+ * `as-preset-picker-menu` — dropdown content panel
869
+ * `as-preset-picker-section-*` — section header / list
870
+ * `as-preset-picker-item` — preset row (system / favorite / mine / public)
871
+ * `as-preset-picker-separator` — group separator
872
+ * `as-preset-picker-action` — Save / Save as / Reset / Manage actions
873
+ * `as-preset-picker-popover-*` — inline Save-as popover
874
+ */
875
+ const asPresetPickerShortcuts = defineShortcuts$1({
876
+ "as-preset-picker": "inline-block",
877
+ "as-preset-picker-trigger": {
878
+ "": "scope-neutral c8-flat btn",
879
+ "[&[data-state=open]]:": "scope-primary c8-light"
880
+ },
881
+ "as-preset-picker-trigger-label": "text-body whitespace-nowrap",
882
+ "as-preset-picker-trigger-dirty": "text-current/70 ml-[-0.25em]",
883
+ "as-preset-picker-trigger-chevron": "text-[1em] text-current/60 shrink-0 -mr-$xs",
884
+ "as-preset-picker-menu": "scope-primary popup-card whitespace-nowrap py-$xs min-w-[16em] max-w-[28em]",
885
+ "as-preset-picker-section": "flex flex-col",
886
+ "as-preset-picker-section-header": "px-$m pt-$s pb-$xs text-callout uppercase tracking-wider text-current/60 select-none",
887
+ "as-preset-picker-item": {
888
+ "": "flex items-center gap-$s w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer outline-none",
889
+ "hover:": "layer-3",
890
+ "data-[highlighted]:": "layer-3",
891
+ "[&[data-active]]:": "font-700"
892
+ },
893
+ "as-preset-picker-item-active": {
894
+ "": "shrink-0 w-[1em] h-[1em] text-[1em] text-primary-500 invisible",
895
+ "[[data-active]_&]:": "visible"
896
+ },
897
+ "as-preset-picker-item-fav": "text-[1em] text-warn-500 shrink-0",
898
+ "as-preset-picker-item-icon": "inline-flex text-[1.1em] text-current/60 shrink-0 w-[1em] h-[1em]",
899
+ "as-preset-picker-item-label": "flex-1 min-w-0 overflow-hidden text-ellipsis",
900
+ "as-preset-picker-item-meta": "text-callout text-current/60 ml-$s shrink-0 whitespace-nowrap",
901
+ "as-preset-picker-item-aspects": "inline-flex items-stretch shrink-0 ml-$s h-[1.6em] border-1 rounded-base bg-transparent",
902
+ "as-preset-picker-item-aspect-chip": {
903
+ "": "relative inline-flex items-center justify-center text-[1em] text-current/25 px-$xs",
904
+ "[&[data-on]]:": "text-primary-500",
905
+ "[&:not(:first-child)]:before:": "content-[''] absolute left-0 top-$xxs bottom-$xxs w-0 border-l-1"
906
+ },
907
+ "as-preset-picker-separator": "h-0 my-$xs border-t-1",
908
+ "as-preset-picker-action": {
909
+ "": "flex items-center gap-$s w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer outline-none disabled-soft",
910
+ "hover:": "layer-3",
911
+ "data-[highlighted]:": "layer-3",
912
+ "[&.as-preset-picker-action-primary]:": "font-700 scope-primary text-current-hl"
913
+ },
914
+ "as-preset-picker-action-icon": "shrink-0 w-[1em] h-[1em] text-[1em] text-current/60",
915
+ "as-preset-picker-action-label": "flex-1 min-w-0",
916
+ "as-preset-picker-popover": "scope-primary popup-card z-[201] pt-$m px-$l min-w-[20em]",
917
+ "as-preset-picker-popover-inner": "flex flex-col gap-$m",
918
+ "as-preset-picker-popover-title": "text-body-l font-600 m-0",
919
+ "as-preset-picker-popover-field": "flex flex-col gap-$xs",
920
+ "as-preset-picker-popover-label": "text-body font-600 text-current",
921
+ "as-preset-picker-popover-input": "layer-0 i8-bare h-fingertip-m px-$s rounded-r1",
922
+ "as-preset-picker-popover-aspects": "flex flex-col gap-$s",
923
+ "as-preset-picker-popover-aspect": {
924
+ "": "flex items-center gap-$s text-body cursor-pointer select-none",
925
+ "[&:has(>input:checked)_.as-preset-picker-popover-aspect-icon]:": "text-primary-500"
926
+ },
927
+ "as-preset-picker-popover-aspect-icon": "text-[1.1em] text-current/40 shrink-0 w-[1em] h-[1em]",
928
+ "as-preset-picker-popover-separator": "h-0 border-t-1 my-$xs",
929
+ "as-preset-picker-popover-public": {
930
+ "": "flex items-center gap-$s text-body cursor-pointer select-none",
931
+ "[&:has(>input:checked)_.as-preset-picker-popover-aspect-icon]:": "text-primary-500"
932
+ },
933
+ "as-preset-picker-popover-footer": "flex items-center justify-end gap-$s py-$m -mx-$l px-$l border-t-1",
934
+ "as-preset-picker-popover-cancel": "scope-neutral c8-chrome btn h-fingertip-s",
935
+ "as-preset-picker-popover-save": "scope-primary c8-filled btn h-fingertip-s"
936
+ });
937
+ //#endregion
938
+ //#region src/shortcuts/table/as-row-actions.ts
939
+ /**
940
+ * Per-row actions cell shortcuts. Renders inside a `<td>`. Always exactly
941
+ * one button (icon, label-text, or `…` dropdown trigger). Intent maps to
942
+ * vunor scope via {@link buildActionsIntentVariants} — see _shared.ts for
943
+ * the dual-context (filled-button + menu-item) intent rules.
944
+ */
945
+ const asRowActionsShortcuts = defineShortcuts$1({
946
+ "as-row-actions": "!p-0 text-center",
947
+ "as-row-actions-btn": {
948
+ "": "scope-neutral c8-flat inline-flex items-center justify-center min-w-fingertip-s h-fingertip-s px-$s font-600 cursor-pointer shrink-0 leading-none whitespace-nowrap",
949
+ "[&[data-default]]:": "scope-primary font-500"
950
+ },
951
+ "as-row-actions-btn-labelled": { "[&.as-row-actions-btn]:": "!c8-chrome !px-$m" },
952
+ "as-row-actions-btn-icon": "text-[1.25em] shrink-0",
953
+ "as-row-actions-btn-label": "text-callout",
954
+ "as-row-actions-more": "",
955
+ "as-row-actions-menu": "scope-primary popup-card whitespace-nowrap py-$xs min-w-[12em]",
956
+ "as-row-actions-menu-separator": "h-0 my-$xs border-t-1",
957
+ "as-row-actions-menu-item": {
958
+ "": "flex items-center gap-$s w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer outline-none",
959
+ "hover:": "layer-3",
960
+ "data-[highlighted]:": "layer-3",
961
+ "[&[data-default]]:": "font-700"
962
+ },
963
+ "as-row-actions-menu-item-icon": "inline-flex text-[1.25em] text-current/60 shrink-0",
964
+ "as-row-actions-menu-item-label": "flex-1 min-w-0 overflow-hidden text-ellipsis",
965
+ ...buildActionsIntentVariants("as-row-actions")
966
+ });
967
+ //#endregion
968
+ //#region src/shortcuts/table/as-sorter.ts
969
+ const asSorterShortcuts = defineShortcuts$1({
970
+ "as-sorter-label": "flex items-center gap-$s flex-1 min-w-0",
971
+ "as-sorter-index": "inline-grid place-items-center size-[1.5em] rounded-r0 layer-2 text-callout text-current/70 font-mono font-500 flex-shrink-0",
972
+ "as-sorter-segment": { "": "inline-flex items-stretch gap-0 p-[0.15em] border-1 rounded-base layer-0 flex-shrink-0" },
973
+ "as-sorter-segment-btn": {
974
+ "": "inline-flex items-center gap-$xs h-fingertip-xs px-$s border-0 bg-transparent text-callout text-current/60 font-500 leading-none cursor-pointer rounded-base transition-colors duration-120",
975
+ "hover:not-disabled:": "text-current"
976
+ },
977
+ "as-sorter-segment-btn-active": "layer-2 text-current",
978
+ "as-sorter-direction-disabled": "opacity-50 cursor-not-allowed",
979
+ "as-sorter-lock": "text-callout opacity-50 flex-shrink-0"
980
+ });
981
+ //#endregion
982
+ //#region src/shortcuts/table/as-table-actions.ts
983
+ /**
984
+ * `<AsTableActions>` Tier-1 toolbar bar shortcuts. Renders a single default
985
+ * button + a `…` more-menu. Intent maps to vunor scope via
986
+ * {@link buildActionsIntentVariants} — see _shared.ts for the dual-context
987
+ * (filled-button + menu-item) intent rules.
988
+ */
989
+ const asTableActionsShortcuts = defineShortcuts$1({
990
+ "as-table-actions": "inline-flex items-center gap-$xs",
991
+ "as-table-actions-btn": "scope-primary c8-filled btn shrink-0",
992
+ "as-table-actions-btn-icon": "text-[1.25em] shrink-0",
993
+ "as-table-actions-btn-label": "text-body",
994
+ "as-table-actions-more": "scope-neutral c8-chrome btn btn-square font-600 shrink-0",
995
+ "as-table-actions-menu": "scope-primary popup-card whitespace-nowrap py-$xs min-w-[14em]",
996
+ "as-table-actions-menu-item": {
997
+ "": "flex items-center gap-$s w-full px-$m py-$xs border-0 bg-transparent text-current text-left cursor-pointer outline-none",
998
+ "hover:": "layer-3",
999
+ "data-[highlighted]:": "layer-3",
1000
+ "[&[data-default]]:": "font-700"
1001
+ },
1002
+ "as-table-actions-menu-item-icon": "inline-flex text-[1.25em] text-current/60 shrink-0",
1003
+ "as-table-actions-menu-item-label": "flex-1 min-w-0 overflow-hidden text-ellipsis",
1004
+ "as-table-actions-menu-separator": "h-0 my-$xs border-t-1",
1005
+ ...buildActionsIntentVariants("as-table-actions")
1006
+ });
1007
+ //#endregion
1008
+ //#region src/shortcuts/table/as-table.ts
1009
+ const asTableShortcuts = defineShortcuts$1({
1010
+ "as-spacer": "grow",
1011
+ "as-status-badge": "inline-flex items-center px-$s py-[0.15em] rounded-full text-callout font-500 bg-current-hl/15 text-current-hl",
1012
+ "as-tag-chip": `${chipBase} bg-current-hl/10 text-current-hl`,
1013
+ "as-table": {
1014
+ "": "scope-primary table-fixed w-fit border-collapse",
1015
+ "[&_thead]:": "layer-1",
1016
+ "[&_th]:": "relative px-$m py-$s text-left font-600 text-current/80 border-b-1 whitespace-nowrap overflow-hidden text-ellipsis select-none tracking-[0.01em]",
1017
+ "[&_td]:": "px-$m py-$s border-b-1 whitespace-nowrap overflow-hidden text-ellipsis",
1018
+ "[&_tbody_tr]:": "transition-colors duration-100",
1019
+ "[&_tbody_tr:hover]:": "layer-1",
1020
+ "[&_tbody_tr:is([data-highlighted=''])]:": "layer-1",
1021
+ "[&_tbody_tr:is(.as-table-row-active)]:": "layer-1",
1022
+ "[&_tbody_tr:is([data-state=checked])]:": "bg-current-hl/15",
1023
+ "[&_tbody_tr:is([aria-selected=true])]:": "bg-current-hl/15",
1024
+ "[&_tbody_tr:is([data-highlighted='']):is([data-state=checked])]:": "bg-current-hl/30",
1025
+ "[&_tbody_tr:is(.as-table-row-active):is([aria-selected=true])]:": "bg-current-hl/30"
1026
+ },
1027
+ "as-table-stretch": "min-w-full",
1028
+ "as-table-sticky": { "[&_thead]:": "sticky top-0 z-[1]" },
1029
+ "as-table-scroll-container": "flex-1 min-h-0 overflow-auto [overflow-anchor:none]",
1030
+ "as-table-outer-wrap": "relative flex flex-col flex-1 min-h-0",
1031
+ "as-th-filler": "p-0 w-auto",
1032
+ "as-td-filler": "p-0 w-auto",
1033
+ "as-th-reorderable": "cursor-grab",
1034
+ "as-th-dragging": "opacity-50 cursor-grabbing",
1035
+ "as-th-resizing": "bg-current-hl/10",
1036
+ "as-th-resize-handle": "absolute right-0 top-0 bottom-0 w-$xs cursor-col-resize select-none z-[1] bg-current-hl/0 hover:bg-current-hl/40 active:bg-current-hl",
1037
+ "as-th-drop-indicator-before": "relative before:content-[''] before:absolute before:left-0 before:inset-y-0 before:w-$xxs before:bg-current-hl before:pointer-events-none before:z-[1]",
1038
+ "as-th-drop-indicator-after": "relative before:content-[''] before:absolute before:right-0 before:inset-y-0 before:w-$xxs before:bg-current-hl before:pointer-events-none before:z-[1]",
1039
+ "as-th-btn": {
1040
+ "": "flex items-center justify-between gap-$xs w-full p-0 m-0 border-0 bg-transparent font-inherit font-600 text-current/80 text-left cursor-pointer outline-none whitespace-nowrap",
1041
+ "hover:": "text-current-hl"
1042
+ },
1043
+ "as-th-label": "overflow-hidden text-ellipsis flex-shrink",
1044
+ "as-th-indicators": "inline-flex items-center gap-$xs flex-shrink-0",
1045
+ "as-th-sort": "inline-flex text-body text-current-hl",
1046
+ "as-th-filter-badge": "inline-flex text-body text-current-hl",
1047
+ "as-th-chevron": "inline-flex text-body text-current/50",
1048
+ "as-cell-number": "text-right tabular-nums font-mono",
1049
+ "as-virtual-row": "absolute w-full",
1050
+ "as-th-select": "w-[4em] !text-center",
1051
+ "as-td-select": "w-[4em] text-center",
1052
+ "as-th-fixed": "!cursor-default !p-0 !text-center",
1053
+ "as-table-checkbox": {
1054
+ "": "scope-primary inline-flex align-middle text-body size-[1.25em] border-1 border-scope-light-3 dark:border-scope-dark-3 rounded-[0.2em] items-center justify-center layer-0 cursor-pointer transition-all duration-120",
1055
+ "[tr[data-state=checked]_&]:": "bg-current-hl border-current-hl",
1056
+ "[tr[aria-selected=true]_&]:": "bg-current-hl border-current-hl"
1057
+ },
1058
+ "as-table-row-active": "layer-1",
1059
+ "as-table-checkbox-checked": "bg-current-hl border-current-hl",
1060
+ "as-table-checkbox-indeterminate": "bg-current-hl border-current-hl",
1061
+ "as-table-checkbox-tick": "i-as-check size-[0.9em] text-white",
1062
+ "as-table-checkbox-dash": "w-[0.6em] h-[0.125em] bg-white block",
1063
+ "as-table-empty": "flex items-center justify-center p-$xl text-current/60 whitespace-normal",
1064
+ "as-table-loading": "flex items-center justify-center p-$xl text-current/60 whitespace-normal",
1065
+ "as-table-error": "scope-error flex items-center justify-center p-$xl text-current-hl whitespace-normal",
1066
+ "as-table-query-overlay": "as-overlay",
1067
+ "as-table-query-overlay-icon": "as-overlay-icon",
1068
+ "as-vh-empty": "flex flex-col items-center justify-center gap-$m py-$l px-$m text-center min-w-0",
1069
+ "as-vh-empty-icon": "inline-grid place-items-center size-[48px] rounded-full bg-current-hl/50 text-current-hl text-[1.54em] flex-shrink-0",
1070
+ "as-vh-error-icon": "as-vh-empty-icon scope-error",
1071
+ "as-vh-empty-title": "font-600 text-current m-0",
1072
+ "as-vh-empty-body": "text-callout text-current/60 max-w-[44ch] leading-[1.5] m-0 whitespace-normal break-words",
1073
+ "as-vh-empty-code": "font-mono text-current bg-current-hl/10 rounded-r0 px-$xs",
1074
+ "as-vh-empty-clear": "scope-neutral c8-chrome inline-flex items-center gap-$xs h-fingertip-s px-$m text-callout font-600 cursor-pointer rounded-base"
1075
+ });
1076
+ //#endregion
1077
+ //#region src/shortcuts/table/as-window-scrollbar.ts
1078
+ const asWindowScrollbarShortcuts = defineShortcuts$1({
1079
+ "as-window-scrollbar": "relative flex-shrink-0 w-[10px] select-none",
1080
+ "as-window-scrollbar-track": {
1081
+ "": "relative h-full w-full rounded-[5px] cursor-pointer bg-[rgba(0,0,0,0.05)]",
1082
+ "dark:": "bg-[rgba(255,255,255,0.05)]"
1083
+ },
1084
+ "as-window-scrollbar-thumb": {
1085
+ "": "absolute left-0 right-0 rounded-[5px] border-2 border-transparent bg-clip-padding bg-[rgba(0,0,0,0.2)] transition-colors duration-100",
1086
+ "hover:": "bg-[rgba(0,0,0,0.3)]",
1087
+ "[&[data-active=true]]:": "bg-[rgba(0,0,0,0.3)] cursor-ns-resize",
1088
+ "dark:": "bg-[rgba(255,255,255,0.2)]",
1089
+ "dark:hover:": "bg-[rgba(255,255,255,0.3)]",
1090
+ "[&[data-active=true]]:dark:": "bg-[rgba(255,255,255,0.3)]"
1091
+ }
1092
+ });
1093
+ //#endregion
1094
+ //#region src/shortcuts/table/as-window-skeleton.ts
1095
+ const asWindowSkeletonShortcuts = defineShortcuts$1({
1096
+ "as-window-skeleton-row": {
1097
+ "": "select-none cursor-default bg-[linear-gradient(90deg,rgb(var(--scope-dark-0)/0.05)_0%,rgb(var(--scope-dark-0)/0.05)_40%,rgb(var(--scope-dark-0)/0.12)_50%,rgb(var(--scope-dark-0)/0.05)_60%,rgb(var(--scope-dark-0)/0.05)_100%)] bg-[length:200%_100%] animate-[as-shimmer_4.2s_linear_infinite]",
1098
+ "dark:": "bg-[linear-gradient(90deg,rgb(var(--scope-light-0)/0.05)_0%,rgb(var(--scope-light-0)/0.05)_40%,rgb(var(--scope-light-0)/0.12)_50%,rgb(var(--scope-light-0)/0.05)_60%,rgb(var(--scope-light-0)/0.05)_100%)]"
1099
+ },
1100
+ "as-window-skeleton-cell": "relative align-middle px-$m py-$s text-callout text-transparent bg-transparent",
1101
+ "as-window-empty-row": "select-none cursor-default bg-current-bg"
1102
+ });
1103
+ //#endregion
1104
+ //#region src/shortcuts/table/as-window-table.ts
1105
+ const asWindowTableShortcuts = defineShortcuts$1({
1106
+ "as-window-table-scroll-area": "relative flex flex-row flex-1 min-h-0 w-full",
1107
+ "as-window-table-wrapper": "flex-1 min-w-0 overflow-x-auto overflow-y-hidden"
1108
+ });
1109
+ //#endregion
1110
+ //#region src/shortcuts/table/index.ts
1111
+ const tableShortcuts = mergeVunorShortcuts$1([
1112
+ asTableShortcuts,
1113
+ asCellShortcuts,
1114
+ asPageShortcuts,
1115
+ asFpillShortcuts,
1116
+ asColumnMenuShortcuts,
1117
+ asPresetPickerShortcuts,
1118
+ asPresetDialogShortcuts,
1119
+ asFilterDialogShortcuts,
1120
+ asFilterFieldShortcuts,
1121
+ asConfigDialogShortcuts,
1122
+ asConfigTabShortcuts,
1123
+ asConfirmDialogShortcuts,
1124
+ asActionFormShortcuts,
1125
+ asOrderableListShortcuts,
1126
+ asRowActionsShortcuts,
1127
+ asSorterShortcuts,
1128
+ asTableActionsShortcuts,
1129
+ asWindowTableShortcuts,
1130
+ asWindowSkeletonShortcuts,
1131
+ asWindowScrollbarShortcuts
1132
+ ]);
1133
+ //#endregion
1134
+ //#region src/shortcuts/wf/as-wf-form.ts
1135
+ const asWfFormShortcuts = defineShortcuts$1({ "as-wf-form-error": "scope-error surface-600 border-1 rounded-base px-$m py-$s mb-$m text-body" });
1136
+ //#endregion
1137
+ //#region src/shortcuts/wf/index.ts
1138
+ const wfShortcuts = mergeVunorShortcuts$1([asWfFormShortcuts]);
1139
+ //#endregion
1140
+ //#region src/shortcuts/index.ts
1141
+ const allShortcuts = mergeVunorShortcuts$1([
1142
+ commonShortcuts,
1143
+ formShortcuts,
1144
+ tableShortcuts,
1145
+ wfShortcuts
1146
+ ]);
1147
+ //#endregion
1148
+ //#region src/preset.ts
1149
+ /**
1150
+ * Builds the `as` icon collection by merging the baked default map with any
1151
+ * consumer-supplied overrides, then hands the resolver to UnoCSS's
1152
+ * `presetIcons`. Sync, no filesystem, no network — works in every runtime.
1153
+ */
1154
+ function bakedIconsPreset(overrides) {
1155
+ const collection = overrides ? {
1156
+ ...bakedIcons,
1157
+ ...overrides
1158
+ } : bakedIcons;
1159
+ return presetIcons({ collections: { as: (name) => collection[name] } });
1160
+ }
1161
+ /**
1162
+ * Preset entry that injects the `@keyframes as-shimmer` definition used by
1163
+ * `<AsWindowSkeletonRow>`'s gradient animation. Lives at preset level so the
1164
+ * keyframes are emitted exactly once into the consumer's UnoCSS output (not
1165
+ * duplicated per shortcut).
1166
+ */
1167
+ const shimmerKeyframesPreset = {
1168
+ name: "atscript-ui-shimmer-keyframes",
1169
+ preflights: [{ getCSS: () => "@keyframes as-shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }" }]
1170
+ };
1171
+ /**
1172
+ * No-op marker classes referenced by other shortcuts. UnoCSS warns
1173
+ * `unmatched utility "X" in shortcut "Y"` when a shortcut body references
1174
+ * a utility that doesn't resolve to any rule:
1175
+ * - `group` is registered by `presetWind` only as a *variant* (for
1176
+ * `group-hover:`, `group-data-*:`, …) — not a static rule. Templates
1177
+ * that put `group` on a parent so children can use `group-hover:foo`
1178
+ * compile fine at the call site, but referencing `group` inside a
1179
+ * `defineShortcuts` body trips the warning.
1180
+ * - `btn-square` is a vunor marker class (`{ '': '' }` empty-body
1181
+ * shortcut). Empty body resolves to nothing, which UnoCSS reports
1182
+ * the same way — yet it's load-bearing because `btn`'s
1183
+ * `[&.btn-square]:` variant relies on it being present in the class
1184
+ * list.
1185
+ *
1186
+ * Both are intentional: the class needs to exist on the element so a
1187
+ * descendant variant or peer shortcut can target it. We register a
1188
+ * dynamic rule whose body function returns `undefined`, which gives
1189
+ * `parseUtil` a successful match but emits no CSS — the warning's
1190
+ * suppressed and the consumer output stays byte-identical.
1191
+ */
1192
+ const markerRulesPreset = {
1193
+ name: "atscript-ui-marker-rules",
1194
+ rules: [["group", { $$noop: "" }], ["btn-square", { $$noop: "" }]]
1195
+ };
1196
+ /**
1197
+ * Form-grid preset.
1198
+ *
1199
+ * 1. Registers the `as-narrow:` variant — `as-narrow:col-span-12` resolves
1200
+ * to `@container as-grid (max-width: 480px) { .as-narrow\\:col-span-12
1201
+ * { ... } }`. The parent grid declares `container-name: as-grid` via
1202
+ * `as-form-grid`, so the rule activates against the grid's inline size,
1203
+ * not the viewport. Nested grids re-evaluate independently — an inner
1204
+ * grid inside a half-width slot stacks automatically when the outer
1205
+ * grid hits narrow.
1206
+ *
1207
+ * 2. Safelists `col-span-N` / `row-span-N` (and their `as-narrow:` flavours)
1208
+ * so the dynamic classes `AsField` stamps from
1209
+ * `@ui.form.grid.colSpan|rowSpan` always appear in the consumer's
1210
+ * generated CSS — the static extractor cannot see them in source.
1211
+ * Row-span ceiling is 6, which is plenty for any sane form layout
1212
+ * and keeps the safelist bloat bounded.
1213
+ */
1214
+ const FORM_GRID_NARROW_BREAKPOINT = "480px";
1215
+ const FORM_GRID_CONTAINER_NAME = "as-grid";
1216
+ const formGridSafelistPreset = {
1217
+ name: "atscript-ui-form-grid",
1218
+ variants: [{
1219
+ name: "as-narrow",
1220
+ match(matcher) {
1221
+ if (!matcher.startsWith("as-narrow:")) return void 0;
1222
+ return {
1223
+ matcher: matcher.slice(10),
1224
+ handle: (input, next) => next({
1225
+ ...input,
1226
+ parent: `${input.parent ? `${input.parent} $$ ` : ""}@container ${FORM_GRID_CONTAINER_NAME} (max-width: ${FORM_GRID_NARROW_BREAKPOINT})`
1227
+ })
1228
+ };
1229
+ }
1230
+ }],
1231
+ safelist: (() => {
1232
+ const list = [];
1233
+ for (let i = 1; i <= 12; i++) list.push(`col-span-${i}`, `as-narrow:col-span-${i}`);
1234
+ for (let i = 1; i <= 6; i++) list.push(`row-span-${i}`, `as-narrow:row-span-${i}`);
1235
+ return list;
1236
+ })()
1237
+ };
1238
+ function buildBasePresets(options) {
1239
+ const { baseRadius = "4px", iconOverrides } = options;
1240
+ return [
1241
+ bakedIconsPreset(iconOverrides),
1242
+ shimmerKeyframesPreset,
1243
+ markerRulesPreset,
1244
+ formGridSafelistPreset,
1245
+ presetVunor({
1246
+ baseRadius,
1247
+ fingertip: {
1248
+ xs: "20px",
1249
+ s: "28px",
1250
+ m: "32px",
1251
+ l: "36px",
1252
+ xl: "40px"
1253
+ },
1254
+ palette: {
1255
+ colors: {
1256
+ primary: "#2563eb",
1257
+ grey: "#64748b",
1258
+ neutral: "#475569",
1259
+ error: "#dc2626"
1260
+ },
1261
+ lightest: .97,
1262
+ darkest: .22,
1263
+ layersDepth: .08
1264
+ }
1265
+ })
1266
+ ];
1267
+ }
1268
+ function asPresetVunor(options = {}) {
1269
+ const { excludeComponents, ...baseOpts } = options;
1270
+ return [...buildBasePresets(baseOpts), {
1271
+ name: "atscript-ui-extractors",
1272
+ extractors: [createAsExtractor({ excludeComponents })]
1273
+ }];
1274
+ }
1275
+ /**
1276
+ * Cycle-breaking factory used by the class-extraction script and the
1277
+ * pre-built CSS pipeline. Returns the same presets + shortcuts that
1278
+ * consumers receive via `asPresetVunor()`, but without the safelist
1279
+ * extractor — so the extraction script can compute the safelist that
1280
+ * the extractor later imports.
1281
+ */
1282
+ function createAsBaseUnoConfig(options = {}) {
1283
+ return {
1284
+ presets: buildBasePresets(options),
1285
+ shortcuts: [vunorShortcuts(allShortcuts)]
1286
+ };
1287
+ }
1288
+ //#endregion
1289
+ export { allShortcuts, asActionFormShortcuts, asActionShortcuts, asArrayShortcuts, asCellShortcuts, asCheckboxRadioShortcuts, asCollapsibleShortcuts, asColumnMenuShortcuts, asConfigDialogShortcuts, asConfigTabShortcuts, asConfirmDialogShortcuts, asDecimalNumberShortcuts, asDropdownShortcuts, asFieldShortcuts, asFilterDialogShortcuts, asFilterFieldShortcuts, asFormGridShortcuts, asFormShortcuts, asFpillShortcuts, asNoDataShortcuts, asObjectShortcuts, asOrderableListShortcuts, asPageShortcuts, asPresetDialogShortcuts, asPresetPickerShortcuts, asPresetVunor, asRefShortcuts, asRowActionsShortcuts, asSorterShortcuts, asTableActionsShortcuts, asTableShortcuts, asWfFormShortcuts, asWindowScrollbarShortcuts, asWindowSkeletonShortcuts, asWindowTableShortcuts, bakedIcons, commonShortcuts, componentClasses, componentPackages, createAsBaseUnoConfig, createAsExtractor, defineShortcuts, formShortcuts, getComponentClasses, getHelperClasses, helperAliases, mergeVunorShortcuts, tableShortcuts, toUnoShortcut, wfShortcuts };