@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.
- package/README.md +125 -4
- package/dist/Animus.d.ts +2 -3
- package/dist/Animus.d.ts.map +1 -1
- package/dist/AnimusExtended.d.ts +2 -3
- package/dist/AnimusExtended.d.ts.map +1 -1
- package/dist/SystemBuilder.d.ts +55 -8
- package/dist/SystemBuilder.d.ts.map +1 -1
- package/dist/appearance/index.d.ts +75 -0
- package/dist/appearance/index.d.ts.map +1 -0
- package/dist/appearance/index.js +179 -0
- package/dist/bootstrap/createAppearanceBootstrap.d.ts +71 -0
- package/dist/bootstrap/createAppearanceBootstrap.d.ts.map +1 -0
- package/dist/bootstrap/index.d.ts +2 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +98 -0
- package/dist/composeWithContext.d.ts.map +1 -1
- package/dist/composeWithContext.js +43 -22
- package/dist/conditions.d.ts +163 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/{createComposedFamily-DSE2ZuRE.js → createComposedFamily-DJ2aqfqN.js} +141 -67
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +648 -25
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/resolveClasses.d.ts.map +1 -1
- package/dist/runtime-entry.js +1 -1
- package/dist/selectors.d.ts +22 -0
- package/dist/selectors.d.ts.map +1 -1
- package/dist/theme/createTheme.d.ts +47 -4
- package/dist/theme/createTheme.d.ts.map +1 -1
- package/dist/types/component.d.ts +27 -10
- package/dist/types/component.d.ts.map +1 -1
- package/dist/types/config.d.ts +124 -11
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/props.d.ts +0 -4
- package/dist/types/props.d.ts.map +1 -1
- package/dist/types/theme.d.ts +132 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/dist/utils/deepMerge.d.ts +0 -3
- package/dist/utils/deepMerge.d.ts.map +1 -1
- package/package.json +12 -4
|
@@ -57,13 +57,14 @@ function warnDroppedValue(baseClassName, propName, serializedValue) {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
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
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
219
|
-
|
|
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 {
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|