@razorwind/eslint 0.0.2

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.
@@ -0,0 +1,73 @@
1
+ import { a as DesignSystemRuleId, c as EslintPluginOptions, d as ManifestToken, f as TokenCategory, i as DesignSystemOptions, l as ManifestComponent, n as CoreRuleId, o as DesignSystemSettings, p as TokenReferenceStyle, r as DesignSystemManifest, s as DesignSystemSeverity, t as ComponentRole, u as ManifestFont } from "./types-cqb0r3sP.cjs";
2
+ import { GeneratorFunctionResult } from "@power-plant/core";
3
+ import { Schema, Tokens } from "@razorwind/core/schema";
4
+ //#region src/manifest.d.ts
5
+ declare const DEFAULT_PREFIX = "design-system";
6
+ /**
7
+ * Kebab-case a CSS custom-property name the way Style Dictionary's
8
+ * `name/kebab` transform does, so `--acme-font-size-md` matches the CSS the
9
+ * `@razorwind/css` generator emits.
10
+ */
11
+ declare function kebabCase(value: string): string;
12
+ /** `icon-button` / `Icon Button` → `IconButton`. */
13
+ declare function pascalCase(value: string): string;
14
+ /**
15
+ * Lint category of a token, from its DTCG `$type` and path. Paths the
16
+ * Tamagui generator understands are classified by its `resolveTokenCategory`.
17
+ */
18
+ declare function resolveCategory(path: string, type?: string): TokenCategory | undefined;
19
+ /**
20
+ * Collect the schema's tokens: category, CSS variable, resolved value in the
21
+ * primary theme, alias flag and deprecation.
22
+ */
23
+ declare function collectManifestTokens(tokens: Tokens | Record<string, Tokens>, cssVarPrefix?: string): ManifestToken[];
24
+ /** Schema components with their JSX names, roles and deprecation. */
25
+ declare function collectManifestComponents(components: Schema["components"]): ManifestComponent[];
26
+ /** `arrow-right` → `ArrowRightIcon`, including icon aliases. */
27
+ declare function collectManifestIcons(icons: Schema["icons"]): string[];
28
+ /**
29
+ * Build the design-system manifest the generated ESLint module serializes:
30
+ * the schema's tokens, components, icons and fonts, plus the Tailwind and
31
+ * Tamagui guardrail themes when those integrations are enabled.
32
+ */
33
+ declare function buildManifest(spec: Schema, options?: EslintPluginOptions): DesignSystemManifest;
34
+ //#endregion
35
+ //#region src/index.d.ts
36
+ /**
37
+ * Render the ESLint plugin module that binds the design-system runtime to
38
+ * the schema-derived manifest.
39
+ */
40
+ declare function renderEslintPlugin(manifest: DesignSystemManifest, options?: Pick<EslintPluginOptions, "runtimeImport">): string;
41
+ /**
42
+ * Build the ESLint INSTALL.md for the generated plugin module, listing every
43
+ * rule with the default severity the schema gives it.
44
+ */
45
+ declare function renderEslintInstallMd(options: {
46
+ eslintPath: string;
47
+ manifest: DesignSystemManifest;
48
+ }): string;
49
+ /**
50
+ * Generate an ESLint plugin whose rules are derived from the schema's design
51
+ * tokens, components, icons and fonts.
52
+ */
53
+ declare function generateEslintPlugin(spec: Schema, options?: EslintPluginOptions): Promise<GeneratorFunctionResult<Schema, EslintPluginOptions>>;
54
+ /**
55
+ * Razorwind plugin: generate an ESLint plugin that keeps code aligned with
56
+ * the design system. It ports the `@atlaskit/eslint-plugin-design-system`
57
+ * rules onto the schema's own tokens and components, and bundles the
58
+ * `@razorwind/tailwindcss` (and optionally `@razorwind/tamagui`) guardrails.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * import { defineConfig } from "@razorwind/core";
63
+ * import eslint from "@razorwind/eslint";
64
+ *
65
+ * export default defineConfig({
66
+ * plugins: [eslint({ prefix: "acme" })]
67
+ * });
68
+ * ```
69
+ */
70
+ declare const _default: (options?: EslintPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
71
+ //#endregion
72
+ export { type ComponentRole, type CoreRuleId, DEFAULT_PREFIX, type DesignSystemManifest, type DesignSystemOptions, type DesignSystemRuleId, type DesignSystemSettings, type DesignSystemSeverity, type EslintPluginOptions, type ManifestComponent, type ManifestFont, type ManifestToken, type TokenCategory, type TokenReferenceStyle, buildManifest, collectManifestComponents, collectManifestIcons, collectManifestTokens, _default as default, generateEslintPlugin, kebabCase, pascalCase, renderEslintInstallMd, renderEslintPlugin, resolveCategory };
73
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/manifest.ts","../src/index.ts"],"mappings":";;;;cAiDa;;;;;;iBA2EG,UAAU;;iBAWV,WAAW;;;;;iBAgBX,gBACd,cACA,gBACC;;;;;iBAoHa,sBACd,QAAQ,SAAS,eAAe,SAChC,wBACC;;iBAsEa,0BACd,YAAY,uBACX;;iBA4Ca,qBAAqB,OAAO;;;;;;iBA6B5B,cACd,MAAM,QACN,UAAS,sBACR;;;;;;;iBCrWa,mBACd,UAAU,sBACV,UAAS,KAAK;;;;;iBAgCA,sBAAsB;EACpC;EACA,UAAU;;;;;;iBA6EU,qBACpB,MAAM,QACN,UAAS,sBACR,QAAQ,wBAAwB,QAAQ"}
@@ -0,0 +1,73 @@
1
+ import { a as DesignSystemRuleId, c as EslintPluginOptions, d as ManifestToken, f as TokenCategory, i as DesignSystemOptions, l as ManifestComponent, n as CoreRuleId, o as DesignSystemSettings, p as TokenReferenceStyle, r as DesignSystemManifest, s as DesignSystemSeverity, t as ComponentRole, u as ManifestFont } from "./types-BskEdv2u.mjs";
2
+ import { GeneratorFunctionResult } from "@power-plant/core";
3
+ import { Schema, Tokens } from "@razorwind/core/schema";
4
+ //#region src/manifest.d.ts
5
+ declare const DEFAULT_PREFIX = "design-system";
6
+ /**
7
+ * Kebab-case a CSS custom-property name the way Style Dictionary's
8
+ * `name/kebab` transform does, so `--acme-font-size-md` matches the CSS the
9
+ * `@razorwind/css` generator emits.
10
+ */
11
+ declare function kebabCase(value: string): string;
12
+ /** `icon-button` / `Icon Button` → `IconButton`. */
13
+ declare function pascalCase(value: string): string;
14
+ /**
15
+ * Lint category of a token, from its DTCG `$type` and path. Paths the
16
+ * Tamagui generator understands are classified by its `resolveTokenCategory`.
17
+ */
18
+ declare function resolveCategory(path: string, type?: string): TokenCategory | undefined;
19
+ /**
20
+ * Collect the schema's tokens: category, CSS variable, resolved value in the
21
+ * primary theme, alias flag and deprecation.
22
+ */
23
+ declare function collectManifestTokens(tokens: Tokens | Record<string, Tokens>, cssVarPrefix?: string): ManifestToken[];
24
+ /** Schema components with their JSX names, roles and deprecation. */
25
+ declare function collectManifestComponents(components: Schema["components"]): ManifestComponent[];
26
+ /** `arrow-right` → `ArrowRightIcon`, including icon aliases. */
27
+ declare function collectManifestIcons(icons: Schema["icons"]): string[];
28
+ /**
29
+ * Build the design-system manifest the generated ESLint module serializes:
30
+ * the schema's tokens, components, icons and fonts, plus the Tailwind and
31
+ * Tamagui guardrail themes when those integrations are enabled.
32
+ */
33
+ declare function buildManifest(spec: Schema, options?: EslintPluginOptions): DesignSystemManifest;
34
+ //#endregion
35
+ //#region src/index.d.ts
36
+ /**
37
+ * Render the ESLint plugin module that binds the design-system runtime to
38
+ * the schema-derived manifest.
39
+ */
40
+ declare function renderEslintPlugin(manifest: DesignSystemManifest, options?: Pick<EslintPluginOptions, "runtimeImport">): string;
41
+ /**
42
+ * Build the ESLint INSTALL.md for the generated plugin module, listing every
43
+ * rule with the default severity the schema gives it.
44
+ */
45
+ declare function renderEslintInstallMd(options: {
46
+ eslintPath: string;
47
+ manifest: DesignSystemManifest;
48
+ }): string;
49
+ /**
50
+ * Generate an ESLint plugin whose rules are derived from the schema's design
51
+ * tokens, components, icons and fonts.
52
+ */
53
+ declare function generateEslintPlugin(spec: Schema, options?: EslintPluginOptions): Promise<GeneratorFunctionResult<Schema, EslintPluginOptions>>;
54
+ /**
55
+ * Razorwind plugin: generate an ESLint plugin that keeps code aligned with
56
+ * the design system. It ports the `@atlaskit/eslint-plugin-design-system`
57
+ * rules onto the schema's own tokens and components, and bundles the
58
+ * `@razorwind/tailwindcss` (and optionally `@razorwind/tamagui`) guardrails.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * import { defineConfig } from "@razorwind/core";
63
+ * import eslint from "@razorwind/eslint";
64
+ *
65
+ * export default defineConfig({
66
+ * plugins: [eslint({ prefix: "acme" })]
67
+ * });
68
+ * ```
69
+ */
70
+ declare const _default: (options?: EslintPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
71
+ //#endregion
72
+ export { type ComponentRole, type CoreRuleId, DEFAULT_PREFIX, type DesignSystemManifest, type DesignSystemOptions, type DesignSystemRuleId, type DesignSystemSettings, type DesignSystemSeverity, type EslintPluginOptions, type ManifestComponent, type ManifestFont, type ManifestToken, type TokenCategory, type TokenReferenceStyle, buildManifest, collectManifestComponents, collectManifestIcons, collectManifestTokens, _default as default, generateEslintPlugin, kebabCase, pascalCase, renderEslintInstallMd, renderEslintPlugin, resolveCategory };
73
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/manifest.ts","../src/index.ts"],"mappings":""}
package/dist/index.mjs ADDED
@@ -0,0 +1,76 @@
1
+ import{t as e}from"./runtime-gmz9xNDY.mjs";import{definePlugin as t}from"@razorwind/core/plugin";import{createDocument as n,cssVarPrefixFromName as r,flattenTokens as i,formatTokenValue as a,isObject as o,isTokenLeaf as s,resolveTokenSets as c}from"@razorwind/core/utils";import{dirname as l,join as u}from"node:path";import{buildGuardrailTheme as d}from"@razorwind/tailwindcss/eslint";import{flattenThemeTokens as f}from"@razorwind/tailwindcss/generate";import{collectTamaguiVocabulary as p,flattenTokens as m,resolveTokenCategory as h}from"@razorwind/tamagui";import{buildGuardrailTheme as g}from"@razorwind/tamagui/eslint";const _=`design-system`,v=[`light`,`default`,`base`],y=/^\{([^}]+)\}$/,b=/\{([^}]+)\}/,x={color:`color`,shadow:`shadow`,typography:`typography`,fontFamily:`fontFamily`,fontWeight:`fontWeight`,duration:`duration`,cubicBezier:`easing`},S={color:`color`,space:`space`,size:`size`,radius:`radius`,zIndex:`zIndex`,fontSize:`fontSize`,fontWeight:`fontWeight`,shadow:`shadow`,insetShadow:`shadow`,dropShadow:`shadow`,textShadow:`shadow`,boxShadow:`shadow`},C={button:[`button`],"icon-button":[`iconbutton`],link:[`link`,`anchor`,`textlink`],checkbox:[`checkbox`],code:[`code`,`inlinecode`,`codeblock`],heading:[`heading`],image:[`image`,`img`],radio:[`radio`,`radiogroup`],range:[`slider`,`range`],select:[`select`,`nativeselect`],"text-input":[`input`,`textinput`,`textfield`],textarea:[`textarea`],text:[`text`,`typography`],"visually-hidden":[`visuallyhidden`,`sronly`,`screenreaderonly`],icon:[`icon`],primitive:[`box`,`stack`,`hstack`,`vstack`,`xstack`,`ystack`,`inline`,`flex`,`grid`,`center`]};function w(e){return e.replaceAll(/([\p{Ll}\d])(\p{Lu})/gu,`$1 $2`).replaceAll(/(\p{Lu})(\p{Lu}\p{Ll})/gu,`$1 $2`).split(/[^\p{L}\d]+/u).filter(Boolean).join(`-`).toLowerCase()}function T(e){return e.split(/[^a-z0-9]+/i).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function E(e){return e.toLowerCase().replaceAll(/[^a-z0-9]/g,``)}function D(e,t){let n=e.split(`.`).map(e=>e.toLowerCase()),r=(...e)=>e.some(e=>n.includes(e)),i=(e,t)=>n.some((r,i)=>r===e&&n[i+1]===t),a=t?x[t]:void 0;if(a)return a;if(r(`font-size`,`fontsize`)||i(`font`,`size`)||i(`text`,`size`))return`fontSize`;if(r(`font-weight`,`fontweight`)||i(`font`,`weight`))return`fontWeight`;if(r(`font-family`,`fontfamily`)||i(`font`,`family`))return`fontFamily`;if(r(`line-height`,`lineheight`,`leading`)||i(`line`,`height`))return`lineHeight`;if(r(`letter-spacing`,`letterspacing`,`tracking`)||i(`letter`,`spacing`))return`letterSpacing`;if(r(`border-width`,`borderwidth`,`stroke-width`,`strokewidth`,`outline-width`)||r(`border`,`stroke`,`outline`)&&r(`width`))return`borderWidth`;if(r(`duration`,`durations`,`delay`))return`duration`;if(r(`easing`,`ease`,`timing`,`cubic-bezier`))return`easing`;if(r(`opacity`,`opacities`))return`opacity`;let o=h(e,t);return o?S[o]:void 0}function O(e){let t=/* @__PURE__ */ new Map,n=(e,r,i)=>{if(!o(e))return;let a=e.$deprecated,c=a===!0||typeof a==`string`&&a.length>0?a:a===!1?void 0:i;if(s(e)){c&&!t.has(r.join(`.`))&&t.set(r.join(`.`),c);return}for(let[t,i]of Object.entries(e))t.startsWith(`$`)||n(i,[...r,t],c)};for(let t of c(e))n(t.tokens,[],void 0);return t}function k(e){if(e===void 0)return-1;let t=v.indexOf(e.toLowerCase());return t<0?v.length:t}function A(e,t){let n=i(e),r=O(e),o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map;for(let e of n){s.set(`${e.theme??``}:${e.path}`,e);let t=o.get(e.path);(!t||k(e.theme)<k(t.theme))&&o.set(e.path,e)}let c=(e,t=0)=>{let n=typeof e.value==`string`?y.exec(e.value)?.[1]:void 0;if(!n||t>10)return e;let r=s.get(`${e.theme??``}:${n}`)??o.get(n);return r?c(r,t+1):e};return[...o.values()].map(e=>{let n=c(e),i=e.type??n.type,s=a(n.value,i),l=r.get(e.path),u=typeof l==`string`?b.exec(l)?.[1]:void 0,d=D(e.path,i),f={path:e.path,cssVar:`--${w([t??``,...e.path.split(`.`)].join(` `))}`};return i&&(f.type=i),d&&(f.category=d),s&&!/^[[{]/.test(s)&&!s.includes(`var(`)&&(f.value=s),n!==e&&(f.alias=!0),l&&(f.deprecated=l),u&&o.has(u)&&(f.replacement=u),f}).sort((e,t)=>e.path.localeCompare(t.path,void 0,{numeric:!0}))}function j(e){let t=Object.values(e??{}),n=e=>[...new Set([e.title,e.name].map(T).filter(Boolean))];return t.map(e=>{let r=/* @__PURE__ */ new Set([E(e.name),E(e.title)]),i=Object.keys(C).filter(e=>C[e].some(e=>r.has(e))),a=e.tags?.some(e=>e.toLowerCase()===`deprecated`),o=(e.related??[]).flatMap(e=>{let r=t.find(t=>t.name===e);return r?[n(r)[0]]:[]}),s={name:e.name,jsx:n(e),roles:i};return a&&(s.deprecated=!0,o.length>0&&(s.replacements=o)),s}).sort((e,t)=>e.name.localeCompare(t.name))}function M(e){return[...new Set(Object.values(e??{}).flatMap(e=>[e.name,...e.aliases??[]].map(e=>T(e).replace(/Icon$/,``)).filter(Boolean).map(e=>`${e}Icon`)))].sort()}function N(e){return Object.values(e??{}).map(e=>({family:e.family??e.title??e.name,...e.role?{role:e.role}:{}}))}function P(e){return!!e&&c(e).length>0}function F(e,t={}){let n=e.name??`design-system`,i=t.prefix??`design-system`,a=t.cssVarPrefix===!1?void 0:t.cssVarPrefix??r(e.name),o=P(e.tokens)?A(e.tokens,a):[],s={name:n,version:`0.0.0`,prefix:i,...a?{cssVarPrefix:a}:{},themes:P(e.tokens)?c(e.tokens).map(e=>e.id).filter(e=>e!=="default"):[],tokens:o,components:j(e.components),icons:M(e.icons),fonts:N(e.fonts)},l=t.tailwind===!1?void 0:I(e,i);l&&(s.tailwind=l);let u=t.tamagui?L(e,i,t):void 0;return u&&(s.tamagui=u),s}function I(e,t){let n=d(P(e.tokens)?f(e.tokens):[],{fonts:e.fonts,name:e.name,prefix:t});return Object.keys(n.namespaces).length>0?n:void 0}function L(e,t,n){let r=typeof n.tamagui==`object`?n.tamagui:{},i=g(p(e,P(e.tokens)?m(e.tokens,{includeTypes:r.includeTypes}):[]),{name:e.name,prefix:t,shorthands:r.shorthands});return Object.keys(i.tokens).length>0?i:void 0}function R(e,t={}){let n=t.runtimeImport??`@razorwind/eslint/runtime`;return`// Generated by @razorwind/eslint. Do not edit by hand: re-run
2
+ // Razorwind generate when design tokens change.
3
+ //
4
+ // import designSystem from "./<path-to-this-file>";
5
+ // export default [
6
+ // ...,
7
+ // designSystem({ files: ["src/**/*.{ts,tsx}"] })
8
+ // ];
9
+
10
+ import { createDesignSystemPlugin } from ${JSON.stringify(n)};
11
+
12
+ export const manifest = ${JSON.stringify(e,null,2)};
13
+
14
+ const designSystem = createDesignSystemPlugin(manifest);
15
+
16
+ export const plugin = designSystem.plugin;
17
+ export const rules = designSystem.rules;
18
+ export const configs = designSystem.configs;
19
+ export const defaultSeverity = designSystem.defaultSeverity;
20
+
21
+ export default designSystem.config;
22
+ `}function z(t){let{eslintPath:n,manifest:r}=t,{rules:i,defaultSeverity:a}=e(r),o=Object.keys(i).map(e=>{let t=i[e];return`| \`${r.prefix}/${e}\` | ${a[e]??`off`} | ${t.meta.docs.description} |`}).join(`
23
+ `);return`# Installing the ESLint Design-System Plugin
24
+
25
+ Generated by \`@razorwind/eslint\` from ${[`${r.tokens.length} tokens`,`${r.components.length} components`,`${r.icons.length} icons`,`${r.fonts.length} fonts`].join(`, `)}.
26
+
27
+ ## Files
28
+
29
+ - \`${n}\` — ESLint flat-config plugin whose rules are derived from the design system
30
+
31
+ ## Setup
32
+
33
+ 1. Install the runtime the generated module imports:
34
+
35
+ \`\`\`bash
36
+ pnpm add -D @razorwind/eslint
37
+ \`\`\`
38
+
39
+ 2. Add the plugin to \`eslint.config.mjs\`:
40
+
41
+ \`\`\`js
42
+ import designSystem from "./${n}";
43
+
44
+ export default [
45
+ // ...
46
+ designSystem({
47
+ files: ["src/**/*.{ts,tsx}"],
48
+ // How suggested fixes reference tokens: "css-var" or "function".
49
+ tokenReference: "css-var",
50
+ // Only treat components imported from these modules as design-system components.
51
+ // componentModules: ["@acme/ui"],
52
+ severity: { "no-physical-properties": "error" }
53
+ })
54
+ ];
55
+ \`\`\`
56
+
57
+ 3. Deliberate one-offs carry an inline, reviewable exception:
58
+
59
+ \`\`\`ts
60
+ // eslint-disable-next-line ${r.prefix}/ensure-design-token-usage -- <reason>
61
+ \`\`\`
62
+
63
+ ## Rules
64
+
65
+ Token rules are enabled when the design system defines that token category,
66
+ and component rules when it defines the replacement component.
67
+
68
+ | Rule | Default | Description |
69
+ | ---- | ------- | ----------- |
70
+ ${o}
71
+
72
+ ## Regenerate
73
+
74
+ Re-run Razorwind generate when the design system changes so \`${n}\` stays in sync.
75
+ `}async function B(e,t={}){let r=F(e,t);if(r.tokens.length===0&&r.components.length===0&&r.icons.length===0)return{};let i=t.eslintPath??`eslint/design-system/index.mjs`,a=u(l(i),`INSTALL.md`),o={name:`razorwind-eslint`};return{[i]:n(i,R(r,t),o,void 0,`javascript`),[a]:n(a,t.installGuide??z({eslintPath:i,manifest:r}),o,void 0,`markdown`)}}var V=t(e=>({name:`eslint`,generate:async t=>B(t,e??{})}));export{_ as DEFAULT_PREFIX,F as buildManifest,j as collectManifestComponents,M as collectManifestIcons,A as collectManifestTokens,V as default,B as generateEslintPlugin,w as kebabCase,T as pascalCase,z as renderEslintInstallMd,R as renderEslintPlugin,D as resolveCategory};
76
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["buildTailwindTheme","buildTamaguiTheme","flattenTamaguiTokens","createDesignSystemPlugin","flattenTokens$1","buildGuardrailTheme$1","DEFAULT_PREFIX","PRIMARY_THEME_IDS","DTCG_ALIAS","DTCG_REFERENCE","TYPE_CATEGORIES","TAMAGUI_CATEGORIES","ROLE_NAMES","kebabCase","value","pascalCase","part","compact","resolveCategory","segments","path","segment","has","names","name","pair","first","index","second","byType","type","category","resolveTokenCategory","collectDeprecations","deprecated","walk","isObject","node","own","current","inherited","isTokenLeaf","key","child","set","resolveTokenSets","tokens","themeRank","theme","collectManifestTokens","rows","flattenTokens","deprecations","primary","byTheme","row","resolve","alias","depth","target","resolved","formatTokenValue","replacement","token","cssVarPrefix","a","b","collectManifestComponents","all","components","jsxNames","component","words","roles","role","tag","replacements","related","item","entry","collectManifestIcons","icons","icon","collectManifestFonts","fonts","font","hasTokens","buildManifest","spec","prefix","options","cssVarPrefixFromName","manifest","id","tailwind","buildTailwind","tamagui","buildTamagui","buildGuardrailTheme","flattenThemeTokens","collectTamaguiVocabulary","renderEslintPlugin","runtimeImport","renderEslintInstallMd","rules","rule","defaultSeverity","eslintPath","generateEslintPlugin","installPath","join","dirname","meta","createDocument","src_default","definePlugin"],"sources":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ let e=require("@razorwind/tailwindcss/eslint-runtime"),t=require("@razorwind/tamagui/eslint-runtime");function n(e){let t=/* @__PURE__ */ new Map;for(let n of e.components)for(let e of n.jsx)t.set(e,n);let n=t=>e.components.filter(e=>e.roles.some(e=>t.includes(e)));return{byJsx:t,icons:new Set(e.icons),has:(...e)=>n(e).length>0,names:(...e)=>n(e).map(e=>e.jsx[0]).join(`, `),deprecated:()=>e.components.filter(e=>e.deprecated)}}function r(e){let t=/* @__PURE__ */ new Map,n=e.componentModules,r=e=>!n||n.some(t=>t.endsWith(`/`)?e.startsWith(t):e===t||e.startsWith(`${t}/`)),i=e=>{if(!/^[A-Z]/.test(e))return;let i=t.get(e);if(!i)return n?void 0:{local:e,name:e};if(!i.namespace&&r(i.source))return{local:e,name:i.imported}};return{isDesignSystemModule:r,visitors:{ImportDeclaration(e){let n=String(e.source.value);for(let r of e.specifiers){let e=r.local.name,i=r.type===`ImportSpecifier`?r.imported.name??r.imported.value:e;t.set(e,{imported:String(i),source:n,namespace:r.type===`ImportNamespaceSpecifier`})}}},resolve(e){if(e?.type===`JSXIdentifier`||e?.type===`Identifier`)return i(e.name);if(e?.type===`JSXMemberExpression`){let n=e.object,i=e.property,a=n.type===`JSXIdentifier`?t.get(n.name):void 0;if(a?.namespace&&r(a.source))return{local:`${n.name}.${i.name}`,name:i.name}}}}}function i(e){let t=e??void 0;for(;t&&(t.type===`TSAsExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSNonNullExpression`||t.type===`TSTypeAssertion`);)t=t.expression;return t}function a(e){let t=e.key;if(t){if(!e.computed&&t.type===`Identifier`)return t.name;if(t.type===`Literal`&&typeof t.value==`string`)return t.value;if(t.type===`TemplateLiteral`&&t.expressions.length===0){let[e]=t.quasis;return e?.value?.cooked}}}function o(e){let t=i(e);if(t?.type===`Literal`&&typeof t.value==`string`)return t.value;if(t?.type===`TemplateLiteral`&&t.expressions.length===0){let[e]=t.quasis;return e?.value?.cooked}}function s(e){if(e?.type===`JSXIdentifier`)return e.name;if(e?.type===`JSXMemberExpression`){let t=s(e.object),n=s(e.property);return t&&n?`${t}.${n}`:void 0}}function c(e){return!!e&&/^[a-z]/.test(e)&&!e.includes(`.`)}function l(e,t){return e.attributes.find(e=>e.type===`JSXAttribute`&&e.name.type===`JSXIdentifier`&&e.name.name===t)}function u(e){let t=e.name;return t?.type===`JSXIdentifier`?t.name:void 0}function d(e){return e.attributes.some(e=>e.type===`JSXSpreadAttribute`)}function f(e){let t=e.value;if(!t)return{kind:`boolean`,value:!0};let n=t.type===`JSXExpressionContainer`?i(t.expression):t,r=o(n);if(r!==void 0)return{kind:`string`,value:r};if(n?.type===`Literal`){if(typeof n.value==`boolean`)return{kind:`boolean`,value:n.value};if(typeof n.value==`number`)return{kind:`number`,value:n.value}}return{kind:`dynamic`}}function p(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){let n=t[e];t[e]=n?e=>{n(e),r(e)}:r}return t}function m(e,t,n,r){if(e.range){if(e.type===`Literal`&&typeof e.value==`string`)return r.getText(e).slice(1,-1)===e.value?[e.range[0]+1+t,e.range[0]+1+n]:void 0;if(e.type===`TemplateElement`){let r=e.value;return r.raw===r.cooked?[e.range[0]+1+t,e.range[0]+1+n]:void 0}}}const ee=`razorwind-design-system`,te=[`token`],ne=[`css`,`cssMap`,`xcss`,`keyframes`,`injectGlobal`,`createGlobalStyle`],re=[`style`,`css`,`xcss`,`sx`],ie=[`style`,`css`,`xcss`,`sx`,`UNSAFE_style`,`UNSAFE_className`];function h(e){let t=e.settings?.[`razorwind-design-system`]??{};return{tokenFunctions:t.tokenFunctions??te,tokenReference:t.tokenReference??`css-var`,styleCallees:t.styleCallees??ne,styleAttributes:t.styleAttributes??re,unsafeStyleProps:t.unsafeStyleProps??ie,componentModules:t.componentModules,bannedImports:t.bannedImports??{}}}const ae=/* @__PURE__ */ new Set([`inherit`,`initial`,`unset`,`revert`,`revert-layer`,`auto`,`none`,`normal`,`transparent`,`currentcolor`]),g={aliceblue:`#f0f8ff`,antiquewhite:`#faebd7`,aqua:`#00ffff`,aquamarine:`#7fffd4`,azure:`#f0ffff`,beige:`#f5f5dc`,bisque:`#ffe4c4`,black:`#000000`,blanchedalmond:`#ffebcd`,blue:`#0000ff`,blueviolet:`#8a2be2`,brown:`#a52a2a`,burlywood:`#deb887`,cadetblue:`#5f9ea0`,chartreuse:`#7fff00`,chocolate:`#d2691e`,coral:`#ff7f50`,cornflowerblue:`#6495ed`,cornsilk:`#fff8dc`,crimson:`#dc143c`,cyan:`#00ffff`,darkblue:`#00008b`,darkcyan:`#008b8b`,darkgoldenrod:`#b8860b`,darkgray:`#a9a9a9`,darkgreen:`#006400`,darkgrey:`#a9a9a9`,darkkhaki:`#bdb76b`,darkmagenta:`#8b008b`,darkolivegreen:`#556b2f`,darkorange:`#ff8c00`,darkorchid:`#9932cc`,darkred:`#8b0000`,darksalmon:`#e9967a`,darkseagreen:`#8fbc8f`,darkslateblue:`#483d8b`,darkslategray:`#2f4f4f`,darkslategrey:`#2f4f4f`,darkturquoise:`#00ced1`,darkviolet:`#9400d3`,deeppink:`#ff1493`,deepskyblue:`#00bfff`,dimgray:`#696969`,dimgrey:`#696969`,dodgerblue:`#1e90ff`,firebrick:`#b22222`,floralwhite:`#fffaf0`,forestgreen:`#228b22`,fuchsia:`#ff00ff`,gainsboro:`#dcdcdc`,ghostwhite:`#f8f8ff`,gold:`#ffd700`,goldenrod:`#daa520`,gray:`#808080`,green:`#008000`,greenyellow:`#adff2f`,grey:`#808080`,honeydew:`#f0fff0`,hotpink:`#ff69b4`,indianred:`#cd5c5c`,indigo:`#4b0082`,ivory:`#fffff0`,khaki:`#f0e68c`,lavender:`#e6e6fa`,lavenderblush:`#fff0f5`,lawngreen:`#7cfc00`,lemonchiffon:`#fffacd`,lightblue:`#add8e6`,lightcoral:`#f08080`,lightcyan:`#e0ffff`,lightgoldenrodyellow:`#fafad2`,lightgray:`#d3d3d3`,lightgreen:`#90ee90`,lightgrey:`#d3d3d3`,lightpink:`#ffb6c1`,lightsalmon:`#ffa07a`,lightseagreen:`#20b2aa`,lightskyblue:`#87cefa`,lightslategray:`#778899`,lightslategrey:`#778899`,lightsteelblue:`#b0c4de`,lightyellow:`#ffffe0`,lime:`#00ff00`,limegreen:`#32cd32`,linen:`#faf0e6`,magenta:`#ff00ff`,maroon:`#800000`,mediumaquamarine:`#66cdaa`,mediumblue:`#0000cd`,mediumorchid:`#ba55d3`,mediumpurple:`#9370db`,mediumseagreen:`#3cb371`,mediumslateblue:`#7b68ee`,mediumspringgreen:`#00fa9a`,mediumturquoise:`#48d1cc`,mediumvioletred:`#c71585`,midnightblue:`#191970`,mintcream:`#f5fffa`,mistyrose:`#ffe4e1`,moccasin:`#ffe4b5`,navajowhite:`#ffdead`,navy:`#000080`,oldlace:`#fdf5e6`,olive:`#808000`,olivedrab:`#6b8e23`,orange:`#ffa500`,orangered:`#ff4500`,orchid:`#da70d6`,palegoldenrod:`#eee8aa`,palegreen:`#98fb98`,paleturquoise:`#afeeee`,palevioletred:`#db7093`,papayawhip:`#ffefd5`,peachpuff:`#ffdab9`,peru:`#cd853f`,pink:`#ffc0cb`,plum:`#dda0dd`,powderblue:`#b0e0e6`,purple:`#800080`,rebeccapurple:`#663399`,red:`#ff0000`,rosybrown:`#bc8f8f`,royalblue:`#4169e1`,saddlebrown:`#8b4513`,salmon:`#fa8072`,sandybrown:`#f4a460`,seagreen:`#2e8b57`,seashell:`#fff5ee`,sienna:`#a0522d`,silver:`#c0c0c0`,skyblue:`#87ceeb`,slateblue:`#6a5acd`,slategray:`#708090`,slategrey:`#708090`,snow:`#fffafa`,springgreen:`#00ff7f`,steelblue:`#4682b4`,tan:`#d2b48c`,teal:`#008080`,thistle:`#d8bfd8`,tomato:`#ff6347`,turquoise:`#40e0d0`,violet:`#ee82ee`,wheat:`#f5deb3`,white:`#ffffff`,whitesmoke:`#f5f5f5`,yellow:`#ffff00`,yellowgreen:`#9acd32`},oe={borderBottom:`borderBlockEnd`,borderBottomColor:`borderBlockEndColor`,borderBottomStyle:`borderBlockEndStyle`,borderBottomWidth:`borderBlockEndWidth`,borderTop:`borderBlockStart`,borderTopColor:`borderBlockStartColor`,borderTopStyle:`borderBlockStartStyle`,borderTopWidth:`borderBlockStartWidth`,borderRight:`borderInlineEnd`,borderRightColor:`borderInlineEndColor`,borderRightStyle:`borderInlineEndStyle`,borderRightWidth:`borderInlineEndWidth`,borderLeft:`borderInlineStart`,borderLeftColor:`borderInlineStartColor`,borderLeftStyle:`borderInlineStartStyle`,borderLeftWidth:`borderInlineStartWidth`,borderTopLeftRadius:`borderStartStartRadius`,borderBottomLeftRadius:`borderEndStartRadius`,borderTopRightRadius:`borderStartEndRadius`,borderBottomRightRadius:`borderEndEndRadius`,marginBottom:`marginBlockEnd`,marginTop:`marginBlockStart`,marginRight:`marginInlineEnd`,marginLeft:`marginInlineStart`,paddingBottom:`paddingBlockEnd`,paddingTop:`paddingBlockStart`,paddingRight:`paddingInlineEnd`,paddingLeft:`paddingInlineStart`,left:`insetInlineStart`,right:`insetInlineEnd`,top:`insetBlockStart`,bottom:`insetBlockEnd`},se={textAlign:{left:`start`,right:`end`},float:{left:`inline-start`,right:`inline-end`},clear:{left:`inline-start`,right:`inline-end`}};function _(e){return e.startsWith(`--`)?e:e.replace(/^-ms-/,`ms-`).replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function v(e){return e.startsWith(`--`)?e:e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`).replace(/^ms-/,`-ms-`)}function y(e){let t=[],n=0,r,i=-1,a=n=>{i>=0&&(t.push({text:e.slice(i,n),start:i}),i=-1)};for(let t=0;t<e.length;t++){let o=e[t];if(r)o===r&&(r=void 0);else if(o===`"`||o===`'`)r=o;else if(o===`(`)n++;else if(o===`)`)n=Math.max(n-1,0);else if(n===0&&(/\s/.test(o)||o===`,`)){a(t);continue}i<0&&(i=t)}return a(e.length),t}function ce(e){let t=[],n=0,r=``;for(let i of e)i===`(`?n++:i===`)`&&(n=Math.max(n-1,0)),i===`,`&&n===0?(t.push(r.trim()),r=``):r+=i;return t.push(r.trim()),t.filter(Boolean)}function le(e){return/^-?[a-z][\w-]*\(/i.test(e)}function b(e){return ae.has(e.toLowerCase())}function x(e){return/^(?:var|env)\(/i.test(e)}const ue=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/i;function S(e){let t=ue.exec(e.trim());if(t)return{value:Number(t[1]),unit:t[2].toLowerCase()}}const de=/* @__PURE__ */ new Set([`px`,`rem`,`em`,`pt`,`ch`,`ex`,`vh`,`vw`,`vmin`,`vmax`,`dvh`,`dvw`,`svh`,`svw`,`lvh`,`lvw`]);function fe(e){let t=S(e);return!!t&&t.value!==0&&(t.unit===``||de.has(t.unit))}function C(e){return String(Number(e.toFixed(4)))}function w(e){if(typeof e==`number`)return`${C(e)}px`;let t=S(e);if(t){if(t.value===0)return`0px`;switch(t.unit){case``:case`px`:return`${C(t.value)}px`;case`rem`:case`em`:return`${C(t.value*16)}px`;default:return`${C(t.value)}${t.unit}`}}}function T(e){let t=typeof e==`number`?e:Number(e);return Number.isFinite(t)&&String(e).trim()!==``?C(t):void 0}function E(e){let t=S(e);if(t){if(t.unit===`ms`)return t.value;if(t.unit===`s`)return t.value*1e3}}function pe(e){let t=typeof e==`number`?e:E(e);return t===void 0?void 0:`${C(t)}ms`}const me=/* @__PURE__ */ new Set([`ease`,`ease-in`,`ease-out`,`ease-in-out`,`linear`,`step-start`,`step-end`]);function D(e){return me.has(e.toLowerCase())||/^(?:cubic-bezier|steps|linear)\(/i.test(e)}function he(e){return e.toLowerCase().replaceAll(/\s+/g,``).replaceAll(`,`,`, `)}const ge={normal:`400`,bold:`700`};function _e(e){let t=String(e).trim().toLowerCase();return ge[t]??T(t)}function O(e){let[t=``]=e.split(`,`);return t.trim().replaceAll(/^["']|["']$/g,``).toLowerCase()}function ve(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function ye(e){return Math.min(255,Math.max(0,Math.round(e)))}function be(e,t){return`#${[...e,t*255].map(e=>ye(e).toString(16).padStart(2,`0`)).join(``)}`}function xe(e,t){return e.endsWith(`%`)?Number.parseFloat(e)/100*t:Number.parseFloat(e)}function Se(e){return e===void 0?1:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e)}function Ce(e,t,n){let r=(e%360+360)%360/360,i=t/100,a=n/100;if(i===0)return[a*255,a*255,a*255];let o=a<.5?a*(1+i):a+i-a*i,s=2*a-o,c=e=>{let t=e<0?e+1:e>1?e-1:e;return t<1/6?s+(o-s)*6*t:t<1/2?o:t<2/3?s+(o-s)*(2/3-t)*6:s};return[c(r+1/3)*255,c(r)*255,c(r-1/3)*255]}function we(e){let t=e.trim().toLowerCase();if(!t)return;let n=g[t];if(n)return`${n}ff`;let r=/^#([0-9a-f]{3,8})$/.exec(t)?.[1];if(r)return r.length===3||r.length===4?`#${[...r].map(e=>e+e).join(``).padEnd(8,`f`)}`:r.length===6||r.length===8?`#${r.padEnd(8,`f`)}`:void 0;let i=/^(rgba?|hsla?)\((.*)\)$/.exec(t);if(i){let[e=``,t]=i[2].split(`/`).map(e=>e.trim()),n=e.split(/[\s,]+/).filter(Boolean),r=t??n[3];return n.length<3?void 0:i[1].startsWith(`rgb`)?be(n.slice(0,3).map(e=>xe(e,255)),Se(r)):be(Ce(Number.parseFloat(n[0]),Number.parseFloat(n[1]),Number.parseFloat(n[2])),Se(r))}return t.replaceAll(/\s+/g,` `).replaceAll(/\s*,\s*/g,`, `)}const Te=new RegExp([String.raw`#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3,4})\b`,String.raw`\b(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\((?:[^()]|\([^()]*\))*\)`,String.raw`(?<![\w-])(?:${Object.keys(g).join(`|`)})(?![\w-])`].join(`|`),`gi`);function Ee(e){let t=[];for(let n of e.matchAll(/\b(?:var|env|url)\(/gi)){let r=0;for(let i=n.index;i<e.length;i++)if(e[i]===`(`)r++;else if(e[i]===`)`&&--r===0){t.push([n.index,i+1]);break}}return t}function De(e){let t=Ee(e);return[...e.matchAll(Te)].filter(e=>!t.some(([t,n])=>e.index>=t&&e.index<n)).map(e=>({text:e[0],start:e.index,end:e.index+e[0].length}))}const Oe={cssMap:`css-map`,keyframes:`keyframes`,injectGlobal:`global`,createGlobalStyle:`global`};function k(e){return Oe[e]??`css`}function A(e){let t=i(e);if(!t)return!1;if(t.type===`MemberExpression`){let e=t.object;return e.type===`Identifier`&&e.name===`styled`}if(t.type===`CallExpression`){let e=i(t.callee);if(e?.type===`Identifier`)return e.name===`styled`;if(e?.type===`MemberExpression`){let t=e.property;return t.type===`Identifier`&&(t.name===`attrs`||t.name===`withConfig`)&&A(e.object)}}return!1}function j(e){let t=i(e);if(t?.type===`MemberExpression`){let e=t.object,n=t.property;return e.type===`Identifier`&&e.name===`styled`&&n.type===`Identifier`?n.name:void 0}if(t?.type===`CallExpression`){let e=i(t.callee);if(e?.type===`Identifier`&&e.name===`styled`){let[e]=t.arguments;return e?.type===`Literal`&&typeof e.value==`string`?e.value:void 0}if(e?.type===`MemberExpression`)return j(e.object)}}function ke(e){let t=i(e.callee);return t?.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`StyleSheet`&&t.property.type===`Identifier`&&t.property.name===`create`}function M(e){let t=i(e);return t?.type===`ObjectExpression`?[t]:t?.type===`ArrayExpression`?t.elements.flatMap(e=>M(e??void 0)):[]}function N(e,t,n=h(e)){let r=new Set(n.styleAttributes),a=new Set(n.styleCallees),o=(e,n)=>{for(let r of e)t.object?.({node:r,kind:n})},s={};return t.object&&(s.JSXAttribute=e=>{let t=e.name;if(t.type!==`JSXIdentifier`||!r.has(t.name))return;let n=e.value;n?.type===`JSXExpressionContainer`&&o(M(n.expression),t.name===`style`?`inline`:`css`)},s.CallExpression=e=>{let t=e.arguments;if(A(e.callee)){o(t.flatMap(M),`styled`);return}if(ke(e)){o(M(t[0]),`stylesheet`);return}let n=i(e.callee);n?.type===`Identifier`&&a.has(n.name)&&o(t.flatMap(M),k(n.name))}),t.template&&(s.TaggedTemplateExpression=e=>{let n=e.quasi;if(A(e.tag)){t.template?.({node:n,tagged:e,kind:`styled`});return}let r=i(e.tag),o=r?.type===`Identifier`?r.name:``;a.has(o)&&t.template?.({node:n,tagged:e,kind:k(o)})}),s}function P(e){return e===`css-map`||e===`stylesheet`||e===`keyframes`}function F(e,t){let n=(e,r,o)=>{for(let s of e.properties){if(s.type!==`Property`)continue;let e=a(s),c=i(s.value);c?.type===`ObjectExpression`?n(c,o||e===void 0?r:[...r,e],!1):e!==void 0&&!o&&c&&t({name:_(e),property:s,key:s.key,value:s.value,selectors:r})}};n(e.node,[],P(e.kind))}function Ae(e,t){let n=(e,r)=>{for(let o of e.properties){let e=o.type===`Property`?i(o.value):void 0;if(e?.type!==`ObjectExpression`)continue;let s=a(o);!r&&s!==void 0&&t(s,o),n(e,!1)}};n(e.node,P(e.kind))}const I=`var(--__expression)`;function L(e,t=[]){let n=i(e);if(!n)return t;switch(n.type){case`Literal`:typeof n.value==`string`?t.push({node:n,kind:`string`,text:n.value}):typeof n.value==`number`&&t.push({node:n,kind:`number`,value:n.value});break;case`TemplateLiteral`:t.push({node:n,kind:`template`,text:n.quasis.map(e=>e.value.cooked??``).join(I)});break;case`UnaryExpression`:{let e=n.argument;n.operator===`-`&&e.type===`Literal`&&typeof e.value==`number`&&t.push({node:n,kind:`number`,value:-e.value});break}case`JSXExpressionContainer`:L(n.expression,t);break;case`ConditionalExpression`:L(n.consequent,t),L(n.alternate,t);break;case`LogicalExpression`:L(n.left,t),L(n.right,t)}return t}const je=/^-{0,2}[a-z][\w-]*$/i;function R(e){let t=e.quasis,n=[],r=``;t.forEach((e,i)=>{let a=e.value.cooked??``;n.push({start:r.length,end:r.length+a.length,quasi:e}),r+=a,i<t.length-1&&(r+=I)});let i=r.replaceAll(/\/\*[\s\S]*?\*\//g,e=>` `.repeat(e.length)),a=[],o=[],s=[],c=0,l,u=0,d=e=>{let t=i.slice(u,e),n=t.indexOf(`:`);if(n<0)return;let r=t.slice(0,n).trim();if(!je.test(r))return;let o=t.slice(n+1),c=o.trim();c&&a.push({name:_(r.toLowerCase()),property:r,value:c,propertyOffset:u+t.indexOf(r),valueOffset:u+n+1+(o.length-o.trimStart().length),selectors:[...s]})};for(let e=0;e<i.length;e++){let t=i[e];if(l){t===l&&(l=void 0);continue}if(t===`"`||t===`'`)l=t;else if(t===`(`)c++;else if(t===`)`)c=Math.max(c-1,0);else if(c===0&&t===`{`){let t=i.slice(u,e),n=t.trim();o.push({selector:n,offset:u+(t.length-t.trimStart().length),parents:[...s]}),s.push(n),u=e+1}else c===0&&t===`}`?(d(e),s.pop(),u=e+1):c===0&&t===`;`&&(d(e),u=e+1)}d(i.length);let f=e=>n.find(t=>e>=t.start&&e<=t.end)??n.at(-1);return{text:r,declarations:a,blocks:o,locate:e=>f(e).quasi,range(e,t){let n=f(e),r=n.quasi.value;if(t>n.end||r.raw!==r.cooked||!n.quasi.range)return;let i=n.quasi.range[0]+1-n.start;return[i+e,i+t]}}}const z=/* @__PURE__ */ new Set([``,`text`,`email`,`password`,`search`,`tel`,`url`,`number`]),B={"no-html-anchor":{role:`link`,tags:[`a`]},"no-html-button":{role:`button`,tags:[`button`]},"no-html-checkbox":{role:`checkbox`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`checkbox`])},"no-html-code":{role:`code`,tags:[`code`]},"no-html-heading":{role:`heading`,tags:[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`]},"no-html-image":{role:`image`,tags:[`img`]},"no-html-radio":{role:`radio`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`radio`])},"no-html-range":{role:`range`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`range`])},"no-html-select":{role:`select`,tags:[`select`]},"no-html-text-input":{role:`text-input`,tags:[`input`],inputTypes:z},"no-html-textarea":{role:`textarea`,tags:[`textarea`]}},V=/* @__PURE__ */ new Set([`div`,`span`,`article`,`aside`,`dialog`,`footer`,`header`,`li`,`main`,`nav`,`ol`,`section`,`ul`]),Me=[`label`,`aria-label`,`aria-labelledby`,`aria-hidden`,`title`,`alt`],Ne=[`disabled`,`readOnly`,`isDisabled`,`isReadOnly`];function H(e){let t=l(e,`type`);if(!t)return``;let n=f(t);return n.kind===`string`?n.value.toLowerCase():void 0}function Pe(e){let t=e.children;return t.length>0&&t.every(e=>e.type===`JSXText`||e.type===`JSXExpressionContainer`&&o(e.expression)!==void 0)}function U(e,t,n){let i=r(h(e));return p(i.visitors,{JSXOpeningElement(e){let r=s(e.name);if(c(r)){n({opening:e,tag:r,name:r});return}let a=i.resolve(e.name);if(!a)return;let o=t.byJsx.get(a.name),l=t.icons.has(a.name)?a.name:void 0;(o||l)&&n({opening:e,component:o,icon:l,name:a.local})}})}function W(e,...t){return!!e?.roles.some(e=>t.includes(e))}function Fe(e,t){let{role:n,tags:r,inputTypes:i}=B[e],a=new Set(r),o=t.names(n);return{meta:{type:`suggestion`,docs:{description:`Discourage raw HTML ${r.map(e=>`<${e}>`).join(`, `)} elements in favour of the design system's ${n} component`},messages:{noHtmlElement:`This <{{element}}> should be replaced with a design system component: ${o}`},schema:[]},create(e){let t=(t,n)=>e.report({node:t,messageId:`noHtmlElement`,data:{element:n}}),n=(e,n)=>{let r=j(n);r&&a.has(r)&&!i&&t(e,r)};return{JSXOpeningElement(e){let n=s(e.name);if(n&&a.has(n)){if(i){let t=H(e);if(t===void 0||!i.has(t))return}t(e,n)}},CallExpression(e){A(e.callee)&&n(e,e.callee)},TaggedTemplateExpression(e){A(e.tag)&&n(e,e.tag)}}}}}function Ie(e){return{...Object.fromEntries(Object.keys(B).map(t=>[t,Fe(t,e)])),"use-primitives-text":{meta:{type:`suggestion`,docs:{description:`Encourage the usage of the design system's text component`},messages:{useText:`This <{{element}}> holds text. Use the design system text component: ${e.names(`text`)}`},schema:[]},create(e){return{JSXElement(t){let n=t.openingElement,r=s(n.name);(r===`p`||r===`span`)&&Pe(t)&&e.report({node:n,messageId:`useText`,data:{element:r}})}}}},"prefer-primitives":{meta:{type:`suggestion`,docs:{description:`Increase awareness of the design system's layout primitives for styled host elements`},messages:{preferPrimitives:`This styled <{{element}}> may be replaceable with a design system primitive: ${e.names(`primitive`)}`},schema:[]},create(e){let t=h(e),n=(t,n)=>e.report({node:t,messageId:`preferPrimitives`,data:{element:n}}),r=(e,t)=>{let r=j(t);r&&V.has(r)&&n(e,r)};return{JSXOpeningElement(e){let r=s(e.name);r&&V.has(r)&&t.styleAttributes.some(t=>l(e,t))&&n(e,r)},CallExpression(e){A(e.callee)&&r(e,e.callee)},TaggedTemplateExpression(e){A(e.tag)&&r(e,e.tag)}}}},"no-unsafe-style-overrides":{meta:{type:`problem`,docs:{description:`Discourage unsafe style overrides on design system components`},messages:{noUnsafeOverrides:`The {{prop}} prop overrides {{component}}'s styles, which breaks when its internals change. Use its props and variants instead`,noUnsafeStyledOverride:`Wrapping {{component}} in styled() overrides its styles, which breaks when its internals change. Use its props and variants instead`},schema:[]},create(t){let n=h(t),a=new Set(n.unsafeStyleProps),o=r(n),s=n=>{let r=i(n);if(r?.type!==`CallExpression`)return;let a=i(r.callee),[s]=r.arguments;if(a?.type!==`Identifier`||a.name!==`styled`)return;let c=o.resolve(s);c&&e.byJsx.has(c.name)&&t.report({node:s,messageId:`noUnsafeStyledOverride`,data:{component:c.local}})};return p(U(t,e,({opening:e,component:n,name:r})=>{if(n)for(let n of e.attributes){let e=n.type===`JSXAttribute`?u(n):void 0;e&&a.has(e)&&t.report({node:n,messageId:`noUnsafeOverrides`,data:{prop:e,component:r}})}}),o.visitors,{CallExpression(e){s(e.callee)},TaggedTemplateExpression(e){s(e.tag)}})}},"icon-label":{meta:{type:`problem`,docs:{description:`Enforces accessible labelling of design system icons`},messages:{missingLabelProp:`<{{name}}> needs a label describing the icon, or aria-hidden / label="" when it is decorative`},schema:[]},create(t){return U(t,e,({opening:e,component:n,icon:r,name:i})=>{(r||W(n,`icon`))&&!d(e)&&!Me.some(t=>l(e,t))&&t.report({node:e,messageId:`missingLabelProp`,data:{name:i}})})}},"no-empty-icon-button-label":{meta:{type:`problem`,docs:{description:`Ensures icon-only design system buttons have an accessible name`},messages:{emptyLabel:`<{{name}}> renders only an icon; its {{attribute}} must describe the action`,missingLabel:`<{{name}}> renders only an icon; give it a label describing the action`},schema:[]},create(t){return U(t,e,({opening:e,component:n,name:r})=>{if(!W(n,`icon-button`))return;let i=[`label`,`aria-label`,`aria-labelledby`,`title`].map(t=>({attribute:t,node:l(e,t)})).filter(e=>e.node);if(i.length===0){d(e)||t.report({node:e,messageId:`missingLabel`,data:{name:r}});return}for(let e of i){let n=f(e.node);n.kind===`string`&&n.value.trim()===``&&t.report({node:e.node,messageId:`emptyLabel`,data:{name:r,attribute:e.attribute}})}})}},"no-placeholder":{meta:{type:`suggestion`,docs:{description:`Placeholders disappear on input; put format guidance in a helper message instead`},messages:{noPlaceholder:`Do not use placeholder on <{{name}}>. It disappears while typing and fails contrast; describe the expected format in a helper message`},schema:[]},create(t){return U(t,e,({opening:e,tag:n,component:r,name:i})=>{let a=n===`textarea`||n===`input`&&z.has(H(e)??``)||W(r,`text-input`,`textarea`)?l(e,`placeholder`):void 0;a&&t.report({node:a,messageId:`noPlaceholder`,data:{name:i}})})}},"no-readonly-or-disabled-inputs":{meta:{type:`suggestion`,docs:{description:`Inputs should be interactive; replace disabled and read-only inputs with a clearer pattern`},messages:{noDisabled:`{{attribute}} makes <{{name}}> non-interactive, which is hard to perceive and explain. Prefer validation messages or plain text`},schema:[]},create(t){return U(t,e,({opening:e,tag:n,component:r,name:i})=>{if(n===`input`||n===`textarea`||n===`select`||W(r,`text-input`,`textarea`,`select`,`checkbox`,`radio`,`range`))for(let n of Ne){let r=l(e,n),a=r?f(r):void 0;r&&a?.kind===`boolean`&&a.value&&t.report({node:r,messageId:`noDisabled`,data:{attribute:n,name:i}})}})}},"no-deprecated-imports":{meta:{type:`problem`,docs:{description:`Disallow importing deprecated design system components`},messages:{deprecatedComponent:`{{name}} is deprecated.{{replacement}}`},schema:[]},create(t){let n=r(h(t)),i=(e,n,r)=>t.report({node:e,messageId:`deprecatedComponent`,data:{name:r,replacement:n.replacements?.length?` Use ${n.replacements.join(` or `)} instead.`:``}});return p(n.visitors,{ImportDeclaration(t){if(n.isDesignSystemModule(String(t.source.value)))for(let n of t.specifiers){let t=n.type===`ImportSpecifier`?String(n.imported.name??n.imported.value):n.type===`ImportDefaultSpecifier`?String(n.local.name):void 0,r=t?e.byJsx.get(t):void 0;t&&r?.deprecated&&i(n,r,t)}},JSXOpeningElement(t){let r=t.name;if(r.type!==`JSXMemberExpression`)return;let a=n.resolve(r),o=a?e.byJsx.get(a.name):void 0;a&&o?.deprecated&&i(t,o,a.local)}})}},"no-banned-imports":{meta:{type:`problem`,docs:{description:`Disallow importing banned modules`},messages:{bannedImport:`"{{source}}" is banned: {{reason}}`},schema:[]},create(e){let t=Object.entries(h(e).bannedImports),n=n=>{let r=o(n);if(r===void 0)return;let i=t.find(([e])=>r===e||r.startsWith(`${e}/`));i&&e.report({node:n,messageId:`bannedImport`,data:{source:r,reason:i[1]}})};return t.length===0?{}:{ImportDeclaration:e=>n(e.source),ExportNamedDeclaration:e=>n(e.source),ExportAllDeclaration:e=>n(e.source),ImportExpression:e=>n(e.source),CallExpression(e){let t=i(e.callee);t?.type===`Identifier`&&t.name===`require`&&n(e.arguments[0])}}}}}}function G(e){return e.startsWith(`@`)?!0:e.split(`,`).map(e=>e.trim()).every(e=>e.startsWith(`:`)||e.startsWith(`&:`))}const K=/* @__PURE__ */ new Set([`css`,`css-map`,`styled`]);function Le(e,t){let n=t.sourceCode.getText(),r=e.range[0],i=n.lastIndexOf(`
2
+ `,r-1)+1,a=n.slice(i,r);return/^\s*$/.test(a)?a:void 0}const Re={Property:`all`,Duration:`0s`,TimingFunction:`ease`,Delay:`0s`},ze={Name:`none`,Duration:`0s`,TimingFunction:`ease`,Delay:`0s`,IterationCount:`1`,Direction:`normal`,FillMode:`none`,PlayState:`running`},Be=/* @__PURE__ */ new Set([`normal`,`reverse`,`alternate`,`alternate-reverse`]),Ve=/* @__PURE__ */ new Set([`none`,`forwards`,`backwards`,`both`]),He=/* @__PURE__ */ new Set([`running`,`paused`]);function Ue(e,t){let n={},r=(e,t)=>e in n?!1:(n[e]=t,!0);for(let{text:i}of y(e))E(i)===void 0?D(i)?r(`TimingFunction`,i):t===`transition`?r(`Property`,i):/^(?:\d+(?:\.\d+)?|infinite)$/.test(i)?r(`IterationCount`,i):Be.has(i)&&!(`Direction`in n)?r(`Direction`,i):Ve.has(i)&&!(`FillMode`in n)?r(`FillMode`,i):He.has(i)?r(`PlayState`,i):r(`Name`,i):r(`Duration`,i)||r(`Delay`,i);return n}function We(e,t){let n=e===`transition`?Re:ze,r=ce(t).map(t=>Ue(t,e));if(r.length===0)return;let i=e===`transition`?`Property`:`Name`;return Object.keys(n).filter(e=>e===i||r.some(t=>e in t)).map(t=>[`${e}${t}`,r.map(e=>e[t]??n[t]).join(`, `)])}const Ge={width:`1px`,height:`1px`,padding:`0`,position:`absolute`,border:`0`,clip:`rect(1px, 1px, 1px, 1px)`,overflow:`hidden`,whiteSpace:`nowrap`};function Ke(e){return e.length<5?0:e.filter(e=>e.key in Ge).reduce((e,t)=>e+(Ge[t.key]===t.value?1.5:.75),0)/e.length}function qe(e){let t=i(e);if(t?.type===`Literal`)return typeof t.value==`number`?t.value===0?`0`:`${t.value}px`:typeof t.value==`string`?t.value:void 0}function Je(e){return e.kind!==`css-map`&&e.kind!==`stylesheet`&&e.kind!==`keyframes`?[e.node]:e.node.properties.flatMap(e=>{let t=e.type===`Property`?i(e.value):void 0;return t?.type===`ObjectExpression`?[t]:[]})}function Ye(e){return/^[a-z_$][\w$]*$/i.test(e)?e:JSON.stringify(e)}function q(e,t){let n=`${t} `;return`{\n${e.map(([e,t])=>typeof t==`string`?`${n}${Ye(e)}: ${JSON.stringify(t)}`:`${n}${Ye(e)}: ${q(t,n)}`).join(`,
3
+ `)}\n${t}}`}function Xe(e,t,n){if(e.expressions.length>0)return;let r=R(e),i=({name:e,value:t})=>[e,t];if(t!==`keyframes`)return r.blocks.length===0?q(r.declarations.map(i),n):void 0;if(!(r.blocks.some(e=>e.parents.length>0)||r.declarations.some(e=>e.selectors.length!==1)))return q(r.blocks.map(e=>[e.selector,r.declarations.filter(t=>t.selectors[0]===e.selector).map(i)]),n)}function J(e,t){return{meta:{type:`suggestion`,docs:{description:t},messages:{noTaggedTemplate:`Use an object argument instead of a ${e} tagged template expression`},schema:[],fixable:`code`},create(t){let n=h(t),r=new Set(n.styleCallees.filter(e=>e!==`keyframes`&&e!==`injectGlobal`&&e!==`createGlobalStyle`));return{TaggedTemplateExpression(n){let a=i(n.tag),o=a?.type===`Identifier`?a.name:``;if(!(e===`styled`?A(a):e===`keyframes`?o===`keyframes`:r.has(o)))return;let s=Xe(n.quasi,e,Le(n,t)??``);t.report({node:n,messageId:`noTaggedTemplate`,fix:s?e=>e.replaceText(n,`${t.sourceCode.getText(n.tag)}(${s})`):void 0})}}}}}function Y(e,t,n){return{meta:{type:`problem`,docs:{description:t},messages:{noExport:n},schema:[]},create(t){let n=e(t),r=e=>{let t=i(e),r=i(t?.type===`TaggedTemplateExpression`?t.tag:t?.type===`CallExpression`?t.callee:void 0);return r?.type===`Identifier`&&n.has(r.name)},a=(e,n)=>{for(let r=t.sourceCode.getScope?.(e)??null;r;r=r.upper){let e=r.set.get(n);if(e)return e.defs[0]?.node}},o=e=>t.report({node:e,messageId:`noExport`});return{ExportNamedDeclaration(e){let t=e.declaration;if(t?.type===`VariableDeclaration`){for(let e of t.declarations)r(e.init)&&o(e);return}if(!(t||e.source))for(let t of e.specifiers){let n=t.local,i=n.type===`Identifier`?a(e,n.name):void 0;i?.type===`VariableDeclarator`&&r(i.init)&&o(t)}},ExportDefaultDeclaration(e){r(e.declaration)&&o(e)}}}}}function Ze(e){let t=e.names(`primitive`),n=e.names(`visually-hidden`);return{"no-margin":{meta:{type:`problem`,docs:{description:`Disallow using the margin CSS property`},messages:{noMargin:`margin breaks the component model. Control layout from the parent with ${t?`${t} or `:``}gap in a flex or grid container`},schema:[]},create(e){return N(e,{object:t=>F(t,t=>{t.name.startsWith(`margin`)&&e.report({node:t.property,messageId:`noMargin`})}),template(t){let n=R(t.node);for(let t of n.declarations)t.name.startsWith(`margin`)&&e.report({node:n.locate(t.propertyOffset),messageId:`noMargin`})}})}},"no-physical-properties":{meta:{type:`problem`,docs:{description:`Disallow physical properties and values in styles; use logical properties that follow the reading direction`},messages:{noPhysicalProperties:`Physical property {{physical}} does not follow the reading direction. Use {{logical}}`,noPhysicalValues:`{{property}}: "{{physical}}" does not follow the reading direction. Use "{{logical}}"`},schema:[],fixable:`code`},create(e){return N(e,{object:t=>F(t,t=>{let n=oe[t.name];if(n){let r=t.key,i=r.type===`Literal`&&String(r.value).includes(`-`)?v(n):n;e.report({node:r,messageId:`noPhysicalProperties`,data:{physical:t.name,logical:n},fix:t=>t.replaceText(r,r.type===`Literal`?`${e.sourceCode.getText(r)[0]}${i}${e.sourceCode.getText(r)[0]}`:i)})}let r=i(t.value),a=se[t.name],o=r?.type===`Literal`&&typeof r.value==`string`?a?.[r.value]:void 0;if(r&&o){let n=e.sourceCode.getText(r)[0];e.report({node:r,messageId:`noPhysicalValues`,data:{property:t.name,physical:String(r.value),logical:o},fix:e=>e.replaceText(r,`${n}${o}${n}`)})}}),template(t){let n=R(t.node);for(let t of n.declarations){let r=oe[t.name];if(r){let i=n.range(t.propertyOffset,t.propertyOffset+t.property.length);e.report({node:n.locate(t.propertyOffset),messageId:`noPhysicalProperties`,data:{physical:t.property,logical:v(r)},fix:i?e=>e.replaceTextRange(i,v(r)):void 0})}let i=se[t.name]?.[t.value];if(i){let r=n.range(t.valueOffset,t.valueOffset+t.value.length);e.report({node:n.locate(t.valueOffset),messageId:`noPhysicalValues`,data:{property:t.property,physical:t.value,logical:i},fix:r?e=>e.replaceTextRange(r,i):void 0})}}}})}},"no-nested-styles":{meta:{type:`problem`,docs:{description:`Disallows use of nested styles in CSS-in-JS styles`},messages:{noNestedStyles:`Nested selector "{{selector}}" changes unexpectedly when child markup changes. Style the element itself; only pseudo-classes, pseudo-elements and at-rules may nest`},schema:[]},create(e){return N(e,{object(t){K.has(t.kind)&&Ae(t,(t,n)=>{G(t)||e.report({node:n.key,messageId:`noNestedStyles`,data:{selector:t}})})},template(t){if(!K.has(t.kind))return;let n=R(t.node);for(let t of n.blocks)G(t.selector)||e.report({node:n.locate(t.offset),messageId:`noNestedStyles`,data:{selector:t.selector}})}})}},"no-exported-css":Y(e=>new Set(h(e).styleCallees.filter(e=>e!==`keyframes`&&e!==`injectGlobal`&&e!==`createGlobalStyle`)),`Forbid exporting css function calls, which is not statically analyzable`,`Exported css() styles cannot be statically analysed. Define styles next to the component that uses them`),"no-exported-keyframes":Y(()=>/* @__PURE__ */ new Set([`keyframes`]),`Forbid exporting keyframes function calls, which is not statically analyzable`,`Exported keyframes() cannot be statically analysed. Define keyframes next to the styles that use them`),"no-empty-styled-expression":{meta:{type:`problem`,docs:{description:`Forbids styled expressions with empty arguments; render the element directly`},messages:{noEmptyStyledExpression:`Empty styled expression. Render the element directly instead of styling it with nothing`},schema:[]},create(e){return{CallExpression(t){let n=t.arguments;A(t.callee)&&n.every(e=>e.type===`ObjectExpression`&&e.properties.length===0)&&e.report({node:t,messageId:`noEmptyStyledExpression`})}}}},"no-css-tagged-template-expression":J(`css`,`Disallows css tagged template expressions; use object styles`),"no-styled-tagged-template-expression":J(`styled`,`Disallows styled tagged template expressions; use object styles`),"no-keyframes-tagged-template-expression":J(`keyframes`,`Disallows keyframes tagged template expressions; use object styles`),"expand-motion-shorthand":{meta:{type:`suggestion`,docs:{description:`Expands transition and animation shorthands so each value can use a motion token`},messages:{expandShorthand:`Expand the {{property}} shorthand into longhand properties so durations and easings can use motion tokens`},schema:[],fixable:`code`},create(e){return N(e,{object:t=>F(t,t=>{if(t.name!==`transition`&&t.name!==`animation`)return;let n=i(t.value);if(n?.type!==`Literal`||typeof n.value!=`string`||/^(?:none|inherit|initial|unset|revert)$/i.test(n.value.trim()))return;let r=We(t.name,n.value);if(!r)return;let a=e.sourceCode.getText(n)[0],o=t.key.type===`Literal`?e.sourceCode.getText(t.key)[0]:void 0,s=Le(t.property,e),c=r.map(([e,t])=>`${o?`${o}${e}${o}`:e}: ${a}${t}${a}`).join(s===void 0?`, `:`,\n${s}`);e.report({node:t.property,messageId:`expandShorthand`,data:{property:t.name},fix:e=>e.replaceText(t.property,c)})})})}},"use-visually-hidden":{meta:{type:`suggestion`,docs:{description:`Enforce usage of the design system's visually hidden component over hand-rolled styles`},messages:{useVisuallyHidden:`Use ${n||`the visually hidden component`} instead of hand-rolled visually hidden styles`},schema:[]},create(e){return N(e,{object:t=>{for(let n of Je(t))Ke(n.properties.flatMap(e=>{let t=e.type===`Property`?a(e):void 0;return t===void 0?[]:[{key:_(t),value:qe(e.value)}]}))>.8&&e.report({node:n,messageId:`useVisuallyHidden`})},template(t){Ke(R(t.node).declarations.filter(e=>e.selectors.length===0).map(e=>({key:e.name,value:e.value})))>.8&&e.report({node:t.tagged,messageId:`useVisuallyHidden`})}})}}}}function Qe(e){return e.replaceAll(/[\\`]|\$\{/g,e=>`\\${e}`)}function $e(e,t,n,r){let i=e.node.parent?.type===`JSXAttribute`,a=e=>i?`{${e}}`:e;if(e.kind===`number`){let[r]=t;if(!r)return;let i=n===`function`?r.reference:JSON.stringify(r.reference);return t=>t.replaceText(e.node,a(i))}if(e.kind!==`string`)return;let o=r.getText(e.node),s=o[0];if(o.slice(1,-1)!==e.text)return;let c=t.toSorted((e,t)=>e.start-t.start);if(n===`css-var`){let t=e.text;for(let e of c.toReversed())t=t.slice(0,e.start)+e.reference+t.slice(e.end);return n=>n.replaceText(e.node,`${s}${t}${s}`)}let[l]=c;if(c.length===1&&l&&e.text.slice(0,l.start).trim()===``&&e.text.slice(l.end).trim()===``)return t=>t.replaceText(e.node,a(l.reference));let u=0,d=``;for(let t of c)d+=`${Qe(e.text.slice(u,t.start))}\${${t.reference}}`,u=t.end;return d+=Qe(e.text.slice(u)),t=>t.replaceText(e.node,a(`\`${d}\``))}function et(e,t,n){let r=t.map(t=>({range:e.range(t.start,t.end),text:n===`function`?`\${${t.reference}}`:t.reference}));if(!r.some(({range:e})=>!e))return e=>r.map(({range:t,text:n})=>e.replaceTextRange(t,n))}function X(e,t){return{meta:{type:`problem`,docs:{description:t.description},messages:{...t.messages,suggestToken:`Replace with {{reference}} ({{token}})`},schema:[],hasSuggestions:!0},create(n){let r=h(n),i=t.analyzer({settings:r,examples:t=>e.examples(t,r)}),a=(t,n)=>t.tokens.flatMap(t=>{let i=e.reference(t,r),a=n(i);return a?[{messageId:`suggestToken`,data:{reference:i,token:t.path},fix:a}]:[]}),o=(e,t)=>{let o=t.kind===`number`?t.value:t.text;for(let s of i(e,o))n.report({node:t.node,messageId:s.messageId,data:s.data,suggest:a(s,e=>$e(t,[{start:s.start,end:s.end,reference:e}],r.tokenReference,n.sourceCode))})},l=t.hostAttributes?{JSXAttribute(e){let n=e.name,r=e.parent;if(n.type===`JSXIdentifier`&&t.hostAttributes.has(n.name)&&c(s(r?.name)))for(let t of L(e.value))o(n.name,t)}}:{};return p(N(n,{object:e=>F(e,e=>{for(let t of L(e.value))o(e.name,t)}),template(e){let t=R(e.node);for(let e of t.declarations)for(let o of i(e.name,e.value)){let i=e.valueOffset+o.start,s=e.valueOffset+o.end;n.report({node:t.locate(i),messageId:o.messageId,data:o.data,suggest:a(o,e=>et(t,[{start:i,end:s,reference:e}],r.tokenReference))})}}},r),l)}}}function Z(e,t=fe){return typeof e==`number`?e===0?[]:[{start:0,end:String(e).length,text:String(e)}]:y(e).filter(({text:e})=>!x(e)&&!le(e)&&!b(e)&&t(e)).map(({text:e,start:t})=>({start:t,end:t+e.length,text:e}))}function Q(e){let t=String(e),n=t.length-t.trimStart().length;return{start:n,end:n+t.trim().length,text:t.trim()}}const tt=/^(?:color|fill|stroke|background\w*|border\w*|outline\w*|columnRule\w*|textDecoration\w*|\w+Color)$/,nt=/* @__PURE__ */ new Set([`boxShadow`,`textShadow`]),rt=/* @__PURE__ */ new Set([`fill`,`stroke`,`color`,`stopColor`,`floodColor`,`lightingColor`]),it=/* @__PURE__ */ new Set([...[`padding`,`margin`,`scrollPadding`,`scrollMargin`,`inset`].flatMap(e=>[``,`Top`,`Right`,`Bottom`,`Left`,`Block`,`BlockStart`,`BlockEnd`,`Inline`,`InlineStart`,`InlineEnd`,`Horizontal`,`Vertical`,`Start`,`End`].map(t=>`${e}${t}`)),`gap`,`rowGap`,`columnGap`,`gridGap`,`gridRowGap`,`gridColumnGap`,`top`,`right`,`bottom`,`left`]),at=`(?:Top|Right|Bottom|Left|Block|BlockStart|BlockEnd|Inline|InlineStart|InlineEnd)?`,ot=/^border(?:(?:Top|Bottom)(?:Left|Right)|(?:Start|End)(?:Start|End))?Radius$/,st=RegExp(`^(?:border${at}Width|outlineWidth)$`),ct=RegExp(`^(?:border${at}|outline)$`),lt=/* @__PURE__ */ new Set([`transitionDuration`,`transitionDelay`,`animationDuration`,`animationDelay`]),ut=/* @__PURE__ */ new Set([`transitionTimingFunction`,`animationTimingFunction`]);function dt(e){return De(e).length>0||Z(e).length>0}function ft(e){return/^(?:\d+|bold|bolder|lighter)$/i.test(e)}function pt(e){let t=E(e);return t!==void 0&&t!==0}const mt=/var\(\s*(--[\w-]+)\s*[,)]/g,ht=/* @__PURE__ */ new Set([`ImportDeclaration`,`ExportAllDeclaration`,`ExportNamedDeclaration`,`ImportExpression`]);function gt(e,t){let n=new Set(e.tokenFunctions),r=(e,n)=>{for(let r of n.matchAll(mt)){let i=r[1],a=n.indexOf(i,r.index);t({kind:`var`,node:e,name:i,start:a,end:a+i.length,whole:n.trim()===`var(${i})`})}};return{CallExpression(e){let r=i(e.callee);if(r?.type===`Identifier`&&n.has(r.name)){let[n]=e.arguments;t({kind:`call`,node:e,argument:n,path:o(n),name:r.name})}},Literal(e){let t=e.parent;typeof e.value==`string`&&!ht.has(t?.type??``)&&(t?.type!==`Property`||t.key!==e)&&r(e,e.value)},TemplateElement(e){r(e,e.value.cooked??``)}}}const _t=/* @__PURE__ */ new Set([`Property`,`JSXAttribute`,`JSXExpressionContainer`,`VariableDeclarator`,`ArrayExpression`,`ConditionalExpression`,`LogicalExpression`,`ReturnStatement`,`AssignmentExpression`,`CallExpression`]);function vt(e,t,n){if(!e||e.type!==`Literal`)return;let r=n.sourceCode.getText(e)[0];return n=>n.replaceText(e,`${r}${t}${r}`)}function yt(e,t){let n=new Set(e.fonts.map(e=>O(e.family))),r=e.fonts.map(e=>e.family).join(`, `);return{"ensure-design-token-usage":X(t,{description:`Enforces usage of design tokens rather than hard-coded colors and shadows`,messages:{hardCodedColor:`Hard-coded color "{{value}}". Use a color token{{examples}}; a missing value is a token to add, not a literal to inline`,hardCodedShadow:`Hard-coded shadow "{{value}}". Use a shadow token{{examples}}`},hostAttributes:rt,analyzer:({examples:e})=>{let n=e([`color`]),r=e([`shadow`]);return(e,i)=>{if(typeof i!=`string`||e.startsWith(`--`))return[];if(nt.has(e)){if(!t.has(`shadow`)||!dt(i))return[];let e=Q(i);return[{...e,messageId:`hardCodedShadow`,data:{value:e.text,examples:r},tokens:t.find([`shadow`],e.text)}]}return!t.has(`color`)||!tt.test(e)?[]:De(i).map(e=>({start:e.start,end:e.end,messageId:`hardCodedColor`,data:{value:e.text,examples:n},tokens:t.find([`color`],e.text)}))}}}),"use-tokens-space":X(t,{description:`Enforces usage of space design tokens rather than hard-coded values`,messages:{noRawSpacingValues:`Hard-coded spacing "{{value}}" in {{property}}. Use a space token{{examples}}`},analyzer:({examples:e})=>{let n=e([`space`]);return(e,r)=>it.has(e)?Z(r).map(r=>({...r,messageId:`noRawSpacingValues`,data:{value:r.text,property:e,examples:n},tokens:t.find([`space`],r.text)})):[]}}),"use-tokens-shape":X(t,{description:`Enforces usage of shape (radius and border width) design tokens rather than hard-coded values`,messages:{noRawRadiusValues:`Hard-coded radius "{{value}}" in {{property}}. Use a radius token{{examples}}; a new radius becomes a token first`,noRawBorderWidthValues:`Hard-coded border width "{{value}}" in {{property}}. Use a border width token{{examples}}`},analyzer:({examples:e})=>{let n=e([`radius`]),r=e([`borderWidth`]);return(e,i)=>{let a;return ot.test(e)?a=`radius`:(st.test(e)||ct.test(e))&&(a=`borderWidth`),!a||!t.has(a)?[]:Z(i).map(i=>({...i,messageId:a===`radius`?`noRawRadiusValues`:`noRawBorderWidthValues`,data:{value:i.text,property:e,examples:a===`radius`?n:r},tokens:t.find([a],i.text)}))}}}),"use-tokens-typography":X(t,{description:`Enforces usage of typography design tokens rather than hard-coded font values`,messages:{noRawTypographyValues:`Hard-coded {{property}} "{{value}}". Use a typography token{{examples}}`,unknownFontFamily:`Font family "{{value}}" is not part of the design system. Use one of: {{fonts}}`},analyzer:({examples:e})=>{let i=(n,r,i)=>({...n,messageId:`noRawTypographyValues`,data:{value:n.text,property:r,examples:e([...i,`typography`])},tokens:t.find(i,n.text)});return(e,a)=>{switch(e){case`fontSize`:case`letterSpacing`:return t.has(e)?Z(a).map(t=>i(t,e,[e])):[];case`lineHeight`:return t.has(`lineHeight`)?Z(a,e=>/^\d|^\./.test(e)).map(t=>i(t,e,[`lineHeight`])):[];case`fontWeight`:return t.has(`fontWeight`)?Z(a,ft).map(t=>i(t,e,[`fontWeight`])):[];case`fontFamily`:{if(typeof a!=`string`||b(a.trim())||x(a.trim()))return[];let o=Q(a);return t.has(`fontFamily`)?[i(o,e,[`fontFamily`])]:n.size>0&&!n.has(O(a))?[{...o,messageId:`unknownFontFamily`,data:{value:o.text,fonts:r},tokens:[]}]:[]}case`font`:return t.has(`typography`,`fontSize`,`fontFamily`)&&typeof a==`string`&&Z(a).length>0?[i(Q(a),e,[])]:[];default:return[]}}}}),"use-tokens-motion":X(t,{description:`Enforces usage of motion design tokens rather than hard-coded durations and easings`,messages:{noRawDuration:`Hard-coded duration "{{value}}" in {{property}}. Use a duration token{{examples}}`,noRawEasing:`Hard-coded easing "{{value}}" in {{property}}. Use an easing token{{examples}}`},analyzer:({examples:e})=>{let n=e([`duration`]),r=e([`easing`]);return(e,i)=>{if(typeof i!=`string`)return[];let a=e===`transition`||e===`animation`,o=[];return t.has(`duration`)&&(a||lt.has(e))&&o.push(...Z(i,pt).map(r=>({...r,messageId:`noRawDuration`,data:{value:r.text,property:e,examples:n},tokens:t.find([`duration`],r.text)}))),t.has(`easing`)&&(a||ut.has(e))&&o.push(...y(i).filter(({text:e})=>D(e)).map(({text:n,start:i})=>({start:i,end:i+n.length,messageId:`noRawEasing`,data:{value:n,property:e,examples:r},tokens:t.find([`easing`],n)}))),o.sort((e,t)=>e.start-t.start)}}}),"no-unsafe-design-token-usage":{meta:{type:`problem`,docs:{description:`Enforces design token usage is statically analyzable and references tokens the design system defines`},messages:{staticToken:`Pass the token path to {{name}}() as a string literal so it can be checked against the design system`,invalidToken:`The token "{{name}}" does not exist in the design system.{{suggestion}}`,invalidCssVar:`The custom property {{name}} is not a design-system token.{{suggestion}}`,directTokenUsage:`Access design tokens through the token function: {{reference}}`,suggestToken:`Replace with {{replacement}}`},schema:[],fixable:`code`,hasSuggestions:!0},create(e){let n=h(e),r=e=>e.length>0?` Did you mean ${e.map(e=>`"${e}"`).join(`, `)}?`:``;return gt(n,i=>{if(i.kind===`call`){if(i.path===void 0){e.report({node:i.argument??i.node,messageId:`staticToken`,data:{name:i.name}});return}if(!t.byPath.has(i.path)){let n=t.similar(i.path);e.report({node:i.argument,messageId:`invalidToken`,data:{name:i.path,suggestion:r(n)},suggest:n.flatMap(t=>{let n=vt(i.argument,t,e);return n?[{messageId:`suggestToken`,data:{replacement:t},fix:n}]:[]})})}return}if(!t.isDesignSystemVar(i.name))return;let a=t.byCssVar.get(i.name);if(!a){let n=t.similar(i.name,`cssVar`),a=m(i.node,i.start,i.end,e.sourceCode);e.report({node:i.node,messageId:`invalidCssVar`,data:{name:i.name,suggestion:r(n)},suggest:a?n.map(e=>({messageId:`suggestToken`,data:{replacement:e},fix:t=>t.replaceTextRange(a,e)})):[]});return}if(n.tokenReference!==`function`)return;let o=t.reference(a,n),s=i.node.parent,c=i.whole&&i.node.type===`Literal`&&_t.has(s?.type??``)&&(s?.type!==`Property`||s.key!==i.node);e.report({node:i.node,messageId:`directTokenUsage`,data:{reference:o},fix:c?e=>e.replaceText(i.node,s?.type===`JSXAttribute`?`{${o}}`:o):void 0})})}},"no-deprecated-design-token-usage":{meta:{type:`problem`,docs:{description:`Disallow using deprecated design tokens`},messages:{tokenDeprecated:`The token "{{name}}" is deprecated{{note}}`,tokenRenamed:`The token "{{name}}" is deprecated in favour of "{{replacement}}"`,suggestReplacement:`Replace with "{{replacement}}"`},schema:[],hasSuggestions:!0},create(e){return gt(h(e),n=>{let r=n.kind===`call`?n.path===void 0?void 0:t.byPath.get(n.path):t.byCssVar.get(n.name);if(!r?.deprecated)return;let i=r.replacement?t.byPath.get(r.replacement):void 0;if(!i){e.report({node:n.node,messageId:`tokenDeprecated`,data:{name:r.path,note:typeof r.deprecated==`string`?`: ${r.deprecated}`:``}});return}let a;if(n.kind===`call`)a=vt(n.argument,i.path,e);else{let t=m(n.node,n.start,n.end,e.sourceCode);a=t?e=>e.replaceTextRange(t,i.cssVar):void 0}e.report({node:n.node,messageId:`tokenRenamed`,data:{name:r.path,replacement:i.path},suggest:a?[{messageId:`suggestReplacement`,data:{replacement:n.kind===`call`?i.path:i.cssVar},fix:a}]:[]})})}}}}function bt(e,t){switch(e){case`color`:return typeof t==`string`?we(t):void 0;case`space`:case`size`:case`radius`:case`borderWidth`:case`fontSize`:case`letterSpacing`:return w(t);case`lineHeight`:return typeof t==`number`?T(t):T(t)??w(t);case`fontWeight`:return _e(t);case`fontFamily`:return O(String(t));case`duration`:return pe(t);case`easing`:return he(String(t));case`zIndex`:case`opacity`:return T(t);case`shadow`:case`typography`:return ve(String(t))}}function xt(e,t){let n=Array.from({length:t.length+1},(e,t)=>t);for(let r=1;r<=e.length;r++){let i=[r];for(let a=1;a<=t.length;a++)i[a]=Math.min(n[a]+1,i[a-1]+1,n[a-1]+(e[r-1]===t[a-1]?0:1));n=i}return n[t.length]}function St(e,t){return Number(!!t.alias)-Number(!!e.alias)||e.path.split(`.`).length-t.path.split(`.`).length||e.path.localeCompare(t.path,void 0,{numeric:!0})}function Ct(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Set;for(let o of e.tokens){if(t.set(o.path,o),n.set(o.cssVar,o),e.cssVarPrefix||a.add(o.cssVar.replace(/^--/,``).split(`-`)[0]),!o.category)continue;r.set(o.category,[...r.get(o.category)??[],o]);let s=o.value===void 0?void 0:bt(o.category,o.value);if(s!==void 0&&!o.deprecated){let e=`${o.category}:${s}`;i.set(e,[...i.get(e)??[],o])}}for(let e of i.values())e.sort(St);let o=(e,t)=>t.tokenReference===`function`?`${t.tokenFunctions[0]??`token`}(${JSON.stringify(e.path)})`:`var(${e.cssVar})`;return{byPath:t,byCssVar:n,has:(...e)=>e.some(e=>(r.get(e)?.length??0)>0),find(e,t){return e.flatMap(e=>{let n=bt(e,t);return n===void 0?[]:i.get(`${e}:${n}`)??[]}).slice(0,3)},isDesignSystemVar(t){let n=t.replace(/^--/,``);return e.cssVarPrefix?n.startsWith(`${e.cssVarPrefix}-`):a.has(n.split(`-`)[0])},similar(e,r=`path`){let i=r===`path`?[...t.keys()]:[...n.keys()],a=Math.max(2,Math.floor(e.length/5));return i.map(t=>({candidate:t,distance:xt(e,t)})).filter(({distance:e})=>e<=a).sort((e,t)=>e.distance-t.distance).slice(0,3).map(({candidate:e})=>e)},reference:o,examples(e,t){let n=e.flatMap(e=>r.get(e)??[]).filter(e=>!e.deprecated).toSorted(St);if(n.length===0)return``;let i=n.slice(0,4).map(e=>o(e,t));return` (e.g. ${i.join(`, `)}${n.length>i.length?`, …`:``})`}}}function $(e,t){return Object.fromEntries(Object.entries(t??{}).map(([t,n])=>[`${e}-${t}`,n]))}function wt(e,t,n){let r=(e,t)=>e?t:`off`,i=Object.fromEntries(Object.keys(B).map(e=>[e,r(n.has(B[e].role),`warn`)]));return{"ensure-design-token-usage":r(t.has(`color`,`shadow`),`error`),"no-unsafe-design-token-usage":r(e.tokens.length>0,`error`),"no-deprecated-design-token-usage":r(e.tokens.some(e=>e.deprecated),`warn`),"use-tokens-space":r(t.has(`space`),`warn`),"use-tokens-shape":r(t.has(`radius`,`borderWidth`),`warn`),"use-tokens-typography":r(t.has(`fontSize`,`fontWeight`,`fontFamily`,`lineHeight`,`letterSpacing`,`typography`)||e.fonts.length>0,`warn`),"use-tokens-motion":r(t.has(`duration`,`easing`),`warn`),"expand-motion-shorthand":`off`,"no-margin":r(n.has(`primitive`),`warn`),"no-physical-properties":`off`,"no-nested-styles":`warn`,"no-exported-css":`off`,"no-exported-keyframes":`off`,"no-empty-styled-expression":`off`,"no-css-tagged-template-expression":`off`,"no-styled-tagged-template-expression":`off`,"no-keyframes-tagged-template-expression":`off`,"no-banned-imports":`error`,"no-deprecated-imports":r(n.deprecated().length>0,`error`),"no-unsafe-style-overrides":r(e.components.length>0,`warn`),"prefer-primitives":`off`,"use-primitives-text":r(n.has(`text`),`warn`),"use-visually-hidden":r(n.has(`visually-hidden`),`warn`),"icon-label":r(e.icons.length>0||n.has(`icon`),`warn`),"no-empty-icon-button-label":r(n.has(`icon-button`),`error`),"no-placeholder":r(n.has(`text-input`,`textarea`),`warn`),"no-readonly-or-disabled-inputs":r(n.has(`text-input`,`textarea`,`select`,`checkbox`,`radio`,`range`),`warn`),...i}}const Tt=[`tokenFunctions`,`tokenReference`,`styleCallees`,`styleAttributes`,`unsafeStyleProps`,`componentModules`,`bannedImports`];function Et(r){let i=Ct(r),a=n(r),o=r.tailwind?(0,e.createGuardrails)(r.tailwind):void 0,s=r.tamagui?(0,t.createGuardrails)(r.tamagui):void 0,c={...yt(r,i),...Ze(a),...Ie(a),...$(`tailwind`,o?.rules),...$(`tamagui`,s?.rules)},l={...wt(r,i,a),...$(`tailwind`,o?.defaultSeverity),...$(`tamagui`,s?.defaultSeverity)},u={meta:{name:r.name,version:r.version},rules:c,configs:{}},d=(n={})=>{let{files:i=[`src/**/*.{js,jsx,ts,tsx}`],ignores:a=[],severity:d={}}=n,f={};for(let e of Object.keys(c))f[`${r.prefix}/${e}`]=d[e]??l[e]??`off`;let p={[ee]:Object.fromEntries(Tt.filter(e=>n[e]!==void 0).map(e=>[e,n[e]]))};return o&&(p[e.SETTINGS_KEY]={attributes:n.tailwind?.attributes??e.DEFAULT_CLASS_ATTRIBUTES,callees:n.tailwind?.callees??e.DEFAULT_CLASS_CALLEES}),s&&(p[t.SETTINGS_KEY]={...n.tamagui?.components?{components:n.tamagui.components}:{},callees:n.tamagui?.callees??t.DEFAULT_STYLED_CALLEES}),{files:i,ignores:a,plugins:{[r.prefix]:u},settings:p,rules:f}};return u.configs.recommended=d(),{plugin:u,rules:c,defaultSeverity:l,configs:u.configs,config:d}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Et}});
@@ -0,0 +1,4 @@
1
+ import{DEFAULT_CLASS_ATTRIBUTES as e,DEFAULT_CLASS_CALLEES as t,SETTINGS_KEY as n,createGuardrails as r}from"@razorwind/tailwindcss/eslint-runtime";import{DEFAULT_STYLED_CALLEES as i,SETTINGS_KEY as a,createGuardrails as o}from"@razorwind/tamagui/eslint-runtime";function s(e){let t=/* @__PURE__ */ new Map;for(let n of e.components)for(let e of n.jsx)t.set(e,n);let n=t=>e.components.filter(e=>e.roles.some(e=>t.includes(e)));return{byJsx:t,icons:new Set(e.icons),has:(...e)=>n(e).length>0,names:(...e)=>n(e).map(e=>e.jsx[0]).join(`, `),deprecated:()=>e.components.filter(e=>e.deprecated)}}function c(e){let t=/* @__PURE__ */ new Map,n=e.componentModules,r=e=>!n||n.some(t=>t.endsWith(`/`)?e.startsWith(t):e===t||e.startsWith(`${t}/`)),i=e=>{if(!/^[A-Z]/.test(e))return;let i=t.get(e);if(!i)return n?void 0:{local:e,name:e};if(!i.namespace&&r(i.source))return{local:e,name:i.imported}};return{isDesignSystemModule:r,visitors:{ImportDeclaration(e){let n=String(e.source.value);for(let r of e.specifiers){let e=r.local.name,i=r.type===`ImportSpecifier`?r.imported.name??r.imported.value:e;t.set(e,{imported:String(i),source:n,namespace:r.type===`ImportNamespaceSpecifier`})}}},resolve(e){if(e?.type===`JSXIdentifier`||e?.type===`Identifier`)return i(e.name);if(e?.type===`JSXMemberExpression`){let n=e.object,i=e.property,a=n.type===`JSXIdentifier`?t.get(n.name):void 0;if(a?.namespace&&r(a.source))return{local:`${n.name}.${i.name}`,name:i.name}}}}}function l(e){let t=e??void 0;for(;t&&(t.type===`TSAsExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSNonNullExpression`||t.type===`TSTypeAssertion`);)t=t.expression;return t}function u(e){let t=e.key;if(t){if(!e.computed&&t.type===`Identifier`)return t.name;if(t.type===`Literal`&&typeof t.value==`string`)return t.value;if(t.type===`TemplateLiteral`&&t.expressions.length===0){let[e]=t.quasis;return e?.value?.cooked}}}function d(e){let t=l(e);if(t?.type===`Literal`&&typeof t.value==`string`)return t.value;if(t?.type===`TemplateLiteral`&&t.expressions.length===0){let[e]=t.quasis;return e?.value?.cooked}}function f(e){if(e?.type===`JSXIdentifier`)return e.name;if(e?.type===`JSXMemberExpression`){let t=f(e.object),n=f(e.property);return t&&n?`${t}.${n}`:void 0}}function p(e){return!!e&&/^[a-z]/.test(e)&&!e.includes(`.`)}function m(e,t){return e.attributes.find(e=>e.type===`JSXAttribute`&&e.name.type===`JSXIdentifier`&&e.name.name===t)}function h(e){let t=e.name;return t?.type===`JSXIdentifier`?t.name:void 0}function g(e){return e.attributes.some(e=>e.type===`JSXSpreadAttribute`)}function _(e){let t=e.value;if(!t)return{kind:`boolean`,value:!0};let n=t.type===`JSXExpressionContainer`?l(t.expression):t,r=d(n);if(r!==void 0)return{kind:`string`,value:r};if(n?.type===`Literal`){if(typeof n.value==`boolean`)return{kind:`boolean`,value:n.value};if(typeof n.value==`number`)return{kind:`number`,value:n.value}}return{kind:`dynamic`}}function v(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){let n=t[e];t[e]=n?e=>{n(e),r(e)}:r}return t}function ee(e,t,n,r){if(e.range){if(e.type===`Literal`&&typeof e.value==`string`)return r.getText(e).slice(1,-1)===e.value?[e.range[0]+1+t,e.range[0]+1+n]:void 0;if(e.type===`TemplateElement`){let r=e.value;return r.raw===r.cooked?[e.range[0]+1+t,e.range[0]+1+n]:void 0}}}const te=`razorwind-design-system`,ne=[`token`],re=[`css`,`cssMap`,`xcss`,`keyframes`,`injectGlobal`,`createGlobalStyle`],ie=[`style`,`css`,`xcss`,`sx`],ae=[`style`,`css`,`xcss`,`sx`,`UNSAFE_style`,`UNSAFE_className`];function y(e){let t=e.settings?.[`razorwind-design-system`]??{};return{tokenFunctions:t.tokenFunctions??ne,tokenReference:t.tokenReference??`css-var`,styleCallees:t.styleCallees??re,styleAttributes:t.styleAttributes??ie,unsafeStyleProps:t.unsafeStyleProps??ae,componentModules:t.componentModules,bannedImports:t.bannedImports??{}}}const oe=/* @__PURE__ */ new Set([`inherit`,`initial`,`unset`,`revert`,`revert-layer`,`auto`,`none`,`normal`,`transparent`,`currentcolor`]),b={aliceblue:`#f0f8ff`,antiquewhite:`#faebd7`,aqua:`#00ffff`,aquamarine:`#7fffd4`,azure:`#f0ffff`,beige:`#f5f5dc`,bisque:`#ffe4c4`,black:`#000000`,blanchedalmond:`#ffebcd`,blue:`#0000ff`,blueviolet:`#8a2be2`,brown:`#a52a2a`,burlywood:`#deb887`,cadetblue:`#5f9ea0`,chartreuse:`#7fff00`,chocolate:`#d2691e`,coral:`#ff7f50`,cornflowerblue:`#6495ed`,cornsilk:`#fff8dc`,crimson:`#dc143c`,cyan:`#00ffff`,darkblue:`#00008b`,darkcyan:`#008b8b`,darkgoldenrod:`#b8860b`,darkgray:`#a9a9a9`,darkgreen:`#006400`,darkgrey:`#a9a9a9`,darkkhaki:`#bdb76b`,darkmagenta:`#8b008b`,darkolivegreen:`#556b2f`,darkorange:`#ff8c00`,darkorchid:`#9932cc`,darkred:`#8b0000`,darksalmon:`#e9967a`,darkseagreen:`#8fbc8f`,darkslateblue:`#483d8b`,darkslategray:`#2f4f4f`,darkslategrey:`#2f4f4f`,darkturquoise:`#00ced1`,darkviolet:`#9400d3`,deeppink:`#ff1493`,deepskyblue:`#00bfff`,dimgray:`#696969`,dimgrey:`#696969`,dodgerblue:`#1e90ff`,firebrick:`#b22222`,floralwhite:`#fffaf0`,forestgreen:`#228b22`,fuchsia:`#ff00ff`,gainsboro:`#dcdcdc`,ghostwhite:`#f8f8ff`,gold:`#ffd700`,goldenrod:`#daa520`,gray:`#808080`,green:`#008000`,greenyellow:`#adff2f`,grey:`#808080`,honeydew:`#f0fff0`,hotpink:`#ff69b4`,indianred:`#cd5c5c`,indigo:`#4b0082`,ivory:`#fffff0`,khaki:`#f0e68c`,lavender:`#e6e6fa`,lavenderblush:`#fff0f5`,lawngreen:`#7cfc00`,lemonchiffon:`#fffacd`,lightblue:`#add8e6`,lightcoral:`#f08080`,lightcyan:`#e0ffff`,lightgoldenrodyellow:`#fafad2`,lightgray:`#d3d3d3`,lightgreen:`#90ee90`,lightgrey:`#d3d3d3`,lightpink:`#ffb6c1`,lightsalmon:`#ffa07a`,lightseagreen:`#20b2aa`,lightskyblue:`#87cefa`,lightslategray:`#778899`,lightslategrey:`#778899`,lightsteelblue:`#b0c4de`,lightyellow:`#ffffe0`,lime:`#00ff00`,limegreen:`#32cd32`,linen:`#faf0e6`,magenta:`#ff00ff`,maroon:`#800000`,mediumaquamarine:`#66cdaa`,mediumblue:`#0000cd`,mediumorchid:`#ba55d3`,mediumpurple:`#9370db`,mediumseagreen:`#3cb371`,mediumslateblue:`#7b68ee`,mediumspringgreen:`#00fa9a`,mediumturquoise:`#48d1cc`,mediumvioletred:`#c71585`,midnightblue:`#191970`,mintcream:`#f5fffa`,mistyrose:`#ffe4e1`,moccasin:`#ffe4b5`,navajowhite:`#ffdead`,navy:`#000080`,oldlace:`#fdf5e6`,olive:`#808000`,olivedrab:`#6b8e23`,orange:`#ffa500`,orangered:`#ff4500`,orchid:`#da70d6`,palegoldenrod:`#eee8aa`,palegreen:`#98fb98`,paleturquoise:`#afeeee`,palevioletred:`#db7093`,papayawhip:`#ffefd5`,peachpuff:`#ffdab9`,peru:`#cd853f`,pink:`#ffc0cb`,plum:`#dda0dd`,powderblue:`#b0e0e6`,purple:`#800080`,rebeccapurple:`#663399`,red:`#ff0000`,rosybrown:`#bc8f8f`,royalblue:`#4169e1`,saddlebrown:`#8b4513`,salmon:`#fa8072`,sandybrown:`#f4a460`,seagreen:`#2e8b57`,seashell:`#fff5ee`,sienna:`#a0522d`,silver:`#c0c0c0`,skyblue:`#87ceeb`,slateblue:`#6a5acd`,slategray:`#708090`,slategrey:`#708090`,snow:`#fffafa`,springgreen:`#00ff7f`,steelblue:`#4682b4`,tan:`#d2b48c`,teal:`#008080`,thistle:`#d8bfd8`,tomato:`#ff6347`,turquoise:`#40e0d0`,violet:`#ee82ee`,wheat:`#f5deb3`,white:`#ffffff`,whitesmoke:`#f5f5f5`,yellow:`#ffff00`,yellowgreen:`#9acd32`},x={borderBottom:`borderBlockEnd`,borderBottomColor:`borderBlockEndColor`,borderBottomStyle:`borderBlockEndStyle`,borderBottomWidth:`borderBlockEndWidth`,borderTop:`borderBlockStart`,borderTopColor:`borderBlockStartColor`,borderTopStyle:`borderBlockStartStyle`,borderTopWidth:`borderBlockStartWidth`,borderRight:`borderInlineEnd`,borderRightColor:`borderInlineEndColor`,borderRightStyle:`borderInlineEndStyle`,borderRightWidth:`borderInlineEndWidth`,borderLeft:`borderInlineStart`,borderLeftColor:`borderInlineStartColor`,borderLeftStyle:`borderInlineStartStyle`,borderLeftWidth:`borderInlineStartWidth`,borderTopLeftRadius:`borderStartStartRadius`,borderBottomLeftRadius:`borderEndStartRadius`,borderTopRightRadius:`borderStartEndRadius`,borderBottomRightRadius:`borderEndEndRadius`,marginBottom:`marginBlockEnd`,marginTop:`marginBlockStart`,marginRight:`marginInlineEnd`,marginLeft:`marginInlineStart`,paddingBottom:`paddingBlockEnd`,paddingTop:`paddingBlockStart`,paddingRight:`paddingInlineEnd`,paddingLeft:`paddingInlineStart`,left:`insetInlineStart`,right:`insetInlineEnd`,top:`insetBlockStart`,bottom:`insetBlockEnd`},se={textAlign:{left:`start`,right:`end`},float:{left:`inline-start`,right:`inline-end`},clear:{left:`inline-start`,right:`inline-end`}};function S(e){return e.startsWith(`--`)?e:e.replace(/^-ms-/,`ms-`).replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function C(e){return e.startsWith(`--`)?e:e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`).replace(/^ms-/,`-ms-`)}function w(e){let t=[],n=0,r,i=-1,a=n=>{i>=0&&(t.push({text:e.slice(i,n),start:i}),i=-1)};for(let t=0;t<e.length;t++){let o=e[t];if(r)o===r&&(r=void 0);else if(o===`"`||o===`'`)r=o;else if(o===`(`)n++;else if(o===`)`)n=Math.max(n-1,0);else if(n===0&&(/\s/.test(o)||o===`,`)){a(t);continue}i<0&&(i=t)}return a(e.length),t}function ce(e){let t=[],n=0,r=``;for(let i of e)i===`(`?n++:i===`)`&&(n=Math.max(n-1,0)),i===`,`&&n===0?(t.push(r.trim()),r=``):r+=i;return t.push(r.trim()),t.filter(Boolean)}function le(e){return/^-?[a-z][\w-]*\(/i.test(e)}function ue(e){return oe.has(e.toLowerCase())}function de(e){return/^(?:var|env)\(/i.test(e)}const fe=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/i;function T(e){let t=fe.exec(e.trim());if(t)return{value:Number(t[1]),unit:t[2].toLowerCase()}}const pe=/* @__PURE__ */ new Set([`px`,`rem`,`em`,`pt`,`ch`,`ex`,`vh`,`vw`,`vmin`,`vmax`,`dvh`,`dvw`,`svh`,`svw`,`lvh`,`lvw`]);function me(e){let t=T(e);return!!t&&t.value!==0&&(t.unit===``||pe.has(t.unit))}function E(e){return String(Number(e.toFixed(4)))}function he(e){if(typeof e==`number`)return`${E(e)}px`;let t=T(e);if(t){if(t.value===0)return`0px`;switch(t.unit){case``:case`px`:return`${E(t.value)}px`;case`rem`:case`em`:return`${E(t.value*16)}px`;default:return`${E(t.value)}${t.unit}`}}}function D(e){let t=typeof e==`number`?e:Number(e);return Number.isFinite(t)&&String(e).trim()!==``?E(t):void 0}function O(e){let t=T(e);if(t){if(t.unit===`ms`)return t.value;if(t.unit===`s`)return t.value*1e3}}function ge(e){let t=typeof e==`number`?e:O(e);return t===void 0?void 0:`${E(t)}ms`}const _e=/* @__PURE__ */ new Set([`ease`,`ease-in`,`ease-out`,`ease-in-out`,`linear`,`step-start`,`step-end`]);function k(e){return _e.has(e.toLowerCase())||/^(?:cubic-bezier|steps|linear)\(/i.test(e)}function ve(e){return e.toLowerCase().replaceAll(/\s+/g,``).replaceAll(`,`,`, `)}const ye={normal:`400`,bold:`700`};function be(e){let t=String(e).trim().toLowerCase();return ye[t]??D(t)}function A(e){let[t=``]=e.split(`,`);return t.trim().replaceAll(/^["']|["']$/g,``).toLowerCase()}function xe(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function Se(e){return Math.min(255,Math.max(0,Math.round(e)))}function j(e,t){return`#${[...e,t*255].map(e=>Se(e).toString(16).padStart(2,`0`)).join(``)}`}function Ce(e,t){return e.endsWith(`%`)?Number.parseFloat(e)/100*t:Number.parseFloat(e)}function M(e){return e===void 0?1:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e)}function we(e,t,n){let r=(e%360+360)%360/360,i=t/100,a=n/100;if(i===0)return[a*255,a*255,a*255];let o=a<.5?a*(1+i):a+i-a*i,s=2*a-o,c=e=>{let t=e<0?e+1:e>1?e-1:e;return t<1/6?s+(o-s)*6*t:t<1/2?o:t<2/3?s+(o-s)*(2/3-t)*6:s};return[c(r+1/3)*255,c(r)*255,c(r-1/3)*255]}function N(e){let t=e.trim().toLowerCase();if(!t)return;let n=b[t];if(n)return`${n}ff`;let r=/^#([0-9a-f]{3,8})$/.exec(t)?.[1];if(r)return r.length===3||r.length===4?`#${[...r].map(e=>e+e).join(``).padEnd(8,`f`)}`:r.length===6||r.length===8?`#${r.padEnd(8,`f`)}`:void 0;let i=/^(rgba?|hsla?)\((.*)\)$/.exec(t);if(i){let[e=``,t]=i[2].split(`/`).map(e=>e.trim()),n=e.split(/[\s,]+/).filter(Boolean),r=t??n[3];return n.length<3?void 0:i[1].startsWith(`rgb`)?j(n.slice(0,3).map(e=>Ce(e,255)),M(r)):j(we(Number.parseFloat(n[0]),Number.parseFloat(n[1]),Number.parseFloat(n[2])),M(r))}return t.replaceAll(/\s+/g,` `).replaceAll(/\s*,\s*/g,`, `)}const Te=new RegExp([String.raw`#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3,4})\b`,String.raw`\b(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\((?:[^()]|\([^()]*\))*\)`,String.raw`(?<![\w-])(?:${Object.keys(b).join(`|`)})(?![\w-])`].join(`|`),`gi`);function Ee(e){let t=[];for(let n of e.matchAll(/\b(?:var|env|url)\(/gi)){let r=0;for(let i=n.index;i<e.length;i++)if(e[i]===`(`)r++;else if(e[i]===`)`&&--r===0){t.push([n.index,i+1]);break}}return t}function P(e){let t=Ee(e);return[...e.matchAll(Te)].filter(e=>!t.some(([t,n])=>e.index>=t&&e.index<n)).map(e=>({text:e[0],start:e.index,end:e.index+e[0].length}))}const De={cssMap:`css-map`,keyframes:`keyframes`,injectGlobal:`global`,createGlobalStyle:`global`};function F(e){return De[e]??`css`}function I(e){let t=l(e);if(!t)return!1;if(t.type===`MemberExpression`){let e=t.object;return e.type===`Identifier`&&e.name===`styled`}if(t.type===`CallExpression`){let e=l(t.callee);if(e?.type===`Identifier`)return e.name===`styled`;if(e?.type===`MemberExpression`){let t=e.property;return t.type===`Identifier`&&(t.name===`attrs`||t.name===`withConfig`)&&I(e.object)}}return!1}function L(e){let t=l(e);if(t?.type===`MemberExpression`){let e=t.object,n=t.property;return e.type===`Identifier`&&e.name===`styled`&&n.type===`Identifier`?n.name:void 0}if(t?.type===`CallExpression`){let e=l(t.callee);if(e?.type===`Identifier`&&e.name===`styled`){let[e]=t.arguments;return e?.type===`Literal`&&typeof e.value==`string`?e.value:void 0}if(e?.type===`MemberExpression`)return L(e.object)}}function Oe(e){let t=l(e.callee);return t?.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`StyleSheet`&&t.property.type===`Identifier`&&t.property.name===`create`}function R(e){let t=l(e);return t?.type===`ObjectExpression`?[t]:t?.type===`ArrayExpression`?t.elements.flatMap(e=>R(e??void 0)):[]}function z(e,t,n=y(e)){let r=new Set(n.styleAttributes),i=new Set(n.styleCallees),a=(e,n)=>{for(let r of e)t.object?.({node:r,kind:n})},o={};return t.object&&(o.JSXAttribute=e=>{let t=e.name;if(t.type!==`JSXIdentifier`||!r.has(t.name))return;let n=e.value;n?.type===`JSXExpressionContainer`&&a(R(n.expression),t.name===`style`?`inline`:`css`)},o.CallExpression=e=>{let t=e.arguments;if(I(e.callee)){a(t.flatMap(R),`styled`);return}if(Oe(e)){a(R(t[0]),`stylesheet`);return}let n=l(e.callee);n?.type===`Identifier`&&i.has(n.name)&&a(t.flatMap(R),F(n.name))}),t.template&&(o.TaggedTemplateExpression=e=>{let n=e.quasi;if(I(e.tag)){t.template?.({node:n,tagged:e,kind:`styled`});return}let r=l(e.tag),a=r?.type===`Identifier`?r.name:``;i.has(a)&&t.template?.({node:n,tagged:e,kind:F(a)})}),o}function ke(e){return e===`css-map`||e===`stylesheet`||e===`keyframes`}function B(e,t){let n=(e,r,i)=>{for(let a of e.properties){if(a.type!==`Property`)continue;let e=u(a),o=l(a.value);o?.type===`ObjectExpression`?n(o,i||e===void 0?r:[...r,e],!1):e!==void 0&&!i&&o&&t({name:S(e),property:a,key:a.key,value:a.value,selectors:r})}};n(e.node,[],ke(e.kind))}function Ae(e,t){let n=(e,r)=>{for(let i of e.properties){let e=i.type===`Property`?l(i.value):void 0;if(e?.type!==`ObjectExpression`)continue;let a=u(i);!r&&a!==void 0&&t(a,i),n(e,!1)}};n(e.node,ke(e.kind))}const je=`var(--__expression)`;function V(e,t=[]){let n=l(e);if(!n)return t;switch(n.type){case`Literal`:typeof n.value==`string`?t.push({node:n,kind:`string`,text:n.value}):typeof n.value==`number`&&t.push({node:n,kind:`number`,value:n.value});break;case`TemplateLiteral`:t.push({node:n,kind:`template`,text:n.quasis.map(e=>e.value.cooked??``).join(je)});break;case`UnaryExpression`:{let e=n.argument;n.operator===`-`&&e.type===`Literal`&&typeof e.value==`number`&&t.push({node:n,kind:`number`,value:-e.value});break}case`JSXExpressionContainer`:V(n.expression,t);break;case`ConditionalExpression`:V(n.consequent,t),V(n.alternate,t);break;case`LogicalExpression`:V(n.left,t),V(n.right,t)}return t}const Me=/^-{0,2}[a-z][\w-]*$/i;function H(e){let t=e.quasis,n=[],r=``;t.forEach((e,i)=>{let a=e.value.cooked??``;n.push({start:r.length,end:r.length+a.length,quasi:e}),r+=a,i<t.length-1&&(r+=je)});let i=r.replaceAll(/\/\*[\s\S]*?\*\//g,e=>` `.repeat(e.length)),a=[],o=[],s=[],c=0,l,u=0,d=e=>{let t=i.slice(u,e),n=t.indexOf(`:`);if(n<0)return;let r=t.slice(0,n).trim();if(!Me.test(r))return;let o=t.slice(n+1),c=o.trim();c&&a.push({name:S(r.toLowerCase()),property:r,value:c,propertyOffset:u+t.indexOf(r),valueOffset:u+n+1+(o.length-o.trimStart().length),selectors:[...s]})};for(let e=0;e<i.length;e++){let t=i[e];if(l){t===l&&(l=void 0);continue}if(t===`"`||t===`'`)l=t;else if(t===`(`)c++;else if(t===`)`)c=Math.max(c-1,0);else if(c===0&&t===`{`){let t=i.slice(u,e),n=t.trim();o.push({selector:n,offset:u+(t.length-t.trimStart().length),parents:[...s]}),s.push(n),u=e+1}else c===0&&t===`}`?(d(e),s.pop(),u=e+1):c===0&&t===`;`&&(d(e),u=e+1)}d(i.length);let f=e=>n.find(t=>e>=t.start&&e<=t.end)??n.at(-1);return{text:r,declarations:a,blocks:o,locate:e=>f(e).quasi,range(e,t){let n=f(e),r=n.quasi.value;if(t>n.end||r.raw!==r.cooked||!n.quasi.range)return;let i=n.quasi.range[0]+1-n.start;return[i+e,i+t]}}}const U=/* @__PURE__ */ new Set([``,`text`,`email`,`password`,`search`,`tel`,`url`,`number`]),W={"no-html-anchor":{role:`link`,tags:[`a`]},"no-html-button":{role:`button`,tags:[`button`]},"no-html-checkbox":{role:`checkbox`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`checkbox`])},"no-html-code":{role:`code`,tags:[`code`]},"no-html-heading":{role:`heading`,tags:[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`]},"no-html-image":{role:`image`,tags:[`img`]},"no-html-radio":{role:`radio`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`radio`])},"no-html-range":{role:`range`,tags:[`input`],inputTypes:/* @__PURE__ */ new Set([`range`])},"no-html-select":{role:`select`,tags:[`select`]},"no-html-text-input":{role:`text-input`,tags:[`input`],inputTypes:U},"no-html-textarea":{role:`textarea`,tags:[`textarea`]}},Ne=/* @__PURE__ */ new Set([`div`,`span`,`article`,`aside`,`dialog`,`footer`,`header`,`li`,`main`,`nav`,`ol`,`section`,`ul`]),Pe=[`label`,`aria-label`,`aria-labelledby`,`aria-hidden`,`title`,`alt`],Fe=[`disabled`,`readOnly`,`isDisabled`,`isReadOnly`];function Ie(e){let t=m(e,`type`);if(!t)return``;let n=_(t);return n.kind===`string`?n.value.toLowerCase():void 0}function Le(e){let t=e.children;return t.length>0&&t.every(e=>e.type===`JSXText`||e.type===`JSXExpressionContainer`&&d(e.expression)!==void 0)}function G(e,t,n){let r=c(y(e));return v(r.visitors,{JSXOpeningElement(e){let i=f(e.name);if(p(i)){n({opening:e,tag:i,name:i});return}let a=r.resolve(e.name);if(!a)return;let o=t.byJsx.get(a.name),s=t.icons.has(a.name)?a.name:void 0;(o||s)&&n({opening:e,component:o,icon:s,name:a.local})}})}function K(e,...t){return!!e?.roles.some(e=>t.includes(e))}function Re(e,t){let{role:n,tags:r,inputTypes:i}=W[e],a=new Set(r),o=t.names(n);return{meta:{type:`suggestion`,docs:{description:`Discourage raw HTML ${r.map(e=>`<${e}>`).join(`, `)} elements in favour of the design system's ${n} component`},messages:{noHtmlElement:`This <{{element}}> should be replaced with a design system component: ${o}`},schema:[]},create(e){let t=(t,n)=>e.report({node:t,messageId:`noHtmlElement`,data:{element:n}}),n=(e,n)=>{let r=L(n);r&&a.has(r)&&!i&&t(e,r)};return{JSXOpeningElement(e){let n=f(e.name);if(n&&a.has(n)){if(i){let t=Ie(e);if(t===void 0||!i.has(t))return}t(e,n)}},CallExpression(e){I(e.callee)&&n(e,e.callee)},TaggedTemplateExpression(e){I(e.tag)&&n(e,e.tag)}}}}}function ze(e){return{...Object.fromEntries(Object.keys(W).map(t=>[t,Re(t,e)])),"use-primitives-text":{meta:{type:`suggestion`,docs:{description:`Encourage the usage of the design system's text component`},messages:{useText:`This <{{element}}> holds text. Use the design system text component: ${e.names(`text`)}`},schema:[]},create(e){return{JSXElement(t){let n=t.openingElement,r=f(n.name);(r===`p`||r===`span`)&&Le(t)&&e.report({node:n,messageId:`useText`,data:{element:r}})}}}},"prefer-primitives":{meta:{type:`suggestion`,docs:{description:`Increase awareness of the design system's layout primitives for styled host elements`},messages:{preferPrimitives:`This styled <{{element}}> may be replaceable with a design system primitive: ${e.names(`primitive`)}`},schema:[]},create(e){let t=y(e),n=(t,n)=>e.report({node:t,messageId:`preferPrimitives`,data:{element:n}}),r=(e,t)=>{let r=L(t);r&&Ne.has(r)&&n(e,r)};return{JSXOpeningElement(e){let r=f(e.name);r&&Ne.has(r)&&t.styleAttributes.some(t=>m(e,t))&&n(e,r)},CallExpression(e){I(e.callee)&&r(e,e.callee)},TaggedTemplateExpression(e){I(e.tag)&&r(e,e.tag)}}}},"no-unsafe-style-overrides":{meta:{type:`problem`,docs:{description:`Discourage unsafe style overrides on design system components`},messages:{noUnsafeOverrides:`The {{prop}} prop overrides {{component}}'s styles, which breaks when its internals change. Use its props and variants instead`,noUnsafeStyledOverride:`Wrapping {{component}} in styled() overrides its styles, which breaks when its internals change. Use its props and variants instead`},schema:[]},create(t){let n=y(t),r=new Set(n.unsafeStyleProps),i=c(n),a=n=>{let r=l(n);if(r?.type!==`CallExpression`)return;let a=l(r.callee),[o]=r.arguments;if(a?.type!==`Identifier`||a.name!==`styled`)return;let s=i.resolve(o);s&&e.byJsx.has(s.name)&&t.report({node:o,messageId:`noUnsafeStyledOverride`,data:{component:s.local}})};return v(G(t,e,({opening:e,component:n,name:i})=>{if(n)for(let n of e.attributes){let e=n.type===`JSXAttribute`?h(n):void 0;e&&r.has(e)&&t.report({node:n,messageId:`noUnsafeOverrides`,data:{prop:e,component:i}})}}),i.visitors,{CallExpression(e){a(e.callee)},TaggedTemplateExpression(e){a(e.tag)}})}},"icon-label":{meta:{type:`problem`,docs:{description:`Enforces accessible labelling of design system icons`},messages:{missingLabelProp:`<{{name}}> needs a label describing the icon, or aria-hidden / label="" when it is decorative`},schema:[]},create(t){return G(t,e,({opening:e,component:n,icon:r,name:i})=>{(r||K(n,`icon`))&&!g(e)&&!Pe.some(t=>m(e,t))&&t.report({node:e,messageId:`missingLabelProp`,data:{name:i}})})}},"no-empty-icon-button-label":{meta:{type:`problem`,docs:{description:`Ensures icon-only design system buttons have an accessible name`},messages:{emptyLabel:`<{{name}}> renders only an icon; its {{attribute}} must describe the action`,missingLabel:`<{{name}}> renders only an icon; give it a label describing the action`},schema:[]},create(t){return G(t,e,({opening:e,component:n,name:r})=>{if(!K(n,`icon-button`))return;let i=[`label`,`aria-label`,`aria-labelledby`,`title`].map(t=>({attribute:t,node:m(e,t)})).filter(e=>e.node);if(i.length===0){g(e)||t.report({node:e,messageId:`missingLabel`,data:{name:r}});return}for(let e of i){let n=_(e.node);n.kind===`string`&&n.value.trim()===``&&t.report({node:e.node,messageId:`emptyLabel`,data:{name:r,attribute:e.attribute}})}})}},"no-placeholder":{meta:{type:`suggestion`,docs:{description:`Placeholders disappear on input; put format guidance in a helper message instead`},messages:{noPlaceholder:`Do not use placeholder on <{{name}}>. It disappears while typing and fails contrast; describe the expected format in a helper message`},schema:[]},create(t){return G(t,e,({opening:e,tag:n,component:r,name:i})=>{let a=n===`textarea`||n===`input`&&U.has(Ie(e)??``)||K(r,`text-input`,`textarea`)?m(e,`placeholder`):void 0;a&&t.report({node:a,messageId:`noPlaceholder`,data:{name:i}})})}},"no-readonly-or-disabled-inputs":{meta:{type:`suggestion`,docs:{description:`Inputs should be interactive; replace disabled and read-only inputs with a clearer pattern`},messages:{noDisabled:`{{attribute}} makes <{{name}}> non-interactive, which is hard to perceive and explain. Prefer validation messages or plain text`},schema:[]},create(t){return G(t,e,({opening:e,tag:n,component:r,name:i})=>{if(n===`input`||n===`textarea`||n===`select`||K(r,`text-input`,`textarea`,`select`,`checkbox`,`radio`,`range`))for(let n of Fe){let r=m(e,n),a=r?_(r):void 0;r&&a?.kind===`boolean`&&a.value&&t.report({node:r,messageId:`noDisabled`,data:{attribute:n,name:i}})}})}},"no-deprecated-imports":{meta:{type:`problem`,docs:{description:`Disallow importing deprecated design system components`},messages:{deprecatedComponent:`{{name}} is deprecated.{{replacement}}`},schema:[]},create(t){let n=c(y(t)),r=(e,n,r)=>t.report({node:e,messageId:`deprecatedComponent`,data:{name:r,replacement:n.replacements?.length?` Use ${n.replacements.join(` or `)} instead.`:``}});return v(n.visitors,{ImportDeclaration(t){if(n.isDesignSystemModule(String(t.source.value)))for(let n of t.specifiers){let t=n.type===`ImportSpecifier`?String(n.imported.name??n.imported.value):n.type===`ImportDefaultSpecifier`?String(n.local.name):void 0,i=t?e.byJsx.get(t):void 0;t&&i?.deprecated&&r(n,i,t)}},JSXOpeningElement(t){let i=t.name;if(i.type!==`JSXMemberExpression`)return;let a=n.resolve(i),o=a?e.byJsx.get(a.name):void 0;a&&o?.deprecated&&r(t,o,a.local)}})}},"no-banned-imports":{meta:{type:`problem`,docs:{description:`Disallow importing banned modules`},messages:{bannedImport:`"{{source}}" is banned: {{reason}}`},schema:[]},create(e){let t=Object.entries(y(e).bannedImports),n=n=>{let r=d(n);if(r===void 0)return;let i=t.find(([e])=>r===e||r.startsWith(`${e}/`));i&&e.report({node:n,messageId:`bannedImport`,data:{source:r,reason:i[1]}})};return t.length===0?{}:{ImportDeclaration:e=>n(e.source),ExportNamedDeclaration:e=>n(e.source),ExportAllDeclaration:e=>n(e.source),ImportExpression:e=>n(e.source),CallExpression(e){let t=l(e.callee);t?.type===`Identifier`&&t.name===`require`&&n(e.arguments[0])}}}}}}function Be(e){return e.startsWith(`@`)?!0:e.split(`,`).map(e=>e.trim()).every(e=>e.startsWith(`:`)||e.startsWith(`&:`))}const Ve=/* @__PURE__ */ new Set([`css`,`css-map`,`styled`]);function He(e,t){let n=t.sourceCode.getText(),r=e.range[0],i=n.lastIndexOf(`
2
+ `,r-1)+1,a=n.slice(i,r);return/^\s*$/.test(a)?a:void 0}const Ue={Property:`all`,Duration:`0s`,TimingFunction:`ease`,Delay:`0s`},We={Name:`none`,Duration:`0s`,TimingFunction:`ease`,Delay:`0s`,IterationCount:`1`,Direction:`normal`,FillMode:`none`,PlayState:`running`},Ge=/* @__PURE__ */ new Set([`normal`,`reverse`,`alternate`,`alternate-reverse`]),Ke=/* @__PURE__ */ new Set([`none`,`forwards`,`backwards`,`both`]),qe=/* @__PURE__ */ new Set([`running`,`paused`]);function Je(e,t){let n={},r=(e,t)=>e in n?!1:(n[e]=t,!0);for(let{text:i}of w(e))O(i)===void 0?k(i)?r(`TimingFunction`,i):t===`transition`?r(`Property`,i):/^(?:\d+(?:\.\d+)?|infinite)$/.test(i)?r(`IterationCount`,i):Ge.has(i)&&!(`Direction`in n)?r(`Direction`,i):Ke.has(i)&&!(`FillMode`in n)?r(`FillMode`,i):qe.has(i)?r(`PlayState`,i):r(`Name`,i):r(`Duration`,i)||r(`Delay`,i);return n}function Ye(e,t){let n=e===`transition`?Ue:We,r=ce(t).map(t=>Je(t,e));if(r.length===0)return;let i=e===`transition`?`Property`:`Name`;return Object.keys(n).filter(e=>e===i||r.some(t=>e in t)).map(t=>[`${e}${t}`,r.map(e=>e[t]??n[t]).join(`, `)])}const Xe={width:`1px`,height:`1px`,padding:`0`,position:`absolute`,border:`0`,clip:`rect(1px, 1px, 1px, 1px)`,overflow:`hidden`,whiteSpace:`nowrap`};function Ze(e){return e.length<5?0:e.filter(e=>e.key in Xe).reduce((e,t)=>e+(Xe[t.key]===t.value?1.5:.75),0)/e.length}function Qe(e){let t=l(e);if(t?.type===`Literal`)return typeof t.value==`number`?t.value===0?`0`:`${t.value}px`:typeof t.value==`string`?t.value:void 0}function $e(e){return e.kind!==`css-map`&&e.kind!==`stylesheet`&&e.kind!==`keyframes`?[e.node]:e.node.properties.flatMap(e=>{let t=e.type===`Property`?l(e.value):void 0;return t?.type===`ObjectExpression`?[t]:[]})}function et(e){return/^[a-z_$][\w$]*$/i.test(e)?e:JSON.stringify(e)}function q(e,t){let n=`${t} `;return`{\n${e.map(([e,t])=>typeof t==`string`?`${n}${et(e)}: ${JSON.stringify(t)}`:`${n}${et(e)}: ${q(t,n)}`).join(`,
3
+ `)}\n${t}}`}function tt(e,t,n){if(e.expressions.length>0)return;let r=H(e),i=({name:e,value:t})=>[e,t];if(t!==`keyframes`)return r.blocks.length===0?q(r.declarations.map(i),n):void 0;if(!(r.blocks.some(e=>e.parents.length>0)||r.declarations.some(e=>e.selectors.length!==1)))return q(r.blocks.map(e=>[e.selector,r.declarations.filter(t=>t.selectors[0]===e.selector).map(i)]),n)}function J(e,t){return{meta:{type:`suggestion`,docs:{description:t},messages:{noTaggedTemplate:`Use an object argument instead of a ${e} tagged template expression`},schema:[],fixable:`code`},create(t){let n=y(t),r=new Set(n.styleCallees.filter(e=>e!==`keyframes`&&e!==`injectGlobal`&&e!==`createGlobalStyle`));return{TaggedTemplateExpression(n){let i=l(n.tag),a=i?.type===`Identifier`?i.name:``;if(!(e===`styled`?I(i):e===`keyframes`?a===`keyframes`:r.has(a)))return;let o=tt(n.quasi,e,He(n,t)??``);t.report({node:n,messageId:`noTaggedTemplate`,fix:o?e=>e.replaceText(n,`${t.sourceCode.getText(n.tag)}(${o})`):void 0})}}}}}function nt(e,t,n){return{meta:{type:`problem`,docs:{description:t},messages:{noExport:n},schema:[]},create(t){let n=e(t),r=e=>{let t=l(e),r=l(t?.type===`TaggedTemplateExpression`?t.tag:t?.type===`CallExpression`?t.callee:void 0);return r?.type===`Identifier`&&n.has(r.name)},i=(e,n)=>{for(let r=t.sourceCode.getScope?.(e)??null;r;r=r.upper){let e=r.set.get(n);if(e)return e.defs[0]?.node}},a=e=>t.report({node:e,messageId:`noExport`});return{ExportNamedDeclaration(e){let t=e.declaration;if(t?.type===`VariableDeclaration`){for(let e of t.declarations)r(e.init)&&a(e);return}if(!(t||e.source))for(let t of e.specifiers){let n=t.local,o=n.type===`Identifier`?i(e,n.name):void 0;o?.type===`VariableDeclarator`&&r(o.init)&&a(t)}},ExportDefaultDeclaration(e){r(e.declaration)&&a(e)}}}}}function rt(e){let t=e.names(`primitive`),n=e.names(`visually-hidden`);return{"no-margin":{meta:{type:`problem`,docs:{description:`Disallow using the margin CSS property`},messages:{noMargin:`margin breaks the component model. Control layout from the parent with ${t?`${t} or `:``}gap in a flex or grid container`},schema:[]},create(e){return z(e,{object:t=>B(t,t=>{t.name.startsWith(`margin`)&&e.report({node:t.property,messageId:`noMargin`})}),template(t){let n=H(t.node);for(let t of n.declarations)t.name.startsWith(`margin`)&&e.report({node:n.locate(t.propertyOffset),messageId:`noMargin`})}})}},"no-physical-properties":{meta:{type:`problem`,docs:{description:`Disallow physical properties and values in styles; use logical properties that follow the reading direction`},messages:{noPhysicalProperties:`Physical property {{physical}} does not follow the reading direction. Use {{logical}}`,noPhysicalValues:`{{property}}: "{{physical}}" does not follow the reading direction. Use "{{logical}}"`},schema:[],fixable:`code`},create(e){return z(e,{object:t=>B(t,t=>{let n=x[t.name];if(n){let r=t.key,i=r.type===`Literal`&&String(r.value).includes(`-`)?C(n):n;e.report({node:r,messageId:`noPhysicalProperties`,data:{physical:t.name,logical:n},fix:t=>t.replaceText(r,r.type===`Literal`?`${e.sourceCode.getText(r)[0]}${i}${e.sourceCode.getText(r)[0]}`:i)})}let r=l(t.value),i=se[t.name],a=r?.type===`Literal`&&typeof r.value==`string`?i?.[r.value]:void 0;if(r&&a){let n=e.sourceCode.getText(r)[0];e.report({node:r,messageId:`noPhysicalValues`,data:{property:t.name,physical:String(r.value),logical:a},fix:e=>e.replaceText(r,`${n}${a}${n}`)})}}),template(t){let n=H(t.node);for(let t of n.declarations){let r=x[t.name];if(r){let i=n.range(t.propertyOffset,t.propertyOffset+t.property.length);e.report({node:n.locate(t.propertyOffset),messageId:`noPhysicalProperties`,data:{physical:t.property,logical:C(r)},fix:i?e=>e.replaceTextRange(i,C(r)):void 0})}let i=se[t.name]?.[t.value];if(i){let r=n.range(t.valueOffset,t.valueOffset+t.value.length);e.report({node:n.locate(t.valueOffset),messageId:`noPhysicalValues`,data:{property:t.property,physical:t.value,logical:i},fix:r?e=>e.replaceTextRange(r,i):void 0})}}}})}},"no-nested-styles":{meta:{type:`problem`,docs:{description:`Disallows use of nested styles in CSS-in-JS styles`},messages:{noNestedStyles:`Nested selector "{{selector}}" changes unexpectedly when child markup changes. Style the element itself; only pseudo-classes, pseudo-elements and at-rules may nest`},schema:[]},create(e){return z(e,{object(t){Ve.has(t.kind)&&Ae(t,(t,n)=>{Be(t)||e.report({node:n.key,messageId:`noNestedStyles`,data:{selector:t}})})},template(t){if(!Ve.has(t.kind))return;let n=H(t.node);for(let t of n.blocks)Be(t.selector)||e.report({node:n.locate(t.offset),messageId:`noNestedStyles`,data:{selector:t.selector}})}})}},"no-exported-css":nt(e=>new Set(y(e).styleCallees.filter(e=>e!==`keyframes`&&e!==`injectGlobal`&&e!==`createGlobalStyle`)),`Forbid exporting css function calls, which is not statically analyzable`,`Exported css() styles cannot be statically analysed. Define styles next to the component that uses them`),"no-exported-keyframes":nt(()=>/* @__PURE__ */ new Set([`keyframes`]),`Forbid exporting keyframes function calls, which is not statically analyzable`,`Exported keyframes() cannot be statically analysed. Define keyframes next to the styles that use them`),"no-empty-styled-expression":{meta:{type:`problem`,docs:{description:`Forbids styled expressions with empty arguments; render the element directly`},messages:{noEmptyStyledExpression:`Empty styled expression. Render the element directly instead of styling it with nothing`},schema:[]},create(e){return{CallExpression(t){let n=t.arguments;I(t.callee)&&n.every(e=>e.type===`ObjectExpression`&&e.properties.length===0)&&e.report({node:t,messageId:`noEmptyStyledExpression`})}}}},"no-css-tagged-template-expression":J(`css`,`Disallows css tagged template expressions; use object styles`),"no-styled-tagged-template-expression":J(`styled`,`Disallows styled tagged template expressions; use object styles`),"no-keyframes-tagged-template-expression":J(`keyframes`,`Disallows keyframes tagged template expressions; use object styles`),"expand-motion-shorthand":{meta:{type:`suggestion`,docs:{description:`Expands transition and animation shorthands so each value can use a motion token`},messages:{expandShorthand:`Expand the {{property}} shorthand into longhand properties so durations and easings can use motion tokens`},schema:[],fixable:`code`},create(e){return z(e,{object:t=>B(t,t=>{if(t.name!==`transition`&&t.name!==`animation`)return;let n=l(t.value);if(n?.type!==`Literal`||typeof n.value!=`string`||/^(?:none|inherit|initial|unset|revert)$/i.test(n.value.trim()))return;let r=Ye(t.name,n.value);if(!r)return;let i=e.sourceCode.getText(n)[0],a=t.key.type===`Literal`?e.sourceCode.getText(t.key)[0]:void 0,o=He(t.property,e),s=r.map(([e,t])=>`${a?`${a}${e}${a}`:e}: ${i}${t}${i}`).join(o===void 0?`, `:`,\n${o}`);e.report({node:t.property,messageId:`expandShorthand`,data:{property:t.name},fix:e=>e.replaceText(t.property,s)})})})}},"use-visually-hidden":{meta:{type:`suggestion`,docs:{description:`Enforce usage of the design system's visually hidden component over hand-rolled styles`},messages:{useVisuallyHidden:`Use ${n||`the visually hidden component`} instead of hand-rolled visually hidden styles`},schema:[]},create(e){return z(e,{object:t=>{for(let n of $e(t))Ze(n.properties.flatMap(e=>{let t=e.type===`Property`?u(e):void 0;return t===void 0?[]:[{key:S(t),value:Qe(e.value)}]}))>.8&&e.report({node:n,messageId:`useVisuallyHidden`})},template(t){Ze(H(t.node).declarations.filter(e=>e.selectors.length===0).map(e=>({key:e.name,value:e.value})))>.8&&e.report({node:t.tagged,messageId:`useVisuallyHidden`})}})}}}}function it(e){return e.replaceAll(/[\\`]|\$\{/g,e=>`\\${e}`)}function at(e,t,n,r){let i=e.node.parent?.type===`JSXAttribute`,a=e=>i?`{${e}}`:e;if(e.kind===`number`){let[r]=t;if(!r)return;let i=n===`function`?r.reference:JSON.stringify(r.reference);return t=>t.replaceText(e.node,a(i))}if(e.kind!==`string`)return;let o=r.getText(e.node),s=o[0];if(o.slice(1,-1)!==e.text)return;let c=t.toSorted((e,t)=>e.start-t.start);if(n===`css-var`){let t=e.text;for(let e of c.toReversed())t=t.slice(0,e.start)+e.reference+t.slice(e.end);return n=>n.replaceText(e.node,`${s}${t}${s}`)}let[l]=c;if(c.length===1&&l&&e.text.slice(0,l.start).trim()===``&&e.text.slice(l.end).trim()===``)return t=>t.replaceText(e.node,a(l.reference));let u=0,d=``;for(let t of c)d+=`${it(e.text.slice(u,t.start))}\${${t.reference}}`,u=t.end;return d+=it(e.text.slice(u)),t=>t.replaceText(e.node,a(`\`${d}\``))}function ot(e,t,n){let r=t.map(t=>({range:e.range(t.start,t.end),text:n===`function`?`\${${t.reference}}`:t.reference}));if(!r.some(({range:e})=>!e))return e=>r.map(({range:t,text:n})=>e.replaceTextRange(t,n))}function Y(e,t){return{meta:{type:`problem`,docs:{description:t.description},messages:{...t.messages,suggestToken:`Replace with {{reference}} ({{token}})`},schema:[],hasSuggestions:!0},create(n){let r=y(n),i=t.analyzer({settings:r,examples:t=>e.examples(t,r)}),a=(t,n)=>t.tokens.flatMap(t=>{let i=e.reference(t,r),a=n(i);return a?[{messageId:`suggestToken`,data:{reference:i,token:t.path},fix:a}]:[]}),o=(e,t)=>{let o=t.kind===`number`?t.value:t.text;for(let s of i(e,o))n.report({node:t.node,messageId:s.messageId,data:s.data,suggest:a(s,e=>at(t,[{start:s.start,end:s.end,reference:e}],r.tokenReference,n.sourceCode))})},s=t.hostAttributes?{JSXAttribute(e){let n=e.name,r=e.parent;if(n.type===`JSXIdentifier`&&t.hostAttributes.has(n.name)&&p(f(r?.name)))for(let t of V(e.value))o(n.name,t)}}:{};return v(z(n,{object:e=>B(e,e=>{for(let t of V(e.value))o(e.name,t)}),template(e){let t=H(e.node);for(let e of t.declarations)for(let o of i(e.name,e.value)){let i=e.valueOffset+o.start,s=e.valueOffset+o.end;n.report({node:t.locate(i),messageId:o.messageId,data:o.data,suggest:a(o,e=>ot(t,[{start:i,end:s,reference:e}],r.tokenReference))})}}},r),s)}}}function X(e,t=me){return typeof e==`number`?e===0?[]:[{start:0,end:String(e).length,text:String(e)}]:w(e).filter(({text:e})=>!de(e)&&!le(e)&&!ue(e)&&t(e)).map(({text:e,start:t})=>({start:t,end:t+e.length,text:e}))}function Z(e){let t=String(e),n=t.length-t.trimStart().length;return{start:n,end:n+t.trim().length,text:t.trim()}}const st=/^(?:color|fill|stroke|background\w*|border\w*|outline\w*|columnRule\w*|textDecoration\w*|\w+Color)$/,ct=/* @__PURE__ */ new Set([`boxShadow`,`textShadow`]),lt=/* @__PURE__ */ new Set([`fill`,`stroke`,`color`,`stopColor`,`floodColor`,`lightingColor`]),ut=/* @__PURE__ */ new Set([...[`padding`,`margin`,`scrollPadding`,`scrollMargin`,`inset`].flatMap(e=>[``,`Top`,`Right`,`Bottom`,`Left`,`Block`,`BlockStart`,`BlockEnd`,`Inline`,`InlineStart`,`InlineEnd`,`Horizontal`,`Vertical`,`Start`,`End`].map(t=>`${e}${t}`)),`gap`,`rowGap`,`columnGap`,`gridGap`,`gridRowGap`,`gridColumnGap`,`top`,`right`,`bottom`,`left`]),dt=`(?:Top|Right|Bottom|Left|Block|BlockStart|BlockEnd|Inline|InlineStart|InlineEnd)?`,ft=/^border(?:(?:Top|Bottom)(?:Left|Right)|(?:Start|End)(?:Start|End))?Radius$/,pt=RegExp(`^(?:border${dt}Width|outlineWidth)$`),mt=RegExp(`^(?:border${dt}|outline)$`),ht=/* @__PURE__ */ new Set([`transitionDuration`,`transitionDelay`,`animationDuration`,`animationDelay`]),gt=/* @__PURE__ */ new Set([`transitionTimingFunction`,`animationTimingFunction`]);function _t(e){return P(e).length>0||X(e).length>0}function vt(e){return/^(?:\d+|bold|bolder|lighter)$/i.test(e)}function yt(e){let t=O(e);return t!==void 0&&t!==0}const bt=/var\(\s*(--[\w-]+)\s*[,)]/g,xt=/* @__PURE__ */ new Set([`ImportDeclaration`,`ExportAllDeclaration`,`ExportNamedDeclaration`,`ImportExpression`]);function St(e,t){let n=new Set(e.tokenFunctions),r=(e,n)=>{for(let r of n.matchAll(bt)){let i=r[1],a=n.indexOf(i,r.index);t({kind:`var`,node:e,name:i,start:a,end:a+i.length,whole:n.trim()===`var(${i})`})}};return{CallExpression(e){let r=l(e.callee);if(r?.type===`Identifier`&&n.has(r.name)){let[n]=e.arguments;t({kind:`call`,node:e,argument:n,path:d(n),name:r.name})}},Literal(e){let t=e.parent;typeof e.value==`string`&&!xt.has(t?.type??``)&&(t?.type!==`Property`||t.key!==e)&&r(e,e.value)},TemplateElement(e){r(e,e.value.cooked??``)}}}const Ct=/* @__PURE__ */ new Set([`Property`,`JSXAttribute`,`JSXExpressionContainer`,`VariableDeclarator`,`ArrayExpression`,`ConditionalExpression`,`LogicalExpression`,`ReturnStatement`,`AssignmentExpression`,`CallExpression`]);function wt(e,t,n){if(!e||e.type!==`Literal`)return;let r=n.sourceCode.getText(e)[0];return n=>n.replaceText(e,`${r}${t}${r}`)}function Tt(e,t){let n=new Set(e.fonts.map(e=>A(e.family))),r=e.fonts.map(e=>e.family).join(`, `);return{"ensure-design-token-usage":Y(t,{description:`Enforces usage of design tokens rather than hard-coded colors and shadows`,messages:{hardCodedColor:`Hard-coded color "{{value}}". Use a color token{{examples}}; a missing value is a token to add, not a literal to inline`,hardCodedShadow:`Hard-coded shadow "{{value}}". Use a shadow token{{examples}}`},hostAttributes:lt,analyzer:({examples:e})=>{let n=e([`color`]),r=e([`shadow`]);return(e,i)=>{if(typeof i!=`string`||e.startsWith(`--`))return[];if(ct.has(e)){if(!t.has(`shadow`)||!_t(i))return[];let e=Z(i);return[{...e,messageId:`hardCodedShadow`,data:{value:e.text,examples:r},tokens:t.find([`shadow`],e.text)}]}return!t.has(`color`)||!st.test(e)?[]:P(i).map(e=>({start:e.start,end:e.end,messageId:`hardCodedColor`,data:{value:e.text,examples:n},tokens:t.find([`color`],e.text)}))}}}),"use-tokens-space":Y(t,{description:`Enforces usage of space design tokens rather than hard-coded values`,messages:{noRawSpacingValues:`Hard-coded spacing "{{value}}" in {{property}}. Use a space token{{examples}}`},analyzer:({examples:e})=>{let n=e([`space`]);return(e,r)=>ut.has(e)?X(r).map(r=>({...r,messageId:`noRawSpacingValues`,data:{value:r.text,property:e,examples:n},tokens:t.find([`space`],r.text)})):[]}}),"use-tokens-shape":Y(t,{description:`Enforces usage of shape (radius and border width) design tokens rather than hard-coded values`,messages:{noRawRadiusValues:`Hard-coded radius "{{value}}" in {{property}}. Use a radius token{{examples}}; a new radius becomes a token first`,noRawBorderWidthValues:`Hard-coded border width "{{value}}" in {{property}}. Use a border width token{{examples}}`},analyzer:({examples:e})=>{let n=e([`radius`]),r=e([`borderWidth`]);return(e,i)=>{let a;return ft.test(e)?a=`radius`:(pt.test(e)||mt.test(e))&&(a=`borderWidth`),!a||!t.has(a)?[]:X(i).map(i=>({...i,messageId:a===`radius`?`noRawRadiusValues`:`noRawBorderWidthValues`,data:{value:i.text,property:e,examples:a===`radius`?n:r},tokens:t.find([a],i.text)}))}}}),"use-tokens-typography":Y(t,{description:`Enforces usage of typography design tokens rather than hard-coded font values`,messages:{noRawTypographyValues:`Hard-coded {{property}} "{{value}}". Use a typography token{{examples}}`,unknownFontFamily:`Font family "{{value}}" is not part of the design system. Use one of: {{fonts}}`},analyzer:({examples:e})=>{let i=(n,r,i)=>({...n,messageId:`noRawTypographyValues`,data:{value:n.text,property:r,examples:e([...i,`typography`])},tokens:t.find(i,n.text)});return(e,a)=>{switch(e){case`fontSize`:case`letterSpacing`:return t.has(e)?X(a).map(t=>i(t,e,[e])):[];case`lineHeight`:return t.has(`lineHeight`)?X(a,e=>/^\d|^\./.test(e)).map(t=>i(t,e,[`lineHeight`])):[];case`fontWeight`:return t.has(`fontWeight`)?X(a,vt).map(t=>i(t,e,[`fontWeight`])):[];case`fontFamily`:{if(typeof a!=`string`||ue(a.trim())||de(a.trim()))return[];let o=Z(a);return t.has(`fontFamily`)?[i(o,e,[`fontFamily`])]:n.size>0&&!n.has(A(a))?[{...o,messageId:`unknownFontFamily`,data:{value:o.text,fonts:r},tokens:[]}]:[]}case`font`:return t.has(`typography`,`fontSize`,`fontFamily`)&&typeof a==`string`&&X(a).length>0?[i(Z(a),e,[])]:[];default:return[]}}}}),"use-tokens-motion":Y(t,{description:`Enforces usage of motion design tokens rather than hard-coded durations and easings`,messages:{noRawDuration:`Hard-coded duration "{{value}}" in {{property}}. Use a duration token{{examples}}`,noRawEasing:`Hard-coded easing "{{value}}" in {{property}}. Use an easing token{{examples}}`},analyzer:({examples:e})=>{let n=e([`duration`]),r=e([`easing`]);return(e,i)=>{if(typeof i!=`string`)return[];let a=e===`transition`||e===`animation`,o=[];return t.has(`duration`)&&(a||ht.has(e))&&o.push(...X(i,yt).map(r=>({...r,messageId:`noRawDuration`,data:{value:r.text,property:e,examples:n},tokens:t.find([`duration`],r.text)}))),t.has(`easing`)&&(a||gt.has(e))&&o.push(...w(i).filter(({text:e})=>k(e)).map(({text:n,start:i})=>({start:i,end:i+n.length,messageId:`noRawEasing`,data:{value:n,property:e,examples:r},tokens:t.find([`easing`],n)}))),o.sort((e,t)=>e.start-t.start)}}}),"no-unsafe-design-token-usage":{meta:{type:`problem`,docs:{description:`Enforces design token usage is statically analyzable and references tokens the design system defines`},messages:{staticToken:`Pass the token path to {{name}}() as a string literal so it can be checked against the design system`,invalidToken:`The token "{{name}}" does not exist in the design system.{{suggestion}}`,invalidCssVar:`The custom property {{name}} is not a design-system token.{{suggestion}}`,directTokenUsage:`Access design tokens through the token function: {{reference}}`,suggestToken:`Replace with {{replacement}}`},schema:[],fixable:`code`,hasSuggestions:!0},create(e){let n=y(e),r=e=>e.length>0?` Did you mean ${e.map(e=>`"${e}"`).join(`, `)}?`:``;return St(n,i=>{if(i.kind===`call`){if(i.path===void 0){e.report({node:i.argument??i.node,messageId:`staticToken`,data:{name:i.name}});return}if(!t.byPath.has(i.path)){let n=t.similar(i.path);e.report({node:i.argument,messageId:`invalidToken`,data:{name:i.path,suggestion:r(n)},suggest:n.flatMap(t=>{let n=wt(i.argument,t,e);return n?[{messageId:`suggestToken`,data:{replacement:t},fix:n}]:[]})})}return}if(!t.isDesignSystemVar(i.name))return;let a=t.byCssVar.get(i.name);if(!a){let n=t.similar(i.name,`cssVar`),a=ee(i.node,i.start,i.end,e.sourceCode);e.report({node:i.node,messageId:`invalidCssVar`,data:{name:i.name,suggestion:r(n)},suggest:a?n.map(e=>({messageId:`suggestToken`,data:{replacement:e},fix:t=>t.replaceTextRange(a,e)})):[]});return}if(n.tokenReference!==`function`)return;let o=t.reference(a,n),s=i.node.parent,c=i.whole&&i.node.type===`Literal`&&Ct.has(s?.type??``)&&(s?.type!==`Property`||s.key!==i.node);e.report({node:i.node,messageId:`directTokenUsage`,data:{reference:o},fix:c?e=>e.replaceText(i.node,s?.type===`JSXAttribute`?`{${o}}`:o):void 0})})}},"no-deprecated-design-token-usage":{meta:{type:`problem`,docs:{description:`Disallow using deprecated design tokens`},messages:{tokenDeprecated:`The token "{{name}}" is deprecated{{note}}`,tokenRenamed:`The token "{{name}}" is deprecated in favour of "{{replacement}}"`,suggestReplacement:`Replace with "{{replacement}}"`},schema:[],hasSuggestions:!0},create(e){return St(y(e),n=>{let r=n.kind===`call`?n.path===void 0?void 0:t.byPath.get(n.path):t.byCssVar.get(n.name);if(!r?.deprecated)return;let i=r.replacement?t.byPath.get(r.replacement):void 0;if(!i){e.report({node:n.node,messageId:`tokenDeprecated`,data:{name:r.path,note:typeof r.deprecated==`string`?`: ${r.deprecated}`:``}});return}let a;if(n.kind===`call`)a=wt(n.argument,i.path,e);else{let t=ee(n.node,n.start,n.end,e.sourceCode);a=t?e=>e.replaceTextRange(t,i.cssVar):void 0}e.report({node:n.node,messageId:`tokenRenamed`,data:{name:r.path,replacement:i.path},suggest:a?[{messageId:`suggestReplacement`,data:{replacement:n.kind===`call`?i.path:i.cssVar},fix:a}]:[]})})}}}}function Et(e,t){switch(e){case`color`:return typeof t==`string`?N(t):void 0;case`space`:case`size`:case`radius`:case`borderWidth`:case`fontSize`:case`letterSpacing`:return he(t);case`lineHeight`:return typeof t==`number`?D(t):D(t)??he(t);case`fontWeight`:return be(t);case`fontFamily`:return A(String(t));case`duration`:return ge(t);case`easing`:return ve(String(t));case`zIndex`:case`opacity`:return D(t);case`shadow`:case`typography`:return xe(String(t))}}function Dt(e,t){let n=Array.from({length:t.length+1},(e,t)=>t);for(let r=1;r<=e.length;r++){let i=[r];for(let a=1;a<=t.length;a++)i[a]=Math.min(n[a]+1,i[a-1]+1,n[a-1]+(e[r-1]===t[a-1]?0:1));n=i}return n[t.length]}function Q(e,t){return Number(!!t.alias)-Number(!!e.alias)||e.path.split(`.`).length-t.path.split(`.`).length||e.path.localeCompare(t.path,void 0,{numeric:!0})}function Ot(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Set;for(let o of e.tokens){if(t.set(o.path,o),n.set(o.cssVar,o),e.cssVarPrefix||a.add(o.cssVar.replace(/^--/,``).split(`-`)[0]),!o.category)continue;r.set(o.category,[...r.get(o.category)??[],o]);let s=o.value===void 0?void 0:Et(o.category,o.value);if(s!==void 0&&!o.deprecated){let e=`${o.category}:${s}`;i.set(e,[...i.get(e)??[],o])}}for(let e of i.values())e.sort(Q);let o=(e,t)=>t.tokenReference===`function`?`${t.tokenFunctions[0]??`token`}(${JSON.stringify(e.path)})`:`var(${e.cssVar})`;return{byPath:t,byCssVar:n,has:(...e)=>e.some(e=>(r.get(e)?.length??0)>0),find(e,t){return e.flatMap(e=>{let n=Et(e,t);return n===void 0?[]:i.get(`${e}:${n}`)??[]}).slice(0,3)},isDesignSystemVar(t){let n=t.replace(/^--/,``);return e.cssVarPrefix?n.startsWith(`${e.cssVarPrefix}-`):a.has(n.split(`-`)[0])},similar(e,r=`path`){let i=r===`path`?[...t.keys()]:[...n.keys()],a=Math.max(2,Math.floor(e.length/5));return i.map(t=>({candidate:t,distance:Dt(e,t)})).filter(({distance:e})=>e<=a).sort((e,t)=>e.distance-t.distance).slice(0,3).map(({candidate:e})=>e)},reference:o,examples(e,t){let n=e.flatMap(e=>r.get(e)??[]).filter(e=>!e.deprecated).toSorted(Q);if(n.length===0)return``;let i=n.slice(0,4).map(e=>o(e,t));return` (e.g. ${i.join(`, `)}${n.length>i.length?`, …`:``})`}}}function $(e,t){return Object.fromEntries(Object.entries(t??{}).map(([t,n])=>[`${e}-${t}`,n]))}function kt(e,t,n){let r=(e,t)=>e?t:`off`,i=Object.fromEntries(Object.keys(W).map(e=>[e,r(n.has(W[e].role),`warn`)]));return{"ensure-design-token-usage":r(t.has(`color`,`shadow`),`error`),"no-unsafe-design-token-usage":r(e.tokens.length>0,`error`),"no-deprecated-design-token-usage":r(e.tokens.some(e=>e.deprecated),`warn`),"use-tokens-space":r(t.has(`space`),`warn`),"use-tokens-shape":r(t.has(`radius`,`borderWidth`),`warn`),"use-tokens-typography":r(t.has(`fontSize`,`fontWeight`,`fontFamily`,`lineHeight`,`letterSpacing`,`typography`)||e.fonts.length>0,`warn`),"use-tokens-motion":r(t.has(`duration`,`easing`),`warn`),"expand-motion-shorthand":`off`,"no-margin":r(n.has(`primitive`),`warn`),"no-physical-properties":`off`,"no-nested-styles":`warn`,"no-exported-css":`off`,"no-exported-keyframes":`off`,"no-empty-styled-expression":`off`,"no-css-tagged-template-expression":`off`,"no-styled-tagged-template-expression":`off`,"no-keyframes-tagged-template-expression":`off`,"no-banned-imports":`error`,"no-deprecated-imports":r(n.deprecated().length>0,`error`),"no-unsafe-style-overrides":r(e.components.length>0,`warn`),"prefer-primitives":`off`,"use-primitives-text":r(n.has(`text`),`warn`),"use-visually-hidden":r(n.has(`visually-hidden`),`warn`),"icon-label":r(e.icons.length>0||n.has(`icon`),`warn`),"no-empty-icon-button-label":r(n.has(`icon-button`),`error`),"no-placeholder":r(n.has(`text-input`,`textarea`),`warn`),"no-readonly-or-disabled-inputs":r(n.has(`text-input`,`textarea`,`select`,`checkbox`,`radio`,`range`),`warn`),...i}}const At=[`tokenFunctions`,`tokenReference`,`styleCallees`,`styleAttributes`,`unsafeStyleProps`,`componentModules`,`bannedImports`];function jt(c){let l=Ot(c),u=s(c),d=c.tailwind?r(c.tailwind):void 0,f=c.tamagui?o(c.tamagui):void 0,p={...Tt(c,l),...rt(u),...ze(u),...$(`tailwind`,d?.rules),...$(`tamagui`,f?.rules)},m={...kt(c,l,u),...$(`tailwind`,d?.defaultSeverity),...$(`tamagui`,f?.defaultSeverity)},h={meta:{name:c.name,version:c.version},rules:p,configs:{}},g=(r={})=>{let{files:o=[`src/**/*.{js,jsx,ts,tsx}`],ignores:s=[],severity:l={}}=r,u={};for(let e of Object.keys(p))u[`${c.prefix}/${e}`]=l[e]??m[e]??`off`;let g={[te]:Object.fromEntries(At.filter(e=>r[e]!==void 0).map(e=>[e,r[e]]))};return d&&(g[n]={attributes:r.tailwind?.attributes??e,callees:r.tailwind?.callees??t}),f&&(g[a]={...r.tamagui?.components?{components:r.tamagui.components}:{},callees:r.tamagui?.callees??i}),{files:o,ignores:s,plugins:{[c.prefix]:h},settings:g,rules:u}};return h.configs.recommended=g(),{plugin:h,rules:p,defaultSeverity:m,configs:h.configs,config:g}}export{N as n,te as r,jt as t};
4
+ //# sourceMappingURL=runtime-gmz9xNDY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-gmz9xNDY.mjs","names":["SETTINGS_KEY","createTailwindGuardrails","createTamaguiGuardrails","SETTINGS_KEY","TAILWIND_SETTINGS_KEY","TAMAGUI_SETTINGS_KEY","SETTINGS_KEY$1","createGuardrails$1","createComponentIndex","byJsx","component","manifest","name","withRoles","roles","role","createComponentResolver","bindings","modules","settings","isDesignSystemModule","module","source","resolveIdentifier","local","binding","node","specifier","imported","object","property","unwrap","current","propertyKeyName","key","quasi","staticString","target","jsxElementName","isHostElement","jsxAttribute","opening","attribute","jsxAttributeName","hasSpreadAttribute","staticAttributeValue","value","expression","text","mergeVisitors","maps","merged","map","selector","handler","previous","cookedRange","sourceCode","start","end","SETTINGS_KEY$2","DEFAULT_TOKEN_FUNCTIONS","DEFAULT_STYLE_CALLEES","DEFAULT_STYLE_ATTRIBUTES","DEFAULT_UNSAFE_STYLE_PROPS","readSettings","context","VALUE_KEYWORDS","NAMED_COLORS","PHYSICAL_PROPERTIES","PHYSICAL_VALUES","toCamelCase","char","toKebabCase","splitParts","parts","depth","quote","flush","index","splitLayers","layers","isFunctionCall","part","isKeyword","isReference","DIMENSION","parseDimension","match","LENGTH_UNITS","isLengthLiteral","dimension","formatNumber","normalizeLength","input","normalizeNumber","parseDuration","normalizeDuration","ms","EASING_KEYWORDS","isEasingLiteral","normalizeEasing","FONT_WEIGHT_KEYWORDS","normalizeFontWeight","normalizeFontFamily","first","normalizeWhitespace","clampByte","toHex","channels","alpha","channel","parseChannel","scale","parseAlpha","hslToRgb","hue","h","sat","s","light","l","q","p","n","t","normalizeColor","named","hex","fn","values","alphaText","COLOR_PATTERN","referenceRanges","ranges","findColorLiterals","skip","CALLEE_KINDS","calleeKind","isStyledFactory","callee","styledTag","factory","argument","isStyleSheetCreate","styleObjects","element","styleSources","attributes","callees","visitObjects","nodes","handlers","visitors","args","tag","isVariantKind","kind","forEachStyleProperty","walk","variants","selectors","visit","style","forEachNestedSelector","EXPRESSION_PLACEHOLDER","valueLeaves","out","PROPERTY_NAME","parseCssTemplate","quasis","template","segments","cooked","declarations","blocks","stack","chunk","colon","rawValue","raw","segmentAt","offset","segment","rangeStart","rangeEnd","base","TEXT_INPUT_TYPES","HTML_ELEMENT_RULES","PRIMITIVE_ELEMENTS","LABEL_ATTRIBUTES","DISABLED_ATTRIBUTES","inputType","isTextOnly","children","child","elements","resolver","resolved","icon","hasRole","htmlElementRule","id","tagSet","tags","components","report","onStyled","inputTypes","type","createComponentRules","unsafe","onFactory","prop","labels","label","placeholder","banned","check","isAllowedNestedSelector","NESTABLE_KINDS","lineIndent","lineStart","prefix","TRANSITION_DEFAULTS","ANIMATION_DEFAULTS","ANIMATION_DIRECTIONS","ANIMATION_FILL_MODES","ANIMATION_PLAY_STATES","classifyLayer","result","set","layer","expandMotionShorthand","defaults","primary","VISUALLY_HIDDEN","visuallyHiddenLikeness","entries","entry","score","literalText","styleBlocks","objectKey","renderObject","inner","indent","templateToObject","parsed","declaration","family","block","item","taggedTemplateRule","cssCallees","fixer","exportedStyleRule","message","names","isStyleCall","resolve","scope","variable","declarator","definition","createStyleRules","primitives","visuallyHidden","logical","logicalValue","range","longhands","keyQuote","longhand","escapeTemplate","leafReplacementFix","inAttribute","leaf","code","replacement","replacements","sorted","a","b","only","cursor","templateReplacementFix","valueRule","options","analyze","categories","suggest","issue","reference","token","fix","checkLeaf","hostAttributes","literalSpans","accept","wholeSpan","COLOR_PROPERTY","SHADOW_PROPERTIES","COLOR_ATTRIBUTES","SPACE_PROPERTIES","suffix","BORDER_SIDES","RADIUS_PROPERTY","BORDER_WIDTH_PROPERTY","BORDER_SHORTHAND","DURATION_PROPERTIES","EASING_PROPERTIES","hasShadowLiteral","isWeightLiteral","isDurationLiteral","VAR_REFERENCE","NON_VALUE_PARENTS","tokenReferences","functions","scan","parent","EXPRESSION_PARENTS","replaceCallArgument","path","createTokenRules","fontFamilies","font","fontList","colorExamples","examples","shadowExamples","span","spaceExamples","radiusExamples","widthExamples","category","durationExamples","easingExamples","shorthand","issues","didYouMean","similar","call","fixable","normalizeTokenValue","levenshtein","i","j","compareTokens","createTokenIndex","byPath","byCssVar","byCategory","byValue","namespaces","normalized","tokens","bare","candidates","by","limit","candidate","distance","shown","prefixed","record","coreSeverity","on","enabled","severity","htmlRules","SETTING_KEYS","createDesignSystemPlugin","tailwind","createGuardrails","tamagui","rules","defaultSeverity","plugin","config","ruleConfig","SETTINGS_KEY","DEFAULT_CLASS_ATTRIBUTES","DEFAULT_CLASS_CALLEES","DEFAULT_STYLED_CALLEES"],"sources":[],"mappings":""}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./runtime-BsIMYTOg.cjs");exports.SETTINGS_KEY=e.r,exports.createDesignSystemPlugin=e.t,exports.normalizeColor=e.n;