@pyreon/unistyle 0.12.15 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -496,18 +496,16 @@ type Styles = ({
496
496
  globalTheme?: Record<string, any> | undefined;
497
497
  }) => ReturnType<Css>;
498
498
  /**
499
- * Data-driven style processor. Iterates the `propertyMap` descriptors
500
- * and delegates each to `processDescriptor`, which maps theme values
501
- * to CSS strings. The result is a single `css` tagged-template literal
502
- * containing all non-null property outputs.
499
+ * Data-driven style processor. Uses the pre-built key→index lookup to
500
+ * iterate ONLY the descriptors whose theme keys are present in the
501
+ * incoming theme object. Falls back to full scan only if the lookup
502
+ * produces zero matches (defensive — shouldn't happen in practice).
503
503
  *
504
504
  * IMPORTANT: the return MUST be wrapped in `css\`...\`` — NOT a plain
505
505
  * string join. makeItResponsive embeds this result in another template
506
506
  * literal, and the CSS interpolation chain requires a css template
507
507
  * result (not a raw string) for correct nesting of media queries,
508
- * pseudo-selectors, and @layer wrapping. A previous version returned
509
- * `fragments.filter(Boolean).join(' ')` which broke responsive styles,
510
- * hover states, and layer cascade ordering.
508
+ * pseudo-selectors, and @layer wrapping.
511
509
  */
512
510
  declare const styles$1: Styles;
