@pyreon/unistyle 0.12.8 → 0.12.10

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.js CHANGED
@@ -72,22 +72,23 @@ const normalizeTheme = ({ theme, breakpoints }) => {
72
72
 
73
73
  //#endregion
74
74
  //#region src/responsive/optimizeTheme.ts
75
- const shallowEqual = (a, b) => {
76
- if (a === b) return true;
77
- if (!a || !b) return false;
78
- const keysA = Object.keys(a);
79
- const keysB = Object.keys(b);
80
- if (keysA.length !== keysB.length) return false;
81
- for (const key of keysA) if (a[key] !== b[key]) return false;
82
- return true;
83
- };
84
75
  const optimizeTheme = ({ theme, breakpoints }) => {
85
76
  const result = {};
86
77
  for (let i = 0; i < breakpoints.length; i++) {
87
78
  const key = breakpoints[i];
88
- const previousBreakpoint = breakpoints[i - 1];
89
79
  const current = theme[key];
90
- if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) result[key] = current;
80
+ if (!current) continue;
81
+ if (i === 0) result[key] = current;
82
+ else {
83
+ const prev = theme[breakpoints[i - 1]];
84
+ const diff = {};
85
+ let hasDiff = false;
86
+ for (const prop of Object.keys(current)) if (!prev || current[prop] !== prev[prop]) {
87
+ diff[prop] = current[prop];
88
+ hasDiff = true;
89
+ }
90
+ if (hasDiff) result[key] = diff;
91
+ }
91
92
  }
92
93
  return result;
93
94
  };
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\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, Record<string, unknown> | number | string | boolean>\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[]) => string\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\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n): string => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return 'position: fixed; top: 0; left: 0; right: 0; bottom: 0;'\n\n case 'backgroundImage':\n if (!t.backgroundImage) return ''\n return `background-image: url(${t.backgroundImage});`\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 '&:empty { display: none; }'\n\n case 'clearFix':\n if (!t.clearFix) return ''\n return '&::after { clear: both; content: \"\"; display: table; }'\n\n case 'extendCss':\n return (t.extendCss as string) ?? ''\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 => {\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)\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 // 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 { InnerTheme, Theme } from './types'\n\nexport type { Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => string\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number\n}) => string\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 fragments.filter(Boolean).join(' ')\n}\n\nexport default styles\n"],"mappings":"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"}
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\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 current = theme[key]\n if (!current) continue\n\n if (i === 0) {\n // First breakpoint: emit all properties\n result[key] = current\n } else {\n // Higher breakpoints: only emit properties that CHANGED from previous.\n // This prevents duplicating e.g. height: 100% in every media query\n // when only maxWidth changes per breakpoint.\n const prev = theme[breakpoints[i - 1] as string]\n const diff: Record<string, unknown> = {}\n let hasDiff = false\n\n for (const prop of Object.keys(current)) {\n if (!prev || current[prop] !== prev[prop]) {\n diff[prop] = current[prop]\n hasDiff = true\n }\n }\n\n if (hasDiff) result[key] = diff\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, Record<string, unknown> | number | string | boolean>\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[]) => string\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\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n): string => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return 'position: fixed; top: 0; left: 0; right: 0; bottom: 0;'\n\n case 'backgroundImage':\n if (!t.backgroundImage) return ''\n return `background-image: url(${t.backgroundImage});`\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 '&:empty { display: none; }'\n\n case 'clearFix':\n if (!t.clearFix) return ''\n return '&::after { clear: both; content: \"\"; display: table; }'\n\n case 'extendCss':\n return (t.extendCss as string) ?? ''\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 => {\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)\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 // 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 { InnerTheme, Theme } from './types'\n\nexport type { Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => string\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number\n}) => string\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 fragments.filter(Boolean).join(' ')\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;;;;;ACtCT,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,UAAU,MAAM;AACtB,MAAI,CAAC,QAAS;AAEd,MAAI,MAAM,EAER,QAAO,OAAO;OACT;GAIL,MAAM,OAAO,MAAM,YAAY,IAAI;GACnC,MAAM,OAAgC,EAAE;GACxC,IAAI,UAAU;AAEd,QAAK,MAAM,QAAQ,OAAO,KAAK,QAAQ,CACrC,KAAI,CAAC,QAAQ,QAAQ,UAAU,KAAK,OAAO;AACzC,SAAK,QAAQ,QAAQ;AACrB,cAAU;;AAId,OAAI,QAAS,QAAO,OAAO;;;AAI/B,QAAO;;;;;ACnDT,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;AAE9E,MAAM,kBACJ,GACA,MACW;AACX,SAAQ,EAAE,IAAV;EACE,KAAK;AACH,OAAI,CAAC,EAAE,WAAY,QAAO;AAC1B,UAAO;EAET,KAAK;AACH,OAAI,CAAC,EAAE,gBAAiB,QAAO;AAC/B,UAAO,yBAAyB,EAAE,gBAAgB;EAEpD,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;EAET,KAAK;AACH,OAAI,CAAC,EAAE,SAAU,QAAO;AACxB,UAAO;EAET,KAAK,YACH,QAAQ,EAAE,aAAwB;EAEpC,QACE,QAAO;;;AAIb,MAAM,qBACJ,GACA,GACA,MACA,MACA,WACA,mBACW;AACX,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,EAAE;;;;;;ACvDjC,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;CAG/D;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;;;;AC7ZD,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,QAJkB,YAAY,KAAK,MACjC,kBAAkB,GAAG,GAAG,KAAK,MAAM,WAAW,eAAe,CAC9D,CAEgB,OAAO,QAAQ,CAAC,KAAK,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/unistyle",
3
- "version": "0.12.8",
3
+ "version": "0.12.10",
4
4
  "description": "Responsive theming and breakpoint utilities for Pyreon",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,14 +40,14 @@
40
40
  "typecheck": "tsc --noEmit"
41
41
  },
