@pyreon/unistyle 0.30.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -1
- package/lib/index.d.ts +130 -17
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +276 -43
- package/lib/index.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -124,6 +124,34 @@ stripUnit(24) // 24
|
|
|
124
124
|
values([null, 16, 24], 16) // '1rem' (picks first non-null and converts)
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
+
## CSS variables from a theme — `themeToCssVars`
|
|
128
|
+
|
|
129
|
+
Autogenerate CSS custom properties from a plain theme JSON. Returns the same-shape tree with every eligible leaf replaced by a `var(--px-…)` reference string, plus a ready-to-inject `:root` block and a `varName → value` registry for consumers that can't evaluate `var()` (document export, devtools).
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { themeToCssVars } from '@pyreon/unistyle'
|
|
133
|
+
|
|
134
|
+
const theme = { rootSize: 16, spacing: { small: 8 }, ratio: { medium: 1.5 } }
|
|
135
|
+
const { vars, css, registry } = themeToCssVars(theme)
|
|
136
|
+
|
|
137
|
+
vars.spacing.small // 'var(--px-spacing-small)'
|
|
138
|
+
css // ':root {\n --px-spacing-small: 0.5rem;\n --px-ratio-medium: 1.5;\n}'
|
|
139
|
+
registry.get('--px-spacing-small') // '0.5rem'
|
|
140
|
+
|
|
141
|
+
// Proportional sizing is native CSS — no extra machinery:
|
|
142
|
+
const width = `calc(${vars.spacing.small} * ${vars.ratio.medium})`
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Key behaviors:
|
|
146
|
+
|
|
147
|
+
- **Units are baked at emission** using the same `value()` conversion the pipeline applies at render time — `spacing.small: 8` emits `--px-spacing-small: 0.5rem`, so themes stay authored in pixels and nothing downstream ever converts a var.
|
|
148
|
+
- **Conventional length keys convert by default** (`spacing`, `fontSize`, `headingSize`, `elementSize`, `borderRadius` → rem; `borderWidth` → px). Everything else emits verbatim, so unitless scales (`lineHeight`, `fontWeight`, `zIndex`, custom `ratio` keys) stay valid as `calc()` multipliers. Opt custom scales into conversion via `units: { myScale: 'rem' }`.
|
|
149
|
+
- **`breakpoints` / `rootSize` / `__PYREON__` are excluded** — `@media` queries can't read `var()`; JS consumes them at render time. Arrays, functions, booleans, `null`/`undefined`, empty strings, and non-finite numbers also stay raw.
|
|
150
|
+
- **Var leaves flow through the whole pipeline untouched** — `value()`, `values()`, the edge/border-radius shorthands, `styles()`, and `makeItResponsive` all pass `var(`/`calc(` strings through verbatim (a tested contract, not an accident).
|
|
151
|
+
- **Pure + cached** — no injection happens; pass `css` to your style sink. Results are WeakMap-cached by theme identity, so repeated calls return the same object.
|
|
152
|
+
|
|
153
|
+
Gotchas: don't do JS arithmetic on a var leaf (`vars.spacing.small * 2` is `NaN` — use native `calc()`); don't use a var leaf for `backgroundImage` (CSS forbids `var()` inside `url(…)`); name collisions after kebab-case normalization (`xSmall` vs `x-small`) throw loudly.
|
|
154
|
+
|
|
127
155
|
## Alignment helpers
|
|
128
156
|
|
|
129
157
|
```ts
|
|
@@ -192,7 +220,7 @@ import type {
|
|
|
192
220
|
|
|
193
221
|
## Documentation
|
|
194
222
|
|
|
195
|
-
Full docs: [
|
|
223
|
+
Full docs: [pyreon.dev/docs/unistyle](https://pyreon.dev/docs/unistyle) (or `docs/src/content/docs/unistyle.md` in this repo).
|
|
196
224
|
|
|
197
225
|
## License
|
|
198
226
|
|
package/lib/index.d.ts
CHANGED
|
@@ -41,6 +41,135 @@ type TProvider = {
|
|
|
41
41
|
*/
|
|
42
42
|
declare function Provider(props: TProvider): VNode | null;
|
|
43
43
|
//#endregion
|
|
44
|
+
//#region src/units/stripUnit.d.ts
|
|
45
|
+
type Value$1<V> = V extends string ? number : V;
|
|
46
|
+
type Unit<V> = V extends string ? string : undefined;
|
|
47
|
+
type StripUnit = <V extends string | number, UR extends boolean = false>(value: V, unitReturn?: UR) => UR extends true ? [Value$1<V>, Unit<V>] : Value$1<V>;
|
|
48
|
+
declare const stripUnit: StripUnit;
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/units/value.d.ts
|
|
51
|
+
type CssUnits$1 = 'px' | 'rem' | '%' | 'em' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc' | 'ch' | 'vh' | 'vw' | 'vmin' | 'vmax';
|
|
52
|
+
type Value = (param: string | number | null | undefined, rootSize?: number, outputUnit?: CssUnits$1) => string | number | null;
|
|
53
|
+
declare const value: Value;
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/units/values.d.ts
|
|
56
|
+
type CssUnits = 'px' | 'rem' | '%' | 'em' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc' | 'ch' | 'vh' | 'vw' | 'vmin' | 'vmax';
|
|
57
|
+
type Values = (items: unknown[], rootSize?: number, outputUnit?: CssUnits) => string | number | null;
|
|
58
|
+
declare const values: Values;
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/cssVariables.d.ts
|
|
61
|
+
/** CSS units accepted by the `value()` converter (re-derived, not duplicated). */
|
|
62
|
+
type CssVarsUnit = NonNullable<Parameters<Value>[2]>;
|
|
63
|
+
/**
|
|
64
|
+
* Per-top-level-key emission policy.
|
|
65
|
+
* - a CSS unit (`'rem'`, `'px'`, …) — unitless numbers under that key are
|
|
66
|
+
* converted via `value(raw, rootSize, unit)` at EMISSION time, so the
|
|
67
|
+
* custom property already carries its final unit (`8` → `0.5rem`).
|
|
68
|
+
* - `'none'` — the raw value is emitted verbatim (unitless numbers stay
|
|
69
|
+
* unitless: `lineHeight`, `fontWeight`, `zIndex`, ratio scales, …).
|
|
70
|
+
*/
|
|
71
|
+
type CssVarsUnitPolicy = CssVarsUnit | 'none';
|
|
72
|
+
/**
|
|
73
|
+
* Top-level theme keys that are never converted to CSS variables.
|
|
74
|
+
* `breakpoints` + `rootSize` are consumed by JS at build/render time
|
|
75
|
+
* (`@media` queries cannot read `var()`); `__PYREON__` carries the
|
|
76
|
+
* `enrichTheme()` runtime helpers.
|
|
77
|
+
*/
|
|
78
|
+
declare const CSS_VARS_DEFAULT_EXCLUDE: readonly ["breakpoints", "rootSize", "__PYREON__"];
|
|
79
|
+
type DefaultExcluded = (typeof CSS_VARS_DEFAULT_EXCLUDE)[number];
|
|
80
|
+
interface ThemeToCssVarsOptions<Ex extends readonly string[] = typeof CSS_VARS_DEFAULT_EXCLUDE> {
|
|
81
|
+
/** Variable-name prefix: `--<prefix>-<path>`. Default `'px'` (Pyreon). */
|
|
82
|
+
prefix?: string | undefined;
|
|
83
|
+
/** Top-level keys to keep raw (replaces the default list). */
|
|
84
|
+
exclude?: Ex | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Per-top-level-key unit policy overrides, merged over the defaults
|
|
87
|
+
* (`spacing`/`fontSize`/`headingSize`/`elementSize`/`borderRadius` → rem,
|
|
88
|
+
* `borderWidth` → px, everything else `'none'`).
|
|
89
|
+
*/
|
|
90
|
+
units?: Record<string, CssVarsUnitPolicy> | undefined;
|
|
91
|
+
/** Root font size for px→rem conversion. Default `theme.rootSize ?? 16`. */
|
|
92
|
+
rootSize?: number | undefined;
|
|
93
|
+
}
|
|
94
|
+
/** A leaf is tokenized only when it is a non-empty string or a finite number. */
|
|
95
|
+
type VarifyNode<V> = V extends string | number ? string : V extends readonly unknown[] | ((...args: never[]) => unknown) | boolean | null | undefined ? V : V extends object ? { [K in keyof V]: VarifyNode<V[K]> } : V;
|
|
96
|
+
/**
|
|
97
|
+
* The same shape as the input theme with every eligible leaf replaced by
|
|
98
|
+
* a `'var(--px-…)'` reference string. Excluded top-level keys keep their
|
|
99
|
+
* original types.
|
|
100
|
+
*/
|
|
101
|
+
type CssVarsTheme<T, Ex extends string = DefaultExcluded> = { [K in keyof T]: K extends Ex ? T[K] : VarifyNode<T[K]> };
|
|
102
|
+
interface ThemeToCssVarsResult<T, Ex extends string = DefaultExcluded> {
|
|
103
|
+
/** Same-shape theme tree; eligible leaves are `var(--px-…)` strings. */
|
|
104
|
+
vars: CssVarsTheme<T, Ex>;
|
|
105
|
+
/** A ready-to-inject `:root { … }` block (empty string when no vars). */
|
|
106
|
+
css: string;
|
|
107
|
+
/**
|
|
108
|
+
* `varName → emitted value` (units already baked). Consumers that
|
|
109
|
+
* cannot evaluate `var()` (PDF/DOCX export, devtools) resolve here.
|
|
110
|
+
*/
|
|
111
|
+
registry: ReadonlyMap<string, string>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Autogenerate CSS custom properties from a plain theme JSON.
|
|
115
|
+
*
|
|
116
|
+
* Walks the theme and returns:
|
|
117
|
+
* - `vars` — the same-shape tree with every eligible leaf replaced by a
|
|
118
|
+
* `'var(--px-<path>)'` string. Plain strings, so they flow through the
|
|
119
|
+
* entire unistyle value pipeline (`value()` / `values()` / `edge` /
|
|
120
|
+
* `borderRadius` / `styles()` / `makeItResponsive`) untouched.
|
|
121
|
+
* - `css` — the `:root { … }` declaration block to inject once.
|
|
122
|
+
* - `registry` — `varName → emitted value` for consumers that cannot
|
|
123
|
+
* evaluate `var()` (document export, devtools).
|
|
124
|
+
*
|
|
125
|
+
* Units are baked at emission using the SAME `value()` conversion the
|
|
126
|
+
* pipeline applies today: `spacing.small: 8` emits
|
|
127
|
+
* `--px-spacing-small: 0.5rem`, so themes stay authored in pixels and
|
|
128
|
+
* downstream consumers never convert a var. Unitless scales
|
|
129
|
+
* (`lineHeight`, `fontWeight`, `zIndex`, custom ratio keys) emit raw
|
|
130
|
+
* numbers so `calc(var(--a) * var(--b))` multiplication stays valid.
|
|
131
|
+
*
|
|
132
|
+
* Not tokenized (kept raw in `vars`): excluded top-level keys
|
|
133
|
+
* (`breakpoints` / `rootSize` — `@media` queries cannot read `var()`),
|
|
134
|
+
* arrays, functions, booleans, `null`/`undefined`, empty strings and
|
|
135
|
+
* non-finite numbers. Note CSS also forbids `var()` inside `url(…)`, so
|
|
136
|
+
* never tokenize values destined for `backgroundImage`.
|
|
137
|
+
*
|
|
138
|
+
* Pure — performs no injection; pass `css` to your style sink
|
|
139
|
+
* (`createGlobalStyle`, `sheet.injectRules`, a `<style>` tag).
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* const theme = { rootSize: 16, spacing: { small: 8 }, ratio: { medium: 1.5 } }
|
|
143
|
+
* const { vars, css } = themeToCssVars(theme)
|
|
144
|
+
* vars.spacing.small // 'var(--px-spacing-small)'
|
|
145
|
+
* vars.ratio.medium // 'var(--px-ratio-medium)'
|
|
146
|
+
* css // ':root {\n --px-spacing-small: 0.5rem;\n --px-ratio-medium: 1.5;\n}'
|
|
147
|
+
* // proportional sizing is native CSS:
|
|
148
|
+
* const width = `calc(${vars.spacing.small} * ${vars.ratio.medium})`
|
|
149
|
+
*/
|
|
150
|
+
declare function themeToCssVars<T extends object, const Ex extends readonly string[] = typeof CSS_VARS_DEFAULT_EXCLUDE>(theme: T, options?: ThemeToCssVarsOptions<Ex>): ThemeToCssVarsResult<T, Ex[number]>;
|
|
151
|
+
/**
|
|
152
|
+
* Resolve `var(--…)` references in a value back to their raw emitted values
|
|
153
|
+
* using a `themeToCssVars` registry — for consumers that cannot evaluate
|
|
154
|
+
* CSS custom properties (document export to PDF/DOCX/email, devtools,
|
|
155
|
+
* non-CSS render targets).
|
|
156
|
+
*
|
|
157
|
+
* - Strings have every `var(--name)` / `var(--name, fallback)` occurrence
|
|
158
|
+
* substituted from the registry; unknown names fall back to the inline
|
|
159
|
+
* fallback when present, else stay verbatim.
|
|
160
|
+
* - Non-strings pass through untouched.
|
|
161
|
+
* - `calc(…)` expressions are NOT evaluated — only their var() references
|
|
162
|
+
* are inlined (`calc(0.5rem * 1.5)`). Non-CSS targets needing a single
|
|
163
|
+
* number must evaluate the calc themselves or avoid calc-composed values.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* const { registry } = themeToCssVars(theme)
|
|
167
|
+
* resolveCssVarReferences('var(--px-spacing-small)', registry) // '0.5rem'
|
|
168
|
+
* resolveCssVarReferences('calc(var(--px-spacing-small) * 2)', registry) // 'calc(0.5rem * 2)'
|
|
169
|
+
* resolveCssVarReferences('var(--px-missing, 1rem)', registry) // '1rem'
|
|
170
|
+
*/
|
|
171
|
+
declare function resolveCssVarReferences<T>(input: T, registry: ReadonlyMap<string, string>): T;
|
|
172
|
+
//#endregion
|
|
44
173
|
//#region src/responsive/breakpoints.d.ts
|
|
45
174
|
declare const breakpoints$1: {
|
|
46
175
|
readonly rootSize: 16;
|
|
@@ -519,21 +648,5 @@ type PropertyValue = UnitValue | 'auto' | Defaults | `calc(${string | number})`;
|
|
|
519
648
|
type Color = `#${string | number}` | 'currentColor' | 'transparent' | `rgb(${number}, ${number}, ${number})` | `rgb(${number},${number},${number})` | `rgba(${number}, ${number}, ${number}, ${number})` | `rgba(${number},${number},${number},${number})` | `hsl(${number}, ${number}%, ${number}%)` | `hsl(${number},${number}%,${number}%)` | `hsla(${number}, ${number}%, ${number}%, ${number})` | `hsla(${number},${number}%,${number}%,${number})` | BrowserColors | Defaults;
|
|
520
649
|
type BrowserColors = 'black' | 'silver' | 'gray' | 'white' | 'maroon' | 'red' | 'purple' | 'fuchsia' | 'green' | 'lime' | 'olive' | 'yellow' | 'navy' | 'blue' | 'teal' | 'aqua' | 'orange' | 'aliceblue' | 'antiquewhite' | 'aquamarine' | 'azure' | 'beige' | 'bisque' | 'blanchedalmond' | 'blueviolet' | 'brown' | 'burlywood' | 'cadetblue' | 'chartreuse' | 'chocolate' | 'coral' | 'cornflowerblue' | 'cornsilk' | 'crimson' | 'cyan' | 'darkblue' | 'darkcyan' | 'darkgoldenrod' | 'darkgray' | 'darkgreen' | 'darkgrey' | 'darkkhaki' | 'darkmagenta' | 'darkolivegreen' | 'darkorange' | 'darkorchid' | 'darkred' | 'darksalmon' | 'darkseagreen' | 'darkslateblue' | 'darkslategray' | 'darkslategrey' | 'darkturquoise' | 'darkviolet' | 'deeppink' | 'deepskyblue' | 'dimgray' | 'dimgrey' | 'dodgerblue' | 'firebrick' | 'floralwhite' | 'forestgreen' | 'gainsboro' | 'ghostwhite' | 'gold' | 'goldenrod' | 'greenyellow' | 'grey' | 'honeydew' | 'hotpink' | 'indianred' | 'indigo' | 'ivory' | 'khaki' | 'lavender' | 'lavenderblush' | 'lawngreen' | 'lemonchiffon' | 'lightblue' | 'lightcoral' | 'lightcyan' | 'lightgoldenrodyellow' | 'lightgray' | 'lightgreen' | 'lightgrey' | 'lightpink' | 'lightsalmon' | 'lightseagreen' | 'lightskyblue' | 'lightslategray' | 'lightslategrey' | 'lightsteelblue' | 'lightyellow' | 'limegreen' | 'linen' | 'magenta' | 'mediumaquamarine' | 'mediumblue' | 'mediumorchid' | 'mediumpurple' | 'mediumseagreen' | 'mediumslateblue' | 'mediumspringgreen' | 'mediumturquoise' | 'mediumvioletred' | 'midnightblue' | 'mintcream' | 'mistyrose' | 'moccasin' | 'navajowhite' | 'oldlace' | 'olivedrab' | 'orangered' | 'orchid' | 'palegoldenrod' | 'palegreen' | 'paleturquoise' | 'palevioletred' | 'papayawhip' | 'peachpuff' | 'peru' | 'pink' | 'plum' | 'powderblue' | 'rosybrown' | 'royalblue' | 'saddlebrown' | 'salmon' | 'sandybrown' | 'seagreen' | 'seashell' | 'sienna' | 'skyblue' | 'slateblue' | 'slategray' | 'slategrey' | 'snow' | 'springgreen' | 'steelblue' | 'tan' | 'thistle' | 'tomato' | 'turquoise' | 'violet' | 'wheat' | 'whitesmoke' | 'yellowgreen' | 'rebeccapurple';
|
|
521
650
|
//#endregion
|
|
522
|
-
|
|
523
|
-
type Value$1<V> = V extends string ? number : V;
|
|
524
|
-
type Unit<V> = V extends string ? string : undefined;
|
|
525
|
-
type StripUnit = <V extends string | number, UR extends boolean = false>(value: V, unitReturn?: UR) => UR extends true ? [Value$1<V>, Unit<V>] : Value$1<V>;
|
|
526
|
-
declare const stripUnit: StripUnit;
|
|
527
|
-
//#endregion
|
|
528
|
-
//#region src/units/value.d.ts
|
|
529
|
-
type CssUnits$1 = 'px' | 'rem' | '%' | 'em' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc' | 'ch' | 'vh' | 'vw' | 'vmin' | 'vmax';
|
|
530
|
-
type Value = (param: string | number | null | undefined, rootSize?: number, outputUnit?: CssUnits$1) => string | number | null;
|
|
531
|
-
declare const value: Value;
|
|
532
|
-
//#endregion
|
|
533
|
-
//#region src/units/values.d.ts
|
|
534
|
-
type CssUnits = 'px' | 'rem' | '%' | 'em' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc' | 'ch' | 'vh' | 'vw' | 'vmin' | 'vmax';
|
|
535
|
-
type Values = (items: unknown[], rootSize?: number, outputUnit?: CssUnits) => string | number | null;
|
|
536
|
-
declare const values: Values;
|
|
537
|
-
//#endregion
|
|
538
|
-
export { ALIGN_CONTENT_DIRECTION, ALIGN_CONTENT_MAP_X, ALIGN_CONTENT_MAP_Y, type AlignContent, type AlignContentAlignXKeys, type AlignContentAlignYKeys, type AlignContentDirectionKeys, type Breakpoints, type BrowserColors, type Color, type CreateMediaQueries, type Defaults, type ExtendCss, type ITheme, type MakeItResponsive, type MakeItResponsiveStyles, type NormalizeTheme, type PropertyValue, Provider, type PyreonTheme, type SortBreakpoints, type StripUnit, type Styles, type Theme as StylesTheme, type TProvider, type TransformTheme, type UnitValue, type Value, type Values, alignContent, breakpoints$1 as breakpoints, context, createMediaQueries, enrichTheme, extendCss, makeItResponsive, normalizeTheme, sortBreakpoints, stripUnit, styles$1 as styles, transformTheme, value, values };
|
|
651
|
+
export { ALIGN_CONTENT_DIRECTION, ALIGN_CONTENT_MAP_X, ALIGN_CONTENT_MAP_Y, type AlignContent, type AlignContentAlignXKeys, type AlignContentAlignYKeys, type AlignContentDirectionKeys, type Breakpoints, type BrowserColors, CSS_VARS_DEFAULT_EXCLUDE, type Color, type CreateMediaQueries, type CssVarsTheme, type CssVarsUnit, type CssVarsUnitPolicy, type Defaults, type ExtendCss, type ITheme, type MakeItResponsive, type MakeItResponsiveStyles, type NormalizeTheme, type PropertyValue, Provider, type PyreonTheme, type SortBreakpoints, type StripUnit, type Styles, type Theme as StylesTheme, type TProvider, type ThemeToCssVarsOptions, type ThemeToCssVarsResult, type TransformTheme, type UnitValue, type Value, type Values, alignContent, breakpoints$1 as breakpoints, context, createMediaQueries, enrichTheme, extendCss, makeItResponsive, normalizeTheme, resolveCssVarReferences, sortBreakpoints, stripUnit, styles$1 as styles, themeToCssVars, transformTheme, value, values };
|
|
539
652
|
//# sourceMappingURL=index2.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/enrichTheme.ts","../../src/context.tsx","../../src/
|
|
1
|
+
{"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/enrichTheme.ts","../../src/context.tsx","../../src/units/stripUnit.ts","../../src/units/value.ts","../../src/units/values.ts","../../src/cssVariables.ts","../../src/responsive/breakpoints.ts","../../src/responsive/createMediaQueries.ts","../../src/responsive/sortBreakpoints.ts","../../src/responsive/makeItResponsive.ts","../../src/responsive/normalizeTheme.ts","../../src/responsive/transformTheme.ts","../../src/styles/alignContent.ts","../../src/styles/extendCss.ts","../../src/styles/styles/types.ts","../../src/styles/styles/index.ts","../../src/types.ts"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -459,6 +459,281 @@ function Provider(props) {
|
|
|
459
459
|
}
|
|
460
460
|
nativeCompat(Provider);
|
|
461
461
|
|
|
462
|
+
//#endregion
|
|
463
|
+
//#region src/styles/styles/camelToKebab.ts
|
|
464
|
+
const camelToKebab = (s) => s.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
465
|
+
|
|
466
|
+
//#endregion
|
|
467
|
+
//#region src/units/stripUnit.ts
|
|
468
|
+
const stripUnit = ((value, unitReturn) => {
|
|
469
|
+
const cssRegex = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;
|
|
470
|
+
if (typeof value !== "string") return unitReturn ? [value, void 0] : value;
|
|
471
|
+
const matchedValue = value.match(cssRegex);
|
|
472
|
+
if (unitReturn) {
|
|
473
|
+
if (matchedValue) return [parseFloat(value), matchedValue[2]];
|
|
474
|
+
return [value, void 0];
|
|
475
|
+
}
|
|
476
|
+
if (matchedValue) return parseFloat(value);
|
|
477
|
+
return value;
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
//#endregion
|
|
481
|
+
//#region src/units/value.ts
|
|
482
|
+
const isNotValue = (val) => !val && val !== 0;
|
|
483
|
+
const value = (param, rootSize = 16, outputUnit = "rem") => {
|
|
484
|
+
if (isNotValue(param)) return null;
|
|
485
|
+
const p = param;
|
|
486
|
+
const [val, unit] = stripUnit(p, true);
|
|
487
|
+
/* v8 ignore next — defensive isNotValue guard; covered by earlier checks */
|
|
488
|
+
if (isNotValue(val)) return null;
|
|
489
|
+
if (val === 0 || typeof val === "string") return p;
|
|
490
|
+
const canConvert = rootSize && !Number.isNaN(val);
|
|
491
|
+
if (canConvert && !unit && outputUnit === "px") return `${val}${outputUnit}`;
|
|
492
|
+
if (canConvert && !unit) return `${val / rootSize}rem`;
|
|
493
|
+
if (canConvert && unit === "px" && outputUnit === "rem") return `${val / rootSize}rem`;
|
|
494
|
+
/* v8 ignore next — defensive unit fallback */
|
|
495
|
+
if (unit) return p;
|
|
496
|
+
return `${val}${outputUnit}`;
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
//#endregion
|
|
500
|
+
//#region src/units/values.ts
|
|
501
|
+
const getValueOf = (...args) => args.find((v) => typeof v !== "undefined" && v !== null);
|
|
502
|
+
const values = (items, rootSize, outputUnit) => {
|
|
503
|
+
const param = getValueOf(...items);
|
|
504
|
+
if (Array.isArray(param)) return param.map((item) => value(item, rootSize, outputUnit)).join(" ");
|
|
505
|
+
return value(param, rootSize, outputUnit);
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region src/cssVariables.ts
|
|
510
|
+
/**
|
|
511
|
+
* Top-level theme keys that are never converted to CSS variables.
|
|
512
|
+
* `breakpoints` + `rootSize` are consumed by JS at build/render time
|
|
513
|
+
* (`@media` queries cannot read `var()`); `__PYREON__` carries the
|
|
514
|
+
* `enrichTheme()` runtime helpers.
|
|
515
|
+
*/
|
|
516
|
+
const CSS_VARS_DEFAULT_EXCLUDE = [
|
|
517
|
+
"breakpoints",
|
|
518
|
+
"rootSize",
|
|
519
|
+
"__PYREON__"
|
|
520
|
+
];
|
|
521
|
+
/**
|
|
522
|
+
* Default emission units for the conventional Pyreon theme keys —
|
|
523
|
+
* mirrors how the styles pipeline consumes each key today (`spacing`
|
|
524
|
+
* flows through `edge()`/`calc()` as rem; `borderWidth` through the
|
|
525
|
+
* edge shorthand as px). Keys not listed here default to `'none'`.
|
|
526
|
+
*/
|
|
527
|
+
const DEFAULT_UNITS = {
|
|
528
|
+
spacing: "rem",
|
|
529
|
+
fontSize: "rem",
|
|
530
|
+
headingSize: "rem",
|
|
531
|
+
elementSize: "rem",
|
|
532
|
+
borderRadius: "rem",
|
|
533
|
+
borderWidth: "px"
|
|
534
|
+
};
|
|
535
|
+
const DEFAULT_PREFIX = "px";
|
|
536
|
+
const DEFAULT_ROOT_SIZE = 16;
|
|
537
|
+
const sanitizeSegment = (seg) => camelToKebab(seg).toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+/, "");
|
|
538
|
+
const isTokenizableLeaf = (v) => typeof v === "string" && v !== "" || typeof v === "number" && Number.isFinite(v);
|
|
539
|
+
const isWalkableObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
540
|
+
/** Emit a leaf value with its unit baked (strings with units pass through `value()` untouched). */
|
|
541
|
+
const emitLeaf = (raw, policy, rootSize) => {
|
|
542
|
+
if (policy === "none") return String(raw);
|
|
543
|
+
const converted = value(raw, rootSize, policy);
|
|
544
|
+
/* v8 ignore next — value() only returns null for empty input, which isTokenizableLeaf excludes */
|
|
545
|
+
return converted == null ? String(raw) : String(converted);
|
|
546
|
+
};
|
|
547
|
+
const _cache = /* @__PURE__ */ new WeakMap();
|
|
548
|
+
const optionsSignature = (prefix, exclude, units, rootSize) => JSON.stringify([
|
|
549
|
+
prefix,
|
|
550
|
+
[...exclude].sort(),
|
|
551
|
+
Object.keys(units).sort().map((k) => [k, units[k]]),
|
|
552
|
+
rootSize
|
|
553
|
+
]);
|
|
554
|
+
/**
|
|
555
|
+
* Autogenerate CSS custom properties from a plain theme JSON.
|
|
556
|
+
*
|
|
557
|
+
* Walks the theme and returns:
|
|
558
|
+
* - `vars` — the same-shape tree with every eligible leaf replaced by a
|
|
559
|
+
* `'var(--px-<path>)'` string. Plain strings, so they flow through the
|
|
560
|
+
* entire unistyle value pipeline (`value()` / `values()` / `edge` /
|
|
561
|
+
* `borderRadius` / `styles()` / `makeItResponsive`) untouched.
|
|
562
|
+
* - `css` — the `:root { … }` declaration block to inject once.
|
|
563
|
+
* - `registry` — `varName → emitted value` for consumers that cannot
|
|
564
|
+
* evaluate `var()` (document export, devtools).
|
|
565
|
+
*
|
|
566
|
+
* Units are baked at emission using the SAME `value()` conversion the
|
|
567
|
+
* pipeline applies today: `spacing.small: 8` emits
|
|
568
|
+
* `--px-spacing-small: 0.5rem`, so themes stay authored in pixels and
|
|
569
|
+
* downstream consumers never convert a var. Unitless scales
|
|
570
|
+
* (`lineHeight`, `fontWeight`, `zIndex`, custom ratio keys) emit raw
|
|
571
|
+
* numbers so `calc(var(--a) * var(--b))` multiplication stays valid.
|
|
572
|
+
*
|
|
573
|
+
* Not tokenized (kept raw in `vars`): excluded top-level keys
|
|
574
|
+
* (`breakpoints` / `rootSize` — `@media` queries cannot read `var()`),
|
|
575
|
+
* arrays, functions, booleans, `null`/`undefined`, empty strings and
|
|
576
|
+
* non-finite numbers. Note CSS also forbids `var()` inside `url(…)`, so
|
|
577
|
+
* never tokenize values destined for `backgroundImage`.
|
|
578
|
+
*
|
|
579
|
+
* Pure — performs no injection; pass `css` to your style sink
|
|
580
|
+
* (`createGlobalStyle`, `sheet.injectRules`, a `<style>` tag).
|
|
581
|
+
*
|
|
582
|
+
* @example
|
|
583
|
+
* const theme = { rootSize: 16, spacing: { small: 8 }, ratio: { medium: 1.5 } }
|
|
584
|
+
* const { vars, css } = themeToCssVars(theme)
|
|
585
|
+
* vars.spacing.small // 'var(--px-spacing-small)'
|
|
586
|
+
* vars.ratio.medium // 'var(--px-ratio-medium)'
|
|
587
|
+
* css // ':root {\n --px-spacing-small: 0.5rem;\n --px-ratio-medium: 1.5;\n}'
|
|
588
|
+
* // proportional sizing is native CSS:
|
|
589
|
+
* const width = `calc(${vars.spacing.small} * ${vars.ratio.medium})`
|
|
590
|
+
*/
|
|
591
|
+
function themeToCssVars(theme, options) {
|
|
592
|
+
const prefix = options?.prefix ?? DEFAULT_PREFIX;
|
|
593
|
+
const exclude = options?.exclude ?? CSS_VARS_DEFAULT_EXCLUDE;
|
|
594
|
+
const units = {
|
|
595
|
+
...DEFAULT_UNITS,
|
|
596
|
+
...options?.units
|
|
597
|
+
};
|
|
598
|
+
const themeRootSize = theme.rootSize;
|
|
599
|
+
const rootSize = options?.rootSize ?? (typeof themeRootSize === "number" ? themeRootSize : DEFAULT_ROOT_SIZE);
|
|
600
|
+
const optionsKey = optionsSignature(prefix, exclude, units, rootSize);
|
|
601
|
+
const cached = _cache.get(theme);
|
|
602
|
+
if (cached) {
|
|
603
|
+
const hit = cached.find((e) => e.optionsKey === optionsKey);
|
|
604
|
+
if (hit) return hit.result;
|
|
605
|
+
}
|
|
606
|
+
const excludeSet = new Set(exclude);
|
|
607
|
+
const registry = /* @__PURE__ */ new Map();
|
|
608
|
+
const sources = /* @__PURE__ */ new Map();
|
|
609
|
+
const walk = (node, out, segs, policy) => {
|
|
610
|
+
for (const key of Object.keys(node)) {
|
|
611
|
+
const v = node[key];
|
|
612
|
+
const isTop = segs.length === 0;
|
|
613
|
+
if (isTop && excludeSet.has(key)) {
|
|
614
|
+
out[key] = v;
|
|
615
|
+
continue;
|
|
616
|
+
}
|
|
617
|
+
const keyPolicy = isTop ? units[key] ?? "none" : policy;
|
|
618
|
+
if (isWalkableObject(v)) {
|
|
619
|
+
const child = {};
|
|
620
|
+
out[key] = child;
|
|
621
|
+
walk(v, child, [...segs, key], keyPolicy);
|
|
622
|
+
continue;
|
|
623
|
+
}
|
|
624
|
+
if (!isTokenizableLeaf(v)) {
|
|
625
|
+
out[key] = v;
|
|
626
|
+
continue;
|
|
627
|
+
}
|
|
628
|
+
const path = [...segs, key];
|
|
629
|
+
const varName = `--${prefix}-${path.map(sanitizeSegment).join("-")}`;
|
|
630
|
+
const pathStr = path.join(".");
|
|
631
|
+
const existingPath = sources.get(varName);
|
|
632
|
+
if (existingPath !== void 0 && existingPath !== pathStr) throw new Error(`[Pyreon] themeToCssVars: variable name collision — '${varName}' is produced by both '${existingPath}' and '${pathStr}' (kebab-case normalization collapsed them). Rename one of the theme keys.`);
|
|
633
|
+
sources.set(varName, pathStr);
|
|
634
|
+
registry.set(varName, emitLeaf(v, keyPolicy, rootSize));
|
|
635
|
+
out[key] = `var(${varName})`;
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
const vars = {};
|
|
639
|
+
walk(theme, vars, [], "none");
|
|
640
|
+
const result = {
|
|
641
|
+
vars,
|
|
642
|
+
css: registry.size === 0 ? "" : `:root {\n${[...registry.entries()].map(([n, v]) => ` ${n}: ${v};`).join("\n")}\n}`,
|
|
643
|
+
registry
|
|
644
|
+
};
|
|
645
|
+
const entries = cached ?? [];
|
|
646
|
+
entries.push({
|
|
647
|
+
optionsKey,
|
|
648
|
+
result
|
|
649
|
+
});
|
|
650
|
+
if (!cached) _cache.set(theme, entries);
|
|
651
|
+
return result;
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Resolve `var(--…)` references in a value back to their raw emitted values
|
|
655
|
+
* using a `themeToCssVars` registry — for consumers that cannot evaluate
|
|
656
|
+
* CSS custom properties (document export to PDF/DOCX/email, devtools,
|
|
657
|
+
* non-CSS render targets).
|
|
658
|
+
*
|
|
659
|
+
* - Strings have every `var(--name)` / `var(--name, fallback)` occurrence
|
|
660
|
+
* substituted from the registry; unknown names fall back to the inline
|
|
661
|
+
* fallback when present, else stay verbatim.
|
|
662
|
+
* - Non-strings pass through untouched.
|
|
663
|
+
* - `calc(…)` expressions are NOT evaluated — only their var() references
|
|
664
|
+
* are inlined (`calc(0.5rem * 1.5)`). Non-CSS targets needing a single
|
|
665
|
+
* number must evaluate the calc themselves or avoid calc-composed values.
|
|
666
|
+
*
|
|
667
|
+
* @example
|
|
668
|
+
* const { registry } = themeToCssVars(theme)
|
|
669
|
+
* resolveCssVarReferences('var(--px-spacing-small)', registry) // '0.5rem'
|
|
670
|
+
* resolveCssVarReferences('calc(var(--px-spacing-small) * 2)', registry) // 'calc(0.5rem * 2)'
|
|
671
|
+
* resolveCssVarReferences('var(--px-missing, 1rem)', registry) // '1rem'
|
|
672
|
+
*/
|
|
673
|
+
function resolveCssVarReferences(input, registry) {
|
|
674
|
+
if (typeof input !== "string") return input;
|
|
675
|
+
if (input.indexOf("var(") === -1) return input;
|
|
676
|
+
let out = input;
|
|
677
|
+
for (let pass = 0; pass < 10; pass++) {
|
|
678
|
+
const next = resolveVarPass(out, registry);
|
|
679
|
+
if (next === out) break;
|
|
680
|
+
out = next;
|
|
681
|
+
}
|
|
682
|
+
return out;
|
|
683
|
+
}
|
|
684
|
+
const isNameChar = (c) => c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c >= "0" && c <= "9" || c === "-";
|
|
685
|
+
/**
|
|
686
|
+
* ONE left-to-right resolution pass over `s` — a LINEAR character scan (no
|
|
687
|
+
* regex on the input, so no polynomial-ReDoS surface; mirrors the `font.ts`
|
|
688
|
+
* `splitSubsetBlocks` precedent). Finds each `var(name[, fallback])`, reading
|
|
689
|
+
* the fallback up to its matching close paren with paren-depth tracking
|
|
690
|
+
* (handles `var(--x, calc(…))`), and replaces it with the registry value,
|
|
691
|
+
* else the fallback, else leaves it verbatim and advances past it.
|
|
692
|
+
*/
|
|
693
|
+
function resolveVarPass(s, registry) {
|
|
694
|
+
let out = "";
|
|
695
|
+
let i = 0;
|
|
696
|
+
while (i < s.length) {
|
|
697
|
+
const idx = s.indexOf("var(", i);
|
|
698
|
+
if (idx === -1) {
|
|
699
|
+
out += s.slice(i);
|
|
700
|
+
break;
|
|
701
|
+
}
|
|
702
|
+
out += s.slice(i, idx);
|
|
703
|
+
let j = idx + 4;
|
|
704
|
+
while (j < s.length && s[j] === " ") j++;
|
|
705
|
+
const nameStart = j;
|
|
706
|
+
while (j < s.length && isNameChar(s[j])) j++;
|
|
707
|
+
const name = s.slice(nameStart, j);
|
|
708
|
+
while (j < s.length && s[j] === " ") j++;
|
|
709
|
+
let fallback;
|
|
710
|
+
if (s[j] === ",") {
|
|
711
|
+
j++;
|
|
712
|
+
let depth = 0;
|
|
713
|
+
const fbStart = j;
|
|
714
|
+
while (j < s.length) {
|
|
715
|
+
const c = s[j];
|
|
716
|
+
if (c === "(") depth++;
|
|
717
|
+
else if (c === ")") {
|
|
718
|
+
if (depth === 0) break;
|
|
719
|
+
depth--;
|
|
720
|
+
}
|
|
721
|
+
j++;
|
|
722
|
+
}
|
|
723
|
+
fallback = s.slice(fbStart, j).trim();
|
|
724
|
+
}
|
|
725
|
+
if (s[j] !== ")") {
|
|
726
|
+
out += "var(";
|
|
727
|
+
i = idx + 4;
|
|
728
|
+
continue;
|
|
729
|
+
}
|
|
730
|
+
const end = j + 1;
|
|
731
|
+
out += registry.get(name) ?? fallback ?? s.slice(idx, end);
|
|
732
|
+
i = end;
|
|
733
|
+
}
|
|
734
|
+
return out;
|
|
735
|
+
}
|
|
736
|
+
|
|
462
737
|
//#endregion
|
|
463
738
|
//#region src/styles/alignContent.ts
|
|
464
739
|
const ALIGN_CONTENT_MAP_SHARED = {
|
|
@@ -509,48 +784,6 @@ const extendCss = (styles) => {
|
|
|
509
784
|
return styles;
|
|
510
785
|
};
|
|
511
786
|
|
|
512
|
-
//#endregion
|
|
513
|
-
//#region src/units/stripUnit.ts
|
|
514
|
-
const stripUnit = ((value, unitReturn) => {
|
|
515
|
-
const cssRegex = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;
|
|
516
|
-
if (typeof value !== "string") return unitReturn ? [value, void 0] : value;
|
|
517
|
-
const matchedValue = value.match(cssRegex);
|
|
518
|
-
if (unitReturn) {
|
|
519
|
-
if (matchedValue) return [parseFloat(value), matchedValue[2]];
|
|
520
|
-
return [value, void 0];
|
|
521
|
-
}
|
|
522
|
-
if (matchedValue) return parseFloat(value);
|
|
523
|
-
return value;
|
|
524
|
-
});
|
|
525
|
-
|
|
526
|
-
//#endregion
|
|
527
|
-
//#region src/units/value.ts
|
|
528
|
-
const isNotValue = (val) => !val && val !== 0;
|
|
529
|
-
const value = (param, rootSize = 16, outputUnit = "rem") => {
|
|
530
|
-
if (isNotValue(param)) return null;
|
|
531
|
-
const p = param;
|
|
532
|
-
const [val, unit] = stripUnit(p, true);
|
|
533
|
-
/* v8 ignore next — defensive isNotValue guard; covered by earlier checks */
|
|
534
|
-
if (isNotValue(val)) return null;
|
|
535
|
-
if (val === 0 || typeof val === "string") return p;
|
|
536
|
-
const canConvert = rootSize && !Number.isNaN(val);
|
|
537
|
-
if (canConvert && !unit && outputUnit === "px") return `${val}${outputUnit}`;
|
|
538
|
-
if (canConvert && !unit) return `${val / rootSize}rem`;
|
|
539
|
-
if (canConvert && unit === "px" && outputUnit === "rem") return `${val / rootSize}rem`;
|
|
540
|
-
/* v8 ignore next — defensive unit fallback */
|
|
541
|
-
if (unit) return p;
|
|
542
|
-
return `${val}${outputUnit}`;
|
|
543
|
-
};
|
|
544
|
-
|
|
545
|
-
//#endregion
|
|
546
|
-
//#region src/units/values.ts
|
|
547
|
-
const getValueOf = (...args) => args.find((v) => typeof v !== "undefined" && v !== null);
|
|
548
|
-
const values = (items, rootSize, outputUnit) => {
|
|
549
|
-
const param = getValueOf(...items);
|
|
550
|
-
if (Array.isArray(param)) return param.map((item) => value(item, rootSize, outputUnit)).join(" ");
|
|
551
|
-
return value(param, rootSize, outputUnit);
|
|
552
|
-
};
|
|
553
|
-
|
|
554
787
|
//#endregion
|
|
555
788
|
//#region src/styles/shorthands/borderRadius.ts
|
|
556
789
|
const isValidValue$1 = (v) => !!v || v === 0;
|
|
@@ -2184,5 +2417,5 @@ const styles = ({ theme: t, css, rootSize }) => {
|
|
|
2184
2417
|
};
|
|
2185
2418
|
|
|
2186
2419
|
//#endregion
|
|
2187
|
-
export { ALIGN_CONTENT_DIRECTION, ALIGN_CONTENT_MAP_X, ALIGN_CONTENT_MAP_Y, Provider, alignContent, breakpoints, context, createMediaQueries, enrichTheme, extendCss, makeItResponsive, normalizeTheme, sortBreakpoints, stripUnit, styles, transformTheme, value, values };
|
|
2420
|
+
export { ALIGN_CONTENT_DIRECTION, ALIGN_CONTENT_MAP_X, ALIGN_CONTENT_MAP_Y, CSS_VARS_DEFAULT_EXCLUDE, Provider, alignContent, breakpoints, context, createMediaQueries, enrichTheme, extendCss, makeItResponsive, normalizeTheme, resolveCssVarReferences, sortBreakpoints, stripUnit, styles, themeToCssVars, transformTheme, value, values };
|
|
2188
2421
|
//# sourceMappingURL=index.js.map
|
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/optimizeBreakpointDeltas.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 // Direct for-in + mutation. The prior `Object.keys.reduce` allocated the\n // keys array and paid reduce-callback overhead per iteration. Hot at\n // PyreonUI mount and on any theme/rootSize change. Ported from\n // vitus-labs `e573e6c4`; measured upstream: +15.9%.\n const acc: Record<string, (...args: [TemplateStringsArray, ...any[]]) => string> = {}\n for (const key in breakpoints) {\n const breakpointValue = breakpoints[key]\n if (breakpointValue === 0) {\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css(...args)\n /* v8 ignore next — defensive null-breakpoint guard; type-system constrains values */\n } else if (breakpointValue != null) {\n const emSize = breakpointValue / rootSize\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}) 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\n// for-in early-exit avoids the `Object.values(props)` array allocation\n// that the prior `.some()` paid on every theme normalization decision.\n// Fires once per per-breakpoint theme transform; the early `return true`\n// is hit by any responsive token, so most calls bail out quickly. Ported\n// from vitus-labs `e573e6c4`; measured upstream: +20.3%.\nconst shouldNormalize = (props: Record<string, any>) => {\n for (const key in props) {\n const item = props[key]\n if (typeof item === 'object' || Array.isArray(item)) return true\n }\n return false\n}\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 // for-in instead of Object.entries.forEach — avoids the entries-tuple\n // array allocation per theme normalization (one outer alloc + one inner\n // [k,v] tuple per property dropped). Ported from vitus-labs `e573e6c4`.\n for (const key in theme) {\n const value = theme[key]\n if (value == null) continue\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","/**\n * Mobile-first cascade optimizer.\n *\n * Given an ordered array of CSS strings (one per breakpoint, smallest first),\n * returns a parallel array where each non-base breakpoint contains only the\n * declarations that DIFFER from the cumulative cascade so far. This relies on\n * mobile-first `@media (min-width: …)` semantics: properties set at smaller\n * breakpoints inherit at larger ones, so re-emitting an unchanged property is\n * pure byte waste.\n *\n * Example:\n * [\"color: red; padding: 0;\", \"color: red; padding: 1rem;\"]\n * → [\"color: red; padding: 0;\", \"padding: 1rem;\"]\n *\n * Top-level declarations are diffed by `prop:value`. Selector blocks\n * (`&:hover { … }`, `@supports { … }`) are treated as opaque and deduped by\n * exact text. Anything inside parens or quoted strings is skipped over so\n * `linear-gradient(red 0%, blue 100%)` and `content: \";\"` parse correctly.\n *\n * Limitations:\n * - shorthand/longhand interaction is not modeled. If breakpoint A sets\n * `padding: 1rem` and breakpoint B sets `padding-top: 0`, both are kept\n * (they have different `prop` keys). If A sets `padding-top: 1rem` and B\n * sets `padding: 1rem`, B's `padding` is emitted because the cascade map\n * has no entry for `padding`. This is correct: B's shorthand RESETS sides\n * A didn't touch, so dropping it would change behaviour.\n * - Nested blocks are deduped only by exact textual match. Two equivalent\n * blocks with different whitespace would both be emitted.\n */\n\ninterface DeclEntry {\n kind: 'decl'\n prop: string\n value: string\n raw: string // canonical \"prop: value;\" form\n}\n\ninterface BlockEntry {\n kind: 'block'\n raw: string // entire \"selector { body }\" or stray block\n}\n\ntype Entry = DeclEntry | BlockEntry\n\n/** Parse a CSS string into top-level declarations and opaque blocks. */\nconst parse = (css: string): Entry[] => {\n const entries: Entry[] = []\n const len = css.length\n\n let depth = 0\n let parenDepth = 0\n let quote = 0 // charCode of active quote (0 if none)\n let segmentStart = 0\n\n const pushSegment = (rawSegment: string) => {\n const trimmed = rawSegment.trim()\n /* v8 ignore next — defensive empty-segment guard */\n if (!trimmed) return\n // pushSegment is only reached for segments that ended with a top-level\n // \";\" — full \"selector { ... }\" blocks are captured separately by the\n // brace walker, so this path always sees declarations (or malformed\n // declaration-shaped fragments).\n /* v8 ignore next — defensive trailing-semicolon strip */\n const text = trimmed.endsWith(';') ? trimmed.slice(0, -1) : trimmed\n const colonIdx = text.indexOf(':')\n /* v8 ignore next 4 — defensive malformed-declaration fallback */\n if (colonIdx <= 0) {\n // No \":\" or starts with \":\" → not a parseable declaration; keep raw\n entries.push({ kind: 'block', raw: `${text};` })\n return\n }\n const prop = text.slice(0, colonIdx).trim()\n const value = text.slice(colonIdx + 1).trim()\n /* v8 ignore next 4 — defensive empty-prop-or-value fallback */\n if (!prop || !value) {\n entries.push({ kind: 'block', raw: `${text};` })\n return\n }\n entries.push({\n kind: 'decl',\n prop,\n value,\n raw: `${prop}: ${value};`,\n })\n }\n\n for (let i = 0; i < len; i++) {\n const code = css.charCodeAt(i)\n\n // Inside a quoted string — skip until matching quote (ignoring escapes)\n if (quote !== 0) {\n if (code === 92 /* \\ */) {\n i++ // skip the next character\n } else if (code === quote) {\n quote = 0\n }\n continue\n }\n\n // Quote start\n if (code === 34 /* \" */ || code === 39 /* ' */) {\n quote = code\n continue\n }\n\n // Parens — content (e.g. linear-gradient args) shouldn't be interpreted\n if (code === 40 /* ( */) {\n parenDepth++\n continue\n }\n if (code === 41 /* ) */) {\n /* v8 ignore next — defensive paren-depth guard */\n if (parenDepth > 0) parenDepth--\n continue\n }\n /* v8 ignore next — defensive paren-content skip */\n if (parenDepth > 0) continue\n\n if (code === 123 /* { */) {\n depth++\n continue\n }\n if (code === 125 /* } */) {\n depth--\n if (depth === 0) {\n // End of a top-level block — capture from segmentStart..i (inclusive)\n const raw = css.slice(segmentStart, i + 1).trim()\n if (raw) entries.push({ kind: 'block', raw })\n segmentStart = i + 1\n }\n continue\n }\n\n if (depth === 0 && code === 59 /* ; */) {\n pushSegment(css.slice(segmentStart, i))\n segmentStart = i + 1\n }\n }\n\n // Trailing segment (no terminating semicolon)\n /* v8 ignore start — defensive trailing-segment + unbalanced-braces handling; CSS input is engine-emitted and balanced */\n if (segmentStart < len) {\n const trailing = css.slice(segmentStart).trim()\n if (trailing) {\n if (depth > 0) {\n // Unbalanced braces — keep the rest as opaque so output isn't lossy\n entries.push({ kind: 'block', raw: trailing })\n } else {\n pushSegment(trailing)\n }\n }\n }\n /* v8 ignore stop */\n\n return entries\n}\n\n/**\n * Apply the mobile-first cascade diff. The first entry passes through\n * unchanged; subsequent entries are pruned to the delta vs. the running\n * cascade (declarations by prop, blocks by exact text match).\n */\nexport const optimizeBreakpointDeltas = (cssStrings: string[]): string[] => {\n if (cssStrings.length <= 1) return cssStrings\n\n const cascadeDecl = new Map<string, string>()\n const cascadeBlocks = new Set<string>()\n const out: string[] = new Array(cssStrings.length)\n\n for (let i = 0; i < cssStrings.length; i++) {\n const css = cssStrings[i]\n if (!css) {\n out[i] = ''\n continue\n }\n\n const entries = parse(css)\n const kept: string[] = []\n\n for (const e of entries) {\n if (e.kind === 'decl') {\n if (cascadeDecl.get(e.prop) !== e.value) {\n kept.push(e.raw)\n cascadeDecl.set(e.prop, e.value)\n }\n } else if (!cascadeBlocks.has(e.raw)) {\n kept.push(e.raw)\n cascadeBlocks.add(e.raw)\n }\n }\n\n out[i] = kept.join(' ')\n }\n\n return out\n}\n\nexport default optimizeBreakpointDeltas\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 /* v8 ignore next 2 — defensive identity + null guards; both arms structurally covered */\n if (a === b) return true\n if (!a || !b) return false\n // for-in + counting avoids the two `Object.keys` array allocations the\n // prior implementation paid on every breakpoint optimization step.\n // Ported from vitus-labs `e573e6c4`; measured upstream: +4.0% on the\n // EQUAL hot path (the common case in steady-state renders).\n let aCount = 0\n for (const key in a) {\n aCount++\n if (a[key] !== b[key]) return false\n }\n let bCount = 0\n for (const _ in b) bCount++\n return aCount === bCount\n}\n\n/**\n * Removes breakpoints whose full-object styles are identical to the\n * previous one. Simple all-or-nothing: if ANY property differs from\n * the previous breakpoint, emit the ENTIRE current breakpoint.\n *\n * This matches the reference implementation (vitus-labs/ui-system) and\n * the original monorepo-migration version (commit 2b7c5876). Previous\n * \"optimizations\" (PRs #159, #208) that tried per-property diffing\n * broke responsive styles in subtle ways — shorthand/longhand CSS\n * property interactions, properties that depend on each other,\n * properties that need to be emitted together to cascade correctly.\n *\n * The all-or-nothing approach is the correct level of deduplication —\n * we skip the breakpoint when it's entirely redundant, and let the\n * browser's CSS cascade handle the rest.\n */\nconst optimizeTheme: OptimizeTheme = ({ theme, breakpoints }) => {\n const result: Record<string, Record<string, unknown>> = {}\n\n for (let i = 0; i < breakpoints.length; i++) {\n const key = breakpoints[i] as string\n const previousBreakpoint = breakpoints[i - 1] as string\n const current = theme[key]\n if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) {\n result[key] = current\n }\n }\n\n return result\n}\n\nexport default optimizeTheme\n","import { isEmpty, set } from '@pyreon/ui-core'\n\nconst removeUnexpectedKeys = (obj: Record<string, unknown>, keys: string[]) => {\n const result: Record<string, unknown> = {}\n keys.forEach((bp) => {\n const value = obj[bp]\n if (value) {\n result[bp] = value\n }\n })\n return result\n}\n\nexport type TransformTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => any\n\nconst transformTheme: TransformTheme = ({ theme, breakpoints }) => {\n const result = {}\n\n if (isEmpty(theme) || isEmpty(breakpoints)) return result\n\n // for-in + nested for-in avoids the two `Object.entries(...)` array\n // allocations (outer + inner per object value) the prior forEach paid.\n // Same for `value.forEach((child, i) => ...)` → indexed for-loop.\n // Ported from vitus-labs `e573e6c4`.\n for (const key in theme) {\n const value = theme[key]\n if (Array.isArray(value) && value.length > 0) {\n for (let i = 0; i < value.length; i++) {\n const indexBreakpoint = breakpoints[i]\n /* v8 ignore next — defensive null guard; i is bounded by value.length */\n if (indexBreakpoint == null) continue\n set(result, [indexBreakpoint, key], value[i])\n }\n } else if (typeof value === 'object' && value !== null) {\n const obj = value as Record<string, unknown>\n for (const childKey in obj) {\n set(result, [childKey, key], obj[childKey])\n }\n } else if (value != null) {\n const firstBreakpoint = breakpoints[0]\n /* v8 ignore next — defensive null guard; breakpoints array always populated */\n if (firstBreakpoint == null) continue\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 optimizeBreakpointDeltas from './optimizeBreakpointDeltas'\nimport optimizeTheme from './optimizeTheme'\nimport type sortBreakpoints from './sortBreakpoints'\nimport transformTheme from './transformTheme'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\n/**\n * Coerce a styles-callback result to a CSS string for delta optimization.\n * Returns null when the engine's result type can't be stringified cleanly\n * (e.g. styled-components / Emotion objects whose default toString() yields\n * \"[object Object]\") — caller falls back to the unoptimized path.\n *\n * Styler's CSSResult provides toString() that resolves with empty props,\n * so any function interpolation that needs render-time props must come from\n * the styles-callback closure (theme is destructured at call time, not\n * resolved later). Verified across the project's styles callbacks.\n */\nconst stringifyResult = (result: unknown): string | null => {\n if (result == null) return ''\n if (typeof result === 'string') return result\n // CSSResult duck-type fast path: has `strings` (TemplateStringsArray) and\n // `values`. We know its toString() resolves to clean CSS, so we can skip\n // the \"[object Foo]\" validation for the common path.\n if (typeof result === 'object' && 'strings' in result && 'values' in result) {\n return String(result)\n }\n // Foreign engine result — coerce and validate. Default\n // Object.prototype.toString → \"[object Foo]\" → bail out so caller can fall\n // back to the unoptimized path.\n const text = String(result)\n return text.includes('[object ') ? null : text\n}\n\ntype CustomTheme = Record<string, unknown>\n\ntype Theme = Partial<{\n rootSize: number\n breakpoints: Record<string, number>\n __PYREON__: Partial<{\n media: ReturnType<typeof createMediaQueries>\n sortedBreakpoints: ReturnType<typeof sortBreakpoints>\n }>\n}> &\n CustomTheme\n\n// Default tightened from `any` to `Partial<Record<string, unknown>>` so\n// un-typed callers (`MakeItResponsiveStyles` with no generic) get strict\n// `unknown` per key — forcing narrowing at the access site. Every shipped\n// caller now passes an explicit theme shape:\n// - coolgrid Container/Row/Col: `Pick<StyledTypes, 'width' | 'extraStyles'>`\n// - elements Wrapper/Content/Text: `ThemeProps` (per helper)\n// The constraint stays `Partial<Record<string, any>>` (not `unknown`) so\n// strict generic arguments with named keys (e.g. `Partial<{ direction:\n// ContentDirection; ... }>`) continue to satisfy it.\nexport type MakeItResponsiveStyles<\n T extends Partial<Record<string, any>> = Partial<Record<string, unknown>>,\n> = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: T\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, unknown> | undefined\n // The trailing `| any` collapsed the whole union to `any`. Every styles\n // callback in the system returns either a `cssFn` template result\n // (`ReturnType<typeof css>`) or an empty string for \"no styles\" — the\n // tightened union captures both shapes exactly.\n}) => ReturnType<typeof css> | string\n\nexport type MakeItResponsive = ({\n theme,\n key,\n css,\n styles,\n normalize,\n}: {\n theme?: CustomTheme\n key?: string\n css: Css\n styles: MakeItResponsiveStyles\n normalize?: boolean\n // Inner props (the `key`-indexed read) carries arbitrary entries the\n // outer styled component spreads — `unknown` is honest at this boundary\n // (callers narrow via the `key` lookup at line 112). The function body\n // returns `''`, a `css`-tagged result, a memoized `unknown[]` (cached\n // per-breakpoint render array), or a fresh `unknown[]` from the\n // `bps.map(...)` path.\n}) => (props: { theme?: Theme; [prop: string]: unknown }) => ReturnType<Css> | string | unknown[]\n\n/**\n * Per-internal-theme cache:\n * - `optimized`: the per-breakpoint theme object (`{ xs: {...}, md: {...} }`)\n * after `normalize → transform → optimize`. Reused as long as the same\n * `sortedBreakpoints` reference is passed in.\n * - `rendered`: memoized FINAL output (array of media-wrapped CSSResults),\n * keyed by the outer `theme` reference. Hit when the same internal theme\n * AND the same outer theme render again — which is the common case when\n * the provider value is stable. Avoids re-running renderStyles +\n * optimizeBreakpointDeltas on every parent re-render.\n */\ninterface ThemeCacheEntry {\n breakpoints: unknown\n optimized: Record<string, Record<string, unknown>>\n rendered?: WeakMap<object, unknown[]> | undefined\n}\n\nconst themeCache = new WeakMap<object, ThemeCacheEntry>()\n\n/**\n * Core responsive engine used by every styled component in the system.\n *\n * Returns a styled-components interpolation function that:\n * 1. Reads the component's theme prop (via `key` or direct `theme`)\n * 2. Without breakpoints → renders plain CSS\n * 3. With breakpoints → normalizes, transforms (property-per-breakpoint →\n * breakpoint-per-property), optimizes (deduplicates identical breakpoints),\n * deltas the per-breakpoint output against the mobile-first cascade\n * (drops re-emitted unchanged declarations), and wraps each non-empty\n * breakpoint's deltas in the appropriate `@media` query. Falls back to\n * the unoptimized path if any breakpoint's render result can't be\n * cleanly stringified.\n */\nconst makeItResponsive: MakeItResponsive =\n ({ theme: customTheme, key = '', css, styles, normalize = true }) =>\n ({ theme = {}, ...props }) => {\n // `props[key]` carries a styled-component-injected theme prop whose\n // shape is determined by the styles callback's generic — opaque from\n // here. The outer `MakeItResponsive` props index signature is\n // `[prop: string]: unknown` (tightened from `any`); cast to the shape\n // the downstream pipeline expects so the rest of the body retains\n // strict typing without per-call casts.\n const internalTheme = (customTheme || props[key]) as Record<string, unknown>\n\n // if no theme is defined, return empty object\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 there are no breakpoints, return just standard css\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 const entry = themeCache.get(internalTheme)\n const breakpointsMatch = entry?.breakpoints === sortedBreakpoints\n\n // Full-render cache: same internal theme + same outer theme → return\n // the previous render's output verbatim. CSSResult instances are\n // immutable so reusing them is safe.\n if (entry && breakpointsMatch && entry.rendered) {\n const memoized = entry.rendered.get(theme as object)\n if (memoized) return memoized\n }\n\n if (entry && breakpointsMatch) {\n optimizedTheme = entry.optimized\n } else {\n let helperTheme = internalTheme\n\n /* v8 ignore start — defensive `sortedBreakpoints ?? []` fallbacks; breakpoints always set in real usage */\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 /* v8 ignore stop */\n\n themeCache.set(internalTheme, {\n breakpoints: sortedBreakpoints,\n optimized: optimizedTheme,\n // Preserve any pre-existing rendered cache when re-entering with a\n // changed sortedBreakpoints reference — usually unreachable because\n // breakpoints come from a stable provider value, but the explicit\n // handling avoids a memory cliff in tests / HMR.\n rendered: entry?.rendered,\n })\n }\n\n /* v8 ignore next — defensive `sortedBreakpoints ?? []` fallback */\n const bps = sortedBreakpoints ?? []\n\n // Resolve each per-breakpoint render to a string so the delta optimizer\n // can diff at the property level. If any breakpoint's result can't be\n // cleanly stringified (foreign engine result), fall back to the original\n // unoptimized path that lets the engine resolve interpolations itself.\n const renderedTexts: (string | null)[] = bps.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n /* v8 ignore next — defensive null-theme/media guard */\n if (!breakpointTheme || !media) return ''\n return stringifyResult(renderStyles(breakpointTheme))\n })\n\n const canOptimize = renderedTexts.every((t) => t !== null)\n let result: unknown[]\n if (canOptimize) {\n const deltas = optimizeBreakpointDeltas(renderedTexts as string[])\n result = bps.map((item: string, i: number) => {\n const cssText = deltas[i]\n /* v8 ignore next — defensive null-cssText/media guard */\n if (!cssText || !media) return ''\n return (media as Record<string, any>)[item]`${cssText}`\n })\n } else {\n result = bps.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n /* v8 ignore next — defensive null-theme/media guard */\n if (!breakpointTheme || !media) return ''\n const r = renderStyles(breakpointTheme)\n return (media as Record<string, any>)[item]`\n ${r};\n `\n })\n }\n\n // Memoize the final rendered output by outer theme reference. Stable\n // theme + stable internal theme → future renders return immediately.\n // Invariant: by this point themeCache always has an entry for\n // internalTheme — earlier paths either hit the rendered-cache and\n // returned, or wrote one via themeCache.set above.\n const cacheEntry = themeCache.get(internalTheme)\n if (cacheEntry) {\n if (!cacheEntry.rendered) cacheEntry.rendered = new WeakMap()\n cacheEntry.rendered.set(theme as object, result)\n }\n\n return result\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 /* v8 ignore next — defensive `?? 0` fallback; keys come from breakpoints' own keys */\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 { nativeCompat, provide } from '@pyreon/core'\nimport { ThemeContext } from '@pyreon/styler'\nimport { Provider as CoreProvider, context } from '@pyreon/ui-core'\nimport type { PyreonTheme } from './enrichTheme'\nimport { enrichTheme } from './enrichTheme'\n\nexport type TProvider = {\n theme: PyreonTheme\n children?: VNode | null\n}\n\n/**\n * @internal Low-level provider — use `PyreonUI` from `@pyreon/ui-core` instead.\n *\n * Unistyle Provider — wraps the core Provider and enriches the theme\n * with pre-computed sorted breakpoints and media-query tagged-template\n * helpers consumed by `makeItResponsive`.\n *\n * @deprecated Prefer `<PyreonUI theme={theme} mode=\"light\">` which handles\n * all three context layers (styler, core, mode) in one component.\n */\nfunction Provider(props: TProvider): VNode | null {\n const { theme, children } = props\n\n const enrichedTheme = enrichTheme(theme)\n\n // Provide enriched theme to both the ui-core context (for rocketstyle/elements)\n // AND the styler ThemeContext (for styled() components and makeItResponsive).\n // Without this, styled() components receive an empty theme and all responsive\n // styles are skipped (@media queries produce NaN values).\n // ThemeContext is a ReactiveContext — provide an accessor.\n provide(ThemeContext, () => enrichedTheme)\n\n return CoreProvider({ theme: enrichedTheme, children }) as VNode | null\n}\n\n// Mark as native — invoked by PyreonUI internally; needs Pyreon's setup\n// frame for provide(ThemeContext, ...) to reach descendants.\nnativeCompat(Provider)\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\n// Each field is optional — the function body's first check\n// (`if (...!direction || !alignX || !alignY) return null`) already treats\n// any falsy/undefined input as a no-op. Aligning the type with the runtime\n// contract lets typed-theme callers (e.g. `MakeItResponsiveStyles<ThemeProps>`\n// where ThemeProps fields are optional to match the per-breakpoint resolved\n// scalar shape) pass values through without redundant casts.\nexport type AlignContent = ({\n direction,\n alignX,\n alignY,\n}: {\n direction?: AlignContentDirectionKeys | undefined\n alignX?: AlignContentAlignXKeys | undefined\n alignY?: AlignContentAlignYKeys | undefined\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 // Direct comparisons avoid the per-call 2-element array allocation that\n // `['inline', 'reverseInline'].includes(direction)` paid. Hot path: fires\n // for every styled component with a `direction` prop. Ported from\n // vitus-labs `e573e6c4`.\n const isReverted = direction === 'inline' || direction === 'reverseInline'\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 /* v8 ignore next — defensive isNotValue guard; covered by earlier checks */\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 /* v8 ignore next — defensive unit fallback */\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\n// Impl args tightened from `any[]` to `unknown[]` to match the declared\n// `GetValueOf`. `find` returns `unknown` after the filter; cast to the\n// declared return shape — the runtime contract is \"first non-undefined,\n// non-null value\", which callers (`values`) handle for any concrete shape.\nconst getValueOf: GetValueOf = (...args: unknown[]) =>\n args.find((v) => typeof v !== 'undefined' && v !== null) as number | string\n\nexport type Values = (\n items: unknown[],\n rootSize?: number,\n outputUnit?: CssUnits,\n) => string | number | null\n\nconst values: Values = (items, rootSize, outputUnit) => {\n const param = getValueOf(...items)\n\n if (Array.isArray(param)) {\n return param.map((item) => value(item, rootSize, outputUnit)).join(' ')\n }\n\n return value(param, rootSize, outputUnit)\n}\n\nexport default values\n","import { value } from '../../units'\n\ntype PropertyValue = string | number | null | undefined\ntype PV = PropertyValue\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype CornerValues = {\n full: PV\n top: PV\n bottom: PV\n left: PV\n right: PV\n topLeft: PV\n topRight: PV\n bottomLeft: PV\n bottomRight: PV\n}\n\nconst hasAnyValue = (v: CornerValues) =>\n isValidValue(v.full) ||\n isValidValue(v.top) ||\n isValidValue(v.bottom) ||\n isValidValue(v.left) ||\n isValidValue(v.right) ||\n isValidValue(v.topLeft) ||\n isValidValue(v.topRight) ||\n isValidValue(v.bottomLeft) ||\n isValidValue(v.bottomRight)\n\nconst resolveCorners = (v: CornerValues) => {\n const corners: PV[] = [v.full, v.full, v.full, v.full]\n if (isValidValue(v.top)) {\n corners[0] = v.top\n corners[1] = v.top\n }\n if (isValidValue(v.bottom)) {\n corners[2] = v.bottom\n corners[3] = v.bottom\n }\n if (isValidValue(v.left)) {\n corners[0] = v.left\n corners[3] = v.left\n }\n if (isValidValue(v.right)) {\n corners[1] = v.right\n corners[2] = v.right\n }\n if (isValidValue(v.topLeft)) corners[0] = v.topLeft\n if (isValidValue(v.topRight)) corners[1] = v.topRight\n if (isValidValue(v.bottomRight)) corners[2] = v.bottomRight\n if (isValidValue(v.bottomLeft)) corners[3] = v.bottomLeft\n return corners\n}\n\nconst formatShorthand = (corners: PV[], calc: (p: PV) => any) => {\n const [tl, tr, br, bl] = corners\n if (corners.every((val, _, arr) => val === arr[0])) return `border-radius: ${calc(tl)};`\n if (tl === br && tr === bl) return `border-radius: ${calc(tl)} ${calc(tr)};`\n if (tl && tr === bl && br) return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)};`\n return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)} ${calc(bl)};`\n}\n\nconst CORNER_CSS = [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n] as const\n\nconst formatIndividual = (corners: PV[], calc: (p: PV) => any) => {\n let output = ''\n for (let i = 0; i < corners.length; i++) {\n if (isValidValue(corners[i])) output += `${CORNER_CSS[i]}: ${calc(corners[i])};`\n }\n return output\n}\n\nexport type BorderRadius = (rootSize?: number) => (props: CornerValues) => string | null\n\nconst borderRadius: BorderRadius = (rootSize) => (props) => {\n if (!hasAnyValue(props)) return null\n const calc = (param: PV) => value(param, rootSize)\n const corners = resolveCorners(props)\n if (corners.every((val) => isValidValue(val))) return formatShorthand(corners, calc)\n return formatIndividual(corners, calc)\n}\n\nexport default borderRadius\n","import { value } from '../../units'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype Property = 'inset' | 'margin' | 'padding' | 'border-width' | 'border-style' | 'border-color'\ntype Value = string | number | null | undefined\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ntype EdgeValues = {\n full: Value\n x: Value\n y: Value\n top: Value\n left: Value\n right: Value\n bottom: Value\n}\n\ntype Definitions = Record<Property, { unit?: CssUnits; edgeCss: (side: Side) => string }>\n\nconst definitions: Definitions = {\n inset: { unit: 'rem', edgeCss: (side) => side },\n margin: { unit: 'rem', edgeCss: (side) => `margin-${side}` },\n padding: { unit: 'rem', edgeCss: (side) => `padding-${side}` },\n 'border-width': { unit: 'px', edgeCss: (side) => `border-${side}-width` },\n 'border-style': { edgeCss: (side) => `border-${side}-style` },\n 'border-color': { edgeCss: (side) => `border-${side}-color` },\n}\n\nconst hasAnyValue = (vals: EdgeValues) =>\n isValidValue(vals.top) ||\n isValidValue(vals.bottom) ||\n isValidValue(vals.left) ||\n isValidValue(vals.right) ||\n isValidValue(vals.x) ||\n isValidValue(vals.y) ||\n isValidValue(vals.full)\n\nconst resolveSides = ({ full, x, y, top, left, right, bottom }: EdgeValues) => {\n const sides: Value[] = [full, full, full, full]\n if (isValidValue(x)) {\n sides[1] = x\n sides[3] = x\n }\n if (isValidValue(y)) {\n sides[0] = y\n sides[2] = y\n }\n if (isValidValue(top)) sides[0] = top\n if (isValidValue(right)) sides[1] = right\n if (isValidValue(bottom)) sides[2] = bottom\n if (isValidValue(left)) sides[3] = left\n return sides\n}\n\nconst formatShorthand = (property: Property, sides: Value[], calc: (v: Value) => Value) => {\n const [t, r, b, l] = sides\n if (sides.every((val, _, arr) => val === arr[0])) return `${property}: ${calc(t)};`\n if (t === b && r === l) return `${property}: ${calc(t)} ${calc(r)};`\n if (t && r === l && b) return `${property}: ${calc(t)} ${calc(r)} ${calc(b)};`\n return `${property}: ${calc(t)} ${calc(r)} ${calc(b)} ${calc(l)};`\n}\n\nconst formatIndividual = (\n sides: Value[],\n edgeCss: (side: Side) => string,\n calc: (v: Value) => Value,\n) => {\n const [t, r, b, l] = sides\n let output = ''\n if (isValidValue(t)) output += `${edgeCss('top')}: ${calc(t)};`\n if (isValidValue(b)) output += `${edgeCss('bottom')}: ${calc(b)};`\n if (isValidValue(l)) output += `${edgeCss('left')}: ${calc(l)};`\n if (isValidValue(r)) output += `${edgeCss('right')}: ${calc(r)};`\n return output\n}\n\nexport type Edge = (rootSize?: number) => (property: Property, values: EdgeValues) => string | null\n\nconst edge: Edge =\n (rootSize = 16) =>\n (property, values) => {\n if (!hasAnyValue(values)) return null\n const { unit, edgeCss } = definitions[property]\n const calc = (param: Value) => (unit ? value(param, rootSize, unit) : param)\n const sides = resolveSides(values)\n if (sides.every((val) => isValidValue(val))) return formatShorthand(property, sides, calc)\n return formatIndividual(sides, edgeCss, calc)\n }\n\nexport default edge\n","import type { Values } from '../../units/values'\nimport type { BorderRadius } from '../shorthands/borderRadius'\nimport type { Edge } from '../shorthands/edge'\nimport type { PropertyDescriptor } from './propertyMap'\nimport type { InnerTheme } from './types'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\ntype Calc = (...params: any[]) => ReturnType<Values>\n\n/** Mirrors the Value / PropertyValue types used by edge and borderRadius shorthands. */\ntype Value = string | number | null | undefined\n\nconst toCssDecl = (css: string, v: unknown) => (v == null ? '' : `${css}: ${v};`)\n\n/**\n * Converts a single property descriptor + theme values into a CSS fragment.\n *\n * - `simple` — pass-through (no unit conversion)\n * - `convert` — number→rem via `calc()`\n * - `convert_fallback` — picks first non-null from multiple theme keys, then converts\n * - `edge` — delegates to the edge shorthand (margin, padding, inset, border-*)\n * - `border_radius` — delegates to the border-radius shorthand\n * - `special` — one-off logic (fullScreen, backgroundImage url wrapping, animation combo, etc.)\n *\n * IMPORTANT: special cases MUST return `css` tagged-template results,\n * NOT plain strings. The caller (styles/index.ts) embeds these in another\n * `css` template, and the interpolation chain requires template results\n * for correct nesting of pseudo-selectors, media queries, and @layer\n * wrapping. A previous \"optimization\" returned plain strings which broke\n * responsive styles, hover states, and media-query generation.\n */\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n css: Css,\n): string | ReturnType<typeof css> => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return css`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n `\n\n case 'backgroundImage':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.backgroundImage) return ''\n return css`\n background-image: url(${t.backgroundImage});\n `\n\n case 'animation': {\n const parts = [t.keyframe, t.animation].filter(Boolean).join(' ')\n /* v8 ignore next — defensive empty-parts ternary */\n return parts ? `animation: ${parts};` : ''\n }\n\n case 'hideEmpty':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.hideEmpty) return ''\n return css`\n &:empty {\n display: none;\n }\n `\n\n case 'clearFix':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.clearFix) return ''\n return css`\n &::after {\n clear: both;\n content: '';\n display: table;\n }\n `\n\n case 'extendCss':\n /* v8 ignore next — defensive `?? ''` fallback */\n return (t.extendCss as string | undefined) ?? ''\n\n default:\n return ''\n }\n}\n\nconst processDescriptor = (\n d: PropertyDescriptor,\n t: InnerTheme,\n css: Css,\n calc: Calc,\n shorthand: ReturnType<Edge>,\n borderRadiusFn: ReturnType<BorderRadius>,\n): string | ReturnType<typeof css> => {\n switch (d.kind) {\n case 'simple':\n return toCssDecl(d.css, t[d.key])\n\n case 'convert':\n return toCssDecl(d.css, calc(t[d.key]))\n\n case 'convert_fallback':\n return toCssDecl(d.css, calc(...d.keys.map((k) => t[k])))\n\n case 'edge':\n return (\n shorthand(d.property, {\n full: t[d.keys.full] as Value,\n x: t[d.keys.x] as Value,\n y: t[d.keys.y] as Value,\n top: t[d.keys.top] as Value,\n left: t[d.keys.left] as Value,\n bottom: t[d.keys.bottom] as Value,\n right: t[d.keys.right] as Value,\n }) ?? ''\n )\n\n case 'border_radius':\n return (\n borderRadiusFn({\n full: t[d.keys.full] as Value,\n top: t[d.keys.top] as Value,\n bottom: t[d.keys.bottom] as Value,\n left: t[d.keys.left] as Value,\n right: t[d.keys.right] as Value,\n topLeft: t[d.keys.topLeft] as Value,\n topRight: t[d.keys.topRight] as Value,\n bottomLeft: t[d.keys.bottomLeft] as Value,\n bottomRight: t[d.keys.bottomRight] as Value,\n }) ?? ''\n )\n\n case 'special':\n return processSpecial(d, t, css)\n }\n}\n\nexport default processDescriptor\n","import type { InnerTheme } from './types'\n\ntype EdgeProperty =\n | 'inset'\n | 'margin'\n | 'padding'\n | 'border-width'\n | 'border-style'\n | 'border-color'\n\ntype EdgeKeys = {\n full: keyof InnerTheme\n x: keyof InnerTheme\n y: keyof InnerTheme\n top: keyof InnerTheme\n left: keyof InnerTheme\n bottom: keyof InnerTheme\n right: keyof InnerTheme\n}\n\ntype BorderRadiusKeys = {\n full: keyof InnerTheme\n top: keyof InnerTheme\n bottom: keyof InnerTheme\n left: keyof InnerTheme\n right: keyof InnerTheme\n topLeft: keyof InnerTheme\n topRight: keyof InnerTheme\n bottomLeft: keyof InnerTheme\n bottomRight: keyof InnerTheme\n}\n\nexport type PropertyDescriptor =\n | { kind: 'simple'; css: string; key: keyof InnerTheme }\n | { kind: 'convert'; css: string; key: keyof InnerTheme }\n | { kind: 'convert_fallback'; css: string; keys: (keyof InnerTheme)[] }\n | { kind: 'edge'; property: EdgeProperty; keys: EdgeKeys }\n | { kind: 'border_radius'; keys: BorderRadiusKeys }\n | { kind: 'special'; id: string }\n\nconst propertyMap: PropertyDescriptor[] = [\n // SPECIAL: fullScreen\n { kind: 'special', id: 'fullScreen' },\n\n // POSITION\n { kind: 'simple', css: 'all', key: 'all' },\n { kind: 'simple', css: 'display', key: 'display' },\n { kind: 'simple', css: 'position', key: 'position' },\n { kind: 'simple', css: 'box-sizing', key: 'boxSizing' },\n { kind: 'simple', css: 'float', key: 'float' },\n\n // INSET\n {\n kind: 'edge',\n property: 'inset',\n keys: {\n full: 'inset',\n x: 'insetX',\n y: 'insetY',\n top: 'top',\n left: 'left',\n bottom: 'bottom',\n right: 'right',\n },\n },\n\n // SIZING\n { kind: 'convert_fallback', css: 'width', keys: ['width', 'size'] },\n { kind: 'convert_fallback', css: 'min-width', keys: ['minWidth', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-width', keys: ['maxWidth', 'maxSize'] },\n { kind: 'convert_fallback', css: 'height', keys: ['height', 'size'] },\n { kind: 'convert_fallback', css: 'min-height', keys: ['minHeight', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-height', keys: ['maxHeight', 'maxSize'] },\n { kind: 'convert', css: 'gap', key: 'gap' },\n { kind: 'simple', css: 'aspect-ratio', key: 'aspectRatio' },\n { kind: 'simple', css: 'contain', key: 'contain' },\n { kind: 'simple', css: 'container-type', key: 'containerType' },\n { kind: 'simple', css: 'container-name', key: 'containerName' },\n { kind: 'simple', css: 'container', key: 'container' },\n { kind: 'convert', css: 'inline-size', key: 'inlineSize' },\n { kind: 'convert', css: 'block-size', key: 'blockSize' },\n { kind: 'convert', css: 'min-inline-size', key: 'minInlineSize' },\n { kind: 'convert', css: 'min-block-size', key: 'minBlockSize' },\n { kind: 'convert', css: 'max-inline-size', key: 'maxInlineSize' },\n { kind: 'convert', css: 'max-block-size', key: 'maxBlockSize' },\n\n // SPACING\n {\n kind: 'edge',\n property: 'margin',\n keys: {\n full: 'margin',\n x: 'marginX',\n y: 'marginY',\n top: 'marginTop',\n left: 'marginLeft',\n bottom: 'marginBottom',\n right: 'marginRight',\n },\n },\n {\n kind: 'edge',\n property: 'padding',\n keys: {\n full: 'padding',\n x: 'paddingX',\n y: 'paddingY',\n top: 'paddingTop',\n left: 'paddingLeft',\n bottom: 'paddingBottom',\n right: 'paddingRight',\n },\n },\n\n // Logical spacing\n { kind: 'convert', css: 'margin-inline', key: 'marginInline' },\n { kind: 'convert', css: 'margin-inline-start', key: 'marginInlineStart' },\n { kind: 'convert', css: 'margin-inline-end', key: 'marginInlineEnd' },\n { kind: 'convert', css: 'margin-block', key: 'marginBlock' },\n { kind: 'convert', css: 'margin-block-start', key: 'marginBlockStart' },\n { kind: 'convert', css: 'margin-block-end', key: 'marginBlockEnd' },\n { kind: 'convert', css: 'padding-inline', key: 'paddingInline' },\n { kind: 'convert', css: 'padding-inline-start', key: 'paddingInlineStart' },\n { kind: 'convert', css: 'padding-inline-end', key: 'paddingInlineEnd' },\n { kind: 'convert', css: 'padding-block', key: 'paddingBlock' },\n { kind: 'convert', css: 'padding-block-start', key: 'paddingBlockStart' },\n { kind: 'convert', css: 'padding-block-end', key: 'paddingBlockEnd' },\n\n // Logical inset\n { kind: 'convert', css: 'inset-inline', key: 'insetInline' },\n { kind: 'convert', css: 'inset-inline-start', key: 'insetInlineStart' },\n { kind: 'convert', css: 'inset-inline-end', key: 'insetInlineEnd' },\n { kind: 'convert', css: 'inset-block', key: 'insetBlock' },\n { kind: 'convert', css: 'inset-block-start', key: 'insetBlockStart' },\n { kind: 'convert', css: 'inset-block-end', key: 'insetBlockEnd' },\n\n // FLEX\n { kind: 'simple', css: 'align-content', key: 'alignContent' },\n { kind: 'simple', css: 'align-items', key: 'alignItems' },\n { kind: 'simple', css: 'align-self', key: 'alignSelf' },\n { kind: 'simple', css: 'flex', key: 'flex' },\n { kind: 'simple', css: 'flex-basis', key: 'flexBasis' },\n { kind: 'simple', css: 'flex-direction', key: 'flexDirection' },\n { kind: 'simple', css: 'flex-flow', key: 'flexFlow' },\n { kind: 'simple', css: 'flex-grow', key: 'flexGrow' },\n { kind: 'simple', css: 'flex-shrink', key: 'flexShrink' },\n { kind: 'simple', css: 'flex-wrap', key: 'flexWrap' },\n { kind: 'simple', css: 'justify-content', key: 'justifyContent' },\n { kind: 'simple', css: 'justify-items', key: 'justifyItems' },\n { kind: 'simple', css: 'justify-self', key: 'justifySelf' },\n { kind: 'simple', css: 'place-items', key: 'placeItems' },\n { kind: 'simple', css: 'place-content', key: 'placeContent' },\n { kind: 'simple', css: 'place-self', key: 'placeSelf' },\n { kind: 'convert', css: 'row-gap', key: 'rowGap' },\n { kind: 'convert', css: 'column-gap', key: 'columnGap' },\n\n // GRID\n { kind: 'simple', css: 'grid', key: 'grid' },\n { kind: 'simple', css: 'grid-area', key: 'gridArea' },\n { kind: 'convert', css: 'grid-auto-columns', key: 'gridAutoColumns' },\n { kind: 'simple', css: 'grid-auto-flow', key: 'gridAutoFlow' },\n { kind: 'convert', css: 'grid-auto-rows', key: 'gridAutoRows' },\n { kind: 'simple', css: 'grid-column', key: 'gridColumn' },\n { kind: 'simple', css: 'grid-column-end', key: 'gridColumnEnd' },\n { kind: 'convert', css: 'grid-column-gap', key: 'gridColumnGap' },\n { kind: 'convert', css: 'grid-column-start', key: 'gridColumnStart' },\n { kind: 'convert', css: 'grid-gap', key: 'gridGap' },\n { kind: 'simple', css: 'grid-row', key: 'gridRow' },\n { kind: 'simple', css: 'grid-row-start', key: 'gridRowStart' },\n { kind: 'simple', css: 'grid-row-end', key: 'gridRowEnd' },\n { kind: 'convert', css: 'grid-row-gap', key: 'gridRowGap' },\n { kind: 'simple', css: 'grid-template', key: 'gridTemplate' },\n { kind: 'simple', css: 'grid-template-areas', key: 'gridTemplateAreas' },\n { kind: 'simple', css: 'grid-template-columns', key: 'gridTemplateColumns' },\n { kind: 'simple', css: 'grid-template-rows', key: 'gridTemplateRows' },\n\n // POSITIONING\n { kind: 'simple', css: 'object-fit', key: 'objectFit' },\n { kind: 'simple', css: 'object-position', key: 'objectPosition' },\n { kind: 'simple', css: 'order', key: 'order' },\n { kind: 'simple', css: 'opacity', key: 'opacity' },\n { kind: 'simple', css: 'resize', key: 'resize' },\n { kind: 'simple', css: 'vertical-align', key: 'verticalAlign' },\n\n // FONT & TEXT\n { kind: 'simple', css: 'line-height', key: 'lineHeight' },\n { kind: 'simple', css: 'font', key: 'font' },\n { kind: 'simple', css: 'font-family', key: 'fontFamily' },\n { kind: 'convert', css: 'font-size', key: 'fontSize' },\n { kind: 'convert', css: 'font-size-adjust', key: 'fontSizeAdjust' },\n { kind: 'convert', css: 'font-stretch', key: 'fontStretch' },\n { kind: 'simple', css: 'font-style', key: 'fontStyle' },\n { kind: 'simple', css: 'font-variant', key: 'fontVariant' },\n { kind: 'simple', css: 'font-weight', key: 'fontWeight' },\n { kind: 'simple', css: 'font-kerning', key: 'fontKerning' },\n { kind: 'simple', css: 'font-feature-settings', key: 'fontFeatureSettings' },\n { kind: 'simple', css: 'font-variation-settings', key: 'fontVariationSettings' },\n { kind: 'simple', css: 'font-optical-sizing', key: 'fontOpticalSizing' },\n { kind: 'simple', css: 'text-align', key: 'textAlign' },\n { kind: 'simple', css: 'text-align-last', key: 'textAlignLast' },\n { kind: 'simple', css: 'text-transform', key: 'textTransform' },\n { kind: 'simple', css: 'text-decoration', key: 'textDecoration' },\n { kind: 'simple', css: 'text-decoration-color', key: 'textDecorationColor' },\n { kind: 'simple', css: 'text-decoration-line', key: 'textDecorationLine' },\n { kind: 'simple', css: 'text-decoration-style', key: 'textDecorationStyle' },\n { kind: 'simple', css: 'text-decoration-thickness', key: 'textDecorationThickness' },\n { kind: 'simple', css: 'text-underline-offset', key: 'textUnderlineOffset' },\n { kind: 'simple', css: 'text-emphasis', key: 'textEmphasis' },\n { kind: 'simple', css: 'text-emphasis-color', key: 'textEmphasisColor' },\n { kind: 'simple', css: 'text-emphasis-style', key: 'textEmphasisStyle' },\n { kind: 'simple', css: 'letter-spacing', key: 'letterSpacing' },\n { kind: 'simple', css: 'word-spacing', key: 'wordSpacing' },\n { kind: 'simple', css: 'text-indent', key: 'textIndent' },\n { kind: 'simple', css: 'text-justify', key: 'textJustify' },\n { kind: 'simple', css: 'text-overflow', key: 'textOverflow' },\n { kind: 'simple', css: 'text-shadow', key: 'textShadow' },\n { kind: 'simple', css: 'text-wrap', key: 'textWrap' },\n { kind: 'simple', css: 'text-rendering', key: 'textRendering' },\n { kind: 'simple', css: 'white-space', key: 'whiteSpace' },\n { kind: 'simple', css: 'word-break', key: 'wordBreak' },\n { kind: 'simple', css: 'word-wrap', key: 'wordWrap' },\n { kind: 'simple', css: 'writing-mode', key: 'writingMode' },\n { kind: 'simple', css: 'direction', key: 'direction' },\n { kind: 'simple', css: 'hyphens', key: 'hyphens' },\n\n // LIST\n { kind: 'simple', css: 'list-style', key: 'listStyle' },\n { kind: 'simple', css: 'list-style-image', key: 'listStyleImage' },\n { kind: 'simple', css: 'list-style-position', key: 'listStylePosition' },\n { kind: 'simple', css: 'list-style-type', key: 'listStyleType' },\n\n // BACKGROUND & COLORS\n { kind: 'simple', css: 'color', key: 'color' },\n { kind: 'simple', css: 'background', key: 'background' },\n { kind: 'simple', css: 'background-color', key: 'backgroundColor' },\n { kind: 'special', id: 'backgroundImage' },\n { kind: 'simple', css: 'background-attachment', key: 'backgroundAttachment' },\n { kind: 'simple', css: 'background-clip', key: 'backgroundClip' },\n { kind: 'simple', css: 'background-origin', key: 'backgroundOrigin' },\n { kind: 'simple', css: 'background-position', key: 'backgroundPosition' },\n { kind: 'simple', css: 'background-repeat', key: 'backgroundRepeat' },\n { kind: 'simple', css: 'background-size', key: 'backgroundSize' },\n\n // BORDERS\n {\n kind: 'border_radius',\n keys: {\n full: 'borderRadius',\n top: 'borderRadiusTop',\n bottom: 'borderRadiusBottom',\n left: 'borderRadiusLeft',\n right: 'borderRadiusRight',\n topLeft: 'borderRadiusTopLeft',\n topRight: 'borderRadiusTopRight',\n bottomLeft: 'borderRadiusBottomLeft',\n bottomRight: 'borderRadiusBottomRight',\n },\n },\n { kind: 'simple', css: 'border', key: 'border' },\n { kind: 'simple', css: 'border-top', key: 'borderTop' },\n { kind: 'simple', css: 'border-bottom', key: 'borderBottom' },\n { kind: 'simple', css: 'border-left', key: 'borderLeft' },\n { kind: 'simple', css: 'border-right', key: 'borderRight' },\n {\n kind: 'edge',\n property: 'border-width',\n keys: {\n full: 'borderWidth',\n x: 'borderWidthX',\n y: 'borderWidthY',\n top: 'borderWidthTop',\n left: 'borderWidthLeft',\n bottom: 'borderWidthBottom',\n right: 'borderWidthRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-style',\n keys: {\n full: 'borderStyle',\n x: 'borderStyleX',\n y: 'borderStyleY',\n top: 'borderStyleTop',\n left: 'borderStyleLeft',\n bottom: 'borderStyleBottom',\n right: 'borderStyleRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-color',\n keys: {\n full: 'borderColor',\n x: 'borderColorX',\n y: 'borderColorY',\n top: 'borderColorTop',\n left: 'borderColorLeft',\n bottom: 'borderColorBottom',\n right: 'borderColorRight',\n },\n },\n { kind: 'simple', css: 'border-image', key: 'borderImage' },\n { kind: 'simple', css: 'border-image-outset', key: 'borderImageOutset' },\n { kind: 'simple', css: 'border-image-repeat', key: 'borderImageRepeat' },\n { kind: 'simple', css: 'border-image-slice', key: 'borderImageSlice' },\n { kind: 'simple', css: 'border-image-source', key: 'borderImageSource' },\n { kind: 'simple', css: 'border-image-width', key: 'borderImageWidth' },\n { kind: 'simple', css: 'border-spacing', key: 'borderSpacing' },\n\n { kind: 'simple', css: 'border-collapse', key: 'borderCollapse' },\n\n // Logical borders\n { kind: 'simple', css: 'border-inline', key: 'borderInline' },\n { kind: 'simple', css: 'border-block', key: 'borderBlock' },\n { kind: 'simple', css: 'border-inline-start', key: 'borderInlineStart' },\n { kind: 'simple', css: 'border-inline-end', key: 'borderInlineEnd' },\n { kind: 'simple', css: 'border-block-start', key: 'borderBlockStart' },\n { kind: 'simple', css: 'border-block-end', key: 'borderBlockEnd' },\n\n // VISUAL EFFECTS\n { kind: 'simple', css: 'backface-visibility', key: 'backfaceVisibility' },\n { kind: 'simple', css: 'box-shadow', key: 'boxShadow' },\n { kind: 'simple', css: 'filter', key: 'filter' },\n { kind: 'simple', css: 'backdrop-filter', key: 'backdropFilter' },\n { kind: 'simple', css: 'mix-blend-mode', key: 'mixBlendMode' },\n { kind: 'simple', css: 'background-blend-mode', key: 'backgroundBlendMode' },\n { kind: 'simple', css: 'isolation', key: 'isolation' },\n { kind: 'simple', css: 'outline', key: 'outline' },\n { kind: 'simple', css: 'outline-color', key: 'outlineColor' },\n { kind: 'simple', css: 'outline-offset', key: 'outlineOffset' },\n { kind: 'simple', css: 'outline-style', key: 'outlineStyle' },\n { kind: 'simple', css: 'outline-width', key: 'outlineWidth' },\n\n // ANIMATIONS\n { kind: 'special', id: 'animation' },\n { kind: 'simple', css: 'animation-name', key: 'animationName' },\n { kind: 'simple', css: 'animation-duration', key: 'animationDuration' },\n { kind: 'simple', css: 'animation-timing-function', key: 'animationTimingFunction' },\n { kind: 'simple', css: 'animation-delay', key: 'animationDelay' },\n { kind: 'simple', css: 'animation-iteration-count', key: 'animationIterationCount' },\n { kind: 'simple', css: 'animation-direction', key: 'animationDirection' },\n { kind: 'simple', css: 'animation-fill-mode', key: 'animationFillMode' },\n { kind: 'simple', css: 'animation-play-state', key: 'animationPlayState' },\n { kind: 'simple', css: 'transition', key: 'transition' },\n { kind: 'simple', css: 'transition-delay', key: 'transitionDelay' },\n { kind: 'simple', css: 'transition-duration', key: 'transitionDuration' },\n { kind: 'simple', css: 'transition-property', key: 'transitionProperty' },\n { kind: 'simple', css: 'transition-timing-function', key: 'transitionTimingFunction' },\n\n // TRANSFORM\n { kind: 'simple', css: 'transform', key: 'transform' },\n { kind: 'simple', css: 'transform-origin', key: 'transformOrigin' },\n { kind: 'simple', css: 'transform-style', key: 'transformStyle' },\n { kind: 'simple', css: 'translate', key: 'translate' },\n { kind: 'simple', css: 'rotate', key: 'rotate' },\n { kind: 'simple', css: 'scale', key: 'scale' },\n { kind: 'simple', css: 'will-change', key: 'willChange' },\n\n // SCROLL\n { kind: 'simple', css: 'scroll-behavior', key: 'scrollBehavior' },\n { kind: 'simple', css: 'scroll-snap-type', key: 'scrollSnapType' },\n { kind: 'simple', css: 'scroll-snap-align', key: 'scrollSnapAlign' },\n { kind: 'simple', css: 'scroll-snap-stop', key: 'scrollSnapStop' },\n { kind: 'simple', css: 'scroll-margin', key: 'scrollMargin' },\n { kind: 'simple', css: 'scroll-padding', key: 'scrollPadding' },\n { kind: 'simple', css: 'overscroll-behavior', key: 'overscrollBehavior' },\n { kind: 'simple', css: 'overscroll-behavior-x', key: 'overscrollBehaviorX' },\n { kind: 'simple', css: 'overscroll-behavior-y', key: 'overscrollBehaviorY' },\n\n // INTERACTION\n { kind: 'simple', css: 'cursor', key: 'cursor' },\n { kind: 'simple', css: 'pointer-events', key: 'pointerEvents' },\n { kind: 'simple', css: 'user-select', key: 'userSelect' },\n { kind: 'simple', css: 'touch-action', key: 'touchAction' },\n { kind: 'simple', css: 'scrollbar-width', key: 'scrollbarWidth' },\n { kind: 'simple', css: 'scrollbar-color', key: 'scrollbarColor' },\n { kind: 'simple', css: 'scrollbar-gutter', key: 'scrollbarGutter' },\n { kind: 'simple', css: 'caret-color', key: 'caretColor' },\n { kind: 'simple', css: 'accent-color', key: 'accentColor' },\n { kind: 'simple', css: 'color-scheme', key: 'colorScheme' },\n\n // OTHER\n { kind: 'simple', css: 'caption-side', key: 'captionSide' },\n { kind: 'simple', css: 'clear', key: 'clear' },\n { kind: 'simple', css: 'clip', key: 'clip' },\n { kind: 'simple', css: 'clip-path', key: 'clipPath' },\n { kind: 'simple', css: 'content', key: 'content' },\n { kind: 'simple', css: 'content-visibility', key: 'contentVisibility' },\n { kind: 'simple', css: 'counter-increment', key: 'counterIncrement' },\n { kind: 'simple', css: 'counter-reset', key: 'counterReset' },\n { kind: 'simple', css: 'empty-cells', key: 'emptyCells' },\n { kind: 'simple', css: 'z-index', key: 'zIndex' },\n { kind: 'simple', css: 'overflow', key: 'overflow' },\n { kind: 'simple', css: 'overflow-wrap', key: 'overflowWrap' },\n { kind: 'simple', css: 'overflow-x', key: 'overflowX' },\n { kind: 'simple', css: 'overflow-y', key: 'overflowY' },\n { kind: 'simple', css: 'perspective', key: 'perspective' },\n { kind: 'simple', css: 'perspective-origin', key: 'perspectiveOrigin' },\n { kind: 'simple', css: 'quotes', key: 'quotes' },\n { kind: 'simple', css: 'tab-size', key: 'tabSize' },\n { kind: 'simple', css: 'table-layout', key: 'tableLayout' },\n { kind: 'simple', css: 'visibility', key: 'visibility' },\n { kind: 'simple', css: 'appearance', key: 'appearance' },\n { kind: 'simple', css: 'image-rendering', key: 'imageRendering' },\n\n // Masks\n { kind: 'simple', css: 'mask-image', key: 'maskImage' },\n { kind: 'simple', css: 'mask-size', key: 'maskSize' },\n { kind: 'simple', css: 'mask-position', key: 'maskPosition' },\n { kind: 'simple', css: 'mask-repeat', key: 'maskRepeat' },\n\n // Shapes\n { kind: 'simple', css: 'shape-outside', key: 'shapeOutside' },\n { kind: 'simple', css: 'shape-margin', key: 'shapeMargin' },\n { kind: 'simple', css: 'shape-image-threshold', key: 'shapeImageThreshold' },\n\n // Columns\n { kind: 'simple', css: 'column-count', key: 'columnCount' },\n { kind: 'simple', css: 'column-width', key: 'columnWidth' },\n { kind: 'simple', css: 'column-rule', key: 'columnRule' },\n { kind: 'simple', css: 'columns', key: 'columns' },\n\n // Fragmentation\n { kind: 'simple', css: 'break-before', key: 'breakBefore' },\n { kind: 'simple', css: 'break-after', key: 'breakAfter' },\n { kind: 'simple', css: 'break-inside', key: 'breakInside' },\n { kind: 'simple', css: 'orphans', key: 'orphans' },\n { kind: 'simple', css: 'widows', key: 'widows' },\n { kind: 'simple', css: 'print-color-adjust', key: 'printColorAdjust' },\n\n // CUSTOM ATTRIBUTES\n { kind: 'special', id: 'hideEmpty' },\n { kind: 'special', id: 'clearFix' },\n { kind: 'special', id: 'extendCss' },\n]\n\nexport default propertyMap\n","import { values } from '../../units'\nimport { borderRadius, edge } from '../shorthands'\nimport processDescriptor from './processDescriptor'\nimport propertyMap from './propertyMap'\nimport type { ITheme, InnerTheme, Theme } from './types'\n\n// Dev-time counter sink — populated by `@pyreon/perf-harness` on install().\n// No import so unistyle carries zero coupling to a private package.\nconst _countSink = globalThis as { __pyreon_count__?: (name: string, n?: number) => void }\n\nexport type { ITheme, Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => any\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, unknown> | undefined\n}) => ReturnType<Css>\n\n// ─── Tier 1: Key → descriptor-index lookup ──────────────────────────────────\n// Built once at module init. Instead of scanning all 257 descriptors on every\n// styles() call, we look up only the indices whose keys are present in the\n// incoming theme object. Reduces iterations from ~257 to ~10-20 for a typical\n// component that uses 5-10 properties.\n\nconst keyToIndices = new Map<string, number[]>()\n\nfor (let i = 0; i < propertyMap.length; i++) {\n const d = propertyMap[i] as Record<string, any>\n const addKey = (k: string) => {\n let arr = keyToIndices.get(k)\n if (!arr) {\n arr = []\n keyToIndices.set(k, arr)\n }\n arr.push(i)\n }\n\n if (d.key) addKey(d.key)\n if (d.keys) {\n if (Array.isArray(d.keys)) {\n for (const k of d.keys) addKey(k)\n } else {\n for (const inner of Object.values(d.keys as Record<string, string>)) {\n addKey(inner)\n }\n }\n }\n // kind: 'special' descriptors carry only `id` (no key/keys). Index by id so\n // the fast path resolves them when paired with non-special keys; otherwise\n // fragments.length > 0 from non-special hits skips the fallback full-scan\n // and the special is silently dropped.\n if (d.id) addKey(d.id)\n}\n\n/**\n * Convert a normalized theme object (Record<key, value>) into a CSS template\n * by walking the property map. Each entry in propertyMap describes a single\n * CSS property — its kind (simple / convert / convert_fallback / edge /\n * border_radius), the input theme key(s) to read, and the output CSS name.\n *\n * Returns a `css` tagged template literal so makeItResponsive can embed the\n * result inside the responsive breakpoint structure. Each call returns a\n * FRESH array — the result CSSResult holds onto that array by reference,\n * and reusing one module-level array across calls would clobber an earlier\n * CSSResult's data when the next styles() call clears the shared array.\n *\n * IMPORTANT: the return MUST be wrapped in `css\\`...\\`` — NOT a plain\n * string join. makeItResponsive embeds this result in another template\n * literal, and the CSS interpolation chain requires a css template\n * result (not a raw string) for correct nesting of media queries,\n * pseudo-selectors, and @layer wrapping.\n */\n// Module-level reusable Set — cleared before each synchronous styles() call.\n// The fragments array CANNOT be module-level because the returned CSSResult\n// captures it by reference; the next styles() call would clear-out the\n// previous result before its consumer ever resolved it.\nconst _seen = new Set<number>()\n\nconst styles: Styles = ({ theme: t, css, rootSize }) => {\n if (process.env.NODE_ENV !== 'production') _countSink.__pyreon_count__?.('unistyle.styles')\n\n const calc = (...params: any[]) => values(params, rootSize)\n const shorthand = edge(rootSize)\n const borderRadiusFn = borderRadius(rootSize)\n\n // Per-call fragments array — owned by the returned CSSResult.\n const fragments: unknown[] = []\n\n // Reuse module-level Set — safe because the Set is fully consumed before\n // styles() returns. The fragments array is the one we MUST allocate fresh\n // (see top-of-function comment) — its lifetime extends past this call.\n _seen.clear()\n\n // Fast path: iterate only descriptors whose keys are present in theme\n for (const key of Object.keys(t)) {\n const indices = keyToIndices.get(key)\n if (!indices) continue\n for (const idx of indices) {\n if (_seen.has(idx)) continue\n _seen.add(idx)\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor')\n fragments.push(processDescriptor(propertyMap[idx]!, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n // Fallback: if lookup produced nothing, full scan (handles edge cases\n // where theme uses non-standard keys that aren't in propertyMap)\n if (fragments.length === 0 && Object.keys(t).length > 0) {\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor.fallback-scan')\n for (const d of propertyMap) {\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor')\n fragments.push(processDescriptor(d, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n return css`\n ${fragments}\n `\n}\n\nexport default styles\n"],"mappings":"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"}
|
|
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/optimizeBreakpointDeltas.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/styles/camelToKebab.ts","../src/units/stripUnit.ts","../src/units/value.ts","../src/units/values.ts","../src/cssVariables.ts","../src/styles/alignContent.ts","../src/styles/extendCss.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 // Direct for-in + mutation. The prior `Object.keys.reduce` allocated the\n // keys array and paid reduce-callback overhead per iteration. Hot at\n // PyreonUI mount and on any theme/rootSize change. Ported from\n // vitus-labs `e573e6c4`; measured upstream: +15.9%.\n const acc: Record<string, (...args: [TemplateStringsArray, ...any[]]) => string> = {}\n for (const key in breakpoints) {\n const breakpointValue = breakpoints[key]\n if (breakpointValue === 0) {\n acc[key] = (...args: [TemplateStringsArray, ...any[]]) => css(...args)\n /* v8 ignore next — defensive null-breakpoint guard; type-system constrains values */\n } else if (breakpointValue != null) {\n const emSize = breakpointValue / rootSize\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}) 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\n// for-in early-exit avoids the `Object.values(props)` array allocation\n// that the prior `.some()` paid on every theme normalization decision.\n// Fires once per per-breakpoint theme transform; the early `return true`\n// is hit by any responsive token, so most calls bail out quickly. Ported\n// from vitus-labs `e573e6c4`; measured upstream: +20.3%.\nconst shouldNormalize = (props: Record<string, any>) => {\n for (const key in props) {\n const item = props[key]\n if (typeof item === 'object' || Array.isArray(item)) return true\n }\n return false\n}\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 // for-in instead of Object.entries.forEach — avoids the entries-tuple\n // array allocation per theme normalization (one outer alloc + one inner\n // [k,v] tuple per property dropped). Ported from vitus-labs `e573e6c4`.\n for (const key in theme) {\n const value = theme[key]\n if (value == null) continue\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","/**\n * Mobile-first cascade optimizer.\n *\n * Given an ordered array of CSS strings (one per breakpoint, smallest first),\n * returns a parallel array where each non-base breakpoint contains only the\n * declarations that DIFFER from the cumulative cascade so far. This relies on\n * mobile-first `@media (min-width: …)` semantics: properties set at smaller\n * breakpoints inherit at larger ones, so re-emitting an unchanged property is\n * pure byte waste.\n *\n * Example:\n * [\"color: red; padding: 0;\", \"color: red; padding: 1rem;\"]\n * → [\"color: red; padding: 0;\", \"padding: 1rem;\"]\n *\n * Top-level declarations are diffed by `prop:value`. Selector blocks\n * (`&:hover { … }`, `@supports { … }`) are treated as opaque and deduped by\n * exact text. Anything inside parens or quoted strings is skipped over so\n * `linear-gradient(red 0%, blue 100%)` and `content: \";\"` parse correctly.\n *\n * Limitations:\n * - shorthand/longhand interaction is not modeled. If breakpoint A sets\n * `padding: 1rem` and breakpoint B sets `padding-top: 0`, both are kept\n * (they have different `prop` keys). If A sets `padding-top: 1rem` and B\n * sets `padding: 1rem`, B's `padding` is emitted because the cascade map\n * has no entry for `padding`. This is correct: B's shorthand RESETS sides\n * A didn't touch, so dropping it would change behaviour.\n * - Nested blocks are deduped only by exact textual match. Two equivalent\n * blocks with different whitespace would both be emitted.\n */\n\ninterface DeclEntry {\n kind: 'decl'\n prop: string\n value: string\n raw: string // canonical \"prop: value;\" form\n}\n\ninterface BlockEntry {\n kind: 'block'\n raw: string // entire \"selector { body }\" or stray block\n}\n\ntype Entry = DeclEntry | BlockEntry\n\n/** Parse a CSS string into top-level declarations and opaque blocks. */\nconst parse = (css: string): Entry[] => {\n const entries: Entry[] = []\n const len = css.length\n\n let depth = 0\n let parenDepth = 0\n let quote = 0 // charCode of active quote (0 if none)\n let segmentStart = 0\n\n const pushSegment = (rawSegment: string) => {\n const trimmed = rawSegment.trim()\n /* v8 ignore next — defensive empty-segment guard */\n if (!trimmed) return\n // pushSegment is only reached for segments that ended with a top-level\n // \";\" — full \"selector { ... }\" blocks are captured separately by the\n // brace walker, so this path always sees declarations (or malformed\n // declaration-shaped fragments).\n /* v8 ignore next — defensive trailing-semicolon strip */\n const text = trimmed.endsWith(';') ? trimmed.slice(0, -1) : trimmed\n const colonIdx = text.indexOf(':')\n /* v8 ignore next 4 — defensive malformed-declaration fallback */\n if (colonIdx <= 0) {\n // No \":\" or starts with \":\" → not a parseable declaration; keep raw\n entries.push({ kind: 'block', raw: `${text};` })\n return\n }\n const prop = text.slice(0, colonIdx).trim()\n const value = text.slice(colonIdx + 1).trim()\n /* v8 ignore next 4 — defensive empty-prop-or-value fallback */\n if (!prop || !value) {\n entries.push({ kind: 'block', raw: `${text};` })\n return\n }\n entries.push({\n kind: 'decl',\n prop,\n value,\n raw: `${prop}: ${value};`,\n })\n }\n\n for (let i = 0; i < len; i++) {\n const code = css.charCodeAt(i)\n\n // Inside a quoted string — skip until matching quote (ignoring escapes)\n if (quote !== 0) {\n if (code === 92 /* \\ */) {\n i++ // skip the next character\n } else if (code === quote) {\n quote = 0\n }\n continue\n }\n\n // Quote start\n if (code === 34 /* \" */ || code === 39 /* ' */) {\n quote = code\n continue\n }\n\n // Parens — content (e.g. linear-gradient args) shouldn't be interpreted\n if (code === 40 /* ( */) {\n parenDepth++\n continue\n }\n if (code === 41 /* ) */) {\n /* v8 ignore next — defensive paren-depth guard */\n if (parenDepth > 0) parenDepth--\n continue\n }\n /* v8 ignore next — defensive paren-content skip */\n if (parenDepth > 0) continue\n\n if (code === 123 /* { */) {\n depth++\n continue\n }\n if (code === 125 /* } */) {\n depth--\n if (depth === 0) {\n // End of a top-level block — capture from segmentStart..i (inclusive)\n const raw = css.slice(segmentStart, i + 1).trim()\n if (raw) entries.push({ kind: 'block', raw })\n segmentStart = i + 1\n }\n continue\n }\n\n if (depth === 0 && code === 59 /* ; */) {\n pushSegment(css.slice(segmentStart, i))\n segmentStart = i + 1\n }\n }\n\n // Trailing segment (no terminating semicolon)\n /* v8 ignore start — defensive trailing-segment + unbalanced-braces handling; CSS input is engine-emitted and balanced */\n if (segmentStart < len) {\n const trailing = css.slice(segmentStart).trim()\n if (trailing) {\n if (depth > 0) {\n // Unbalanced braces — keep the rest as opaque so output isn't lossy\n entries.push({ kind: 'block', raw: trailing })\n } else {\n pushSegment(trailing)\n }\n }\n }\n /* v8 ignore stop */\n\n return entries\n}\n\n/**\n * Apply the mobile-first cascade diff. The first entry passes through\n * unchanged; subsequent entries are pruned to the delta vs. the running\n * cascade (declarations by prop, blocks by exact text match).\n */\nexport const optimizeBreakpointDeltas = (cssStrings: string[]): string[] => {\n if (cssStrings.length <= 1) return cssStrings\n\n const cascadeDecl = new Map<string, string>()\n const cascadeBlocks = new Set<string>()\n const out: string[] = new Array(cssStrings.length)\n\n for (let i = 0; i < cssStrings.length; i++) {\n const css = cssStrings[i]\n if (!css) {\n out[i] = ''\n continue\n }\n\n const entries = parse(css)\n const kept: string[] = []\n\n for (const e of entries) {\n if (e.kind === 'decl') {\n if (cascadeDecl.get(e.prop) !== e.value) {\n kept.push(e.raw)\n cascadeDecl.set(e.prop, e.value)\n }\n } else if (!cascadeBlocks.has(e.raw)) {\n kept.push(e.raw)\n cascadeBlocks.add(e.raw)\n }\n }\n\n out[i] = kept.join(' ')\n }\n\n return out\n}\n\nexport default optimizeBreakpointDeltas\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 /* v8 ignore next 2 — defensive identity + null guards; both arms structurally covered */\n if (a === b) return true\n if (!a || !b) return false\n // for-in + counting avoids the two `Object.keys` array allocations the\n // prior implementation paid on every breakpoint optimization step.\n // Ported from vitus-labs `e573e6c4`; measured upstream: +4.0% on the\n // EQUAL hot path (the common case in steady-state renders).\n let aCount = 0\n for (const key in a) {\n aCount++\n if (a[key] !== b[key]) return false\n }\n let bCount = 0\n for (const _ in b) bCount++\n return aCount === bCount\n}\n\n/**\n * Removes breakpoints whose full-object styles are identical to the\n * previous one. Simple all-or-nothing: if ANY property differs from\n * the previous breakpoint, emit the ENTIRE current breakpoint.\n *\n * This matches the reference implementation (vitus-labs/ui-system) and\n * the original monorepo-migration version (commit 2b7c5876). Previous\n * \"optimizations\" (PRs #159, #208) that tried per-property diffing\n * broke responsive styles in subtle ways — shorthand/longhand CSS\n * property interactions, properties that depend on each other,\n * properties that need to be emitted together to cascade correctly.\n *\n * The all-or-nothing approach is the correct level of deduplication —\n * we skip the breakpoint when it's entirely redundant, and let the\n * browser's CSS cascade handle the rest.\n */\nconst optimizeTheme: OptimizeTheme = ({ theme, breakpoints }) => {\n const result: Record<string, Record<string, unknown>> = {}\n\n for (let i = 0; i < breakpoints.length; i++) {\n const key = breakpoints[i] as string\n const previousBreakpoint = breakpoints[i - 1] as string\n const current = theme[key]\n if (current && (i === 0 || !shallowEqual(theme[previousBreakpoint], current))) {\n result[key] = current\n }\n }\n\n return result\n}\n\nexport default optimizeTheme\n","import { isEmpty, set } from '@pyreon/ui-core'\n\nconst removeUnexpectedKeys = (obj: Record<string, unknown>, keys: string[]) => {\n const result: Record<string, unknown> = {}\n keys.forEach((bp) => {\n const value = obj[bp]\n if (value) {\n result[bp] = value\n }\n })\n return result\n}\n\nexport type TransformTheme = ({\n theme,\n breakpoints,\n}: {\n theme: Record<string, unknown>\n breakpoints: string[]\n}) => any\n\nconst transformTheme: TransformTheme = ({ theme, breakpoints }) => {\n const result = {}\n\n if (isEmpty(theme) || isEmpty(breakpoints)) return result\n\n // for-in + nested for-in avoids the two `Object.entries(...)` array\n // allocations (outer + inner per object value) the prior forEach paid.\n // Same for `value.forEach((child, i) => ...)` → indexed for-loop.\n // Ported from vitus-labs `e573e6c4`.\n for (const key in theme) {\n const value = theme[key]\n if (Array.isArray(value) && value.length > 0) {\n for (let i = 0; i < value.length; i++) {\n const indexBreakpoint = breakpoints[i]\n /* v8 ignore next — defensive null guard; i is bounded by value.length */\n if (indexBreakpoint == null) continue\n set(result, [indexBreakpoint, key], value[i])\n }\n } else if (typeof value === 'object' && value !== null) {\n const obj = value as Record<string, unknown>\n for (const childKey in obj) {\n set(result, [childKey, key], obj[childKey])\n }\n } else if (value != null) {\n const firstBreakpoint = breakpoints[0]\n /* v8 ignore next — defensive null guard; breakpoints array always populated */\n if (firstBreakpoint == null) continue\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 optimizeBreakpointDeltas from './optimizeBreakpointDeltas'\nimport optimizeTheme from './optimizeTheme'\nimport type sortBreakpoints from './sortBreakpoints'\nimport transformTheme from './transformTheme'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\n\n/**\n * Coerce a styles-callback result to a CSS string for delta optimization.\n * Returns null when the engine's result type can't be stringified cleanly\n * (e.g. styled-components / Emotion objects whose default toString() yields\n * \"[object Object]\") — caller falls back to the unoptimized path.\n *\n * Styler's CSSResult provides toString() that resolves with empty props,\n * so any function interpolation that needs render-time props must come from\n * the styles-callback closure (theme is destructured at call time, not\n * resolved later). Verified across the project's styles callbacks.\n */\nconst stringifyResult = (result: unknown): string | null => {\n if (result == null) return ''\n if (typeof result === 'string') return result\n // CSSResult duck-type fast path: has `strings` (TemplateStringsArray) and\n // `values`. We know its toString() resolves to clean CSS, so we can skip\n // the \"[object Foo]\" validation for the common path.\n if (typeof result === 'object' && 'strings' in result && 'values' in result) {\n return String(result)\n }\n // Foreign engine result — coerce and validate. Default\n // Object.prototype.toString → \"[object Foo]\" → bail out so caller can fall\n // back to the unoptimized path.\n const text = String(result)\n return text.includes('[object ') ? null : text\n}\n\ntype CustomTheme = Record<string, unknown>\n\ntype Theme = Partial<{\n rootSize: number\n breakpoints: Record<string, number>\n __PYREON__: Partial<{\n media: ReturnType<typeof createMediaQueries>\n sortedBreakpoints: ReturnType<typeof sortBreakpoints>\n }>\n}> &\n CustomTheme\n\n// Default tightened from `any` to `Partial<Record<string, unknown>>` so\n// un-typed callers (`MakeItResponsiveStyles` with no generic) get strict\n// `unknown` per key — forcing narrowing at the access site. Every shipped\n// caller now passes an explicit theme shape:\n// - coolgrid Container/Row/Col: `Pick<StyledTypes, 'width' | 'extraStyles'>`\n// - elements Wrapper/Content/Text: `ThemeProps` (per helper)\n// The constraint stays `Partial<Record<string, any>>` (not `unknown`) so\n// strict generic arguments with named keys (e.g. `Partial<{ direction:\n// ContentDirection; ... }>`) continue to satisfy it.\nexport type MakeItResponsiveStyles<\n T extends Partial<Record<string, any>> = Partial<Record<string, unknown>>,\n> = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: T\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, unknown> | undefined\n // The trailing `| any` collapsed the whole union to `any`. Every styles\n // callback in the system returns either a `cssFn` template result\n // (`ReturnType<typeof css>`) or an empty string for \"no styles\" — the\n // tightened union captures both shapes exactly.\n}) => ReturnType<typeof css> | string\n\nexport type MakeItResponsive = ({\n theme,\n key,\n css,\n styles,\n normalize,\n}: {\n theme?: CustomTheme\n key?: string\n css: Css\n styles: MakeItResponsiveStyles\n normalize?: boolean\n // Inner props (the `key`-indexed read) carries arbitrary entries the\n // outer styled component spreads — `unknown` is honest at this boundary\n // (callers narrow via the `key` lookup at line 112). The function body\n // returns `''`, a `css`-tagged result, a memoized `unknown[]` (cached\n // per-breakpoint render array), or a fresh `unknown[]` from the\n // `bps.map(...)` path.\n}) => (props: { theme?: Theme; [prop: string]: unknown }) => ReturnType<Css> | string | unknown[]\n\n/**\n * Per-internal-theme cache:\n * - `optimized`: the per-breakpoint theme object (`{ xs: {...}, md: {...} }`)\n * after `normalize → transform → optimize`. Reused as long as the same\n * `sortedBreakpoints` reference is passed in.\n * - `rendered`: memoized FINAL output (array of media-wrapped CSSResults),\n * keyed by the outer `theme` reference. Hit when the same internal theme\n * AND the same outer theme render again — which is the common case when\n * the provider value is stable. Avoids re-running renderStyles +\n * optimizeBreakpointDeltas on every parent re-render.\n */\ninterface ThemeCacheEntry {\n breakpoints: unknown\n optimized: Record<string, Record<string, unknown>>\n rendered?: WeakMap<object, unknown[]> | undefined\n}\n\nconst themeCache = new WeakMap<object, ThemeCacheEntry>()\n\n/**\n * Core responsive engine used by every styled component in the system.\n *\n * Returns a styled-components interpolation function that:\n * 1. Reads the component's theme prop (via `key` or direct `theme`)\n * 2. Without breakpoints → renders plain CSS\n * 3. With breakpoints → normalizes, transforms (property-per-breakpoint →\n * breakpoint-per-property), optimizes (deduplicates identical breakpoints),\n * deltas the per-breakpoint output against the mobile-first cascade\n * (drops re-emitted unchanged declarations), and wraps each non-empty\n * breakpoint's deltas in the appropriate `@media` query. Falls back to\n * the unoptimized path if any breakpoint's render result can't be\n * cleanly stringified.\n */\nconst makeItResponsive: MakeItResponsive =\n ({ theme: customTheme, key = '', css, styles, normalize = true }) =>\n ({ theme = {}, ...props }) => {\n // `props[key]` carries a styled-component-injected theme prop whose\n // shape is determined by the styles callback's generic — opaque from\n // here. The outer `MakeItResponsive` props index signature is\n // `[prop: string]: unknown` (tightened from `any`); cast to the shape\n // the downstream pipeline expects so the rest of the body retains\n // strict typing without per-call casts.\n const internalTheme = (customTheme || props[key]) as Record<string, unknown>\n\n // if no theme is defined, return empty object\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 there are no breakpoints, return just standard css\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 const entry = themeCache.get(internalTheme)\n const breakpointsMatch = entry?.breakpoints === sortedBreakpoints\n\n // Full-render cache: same internal theme + same outer theme → return\n // the previous render's output verbatim. CSSResult instances are\n // immutable so reusing them is safe.\n if (entry && breakpointsMatch && entry.rendered) {\n const memoized = entry.rendered.get(theme as object)\n if (memoized) return memoized\n }\n\n if (entry && breakpointsMatch) {\n optimizedTheme = entry.optimized\n } else {\n let helperTheme = internalTheme\n\n /* v8 ignore start — defensive `sortedBreakpoints ?? []` fallbacks; breakpoints always set in real usage */\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 /* v8 ignore stop */\n\n themeCache.set(internalTheme, {\n breakpoints: sortedBreakpoints,\n optimized: optimizedTheme,\n // Preserve any pre-existing rendered cache when re-entering with a\n // changed sortedBreakpoints reference — usually unreachable because\n // breakpoints come from a stable provider value, but the explicit\n // handling avoids a memory cliff in tests / HMR.\n rendered: entry?.rendered,\n })\n }\n\n /* v8 ignore next — defensive `sortedBreakpoints ?? []` fallback */\n const bps = sortedBreakpoints ?? []\n\n // Resolve each per-breakpoint render to a string so the delta optimizer\n // can diff at the property level. If any breakpoint's result can't be\n // cleanly stringified (foreign engine result), fall back to the original\n // unoptimized path that lets the engine resolve interpolations itself.\n const renderedTexts: (string | null)[] = bps.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n /* v8 ignore next — defensive null-theme/media guard */\n if (!breakpointTheme || !media) return ''\n return stringifyResult(renderStyles(breakpointTheme))\n })\n\n const canOptimize = renderedTexts.every((t) => t !== null)\n let result: unknown[]\n if (canOptimize) {\n const deltas = optimizeBreakpointDeltas(renderedTexts as string[])\n result = bps.map((item: string, i: number) => {\n const cssText = deltas[i]\n /* v8 ignore next — defensive null-cssText/media guard */\n if (!cssText || !media) return ''\n return (media as Record<string, any>)[item]`${cssText}`\n })\n } else {\n result = bps.map((item: string) => {\n const breakpointTheme = optimizedTheme[item]\n /* v8 ignore next — defensive null-theme/media guard */\n if (!breakpointTheme || !media) return ''\n const r = renderStyles(breakpointTheme)\n return (media as Record<string, any>)[item]`\n ${r};\n `\n })\n }\n\n // Memoize the final rendered output by outer theme reference. Stable\n // theme + stable internal theme → future renders return immediately.\n // Invariant: by this point themeCache always has an entry for\n // internalTheme — earlier paths either hit the rendered-cache and\n // returned, or wrote one via themeCache.set above.\n const cacheEntry = themeCache.get(internalTheme)\n if (cacheEntry) {\n if (!cacheEntry.rendered) cacheEntry.rendered = new WeakMap()\n cacheEntry.rendered.set(theme as object, result)\n }\n\n return result\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 /* v8 ignore next — defensive `?? 0` fallback; keys come from breakpoints' own keys */\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 { nativeCompat, provide } from '@pyreon/core'\nimport { ThemeContext } from '@pyreon/styler'\nimport { Provider as CoreProvider, context } from '@pyreon/ui-core'\nimport type { PyreonTheme } from './enrichTheme'\nimport { enrichTheme } from './enrichTheme'\n\nexport type TProvider = {\n theme: PyreonTheme\n children?: VNode | null\n}\n\n/**\n * @internal Low-level provider — use `PyreonUI` from `@pyreon/ui-core` instead.\n *\n * Unistyle Provider — wraps the core Provider and enriches the theme\n * with pre-computed sorted breakpoints and media-query tagged-template\n * helpers consumed by `makeItResponsive`.\n *\n * @deprecated Prefer `<PyreonUI theme={theme} mode=\"light\">` which handles\n * all three context layers (styler, core, mode) in one component.\n */\nfunction Provider(props: TProvider): VNode | null {\n const { theme, children } = props\n\n const enrichedTheme = enrichTheme(theme)\n\n // Provide enriched theme to both the ui-core context (for rocketstyle/elements)\n // AND the styler ThemeContext (for styled() components and makeItResponsive).\n // Without this, styled() components receive an empty theme and all responsive\n // styles are skipped (@media queries produce NaN values).\n // ThemeContext is a ReactiveContext — provide an accessor.\n provide(ThemeContext, () => enrichedTheme)\n\n return CoreProvider({ theme: enrichedTheme, children }) as VNode | null\n}\n\n// Mark as native — invoked by PyreonUI internally; needs Pyreon's setup\n// frame for provide(ThemeContext, ...) to reach descendants.\nnativeCompat(Provider)\n\nexport { context }\n\nexport default Provider\n","const camelToKebab = (s: string): string => s.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)\n\nexport default camelToKebab\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 /* v8 ignore next — defensive isNotValue guard; covered by earlier checks */\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 /* v8 ignore next — defensive unit fallback */\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\n// Impl args tightened from `any[]` to `unknown[]` to match the declared\n// `GetValueOf`. `find` returns `unknown` after the filter; cast to the\n// declared return shape — the runtime contract is \"first non-undefined,\n// non-null value\", which callers (`values`) handle for any concrete shape.\nconst getValueOf: GetValueOf = (...args: unknown[]) =>\n args.find((v) => typeof v !== 'undefined' && v !== null) as number | string\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 camelToKebab from './styles/styles/camelToKebab'\nimport type { Value as ValueFn } from './units'\nimport { value } from './units'\n\n/** CSS units accepted by the `value()` converter (re-derived, not duplicated). */\nexport type CssVarsUnit = NonNullable<Parameters<ValueFn>[2]>\n\n/**\n * Per-top-level-key emission policy.\n * - a CSS unit (`'rem'`, `'px'`, …) — unitless numbers under that key are\n * converted via `value(raw, rootSize, unit)` at EMISSION time, so the\n * custom property already carries its final unit (`8` → `0.5rem`).\n * - `'none'` — the raw value is emitted verbatim (unitless numbers stay\n * unitless: `lineHeight`, `fontWeight`, `zIndex`, ratio scales, …).\n */\nexport type CssVarsUnitPolicy = CssVarsUnit | 'none'\n\n/**\n * Top-level theme keys that are never converted to CSS variables.\n * `breakpoints` + `rootSize` are consumed by JS at build/render time\n * (`@media` queries cannot read `var()`); `__PYREON__` carries the\n * `enrichTheme()` runtime helpers.\n */\nexport const CSS_VARS_DEFAULT_EXCLUDE = ['breakpoints', 'rootSize', '__PYREON__'] as const\n\ntype DefaultExcluded = (typeof CSS_VARS_DEFAULT_EXCLUDE)[number]\n\n/**\n * Default emission units for the conventional Pyreon theme keys —\n * mirrors how the styles pipeline consumes each key today (`spacing`\n * flows through `edge()`/`calc()` as rem; `borderWidth` through the\n * edge shorthand as px). Keys not listed here default to `'none'`.\n */\nconst DEFAULT_UNITS: Readonly<Record<string, CssVarsUnitPolicy>> = {\n spacing: 'rem',\n fontSize: 'rem',\n headingSize: 'rem',\n elementSize: 'rem',\n borderRadius: 'rem',\n borderWidth: 'px',\n}\n\nconst DEFAULT_PREFIX = 'px'\nconst DEFAULT_ROOT_SIZE = 16\n\nexport interface ThemeToCssVarsOptions<Ex extends readonly string[] = typeof CSS_VARS_DEFAULT_EXCLUDE> {\n /** Variable-name prefix: `--<prefix>-<path>`. Default `'px'` (Pyreon). */\n prefix?: string | undefined\n /** Top-level keys to keep raw (replaces the default list). */\n exclude?: Ex | undefined\n /**\n * Per-top-level-key unit policy overrides, merged over the defaults\n * (`spacing`/`fontSize`/`headingSize`/`elementSize`/`borderRadius` → rem,\n * `borderWidth` → px, everything else `'none'`).\n */\n units?: Record<string, CssVarsUnitPolicy> | undefined\n /** Root font size for px→rem conversion. Default `theme.rootSize ?? 16`. */\n rootSize?: number | undefined\n}\n\n/** A leaf is tokenized only when it is a non-empty string or a finite number. */\ntype VarifyNode<V> = V extends string | number\n ? string\n : V extends readonly unknown[] | ((...args: never[]) => unknown) | boolean | null | undefined\n ? V\n : V extends object\n ? { [K in keyof V]: VarifyNode<V[K]> }\n : V\n\n/**\n * The same shape as the input theme with every eligible leaf replaced by\n * a `'var(--px-…)'` reference string. Excluded top-level keys keep their\n * original types.\n */\nexport type CssVarsTheme<T, Ex extends string = DefaultExcluded> = {\n [K in keyof T]: K extends Ex ? T[K] : VarifyNode<T[K]>\n}\n\nexport interface ThemeToCssVarsResult<T, Ex extends string = DefaultExcluded> {\n /** Same-shape theme tree; eligible leaves are `var(--px-…)` strings. */\n vars: CssVarsTheme<T, Ex>\n /** A ready-to-inject `:root { … }` block (empty string when no vars). */\n css: string\n /**\n * `varName → emitted value` (units already baked). Consumers that\n * cannot evaluate `var()` (PDF/DOCX export, devtools) resolve here.\n */\n registry: ReadonlyMap<string, string>\n}\n\nconst sanitizeSegment = (seg: string): string =>\n camelToKebab(seg)\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-')\n .replace(/^-+/, '')\n\nconst isTokenizableLeaf = (v: unknown): v is string | number =>\n (typeof v === 'string' && v !== '') || (typeof v === 'number' && Number.isFinite(v))\n\nconst isWalkableObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v)\n\n/** Emit a leaf value with its unit baked (strings with units pass through `value()` untouched). */\nconst emitLeaf = (\n raw: string | number,\n policy: CssVarsUnitPolicy,\n rootSize: number,\n): string => {\n if (policy === 'none') return String(raw)\n const converted = value(raw, rootSize, policy)\n /* v8 ignore next — value() only returns null for empty input, which isTokenizableLeaf excludes */\n return converted == null ? String(raw) : String(converted)\n}\n\ninterface CacheEntry {\n optionsKey: string\n result: ThemeToCssVarsResult<object, string>\n}\n\n// Per-theme-identity memo — themes are stable singletons, so repeated\n// calls (provider re-mounts, multiple consumers) return the SAME result\n// object. Identity stability matters downstream: styler / rocketstyle\n// caches key off theme object identity.\nconst _cache = new WeakMap<object, CacheEntry[]>()\n\nconst optionsSignature = (\n prefix: string,\n exclude: readonly string[],\n units: Record<string, CssVarsUnitPolicy>,\n rootSize: number,\n): string =>\n JSON.stringify([\n prefix,\n [...exclude].sort(),\n Object.keys(units)\n .sort()\n .map((k) => [k, units[k]]),\n rootSize,\n ])\n\n/**\n * Autogenerate CSS custom properties from a plain theme JSON.\n *\n * Walks the theme and returns:\n * - `vars` — the same-shape tree with every eligible leaf replaced by a\n * `'var(--px-<path>)'` string. Plain strings, so they flow through the\n * entire unistyle value pipeline (`value()` / `values()` / `edge` /\n * `borderRadius` / `styles()` / `makeItResponsive`) untouched.\n * - `css` — the `:root { … }` declaration block to inject once.\n * - `registry` — `varName → emitted value` for consumers that cannot\n * evaluate `var()` (document export, devtools).\n *\n * Units are baked at emission using the SAME `value()` conversion the\n * pipeline applies today: `spacing.small: 8` emits\n * `--px-spacing-small: 0.5rem`, so themes stay authored in pixels and\n * downstream consumers never convert a var. Unitless scales\n * (`lineHeight`, `fontWeight`, `zIndex`, custom ratio keys) emit raw\n * numbers so `calc(var(--a) * var(--b))` multiplication stays valid.\n *\n * Not tokenized (kept raw in `vars`): excluded top-level keys\n * (`breakpoints` / `rootSize` — `@media` queries cannot read `var()`),\n * arrays, functions, booleans, `null`/`undefined`, empty strings and\n * non-finite numbers. Note CSS also forbids `var()` inside `url(…)`, so\n * never tokenize values destined for `backgroundImage`.\n *\n * Pure — performs no injection; pass `css` to your style sink\n * (`createGlobalStyle`, `sheet.injectRules`, a `<style>` tag).\n *\n * @example\n * const theme = { rootSize: 16, spacing: { small: 8 }, ratio: { medium: 1.5 } }\n * const { vars, css } = themeToCssVars(theme)\n * vars.spacing.small // 'var(--px-spacing-small)'\n * vars.ratio.medium // 'var(--px-ratio-medium)'\n * css // ':root {\\n --px-spacing-small: 0.5rem;\\n --px-ratio-medium: 1.5;\\n}'\n * // proportional sizing is native CSS:\n * const width = `calc(${vars.spacing.small} * ${vars.ratio.medium})`\n */\nexport function themeToCssVars<\n T extends object,\n const Ex extends readonly string[] = typeof CSS_VARS_DEFAULT_EXCLUDE,\n>(theme: T, options?: ThemeToCssVarsOptions<Ex>): ThemeToCssVarsResult<T, Ex[number]> {\n const prefix = options?.prefix ?? DEFAULT_PREFIX\n const exclude: readonly string[] = options?.exclude ?? CSS_VARS_DEFAULT_EXCLUDE\n const units: Record<string, CssVarsUnitPolicy> = { ...DEFAULT_UNITS, ...options?.units }\n const themeRootSize = (theme as { rootSize?: unknown }).rootSize\n const rootSize =\n options?.rootSize ?? (typeof themeRootSize === 'number' ? themeRootSize : DEFAULT_ROOT_SIZE)\n\n const optionsKey = optionsSignature(prefix, exclude, units, rootSize)\n const cached = _cache.get(theme)\n if (cached) {\n const hit = cached.find((e) => e.optionsKey === optionsKey)\n if (hit) return hit.result as ThemeToCssVarsResult<T, Ex[number]>\n }\n\n const excludeSet = new Set(exclude)\n const registry = new Map<string, string>()\n const sources = new Map<string, string>()\n\n const walk = (\n node: Record<string, unknown>,\n out: Record<string, unknown>,\n segs: string[],\n policy: CssVarsUnitPolicy,\n ): void => {\n for (const key of Object.keys(node)) {\n const v = node[key]\n const isTop = segs.length === 0\n\n if (isTop && excludeSet.has(key)) {\n out[key] = v\n continue\n }\n\n const keyPolicy = isTop ? (units[key] ?? 'none') : policy\n\n if (isWalkableObject(v)) {\n const child: Record<string, unknown> = {}\n out[key] = child\n walk(v, child, [...segs, key], keyPolicy)\n continue\n }\n\n if (!isTokenizableLeaf(v)) {\n out[key] = v\n continue\n }\n\n const path = [...segs, key]\n const varName = `--${prefix}-${path.map(sanitizeSegment).join('-')}`\n const pathStr = path.join('.')\n const existingPath = sources.get(varName)\n if (existingPath !== undefined && existingPath !== pathStr) {\n throw new Error(\n `[Pyreon] themeToCssVars: variable name collision — '${varName}' is produced by both ` +\n `'${existingPath}' and '${pathStr}' (kebab-case normalization collapsed them). ` +\n `Rename one of the theme keys.`,\n )\n }\n sources.set(varName, pathStr)\n registry.set(varName, emitLeaf(v, keyPolicy, rootSize))\n out[key] = `var(${varName})`\n }\n }\n\n const vars: Record<string, unknown> = {}\n walk(theme as Record<string, unknown>, vars, [], 'none')\n\n const css =\n registry.size === 0\n ? ''\n : `:root {\\n${[...registry.entries()].map(([n, v]) => ` ${n}: ${v};`).join('\\n')}\\n}`\n\n const result: ThemeToCssVarsResult<T, Ex[number]> = {\n vars: vars as CssVarsTheme<T, Ex[number]>,\n css,\n registry,\n }\n\n const entries = cached ?? []\n entries.push({ optionsKey, result: result as ThemeToCssVarsResult<object, string> })\n if (!cached) _cache.set(theme, entries)\n\n return result\n}\n\n/**\n * Resolve `var(--…)` references in a value back to their raw emitted values\n * using a `themeToCssVars` registry — for consumers that cannot evaluate\n * CSS custom properties (document export to PDF/DOCX/email, devtools,\n * non-CSS render targets).\n *\n * - Strings have every `var(--name)` / `var(--name, fallback)` occurrence\n * substituted from the registry; unknown names fall back to the inline\n * fallback when present, else stay verbatim.\n * - Non-strings pass through untouched.\n * - `calc(…)` expressions are NOT evaluated — only their var() references\n * are inlined (`calc(0.5rem * 1.5)`). Non-CSS targets needing a single\n * number must evaluate the calc themselves or avoid calc-composed values.\n *\n * @example\n * const { registry } = themeToCssVars(theme)\n * resolveCssVarReferences('var(--px-spacing-small)', registry) // '0.5rem'\n * resolveCssVarReferences('calc(var(--px-spacing-small) * 2)', registry) // 'calc(0.5rem * 2)'\n * resolveCssVarReferences('var(--px-missing, 1rem)', registry) // '1rem'\n */\nexport function resolveCssVarReferences<T>(input: T, registry: ReadonlyMap<string, string>): T {\n if (typeof input !== 'string') return input\n if (input.indexOf('var(') === -1) return input\n // Registry values are literals (themeToCssVars bakes units at emission),\n // but inline fallbacks may themselves contain var() — re-scan until stable,\n // bounded to defend against pathological self-references.\n let out = input as string\n for (let pass = 0; pass < 10; pass++) {\n const next = resolveVarPass(out, registry)\n if (next === out) break\n out = next\n }\n return out as T\n}\n\nconst isNameChar = (c: string): boolean =>\n (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '-'\n\n/**\n * ONE left-to-right resolution pass over `s` — a LINEAR character scan (no\n * regex on the input, so no polynomial-ReDoS surface; mirrors the `font.ts`\n * `splitSubsetBlocks` precedent). Finds each `var(name[, fallback])`, reading\n * the fallback up to its matching close paren with paren-depth tracking\n * (handles `var(--x, calc(…))`), and replaces it with the registry value,\n * else the fallback, else leaves it verbatim and advances past it.\n */\nfunction resolveVarPass(s: string, registry: ReadonlyMap<string, string>): string {\n let out = ''\n let i = 0\n while (i < s.length) {\n const idx = s.indexOf('var(', i)\n if (idx === -1) {\n out += s.slice(i)\n break\n }\n out += s.slice(i, idx)\n let j = idx + 4 // past 'var('\n while (j < s.length && s[j] === ' ') j++\n const nameStart = j\n while (j < s.length && isNameChar(s[j]!)) j++\n const name = s.slice(nameStart, j)\n while (j < s.length && s[j] === ' ') j++\n let fallback: string | undefined\n if (s[j] === ',') {\n j++\n let depth = 0\n const fbStart = j\n while (j < s.length) {\n const c = s[j]\n if (c === '(') depth++\n else if (c === ')') {\n if (depth === 0) break\n depth--\n }\n j++\n }\n fallback = s.slice(fbStart, j).trim()\n }\n if (s[j] !== ')') {\n // Not a well-formed var() — emit `var(` verbatim and continue scanning\n // after it (never loops: i strictly advances).\n out += 'var('\n i = idx + 4\n continue\n }\n const end = j + 1 // past ')'\n out += registry.get(name) ?? fallback ?? s.slice(idx, end)\n i = end\n }\n return out\n}\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\n// Each field is optional — the function body's first check\n// (`if (...!direction || !alignX || !alignY) return null`) already treats\n// any falsy/undefined input as a no-op. Aligning the type with the runtime\n// contract lets typed-theme callers (e.g. `MakeItResponsiveStyles<ThemeProps>`\n// where ThemeProps fields are optional to match the per-breakpoint resolved\n// scalar shape) pass values through without redundant casts.\nexport type AlignContent = ({\n direction,\n alignX,\n alignY,\n}: {\n direction?: AlignContentDirectionKeys | undefined\n alignX?: AlignContentAlignXKeys | undefined\n alignY?: AlignContentAlignYKeys | undefined\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 // Direct comparisons avoid the per-call 2-element array allocation that\n // `['inline', 'reverseInline'].includes(direction)` paid. Hot path: fires\n // for every styled component with a `direction` prop. Ported from\n // vitus-labs `e573e6c4`.\n const isReverted = direction === 'inline' || direction === 'reverseInline'\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","import { value } from '../../units'\n\ntype PropertyValue = string | number | null | undefined\ntype PV = PropertyValue\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype CornerValues = {\n full: PV\n top: PV\n bottom: PV\n left: PV\n right: PV\n topLeft: PV\n topRight: PV\n bottomLeft: PV\n bottomRight: PV\n}\n\nconst hasAnyValue = (v: CornerValues) =>\n isValidValue(v.full) ||\n isValidValue(v.top) ||\n isValidValue(v.bottom) ||\n isValidValue(v.left) ||\n isValidValue(v.right) ||\n isValidValue(v.topLeft) ||\n isValidValue(v.topRight) ||\n isValidValue(v.bottomLeft) ||\n isValidValue(v.bottomRight)\n\nconst resolveCorners = (v: CornerValues) => {\n const corners: PV[] = [v.full, v.full, v.full, v.full]\n if (isValidValue(v.top)) {\n corners[0] = v.top\n corners[1] = v.top\n }\n if (isValidValue(v.bottom)) {\n corners[2] = v.bottom\n corners[3] = v.bottom\n }\n if (isValidValue(v.left)) {\n corners[0] = v.left\n corners[3] = v.left\n }\n if (isValidValue(v.right)) {\n corners[1] = v.right\n corners[2] = v.right\n }\n if (isValidValue(v.topLeft)) corners[0] = v.topLeft\n if (isValidValue(v.topRight)) corners[1] = v.topRight\n if (isValidValue(v.bottomRight)) corners[2] = v.bottomRight\n if (isValidValue(v.bottomLeft)) corners[3] = v.bottomLeft\n return corners\n}\n\nconst formatShorthand = (corners: PV[], calc: (p: PV) => any) => {\n const [tl, tr, br, bl] = corners\n if (corners.every((val, _, arr) => val === arr[0])) return `border-radius: ${calc(tl)};`\n if (tl === br && tr === bl) return `border-radius: ${calc(tl)} ${calc(tr)};`\n if (tl && tr === bl && br) return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)};`\n return `border-radius: ${calc(tl)} ${calc(tr)} ${calc(br)} ${calc(bl)};`\n}\n\nconst CORNER_CSS = [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n] as const\n\nconst formatIndividual = (corners: PV[], calc: (p: PV) => any) => {\n let output = ''\n for (let i = 0; i < corners.length; i++) {\n if (isValidValue(corners[i])) output += `${CORNER_CSS[i]}: ${calc(corners[i])};`\n }\n return output\n}\n\nexport type BorderRadius = (rootSize?: number) => (props: CornerValues) => string | null\n\nconst borderRadius: BorderRadius = (rootSize) => (props) => {\n if (!hasAnyValue(props)) return null\n const calc = (param: PV) => value(param, rootSize)\n const corners = resolveCorners(props)\n if (corners.every((val) => isValidValue(val))) return formatShorthand(corners, calc)\n return formatIndividual(corners, calc)\n}\n\nexport default borderRadius\n","import { value } from '../../units'\n\ntype CssUnits =\n | 'px'\n | 'rem'\n | '%'\n | 'em'\n | 'ex'\n | 'cm'\n | 'mm'\n | 'in'\n | 'pt'\n | 'pc'\n | 'ch'\n | 'vh'\n | 'vw'\n | 'vmin'\n | 'vmax'\n\nconst isValidValue = (v: unknown) => !!v || v === 0\n\ntype Property = 'inset' | 'margin' | 'padding' | 'border-width' | 'border-style' | 'border-color'\ntype Value = string | number | null | undefined\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ntype EdgeValues = {\n full: Value\n x: Value\n y: Value\n top: Value\n left: Value\n right: Value\n bottom: Value\n}\n\ntype Definitions = Record<Property, { unit?: CssUnits; edgeCss: (side: Side) => string }>\n\nconst definitions: Definitions = {\n inset: { unit: 'rem', edgeCss: (side) => side },\n margin: { unit: 'rem', edgeCss: (side) => `margin-${side}` },\n padding: { unit: 'rem', edgeCss: (side) => `padding-${side}` },\n 'border-width': { unit: 'px', edgeCss: (side) => `border-${side}-width` },\n 'border-style': { edgeCss: (side) => `border-${side}-style` },\n 'border-color': { edgeCss: (side) => `border-${side}-color` },\n}\n\nconst hasAnyValue = (vals: EdgeValues) =>\n isValidValue(vals.top) ||\n isValidValue(vals.bottom) ||\n isValidValue(vals.left) ||\n isValidValue(vals.right) ||\n isValidValue(vals.x) ||\n isValidValue(vals.y) ||\n isValidValue(vals.full)\n\nconst resolveSides = ({ full, x, y, top, left, right, bottom }: EdgeValues) => {\n const sides: Value[] = [full, full, full, full]\n if (isValidValue(x)) {\n sides[1] = x\n sides[3] = x\n }\n if (isValidValue(y)) {\n sides[0] = y\n sides[2] = y\n }\n if (isValidValue(top)) sides[0] = top\n if (isValidValue(right)) sides[1] = right\n if (isValidValue(bottom)) sides[2] = bottom\n if (isValidValue(left)) sides[3] = left\n return sides\n}\n\nconst formatShorthand = (property: Property, sides: Value[], calc: (v: Value) => Value) => {\n const [t, r, b, l] = sides\n if (sides.every((val, _, arr) => val === arr[0])) return `${property}: ${calc(t)};`\n if (t === b && r === l) return `${property}: ${calc(t)} ${calc(r)};`\n if (t && r === l && b) return `${property}: ${calc(t)} ${calc(r)} ${calc(b)};`\n return `${property}: ${calc(t)} ${calc(r)} ${calc(b)} ${calc(l)};`\n}\n\nconst formatIndividual = (\n sides: Value[],\n edgeCss: (side: Side) => string,\n calc: (v: Value) => Value,\n) => {\n const [t, r, b, l] = sides\n let output = ''\n if (isValidValue(t)) output += `${edgeCss('top')}: ${calc(t)};`\n if (isValidValue(b)) output += `${edgeCss('bottom')}: ${calc(b)};`\n if (isValidValue(l)) output += `${edgeCss('left')}: ${calc(l)};`\n if (isValidValue(r)) output += `${edgeCss('right')}: ${calc(r)};`\n return output\n}\n\nexport type Edge = (rootSize?: number) => (property: Property, values: EdgeValues) => string | null\n\nconst edge: Edge =\n (rootSize = 16) =>\n (property, values) => {\n if (!hasAnyValue(values)) return null\n const { unit, edgeCss } = definitions[property]\n const calc = (param: Value) => (unit ? value(param, rootSize, unit) : param)\n const sides = resolveSides(values)\n if (sides.every((val) => isValidValue(val))) return formatShorthand(property, sides, calc)\n return formatIndividual(sides, edgeCss, calc)\n }\n\nexport default edge\n","import type { Values } from '../../units/values'\nimport type { BorderRadius } from '../shorthands/borderRadius'\nimport type { Edge } from '../shorthands/edge'\nimport type { PropertyDescriptor } from './propertyMap'\nimport type { InnerTheme } from './types'\n\ntype Css = (strings: TemplateStringsArray, ...values: any[]) => any\ntype Calc = (...params: any[]) => ReturnType<Values>\n\n/** Mirrors the Value / PropertyValue types used by edge and borderRadius shorthands. */\ntype Value = string | number | null | undefined\n\nconst toCssDecl = (css: string, v: unknown) => (v == null ? '' : `${css}: ${v};`)\n\n/**\n * Converts a single property descriptor + theme values into a CSS fragment.\n *\n * - `simple` — pass-through (no unit conversion)\n * - `convert` — number→rem via `calc()`\n * - `convert_fallback` — picks first non-null from multiple theme keys, then converts\n * - `edge` — delegates to the edge shorthand (margin, padding, inset, border-*)\n * - `border_radius` — delegates to the border-radius shorthand\n * - `special` — one-off logic (fullScreen, backgroundImage url wrapping, animation combo, etc.)\n *\n * IMPORTANT: special cases MUST return `css` tagged-template results,\n * NOT plain strings. The caller (styles/index.ts) embeds these in another\n * `css` template, and the interpolation chain requires template results\n * for correct nesting of pseudo-selectors, media queries, and @layer\n * wrapping. A previous \"optimization\" returned plain strings which broke\n * responsive styles, hover states, and media-query generation.\n */\nconst processSpecial = (\n d: Extract<PropertyDescriptor, { kind: 'special' }>,\n t: InnerTheme,\n css: Css,\n): string | ReturnType<typeof css> => {\n switch (d.id) {\n case 'fullScreen':\n if (!t.fullScreen) return ''\n return css`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n `\n\n case 'backgroundImage':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.backgroundImage) return ''\n return css`\n background-image: url(${t.backgroundImage});\n `\n\n case 'animation': {\n const parts = [t.keyframe, t.animation].filter(Boolean).join(' ')\n /* v8 ignore next — defensive empty-parts ternary */\n return parts ? `animation: ${parts};` : ''\n }\n\n case 'hideEmpty':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.hideEmpty) return ''\n return css`\n &:empty {\n display: none;\n }\n `\n\n case 'clearFix':\n /* v8 ignore next — defensive empty-prop guard */\n if (!t.clearFix) return ''\n return css`\n &::after {\n clear: both;\n content: '';\n display: table;\n }\n `\n\n case 'extendCss':\n /* v8 ignore next — defensive `?? ''` fallback */\n return (t.extendCss as string | undefined) ?? ''\n\n default:\n return ''\n }\n}\n\nconst processDescriptor = (\n d: PropertyDescriptor,\n t: InnerTheme,\n css: Css,\n calc: Calc,\n shorthand: ReturnType<Edge>,\n borderRadiusFn: ReturnType<BorderRadius>,\n): string | ReturnType<typeof css> => {\n switch (d.kind) {\n case 'simple':\n return toCssDecl(d.css, t[d.key])\n\n case 'convert':\n return toCssDecl(d.css, calc(t[d.key]))\n\n case 'convert_fallback':\n return toCssDecl(d.css, calc(...d.keys.map((k) => t[k])))\n\n case 'edge':\n return (\n shorthand(d.property, {\n full: t[d.keys.full] as Value,\n x: t[d.keys.x] as Value,\n y: t[d.keys.y] as Value,\n top: t[d.keys.top] as Value,\n left: t[d.keys.left] as Value,\n bottom: t[d.keys.bottom] as Value,\n right: t[d.keys.right] as Value,\n }) ?? ''\n )\n\n case 'border_radius':\n return (\n borderRadiusFn({\n full: t[d.keys.full] as Value,\n top: t[d.keys.top] as Value,\n bottom: t[d.keys.bottom] as Value,\n left: t[d.keys.left] as Value,\n right: t[d.keys.right] as Value,\n topLeft: t[d.keys.topLeft] as Value,\n topRight: t[d.keys.topRight] as Value,\n bottomLeft: t[d.keys.bottomLeft] as Value,\n bottomRight: t[d.keys.bottomRight] as Value,\n }) ?? ''\n )\n\n case 'special':\n return processSpecial(d, t, css)\n }\n}\n\nexport default processDescriptor\n","import type { InnerTheme } from './types'\n\ntype EdgeProperty =\n | 'inset'\n | 'margin'\n | 'padding'\n | 'border-width'\n | 'border-style'\n | 'border-color'\n\ntype EdgeKeys = {\n full: keyof InnerTheme\n x: keyof InnerTheme\n y: keyof InnerTheme\n top: keyof InnerTheme\n left: keyof InnerTheme\n bottom: keyof InnerTheme\n right: keyof InnerTheme\n}\n\ntype BorderRadiusKeys = {\n full: keyof InnerTheme\n top: keyof InnerTheme\n bottom: keyof InnerTheme\n left: keyof InnerTheme\n right: keyof InnerTheme\n topLeft: keyof InnerTheme\n topRight: keyof InnerTheme\n bottomLeft: keyof InnerTheme\n bottomRight: keyof InnerTheme\n}\n\nexport type PropertyDescriptor =\n | { kind: 'simple'; css: string; key: keyof InnerTheme }\n | { kind: 'convert'; css: string; key: keyof InnerTheme }\n | { kind: 'convert_fallback'; css: string; keys: (keyof InnerTheme)[] }\n | { kind: 'edge'; property: EdgeProperty; keys: EdgeKeys }\n | { kind: 'border_radius'; keys: BorderRadiusKeys }\n | { kind: 'special'; id: string }\n\nconst propertyMap: PropertyDescriptor[] = [\n // SPECIAL: fullScreen\n { kind: 'special', id: 'fullScreen' },\n\n // POSITION\n { kind: 'simple', css: 'all', key: 'all' },\n { kind: 'simple', css: 'display', key: 'display' },\n { kind: 'simple', css: 'position', key: 'position' },\n { kind: 'simple', css: 'box-sizing', key: 'boxSizing' },\n { kind: 'simple', css: 'float', key: 'float' },\n\n // INSET\n {\n kind: 'edge',\n property: 'inset',\n keys: {\n full: 'inset',\n x: 'insetX',\n y: 'insetY',\n top: 'top',\n left: 'left',\n bottom: 'bottom',\n right: 'right',\n },\n },\n\n // SIZING\n { kind: 'convert_fallback', css: 'width', keys: ['width', 'size'] },\n { kind: 'convert_fallback', css: 'min-width', keys: ['minWidth', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-width', keys: ['maxWidth', 'maxSize'] },\n { kind: 'convert_fallback', css: 'height', keys: ['height', 'size'] },\n { kind: 'convert_fallback', css: 'min-height', keys: ['minHeight', 'minSize'] },\n { kind: 'convert_fallback', css: 'max-height', keys: ['maxHeight', 'maxSize'] },\n { kind: 'convert', css: 'gap', key: 'gap' },\n { kind: 'simple', css: 'aspect-ratio', key: 'aspectRatio' },\n { kind: 'simple', css: 'contain', key: 'contain' },\n { kind: 'simple', css: 'container-type', key: 'containerType' },\n { kind: 'simple', css: 'container-name', key: 'containerName' },\n { kind: 'simple', css: 'container', key: 'container' },\n { kind: 'convert', css: 'inline-size', key: 'inlineSize' },\n { kind: 'convert', css: 'block-size', key: 'blockSize' },\n { kind: 'convert', css: 'min-inline-size', key: 'minInlineSize' },\n { kind: 'convert', css: 'min-block-size', key: 'minBlockSize' },\n { kind: 'convert', css: 'max-inline-size', key: 'maxInlineSize' },\n { kind: 'convert', css: 'max-block-size', key: 'maxBlockSize' },\n\n // SPACING\n {\n kind: 'edge',\n property: 'margin',\n keys: {\n full: 'margin',\n x: 'marginX',\n y: 'marginY',\n top: 'marginTop',\n left: 'marginLeft',\n bottom: 'marginBottom',\n right: 'marginRight',\n },\n },\n {\n kind: 'edge',\n property: 'padding',\n keys: {\n full: 'padding',\n x: 'paddingX',\n y: 'paddingY',\n top: 'paddingTop',\n left: 'paddingLeft',\n bottom: 'paddingBottom',\n right: 'paddingRight',\n },\n },\n\n // Logical spacing\n { kind: 'convert', css: 'margin-inline', key: 'marginInline' },\n { kind: 'convert', css: 'margin-inline-start', key: 'marginInlineStart' },\n { kind: 'convert', css: 'margin-inline-end', key: 'marginInlineEnd' },\n { kind: 'convert', css: 'margin-block', key: 'marginBlock' },\n { kind: 'convert', css: 'margin-block-start', key: 'marginBlockStart' },\n { kind: 'convert', css: 'margin-block-end', key: 'marginBlockEnd' },\n { kind: 'convert', css: 'padding-inline', key: 'paddingInline' },\n { kind: 'convert', css: 'padding-inline-start', key: 'paddingInlineStart' },\n { kind: 'convert', css: 'padding-inline-end', key: 'paddingInlineEnd' },\n { kind: 'convert', css: 'padding-block', key: 'paddingBlock' },\n { kind: 'convert', css: 'padding-block-start', key: 'paddingBlockStart' },\n { kind: 'convert', css: 'padding-block-end', key: 'paddingBlockEnd' },\n\n // Logical inset\n { kind: 'convert', css: 'inset-inline', key: 'insetInline' },\n { kind: 'convert', css: 'inset-inline-start', key: 'insetInlineStart' },\n { kind: 'convert', css: 'inset-inline-end', key: 'insetInlineEnd' },\n { kind: 'convert', css: 'inset-block', key: 'insetBlock' },\n { kind: 'convert', css: 'inset-block-start', key: 'insetBlockStart' },\n { kind: 'convert', css: 'inset-block-end', key: 'insetBlockEnd' },\n\n // FLEX\n { kind: 'simple', css: 'align-content', key: 'alignContent' },\n { kind: 'simple', css: 'align-items', key: 'alignItems' },\n { kind: 'simple', css: 'align-self', key: 'alignSelf' },\n { kind: 'simple', css: 'flex', key: 'flex' },\n { kind: 'simple', css: 'flex-basis', key: 'flexBasis' },\n { kind: 'simple', css: 'flex-direction', key: 'flexDirection' },\n { kind: 'simple', css: 'flex-flow', key: 'flexFlow' },\n { kind: 'simple', css: 'flex-grow', key: 'flexGrow' },\n { kind: 'simple', css: 'flex-shrink', key: 'flexShrink' },\n { kind: 'simple', css: 'flex-wrap', key: 'flexWrap' },\n { kind: 'simple', css: 'justify-content', key: 'justifyContent' },\n { kind: 'simple', css: 'justify-items', key: 'justifyItems' },\n { kind: 'simple', css: 'justify-self', key: 'justifySelf' },\n { kind: 'simple', css: 'place-items', key: 'placeItems' },\n { kind: 'simple', css: 'place-content', key: 'placeContent' },\n { kind: 'simple', css: 'place-self', key: 'placeSelf' },\n { kind: 'convert', css: 'row-gap', key: 'rowGap' },\n { kind: 'convert', css: 'column-gap', key: 'columnGap' },\n\n // GRID\n { kind: 'simple', css: 'grid', key: 'grid' },\n { kind: 'simple', css: 'grid-area', key: 'gridArea' },\n { kind: 'convert', css: 'grid-auto-columns', key: 'gridAutoColumns' },\n { kind: 'simple', css: 'grid-auto-flow', key: 'gridAutoFlow' },\n { kind: 'convert', css: 'grid-auto-rows', key: 'gridAutoRows' },\n { kind: 'simple', css: 'grid-column', key: 'gridColumn' },\n { kind: 'simple', css: 'grid-column-end', key: 'gridColumnEnd' },\n { kind: 'convert', css: 'grid-column-gap', key: 'gridColumnGap' },\n { kind: 'convert', css: 'grid-column-start', key: 'gridColumnStart' },\n { kind: 'convert', css: 'grid-gap', key: 'gridGap' },\n { kind: 'simple', css: 'grid-row', key: 'gridRow' },\n { kind: 'simple', css: 'grid-row-start', key: 'gridRowStart' },\n { kind: 'simple', css: 'grid-row-end', key: 'gridRowEnd' },\n { kind: 'convert', css: 'grid-row-gap', key: 'gridRowGap' },\n { kind: 'simple', css: 'grid-template', key: 'gridTemplate' },\n { kind: 'simple', css: 'grid-template-areas', key: 'gridTemplateAreas' },\n { kind: 'simple', css: 'grid-template-columns', key: 'gridTemplateColumns' },\n { kind: 'simple', css: 'grid-template-rows', key: 'gridTemplateRows' },\n\n // POSITIONING\n { kind: 'simple', css: 'object-fit', key: 'objectFit' },\n { kind: 'simple', css: 'object-position', key: 'objectPosition' },\n { kind: 'simple', css: 'order', key: 'order' },\n { kind: 'simple', css: 'opacity', key: 'opacity' },\n { kind: 'simple', css: 'resize', key: 'resize' },\n { kind: 'simple', css: 'vertical-align', key: 'verticalAlign' },\n\n // FONT & TEXT\n { kind: 'simple', css: 'line-height', key: 'lineHeight' },\n { kind: 'simple', css: 'font', key: 'font' },\n { kind: 'simple', css: 'font-family', key: 'fontFamily' },\n { kind: 'convert', css: 'font-size', key: 'fontSize' },\n { kind: 'convert', css: 'font-size-adjust', key: 'fontSizeAdjust' },\n { kind: 'convert', css: 'font-stretch', key: 'fontStretch' },\n { kind: 'simple', css: 'font-style', key: 'fontStyle' },\n { kind: 'simple', css: 'font-variant', key: 'fontVariant' },\n { kind: 'simple', css: 'font-weight', key: 'fontWeight' },\n { kind: 'simple', css: 'font-kerning', key: 'fontKerning' },\n { kind: 'simple', css: 'font-feature-settings', key: 'fontFeatureSettings' },\n { kind: 'simple', css: 'font-variation-settings', key: 'fontVariationSettings' },\n { kind: 'simple', css: 'font-optical-sizing', key: 'fontOpticalSizing' },\n { kind: 'simple', css: 'text-align', key: 'textAlign' },\n { kind: 'simple', css: 'text-align-last', key: 'textAlignLast' },\n { kind: 'simple', css: 'text-transform', key: 'textTransform' },\n { kind: 'simple', css: 'text-decoration', key: 'textDecoration' },\n { kind: 'simple', css: 'text-decoration-color', key: 'textDecorationColor' },\n { kind: 'simple', css: 'text-decoration-line', key: 'textDecorationLine' },\n { kind: 'simple', css: 'text-decoration-style', key: 'textDecorationStyle' },\n { kind: 'simple', css: 'text-decoration-thickness', key: 'textDecorationThickness' },\n { kind: 'simple', css: 'text-underline-offset', key: 'textUnderlineOffset' },\n { kind: 'simple', css: 'text-emphasis', key: 'textEmphasis' },\n { kind: 'simple', css: 'text-emphasis-color', key: 'textEmphasisColor' },\n { kind: 'simple', css: 'text-emphasis-style', key: 'textEmphasisStyle' },\n { kind: 'simple', css: 'letter-spacing', key: 'letterSpacing' },\n { kind: 'simple', css: 'word-spacing', key: 'wordSpacing' },\n { kind: 'simple', css: 'text-indent', key: 'textIndent' },\n { kind: 'simple', css: 'text-justify', key: 'textJustify' },\n { kind: 'simple', css: 'text-overflow', key: 'textOverflow' },\n { kind: 'simple', css: 'text-shadow', key: 'textShadow' },\n { kind: 'simple', css: 'text-wrap', key: 'textWrap' },\n { kind: 'simple', css: 'text-rendering', key: 'textRendering' },\n { kind: 'simple', css: 'white-space', key: 'whiteSpace' },\n { kind: 'simple', css: 'word-break', key: 'wordBreak' },\n { kind: 'simple', css: 'word-wrap', key: 'wordWrap' },\n { kind: 'simple', css: 'writing-mode', key: 'writingMode' },\n { kind: 'simple', css: 'direction', key: 'direction' },\n { kind: 'simple', css: 'hyphens', key: 'hyphens' },\n\n // LIST\n { kind: 'simple', css: 'list-style', key: 'listStyle' },\n { kind: 'simple', css: 'list-style-image', key: 'listStyleImage' },\n { kind: 'simple', css: 'list-style-position', key: 'listStylePosition' },\n { kind: 'simple', css: 'list-style-type', key: 'listStyleType' },\n\n // BACKGROUND & COLORS\n { kind: 'simple', css: 'color', key: 'color' },\n { kind: 'simple', css: 'background', key: 'background' },\n { kind: 'simple', css: 'background-color', key: 'backgroundColor' },\n { kind: 'special', id: 'backgroundImage' },\n { kind: 'simple', css: 'background-attachment', key: 'backgroundAttachment' },\n { kind: 'simple', css: 'background-clip', key: 'backgroundClip' },\n { kind: 'simple', css: 'background-origin', key: 'backgroundOrigin' },\n { kind: 'simple', css: 'background-position', key: 'backgroundPosition' },\n { kind: 'simple', css: 'background-repeat', key: 'backgroundRepeat' },\n { kind: 'simple', css: 'background-size', key: 'backgroundSize' },\n\n // BORDERS\n {\n kind: 'border_radius',\n keys: {\n full: 'borderRadius',\n top: 'borderRadiusTop',\n bottom: 'borderRadiusBottom',\n left: 'borderRadiusLeft',\n right: 'borderRadiusRight',\n topLeft: 'borderRadiusTopLeft',\n topRight: 'borderRadiusTopRight',\n bottomLeft: 'borderRadiusBottomLeft',\n bottomRight: 'borderRadiusBottomRight',\n },\n },\n { kind: 'simple', css: 'border', key: 'border' },\n { kind: 'simple', css: 'border-top', key: 'borderTop' },\n { kind: 'simple', css: 'border-bottom', key: 'borderBottom' },\n { kind: 'simple', css: 'border-left', key: 'borderLeft' },\n { kind: 'simple', css: 'border-right', key: 'borderRight' },\n {\n kind: 'edge',\n property: 'border-width',\n keys: {\n full: 'borderWidth',\n x: 'borderWidthX',\n y: 'borderWidthY',\n top: 'borderWidthTop',\n left: 'borderWidthLeft',\n bottom: 'borderWidthBottom',\n right: 'borderWidthRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-style',\n keys: {\n full: 'borderStyle',\n x: 'borderStyleX',\n y: 'borderStyleY',\n top: 'borderStyleTop',\n left: 'borderStyleLeft',\n bottom: 'borderStyleBottom',\n right: 'borderStyleRight',\n },\n },\n {\n kind: 'edge',\n property: 'border-color',\n keys: {\n full: 'borderColor',\n x: 'borderColorX',\n y: 'borderColorY',\n top: 'borderColorTop',\n left: 'borderColorLeft',\n bottom: 'borderColorBottom',\n right: 'borderColorRight',\n },\n },\n { kind: 'simple', css: 'border-image', key: 'borderImage' },\n { kind: 'simple', css: 'border-image-outset', key: 'borderImageOutset' },\n { kind: 'simple', css: 'border-image-repeat', key: 'borderImageRepeat' },\n { kind: 'simple', css: 'border-image-slice', key: 'borderImageSlice' },\n { kind: 'simple', css: 'border-image-source', key: 'borderImageSource' },\n { kind: 'simple', css: 'border-image-width', key: 'borderImageWidth' },\n { kind: 'simple', css: 'border-spacing', key: 'borderSpacing' },\n\n { kind: 'simple', css: 'border-collapse', key: 'borderCollapse' },\n\n // Logical borders\n { kind: 'simple', css: 'border-inline', key: 'borderInline' },\n { kind: 'simple', css: 'border-block', key: 'borderBlock' },\n { kind: 'simple', css: 'border-inline-start', key: 'borderInlineStart' },\n { kind: 'simple', css: 'border-inline-end', key: 'borderInlineEnd' },\n { kind: 'simple', css: 'border-block-start', key: 'borderBlockStart' },\n { kind: 'simple', css: 'border-block-end', key: 'borderBlockEnd' },\n\n // VISUAL EFFECTS\n { kind: 'simple', css: 'backface-visibility', key: 'backfaceVisibility' },\n { kind: 'simple', css: 'box-shadow', key: 'boxShadow' },\n { kind: 'simple', css: 'filter', key: 'filter' },\n { kind: 'simple', css: 'backdrop-filter', key: 'backdropFilter' },\n { kind: 'simple', css: 'mix-blend-mode', key: 'mixBlendMode' },\n { kind: 'simple', css: 'background-blend-mode', key: 'backgroundBlendMode' },\n { kind: 'simple', css: 'isolation', key: 'isolation' },\n { kind: 'simple', css: 'outline', key: 'outline' },\n { kind: 'simple', css: 'outline-color', key: 'outlineColor' },\n { kind: 'simple', css: 'outline-offset', key: 'outlineOffset' },\n { kind: 'simple', css: 'outline-style', key: 'outlineStyle' },\n { kind: 'simple', css: 'outline-width', key: 'outlineWidth' },\n\n // ANIMATIONS\n { kind: 'special', id: 'animation' },\n { kind: 'simple', css: 'animation-name', key: 'animationName' },\n { kind: 'simple', css: 'animation-duration', key: 'animationDuration' },\n { kind: 'simple', css: 'animation-timing-function', key: 'animationTimingFunction' },\n { kind: 'simple', css: 'animation-delay', key: 'animationDelay' },\n { kind: 'simple', css: 'animation-iteration-count', key: 'animationIterationCount' },\n { kind: 'simple', css: 'animation-direction', key: 'animationDirection' },\n { kind: 'simple', css: 'animation-fill-mode', key: 'animationFillMode' },\n { kind: 'simple', css: 'animation-play-state', key: 'animationPlayState' },\n { kind: 'simple', css: 'transition', key: 'transition' },\n { kind: 'simple', css: 'transition-delay', key: 'transitionDelay' },\n { kind: 'simple', css: 'transition-duration', key: 'transitionDuration' },\n { kind: 'simple', css: 'transition-property', key: 'transitionProperty' },\n { kind: 'simple', css: 'transition-timing-function', key: 'transitionTimingFunction' },\n\n // TRANSFORM\n { kind: 'simple', css: 'transform', key: 'transform' },\n { kind: 'simple', css: 'transform-origin', key: 'transformOrigin' },\n { kind: 'simple', css: 'transform-style', key: 'transformStyle' },\n { kind: 'simple', css: 'translate', key: 'translate' },\n { kind: 'simple', css: 'rotate', key: 'rotate' },\n { kind: 'simple', css: 'scale', key: 'scale' },\n { kind: 'simple', css: 'will-change', key: 'willChange' },\n\n // SCROLL\n { kind: 'simple', css: 'scroll-behavior', key: 'scrollBehavior' },\n { kind: 'simple', css: 'scroll-snap-type', key: 'scrollSnapType' },\n { kind: 'simple', css: 'scroll-snap-align', key: 'scrollSnapAlign' },\n { kind: 'simple', css: 'scroll-snap-stop', key: 'scrollSnapStop' },\n { kind: 'simple', css: 'scroll-margin', key: 'scrollMargin' },\n { kind: 'simple', css: 'scroll-padding', key: 'scrollPadding' },\n { kind: 'simple', css: 'overscroll-behavior', key: 'overscrollBehavior' },\n { kind: 'simple', css: 'overscroll-behavior-x', key: 'overscrollBehaviorX' },\n { kind: 'simple', css: 'overscroll-behavior-y', key: 'overscrollBehaviorY' },\n\n // INTERACTION\n { kind: 'simple', css: 'cursor', key: 'cursor' },\n { kind: 'simple', css: 'pointer-events', key: 'pointerEvents' },\n { kind: 'simple', css: 'user-select', key: 'userSelect' },\n { kind: 'simple', css: 'touch-action', key: 'touchAction' },\n { kind: 'simple', css: 'scrollbar-width', key: 'scrollbarWidth' },\n { kind: 'simple', css: 'scrollbar-color', key: 'scrollbarColor' },\n { kind: 'simple', css: 'scrollbar-gutter', key: 'scrollbarGutter' },\n { kind: 'simple', css: 'caret-color', key: 'caretColor' },\n { kind: 'simple', css: 'accent-color', key: 'accentColor' },\n { kind: 'simple', css: 'color-scheme', key: 'colorScheme' },\n\n // OTHER\n { kind: 'simple', css: 'caption-side', key: 'captionSide' },\n { kind: 'simple', css: 'clear', key: 'clear' },\n { kind: 'simple', css: 'clip', key: 'clip' },\n { kind: 'simple', css: 'clip-path', key: 'clipPath' },\n { kind: 'simple', css: 'content', key: 'content' },\n { kind: 'simple', css: 'content-visibility', key: 'contentVisibility' },\n { kind: 'simple', css: 'counter-increment', key: 'counterIncrement' },\n { kind: 'simple', css: 'counter-reset', key: 'counterReset' },\n { kind: 'simple', css: 'empty-cells', key: 'emptyCells' },\n { kind: 'simple', css: 'z-index', key: 'zIndex' },\n { kind: 'simple', css: 'overflow', key: 'overflow' },\n { kind: 'simple', css: 'overflow-wrap', key: 'overflowWrap' },\n { kind: 'simple', css: 'overflow-x', key: 'overflowX' },\n { kind: 'simple', css: 'overflow-y', key: 'overflowY' },\n { kind: 'simple', css: 'perspective', key: 'perspective' },\n { kind: 'simple', css: 'perspective-origin', key: 'perspectiveOrigin' },\n { kind: 'simple', css: 'quotes', key: 'quotes' },\n { kind: 'simple', css: 'tab-size', key: 'tabSize' },\n { kind: 'simple', css: 'table-layout', key: 'tableLayout' },\n { kind: 'simple', css: 'visibility', key: 'visibility' },\n { kind: 'simple', css: 'appearance', key: 'appearance' },\n { kind: 'simple', css: 'image-rendering', key: 'imageRendering' },\n\n // Masks\n { kind: 'simple', css: 'mask-image', key: 'maskImage' },\n { kind: 'simple', css: 'mask-size', key: 'maskSize' },\n { kind: 'simple', css: 'mask-position', key: 'maskPosition' },\n { kind: 'simple', css: 'mask-repeat', key: 'maskRepeat' },\n\n // Shapes\n { kind: 'simple', css: 'shape-outside', key: 'shapeOutside' },\n { kind: 'simple', css: 'shape-margin', key: 'shapeMargin' },\n { kind: 'simple', css: 'shape-image-threshold', key: 'shapeImageThreshold' },\n\n // Columns\n { kind: 'simple', css: 'column-count', key: 'columnCount' },\n { kind: 'simple', css: 'column-width', key: 'columnWidth' },\n { kind: 'simple', css: 'column-rule', key: 'columnRule' },\n { kind: 'simple', css: 'columns', key: 'columns' },\n\n // Fragmentation\n { kind: 'simple', css: 'break-before', key: 'breakBefore' },\n { kind: 'simple', css: 'break-after', key: 'breakAfter' },\n { kind: 'simple', css: 'break-inside', key: 'breakInside' },\n { kind: 'simple', css: 'orphans', key: 'orphans' },\n { kind: 'simple', css: 'widows', key: 'widows' },\n { kind: 'simple', css: 'print-color-adjust', key: 'printColorAdjust' },\n\n // CUSTOM ATTRIBUTES\n { kind: 'special', id: 'hideEmpty' },\n { kind: 'special', id: 'clearFix' },\n { kind: 'special', id: 'extendCss' },\n]\n\nexport default propertyMap\n","import { values } from '../../units'\nimport { borderRadius, edge } from '../shorthands'\nimport processDescriptor from './processDescriptor'\nimport propertyMap from './propertyMap'\nimport type { ITheme, InnerTheme, Theme } from './types'\n\n// Dev-time counter sink — populated by `@pyreon/perf-harness` on install().\n// No import so unistyle carries zero coupling to a private package.\nconst _countSink = globalThis as { __pyreon_count__?: (name: string, n?: number) => void }\n\nexport type { ITheme, Theme as StylesTheme }\n\ntype Css = (strings: TemplateStringsArray, ...args: any[]) => any\n\nexport type Styles = ({\n theme,\n css,\n rootSize,\n globalTheme,\n}: {\n theme: InnerTheme\n css: Css\n rootSize?: number | undefined\n globalTheme?: Record<string, unknown> | undefined\n}) => ReturnType<Css>\n\n// ─── Tier 1: Key → descriptor-index lookup ──────────────────────────────────\n// Built once at module init. Instead of scanning all 257 descriptors on every\n// styles() call, we look up only the indices whose keys are present in the\n// incoming theme object. Reduces iterations from ~257 to ~10-20 for a typical\n// component that uses 5-10 properties.\n\nconst keyToIndices = new Map<string, number[]>()\n\nfor (let i = 0; i < propertyMap.length; i++) {\n const d = propertyMap[i] as Record<string, any>\n const addKey = (k: string) => {\n let arr = keyToIndices.get(k)\n if (!arr) {\n arr = []\n keyToIndices.set(k, arr)\n }\n arr.push(i)\n }\n\n if (d.key) addKey(d.key)\n if (d.keys) {\n if (Array.isArray(d.keys)) {\n for (const k of d.keys) addKey(k)\n } else {\n for (const inner of Object.values(d.keys as Record<string, string>)) {\n addKey(inner)\n }\n }\n }\n // kind: 'special' descriptors carry only `id` (no key/keys). Index by id so\n // the fast path resolves them when paired with non-special keys; otherwise\n // fragments.length > 0 from non-special hits skips the fallback full-scan\n // and the special is silently dropped.\n if (d.id) addKey(d.id)\n}\n\n/**\n * Convert a normalized theme object (Record<key, value>) into a CSS template\n * by walking the property map. Each entry in propertyMap describes a single\n * CSS property — its kind (simple / convert / convert_fallback / edge /\n * border_radius), the input theme key(s) to read, and the output CSS name.\n *\n * Returns a `css` tagged template literal so makeItResponsive can embed the\n * result inside the responsive breakpoint structure. Each call returns a\n * FRESH array — the result CSSResult holds onto that array by reference,\n * and reusing one module-level array across calls would clobber an earlier\n * CSSResult's data when the next styles() call clears the shared array.\n *\n * IMPORTANT: the return MUST be wrapped in `css\\`...\\`` — NOT a plain\n * string join. makeItResponsive embeds this result in another template\n * literal, and the CSS interpolation chain requires a css template\n * result (not a raw string) for correct nesting of media queries,\n * pseudo-selectors, and @layer wrapping.\n */\n// Module-level reusable Set — cleared before each synchronous styles() call.\n// The fragments array CANNOT be module-level because the returned CSSResult\n// captures it by reference; the next styles() call would clear-out the\n// previous result before its consumer ever resolved it.\nconst _seen = new Set<number>()\n\nconst styles: Styles = ({ theme: t, css, rootSize }) => {\n if (process.env.NODE_ENV !== 'production') _countSink.__pyreon_count__?.('unistyle.styles')\n\n const calc = (...params: any[]) => values(params, rootSize)\n const shorthand = edge(rootSize)\n const borderRadiusFn = borderRadius(rootSize)\n\n // Per-call fragments array — owned by the returned CSSResult.\n const fragments: unknown[] = []\n\n // Reuse module-level Set — safe because the Set is fully consumed before\n // styles() returns. The fragments array is the one we MUST allocate fresh\n // (see top-of-function comment) — its lifetime extends past this call.\n _seen.clear()\n\n // Fast path: iterate only descriptors whose keys are present in theme\n for (const key of Object.keys(t)) {\n const indices = keyToIndices.get(key)\n if (!indices) continue\n for (const idx of indices) {\n if (_seen.has(idx)) continue\n _seen.add(idx)\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor')\n fragments.push(processDescriptor(propertyMap[idx]!, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n // Fallback: if lookup produced nothing, full scan (handles edge cases\n // where theme uses non-standard keys that aren't in propertyMap)\n if (fragments.length === 0 && Object.keys(t).length > 0) {\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor.fallback-scan')\n for (const d of propertyMap) {\n if (process.env.NODE_ENV !== 'production')\n _countSink.__pyreon_count__?.('unistyle.descriptor')\n fragments.push(processDescriptor(d, t, css, calc, shorthand, borderRadiusFn))\n }\n }\n\n return css`\n ${fragments}\n `\n}\n\nexport default styles\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyreon/unistyle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.0",
|
|
4
4
|
"description": "Responsive theming and breakpoint utilities for Pyreon",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/pyreon/pyreon/tree/main/packages/ui-system/unistyle#readme",
|
|
@@ -40,18 +40,18 @@
|
|
|
40
40
|
"typecheck": "tsc --noEmit"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@pyreon/core": "^0.
|
|
44
|
-
"@pyreon/reactivity": "^0.
|
|
43
|
+
"@pyreon/core": "^0.33.0",
|
|
44
|
+
"@pyreon/reactivity": "^0.33.0"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@pyreon/styler": "^0.
|
|
48
|
-
"@pyreon/ui-core": "^0.
|
|
47
|
+
"@pyreon/styler": "^0.33.0",
|
|
48
|
+
"@pyreon/ui-core": "^0.33.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@pyreon/manifest": "0.13.2",
|
|
52
|
-
"@pyreon/test-utils": "^0.13.
|
|
53
|
-
"@pyreon/typescript": "^0.
|
|
54
|
-
"@pyreon/vitest-config": "0.13.
|
|
52
|
+
"@pyreon/test-utils": "^0.13.21",
|
|
53
|
+
"@pyreon/typescript": "^0.33.0",
|
|
54
|
+
"@pyreon/vitest-config": "0.13.3",
|
|
55
55
|
"@vitest/browser-playwright": "^4.1.8",
|
|
56
56
|
"@vitus-labs/tools-rolldown": "^2.5.0"
|
|
57
57
|
},
|