513
511
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/enrichTheme.ts","../../src/context.tsx","../../src/responsive/breakpoints.ts","../../src/responsive/createMediaQueries.ts","../../src/responsive/sortBreakpoints.ts","../../src/responsive/makeItResponsive.ts","../../src/responsive/normalizeTheme.ts","../../src/responsive/transformTheme.ts","../../src/styles/alignContent.ts","../../src/styles/extendCss.ts","../../src/styles/styles/types.ts","../../src/styles/styles/index.ts","../../src/types.ts","../../src/units/stripUnit.ts","../../src/units/value.ts","../../src/units/values.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/enrichTheme.ts","../../src/context.tsx","../../src/responsive/breakpoints.ts","../../src/responsive/createMediaQueries.ts","../../src/responsive/sortBreakpoints.ts","../../src/responsive/makeItResponsive.ts","../../src/responsive/normalizeTheme.ts","../../src/responsive/transformTheme.ts","../../src/styles/alignContent.ts","../../src/styles/extendCss.ts","../../src/styles/styles/types.ts","../../src/styles/styles/index.ts","../../src/types.ts","../../src/units/stripUnit.ts","../../src/units/value.ts","../../src/units/values.ts"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -239,7 +239,7 @@ function enrichTheme(theme) {
239
239
  function Provider(props) {
240
240
  const { theme, children } = props;
241
241
  const enrichedTheme = enrichTheme(theme);
242
- provide(ThemeContext, enrichedTheme);
242
+ provide(ThemeContext, () => enrichedTheme);
243
243
  return Provider$1({
244
244
  theme: enrichedTheme,
245
245
  children
@@ -1897,26 +1897,51 @@ const propertyMap = [
1897
1897
 
1898
1898
  //#endregion
1899
1899
  //#region src/styles/styles/index.ts
1900
+ const keyToIndices = /* @__PURE__ */ new Map();
1901
+ for (let i = 0; i < propertyMap.length; i++) {
1902
+ const d = propertyMap[i];
1903
+ const addKey = (k) => {
1904
+ let arr = keyToIndices.get(k);
1905
+ if (!arr) {
1906
+ arr = [];
1907
+ keyToIndices.set(k, arr);
1908
+ }
1909
+ arr.push(i);
1910
+ };
1911
+ if (d.key) addKey(d.key);
1912
+ if (d.keys) if (Array.isArray(d.keys)) for (const k of d.keys) addKey(k);
1913
+ else for (const k of Object.values(d.keys)) addKey(k);
1914
+ }
1900
1915
  /**
1901
- * Data-driven style processor. Iterates the `propertyMap` descriptors
1902
- * and delegates each to `processDescriptor`, which maps theme values
1903
- * to CSS strings. The result is a single `css` tagged-template literal
1904
- * containing all non-null property outputs.
1916
+ * Data-driven style processor. Uses the pre-built key→index lookup to
1917
+ * iterate ONLY the descriptors whose theme keys are present in the
1918
+ * incoming theme object. Falls back to full scan only if the lookup
1919
+ * produces zero matches (defensive — shouldn't happen in practice).
1905
1920
  *
1906
1921
  * IMPORTANT: the return MUST be wrapped in `css\`...\`` — NOT a plain
1907
1922
  * string join. makeItResponsive embeds this result in another template
1908
1923
  * literal, and the CSS interpolation chain requires a css template
1909
1924
  * result (not a raw string) for correct nesting of media queries,
1910
- * pseudo-selectors, and @layer wrapping. A previous version returned
1911
- * `fragments.filter(Boolean).join(' ')` which broke responsive styles,
1912
- * hover states, and layer cascade ordering.
1925
+ * pseudo-selectors, and @layer wrapping.
1913
1926
  */
1914
1927
  const styles = ({ theme: t, css, rootSize }) => {
1915
1928
  const calc = (...params) => values(params, rootSize);
1916
1929
  const shorthand = edge(rootSize);
1917
1930
  const borderRadiusFn = borderRadius(rootSize);
1931
+ const seen = /* @__PURE__ */ new Set();
1932
+ const fragments = [];
1933
+ for (const key of Object.keys(t)) {
1934
+ const indices = keyToIndices.get(key);
1935
+ if (!indices) continue;
1936
+ for (const idx of indices) {
1937
+ if (seen.has(idx)) continue;
1938
+ seen.add(idx);
1939
+ fragments.push(processDescriptor(propertyMap[idx], t, css, calc, shorthand, borderRadiusFn));
1940
+ }
1941
+ }
1942
+ if (fragments.length === 0 && Object.keys(t).length > 0) for (const d of propertyMap) fragments.push(processDescriptor(d, t, css, calc, shorthand, borderRadiusFn));
1918
1943
  return css`
1919
- ${propertyMap.map((d) => processDescriptor(d, t, css, calc, shorthand, borderRadiusFn))}
1944
+ ${fragments}
1920
1945
  `;
1921
1946
  };
1922
1947
 
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["CoreProvider","isValidValue","hasAnyValue","formatShorthand","formatIndividual"],"sources":["../src/responsive/breakpoints.ts","../src/responsive/createMediaQueries.ts","../src/responsive/normalizeTheme.ts","../src/responsive/optimizeTheme.ts","../src/responsive/transformTheme.ts","../src/responsive/makeItResponsive.ts","../src/responsive/sortBreakpoints.ts","../src/enrichTheme.ts","../src/context.tsx","../src/styles/alignContent.ts","../src/styles/extendCss.ts","../src/units/stripUnit.ts","../src/units/value.ts","../src/units/values.ts","../src/styles/shorthands/borderRadius.ts","../src/styles/shorthands/edge.ts","../src/styles/styles/processDescriptor.ts","../src/styles/styles/propertyMap.ts","../src/styles/styles/index.ts"],"sourcesContent":["const breakpoints = {\n rootSize: 16,\n breakpoints: {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1440,\n },\n} as const\n\nexport type Breakpoints = typeof breakpoints\n\nexport default breakpoints\n","type Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\nexport type CreateMediaQueries = <\n B extends Record<string, number>,\n R extends number,\n C extends Css,\n>(props: {\n breakpoints: B\n rootSize: R\n css: C\n}) => Record<keyof B, (...args: any[]) => string>\n\n// Implementation uses Record<string, ...> which is widened from Record<keyof B, ...>;\n// the generic constraint on CreateMediaQueries ensures callers get the narrower type.\nconst createMediaQueries: CreateMediaQueries = ((props: {\n breakpoints: Record<string, number>\n rootSize: number\n css: Css\n}) => {\n const { breakpoints, rootSize, css } = props\n\n return Object.keys(breakpoints).reduce<\n Record<string, (...args: [TemplateStringsArray, ...any[]]) => string>\n >((acc, key) => {\n const breakpointValue = breakpoints[key]\n\n if (breakpointValue === 0) {\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css(...args)\n } else if (breakpointValue != null) {\n const emSize = breakpointValue / rootSize\n\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css`\n @media only screen and (min-width: ${emSize}em) {\n ${css(...args)};\n }\n `\n }\n\n return acc\n }, {})\n}) as CreateMediaQueries\n\nexport default createMediaQueries\n","type AssignToBreakpointKey = (\n breakpoints: string[],\n) => (\n valueFn: (breakpoint: string, i: number, bps: string[], result: Record<string, unknown>) => void,\n) => Record<string, unknown>\n\nconst assignToBreakpointKey: AssignToBreakpointKey = (breakpoints) => (valueFn) => {\n const result: Record<string, unknown> = {}\n breakpoints.forEach((item, i) => {\n result[item] = valueFn(item, i, breakpoints, result)\n })\n return result\n}\n\nconst handleArrayCb = (arr: (string | number)[]) => (_: unknown, i: number) => {\n const currentValue = arr[i]\n const lastValue = arr[arr.length - 1]\n return currentValue ?? lastValue\n}\n\nconst handleObjectCb =\n (obj: Record<string, unknown>) =>\n (bp: string, i: number, bps: string[], res: Record<string, unknown>) => {\n const currentValue = obj[bp]\n const prevBp = bps[i - 1]\n const previousValue = prevBp != null ? res[prevBp] : undefined\n if (currentValue != null) return currentValue\n return previousValue\n }\n\nconst handleValueCb = (value: unknown) => () => value\n\nconst shouldNormalize = (props: Record<string, any>) =>\n Object.values(props).some((item) => typeof item === 'object' || Array.isArray(item))\n\nexport type NormalizeTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => Record<string, unknown>\n\nconst normalizeTheme: NormalizeTheme = ({ theme, breakpoints }) => {\n if (!shouldNormalize(theme)) return theme\n\n const getBpValues = assignToBreakpointKey(breakpoints)\n const result: Record<string, unknown> = {}\n\n Object.entries(theme).forEach(([key, value]) => {\n if (value == null) return\n\n if (Array.isArray(value)) {\n result[key] = getBpValues(handleArrayCb(value as (string | number)[]))\n } else if (typeof value === 'object') {\n result[key] = getBpValues(handleObjectCb(value as Record<string, any>))\n } else {\n result[key] = getBpValues(handleValueCb(value))\n }\n })\n\n return result\n}\n\nexport default normalizeTheme\n","export type OptimizeTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, Record<string, unknown>>\n breakpoints: string[]\n}) => Record<string, Record<string, unknown>>\n\nconst shallowEqual = (\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (a[key] !== b[key]) return false\n }\n return true\n}\n\n/**\n * Removes breakpoints whose full-object styles are identical to the\n * previous one. Simple all-or-nothing: if ANY property differs from\n * the previous breakpoint, emit the ENTIRE current breakpoint.\n *\n * This matches the reference implementation (vitus-labs/ui-system) and\n * the original monorepo-migration version (commit 2b7c5876). Previous\n * \"optimizations\" (PRs #159, #208) that tried per-property diffing\n * broke responsive styles in subtle ways — shorthand/longhand CSS\n * property interactions, properties that depend on each other,\n * properties that need to be emitted together to cascade correctly.\n *\n * The all-or-nothing approach is the correct level of deduplication —\n * we skip the breakpoint when it's entirely redundant, and let the\n * browser's CSS cascade handle the rest.\n */\nconst optimizeTheme: OptimizeTheme = ({ theme, breakpoints }) => {\n const result: Record<string, Record<string, unknown>> = {}\n\n for (let i = 0; i < breakpoints.length; i++) {\n const key = breakpoints[i] as string\n const previousBreakpoint = breakpoints[i - 1] as string\n const current = theme[key]\n if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) {\n result[key] = current\n }\n }\n\n return result\n}\n\nexport default optimizeTheme\n","import { isEmpty, set } from '@pyreon/ui-core'\n\nconst removeUnexpectedKeys = (obj: Record<string, unknown>, keys: string[]) => {\n const result: Record<string, unknown> = {}\n keys.forEach((bp) => {\n const value = obj[bp]\n if (value) {\n result[bp] = value\n }\n })\n return result\n}\n\nexport type TransformTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => any\n\nconst transformTheme: TransformTheme = ({ theme, breakpoints }) => {\n const result = {}\n\n if (isEmpty(theme) || isEmpty(breakpoints)) return result\n\n Object.entries(theme).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length > 0) {\n value.forEach((child, i) => {\n const indexBreakpoint = breakpoints[i]\n if (indexBreakpoint == null) return\n set(result, [indexBreakpoint, key], child)\n })\n } else if (typeof value === 'object' && value !== null) {\n Object.entries(value).forEach(([childKey, childValue]) => {\n set(result, [childKey, key], childValue)\n })\n } else if (value != null) {\n const firstBreakpoint = breakpoints[0]\n if (firstBreakpoint == null) return\n set(result, [firstBreakpoint, key], value)\n }\n })\n\n return removeUnexpectedKeys(result, breakpoints)\n}\n\nexport default transformTheme\n","import { isEmpty } from '@pyreon/ui-core'\nimport type createMediaQueries from './createMediaQueries'\nimport normalizeTheme from './normalizeTheme'\nimport optimizeTheme from './optimizeTheme'\nimport type sortBreakpoints from './sortBreakpoints'\nimport transformTheme from './transformTheme'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\ntype CustomTheme = Record<string, unknown>\n\ntype Theme = Partial<{\n rootSize: number\n breakpoints: Record<string, number>\n __PYREON__: Partial<{\n media: ReturnType<typeof createMediaQueries>\n sortedBreakpoints: ReturnType<typeof sortBreakpoints>\n }>\n}> &\n CustomTheme\n\nexport type MakeItResponsiveStyles<T extends Partial<Record<string, any>> = any> = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: T\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, any> | undefined\n}) => ReturnType<typeof css> | string | any\n\nexport type MakeItResponsive = ({\n theme,\n key,\n css,\n styles,\n normalize,\n}: {\n theme?: CustomTheme\n key?: string\n css: any\n styles: MakeItResponsiveStyles\n normalize?: boolean\n}) => (props: { theme?: Theme; [prop: string]: any }) => any\n\nconst themeCache = new WeakMap<\n object,\n { breakpoints: unknown; optimized: Record<string, Record<string, unknown>> }\n>()\n\nconst makeItResponsive: MakeItResponsive =\n ({ theme: customTheme, key = '', css, styles, normalize = true }) =>\n ({ theme = {}, ...props }) => {\n const internalTheme = customTheme || props[key]\n\n if (isEmpty(internalTheme)) return ''\n\n const { rootSize, breakpoints, __PYREON__, ...restTheme } = theme as Theme\n\n const renderStyles = (styleTheme: Record<string, unknown>): ReturnType<typeof styles> =>\n styles({ theme: styleTheme, css, rootSize, globalTheme: restTheme })\n\n if (isEmpty(breakpoints) || isEmpty(__PYREON__)) {\n return css`\n ${renderStyles(internalTheme)}\n `\n }\n\n // isEmpty guard above ensures __PYREON__ is defined here\n const { media, sortedBreakpoints } = __PYREON__ as NonNullable<typeof __PYREON__>\n\n let optimizedTheme: Record<string, Record<string, unknown>>\n\n const cached = themeCache.get(internalTheme)\n if (cached && cached.breakpoints === sortedBreakpoints) {\n optimizedTheme = cached.optimized\n } else {\n let helperTheme = internalTheme\n\n if (normalize) {\n helperTheme = normalizeTheme({\n theme: internalTheme,\n breakpoints: sortedBreakpoints,\n })\n }\n\n const transformedTheme = transformTheme({\n theme: helperTheme,\n breakpoints: sortedBreakpoints,\n })\n\n optimizedTheme = optimizeTheme({\n theme: transformedTheme,\n breakpoints: sortedBreakpoints,\n })\n\n themeCache.set(internalTheme, {\n breakpoints: sortedBreakpoints,\n optimized: optimizedTheme,\n })\n }\n\n return sortedBreakpoints.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n\n if (!breakpointTheme || !media) return ''\n\n const result = renderStyles(breakpointTheme)\n\n return (media as Record<string, any>)[item]`\n ${result};\n `\n })\n }\n\nexport default makeItResponsive\n","export type SortBreakpoints = <T extends Record<string, number>>(breakpoints: T) => (keyof T)[]\n\nconst sortBreakpoints: SortBreakpoints = (breakpoints) => {\n const result = Object.keys(breakpoints).sort(\n (a, b) => (breakpoints[a] ?? 0) - (breakpoints[b] ?? 0),\n )\n return result\n}\n\nexport default sortBreakpoints\n","import { config, isEmpty } from '@pyreon/ui-core'\nimport { createMediaQueries, sortBreakpoints } from './responsive'\n\nexport type PyreonTheme = {\n rootSize?: number\n breakpoints?: Record<string, number>\n __PYREON__?: {\n sortedBreakpoints: string[] | undefined\n media: Record<string, (...args: any[]) => any> | undefined\n }\n} & Record<string, unknown>\n\n/**\n * Enrich a theme with pre-computed responsive utilities.\n * Adds sorted breakpoints and media-query tagged-template helpers\n * to `theme.__PYREON__` for consumption by `makeItResponsive`.\n *\n * This is a pure function — safe to call outside of component context.\n *\n * @example\n * const enriched = enrichTheme({ rootSize: 16, breakpoints: { xs: 0, sm: 576, md: 768 } })\n * enriched.__PYREON__.sortedBreakpoints // ['xs', 'sm', 'md']\n * enriched.__PYREON__.media.sm // tagged-template for @media (min-width: 36em)\n */\nexport function enrichTheme<T extends PyreonTheme>(\n theme: T,\n): T & Required<Pick<PyreonTheme, '__PYREON__'>> {\n const { breakpoints, rootSize = 16 } = theme\n\n const sortedBreakpoints =\n breakpoints && !isEmpty(breakpoints) ? sortBreakpoints(breakpoints) : undefined\n\n const media =\n breakpoints && !isEmpty(breakpoints)\n ? createMediaQueries({ breakpoints, css: config.css, rootSize })\n : undefined\n\n return {\n ...theme,\n __PYREON__: { sortedBreakpoints, media },\n }\n}\n","import type { VNode } from '@pyreon/core'\nimport { provide } from '@pyreon/core'\nimport { ThemeContext } from '@pyreon/styler'\nimport { Provider as CoreProvider, context } from '@pyreon/ui-core'\nimport type { PyreonTheme } from './enrichTheme'\nimport { enrichTheme } from './enrichTheme'\n\nexport type TProvider = {\n theme: PyreonTheme\n children?: VNode | null\n}\n\n/**\n * @internal Low-level provider — use `PyreonUI` from `@pyreon/ui-core` instead.\n *\n * Unistyle Provider — wraps the core Provider and enriches the theme\n * with pre-computed sorted breakpoints and media-query tagged-template\n * helpers consumed by `makeItResponsive`.\n *\n * @deprecated Prefer `<PyreonUI theme={theme} mode=\"light\">` which handles\n * all three context layers (styler, core, mode) in one component.\n */\nfunction Provider(props: TProvider): VNode | null {\n const { theme, children } = props\n\n const enrichedTheme = enrichTheme(theme)\n\n // Provide enriched theme to both the ui-core context (for rocketstyle/elements)\n // AND the styler ThemeContext (for styled() components and makeItResponsive).\n // Without this, styled() components receive an empty theme and all responsive\n // styles are skipped (@media queries produce NaN values).\n provide(ThemeContext, enrichedTheme)\n\n return CoreProvider({ theme: enrichedTheme, children }) as VNode | null\n}\n\nexport { context }\n\nexport default Provider\n","import { isEmpty } from '@pyreon/ui-core'\n\nexport type AlignContentDirectionKeys = keyof typeof ALIGN_CONTENT_DIRECTION\nexport type AlignContentAlignXKeys = keyof typeof ALIGN_CONTENT_MAP_X\nexport type AlignContentAlignYKeys = keyof typeof ALIGN_CONTENT_MAP_Y\n\nconst ALIGN_CONTENT_MAP_SHARED = {\n center: 'center',\n spaceBetween: 'space-between',\n spaceAround: 'space-around',\n block: 'stretch',\n}\n\nexport const ALIGN_CONTENT_MAP_X = {\n left: 'flex-start',\n right: 'flex-end',\n ...ALIGN_CONTENT_MAP_SHARED,\n} as const\n\nexport const ALIGN_CONTENT_MAP_Y = {\n top: 'flex-start',\n bottom: 'flex-end',\n ...ALIGN_CONTENT_MAP_SHARED,\n} as const\n\nexport const ALIGN_CONTENT_DIRECTION = {\n inline: 'row',\n reverseInline: 'row-reverse',\n rows: 'column',\n reverseRows: 'column-reverse',\n} as const\n\nexport type AlignContent = ({\n direction,\n alignX,\n alignY,\n}: {\n direction: AlignContentDirectionKeys\n alignX: AlignContentAlignXKeys\n alignY: AlignContentAlignYKeys\n}) => string | null\n\nconst alignContent: AlignContent = (attrs) => {\n const { direction, alignX, alignY } = attrs\n\n if (isEmpty(attrs) || !direction || !alignX || !alignY) {\n return null\n }\n\n const isReverted = ['inline', 'reverseInline'].includes(direction)\n const dir = ALIGN_CONTENT_DIRECTION[direction]\n const x = ALIGN_CONTENT_MAP_X[alignX]\n const y = ALIGN_CONTENT_MAP_Y[alignY]\n\n return `flex-direction: ${dir}; align-items: ${isReverted ? y : x}; justify-content: ${isReverted ? x : y};`\n}\n\nexport default alignContent\n","export type ExtendCss = (\n styles:\n | ((css: (strings: TemplateStringsArray, ...values: any[]) => string) => string)\n | string\n | null\n | undefined,\n) => string\n\nconst simpleCss = (strings: TemplateStringsArray, ...values: any[]): string => {\n let result = ''\n for (let i = 0; i < strings.length; i++) {\n result += strings[i]\n if (i < values.length) result += String(values[i] ?? '')\n }\n return result\n}\n\nconst extendCss: ExtendCss = (styles) => {\n if (!styles) return ''\n if (typeof styles === 'function') {\n return styles(simpleCss)\n }\n return styles\n}\n\nexport default extendCss\n","type Value<V> = V extends string ? number : V\ntype Unit<V> = V extends string ? string : undefined\n\nexport type StripUnit = <V extends string | number, UR extends boolean = false>(\n value: V,\n unitReturn?: UR,\n) => UR extends true ? [Value<V>, Unit<V>] : Value<V>\n\nconst stripUnit = ((value: string | number, unitReturn?: boolean) => {\n const cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/\n\n if (typeof value !== 'string') return unitReturn ? [value, undefined] : value\n\n const matchedValue = value.match(cssRegex)\n\n if (unitReturn) {\n if (matchedValue) return [parseFloat(value), matchedValue[2]]\n return [value, undefined]\n }\n\n if (matchedValue) return parseFloat(value)\n return value\n}) as StripUnit\n\nexport default stripUnit\n","import stripUnit from './stripUnit'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isNotValue = (val: unknown) => !val && val !== 0\n\nexport type Value = (\n param: string | number | null | undefined,\n rootSize?: number,\n outputUnit?: CssUnits,\n) => string | number | null\n\nconst value: Value = (param, rootSize = 16, outputUnit = 'rem'): string | number | null => {\n if (isNotValue(param)) return null\n\n // After the guard above, param is guaranteed to be string | number (non-null)\n const p = param as string | number\n\n const [val, unit] = stripUnit(p as string, true)\n if (isNotValue(val)) return null\n if (val === 0 || typeof val === 'string') return p\n\n const canConvert = rootSize && !Number.isNaN(val)\n if (canConvert && !unit && outputUnit === 'px') return `${val}${outputUnit}`\n if (canConvert && !unit) return `${val / rootSize}rem`\n if (canConvert && unit === 'px' && outputUnit === 'rem') return `${val / rootSize}rem`\n if (unit) return p\n\n return `${val}${outputUnit}`\n}\n\nexport default value\n","import value from './value'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\ntype GetValueOf = (...args: unknown[]) => number | string\nconst getValueOf: GetValueOf = (...args: any[]) =>\n args.find((v) => typeof v !== 'undefined' && v !== null)\n\nexport type Values = (\n items: unknown[],\n rootSize?: number,\n outputUnit?: CssUnits,\n) => string | number | null\n\nconst values: Values = (items, rootSize, outputUnit) => {\n const param = getValueOf(...items)\n\n if (Array.isArray(param)) {\n return param.map((item) => value(item, rootSize, outputUnit)).join(' ')\n }\n\n return value(param, rootSize, outputUnit)\n}\n\nexport default values\n","import { value } from '../../units'\n\ntype PropertyValue = string | number | null | undefined\ntype PV = PropertyValue\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype CornerValues = {\n full: PV\n top: PV\n bottom: PV\n left: PV\n right: PV\n topLeft: PV\n topRight: PV\n bottomLeft: PV\n bottomRight: PV\n}\n\nconst hasAnyValue = (v: CornerValues) =>\n isValidValue(v.full) ||\n isValidValue(v.top) ||\n isValidValue(v.bottom) ||\n isValidValue(v.left) ||\n isValidValue(v.right) ||\n isValidValue(v.topLeft) ||\n isValidValue(v.topRight) ||\n isValidValue(v.bottomLeft) ||\n isValidValue(v.bottomRight)\n\nconst resolveCorners = (v: CornerValues) => {\n const corners: PV[] = [v.full, v.full, v.full, v.full]\n if (isValidValue(v.top)) {\n corners[0] = v.top\n corners[1] = v.top\n }\n if (isValidValue(v.bottom)) {\n corners[2] = v.bottom\n corners[3] = v.bottom\n }\n if (isValidValue(v.left)) {\n corners[0] = v.left\n corners[3] = v.left\n }\n if (isValidValue(v.right)) {\n corners[1] = v.right\n corners[2] = v.right\n }\n if (isValidValue(v.topLeft)) corners[0] = v.topLeft\n if (isValidValue(v.topRight)) corners[1] = v.topRight\n if (isValidValue(v.bottomRight)) corners[2] = v.bottomRight\n if (isValidValue(v.bottomLeft)) corners[3] = v.bottomLeft\n return corners\n}\n\nconst formatShorthand = (corners: PV[], calc: (p: PV) => any) => {\n const [tl, tr, br, bl] = corners\n if (corners.every((val, _, arr) => val === arr[0])) return `border-radius: ${calc(tl)};`\n if (tl === br && tr === bl) return `border-radius: ${calc(tl)} ${calc(tr)};`\n if (tl && tr === bl && br) return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)};`\n return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)} ${calc(bl)};`\n}\n\nconst CORNER_CSS = [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n] as const\n\nconst formatIndividual = (corners: PV[], calc: (p: PV) => any) => {\n let output = ''\n for (let i = 0; i < corners.length; i++) {\n if (isValidValue(corners[i])) output += `${CORNER_CSS[i]}: ${calc(corners[i])};`\n }\n return output\n}\n\nexport type BorderRadius = (rootSize?: number) => (props: CornerValues) => string | null\n\nconst borderRadius: BorderRadius = (rootSize) => (props) => {\n if (!hasAnyValue(props)) return null\n const calc = (param: PV) => value(param, rootSize)\n const corners = resolveCorners(props)\n if (corners.every((val) => isValidValue(val))) return formatShorthand(corners, calc)\n return formatIndividual(corners, calc)\n}\n\nexport default borderRadius\n","import { value } from '../../units'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype Property = 'inset' | 'margin' | 'padding' | 'border-width' | 'border-style' | 'border-color'\ntype Value = string | number | null | undefined\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ntype EdgeValues = {\n full: Value\n x: Value\n y: Value\n top: Value\n left: Value\n right: Value\n bottom: Value\n}\n\ntype Definitions = Record<Property, { unit?: CssUnits; edgeCss: (side: Side) => string }>\n\nconst definitions: Definitions = {\n inset: { unit: 'rem', edgeCss: (side) => side },\n margin: { unit: 'rem', edgeCss: (side) => `margin-${side}` },\n padding: { unit: 'rem', edgeCss: (side) => `padding-${side}` },\n 'border-width': { unit: 'px', edgeCss: (side) => `border-${side}-width` },\n 'border-style': { edgeCss: (side) => `border-${side}-style` },\n 'border-color': { edgeCss: (side) => `border-${side}-color` },\n}\n\nconst hasAnyValue = (vals: EdgeValues) =>\n isValidValue(vals.top) ||\n isValidValue(vals.bottom) ||\n isValidValue(vals.left) ||\n isValidValue(vals.right) ||\n isValidValue(vals.x) ||\n isValidValue(vals.y) ||\n isValidValue(vals.full)\n\nconst resolveSides = ({ full, x, y, top, left, right, bottom }: EdgeValues) => {\n const sides: Value[] = [full, full, full, full]\n if (isValidValue(x)) {\n sides[1] = x\n sides[3] = x\n }\n if (isValidValue(y)) {\n sides[0] = y\n sides[2] = y\n }\n if (isValidValue(top)) sides[0] = top\n if (isValidValue(right)) sides[1] = right\n if (isValidValue(bottom)) sides[2] = bottom\n if (isValidValue(left)) sides[3] = left\n return sides\n}\n\nconst formatShorthand = (property: Property, sides: Value[], calc: (v: Value) => Value) => {\n const [t, r, b, l] = sides\n if (sides.every((val, _, arr) => val === arr[0])) return `${property}: ${calc(t)};`\n if (t === b && r === l) return `${property}: ${calc(t)} ${calc(r)};`\n if (t && r === l && b) return `${property}: ${calc(t)} ${calc(r)} ${calc(b)};`\n return `${property}: ${calc(t)} ${calc(r)} ${calc(b)} ${calc(l)};`\n}\n\nconst formatIndividual = (\n sides: Value[],\n edgeCss: (side: Side) => string,\n calc: (v: Value) => Value,\n) => {\n const [t, r, b, l] = sides\n let output = ''\n if (isValidValue(t)) output += `${edgeCss('top')}: ${calc(t)};`\n if (isValidValue(b)) output += `${edgeCss('bottom')}: ${calc(b)};`\n if (isValidValue(l)) output += `${edgeCss('left')}: ${calc(l)};`\n if (isValidValue(r)) output += `${edgeCss('right')}: ${calc(r)};`\n return output\n}\n\nexport type Edge = (rootSize?: number) => (property: Property, values: EdgeValues) => string | null\n\nconst edge: Edge =\n (rootSize = 16) =>\n (property, values) => {\n if (!hasAnyValue(values)) return null\n const { unit, edgeCss } = definitions[property]\n const calc = (param: Value) => (unit ? value(param, rootSize, unit) : param)\n const sides = resolveSides(values)\n if (sides.every((val) => isValidValue(val))) return formatShorthand(property, sides, calc)\n return formatIndividual(sides, edgeCss, calc)\n }\n\nexport default edge\n","import type { Values } from '../../units/values'\nimport type { BorderRadius } from '../shorthands/borderRadius'\nimport type { Edge } from '../shorthands/edge'\nimport type { PropertyDescriptor } from './propertyMap'\nimport type { InnerTheme } from './types'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\ntype Calc = (...params: any[]) => ReturnType<Values>\n\n/** Mirrors the Value / PropertyValue types used by edge and borderRadius shorthands. */\ntype Value = string | number | null | undefined\n\nconst toCssDecl = (css: string, v: unknown) => (v == null ? '' : `${css}: ${v};`)\n\n/**\n * Converts a single property descriptor + theme values into a CSS fragment.\n *\n * - `simple` — pass-through (no unit conversion)\n * - `convert` — number→rem via `calc()`\n * - `convert_fallback` — picks first non-null from multiple theme keys, then converts\n * - `edge` — delegates to the edge shorthand (margin, padding, inset, border-*)\n * - `border_radius` — delegates to the border-radius shorthand\n * - `special` — one-off logic (fullScreen, backgroundImage url wrapping, animation combo, etc.)\n *\n * IMPORTANT: special cases MUST return `css` tagged-template results,\n * NOT plain strings. The caller (styles/index.ts) embeds these in another\n * `css` template, and the interpolation chain requires template results\n * for correct nesting of pseudo-selectors, media queries, and @layer\n * wrapping. A previous \"optimization\" returned plain strings which broke\n * responsive styles, hover states, and media-query generation.\n */\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n css: Css,\n): string | ReturnType<typeof css> => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return css`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n `\n\n case 'backgroundImage':\n if (!t.backgroundImage) return ''\n return css`\n background-image: url(${t.backgroundImage});\n `\n\n case 'animation': {\n const parts = [t.keyframe, t.animation].filter(Boolean).join(' ')\n return parts ? `animation: ${parts};` : ''\n }\n\n case 'hideEmpty':\n if (!t.hideEmpty) return ''\n return css`\n &:empty {\n display: none;\n }\n `\n\n case 'clearFix':\n if (!t.clearFix) return ''\n return css`\n &::after {\n clear: both;\n content: '';\n display: table;\n }\n `\n\n case 'extendCss':\n return (t.extendCss as string | undefined) ?? ''\n\n default:\n return ''\n }\n}\n\nconst processDescriptor = (\n d: PropertyDescriptor,\n t: InnerTheme,\n css: Css,\n calc: Calc,\n shorthand: ReturnType<Edge>,\n borderRadiusFn: ReturnType<BorderRadius>,\n): string | ReturnType<typeof css> => {\n switch (d.kind) {\n case 'simple':\n return toCssDecl(d.css, t[d.key])\n\n case 'convert':\n return toCssDecl(d.css, calc(t[d.key]))\n\n case 'convert_fallback':\n return toCssDecl(d.css, calc(...d.keys.map((k) => t[k])))\n\n case 'edge':\n return (\n shorthand(d.property, {\n full: t[d.keys.full] as Value,\n x: t[d.keys.x] as Value,\n y: t[d.keys.y] as Value,\n top: t[d.keys.top] as Value,\n left: t[d.keys.left] as Value,\n bottom: t[d.keys.bottom] as Value,\n right: t[d.keys.right] as Value,\n }) ?? ''\n )\n\n case 'border_radius':\n return (\n borderRadiusFn({\n full: t[d.keys.full] as Value,\n top: t[d.keys.top] as Value,\n bottom: t[d.keys.bottom] as Value,\n left: t[d.keys.left] as Value,\n right: t[d.keys.right] as Value,\n topLeft: t[d.keys.topLeft] as Value,\n topRight: t[d.keys.topRight] as Value,\n bottomLeft: t[d.keys.bottomLeft] as Value,\n bottomRight: t[d.keys.bottomRight] as Value,\n }) ?? ''\n )\n\n case 'special':\n return processSpecial(d, t, css)\n }\n}\n\nexport default processDescriptor\n","import type { InnerTheme } from './types'\n\ntype EdgeProperty =\n | 'inset'\n | 'margin'\n | 'padding'\n | 'border-width'\n | 'border-style'\n | 'border-color'\n\ntype EdgeKeys = {\n full: keyof InnerTheme\n x: keyof InnerTheme\n y: keyof InnerTheme\n top: keyof InnerTheme\n left: keyof InnerTheme\n bottom: keyof InnerTheme\n right: keyof InnerTheme\n}\n\ntype BorderRadiusKeys = {\n full: keyof InnerTheme\n top: keyof InnerTheme\n bottom: keyof InnerTheme\n left: keyof InnerTheme\n right: keyof InnerTheme\n topLeft: keyof InnerTheme\n topRight: keyof InnerTheme\n bottomLeft: keyof InnerTheme\n bottomRight: keyof InnerTheme\n}\n\nexport type PropertyDescriptor =\n | { kind: 'simple'; css: string; key: keyof InnerTheme }\n | { kind: 'convert'; css: string; key: keyof InnerTheme }\n | { kind: 'convert_fallback'; css: string; keys: (keyof InnerTheme)[] }\n | { kind: 'edge'; property: EdgeProperty; keys: EdgeKeys }\n | { kind: 'border_radius'; keys: BorderRadiusKeys }\n | { kind: 'special'; id: string }\n\nconst propertyMap: PropertyDescriptor[] = [\n // SPECIAL: fullScreen\n { kind: 'special', id: 'fullScreen' },\n\n // POSITION\n { kind: 'simple', css: 'all', key: 'all' },\n { kind: 'simple', css: 'display', key: 'display' },\n { kind: 'simple', css: 'position', key: 'position' },\n { kind: 'simple', css: 'box-sizing', key: 'boxSizing' },\n { kind: 'simple', css: 'float', key: 'float' },\n\n // INSET\n {\n kind: 'edge',\n property: 'inset',\n keys: {\n full: 'inset',\n x: 'insetX',\n y: 'insetY',\n top: 'top',\n left: 'left',\n bottom: 'bottom',\n right: 'right',\n },\n },\n\n // SIZING\n { kind: 'convert_fallback', css: 'width', keys: ['width', 'size'] },\n { kind: 'convert_fallback', css: 'min-width', keys: ['minWidth', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-width', keys: ['maxWidth', 'maxSize'] },\n { kind: 'convert_fallback', css: 'height', keys: ['height', 'size'] },\n { kind: 'convert_fallback', css: 'min-height', keys: ['minHeight', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-height', keys: ['maxHeight', 'maxSize'] },\n { kind: 'convert', css: 'gap', key: 'gap' },\n { kind: 'simple', css: 'aspect-ratio', key: 'aspectRatio' },\n { kind: 'simple', css: 'contain', key: 'contain' },\n { kind: 'simple', css: 'container-type', key: 'containerType' },\n { kind: 'simple', css: 'container-name', key: 'containerName' },\n { kind: 'simple', css: 'container', key: 'container' },\n { kind: 'convert', css: 'inline-size', key: 'inlineSize' },\n { kind: 'convert', css: 'block-size', key: 'blockSize' },\n { kind: 'convert', css: 'min-inline-size', key: 'minInlineSize' },\n { kind: 'convert', css: 'min-block-size', key: 'minBlockSize' },\n { kind: 'convert', css: 'max-inline-size', key: 'maxInlineSize' },\n { kind: 'convert', css: 'max-block-size', key: 'maxBlockSize' },\n\n // SPACING\n {\n kind: 'edge',\n property: 'margin',\n keys: {\n full: 'margin',\n x: 'marginX',\n y: 'marginY',\n top: 'marginTop',\n left: 'marginLeft',\n bottom: 'marginBottom',\n right: 'marginRight',\n },\n },\n {\n kind: 'edge',\n property: 'padding',\n keys: {\n full: 'padding',\n x: 'paddingX',\n y: 'paddingY',\n top: 'paddingTop',\n left: 'paddingLeft',\n bottom: 'paddingBottom',\n right: 'paddingRight',\n },\n },\n\n // Logical spacing\n { kind: 'convert', css: 'margin-inline', key: 'marginInline' },\n { kind: 'convert', css: 'margin-inline-start', key: 'marginInlineStart' },\n { kind: 'convert', css: 'margin-inline-end', key: 'marginInlineEnd' },\n { kind: 'convert', css: 'margin-block', key: 'marginBlock' },\n { kind: 'convert', css: 'margin-block-start', key: 'marginBlockStart' },\n { kind: 'convert', css: 'margin-block-end', key: 'marginBlockEnd' },\n { kind: 'convert', css: 'padding-inline', key: 'paddingInline' },\n { kind: 'convert', css: 'padding-inline-start', key: 'paddingInlineStart' },\n { kind: 'convert', css: 'padding-inline-end', key: 'paddingInlineEnd' },\n { kind: 'convert', css: 'padding-block', key: 'paddingBlock' },\n { kind: 'convert', css: 'padding-block-start', key: 'paddingBlockStart' },\n { kind: 'convert', css: 'padding-block-end', key: 'paddingBlockEnd' },\n\n // Logical inset\n { kind: 'convert', css: 'inset-inline', key: 'insetInline' },\n { kind: 'convert', css: 'inset-inline-start', key: 'insetInlineStart' },\n { kind: 'convert', css: 'inset-inline-end', key: 'insetInlineEnd' },\n { kind: 'convert', css: 'inset-block', key: 'insetBlock' },\n { kind: 'convert', css: 'inset-block-start', key: 'insetBlockStart' },\n { kind: 'convert', css: 'inset-block-end', key: 'insetBlockEnd' },\n\n // FLEX\n { kind: 'simple', css: 'align-content', key: 'alignContent' },\n { kind: 'simple', css: 'align-items', key: 'alignItems' },\n { kind: 'simple', css: 'align-self', key: 'alignSelf' },\n { kind: 'simple', css: 'flex', key: 'flex' },\n { kind: 'simple', css: 'flex-basis', key: 'flexBasis' },\n { kind: 'simple', css: 'flex-direction', key: 'flexDirection' },\n { kind: 'simple', css: 'flex-flow', key: 'flexFlow' },\n { kind: 'simple', css: 'flex-grow', key: 'flexGrow' },\n { kind: 'simple', css: 'flex-shrink', key: 'flexShrink' },\n { kind: 'simple', css: 'flex-wrap', key: 'flexWrap' },\n { kind: 'simple', css: 'justify-content', key: 'justifyContent' },\n { kind: 'simple', css: 'justify-items', key: 'justifyItems' },\n { kind: 'simple', css: 'justify-self', key: 'justifySelf' },\n { kind: 'simple', css: 'place-items', key: 'placeItems' },\n { kind: 'simple', css: 'place-content', key: 'placeContent' },\n { kind: 'simple', css: 'place-self', key: 'placeSelf' },\n { kind: 'convert', css: 'row-gap', key: 'rowGap' },\n { kind: 'convert', css: 'column-gap', key: 'columnGap' },\n\n // GRID\n { kind: 'simple', css: 'grid', key: 'grid' },\n { kind: 'simple', css: 'grid-area', key: 'gridArea' },\n { kind: 'convert', css: 'grid-auto-columns', key: 'gridAutoColumns' },\n { kind: 'simple', css: 'grid-auto-flow', key: 'gridAutoFlow' },\n { kind: 'convert', css: 'grid-auto-rows', key: 'gridAutoRows' },\n { kind: 'simple', css: 'grid-column', key: 'gridColumn' },\n { kind: 'simple', css: 'grid-column-end', key: 'gridColumnEnd' },\n { kind: 'convert', css: 'grid-column-gap', key: 'gridColumnGap' },\n { kind: 'convert', css: 'grid-column-start', key: 'gridColumnStart' },\n { kind: 'convert', css: 'grid-gap', key: 'gridGap' },\n { kind: 'simple', css: 'grid-row', key: 'gridRow' },\n { kind: 'simple', css: 'grid-row-start', key: 'gridRowStart' },\n { kind: 'simple', css: 'grid-row-end', key: 'gridRowEnd' },\n { kind: 'convert', css: 'grid-row-gap', key: 'gridRowGap' },\n { kind: 'simple', css: 'grid-template', key: 'gridTemplate' },\n { kind: 'simple', css: 'grid-template-areas', key: 'gridTemplateAreas' },\n { kind: 'simple', css: 'grid-template-columns', key: 'gridTemplateColumns' },\n { kind: 'simple', css: 'grid-template-rows', key: 'gridTemplateRows' },\n\n // POSITIONING\n { kind: 'simple', css: 'object-fit', key: 'objectFit' },\n { kind: 'simple', css: 'object-position', key: 'objectPosition' },\n { kind: 'simple', css: 'order', key: 'order' },\n { kind: 'simple', css: 'opacity', key: 'opacity' },\n { kind: 'simple', css: 'resize', key: 'resize' },\n { kind: 'simple', css: 'vertical-align', key: 'verticalAlign' },\n\n // FONT & TEXT\n { kind: 'simple', css: 'line-height', key: 'lineHeight' },\n { kind: 'simple', css: 'font', key: 'font' },\n { kind: 'simple', css: 'font-family', key: 'fontFamily' },\n { kind: 'convert', css: 'font-size', key: 'fontSize' },\n { kind: 'convert', css: 'font-size-adjust', key: 'fontSizeAdjust' },\n { kind: 'convert', css: 'font-stretch', key: 'fontStretch' },\n { kind: 'simple', css: 'font-style', key: 'fontStyle' },\n { kind: 'simple', css: 'font-variant', key: 'fontVariant' },\n { kind: 'simple', css: 'font-weight', key: 'fontWeight' },\n { kind: 'simple', css: 'font-kerning', key: 'fontKerning' },\n { kind: 'simple', css: 'font-feature-settings', key: 'fontFeatureSettings' },\n { kind: 'simple', css: 'font-variation-settings', key: 'fontVariationSettings' },\n { kind: 'simple', css: 'font-optical-sizing', key: 'fontOpticalSizing' },\n { kind: 'simple', css: 'text-align', key: 'textAlign' },\n { kind: 'simple', css: 'text-align-last', key: 'textAlignLast' },\n { kind: 'simple', css: 'text-transform', key: 'textTransform' },\n { kind: 'simple', css: 'text-decoration', key: 'textDecoration' },\n { kind: 'simple', css: 'text-decoration-color', key: 'textDecorationColor' },\n { kind: 'simple', css: 'text-decoration-line', key: 'textDecorationLine' },\n { kind: 'simple', css: 'text-decoration-style', key: 'textDecorationStyle' },\n { kind: 'simple', css: 'text-decoration-thickness', key: 'textDecorationThickness' },\n { kind: 'simple', css: 'text-underline-offset', key: 'textUnderlineOffset' },\n { kind: 'simple', css: 'text-emphasis', key: 'textEmphasis' },\n { kind: 'simple', css: 'text-emphasis-color', key: 'textEmphasisColor' },\n { kind: 'simple', css: 'text-emphasis-style', key: 'textEmphasisStyle' },\n { kind: 'simple', css: 'letter-spacing', key: 'letterSpacing' },\n { kind: 'simple', css: 'word-spacing', key: 'wordSpacing' },\n { kind: 'simple', css: 'text-indent', key: 'textIndent' },\n { kind: 'simple', css: 'text-justify', key: 'textJustify' },\n { kind: 'simple', css: 'text-overflow', key: 'textOverflow' },\n { kind: 'simple', css: 'text-shadow', key: 'textShadow' },\n { kind: 'simple', css: 'text-wrap', key: 'textWrap' },\n { kind: 'simple', css: 'text-rendering', key: 'textRendering' },\n { kind: 'simple', css: 'white-space', key: 'whiteSpace' },\n { kind: 'simple', css: 'word-break', key: 'wordBreak' },\n { kind: 'simple', css: 'word-wrap', key: 'wordWrap' },\n { kind: 'simple', css: 'writing-mode', key: 'writingMode' },\n { kind: 'simple', css: 'direction', key: 'direction' },\n { kind: 'simple', css: 'hyphens', key: 'hyphens' },\n\n // LIST\n { kind: 'simple', css: 'list-style', key: 'listStyle' },\n { kind: 'simple', css: 'list-style-image', key: 'listStyleImage' },\n { kind: 'simple', css: 'list-style-position', key: 'listStylePosition' },\n { kind: 'simple', css: 'list-style-type', key: 'listStyleType' },\n\n // BACKGROUND & COLORS\n { kind: 'simple', css: 'color', key: 'color' },\n { kind: 'simple', css: 'background', key: 'background' },\n { kind: 'simple', css: 'background-color', key: 'backgroundColor' },\n { kind: 'special', id: 'backgroundImage' },\n { kind: 'simple', css: 'background-attachment', key: 'backgroundAttachment' },\n { kind: 'simple', css: 'background-clip', key: 'backgroundClip' },\n { kind: 'simple', css: 'background-origin', key: 'backgroundOrigin' },\n { kind: 'simple', css: 'background-position', key: 'backgroundPosition' },\n { kind: 'simple', css: 'background-repeat', key: 'backgroundRepeat' },\n { kind: 'simple', css: 'background-size', key: 'backgroundSize' },\n\n // BORDERS\n {\n kind: 'border_radius',\n keys: {\n full: 'borderRadius',\n top: 'borderRadiusTop',\n bottom: 'borderRadiusBottom',\n left: 'borderRadiusLeft',\n right: 'borderRadiusRight',\n topLeft: 'borderRadiusTopLeft',\n topRight: 'borderRadiusTopRight',\n bottomLeft: 'borderRadiusBottomLeft',\n bottomRight: 'borderRadiusBottomRight',\n },\n },\n { kind: 'simple', css: 'border', key: 'border' },\n { kind: 'simple', css: 'border-top', key: 'borderTop' },\n { kind: 'simple', css: 'border-bottom', key: 'borderBottom' },\n { kind: 'simple', css: 'border-left', key: 'borderLeft' },\n { kind: 'simple', css: 'border-right', key: 'borderRight' },\n {\n kind: 'edge',\n property: 'border-width',\n keys: {\n full: 'borderWidth',\n x: 'borderWidthX',\n y: 'borderWidthY',\n top: 'borderWidthTop',\n left: 'borderWidthLeft',\n bottom: 'borderWidthBottom',\n right: 'borderWidthRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-style',\n keys: {\n full: 'borderStyle',\n x: 'borderStyleX',\n y: 'borderStyleY',\n top: 'borderStyleTop',\n left: 'borderStyleLeft',\n bottom: 'borderStyleBottom',\n right: 'borderStyleRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-color',\n keys: {\n full: 'borderColor',\n x: 'borderColorX',\n y: 'borderColorY',\n top: 'borderColorTop',\n left: 'borderColorLeft',\n bottom: 'borderColorBottom',\n right: 'borderColorRight',\n },\n },\n { kind: 'simple', css: 'border-image', key: 'borderImage' },\n { kind: 'simple', css: 'border-image-outset', key: 'borderImageOutset' },\n { kind: 'simple', css: 'border-image-repeat', key: 'borderImageRepeat' },\n { kind: 'simple', css: 'border-image-slice', key: 'borderImageSlice' },\n { kind: 'simple', css: 'border-image-source', key: 'borderImageSource' },\n { kind: 'simple', css: 'border-image-width', key: 'borderImageWidth' },\n { kind: 'simple', css: 'border-spacing', key: 'borderSpacing' },\n\n { kind: 'simple', css: 'border-collapse', key: 'borderCollapse' },\n\n // Logical borders\n { kind: 'simple', css: 'border-inline', key: 'borderInline' },\n { kind: 'simple', css: 'border-block', key: 'borderBlock' },\n { kind: 'simple', css: 'border-inline-start', key: 'borderInlineStart' },\n { kind: 'simple', css: 'border-inline-end', key: 'borderInlineEnd' },\n { kind: 'simple', css: 'border-block-start', key: 'borderBlockStart' },\n { kind: 'simple', css: 'border-block-end', key: 'borderBlockEnd' },\n\n // VISUAL EFFECTS\n { kind: 'simple', css: 'backface-visibility', key: 'backfaceVisibility' },\n { kind: 'simple', css: 'box-shadow', key: 'boxShadow' },\n { kind: 'simple', css: 'filter', key: 'filter' },\n { kind: 'simple', css: 'backdrop-filter', key: 'backdropFilter' },\n { kind: 'simple', css: 'mix-blend-mode', key: 'mixBlendMode' },\n { kind: 'simple', css: 'background-blend-mode', key: 'backgroundBlendMode' },\n { kind: 'simple', css: 'isolation', key: 'isolation' },\n { kind: 'simple', css: 'outline', key: 'outline' },\n { kind: 'simple', css: 'outline-color', key: 'outlineColor' },\n { kind: 'simple', css: 'outline-offset', key: 'outlineOffset' },\n { kind: 'simple', css: 'outline-style', key: 'outlineStyle' },\n { kind: 'simple', css: 'outline-width', key: 'outlineWidth' },\n\n // ANIMATIONS\n { kind: 'special', id: 'animation' },\n { kind: 'simple', css: 'animation-name', key: 'animationName' },\n { kind: 'simple', css: 'animation-duration', key: 'animationDuration' },\n { kind: 'simple', css: 'animation-timing-function', key: 'animationTimingFunction' },\n { kind: 'simple', css: 'animation-delay', key: 'animationDelay' },\n { kind: 'simple', css: 'animation-iteration-count', key: 'animationIterationCount' },\n { kind: 'simple', css: 'animation-direction', key: 'animationDirection' },\n { kind: 'simple', css: 'animation-fill-mode', key: 'animationFillMode' },\n { kind: 'simple', css: 'animation-play-state', key: 'animationPlayState' },\n { kind: 'simple', css: 'transition', key: 'transition' },\n { kind: 'simple', css: 'transition-delay', key: 'transitionDelay' },\n { kind: 'simple', css: 'transition-duration', key: 'transitionDuration' },\n { kind: 'simple', css: 'transition-property', key: 'transitionProperty' },\n { kind: 'simple', css: 'transition-timing-function', key: 'transitionTimingFunction' },\n\n // TRANSFORM\n { kind: 'simple', css: 'transform', key: 'transform' },\n { kind: 'simple', css: 'transform-origin', key: 'transformOrigin' },\n { kind: 'simple', css: 'transform-style', key: 'transformStyle' },\n { kind: 'simple', css: 'translate', key: 'translate' },\n { kind: 'simple', css: 'rotate', key: 'rotate' },\n { kind: 'simple', css: 'scale', key: 'scale' },\n { kind: 'simple', css: 'will-change', key: 'willChange' },\n\n // SCROLL\n { kind: 'simple', css: 'scroll-behavior', key: 'scrollBehavior' },\n { kind: 'simple', css: 'scroll-snap-type', key: 'scrollSnapType' },\n { kind: 'simple', css: 'scroll-snap-align', key: 'scrollSnapAlign' },\n { kind: 'simple', css: 'scroll-snap-stop', key: 'scrollSnapStop' },\n { kind: 'simple', css: 'scroll-margin', key: 'scrollMargin' },\n { kind: 'simple', css: 'scroll-padding', key: 'scrollPadding' },\n { kind: 'simple', css: 'overscroll-behavior', key: 'overscrollBehavior' },\n { kind: 'simple', css: 'overscroll-behavior-x', key: 'overscrollBehaviorX' },\n { kind: 'simple', css: 'overscroll-behavior-y', key: 'overscrollBehaviorY' },\n\n // INTERACTION\n { kind: 'simple', css: 'cursor', key: 'cursor' },\n { kind: 'simple', css: 'pointer-events', key: 'pointerEvents' },\n { kind: 'simple', css: 'user-select', key: 'userSelect' },\n { kind: 'simple', css: 'touch-action', key: 'touchAction' },\n { kind: 'simple', css: 'scrollbar-width', key: 'scrollbarWidth' },\n { kind: 'simple', css: 'scrollbar-color', key: 'scrollbarColor' },\n { kind: 'simple', css: 'scrollbar-gutter', key: 'scrollbarGutter' },\n { kind: 'simple', css: 'caret-color', key: 'caretColor' },\n { kind: 'simple', css: 'accent-color', key: 'accentColor' },\n { kind: 'simple', css: 'color-scheme', key: 'colorScheme' },\n\n // OTHER\n { kind: 'simple', css: 'caption-side', key: 'captionSide' },\n { kind: 'simple', css: 'clear', key: 'clear' },\n { kind: 'simple', css: 'clip', key: 'clip' },\n { kind: 'simple', css: 'clip-path', key: 'clipPath' },\n { kind: 'simple', css: 'content', key: 'content' },\n { kind: 'simple', css: 'content-visibility', key: 'contentVisibility' },\n { kind: 'simple', css: 'counter-increment', key: 'counterIncrement' },\n { kind: 'simple', css: 'counter-reset', key: 'counterReset' },\n { kind: 'simple', css: 'empty-cells', key: 'emptyCells' },\n { kind: 'simple', css: 'z-index', key: 'zIndex' },\n { kind: 'simple', css: 'overflow', key: 'overflow' },\n { kind: 'simple', css: 'overflow-wrap', key: 'overflowWrap' },\n { kind: 'simple', css: 'overflow-x', key: 'overflowX' },\n { kind: 'simple', css: 'overflow-y', key: 'overflowY' },\n { kind: 'simple', css: 'perspective', key: 'perspective' },\n { kind: 'simple', css: 'perspective-origin', key: 'perspectiveOrigin' },\n { kind: 'simple', css: 'quotes', key: 'quotes' },\n { kind: 'simple', css: 'tab-size', key: 'tabSize' },\n { kind: 'simple', css: 'table-layout', key: 'tableLayout' },\n { kind: 'simple', css: 'visibility', key: 'visibility' },\n { kind: 'simple', css: 'appearance', key: 'appearance' },\n { kind: 'simple', css: 'image-rendering', key: 'imageRendering' },\n\n // Masks\n { kind: 'simple', css: 'mask-image', key: 'maskImage' },\n { kind: 'simple', css: 'mask-size', key: 'maskSize' },\n { kind: 'simple', css: 'mask-position', key: 'maskPosition' },\n { kind: 'simple', css: 'mask-repeat', key: 'maskRepeat' },\n\n // Shapes\n { kind: 'simple', css: 'shape-outside', key: 'shapeOutside' },\n { kind: 'simple', css: 'shape-margin', key: 'shapeMargin' },\n { kind: 'simple', css: 'shape-image-threshold', key: 'shapeImageThreshold' },\n\n // Columns\n { kind: 'simple', css: 'column-count', key: 'columnCount' },\n { kind: 'simple', css: 'column-width', key: 'columnWidth' },\n { kind: 'simple', css: 'column-rule', key: 'columnRule' },\n { kind: 'simple', css: 'columns', key: 'columns' },\n\n // Fragmentation\n { kind: 'simple', css: 'break-before', key: 'breakBefore' },\n { kind: 'simple', css: 'break-after', key: 'breakAfter' },\n { kind: 'simple', css: 'break-inside', key: 'breakInside' },\n { kind: 'simple', css: 'orphans', key: 'orphans' },\n { kind: 'simple', css: 'widows', key: 'widows' },\n { kind: 'simple', css: 'print-color-adjust', key: 'printColorAdjust' },\n\n // CUSTOM ATTRIBUTES\n { kind: 'special', id: 'hideEmpty' },\n { kind: 'special', id: 'clearFix' },\n { kind: 'special', id: 'extendCss' },\n]\n\nexport default propertyMap\n","import { values } from '../../units'\nimport { borderRadius, edge } from '../shorthands'\nimport processDescriptor from './processDescriptor'\nimport propertyMap from './propertyMap'\nimport type { ITheme, InnerTheme, Theme } from './types'\n\nexport type { ITheme, Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => any\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, any> | undefined\n}) => ReturnType<Css>\n\n/**\n * Data-driven style processor. Iterates the `propertyMap` descriptors\n * and delegates each to `processDescriptor`, which maps theme values\n * to CSS strings. The result is a single `css` tagged-template literal\n * containing all non-null property outputs.\n *\n * IMPORTANT: the return MUST be wrapped in `css\\`...\\`` — NOT a plain\n * string join. makeItResponsive embeds this result in another template\n * literal, and the CSS interpolation chain requires a css template\n * result (not a raw string) for correct nesting of media queries,\n * pseudo-selectors, and @layer wrapping. A previous version returned\n * `fragments.filter(Boolean).join(' ')` which broke responsive styles,\n * hover states, and layer cascade ordering.\n */\nconst styles: Styles = ({ theme: t, css, rootSize }) => {\n const calc = (...params: any[]) => values(params, rootSize)\n const shorthand = edge(rootSize)\n const borderRadiusFn = borderRadius(rootSize)\n\n const fragments = propertyMap.map((d) =>\n processDescriptor(d, t, css, calc, shorthand, borderRadiusFn),\n )\n\n return css`\n ${fragments}\n `\n}\n\nexport default styles\n"],"mappings":";;;;;AAAA,MAAM,cAAc;CAClB,UAAU;CACV,aAAa;EACX,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,KAAK;EACN;CACF;;;;ACID,MAAM,uBAA2C,UAI3C;CACJ,MAAM,EAAE,aAAa,UAAU,QAAQ;AAEvC,QAAO,OAAO,KAAK,YAAY,CAAC,QAE7B,KAAK,QAAQ;EACd,MAAM,kBAAkB,YAAY;AAEpC,MAAI,oBAAoB,EACtB,KAAI,QAAQ,GAAG,SAA2C,IAAI,GAAG,KAAK;WAC7D,mBAAmB,MAAM;GAClC,MAAM,SAAS,kBAAkB;AAEjC,OAAI,QAAQ,GAAG,SAA2C,GAAG;6CACtB,OAAO;YACxC,IAAI,GAAG,KAAK,CAAC;;;;AAKrB,SAAO;IACN,EAAE,CAAC;;;;;ACjCR,MAAM,yBAAgD,iBAAiB,YAAY;CACjF,MAAM,SAAkC,EAAE;AAC1C,aAAY,SAAS,MAAM,MAAM;AAC/B,SAAO,QAAQ,QAAQ,MAAM,GAAG,aAAa,OAAO;GACpD;AACF,QAAO;;AAGT,MAAM,iBAAiB,SAA8B,GAAY,MAAc;CAC7E,MAAM,eAAe,IAAI;CACzB,MAAM,YAAY,IAAI,IAAI,SAAS;AACnC,QAAO,gBAAgB;;AAGzB,MAAM,kBACH,SACA,IAAY,GAAW,KAAe,QAAiC;CACtE,MAAM,eAAe,IAAI;CACzB,MAAM,SAAS,IAAI,IAAI;CACvB,MAAM,gBAAgB,UAAU,OAAO,IAAI,UAAU;AACrD,KAAI,gBAAgB,KAAM,QAAO;AACjC,QAAO;;AAGX,MAAM,iBAAiB,gBAAyB;AAEhD,MAAM,mBAAmB,UACvB,OAAO,OAAO,MAAM,CAAC,MAAM,SAAS,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAAC;AAUtF,MAAM,kBAAkC,EAAE,OAAO,kBAAkB;AACjE,KAAI,CAAC,gBAAgB,MAAM,CAAE,QAAO;CAEpC,MAAM,cAAc,sBAAsB,YAAY;CACtD,MAAM,SAAkC,EAAE;AAE1C,QAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,WAAW;AAC9C,MAAI,SAAS,KAAM;AAEnB,MAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,OAAO,YAAY,cAAc,MAA6B,CAAC;WAC7D,OAAO,UAAU,SAC1B,QAAO,OAAO,YAAY,eAAe,MAA6B,CAAC;MAEvE,QAAO,OAAO,YAAY,cAAc,MAAM,CAAC;GAEjD;AAEF,QAAO;;;;;ACrDT,MAAM,gBACJ,GACA,MACY;AACZ,KAAI,MAAM,EAAG,QAAO;AACpB,KAAI,CAAC,KAAK,CAAC,EAAG,QAAO;CACrB,MAAM,QAAQ,OAAO,KAAK,EAAE;CAC5B,MAAM,QAAQ,OAAO,KAAK,EAAE;AAC5B,KAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAC1C,MAAK,MAAM,OAAO,MAChB,KAAI,EAAE,SAAS,EAAE,KAAM,QAAO;AAEhC,QAAO;;;;;;;;;;;;;;;;;;AAmBT,MAAM,iBAAgC,EAAE,OAAO,kBAAkB;CAC/D,MAAM,SAAkD,EAAE;AAE1D,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,MAAM,MAAM,YAAY;EACxB,MAAM,qBAAqB,YAAY,IAAI;EAC3C,MAAM,UAAU,MAAM;AACtB,MAAI,YAAY,MAAM,KAAK,CAAC,aAAa,MAAM,qBAAqB,QAAQ,EAC1E,QAAO,OAAO;;AAIlB,QAAO;;;;;ACjDT,MAAM,wBAAwB,KAA8B,SAAmB;CAC7E,MAAM,SAAkC,EAAE;AAC1C,MAAK,SAAS,OAAO;EACnB,MAAM,QAAQ,IAAI;AAClB,MAAI,MACF,QAAO,MAAM;GAEf;AACF,QAAO;;AAWT,MAAM,kBAAkC,EAAE,OAAO,kBAAkB;CACjE,MAAM,SAAS,EAAE;AAEjB,KAAI,QAAQ,MAAM,IAAI,QAAQ,YAAY,CAAE,QAAO;AAEnD,QAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,WAAW;AAC9C,MAAI,MAAM,QAAQ,MAAM,IAAI,MAAM,SAAS,EACzC,OAAM,SAAS,OAAO,MAAM;GAC1B,MAAM,kBAAkB,YAAY;AACpC,OAAI,mBAAmB,KAAM;AAC7B,OAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,MAAM;IAC1C;WACO,OAAO,UAAU,YAAY,UAAU,KAChD,QAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,UAAU,gBAAgB;AACxD,OAAI,QAAQ,CAAC,UAAU,IAAI,EAAE,WAAW;IACxC;WACO,SAAS,MAAM;GACxB,MAAM,kBAAkB,YAAY;AACpC,OAAI,mBAAmB,KAAM;AAC7B,OAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,MAAM;;GAE5C;AAEF,QAAO,qBAAqB,QAAQ,YAAY;;;;;ACGlD,MAAM,6BAAa,IAAI,SAGpB;AAEH,MAAM,oBACH,EAAE,OAAO,aAAa,MAAM,IAAI,KAAK,QAAQ,YAAY,YACzD,EAAE,QAAQ,EAAE,EAAE,GAAG,YAAY;CAC5B,MAAM,gBAAgB,eAAe,MAAM;AAE3C,KAAI,QAAQ,cAAc,CAAE,QAAO;CAEnC,MAAM,EAAE,UAAU,aAAa,YAAY,GAAG,cAAc;CAE5D,MAAM,gBAAgB,eACpB,OAAO;EAAE,OAAO;EAAY;EAAK;EAAU,aAAa;EAAW,CAAC;AAEtE,KAAI,QAAQ,YAAY,IAAI,QAAQ,WAAW,CAC7C,QAAO,GAAG;UACN,aAAa,cAAc,CAAC;;CAKlC,MAAM,EAAE,OAAO,sBAAsB;CAErC,IAAI;CAEJ,MAAM,SAAS,WAAW,IAAI,cAAc;AAC5C,KAAI,UAAU,OAAO,gBAAgB,kBACnC,kBAAiB,OAAO;MACnB;EACL,IAAI,cAAc;AAElB,MAAI,UACF,eAAc,eAAe;GAC3B,OAAO;GACP,aAAa;GACd,CAAC;AAQJ,mBAAiB,cAAc;GAC7B,OANuB,eAAe;IACtC,OAAO;IACP,aAAa;IACd,CAAC;GAIA,aAAa;GACd,CAAC;AAEF,aAAW,IAAI,eAAe;GAC5B,aAAa;GACb,WAAW;GACZ,CAAC;;AAGJ,QAAO,kBAAkB,KAAK,SAAiB;EAC7C,MAAM,kBAAkB,eAAe;AAEvC,MAAI,CAAC,mBAAmB,CAAC,MAAO,QAAO;EAEvC,MAAM,SAAS,aAAa,gBAAgB;AAE5C,SAAO,AAAC,MAA8B,KAAK;UACvC,OAAO;;GAEX;;;;;AChHN,MAAM,mBAAoC,gBAAgB;AAIxD,QAHe,OAAO,KAAK,YAAY,CAAC,MACrC,GAAG,OAAO,YAAY,MAAM,MAAM,YAAY,MAAM,GACtD;;;;;;;;;;;;;;;;;ACmBH,SAAgB,YACd,OAC+C;CAC/C,MAAM,EAAE,aAAa,WAAW,OAAO;CAEvC,MAAM,oBACJ,eAAe,CAAC,QAAQ,YAAY,GAAG,gBAAgB,YAAY,GAAG;CAExE,MAAM,QACJ,eAAe,CAAC,QAAQ,YAAY,GAChC,mBAAmB;EAAE;EAAa,KAAK,OAAO;EAAK;EAAU,CAAC,GAC9D;AAEN,QAAO;EACL,GAAG;EACH,YAAY;GAAE;GAAmB;GAAO;EACzC;;;;;;;;;;;;;;;AClBH,SAAS,SAAS,OAAgC;CAChD,MAAM,EAAE,OAAO,aAAa;CAE5B,MAAM,gBAAgB,YAAY,MAAM;AAMxC,SAAQ,cAAc,cAAc;AAEpC,QAAOA,WAAa;EAAE,OAAO;EAAe;EAAU,CAAC;;;;;AC3BzD,MAAM,2BAA2B;CAC/B,QAAQ;CACR,cAAc;CACd,aAAa;CACb,OAAO;CACR;AAED,MAAa,sBAAsB;CACjC,MAAM;CACN,OAAO;CACP,GAAG;CACJ;AAED,MAAa,sBAAsB;CACjC,KAAK;CACL,QAAQ;CACR,GAAG;CACJ;AAED,MAAa,0BAA0B;CACrC,QAAQ;CACR,eAAe;CACf,MAAM;CACN,aAAa;CACd;AAYD,MAAM,gBAA8B,UAAU;CAC5C,MAAM,EAAE,WAAW,QAAQ,WAAW;AAEtC,KAAI,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAC9C,QAAO;CAGT,MAAM,aAAa,CAAC,UAAU,gBAAgB,CAAC,SAAS,UAAU;CAClE,MAAM,MAAM,wBAAwB;CACpC,MAAM,IAAI,oBAAoB;CAC9B,MAAM,IAAI,oBAAoB;AAE9B,QAAO,mBAAmB,IAAI,iBAAiB,aAAa,IAAI,EAAE,qBAAqB,aAAa,IAAI,EAAE;;;;;AC9C5G,MAAM,aAAa,SAA+B,GAAG,WAA0B;CAC7E,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAU,QAAQ;AAClB,MAAI,IAAI,OAAO,OAAQ,WAAU,OAAO,OAAO,MAAM,GAAG;;AAE1D,QAAO;;AAGT,MAAM,aAAwB,WAAW;AACvC,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,OAAO,WAAW,WACpB,QAAO,OAAO,UAAU;AAE1B,QAAO;;;;;ACdT,MAAM,cAAc,OAAwB,eAAyB;CACnE,MAAM,WAAW;AAEjB,KAAI,OAAO,UAAU,SAAU,QAAO,aAAa,CAAC,OAAO,OAAU,GAAG;CAExE,MAAM,eAAe,MAAM,MAAM,SAAS;AAE1C,KAAI,YAAY;AACd,MAAI,aAAc,QAAO,CAAC,WAAW,MAAM,EAAE,aAAa,GAAG;AAC7D,SAAO,CAAC,OAAO,OAAU;;AAG3B,KAAI,aAAc,QAAO,WAAW,MAAM;AAC1C,QAAO;;;;;ACFT,MAAM,cAAc,QAAiB,CAAC,OAAO,QAAQ;AAQrD,MAAM,SAAgB,OAAO,WAAW,IAAI,aAAa,UAAkC;AACzF,KAAI,WAAW,MAAM,CAAE,QAAO;CAG9B,MAAM,IAAI;CAEV,MAAM,CAAC,KAAK,QAAQ,UAAU,GAAa,KAAK;AAChD,KAAI,WAAW,IAAI,CAAE,QAAO;AAC5B,KAAI,QAAQ,KAAK,OAAO,QAAQ,SAAU,QAAO;CAEjD,MAAM,aAAa,YAAY,CAAC,OAAO,MAAM,IAAI;AACjD,KAAI,cAAc,CAAC,QAAQ,eAAe,KAAM,QAAO,GAAG,MAAM;AAChE,KAAI,cAAc,CAAC,KAAM,QAAO,GAAG,MAAM,SAAS;AAClD,KAAI,cAAc,SAAS,QAAQ,eAAe,MAAO,QAAO,GAAG,MAAM,SAAS;AAClF,KAAI,KAAM,QAAO;AAEjB,QAAO,GAAG,MAAM;;;;;ACvBlB,MAAM,cAA0B,GAAG,SACjC,KAAK,MAAM,MAAM,OAAO,MAAM,eAAe,MAAM,KAAK;AAQ1D,MAAM,UAAkB,OAAO,UAAU,eAAe;CACtD,MAAM,QAAQ,WAAW,GAAG,MAAM;AAElC,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,SAAS,MAAM,MAAM,UAAU,WAAW,CAAC,CAAC,KAAK,IAAI;AAGzE,QAAO,MAAM,OAAO,UAAU,WAAW;;;;;AC/B3C,MAAMC,kBAAgB,MAAe,CAAC,CAAC,KAAK,MAAM;AAclD,MAAMC,iBAAe,MACnBD,eAAa,EAAE,KAAK,IACpBA,eAAa,EAAE,IAAI,IACnBA,eAAa,EAAE,OAAO,IACtBA,eAAa,EAAE,KAAK,IACpBA,eAAa,EAAE,MAAM,IACrBA,eAAa,EAAE,QAAQ,IACvBA,eAAa,EAAE,SAAS,IACxBA,eAAa,EAAE,WAAW,IAC1BA,eAAa,EAAE,YAAY;AAE7B,MAAM,kBAAkB,MAAoB;CAC1C,MAAM,UAAgB;EAAC,EAAE;EAAM,EAAE;EAAM,EAAE;EAAM,EAAE;EAAK;AACtD,KAAIA,eAAa,EAAE,IAAI,EAAE;AACvB,UAAQ,KAAK,EAAE;AACf,UAAQ,KAAK,EAAE;;AAEjB,KAAIA,eAAa,EAAE,OAAO,EAAE;AAC1B,UAAQ,KAAK,EAAE;AACf,UAAQ,KAAK,EAAE;;AAEjB,KAAIA,eAAa,EAAE,KAAK,EAAE;AACxB,UAAQ,KAAK,EAAE;AACf,UAAQ,KAAK,EAAE;;AAEjB,KAAIA,eAAa,EAAE,MAAM,EAAE;AACzB,UAAQ,KAAK,EAAE;AACf,UAAQ,KAAK,EAAE;;AAEjB,KAAIA,eAAa,EAAE,QAAQ,CAAE,SAAQ,KAAK,EAAE;AAC5C,KAAIA,eAAa,EAAE,SAAS,CAAE,SAAQ,KAAK,EAAE;AAC7C,KAAIA,eAAa,EAAE,YAAY,CAAE,SAAQ,KAAK,EAAE;AAChD,KAAIA,eAAa,EAAE,WAAW,CAAE,SAAQ,KAAK,EAAE;AAC/C,QAAO;;AAGT,MAAME,qBAAmB,SAAe,SAAyB;CAC/D,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM;AACzB,KAAI,QAAQ,OAAO,KAAK,GAAG,QAAQ,QAAQ,IAAI,GAAG,CAAE,QAAO,kBAAkB,KAAK,GAAG,CAAC;AACtF,KAAI,OAAO,MAAM,OAAO,GAAI,QAAO,kBAAkB,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;AAC1E,KAAI,MAAM,OAAO,MAAM,GAAI,QAAO,kBAAkB,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;AACrF,QAAO,kBAAkB,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;;AAGxE,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACD;AAED,MAAMC,sBAAoB,SAAe,SAAyB;CAChE,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAClC,KAAIH,eAAa,QAAQ,GAAG,CAAE,WAAU,GAAG,WAAW,GAAG,IAAI,KAAK,QAAQ,GAAG,CAAC;AAEhF,QAAO;;AAKT,MAAM,gBAA8B,cAAc,UAAU;AAC1D,KAAI,CAACC,cAAY,MAAM,CAAE,QAAO;CAChC,MAAM,QAAQ,UAAc,MAAM,OAAO,SAAS;CAClD,MAAM,UAAU,eAAe,MAAM;AACrC,KAAI,QAAQ,OAAO,QAAQD,eAAa,IAAI,CAAC,CAAE,QAAOE,kBAAgB,SAAS,KAAK;AACpF,QAAOC,mBAAiB,SAAS,KAAK;;;;;AClExC,MAAM,gBAAgB,MAAe,CAAC,CAAC,KAAK,MAAM;AAkBlD,MAAM,cAA2B;CAC/B,OAAO;EAAE,MAAM;EAAO,UAAU,SAAS;EAAM;CAC/C,QAAQ;EAAE,MAAM;EAAO,UAAU,SAAS,UAAU;EAAQ;CAC5D,SAAS;EAAE,MAAM;EAAO,UAAU,SAAS,WAAW;EAAQ;CAC9D,gBAAgB;EAAE,MAAM;EAAM,UAAU,SAAS,UAAU,KAAK;EAAS;CACzE,gBAAgB,EAAE,UAAU,SAAS,UAAU,KAAK,SAAS;CAC7D,gBAAgB,EAAE,UAAU,SAAS,UAAU,KAAK,SAAS;CAC9D;AAED,MAAM,eAAe,SACnB,aAAa,KAAK,IAAI,IACtB,aAAa,KAAK,OAAO,IACzB,aAAa,KAAK,KAAK,IACvB,aAAa,KAAK,MAAM,IACxB,aAAa,KAAK,EAAE,IACpB,aAAa,KAAK,EAAE,IACpB,aAAa,KAAK,KAAK;AAEzB,MAAM,gBAAgB,EAAE,MAAM,GAAG,GAAG,KAAK,MAAM,OAAO,aAAyB;CAC7E,MAAM,QAAiB;EAAC;EAAM;EAAM;EAAM;EAAK;AAC/C,KAAI,aAAa,EAAE,EAAE;AACnB,QAAM,KAAK;AACX,QAAM,KAAK;;AAEb,KAAI,aAAa,EAAE,EAAE;AACnB,QAAM,KAAK;AACX,QAAM,KAAK;;AAEb,KAAI,aAAa,IAAI,CAAE,OAAM,KAAK;AAClC,KAAI,aAAa,MAAM,CAAE,OAAM,KAAK;AACpC,KAAI,aAAa,OAAO,CAAE,OAAM,KAAK;AACrC,KAAI,aAAa,KAAK,CAAE,OAAM,KAAK;AACnC,QAAO;;AAGT,MAAM,mBAAmB,UAAoB,OAAgB,SAA8B;CACzF,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK;AACrB,KAAI,MAAM,OAAO,KAAK,GAAG,QAAQ,QAAQ,IAAI,GAAG,CAAE,QAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC;AACjF,KAAI,MAAM,KAAK,MAAM,EAAG,QAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;AAClE,KAAI,KAAK,MAAM,KAAK,EAAG,QAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;AAC5E,QAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;;AAGlE,MAAM,oBACJ,OACA,SACA,SACG;CACH,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK;CACrB,IAAI,SAAS;AACb,KAAI,aAAa,EAAE,CAAE,WAAU,GAAG,QAAQ,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AAC7D,KAAI,aAAa,EAAE,CAAE,WAAU,GAAG,QAAQ,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;AAChE,KAAI,aAAa,EAAE,CAAE,WAAU,GAAG,QAAQ,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;AAC9D,KAAI,aAAa,EAAE,CAAE,WAAU,GAAG,QAAQ,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;AAC/D,QAAO;;AAKT,MAAM,QACH,WAAW,QACX,UAAU,WAAW;AACpB,KAAI,CAAC,YAAY,OAAO,CAAE,QAAO;CACjC,MAAM,EAAE,MAAM,YAAY,YAAY;CACtC,MAAM,QAAQ,UAAkB,OAAO,MAAM,OAAO,UAAU,KAAK,GAAG;CACtE,MAAM,QAAQ,aAAa,OAAO;AAClC,KAAI,MAAM,OAAO,QAAQ,aAAa,IAAI,CAAC,CAAE,QAAO,gBAAgB,UAAU,OAAO,KAAK;AAC1F,QAAO,iBAAiB,OAAO,SAAS,KAAK;;;;;AC5FjD,MAAM,aAAa,KAAa,MAAgB,KAAK,OAAO,KAAK,GAAG,IAAI,IAAI,EAAE;;;;;;;;;;;;;;;;;;AAmB9E,MAAM,kBACJ,GACA,GACA,QACoC;AACpC,SAAQ,EAAE,IAAV;EACE,KAAK;AACH,OAAI,CAAC,EAAE,WAAY,QAAO;AAC1B,UAAO,GAAG;;;;;;;EAQZ,KAAK;AACH,OAAI,CAAC,EAAE,gBAAiB,QAAO;AAC/B,UAAO,GAAG;gCACgB,EAAE,gBAAgB;;EAG9C,KAAK,aAAa;GAChB,MAAM,QAAQ,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AACjE,UAAO,QAAQ,cAAc,MAAM,KAAK;;EAG1C,KAAK;AACH,OAAI,CAAC,EAAE,UAAW,QAAO;AACzB,UAAO,GAAG;;;;;EAMZ,KAAK;AACH,OAAI,CAAC,EAAE,SAAU,QAAO;AACxB,UAAO,GAAG;;;;;;;EAQZ,KAAK,YACH,QAAQ,EAAE,aAAoC;EAEhD,QACE,QAAO;;;AAIb,MAAM,qBACJ,GACA,GACA,KACA,MACA,WACA,mBACoC;AACpC,SAAQ,EAAE,MAAV;EACE,KAAK,SACH,QAAO,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK;EAEnC,KAAK,UACH,QAAO,UAAU,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,CAAC;EAEzC,KAAK,mBACH,QAAO,UAAU,EAAE,KAAK,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;EAE3D,KAAK,OACH,QACE,UAAU,EAAE,UAAU;GACpB,MAAM,EAAE,EAAE,KAAK;GACf,GAAG,EAAE,EAAE,KAAK;GACZ,GAAG,EAAE,EAAE,KAAK;GACZ,KAAK,EAAE,EAAE,KAAK;GACd,MAAM,EAAE,EAAE,KAAK;GACf,QAAQ,EAAE,EAAE,KAAK;GACjB,OAAO,EAAE,EAAE,KAAK;GACjB,CAAC,IAAI;EAGV,KAAK,gBACH,QACE,eAAe;GACb,MAAM,EAAE,EAAE,KAAK;GACf,KAAK,EAAE,EAAE,KAAK;GACd,QAAQ,EAAE,EAAE,KAAK;GACjB,MAAM,EAAE,EAAE,KAAK;GACf,OAAO,EAAE,EAAE,KAAK;GAChB,SAAS,EAAE,EAAE,KAAK;GAClB,UAAU,EAAE,EAAE,KAAK;GACnB,YAAY,EAAE,EAAE,KAAK;GACrB,aAAa,EAAE,EAAE,KAAK;GACvB,CAAC,IAAI;EAGV,KAAK,UACH,QAAO,eAAe,GAAG,GAAG,IAAI;;;;;;AC3FtC,MAAM,cAAoC;CAExC;EAAE,MAAM;EAAW,IAAI;EAAc;CAGrC;EAAE,MAAM;EAAU,KAAK;EAAO,KAAK;EAAO;CAC1C;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAY,KAAK;EAAY;CACpD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAS,KAAK;EAAS;CAG9C;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CAGD;EAAE,MAAM;EAAoB,KAAK;EAAS,MAAM,CAAC,SAAS,OAAO;EAAE;CACnE;EAAE,MAAM;EAAoB,KAAK;EAAa,MAAM,CAAC,YAAY,UAAU;EAAE;CAC7E;EAAE,MAAM;EAAoB,KAAK;EAAa,MAAM,CAAC,YAAY,UAAU;EAAE;CAC7E;EAAE,MAAM;EAAoB,KAAK;EAAU,MAAM,CAAC,UAAU,OAAO;EAAE;CACrE;EAAE,MAAM;EAAoB,KAAK;EAAc,MAAM,CAAC,aAAa,UAAU;EAAE;CAC/E;EAAE,MAAM;EAAoB,KAAK;EAAc,MAAM,CAAC,aAAa,UAAU;EAAE;CAC/E;EAAE,MAAM;EAAW,KAAK;EAAO,KAAK;EAAO;CAC3C;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAa;CACtD;EAAE,MAAM;EAAW,KAAK;EAAe,KAAK;EAAc;CAC1D;EAAE,MAAM;EAAW,KAAK;EAAc,KAAK;EAAa;CACxD;EAAE,MAAM;EAAW,KAAK;EAAmB,KAAK;EAAiB;CACjE;EAAE,MAAM;EAAW,KAAK;EAAkB,KAAK;EAAgB;CAC/D;EAAE,MAAM;EAAW,KAAK;EAAmB,KAAK;EAAiB;CACjE;EAAE,MAAM;EAAW,KAAK;EAAkB,KAAK;EAAgB;CAG/D;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CACD;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CAGD;EAAE,MAAM;EAAW,KAAK;EAAiB,KAAK;EAAgB;CAC9D;EAAE,MAAM;EAAW,KAAK;EAAuB,KAAK;EAAqB;CACzE;EAAE,MAAM;EAAW,KAAK;EAAqB,KAAK;EAAmB;CACrE;EAAE,MAAM;EAAW,KAAK;EAAgB,KAAK;EAAe;CAC5D;EAAE,MAAM;EAAW,KAAK;EAAsB,KAAK;EAAoB;CACvE;EAAE,MAAM;EAAW,KAAK;EAAoB,KAAK;EAAkB;CACnE;EAAE,MAAM;EAAW,KAAK;EAAkB,KAAK;EAAiB;CAChE;EAAE,MAAM;EAAW,KAAK;EAAwB,KAAK;EAAsB;CAC3E;EAAE,MAAM;EAAW,KAAK;EAAsB,KAAK;EAAoB;CACvE;EAAE,MAAM;EAAW,KAAK;EAAiB,KAAK;EAAgB;CAC9D;EAAE,MAAM;EAAW,KAAK;EAAuB,KAAK;EAAqB;CACzE;EAAE,MAAM;EAAW,KAAK;EAAqB,KAAK;EAAmB;CAGrE;EAAE,MAAM;EAAW,KAAK;EAAgB,KAAK;EAAe;CAC5D;EAAE,MAAM;EAAW,KAAK;EAAsB,KAAK;EAAoB;CACvE;EAAE,MAAM;EAAW,KAAK;EAAoB,KAAK;EAAkB;CACnE;EAAE,MAAM;EAAW,KAAK;EAAe,KAAK;EAAc;CAC1D;EAAE,MAAM;EAAW,KAAK;EAAqB,KAAK;EAAmB;CACrE;EAAE,MAAM;EAAW,KAAK;EAAmB,KAAK;EAAiB;CAGjE;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAQ,KAAK;EAAQ;CAC5C;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAW,KAAK;EAAW,KAAK;EAAU;CAClD;EAAE,MAAM;EAAW,KAAK;EAAc,KAAK;EAAa;CAGxD;EAAE,MAAM;EAAU,KAAK;EAAQ,KAAK;EAAQ;CAC5C;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAW,KAAK;EAAqB,KAAK;EAAmB;CACrE;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAgB;CAC9D;EAAE,MAAM;EAAW,KAAK;EAAkB,KAAK;EAAgB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAiB;CAChE;EAAE,MAAM;EAAW,KAAK;EAAmB,KAAK;EAAiB;CACjE;EAAE,MAAM;EAAW,KAAK;EAAqB,KAAK;EAAmB;CACrE;EAAE,MAAM;EAAW,KAAK;EAAY,KAAK;EAAW;CACpD;EAAE,MAAM;EAAU,KAAK;EAAY,KAAK;EAAW;CACnD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAgB;CAC9D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAc;CAC1D;EAAE,MAAM;EAAW,KAAK;EAAgB,KAAK;EAAc;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAoB;CAGtE;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAS,KAAK;EAAS;CAC9C;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAG/D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAQ,KAAK;EAAQ;CAC5C;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAW,KAAK;EAAa,KAAK;EAAY;CACtD;EAAE,MAAM;EAAW,KAAK;EAAoB,KAAK;EAAkB;CACnE;EAAE,MAAM;EAAW,KAAK;EAAgB,KAAK;EAAe;CAC5D;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAA2B,KAAK;EAAyB;CAChF;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAiB;CAChE;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAAwB,KAAK;EAAsB;CAC1E;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAA6B,KAAK;EAA2B;CACpF;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAa;CACtD;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAGlD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAkB;CAClE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAiB;CAGhE;EAAE,MAAM;EAAU,KAAK;EAAS,KAAK;EAAS;CAC9C;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAc;CACxD;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAmB;CACnE;EAAE,MAAM;EAAW,IAAI;EAAmB;CAC1C;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAwB;CAC7E;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAqB,KAAK;EAAoB;CACrE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAAqB,KAAK;EAAoB;CACrE;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CAGjE;EACE,MAAM;EACN,MAAM;GACJ,MAAM;GACN,KAAK;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,SAAS;GACT,UAAU;GACV,YAAY;GACZ,aAAa;GACd;EACF;CACD;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CACD;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CACD;EACE,MAAM;EACN,UAAU;EACV,MAAM;GACJ,MAAM;GACN,GAAG;GACH,GAAG;GACH,KAAK;GACL,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACF;CACD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAoB;CACtE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAoB;CACtE;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAE/D;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CAGjE;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAqB,KAAK;EAAmB;CACpE;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAoB;CACtE;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAkB;CAGlE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAgB;CAC9D;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAa;CACtD;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAG7D;EAAE,MAAM;EAAW,IAAI;EAAa;CACpC;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAqB;CACvE;EAAE,MAAM;EAAU,KAAK;EAA6B,KAAK;EAA2B;CACpF;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAA6B,KAAK;EAA2B;CACpF;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAqB;CACxE;EAAE,MAAM;EAAU,KAAK;EAAwB,KAAK;EAAsB;CAC1E;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAc;CACxD;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAmB;CACnE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAA8B,KAAK;EAA4B;CAGtF;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAa;CACtD;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAmB;CACnE;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAa;CACtD;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAS,KAAK;EAAS;CAC9C;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CAGzD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAkB;CAClE;EAAE,MAAM;EAAU,KAAK;EAAqB,KAAK;EAAmB;CACpE;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAkB;CAClE;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAuB,KAAK;EAAsB;CACzE;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAC5E;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAG5E;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAkB,KAAK;EAAiB;CAC/D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CACjE;EAAE,MAAM;EAAU,KAAK;EAAoB,KAAK;EAAmB;CACnE;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAG3D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAS,KAAK;EAAS;CAC9C;EAAE,MAAM;EAAU,KAAK;EAAQ,KAAK;EAAQ;CAC5C;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAqB;CACvE;EAAE,MAAM;EAAU,KAAK;EAAqB,KAAK;EAAoB;CACrE;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAU;CACjD;EAAE,MAAM;EAAU,KAAK;EAAY,KAAK;EAAY;CACpD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAe;CAC1D;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAqB;CACvE;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAY,KAAK;EAAW;CACnD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAc;CACxD;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAc;CACxD;EAAE,MAAM;EAAU,KAAK;EAAmB,KAAK;EAAkB;CAGjE;EAAE,MAAM;EAAU,KAAK;EAAc,KAAK;EAAa;CACvD;EAAE,MAAM;EAAU,KAAK;EAAa,KAAK;EAAY;CACrD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CAGzD;EAAE,MAAM;EAAU,KAAK;EAAiB,KAAK;EAAgB;CAC7D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAyB,KAAK;EAAuB;CAG5E;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAGlD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAe,KAAK;EAAc;CACzD;EAAE,MAAM;EAAU,KAAK;EAAgB,KAAK;EAAe;CAC3D;EAAE,MAAM;EAAU,KAAK;EAAW,KAAK;EAAW;CAClD;EAAE,MAAM;EAAU,KAAK;EAAU,KAAK;EAAU;CAChD;EAAE,MAAM;EAAU,KAAK;EAAsB,KAAK;EAAoB;CAGtE;EAAE,MAAM;EAAW,IAAI;EAAa;CACpC;EAAE,MAAM;EAAW,IAAI;EAAY;CACnC;EAAE,MAAM;EAAW,IAAI;EAAa;CACrC;;;;;;;;;;;;;;;;;;AC/YD,MAAM,UAAkB,EAAE,OAAO,GAAG,KAAK,eAAe;CACtD,MAAM,QAAQ,GAAG,WAAkB,OAAO,QAAQ,SAAS;CAC3D,MAAM,YAAY,KAAK,SAAS;CAChC,MAAM,iBAAiB,aAAa,SAAS;AAM7C,QAAO,GAAG;MAJQ,YAAY,KAAK,MACjC,kBAAkB,GAAG,GAAG,KAAK,MAAM,WAAW,eAAe,CAC9D,CAGa"}
1
+ {"version":3,"file":"index.js","names":["CoreProvider","isValidValue","hasAnyValue","formatShorthand","formatIndividual"],"sources":["../src/responsive/breakpoints.ts","../src/responsive/createMediaQueries.ts","../src/responsive/normalizeTheme.ts","../src/responsive/optimizeTheme.ts","../src/responsive/transformTheme.ts","../src/responsive/makeItResponsive.ts","../src/responsive/sortBreakpoints.ts","../src/enrichTheme.ts","../src/context.tsx","../src/styles/alignContent.ts","../src/styles/extendCss.ts","../src/units/stripUnit.ts","../src/units/value.ts","../src/units/values.ts","../src/styles/shorthands/borderRadius.ts","../src/styles/shorthands/edge.ts","../src/styles/styles/processDescriptor.ts","../src/styles/styles/propertyMap.ts","../src/styles/styles/index.ts"],"sourcesContent":["const breakpoints = {\n rootSize: 16,\n breakpoints: {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1440,\n },\n} as const\n\nexport type Breakpoints = typeof breakpoints\n\nexport default breakpoints\n","type Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\nexport type CreateMediaQueries = <\n B extends Record<string, number>,\n R extends number,\n C extends Css,\n>(props: {\n breakpoints: B\n rootSize: R\n css: C\n}) => Record<keyof B, (...args: any[]) => string>\n\n// Implementation uses Record<string, ...> which is widened from Record<keyof B, ...>;\n// the generic constraint on CreateMediaQueries ensures callers get the narrower type.\nconst createMediaQueries: CreateMediaQueries = ((props: {\n breakpoints: Record<string, number>\n rootSize: number\n css: Css\n}) => {\n const { breakpoints, rootSize, css } = props\n\n return Object.keys(breakpoints).reduce<\n Record<string, (...args: [TemplateStringsArray, ...any[]]) => string>\n >((acc, key) => {\n const breakpointValue = breakpoints[key]\n\n if (breakpointValue === 0) {\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css(...args)\n } else if (breakpointValue != null) {\n const emSize = breakpointValue / rootSize\n\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css`\n @media only screen and (min-width: ${emSize}em) {\n ${css(...args)};\n }\n `\n }\n\n return acc\n }, {})\n}) as CreateMediaQueries\n\nexport default createMediaQueries\n","type AssignToBreakpointKey = (\n breakpoints: string[],\n) => (\n valueFn: (breakpoint: string, i: number, bps: string[], result: Record<string, unknown>) => void,\n) => Record<string, unknown>\n\nconst assignToBreakpointKey: AssignToBreakpointKey = (breakpoints) => (valueFn) => {\n const result: Record<string, unknown> = {}\n breakpoints.forEach((item, i) => {\n result[item] = valueFn(item, i, breakpoints, result)\n })\n return result\n}\n\nconst handleArrayCb = (arr: (string | number)[]) => (_: unknown, i: number) => {\n const currentValue = arr[i]\n const lastValue = arr[arr.length - 1]\n return currentValue ?? lastValue\n}\n\nconst handleObjectCb =\n (obj: Record<string, unknown>) =>\n (bp: string, i: number, bps: string[], res: Record<string, unknown>) => {\n const currentValue = obj[bp]\n const prevBp = bps[i - 1]\n const previousValue = prevBp != null ? res[prevBp] : undefined\n if (currentValue != null) return currentValue\n return previousValue\n }\n\nconst handleValueCb = (value: unknown) => () => value\n\nconst shouldNormalize = (props: Record<string, any>) =>\n Object.values(props).some((item) => typeof item === 'object' || Array.isArray(item))\n\nexport type NormalizeTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => Record<string, unknown>\n\nconst normalizeTheme: NormalizeTheme = ({ theme, breakpoints }) => {\n if (!shouldNormalize(theme)) return theme\n\n const getBpValues = assignToBreakpointKey(breakpoints)\n const result: Record<string, unknown> = {}\n\n Object.entries(theme).forEach(([key, value]) => {\n if (value == null) return\n\n if (Array.isArray(value)) {\n result[key] = getBpValues(handleArrayCb(value as (string | number)[]))\n } else if (typeof value === 'object') {\n result[key] = getBpValues(handleObjectCb(value as Record<string, any>))\n } else {\n result[key] = getBpValues(handleValueCb(value))\n }\n })\n\n return result\n}\n\nexport default normalizeTheme\n","export type OptimizeTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, Record<string, unknown>>\n breakpoints: string[]\n}) => Record<string, Record<string, unknown>>\n\nconst shallowEqual = (\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (a[key] !== b[key]) return false\n }\n return true\n}\n\n/**\n * Removes breakpoints whose full-object styles are identical to the\n * previous one. Simple all-or-nothing: if ANY property differs from\n * the previous breakpoint, emit the ENTIRE current breakpoint.\n *\n * This matches the reference implementation (vitus-labs/ui-system) and\n * the original monorepo-migration version (commit 2b7c5876). Previous\n * \"optimizations\" (PRs #159, #208) that tried per-property diffing\n * broke responsive styles in subtle ways — shorthand/longhand CSS\n * property interactions, properties that depend on each other,\n * properties that need to be emitted together to cascade correctly.\n *\n * The all-or-nothing approach is the correct level of deduplication —\n * we skip the breakpoint when it's entirely redundant, and let the\n * browser's CSS cascade handle the rest.\n */\nconst optimizeTheme: OptimizeTheme = ({ theme, breakpoints }) => {\n const result: Record<string, Record<string, unknown>> = {}\n\n for (let i = 0; i < breakpoints.length; i++) {\n const key = breakpoints[i] as string\n const previousBreakpoint = breakpoints[i - 1] as string\n const current = theme[key]\n if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) {\n result[key] = current\n }\n }\n\n return result\n}\n\nexport default optimizeTheme\n","import { isEmpty, set } from '@pyreon/ui-core'\n\nconst removeUnexpectedKeys = (obj: Record<string, unknown>, keys: string[]) => {\n const result: Record<string, unknown> = {}\n keys.forEach((bp) => {\n const value = obj[bp]\n if (value) {\n result[bp] = value\n }\n })\n return result\n}\n\nexport type TransformTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => any\n\nconst transformTheme: TransformTheme = ({ theme, breakpoints }) => {\n const result = {}\n\n if (isEmpty(theme) || isEmpty(breakpoints)) return result\n\n Object.entries(theme).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length > 0) {\n value.forEach((child, i) => {\n const indexBreakpoint = breakpoints[i]\n if (indexBreakpoint == null) return\n set(result, [indexBreakpoint, key], child)\n })\n } else if (typeof value === 'object' && value !== null) {\n Object.entries(value).forEach(([childKey, childValue]) => {\n set(result, [childKey, key], childValue)\n })\n } else if (value != null) {\n const firstBreakpoint = breakpoints[0]\n if (firstBreakpoint == null) return\n set(result, [firstBreakpoint, key], value)\n }\n })\n\n return removeUnexpectedKeys(result, breakpoints)\n}\n\nexport default transformTheme\n","import { isEmpty } from '@pyreon/ui-core'\nimport type createMediaQueries from './createMediaQueries'\nimport normalizeTheme from './normalizeTheme'\nimport optimizeTheme from './optimizeTheme'\nimport type sortBreakpoints from './sortBreakpoints'\nimport transformTheme from './transformTheme'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\ntype CustomTheme = Record<string, unknown>\n\ntype Theme = Partial<{\n rootSize: number\n breakpoints: Record<string, number>\n __PYREON__: Partial<{\n media: ReturnType<typeof createMediaQueries>\n sortedBreakpoints: ReturnType<typeof sortBreakpoints>\n }>\n}> &\n CustomTheme\n\nexport type MakeItResponsiveStyles<T extends Partial<Record<string, any>> = any> = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: T\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, any> | undefined\n}) => ReturnType<typeof css> | string | any\n\nexport type MakeItResponsive = ({\n theme,\n key,\n css,\n styles,\n normalize,\n}: {\n theme?: CustomTheme\n key?: string\n css: any\n styles: MakeItResponsiveStyles\n normalize?: boolean\n}) => (props: { theme?: Theme; [prop: string]: any }) => any\n\nconst themeCache = new WeakMap<\n object,\n { breakpoints: unknown; optimized: Record<string, Record<string, unknown>> }\n>()\n\nconst makeItResponsive: MakeItResponsive =\n ({ theme: customTheme, key = '', css, styles, normalize = true }) =>\n ({ theme = {}, ...props }) => {\n const internalTheme = customTheme || props[key]\n\n if (isEmpty(internalTheme)) return ''\n\n const { rootSize, breakpoints, __PYREON__, ...restTheme } = theme as Theme\n\n const renderStyles = (styleTheme: Record<string, unknown>): ReturnType<typeof styles> =>\n styles({ theme: styleTheme, css, rootSize, globalTheme: restTheme })\n\n if (isEmpty(breakpoints) || isEmpty(__PYREON__)) {\n return css`\n ${renderStyles(internalTheme)}\n `\n }\n\n // isEmpty guard above ensures __PYREON__ is defined here\n const { media, sortedBreakpoints } = __PYREON__ as NonNullable<typeof __PYREON__>\n\n let optimizedTheme: Record<string, Record<string, unknown>>\n\n const cached = themeCache.get(internalTheme)\n if (cached && cached.breakpoints === sortedBreakpoints) {\n optimizedTheme = cached.optimized\n } else {\n let helperTheme = internalTheme\n\n if (normalize) {\n helperTheme = normalizeTheme({\n theme: internalTheme,\n breakpoints: sortedBreakpoints,\n })\n }\n\n const transformedTheme = transformTheme({\n theme: helperTheme,\n breakpoints: sortedBreakpoints,\n })\n\n optimizedTheme = optimizeTheme({\n theme: transformedTheme,\n breakpoints: sortedBreakpoints,\n })\n\n themeCache.set(internalTheme, {\n breakpoints: sortedBreakpoints,\n optimized: optimizedTheme,\n })\n }\n\n return sortedBreakpoints.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n\n if (!breakpointTheme || !media) return ''\n\n const result = renderStyles(breakpointTheme)\n\n return (media as Record<string, any>)[item]`\n ${result};\n `\n })\n }\n\nexport default makeItResponsive\n","export type SortBreakpoints = <T extends Record<string, number>>(breakpoints: T) => (keyof T)[]\n\nconst sortBreakpoints: SortBreakpoints = (breakpoints) => {\n const result = Object.keys(breakpoints).sort(\n (a, b) => (breakpoints[a] ?? 0) - (breakpoints[b] ?? 0),\n )\n return result\n}\n\nexport default sortBreakpoints\n","import { config, isEmpty } from '@pyreon/ui-core'\nimport { createMediaQueries, sortBreakpoints } from './responsive'\n\nexport type PyreonTheme = {\n rootSize?: number\n breakpoints?: Record<string, number>\n __PYREON__?: {\n sortedBreakpoints: string[] | undefined\n media: Record<string, (...args: any[]) => any> | undefined\n }\n} & Record<string, unknown>\n\n/**\n * Enrich a theme with pre-computed responsive utilities.\n * Adds sorted breakpoints and media-query tagged-template helpers\n * to `theme.__PYREON__` for consumption by `makeItResponsive`.\n *\n * This is a pure function — safe to call outside of component context.\n *\n * @example\n * const enriched = enrichTheme({ rootSize: 16, breakpoints: { xs: 0, sm: 576, md: 768 } })\n * enriched.__PYREON__.sortedBreakpoints // ['xs', 'sm', 'md']\n * enriched.__PYREON__.media.sm // tagged-template for @media (min-width: 36em)\n */\nexport function enrichTheme<T extends PyreonTheme>(\n theme: T,\n): T & Required<Pick<PyreonTheme, '__PYREON__'>> {\n const { breakpoints, rootSize = 16 } = theme\n\n const sortedBreakpoints =\n breakpoints && !isEmpty(breakpoints) ? sortBreakpoints(breakpoints) : undefined\n\n const media =\n breakpoints && !isEmpty(breakpoints)\n ? createMediaQueries({ breakpoints, css: config.css, rootSize })\n : undefined\n\n return {\n ...theme,\n __PYREON__: { sortedBreakpoints, media },\n }\n}\n","import type { VNode } from '@pyreon/core'\nimport { provide } from '@pyreon/core'\nimport { ThemeContext } from '@pyreon/styler'\nimport { Provider as CoreProvider, context } from '@pyreon/ui-core'\nimport type { PyreonTheme } from './enrichTheme'\nimport { enrichTheme } from './enrichTheme'\n\nexport type TProvider = {\n theme: PyreonTheme\n children?: VNode | null\n}\n\n/**\n * @internal Low-level provider — use `PyreonUI` from `@pyreon/ui-core` instead.\n *\n * Unistyle Provider — wraps the core Provider and enriches the theme\n * with pre-computed sorted breakpoints and media-query tagged-template\n * helpers consumed by `makeItResponsive`.\n *\n * @deprecated Prefer `<PyreonUI theme={theme} mode=\"light\">` which handles\n * all three context layers (styler, core, mode) in one component.\n */\nfunction Provider(props: TProvider): VNode | null {\n const { theme, children } = props\n\n const enrichedTheme = enrichTheme(theme)\n\n // Provide enriched theme to both the ui-core context (for rocketstyle/elements)\n // AND the styler ThemeContext (for styled() components and makeItResponsive).\n // Without this, styled() components receive an empty theme and all responsive\n // styles are skipped (@media queries produce NaN values).\n // ThemeContext is a ReactiveContext — provide an accessor.\n provide(ThemeContext, () => enrichedTheme)\n\n return CoreProvider({ theme: enrichedTheme, children }) as VNode | null\n}\n\nexport { context }\n\nexport default Provider\n","import { isEmpty } from '@pyreon/ui-core'\n\nexport type AlignContentDirectionKeys = keyof typeof ALIGN_CONTENT_DIRECTION\nexport type AlignContentAlignXKeys = keyof typeof ALIGN_CONTENT_MAP_X\nexport type AlignContentAlignYKeys = keyof typeof ALIGN_CONTENT_MAP_Y\n\nconst ALIGN_CONTENT_MAP_SHARED = {\n center: 'center',\n spaceBetween: 'space-between',\n spaceAround: 'space-around',\n block: 'stretch',\n}\n\nexport const ALIGN_CONTENT_MAP_X = {\n left: 'flex-start',\n right: 'flex-end',\n ...ALIGN_CONTENT_MAP_SHARED,\n} as const\n\nexport const ALIGN_CONTENT_MAP_Y = {\n top: 'flex-start',\n bottom: 'flex-end',\n ...ALIGN_CONTENT_MAP_SHARED,\n} as const\n\nexport const ALIGN_CONTENT_DIRECTION = {\n inline: 'row',\n reverseInline: 'row-reverse',\n rows: 'column',\n reverseRows: 'column-reverse',\n} as const\n\nexport type AlignContent = ({\n direction,\n alignX,\n alignY,\n}: {\n direction: AlignContentDirectionKeys\n alignX: AlignContentAlignXKeys\n alignY: AlignContentAlignYKeys\n}) => string | null\n\nconst alignContent: AlignContent = (attrs) => {\n const { direction, alignX, alignY } = attrs\n\n if (isEmpty(attrs) || !direction || !alignX || !alignY) {\n return null\n }\n\n const isReverted = ['inline', 'reverseInline'].includes(direction)\n const dir = ALIGN_CONTENT_DIRECTION[direction]\n const x = ALIGN_CONTENT_MAP_X[alignX]\n const y = ALIGN_CONTENT_MAP_Y[alignY]\n\n return `flex-direction: ${dir}; align-items: ${isReverted ? y : x}; justify-content: ${isReverted ? x : y};`\n}\n\nexport default alignContent\n","export type ExtendCss = (\n styles:\n | ((css: (strings: TemplateStringsArray, ...values: any[]) => string) => string)\n | string\n | null\n | undefined,\n) => string\n\nconst simpleCss = (strings: TemplateStringsArray, ...values: any[]): string => {\n let result = ''\n for (let i = 0; i < strings.length; i++) {\n result += strings[i]\n if (i < values.length) result += String(values[i] ?? '')\n }\n return result\n}\n\nconst extendCss: ExtendCss = (styles) => {\n if (!styles) return ''\n if (typeof styles === 'function') {\n return styles(simpleCss)\n }\n return styles\n}\n\nexport default extendCss\n","type Value<V> = V extends string ? number : V\ntype Unit<V> = V extends string ? string : undefined\n\nexport type StripUnit = <V extends string | number, UR extends boolean = false>(\n value: V,\n unitReturn?: UR,\n) => UR extends true ? [Value<V>, Unit<V>] : Value<V>\n\nconst stripUnit = ((value: string | number, unitReturn?: boolean) => {\n const cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/\n\n if (typeof value !== 'string') return unitReturn ? [value, undefined] : value\n\n const matchedValue = value.match(cssRegex)\n\n if (unitReturn) {\n if (matchedValue) return [parseFloat(value), matchedValue[2]]\n return [value, undefined]\n }\n\n if (matchedValue) return parseFloat(value)\n return value\n}) as StripUnit\n\nexport default stripUnit\n","import stripUnit from './stripUnit'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isNotValue = (val: unknown) => !val && val !== 0\n\nexport type Value = (\n param: string | number | null | undefined,\n rootSize?: number,\n outputUnit?: CssUnits,\n) => string | number | null\n\nconst value: Value = (param, rootSize = 16, outputUnit = 'rem'): string | number | null => {\n if (isNotValue(param)) return null\n\n // After the guard above, param is guaranteed to be string | number (non-null)\n const p = param as string | number\n\n const [val, unit] = stripUnit(p as string, true)\n if (isNotValue(val)) return null\n if (val === 0 || typeof val === 'string') return p\n\n const canConvert = rootSize && !Number.isNaN(val)\n if (canConvert && !unit && outputUnit === 'px') return `${val}${outputUnit}`\n if (canConvert && !unit) return `${val / rootSize}rem`\n if (canConvert && unit === 'px' && outputUnit === 'rem') return `${val / rootSize}rem`\n if (unit) return p\n\n return `${val}${outputUnit}`\n}\n\nexport default value\n","import value from './value'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\ntype GetValueOf = (...args: unknown[]) => number | string\nconst getValueOf: GetValueOf = (...args: any[]) =>\n args.find((v) => typeof v !== 'undefined' && v !== null)\n\nexport type Values = (\n items: unknown[],\n rootSize?: number,\n outputUnit?: CssUnits,\n) => string | number | null\n\nconst values: Values = (items, rootSize, outputUnit) => {\n const param = getValueOf(...items)\n\n if (Array.isArray(param)) {\n return param.map((item) => value(item, rootSize, outputUnit)).join(' ')\n }\n\n return value(param, rootSize, outputUnit)\n}\n\nexport default values\n","import { value } from '../../units'\n\ntype PropertyValue = string | number | null | undefined\ntype PV = PropertyValue\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype CornerValues = {\n full: PV\n top: PV\n bottom: PV\n left: PV\n right: PV\n topLeft: PV\n topRight: PV\n bottomLeft: PV\n bottomRight: PV\n}\n\nconst hasAnyValue = (v: CornerValues) =>\n isValidValue(v.full) ||\n isValidValue(v.top) ||\n isValidValue(v.bottom) ||\n isValidValue(v.left) ||\n isValidValue(v.right) ||\n isValidValue(v.topLeft) ||\n isValidValue(v.topRight) ||\n isValidValue(v.bottomLeft) ||\n isValidValue(v.bottomRight)\n\nconst resolveCorners = (v: CornerValues) => {\n const corners: PV[] = [v.full, v.full, v.full, v.full]\n if (isValidValue(v.top)) {\n corners[0] = v.top\n corners[1] = v.top\n }\n if (isValidValue(v.bottom)) {\n corners[2] = v.bottom\n corners[3] = v.bottom\n }\n if (isValidValue(v.left)) {\n corners[0] = v.left\n corners[3] = v.left\n }\n if (isValidValue(v.right)) {\n corners[1] = v.right\n corners[2] = v.right\n }\n if (isValidValue(v.topLeft)) corners[0] = v.topLeft\n if (isValidValue(v.topRight)) corners[1] = v.topRight\n if (isValidValue(v.bottomRight)) corners[2] = v.bottomRight\n if (isValidValue(v.bottomLeft)) corners[3] = v.bottomLeft\n return corners\n}\n\nconst formatShorthand = (corners: PV[], calc: (p: PV) => any) => {\n const [tl, tr, br, bl] = corners\n if (corners.every((val, _, arr) => val === arr[0])) return `border-radius: ${calc(tl)};`\n if (tl === br && tr === bl) return `border-radius: ${calc(tl)} ${calc(tr)};`\n if (tl && tr === bl && br) return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)};`\n return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)} ${calc(bl)};`\n}\n\nconst CORNER_CSS = [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n] as const\n\nconst formatIndividual = (corners: PV[], calc: (p: PV) => any) => {\n let output = ''\n for (let i = 0; i < corners.length; i++) {\n if (isValidValue(corners[i])) output += `${CORNER_CSS[i]}: ${calc(corners[i])};`\n }\n return output\n}\n\nexport type BorderRadius = (rootSize?: number) => (props: CornerValues) => string | null\n\nconst borderRadius: BorderRadius = (rootSize) => (props) => {\n if (!hasAnyValue(props)) return null\n const calc = (param: PV) => value(param, rootSize)\n const corners = resolveCorners(props)\n if (corners.every((val) => isValidValue(val))) return formatShorthand(corners, calc)\n return formatIndividual(corners, calc)\n}\n\nexport default borderRadius\n","import { value } from '../../units'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype Property = 'inset' | 'margin' | 'padding' | 'border-width' | 'border-style' | 'border-color'\ntype Value = string | number | null | undefined\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ntype EdgeValues = {\n full: Value\n x: Value\n y: Value\n top: Value\n left: Value\n right: Value\n bottom: Value\n}\n\ntype Definitions = Record<Property, { unit?: CssUnits; edgeCss: (side: Side) => string }>\n\nconst definitions: Definitions = {\n inset: { unit: 'rem', edgeCss: (side) => side },\n margin: { unit: 'rem', edgeCss: (side) => `margin-${side}` },\n padding: { unit: 'rem', edgeCss: (side) => `padding-${side}` },\n 'border-width': { unit: 'px', edgeCss: (side) => `border-${side}-width` },\n 'border-style': { edgeCss: (side) => `border-${side}-style` },\n 'border-color': { edgeCss: (side) => `border-${side}-color` },\n}\n\nconst hasAnyValue = (vals: EdgeValues) =>\n isValidValue(vals.top) ||\n isValidValue(vals.bottom) ||\n isValidValue(vals.left) ||\n isValidValue(vals.right) ||\n isValidValue(vals.x) ||\n isValidValue(vals.y) ||\n isValidValue(vals.full)\n\nconst resolveSides = ({ full, x, y, top, left, right, bottom }: EdgeValues) => {\n const sides: Value[] = [full, full, full, full]\n if (isValidValue(x)) {\n sides[1] = x\n sides[3] = x\n }\n if (isValidValue(y)) {\n sides[0] = y\n sides[2] = y\n }\n if (isValidValue(top)) sides[0] = top\n if (isValidValue(right)) sides[1] = right\n if (isValidValue(bottom)) sides[2] = bottom\n if (isValidValue(left)) sides[3] = left\n return sides\n}\n\nconst formatShorthand = (property: Property, sides: Value[], calc: (v: Value) => Value) => {\n const [t, r, b, l] = sides\n if (sides.every((val, _, arr) => val === arr[0])) return `${property}: ${calc(t)};`\n if (t === b && r === l) return `${property}: ${calc(t)} ${calc(r)};`\n if (t && r === l && b) return `${property}: ${calc(t)} ${calc(r)} ${calc(b)};`\n return `${property}: ${calc(t)} ${calc(r)} ${calc(b)} ${calc(l)};`\n}\n\nconst formatIndividual = (\n sides: Value[],\n edgeCss: (side: Side) => string,\n calc: (v: Value) => Value,\n) => {\n const [t, r, b, l] = sides\n let output = ''\n if (isValidValue(t)) output += `${edgeCss('top')}: ${calc(t)};`\n if (isValidValue(b)) output += `${edgeCss('bottom')}: ${calc(b)};`\n if (isValidValue(l)) output += `${edgeCss('left')}: ${calc(l)};`\n if (isValidValue(r)) output += `${edgeCss('right')}: ${calc(r)};`\n return output\n}\n\nexport type Edge = (rootSize?: number) => (property: Property, values: EdgeValues) => string | null\n\nconst edge: Edge =\n (rootSize = 16) =>\n (property, values) => {\n if (!hasAnyValue(values)) return null\n const { unit, edgeCss } = definitions[property]\n const calc = (param: Value) => (unit ? value(param, rootSize, unit) : param)\n const sides = resolveSides(values)\n if (sides.every((val) => isValidValue(val))) return formatShorthand(property, sides, calc)\n return formatIndividual(sides, edgeCss, calc)\n }\n\nexport default edge\n","import type { Values } from '../../units/values'\nimport type { BorderRadius } from '../shorthands/borderRadius'\nimport type { Edge } from '../shorthands/edge'\nimport type { PropertyDescriptor } from './propertyMap'\nimport type { InnerTheme } from './types'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\ntype Calc = (...params: any[]) => ReturnType<Values>\n\n/** Mirrors the Value / PropertyValue types used by edge and borderRadius shorthands. */\ntype Value = string | number | null | undefined\n\nconst toCssDecl = (css: string, v: unknown) => (v == null ? '' : `${css}: ${v};`)\n\n/**\n * Converts a single property descriptor + theme values into a CSS fragment.\n *\n * - `simple` — pass-through (no unit conversion)\n * - `convert` — number→rem via `calc()`\n * - `convert_fallback` — picks first non-null from multiple theme keys, then converts\n * - `edge` — delegates to the edge shorthand (margin, padding, inset, border-*)\n * - `border_radius` — delegates to the border-radius shorthand\n * - `special` — one-off logic (fullScreen, backgroundImage url wrapping, animation combo, etc.)\n *\n * IMPORTANT: special cases MUST return `css` tagged-template results,\n * NOT plain strings. The caller (styles/index.ts) embeds these in another\n * `css` template, and the interpolation chain requires template results\n * for correct nesting of pseudo-selectors, media queries, and @layer\n * wrapping. A previous \"optimization\" returned plain strings which broke\n * responsive styles, hover states, and media-query generation.\n */\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n css: Css,\n): string | ReturnType<typeof css> => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return css`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n `\n\n case 'backgroundImage':\n if (!t.backgroundImage) return ''\n return css`\n background-image: url(${t.backgroundImage});\n `\n\n case 'animation': {\n const parts = [t.keyframe, t.animation].filter(Boolean).join(' ')\n return parts ? `animation: ${parts};` : ''\n }\n\n case 'hideEmpty':\n if (!t.hideEmpty) return ''\n return css`\n &:empty {\n display: none;\n }\n `\n\n case 'clearFix':\n if (!t.clearFix) return ''\n return css`\n &::after {\n clear: both;\n content: '';\n display: table;\n }\n `\n\n case 'extendCss':\n return (t.extendCss as string | undefined) ?? ''\n\n default:\n return ''\n }\n}\n\nconst processDescriptor = (\n d: PropertyDescriptor,\n t: InnerTheme,\n css: Css,\n calc: Calc,\n shorthand: ReturnType<Edge>,\n borderRadiusFn: ReturnType<BorderRadius>,\n): string | ReturnType<typeof css> => {\n switch (d.kind) {\n case 'simple':\n return toCssDecl(d.css, t[d.key])\n\n case 'convert':\n return toCssDecl(d.css, calc(t[d.key]))\n\n case 'convert_fallback':\n return toCssDecl(d.css, calc(...d.keys.map((k) => t[k])))\n\n case 'edge':\n return (\n shorthand(d.property, {\n full: t[d.keys.full] as Value,\n x: t[d.keys.x] as Value,\n y: t[d.keys.y] as Value,\n top: t[d.keys.top] as Value,\n left: t[d.keys.left] as Value,\n bottom: t[d.keys.bottom] as Value,\n right: t[d.keys.right] as Value,\n }) ?? ''\n )\n\n case 'border_radius':\n return (\n borderRadiusFn({\n full: t[d.keys.full] as Value,\n top: t[d.keys.top] as Value,\n bottom: t[d.keys.bottom] as Value,\n left: t[d.keys.left] as Value,\n right: t[d.keys.right] as Value,\n topLeft: t[d.keys.topLeft] as Value,\n topRight: t[d.keys.topRight] as Value,\n bottomLeft: t[d.keys.bottomLeft] as Value,\n bottomRight: t[d.keys.bottomRight] as Value,\n }) ?? ''\n )\n\n case 'special':\n return processSpecial(d, t, css)\n }\n}\n\nexport default processDescriptor\n","import type { InnerTheme } from './types'\n\ntype EdgeProperty =\n | 'inset'\n | 'margin'\n | 'padding'\n | 'border-width'\n | 'border-style'\n | 'border-color'\n\ntype EdgeKeys = {\n full: keyof InnerTheme\n x: keyof InnerTheme\n y: keyof InnerTheme\n top: keyof InnerTheme\n left: keyof InnerTheme\n bottom: keyof InnerTheme\n right: keyof InnerTheme\n}\n\ntype BorderRadiusKeys = {\n full: keyof InnerTheme\n top: keyof InnerTheme\n bottom: keyof InnerTheme\n left: keyof InnerTheme\n right: keyof InnerTheme\n topLeft: keyof InnerTheme\n topRight: keyof InnerTheme\n bottomLeft: keyof InnerTheme\n bottomRight: keyof InnerTheme\n}\n\nexport type PropertyDescriptor =\n | { kind: 'simple'; css: string; key: keyof InnerTheme }\n | { kind: 'convert'; css: string; key: keyof InnerTheme }\n | { kind: 'convert_fallback'; css: string; keys: (keyof InnerTheme)[] }\n | { kind: 'edge'; property: EdgeProperty; keys: EdgeKeys }\n | { kind: 'border_radius'; keys: BorderRadiusKeys }\n | { kind: 'special'; id: string }\n\nconst propertyMap: PropertyDescriptor[] = [\n // SPECIAL: fullScreen\n { kind: 'special', id: 'fullScreen' },\n\n // POSITION\n { kind: 'simple', css: 'all', key: 'all' },\n { kind: 'simple', css: 'display', key: 'display' },\n { kind: 'simple', css: 'position', key: 'position' },\n { kind: 'simple', css: 'box-sizing', key: 'boxSizing' },\n { kind: 'simple', css: 'float', key: 'float' },\n\n // INSET\n {\n kind: 'edge',\n property: 'inset',\n keys: {\n full: 'inset',\n x: 'insetX',\n y: 'insetY',\n top: 'top',\n left: 'left',\n bottom: 'bottom',\n right: 'right',\n },\n },\n\n // SIZING\n { kind: 'convert_fallback', css: 'width', keys: ['width', 'size'] },\n { kind: 'convert_fallback', css: 'min-width', keys: ['minWidth', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-width', keys: ['maxWidth', 'maxSize'] },\n { kind: 'convert_fallback', css: 'height', keys: ['height', 'size'] },\n { kind: 'convert_fallback', css: 'min-height', keys: ['minHeight', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-height', keys: ['maxHeight', 'maxSize'] },\n { kind: 'convert', css: 'gap', key: 'gap' },\n { kind: 'simple', css: 'aspect-ratio', key: 'aspectRatio' },\n { kind: 'simple', css: 'contain', key: 'contain' },\n { kind: 'simple', css: 'container-type', key: 'containerType' },\n { kind: 'simple', css: 'container-name', key: 'containerName' },\n { kind: 'simple', css: 'container', key: 'container' },\n { kind: 'convert', css: 'inline-size', key: 'inlineSize' },\n { kind: 'convert', css: 'block-size', key: 'blockSize' },\n { kind: 'convert', css: 'min-inline-size', key: 'minInlineSize' },\n { kind: 'convert', css: 'min-block-size', key: 'minBlockSize' },\n { kind: 'convert', css: 'max-inline-size', key: 'maxInlineSize' },\n { kind: 'convert', css: 'max-block-size', key: 'maxBlockSize' },\n\n // SPACING\n {\n kind: 'edge',\n property: 'margin',\n keys: {\n full: 'margin',\n x: 'marginX',\n y: 'marginY',\n top: 'marginTop',\n left: 'marginLeft',\n bottom: 'marginBottom',\n right: 'marginRight',\n },\n },\n {\n kind: 'edge',\n property: 'padding',\n keys: {\n full: 'padding',\n x: 'paddingX',\n y: 'paddingY',\n top: 'paddingTop',\n left: 'paddingLeft',\n bottom: 'paddingBottom',\n right: 'paddingRight',\n },\n },\n\n // Logical spacing\n { kind: 'convert', css: 'margin-inline', key: 'marginInline' },\n { kind: 'convert', css: 'margin-inline-start', key: 'marginInlineStart' },\n { kind: 'convert', css: 'margin-inline-end', key: 'marginInlineEnd' },\n { kind: 'convert', css: 'margin-block', key: 'marginBlock' },\n { kind: 'convert', css: 'margin-block-start', key: 'marginBlockStart' },\n { kind: 'convert', css: 'margin-block-end', key: 'marginBlockEnd' },\n { kind: 'convert', css: 'padding-inline', key: 'paddingInline' },\n { kind: 'convert', css: 'padding-inline-start', key: 'paddingInlineStart' },\n { kind: 'convert', css: 'padding-inline-end', key: 'paddingInlineEnd' },\n { kind: 'convert', css: 'padding-block', key: 'paddingBlock' },\n { kind: 'convert', css: 'padding-block-start', key: 'paddingBlockStart' },\n { kind: 'convert', css: 'padding-block-end', key: 'paddingBlockEnd' },\n\n // Logical inset\n { kind: 'convert', css: 'inset-inline', key: 'insetInline' },\n { kind: 'convert', css: 'inset-inline-start', key: 'insetInlineStart' },\n { kind: 'convert', css: 'inset-inline-end', key: 'insetInlineEnd' },\n { kind: 'convert', css: 'inset-block', key: 'insetBlock' },\n { kind: 'convert', css: 'inset-block-start', key: 'insetBlockStart' },\n { kind: 'convert', css: 'inset-block-end', key: 'insetBlockEnd' },\n\n // FLEX\n { kind: 'simple', css: 'align-content', key: 'alignContent' },\n { kind: 'simple', css: 'align-items', key: 'alignItems' },\n { kind: 'simple', css: 'align-self', key: 'alignSelf' },\n { kind: 'simple', css: 'flex', key: 'flex' },\n { kind: 'simple', css: 'flex-basis', key: 'flexBasis' },\n { kind: 'simple', css: 'flex-direction', key: 'flexDirection' },\n { kind: 'simple', css: 'flex-flow', key: 'flexFlow' },\n { kind: 'simple', css: 'flex-grow', key: 'flexGrow' },\n { kind: 'simple', css: 'flex-shrink', key: 'flexShrink' },\n { kind: 'simple', css: 'flex-wrap', key: 'flexWrap' },\n { kind: 'simple', css: 'justify-content', key: 'justifyContent' },\n { kind: 'simple', css: 'justify-items', key: 'justifyItems' },\n { kind: 'simple', css: 'justify-self', key: 'justifySelf' },\n { kind: 'simple', css: 'place-items', key: 'placeItems' },\n { kind: 'simple', css: 'place-content', key: 'placeContent' },\n { kind: 'simple', css: 'place-self', key: 'placeSelf' },\n { kind: 'convert', css: 'row-gap', key: 'rowGap' },\n { kind: 'convert', css: 'column-gap', key: 'columnGap' },\n\n // GRID\n { kind: 'simple', css: 'grid', key: 'grid' },\n { kind: 'simple', css: 'grid-area', key: 'gridArea' },\n { kind: 'convert', css: 'grid-auto-columns', key: 'gridAutoColumns' },\n { kind: 'simple', css: 'grid-auto-flow', key: 'gridAutoFlow' },\n { kind: 'convert', css: 'grid-auto-rows', key: 'gridAutoRows' },\n { kind: 'simple', css: 'grid-column', key: 'gridColumn' },\n { kind: 'simple', css: 'grid-column-end', key: 'gridColumnEnd' },\n { kind: 'convert', css: 'grid-column-gap', key: 'gridColumnGap' },\n { kind: 'convert', css: 'grid-column-start', key: 'gridColumnStart' },\n { kind: 'convert', css: 'grid-gap', key: 'gridGap' },\n { kind: 'simple', css: 'grid-row', key: 'gridRow' },\n { kind: 'simple', css: 'grid-row-start', key: 'gridRowStart' },\n { kind: 'simple', css: 'grid-row-end', key: 'gridRowEnd' },\n { kind: 'convert', css: 'grid-row-gap', key: 'gridRowGap' },\n { kind: 'simple', css: 'grid-template', key: 'gridTemplate' },\n { kind: 'simple', css: 'grid-template-areas', key: 'gridTemplateAreas' },\n { kind: 'simple', css: 'grid-template-columns', key: 'gridTemplateColumns' },\n { kind: 'simple', css: 'grid-template-rows', key: 'gridTemplateRows' },\n\n // POSITIONING\n { kind: 'simple', css: 'object-fit', key: 'objectFit' },\n { kind: 'simple', css: 'object-position', key: 'objectPosition' },\n { kind: 'simple', css: 'order', key: 'order' },\n { kind: 'simple', css: 'opacity', key: 'opacity' },\n { kind: 'simple', css: 'resize', key: 'resize' },\n { kind: 'simple', css: 'vertical-align', key: 'verticalAlign' },\n\n // FONT & TEXT\n { kind: 'simple', css: 'line-height', key: 'lineHeight' },\n { kind: 'simple', css: 'font', key: 'font' },\n { kind: 'simple', css: 'font-family', key: 'fontFamily' },\n { kind: 'convert', css: 'font-size', key: 'fontSize' },\n { kind: 'convert', css: 'font-size-adjust', key: 'fontSizeAdjust' },\n { kind: 'convert', css: 'font-stretch', key: 'fontStretch' },\n { kind: 'simple', css: 'font-style', key: 'fontStyle' },\n { kind: 'simple', css: 'font-variant', key: 'fontVariant' },\n { kind: 'simple', css: 'font-weight', key: 'fontWeight' },\n { kind: 'simple', css: 'font-kerning', key: 'fontKerning' },\n { kind: 'simple', css: 'font-feature-settings', key: 'fontFeatureSettings' },\n { kind: 'simple', css: 'font-variation-settings', key: 'fontVariationSettings' },\n { kind: 'simple', css: 'font-optical-sizing', key: 'fontOpticalSizing' },\n { kind: 'simple', css: 'text-align', key: 'textAlign' },\n { kind: 'simple', css: 'text-align-last', key: 'textAlignLast' },\n { kind: 'simple', css: 'text-transform', key: 'textTransform' },\n { kind: 'simple', css: 'text-decoration', key: 'textDecoration' },\n { kind: 'simple', css: 'text-decoration-color', key: 'textDecorationColor' },\n { kind: 'simple', css: 'text-decoration-line', key: 'textDecorationLine' },\n { kind: 'simple', css: 'text-decoration-style', key: 'textDecorationStyle' },\n { kind: 'simple', css: 'text-decoration-thickness', key: 'textDecorationThickness' },\n { kind: 'simple', css: 'text-underline-offset', key: 'textUnderlineOffset' },\n { kind: 'simple', css: 'text-emphasis', key: 'textEmphasis' },\n { kind: 'simple', css: 'text-emphasis-color', key: 'textEmphasisColor' },\n { kind: 'simple', css: 'text-emphasis-style', key: 'textEmphasisStyle' },\n { kind: 'simple', css: 'letter-spacing', key: 'letterSpacing' },\n { kind: 'simple', css: 'word-spacing', key: 'wordSpacing' },\n { kind: 'simple', css: 'text-indent', key: 'textIndent' },\n { kind: 'simple', css: 'text-justify', key: 'textJustify' },\n { kind: 'simple', css: 'text-overflow', key: 'textOverflow' },\n { kind: 'simple', css: 'text-shadow', key: 'textShadow' },\n { kind: 'simple', css: 'text-wrap', key: 'textWrap' },\n { kind: 'simple', css: 'text-rendering', key: 'textRendering' },\n { kind: 'simple', css: 'white-space', key: 'whiteSpace' },\n { kind: 'simple', css: 'word-break', key: 'wordBreak' },\n { kind: 'simple', css: 'word-wrap', key: 'wordWrap' },\n { kind: 'simple', css: 'writing-mode', key: 'writingMode' },\n { kind: 'simple', css: 'direction', key: 'direction' },\n { kind: 'simple', css: 'hyphens', key: 'hyphens' },\n\n // LIST\n { kind: 'simple', css: 'list-style', key: 'listStyle' },\n { kind: 'simple', css: 'list-style-image', key: 'listStyleImage' },\n { kind: 'simple', css: 'list-style-position', key: 'listStylePosition' },\n { kind: 'simple', css: 'list-style-type', key: 'listStyleType' },\n\n // BACKGROUND & COLORS\n { kind: 'simple', css: 'color', key: 'color' },\n { kind: 'simple', css: 'background', key: 'background' },\n { kind: 'simple', css: 'background-color', key: 'backgroundColor' },\n { kind: 'special', id: 'backgroundImage' },\n { kind: 'simple', css: 'background-attachment', key: 'backgroundAttachment' },\n { kind: 'simple', css: 'background-clip', key: 'backgroundClip' },\n { kind: 'simple', css: 'background-origin', key: 'backgroundOrigin' },\n { kind: 'simple', css: 'background-position', key: 'backgroundPosition' },\n { kind: 'simple', css: 'background-repeat', key: 'backgroundRepeat' },\n { kind: 'simple', css: 'background-size', key: 'backgroundSize' },\n\n // BORDERS\n {\n kind: 'border_radius',\n keys: {\n full: 'borderRadius',\n top: 'borderRadiusTop',\n bottom: 'borderRadiusBottom',\n left: 'borderRadiusLeft',\n right: 'borderRadiusRight',\n topLeft: 'borderRadiusTopLeft',\n topRight: 'borderRadiusTopRight',\n bottomLeft: 'borderRadiusBottomLeft',\n bottomRight: 'borderRadiusBottomRight',\n },\n },\n { kind: 'simple', css: 'border', key: 'border' },\n { kind: 'simple', css: 'border-top', key: 'borderTop' },\n { kind: 'simple', css: 'border-bottom', key: 'borderBottom' },\n { kind: 'simple', css: 'border-left', key: 'borderLeft' },\n { kind: 'simple', css: 'border-right', key: 'borderRight' },\n {\n kind: 'edge',\n property: 'border-width',\n keys: {\n full: 'borderWidth',\n x: 'borderWidthX',\n y: 'borderWidthY',\n top: 'borderWidthTop',\n left: 'borderWidthLeft',\n bottom: 'borderWidthBottom',\n right: 'borderWidthRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-style',\n keys: {\n full: 'borderStyle',\n x: 'borderStyleX',\n y: 'borderStyleY',\n top: 'borderStyleTop',\n left: 'borderStyleLeft',\n bottom: 'borderStyleBottom',\n right: 'borderStyleRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-color',\n keys: {\n full: 'borderColor',\n x: 'borderColorX',\n y: 'borderColorY',\n top: 'borderColorTop',\n left: 'borderColorLeft',\n bottom: 'borderColorBottom',\n right: 'borderColorRight',\n },\n },\n { kind: 'simple', css: 'border-image', key: 'borderImage' },\n { kind: 'simple', css: 'border-image-outset', key: 'borderImageOutset' },\n { kind: 'simple', css: 'border-image-repeat', key: 'borderImageRepeat' },\n { kind: 'simple', css: 'border-image-slice', key: 'borderImageSlice' },\n { kind: 'simple', css: 'border-image-source', key: 'borderImageSource' },\n { kind: 'simple', css: 'border-image-width', key: 'borderImageWidth' },\n { kind: 'simple', css: 'border-spacing', key: 'borderSpacing' },\n\n { kind: 'simple', css: 'border-collapse', key: 'borderCollapse' },\n\n // Logical borders\n { kind: 'simple', css: 'border-inline', key: 'borderInline' },\n { kind: 'simple', css: 'border-block', key: 'borderBlock' },\n { kind: 'simple', css: 'border-inline-start', key: 'borderInlineStart' },\n { kind: 'simple', css: 'border-inline-end', key: 'borderInlineEnd' },\n { kind: 'simple', css: 'border-block-start', key: 'borderBlockStart' },\n { kind: 'simple', css: 'border-block-end', key: 'borderBlockEnd' },\n\n // VISUAL EFFECTS\n { kind: 'simple', css: 'backface-visibility', key: 'backfaceVisibility' },\n { kind: 'simple', css: 'box-shadow', key: 'boxShadow' },\n { kind: 'simple', css: 'filter', key: 'filter' },\n { kind: 'simple', css: 'backdrop-filter', key: 'backdropFilter' },\n { kind: 'simple', css: 'mix-blend-mode', key: 'mixBlendMode' },\n { kind: 'simple', css: 'background-blend-mode', key: 'backgroundBlendMode' },\n { kind: 'simple', css: 'isolation', key: 'isolation' },\n { kind: 'simple', css: 'outline', key: 'outline' },\n { kind: 'simple', css: 'outline-color', key: 'outlineColor' },\n { kind: 'simple', css: 'outline-offset', key: 'outlineOffset' },\n { kind: 'simple', css: 'outline-style', key: 'outlineStyle' },\n { kind: 'simple', css: 'outline-width', key: 'outlineWidth' },\n\n // ANIMATIONS\n { kind: 'special', id: 'animation' },\n { kind: 'simple', css: 'animation-name', key: 'animationName' },\n { kind: 'simple', css: 'animation-duration', key: 'animationDuration' },\n { kind: 'simple', css: 'animation-timing-function', key: 'animationTimingFunction' },\n { kind: 'simple', css: 'animation-delay', key: 'animationDelay' },\n { kind: 'simple', css: 'animation-iteration-count', key: 'animationIterationCount' },\n { kind: 'simple', css: 'animation-direction', key: 'animationDirection' },\n { kind: 'simple', css: 'animation-fill-mode', key: 'animationFillMode' },\n { kind: 'simple', css: 'animation-play-state', key: 'animationPlayState' },\n { kind: 'simple', css: 'transition', key: 'transition' },\n { kind: 'simple', css: 'transition-delay', key: 'transitionDelay' },\n { kind: 'simple', css: 'transition-duration', key: 'transitionDuration' },\n { kind: 'simple', css: 'transition-property', key: 'transitionProperty' },\n { kind: 'simple', css: 'transition-timing-function', key: 'transitionTimingFunction' },\n\n // TRANSFORM\n { kind: 'simple', css: 'transform', key: 'transform' },\n { kind: 'simple', css: 'transform-origin', key: 'transformOrigin' },\n { kind: 'simple', css: 'transform-style', key: 'transformStyle' },\n { kind: 'simple', css: 'translate', key: 'translate' },\n { kind: 'simple', css: 'rotate', key: 'rotate' },\n { kind: 'simple', css: 'scale', key: 'scale' },\n { kind: 'simple', css: 'will-change', key: 'willChange' },\n\n // SCROLL\n { kind: 'simple', css: 'scroll-behavior', key: 'scrollBehavior' },\n { kind: 'simple', css: 'scroll-snap-type', key: 'scrollSnapType' },\n { kind: 'simple', css: 'scroll-snap-align', key: 'scrollSnapAlign' },\n { kind: 'simple', css: 'scroll-snap-stop', key: 'scrollSnapStop' },\n { kind: 'simple', css: 'scroll-margin', key: 'scrollMargin' },\n { kind: 'simple', css: 'scroll-padding', key: 'scrollPadding' },\n { kind: 'simple', css: 'overscroll-behavior', key: 'overscrollBehavior' },\n { kind: 'simple', css: 'overscroll-behavior-x', key: 'overscrollBehaviorX' },\n { kind: 'simple', css: 'overscroll-behavior-y', key: 'overscrollBehaviorY' },\n\n // INTERACTION\n { kind: 'simple', css: 'cursor', key: 'cursor' },\n { kind: 'simple', css: 'pointer-events', key: 'pointerEvents' },\n { kind: 'simple', css: 'user-select', key: 'userSelect' },\n { kind: 'simple', css: 'touch-action', key: 'touchAction' },\n { kind: 'simple', css: 'scrollbar-width', key: 'scrollbarWidth' },\n { kind: 'simple', css: 'scrollbar-color', key: 'scrollbarColor' },\n { kind: 'simple', css: 'scrollbar-gutter', key: 'scrollbarGutter' },\n { kind: 'simple', css: 'caret-color', key: 'caretColor' },\n { kind: 'simple', css: 'accent-color', key: 'accentColor' },\n { kind: 'simple', css: 'color-scheme', key: 'colorScheme' },\n\n // OTHER\n { kind: 'simple', css: 'caption-side', key: 'captionSide' },\n { kind: 'simple', css: 'clear', key: 'clear' },\n { kind: 'simple', css: 'clip', key: 'clip' },\n { kind: 'simple', css: 'clip-path', key: 'clipPath' },\n { kind: 'simple', css: 'content', key: 'content' },\n { kind: 'simple', css: 'content-visibility', key: 'contentVisibility' },\n { kind: 'simple', css: 'counter-increment', key: 'counterIncrement' },\n { kind: 'simple', css: 'counter-reset', key: 'counterReset' },\n { kind: 'simple', css: 'empty-cells', key: 'emptyCells' },\n { kind: 'simple', css: 'z-index', key: 'zIndex' },\n { kind: 'simple', css: 'overflow', key: 'overflow' },\n { kind: 'simple', css: 'overflow-wrap', key: 'overflowWrap' },\n { kind: 'simple', css: 'overflow-x', key: 'overflowX' },\n { kind: 'simple', css: 'overflow-y', key: 'overflowY' },\n { kind: 'simple', css: 'perspective', key: 'perspective' },\n { kind: 'simple', css: 'perspective-origin', key: 'perspectiveOrigin' },\n { kind: 'simple', css: 'quotes', key: 'quotes' },\n { kind: 'simple', css: 'tab-size', key: 'tabSize' },\n { kind: 'simple', css: 'table-layout', key: 'tableLayout' },\n { kind: 'simple', css: 'visibility', key: 'visibility' },\n { kind: 'simple', css: 'appearance', key: 'appearance' },\n { kind: 'simple', css: 'image-rendering', key: 'imageRendering' },\n\n // Masks\n { kind: 'simple', css: 'mask-image', key: 'maskImage' },\n { kind: 'simple', css: 'mask-size', key: 'maskSize' },\n { kind: 'simple', css: 'mask-position', key: 'maskPosition' },\n { kind: 'simple', css: 'mask-repeat', key: 'maskRepeat' },\n\n // Shapes\n { kind: 'simple', css: 'shape-outside', key: 'shapeOutside' },\n { kind: 'simple', css: 'shape-margin', key: 'shapeMargin' },\n { kind: 'simple', css: 'shape-image-threshold', key: 'shapeImageThreshold' },\n\n // Columns\n { kind: 'simple', css: 'column-count', key: 'columnCount' },\n { kind: 'simple', css: 'column-width', key: 'columnWidth' },\n { kind: 'simple', css: 'column-rule', key: 'columnRule' },\n { kind: 'simple', css: 'columns', key: 'columns' },\n\n // Fragmentation\n { kind: 'simple', css: 'break-before', key: 'breakBefore' },\n { kind: 'simple', css: 'break-after', key: 'breakAfter' },\n { kind: 'simple', css: 'break-inside', key: 'breakInside' },\n { kind: 'simple', css: 'orphans', key: 'orphans' },\n { kind: 'simple', css: 'widows', key: 'widows' },\n { kind: 'simple', css: 'print-color-adjust', key: 'printColorAdjust' },\n\n // CUSTOM ATTRIBUTES\n { kind: 'special', id: 'hideEmpty' },\n { kind: 'special', id: 'clearFix' },\n { kind: 'special', id: 'extendCss' },\n]\n\nexport default propertyMap\n","import { values } from '../../units'\nimport { borderRadius, edge } from '../shorthands'\nimport processDescriptor from './processDescriptor'\nimport propertyMap from './propertyMap'\nimport type { ITheme, InnerTheme, Theme } from './types'\n\nexport type { ITheme, Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => any\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, any> | undefined\n}) => ReturnType<Css>\n\n// ─── Tier 1: Key → descriptor-index lookup ──────────────────────────────────\n// Built once at module init. Instead of scanning all 257 descriptors on every\n// styles() call, we look up only the indices whose keys are present in the\n// incoming theme object. Reduces iterations from ~257 to ~10-20 for a typical\n// component that uses 5-10 properties.\n\nconst keyToIndices = new Map<string, number[]>()\n\nfor (let i = 0; i < propertyMap.length; i++) {\n const d = propertyMap[i] as Record<string, any>\n const addKey = (k: string) => {\n let arr = keyToIndices.get(k)\n if (!arr) {\n arr = []\n keyToIndices.set(k, arr)\n }\n arr.push(i)\n }\n\n if (d.key) addKey(d.key)\n if (d.keys) {\n if (Array.isArray(d.keys)) {\n for (const k of d.keys) addKey(k)\n } else {\n for (const k of Object.values(d.keys as Record<string, string>)) addKey(k)\n }\n }\n}\n\n/**\n * Data-driven style processor. Uses the pre-built key→index lookup to\n * iterate ONLY the descriptors whose theme keys are present in the\n * incoming theme object. Falls back to full scan only if the lookup\n * produces zero matches (defensive — shouldn't happen in practice).\n *\n * IMPORTANT: the return MUST be wrapped in `css\\`...\\`` — NOT a plain\n * string join. makeItResponsive embeds this result in another template\n * literal, and the CSS interpolation chain requires a css template\n * result (not a raw string) for correct nesting of media queries,\n * pseudo-selectors, and @layer wrapping.\n */\nconst styles: Styles = ({ theme: t, css, rootSize }) => {\n const calc = (...params: any[]) => values(params, rootSize)\n const shorthand = edge(rootSize)\n const borderRadiusFn = borderRadius(rootSize)\n\n // Fast path: iterate only descriptors whose keys are present in theme\n const seen = new Set<number>()\n const fragments: unknown[] = []\n\n for (const key of Object.keys(t)) {\n const indices = keyToIndices.get(key)\n if (!indices) continue\n for (const idx of indices) {\n if (seen.has(idx)) continue\n seen.add(idx)\n fragments.push(processDescriptor(propertyMap[idx]!, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n // Fallback: if lookup produced nothing, full scan (handles edge cases\n // where theme uses non-standard keys that aren't in propertyMap)\n if (fragments.length === 0 && Object.keys(t).length > 0) {\n for (const d of propertyMap) {\n fragments.push(processDescriptor(d, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n return css`\n ${fragments}\n `\n}\n\nexport default styles\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/unistyle",
3
- "version": "0.12.15",
3
+ "version": "0.13.0",
4
4
  "description": "Responsive theming and breakpoint utilities for Pyreon",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -41,16 +41,16 @@
41
41
  "typecheck": "tsc --noEmit"
42
42
  },
43
43
  "devDependencies": {
44
- "@pyreon/test-utils": "^0.12.10",
45
- "@pyreon/typescript": "^0.12.15",
44
+ "@pyreon/test-utils": "^0.13.0",
45
+ "@pyreon/typescript": "^0.13.0",
46
46
  "@vitest/browser-playwright": "^4.1.4",
47
47
  "@vitus-labs/tools-rolldown": "^1.15.3"
48
48
  },
49
49
  "peerDependencies": {
50
- "@pyreon/core": "^0.12.15",
51
- "@pyreon/reactivity": "^0.12.15",
52
- "@pyreon/styler": "^0.12.15",
53
- "@pyreon/ui-core": "^0.12.15"
50
+ "@pyreon/core": "^0.13.0",
51
+ "@pyreon/reactivity": "^0.13.0",
52
+ "@pyreon/styler": "^0.13.0",
53
+ "@pyreon/ui-core": "^0.13.0"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">= 22"
@@ -124,3 +124,91 @@ describe('styles', () => {
124
124
  expect(result).toContain('2rem')
125
125
  })
126
126
  })
127
+
128
+ describe('Tier 1: key→index lookup correctness', () => {
129
+ it('produces identical output for typical rocketstyle theme object', () => {
130
+ // A realistic theme object from a rocketstyle component — has ~10 keys
131
+ const theme = {
132
+ color: '#333',
133
+ backgroundColor: '#fff',
134
+ fontSize: 14,
135
+ fontWeight: 600,
136
+ paddingTop: 8,
137
+ paddingBottom: 8,
138
+ paddingLeft: 12,
139
+ paddingRight: 12,
140
+ borderRadius: 4,
141
+ borderColor: '#ddd',
142
+ borderWidthTop: 1,
143
+ lineHeight: 1.5,
144
+ cursor: 'pointer',
145
+ }
146
+
147
+ const result = styles({ theme, css: mockCss, rootSize: 16 })
148
+ const output = String(result)
149
+
150
+ // Verify each property produces correct CSS
151
+ expect(output).toContain('color: #333;')
152
+ expect(output).toContain('background-color: #fff;')
153
+ expect(output).toContain('font-weight: 600;')
154
+ expect(output).toContain('cursor: pointer;')
155
+ expect(output).toContain('line-height: 1.5;')
156
+ // Unit conversion: 14px fontSize, 8px padding
157
+ expect(output).toContain('font-size:')
158
+ expect(output).toContain('padding:')
159
+ expect(output).toContain('border-radius:')
160
+ expect(output).toContain('border-color: #ddd;')
161
+ })
162
+
163
+ it('handles edge properties (margin/padding shorthand)', () => {
164
+ const theme = {
165
+ margin: 16,
166
+ marginTop: 8,
167
+ padding: 12,
168
+ }
169
+ const result = styles({ theme, css: mockCss, rootSize: 16 })
170
+ const output = String(result)
171
+ expect(output).toContain('margin')
172
+ expect(output).toContain('padding')
173
+ })
174
+
175
+ it('handles convert_fallback properties (width/size)', () => {
176
+ const theme = { width: 200, size: 100 }
177
+ const result = styles({ theme, css: mockCss, rootSize: 16 })
178
+ const output = String(result)
179
+ // width should win over size fallback for width
180
+ expect(output).toContain('width:')
181
+ })
182
+
183
+ it('empty theme fast-path produces no CSS (same as before)', () => {
184
+ const result = styles({ theme: {}, css: mockCss, rootSize: 16 })
185
+ const cleaned = String(result).replace(/[,\s]/g, '')
186
+ expect(cleaned).toBe('')
187
+ })
188
+ })
189
+
190
+ describe('Tier 1: performance characteristics', () => {
191
+ it('processes a typical 10-key theme in fewer iterations than full scan', () => {
192
+ // This test documents the performance contract: for a theme with N keys,
193
+ // we should iterate approximately N descriptors (plus some overlap from
194
+ // multi-key descriptors like convert_fallback), NOT all 257.
195
+ const theme = {
196
+ color: 'red',
197
+ backgroundColor: 'blue',
198
+ fontSize: 14,
199
+ padding: 8,
200
+ borderRadius: 4,
201
+ }
202
+
203
+ // Count iterations by checking that the output is correct (proving the
204
+ // fast path ran, not the fallback full-scan)
205
+ const result = styles({ theme, css: mockCss, rootSize: 16 })
206
+ const output = String(result)
207
+ expect(output).toContain('color: red;')
208
+ expect(output).toContain('background-color: blue;')
209
+ // The key insight: if the output is correct with 5 keys, the indexed
210
+ // path found the right descriptors without scanning all 257.
211
+ // The fallback only fires when NO matches are found — with 5 real keys
212
+ // the indexed path should always find matches.
213
+ })
214
+ })
package/src/context.tsx CHANGED
@@ -29,7 +29,8 @@ function Provider(props: TProvider): VNode | null {
29
29
  // AND the styler ThemeContext (for styled() components and makeItResponsive).
30
30
  // Without this, styled() components receive an empty theme and all responsive
31
31
  // styles are skipped (@media queries produce NaN values).
32
- provide(ThemeContext, enrichedTheme)
32
+ // ThemeContext is a ReactiveContext — provide an accessor.
33
+ provide(ThemeContext, () => enrichedTheme)
33
34
 
34
35
  return CoreProvider({ theme: enrichedTheme, children }) as VNode | null
35
36
  }
@@ -20,28 +20,73 @@ export type Styles = ({
20
20
  globalTheme?: Record<string, any> | undefined
21
21
  }) => ReturnType<Css>
22
22
 
23
+ // ─── Tier 1: Key → descriptor-index lookup ──────────────────────────────────
24
+ // Built once at module init. Instead of scanning all 257 descriptors on every
25
+ // styles() call, we look up only the indices whose keys are present in the
26
+ // incoming theme object. Reduces iterations from ~257 to ~10-20 for a typical
27
+ // component that uses 5-10 properties.
28
+
29
+ const keyToIndices = new Map<string, number[]>()
30
+
31
+ for (let i = 0; i < propertyMap.length; i++) {
32
+ const d = propertyMap[i] as Record<string, any>
33
+ const addKey = (k: string) => {
34
+ let arr = keyToIndices.get(k)
35
+ if (!arr) {
36
+ arr = []
37
+ keyToIndices.set(k, arr)
38
+ }
39
+ arr.push(i)
40
+ }
41
+
42
+ if (d.key) addKey(d.key)
43
+ if (d.keys) {
44
+ if (Array.isArray(d.keys)) {
45
+ for (const k of d.keys) addKey(k)
46
+ } else {
47
+ for (const k of Object.values(d.keys as Record<string, string>)) addKey(k)
48
+ }
49
+ }
50
+ }
51
+
23
52
  /**
24
- * Data-driven style processor. Iterates the `propertyMap` descriptors
25
- * and delegates each to `processDescriptor`, which maps theme values
26
- * to CSS strings. The result is a single `css` tagged-template literal
27
- * containing all non-null property outputs.
53
+ * Data-driven style processor. Uses the pre-built key→index lookup to
54
+ * iterate ONLY the descriptors whose theme keys are present in the
55
+ * incoming theme object. Falls back to full scan only if the lookup
56
+ * produces zero matches (defensive — shouldn't happen in practice).
28
57
  *
29
58
  * IMPORTANT: the return MUST be wrapped in `css\`...\`` — NOT a plain
30
59
  * string join. makeItResponsive embeds this result in another template
31
60
  * literal, and the CSS interpolation chain requires a css template
32
61
  * result (not a raw string) for correct nesting of media queries,
33
- * pseudo-selectors, and @layer wrapping. A previous version returned
34
- * `fragments.filter(Boolean).join(' ')` which broke responsive styles,
35
- * hover states, and layer cascade ordering.
62
+ * pseudo-selectors, and @layer wrapping.
36
63
  */
37
64
  const styles: Styles = ({ theme: t, css, rootSize }) => {
38
65
  const calc = (...params: any[]) => values(params, rootSize)
39
66
  const shorthand = edge(rootSize)
40
67
  const borderRadiusFn = borderRadius(rootSize)
41
68
 
42
- const fragments = propertyMap.map((d) =>
43
- processDescriptor(d, t, css, calc, shorthand, borderRadiusFn),
44
- )
69
+ // Fast path: iterate only descriptors whose keys are present in theme
70
+ const seen = new Set<number>()
71
+ const fragments: unknown[] = []
72
+
73
+ for (const key of Object.keys(t)) {
74
+ const indices = keyToIndices.get(key)
75
+ if (!indices) continue
76
+ for (const idx of indices) {
77
+ if (seen.has(idx)) continue
78
+ seen.add(idx)
79
+ fragments.push(processDescriptor(propertyMap[idx]!, t, css, calc, shorthand, borderRadiusFn))
80
+ }
81
+ }
82
+
83
+ // Fallback: if lookup produced nothing, full scan (handles edge cases
84
+ // where theme uses non-standard keys that aren't in propertyMap)
85
+ if (fragments.length === 0 && Object.keys(t).length > 0) {
86
+ for (const d of propertyMap) {
87
+ fragments.push(processDescriptor(d, t, css, calc, shorthand, borderRadiusFn))
88
+ }
89
+ }
45
90
 
46
91
  return css`
47
92
  ${fragments}