@animus-ui/system 0.1.1 → 0.1.3

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.
Files changed (42) hide show
  1. package/README.md +125 -4
  2. package/dist/Animus.d.ts +2 -3
  3. package/dist/Animus.d.ts.map +1 -1
  4. package/dist/AnimusExtended.d.ts +2 -3
  5. package/dist/AnimusExtended.d.ts.map +1 -1
  6. package/dist/SystemBuilder.d.ts +55 -8
  7. package/dist/SystemBuilder.d.ts.map +1 -1
  8. package/dist/appearance/index.d.ts +75 -0
  9. package/dist/appearance/index.d.ts.map +1 -0
  10. package/dist/appearance/index.js +179 -0
  11. package/dist/bootstrap/createAppearanceBootstrap.d.ts +71 -0
  12. package/dist/bootstrap/createAppearanceBootstrap.d.ts.map +1 -0
  13. package/dist/bootstrap/index.d.ts +2 -0
  14. package/dist/bootstrap/index.d.ts.map +1 -0
  15. package/dist/bootstrap/index.js +98 -0
  16. package/dist/composeWithContext.d.ts.map +1 -1
  17. package/dist/composeWithContext.js +43 -22
  18. package/dist/conditions.d.ts +163 -0
  19. package/dist/conditions.d.ts.map +1 -0
  20. package/dist/{createComposedFamily-DSE2ZuRE.js → createComposedFamily-DJ2aqfqN.js} +141 -67
  21. package/dist/index.d.ts +5 -4
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +648 -25
  24. package/dist/runtime/index.d.ts +2 -0
  25. package/dist/runtime/index.d.ts.map +1 -1
  26. package/dist/runtime/resolveClasses.d.ts.map +1 -1
  27. package/dist/runtime-entry.js +1 -1
  28. package/dist/selectors.d.ts +22 -0
  29. package/dist/selectors.d.ts.map +1 -1
  30. package/dist/theme/createTheme.d.ts +47 -4
  31. package/dist/theme/createTheme.d.ts.map +1 -1
  32. package/dist/types/component.d.ts +27 -10
  33. package/dist/types/component.d.ts.map +1 -1
  34. package/dist/types/config.d.ts +124 -11
  35. package/dist/types/config.d.ts.map +1 -1
  36. package/dist/types/props.d.ts +0 -4
  37. package/dist/types/props.d.ts.map +1 -1
  38. package/dist/types/theme.d.ts +132 -0
  39. package/dist/types/theme.d.ts.map +1 -1
  40. package/dist/utils/deepMerge.d.ts +0 -3
  41. package/dist/utils/deepMerge.d.ts.map +1 -1
  42. package/package.json +12 -4
@@ -57,13 +57,14 @@ function warnDroppedValue(baseClassName, propName, serializedValue) {
57
57
  }
58
58
  }
59
59
  /**
60
- * Resolve className parts from props, using extracted configuration.
61
- * This is the shared logic between createComponent and createClassResolver.
60
+ * Apply variant classes in declaration order, recording a static witness per
61
+ * resolved variant. When a value comes from a defaultVariant fallback (prop not
62
+ * passed), emit --{prop}-default instead of --{prop}-{value} so the compose
63
+ * override rule cannot match, allowing inheritance from the parent to win.
62
64
  */