42
42
  "devDependencies": {
43
- "@pyreon/typescript": "^0.12.8",
43
+ "@pyreon/typescript": "^0.12.10",
44
44
  "@vitus-labs/tools-rolldown": "^1.15.3"
45
45
  },
46
46
  "peerDependencies": {
47
- "@pyreon/core": "^0.12.8",
48
- "@pyreon/reactivity": "^0.12.8",
49
- "@pyreon/styler": "^0.12.8",
50
- "@pyreon/ui-core": "^0.12.8"
47
+ "@pyreon/core": "^0.12.10",
48
+ "@pyreon/reactivity": "^0.12.10",
49
+ "@pyreon/styler": "^0.12.10",
50
+ "@pyreon/ui-core": "^0.12.10"
51
51
  },
52
52
  "engines": {
53
53
  "node": ">= 22"
@@ -174,4 +174,44 @@ describe('optimizeTheme', () => {
174
174
  it('handles empty theme', () => {
175
175
  expect(optimizeTheme({ theme: {}, breakpoints: bpKeys })).toEqual({})
176
176
  })
177
+
178
+ it('only emits changed properties per breakpoint (property-level dedup)', () => {
179
+ const theme = {
180
+ xs: { maxWidth: '90%', height: '100%' },
181
+ sm: { maxWidth: '33.75rem', height: '100%' },
182
+ md: { maxWidth: '43.75rem', height: '100%' },
183
+ lg: { maxWidth: '58.75rem', height: '100%' },
184
+ }
185
+ const result = optimizeTheme({ theme, breakpoints: bpKeys })
186
+ // xs: full object (first breakpoint)
187
+ expect(result.xs).toEqual({ maxWidth: '90%', height: '100%' })
188
+ // sm: only maxWidth changed — height NOT duplicated
189
+ expect(result.sm).toEqual({ maxWidth: '33.75rem' })
190
+ // md: only maxWidth changed
191
+ expect(result.md).toEqual({ maxWidth: '43.75rem' })
192
+ // lg: only maxWidth changed
193
+ expect(result.lg).toEqual({ maxWidth: '58.75rem' })
194
+ })
195
+
196
+ it('emits nothing when all properties unchanged from previous', () => {
197
+ const theme = {
198
+ xs: { color: 'red', size: 12 },
199
+ sm: { color: 'red', size: 12 },
200
+ md: { color: 'blue', size: 12 },
201
+ }
202
+ const result = optimizeTheme({ theme, breakpoints: bpKeys })
203
+ expect(result.xs).toEqual({ color: 'red', size: 12 })
204
+ expect(result.sm).toBeUndefined() // identical to xs
205
+ expect(result.md).toEqual({ color: 'blue' }) // only color changed
206
+ })
207
+
208
+ it('handles new property added at higher breakpoint', () => {
209
+ const theme = {
210
+ xs: { color: 'red' },
211
+ sm: { color: 'red', padding: 10 },
212
+ }
213
+ const result = optimizeTheme({ theme, breakpoints: bpKeys })
214
+ expect(result.xs).toEqual({ color: 'red' })
215
+ expect(result.sm).toEqual({ padding: 10 }) // only the new property
216
+ })
177
217
  })
@@ -26,10 +26,28 @@ const optimizeTheme: OptimizeTheme = ({ theme, breakpoints }) => {
26
26
 
27
27
  for (let i = 0; i < breakpoints.length; i++) {
28
28
  const key = breakpoints[i] as string
29
- const previousBreakpoint = breakpoints[i - 1] as string
30
29
  const current = theme[key]
31
- if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) {
30
+ if (!current) continue
31
+
32
+ if (i === 0) {
33
+ // First breakpoint: emit all properties
32
34
  result[key] = current
35
+ } else {
36
+ // Higher breakpoints: only emit properties that CHANGED from previous.
37
+ // This prevents duplicating e.g. height: 100% in every media query
38
+ // when only maxWidth changes per breakpoint.
39
+ const prev = theme[breakpoints[i - 1] as string]
40
+ const diff: Record<string, unknown> = {}
41
+ let hasDiff = false
42
+
43
+ for (const prop of Object.keys(current)) {
44
+ if (!prev || current[prop] !== prev[prop]) {
45
+ diff[prop] = current[prop]
46
+ hasDiff = true
47
+ }
48
+ }
49
+
50
+ if (hasDiff) result[key] = diff
33
51
  }
34
52
  }
35
53