63
- function resolveClasses(baseClassName, props, config, systemPropMap, dynamicPropConfig) {
64
- const classes = [baseClassName];
65
- let dynStyle;
66
- if (config.variants) for (const [prop, vc] of Object.entries(config.variants)) {
65
+ function applyVariantClasses(classes, baseClassName, props, config) {
66
+ if (!config.variants) return;
67
+ for (const [prop, vc] of Object.entries(config.variants)) {
67
68
  const value = props[prop] ?? vc.default;
68
69
  if (value != null) {
69
70
  const isDefault = !(prop in props) && vc.default != null;
@@ -71,7 +72,14 @@ function resolveClasses(baseClassName, props, config, systemPropMap, dynamicProp
71
72
  recordWitness(baseClassName, prop, value, "static");
72
73
  }
73
74
  }
74
- if (config.compounds) for (const compound of config.compounds) {
75
+ }
76
+ /**
77
+ * Apply compound classes: push each compound's className when every condition
78
+ * matches (against the prop value or its variant default). No witness records.
79
+ */
80
+ function applyCompoundClasses(classes, props, config) {
81
+ if (!config.compounds) return;
82
+ for (const compound of config.compounds) {
75
83
  let match = true;
76
84
  for (const [prop, expected] of Object.entries(compound.conditions)) {
77
85
  const current = props[prop] ?? config.variants?.[prop]?.default;
@@ -82,14 +90,54 @@ function resolveClasses(baseClassName, props, config, systemPropMap, dynamicProp
82
90
  }
83
91
  if (match) classes.push(compound.className);
84
92
  }
85
- const activeStates = [];
86
- if (config.states) {
87
- for (const state of config.states) if (props[state]) {
88
- classes.push(`${baseClassName}--${state}`);
89
- activeStates.push(state);
90
- recordWitness(baseClassName, state, "true", "static");
93
+ }
94
+ /**
95
+ * Apply state classes and track active states for data-attribute passthrough,
96
+ * recording a static witness per active state.
97
+ */
98
+ function applyStateClasses(classes, baseClassName, props, config, activeStates) {
99
+ if (!config.states) return;
100
+ for (const state of config.states) if (props[state]) {
101
+ classes.push(`${baseClassName}--${state}`);
102
+ activeStates.push(state);
103
+ recordWitness(baseClassName, state, "true", "static");
104
+ }
105
+ }
106
+ /**
107
+ * Expand a resolved dynamic prop into slot classes and CSS-variable style
108
+ * entries. Responsive objects expand per breakpoint: the `_` base breakpoint
109
+ * uses the bare slotClass and varName; named breakpoints suffix both
110
+ * (`${slotClass}-${bp}` and `${varName}-${bp}`). Scalar values push the bare
111
+ * slotClass and set varName directly. Mutates `classes` (push order preserved)
112
+ * and `dynStyle` in place; the caller records the dynamic witness beforehand.
113
+ */
114
+ function applyDynamicProp(classes, dynStyle, propValue, dc) {
115
+ if (typeof propValue === "object" && propValue !== null && !Array.isArray(propValue)) for (const [bp, bpVal] of Object.entries(propValue)) {
116
+ if (bpVal == null) continue;
117
+ if (bp === "_") {
118
+ classes.push(dc.slotClass);
119
+ dynStyle[dc.varName] = resolveValue(bpVal, dc);
120
+ } else {
121
+ classes.push(`${dc.slotClass}-${bp}`);
122
+ dynStyle[`${dc.varName}-${bp}`] = resolveValue(bpVal, dc);
91
123
  }
92
124
  }
125
+ else {
126
+ classes.push(dc.slotClass);
127
+ dynStyle[dc.varName] = resolveValue(propValue, dc);
128
+ }
129
+ }
130
+ /**
131
+ * Resolve className parts from props, using extracted configuration.
132
+ * This is the shared logic between createComponent and createClassResolver.
133
+ */
134
+ function resolveClasses(baseClassName, props, config, systemPropMap, dynamicPropConfig) {
135
+ const classes = [baseClassName];
136
+ let dynStyle;
137
+ applyVariantClasses(classes, baseClassName, props, config);
138
+ applyCompoundClasses(classes, props, config);
139
+ const activeStates = [];
140
+ applyStateClasses(classes, baseClassName, props, config, activeStates);
93
141
  const systemPropNames = config.systemPropNames || [];
94
142
  if (systemPropNames.length > 0) {
95
143
  const { customPropMap, customDynamicConfig } = config;
@@ -107,24 +155,7 @@ function resolveClasses(baseClassName, props, config, systemPropMap, dynamicProp
107
155
  if (dc) {
108
156
  recordWitness(baseClassName, propName, key, "dynamic");
109
157
  if (!dynStyle) dynStyle = {};
110
- if (typeof propValue === "object" && propValue !== null && !Array.isArray(propValue)) for (const [bp, bpVal] of Object.entries(propValue)) {
111
- if (bpVal == null) continue;
112
- if (bp === "_") {
113
- classes.push(dc.slotClass);
114
- const finalVal = resolveValue(bpVal, dc);
115
- dynStyle[dc.varName] = finalVal;
116
- } else {
117
- classes.push(`${dc.slotClass}-${bp}`);
118
- const varName = `${dc.varName}-${bp}`;
119
- const finalVal = resolveValue(bpVal, dc);
120
- dynStyle[varName] = finalVal;
121
- }
122
- }
123
- else {
124
- classes.push(dc.slotClass);
125
- const finalVal = resolveValue(propValue, dc);
126
- dynStyle[dc.varName] = finalVal;
127
- }
158
+ applyDynamicProp(classes, dynStyle, propValue, dc);
128
159
  } else {
129
160
  warnDroppedValue(baseClassName, propName, key);
130
161
  recordWitness(baseClassName, propName, key, "drop");
@@ -152,6 +183,74 @@ function composeRefs(...refs) {
152
183
  };
153
184
  }
154
185
  /**
186
+ * Forward props to the underlying element, filtering out Animus-managed props.
187
+ *
188
+ * data-* and aria-* attributes always pass through to the DOM, even when used
189
+ * as variant/state keys. This enables headless UI interop: the attribute is
190
+ * consumed for styling AND forwarded to the element so external frameworks
191
+ * (Radix, Ark-UI) see it.
192
+ *
193
+ * filterProps covers all Animus props, so unknown props pass through: for DOM
194
+ * elements React handles any unknown-attribute warnings in dev mode, and for
195
+ * component elements all non-filtered props are forwarded to the component.
196
+ */
197
+ function forwardProps(props, filterProps, domProps) {
198
+ for (const [key, value] of Object.entries(props)) {
199
+ if (key === "className") continue;
200
+ if (!(key.startsWith("data-") || key.startsWith("aria-")) && filterProps.has(key)) continue;
201
+ domProps[key] = value;
202
+ }
203
+ }
204
+ /**
205
+ * asChild render path: don't render our own element — merge the resolved
206
+ * className/ref/style onto the single child element, plus the parent's own
207
+ * forwardable props (event handlers, role, aria-*, data-*, id, tabIndex).
208
+ *
209
+ * Conflict rule is child-wins: the parent's props are spread UNDER the child's
210
+ * own, so a handler or attribute declared on the child replaces the parent's
211
+ * rather than chaining with it.
212
+ */
213
+ function renderAsChild(className, filterProps, props, ref, classes, dynamicStyle) {
214
+ const child = Children.only(props.children);
215
+ if (!isValidElement(child)) throw new Error(`${className}: asChild requires a single React element as children`);
216
+ const childRef = child.ref;
217
+ const mergedClassName = [classes.join(" "), child.props.className].filter(Boolean).join(" ");
218
+ const mergedStyle = dynamicStyle || props.style || child.props.style ? {
219
+ ...props.style,
220
+ ...child.props.style,
221
+ ...dynamicStyle
222
+ } : void 0;
223
+ const parentProps = {};
224
+ forwardProps(props, filterProps, parentProps);
225
+ delete parentProps.children;
226
+ delete parentProps.style;
227
+ delete parentProps.ref;
228
+ return cloneElement(child, {
229
+ ...parentProps,
230
+ ...child.props,
231
+ ref: composeRefs(ref, childRef),
232
+ className: mergedClassName,
233
+ ...mergedStyle ? { style: mergedStyle } : {}
234
+ });
235
+ }
236
+ /**
237
+ * Normal render path: render our own element (or the `as` override), forwarding
238
+ * filtered props and applying any dynamic CSS-variable style.
239
+ */
240
+ function renderElement(element, filterProps, props, ref, classes, dynamicStyle) {
241
+ const target = props.as || element;
242
+ const domProps = {
243
+ ref,
244
+ className: classes.join(" ")
245
+ };
246
+ forwardProps(props, filterProps, domProps);
247
+ if (dynamicStyle) domProps.style = props.style ? {
248
+ ...props.style,
249
+ ...dynamicStyle
250
+ } : dynamicStyle;
251
+ return createElement(target, domProps);
252
+ }
253
+ /**
155
254
  * Create a lightweight component that applies extracted CSS class names.
156
255
  * Replaces Emotion's styled() for extracted components.
157
256
  *
@@ -180,44 +279,19 @@ function createComponent(element, className, config, systemPropMap, dynamicPropC
180
279
  const Component = forwardRef((props, ref) => {
181
280
  const { classes, dynamicStyle } = resolveClasses(className, props, config, systemPropMap, dynamicPropConfig);
182
281
  if (props.className) classes.push(props.className);
183
- if (props.asChild) {
184
- const child = Children.only(props.children);
185
- if (!isValidElement(child)) throw new Error(`${className}: asChild requires a single React element as children`);
186
- const childRef = child.ref;
187
- const mergedClassName = [classes.join(" "), child.props.className].filter(Boolean).join(" ");
188
- const mergedStyle = dynamicStyle || props.style || child.props.style ? {
189
- ...props.style,
190
- ...child.props.style,
191
- ...dynamicStyle
192
- } : void 0;
193
- return cloneElement(child, {
194
- ref: composeRefs(ref, childRef),
195
- className: mergedClassName,
196
- ...mergedStyle ? { style: mergedStyle } : {}
197
- });
198
- }
199
- const renderElement = props.as || element;
200
- const isComponentElement = typeof renderElement !== "string";
201
- const domProps = {
202
- ref,
203
- className: classes.join(" ")
204
- };
205
- for (const [key, value] of Object.entries(props)) {
206
- if (key === "className") continue;
207
- if (!(key.startsWith("data-") || key.startsWith("aria-")) && filterProps.has(key)) continue;
208
- if (!isComponentElement) {}
209
- domProps[key] = value;
210
- }
211
- if (dynamicStyle) domProps.style = props.style ? {
212
- ...props.style,
213
- ...dynamicStyle
214
- } : dynamicStyle;
215
- return createElement(renderElement, domProps);
282
+ return props.asChild ? renderAsChild(className, filterProps, props, ref, classes, dynamicStyle) : renderElement(element, filterProps, props, ref, classes, dynamicStyle);
216
283
  });
217
284
  Component.displayName = className;
218
- return Object.assign(Component, { extend: () => {
219
- throw new Error(`Cannot extend extracted component "${className}" at runtime. Extensions must be authored in source code using the builder API (e.g. import the original component and call .extend() there) so the extraction pipeline can resolve them at build time.`);
220
- } });
285
+ const variantDefaults = {};
286
+ if (config.variants) {
287
+ for (const [prop, vc] of Object.entries(config.variants)) if (vc.default != null) variantDefaults[prop] = vc.default;
288
+ }
289
+ return Object.assign(Component, {
290
+ variantDefaults: Object.freeze(variantDefaults),
291
+ extend: () => {
292
+ throw new Error(`Cannot extend extracted component "${className}" at runtime. Extensions must be authored in source code using the builder API (e.g. import the original component and call .extend() there) so the extraction pipeline can resolve them at build time.`);
293
+ }
294
+ });
221
295
  }
222
296
  //#endregion
223
297
  //#region src/runtime/createClassResolver.ts
package/dist/index.d.ts CHANGED
@@ -5,10 +5,11 @@ export type { KeyframeFrameMap, KeyframeRef, Keyframes } from './keyframes';
5
5
  export { createComponent } from './runtime';
6
6
  export { createClassResolver } from './runtime/createClassResolver';
7
7
  export { createComposedFamily } from './runtime/createComposedFamily';
8
- export type { CreateKeyframesFactory, GlobalStyleBlock, GlobalStyleMap, GlobalStylesFactory, SerializedConfig, SystemInstance, } from './SystemBuilder';
8
+ export type { CreateKeyframesFactory, FontFace, FontFaceSrc, GlobalStyleBlock, GlobalStyleMap, GlobalStylesFactory, SerializedConfig, SystemInstance, } from './SystemBuilder';
9
9
  export { createSystem, SystemBuilder } from './SystemBuilder';
10
10
  export { createScale, numericOrStringScale, numericScale, stringScale, } from './scales/createScale';
11
- export { BUILT_IN_SELECTORS, type SelectorAlias, type SelectorAliasMap, } from './selectors';
11
+ export { BUILT_IN_CONDITIONS, type ConditionAlias, type ConditionAliasMap, type ConditionKind, type Conditions, type ConditionsOf, type RawAtRuleKey, type RegistryBrand, type SelectorsOf, type UnknownAtRule, type UnknownConditionAlias, } from './conditions.js';
12
+ export { BUILT_IN_SELECTORS, type SelectorAlias, type SelectorAliasMap, type Selectors, } from './selectors';
12
13
  export type { Assign, AssignValueIfUnmergable, ColorModeConfig, FindPath, KeyAsVariable, LiteralPaths, Mergable, Merge, MergeTheme, Path, PathToLiteral, PathValue, PrivateThemeKeys, SanitizeKey, } from './theme';
13
14
  export { createTheme, ThemeBuilder } from './theme';
14
15
  export { borderShorthand } from './transforms/border';
@@ -16,9 +17,9 @@ export { createTransform, type NamedTransform, type TransformFn, } from './trans
16
17
  export { gridItem, gridItemRatio } from './transforms/grid';
17
18
  export { percentageOrAbsolute, size } from './transforms/size';
18
19
  export type { AnimusComponent, AnimusWrappedComponent, AnyBrandedComponent, ComposedFamily, SharedConfig, VariantPropsOf, } from './types/component';
19
- export type { AbstractParser, BuiltInSelectorAlias, CompoundEntry, CSSPropMap, CSSProps, CustomPropConfig, Parser, ParserProps, Prop, PropertyValues, Scale, ScaleValue, SelectorAliasProps, SystemProps, ThemedCSSPropMap, ThemedCSSProps, ThemedScale, ThemedScaleValue, VariantConfig, } from './types/config';
20
+ export type { AbstractParser, BuiltInConditionAlias, BuiltInSelectorAlias, CompoundEntry, CSSPropMap, CSSProps, CustomPropConfig, Parser, ParserProps, Prop, PropertyValues, Scale, ScaleValue, SelectorAliasProps, SystemProps, ThemedCSSPropMap, ThemedCSSProps, ThemedScale, ThemedScaleValue, VariantConfig, } from './types/config';
20
21
  export type { AbstractProps, MediaQueryMap, ResponsiveProp, ThemeProps, } from './types/props';
21
22
  export type { ArrayScale, MapScale } from './types/scales';
22
23
  export type { CSSObject } from './types/shared';
23
- export type { AbstractTheme, BaseTheme, ColorTokenRef, CSSColorValue, EmittedScales, EmittedTokenPaths, ScaleTokenRef, SerializedTheme, Theme, ThemeManifest, TokenScales, } from './types/theme';
24
+ export type { AbstractTheme, BaseTheme, BrowserColorSchemeConfig, ColorModeOptions, ColorTokenRef, ContextualVarRegistration, CSSColorValue, EmittedScales, EmittedTokenPaths, ScaleTokenRef, SerializedTheme, SystemPreferenceConfig, Theme, ThemeManifest, TokenScales, } from './types/theme';
24
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAIzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,MAAM,EACN,uBAAuB,EACvB,eAAe,EACf,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,UAAU,EACV,IAAI,EACJ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE/D,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,IAAI,EACJ,cAAc,EACd,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,YAAY,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,KAAK,EACL,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}