@animus-ui/system 0.1.0-next.18 → 0.1.0-next.21
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/dist/compose.d.ts +21 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +158 -45
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/theme/createTheme.d.ts +37 -36
- package/dist/theme/createTheme.d.ts.map +1 -1
- package/dist/types/component.d.ts +102 -1
- package/dist/types/component.d.ts.map +1 -1
- package/dist/types/config.d.ts +3 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/theme.d.ts +29 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AnimusComponent, ComposedFamily, SharedConfig } from './types/component';
|
|
2
|
+
type AnyAnimusComponent = AnimusComponent<any, any, any, any, any, any, any, any>;
|
|
3
|
+
/**
|
|
4
|
+
* Compose independently-authored Animus components into a sealed,
|
|
5
|
+
* namespaced component family with shared variant propagation via
|
|
6
|
+
* React context.
|
|
7
|
+
*
|
|
8
|
+
* - **Enforce**: TypeScript ensures shared keys exist on Root (the
|
|
9
|
+
* provider). Non-Root slots that have the key consume it from
|
|
10
|
+
* context; slots without the key are unaffected.
|
|
11
|
+
* - **Wire**: Root provides shared variant values via context.
|
|
12
|
+
* Child slots consume from context. Direct props override context.
|
|
13
|
+
* - **Seal**: Output components are plain ForwardRefExoticComponent —
|
|
14
|
+
* no `.extend()`, no builder methods. One-way door from builder-land
|
|
15
|
+
* to component-land.
|
|
16
|
+
*/
|
|
17
|
+
export declare function compose<Slots extends Record<string, AnyAnimusComponent>, const Shared extends SharedConfig<Slots>>(slots: Slots, options: {
|
|
18
|
+
shared: Shared;
|
|
19
|
+
}): ComposedFamily<Slots>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,KAAK,kBAAkB,GAAG,eAAe,CACvC,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAC;AAIF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CACrB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAChD,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,KAAK,CAAC,EACxC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAmElE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { Animus, AnimusWithAll } from './Animus';
|
|
2
2
|
export { AnimusExtended, AnimusExtendedWithAll } from './AnimusExtended';
|
|
3
|
+
export { compose } from './compose';
|
|
3
4
|
export { PropertyBuilder } from './PropertyBuilder';
|
|
4
5
|
export { createComponent } from './runtime';
|
|
5
6
|
export { createClassResolver } from './runtime/createClassResolver';
|
|
@@ -12,10 +13,10 @@ export { borderShorthand } from './transforms/border';
|
|
|
12
13
|
export { createTransform, type NamedTransform, type TransformFn, } from './transforms/createTransform';
|
|
13
14
|
export { gridItem, gridItemRatio } from './transforms/grid';
|
|
14
15
|
export { percentageOrAbsolute, size } from './transforms/size';
|
|
15
|
-
export type { AnimusComponent, AnimusWrappedComponent, } from './types/component';
|
|
16
|
+
export type { AnimusComponent, AnimusWrappedComponent, ComposedFamily, ComposedRoot, ComposedSlot, SharedConfig, SharedVariantKeys, VariantPropsOf, } from './types/component';
|
|
16
17
|
export type { AbstractParser, CompoundEntry, CSSPropMap, CSSProps, Parser, ParserProps, Prop, PropertyValues, Scale, ScaleValue, SystemProps, ThemedCSSPropMap, ThemedCSSProps, ThemedScale, ThemedScaleValue, VariantConfig, } from './types/config';
|
|
17
18
|
export type { AbstractProps, MediaQueryArray, MediaQueryMap, ResponsiveProp, ThemeProps, } from './types/props';
|
|
18
19
|
export type { ArrayScale, MapScale } from './types/scales';
|
|
19
20
|
export type { CSSObject } from './types/shared';
|
|
20
|
-
export type { AbstractTheme, BaseTheme, Breakpoints, CSSColorValue, Theme, ThemeManifest, TokenScales, } from './types/theme';
|
|
21
|
+
export type { AbstractTheme, BaseTheme, Breakpoints, CSSColorValue, EmittedScales, EmittedTokenPaths, ScaleTokenRef, Theme, ThemeManifest, TokenScales, } from './types/theme';
|
|
21
22
|
//# 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;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,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,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,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,
|
|
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;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,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,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,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,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,WAAW,EACX,IAAI,EACJ,cAAc,EACd,KAAK,EACL,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,aAAa,EACb,eAAe,EACf,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,WAAW,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,KAAK,EACL,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as borderShorthand, c as numericOrStringScale, i as gridItemRatio, l as numericScale, n as size, o as createTransform, r as gridItem, s as createScale, t as percentageOrAbsolute, u as stringScale } from "./size-Dge_rsuz.js";
|
|
2
|
-
import { createElement, forwardRef, useRef } from "react";
|
|
2
|
+
import { createContext, createElement, forwardRef, useContext, useRef } from "react";
|
|
3
3
|
//#region src/runtime/resolveClasses.ts
|
|
4
4
|
/**
|
|
5
5
|
* CSS properties that accept unitless numeric values.
|
|
@@ -204,6 +204,7 @@ function createComponent(element, className, config, systemPropMap, dynamicPropC
|
|
|
204
204
|
return createElement(renderElement, domProps);
|
|
205
205
|
});
|
|
206
206
|
Component.displayName = className;
|
|
207
|
+
Component.__variantKeys = new Set(variantProps);
|
|
207
208
|
return Object.assign(Component, { extend: () => {
|
|
208
209
|
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.`);
|
|
209
210
|
} });
|
|
@@ -461,6 +462,67 @@ var Animus = class extends AnimusWithBase {
|
|
|
461
462
|
}
|
|
462
463
|
};
|
|
463
464
|
//#endregion
|
|
465
|
+
//#region src/compose.ts
|
|
466
|
+
const EMPTY_SHARED = {};
|
|
467
|
+
/**
|
|
468
|
+
* Compose independently-authored Animus components into a sealed,
|
|
469
|
+
* namespaced component family with shared variant propagation via
|
|
470
|
+
* React context.
|
|
471
|
+
*
|
|
472
|
+
* - **Enforce**: TypeScript ensures shared keys exist on Root (the
|
|
473
|
+
* provider). Non-Root slots that have the key consume it from
|
|
474
|
+
* context; slots without the key are unaffected.
|
|
475
|
+
* - **Wire**: Root provides shared variant values via context.
|
|
476
|
+
* Child slots consume from context. Direct props override context.
|
|
477
|
+
* - **Seal**: Output components are plain ForwardRefExoticComponent —
|
|
478
|
+
* no `.extend()`, no builder methods. One-way door from builder-land
|
|
479
|
+
* to component-land.
|
|
480
|
+
*/
|
|
481
|
+
function compose(slots, options) {
|
|
482
|
+
const sharedKeys = Object.keys(options.shared);
|
|
483
|
+
const FamilyContext = createContext(EMPTY_SHARED);
|
|
484
|
+
const rootSlot = slots.Root ?? slots.root;
|
|
485
|
+
const familyName = rootSlot?.displayName ? rootSlot.displayName.replace(/[-_].*$/, "") : "Composed";
|
|
486
|
+
const result = {};
|
|
487
|
+
for (const [name, SourceComponent] of Object.entries(slots)) {
|
|
488
|
+
const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);
|
|
489
|
+
if (name.toLowerCase() === "root") {
|
|
490
|
+
const RootWrapper = forwardRef((props, ref) => {
|
|
491
|
+
const sharedValues = {};
|
|
492
|
+
for (const key of sharedKeys) if (key in props) sharedValues[key] = props[key];
|
|
493
|
+
return createElement(FamilyContext.Provider, { value: sharedKeys.length > 0 ? sharedValues : EMPTY_SHARED }, createElement(SourceComponent, {
|
|
494
|
+
...props,
|
|
495
|
+
ref
|
|
496
|
+
}));
|
|
497
|
+
});
|
|
498
|
+
RootWrapper.displayName = `${familyName}.${capitalizedName}`;
|
|
499
|
+
result[capitalizedName] = RootWrapper;
|
|
500
|
+
} else {
|
|
501
|
+
const knownKeys = SourceComponent.__variantKeys;
|
|
502
|
+
const ChildWrapper = forwardRef((props, ref) => {
|
|
503
|
+
const shared = useContext(FamilyContext);
|
|
504
|
+
let merged;
|
|
505
|
+
if (knownKeys && sharedKeys.length > 0) {
|
|
506
|
+
const filtered = {};
|
|
507
|
+
for (const key of sharedKeys) if (knownKeys.has(key) && key in shared) filtered[key] = shared[key];
|
|
508
|
+
merged = {
|
|
509
|
+
...filtered,
|
|
510
|
+
...props,
|
|
511
|
+
ref
|
|
512
|
+
};
|
|
513
|
+
} else merged = {
|
|
514
|
+
...props,
|
|
515
|
+
ref
|
|
516
|
+
};
|
|
517
|
+
return createElement(SourceComponent, merged);
|
|
518
|
+
});
|
|
519
|
+
ChildWrapper.displayName = `${familyName}.${capitalizedName}`;
|
|
520
|
+
result[capitalizedName] = ChildWrapper;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return result;
|
|
524
|
+
}
|
|
525
|
+
//#endregion
|
|
464
526
|
//#region src/PropertyBuilder.ts
|
|
465
527
|
var PropertyBuilder = class PropertyBuilder {
|
|
466
528
|
#props;
|
|
@@ -797,46 +859,39 @@ function validateColors(colors) {
|
|
|
797
859
|
for (const [key, value] of Object.entries(colors)) if (isObject(value)) validateColors(value);
|
|
798
860
|
else if (!isValidCSSColor(value)) throw new Error(`addColors: '${String(value)}' is not a valid CSS <color> value for key '${key}'. Expected hex (#fff), rgb(), hsl(), oklch(), named color, transparent, or currentColor.`);
|
|
799
861
|
}
|
|
800
|
-
var ThemeBuilder = class {
|
|
862
|
+
var ThemeBuilder = class ThemeBuilder {
|
|
801
863
|
#theme = {};
|
|
864
|
+
#emittedScales = /* @__PURE__ */ new Set();
|
|
802
865
|
constructor(baseTheme) {
|
|
803
866
|
this.#theme = baseTheme;
|
|
804
867
|
}
|
|
805
|
-
/**
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
createScaleVariables(key) {
|
|
811
|
-
const { variables, tokens } = serializeTokens(this.#theme[key], key, this.#theme);
|
|
812
|
-
this.#theme = merge({}, this.#theme, {
|
|
813
|
-
[key]: tokens,
|
|
814
|
-
_variables: { [key]: variables },
|
|
815
|
-
_tokens: { [key]: this.#theme[key] }
|
|
816
|
-
});
|
|
817
|
-
return this;
|
|
868
|
+
/** Create a new builder checkpoint, carrying forward emittedScales state. */
|
|
869
|
+
#checkpoint(nextTheme) {
|
|
870
|
+
const next = new ThemeBuilder(nextTheme);
|
|
871
|
+
for (const s of this.#emittedScales) next.#emittedScales.add(s);
|
|
872
|
+
return next;
|
|
818
873
|
}
|
|
819
874
|
/**
|
|
820
|
-
*
|
|
821
|
-
* @param colors A map of color tokens to add to the theme. These tokens are immediately converted to CSS Variables `--color-${key}`.
|
|
875
|
+
* @param colors A map of color tokens. Immediately converted to CSS variables `--color-${key}`.
|
|
822
876
|
* @example .addColors({ navy: 'navy', hyper: 'purple' })
|
|
823
877
|
*/
|
|
824
878
|
addColors(colors) {
|
|
825
879
|
validateColors(colors);
|
|
826
880
|
const flatColors = flattenScale(colors);
|
|
827
881
|
const { variables, tokens } = serializeTokens(flatColors, "color", this.#theme);
|
|
828
|
-
|
|
882
|
+
const nextTheme = merge({}, this.#theme, {
|
|
829
883
|
colors: tokens,
|
|
830
884
|
_variables: { root: variables },
|
|
831
885
|
_tokens: { colors: flatColors }
|
|
832
886
|
});
|
|
833
|
-
|
|
887
|
+
const next = this.#checkpoint(nextTheme);
|
|
888
|
+
next.#emittedScales.add("colors");
|
|
889
|
+
return next;
|
|
834
890
|
}
|
|
835
891
|
/**
|
|
836
|
-
*
|
|
837
|
-
* @param
|
|
838
|
-
* @
|
|
839
|
-
* @example .addColorModes('light', { light: { primary: 'hyper' }, { dark: { primary: 'navy' } } })
|
|
892
|
+
* @param initialMode Default color mode key.
|
|
893
|
+
* @param modeConfig Map of color modes with semantic aliases pointing to palette keys.
|
|
894
|
+
* @example .addColorModes('dark', { dark: { primary: 'ember' }, light: { primary: 'void' } })
|
|
840
895
|
*/
|
|
841
896
|
addColorModes(initialMode, modeConfig) {
|
|
842
897
|
const availableColors = this.#theme._tokens?.colors ? Object.keys(this.#theme._tokens.colors) : Object.keys(this.#theme.colors || {});
|
|
@@ -845,7 +900,7 @@ var ThemeBuilder = class {
|
|
|
845
900
|
const modes = mapValues(modeConfig, (mode) => flattenScale(mode));
|
|
846
901
|
const { tokens: colors, variables } = serializeTokens(mapValues(merge({}, this.#theme.modes?.[initialMode], modes[initialMode]), (color) => this.#theme.colors[color]), "color", this.#theme);
|
|
847
902
|
const getColorValue = (color) => this.#theme._tokens?.colors?.[color];
|
|
848
|
-
|
|
903
|
+
const nextTheme = merge({}, this.#theme, {
|
|
849
904
|
colors,
|
|
850
905
|
modes,
|
|
851
906
|
mode: initialMode,
|
|
@@ -853,36 +908,46 @@ var ThemeBuilder = class {
|
|
|
853
908
|
_variables: { mode: variables },
|
|
854
909
|
_tokens: { modes: mapValues(modes, (mode) => mapValues(mode, getColorValue)) }
|
|
855
910
|
});
|
|
856
|
-
return this;
|
|
911
|
+
return this.#checkpoint(nextTheme);
|
|
857
912
|
}
|
|
858
913
|
/**
|
|
914
|
+
* Add a named scale to the theme.
|
|
859
915
|
*
|
|
860
|
-
* @param
|
|
861
|
-
* @param
|
|
862
|
-
* @
|
|
916
|
+
* @param config.name - Scale name (e.g. 'space', 'sizes')
|
|
917
|
+
* @param config.values - Scale value map
|
|
918
|
+
* @param config.emit - When true, generates CSS variables (default: false)
|
|
919
|
+
*
|
|
920
|
+
* @example
|
|
921
|
+
* .addScale({ name: 'space', values: { 0: '0', 8: '0.5rem', 16: '1rem' } })
|
|
922
|
+
* .addScale({ name: 'sizes', emit: true, values: { navHeight: '48px' } })
|
|
863
923
|
*/
|
|
864
|
-
addScale(
|
|
865
|
-
|
|
866
|
-
|
|
924
|
+
addScale(config) {
|
|
925
|
+
const { name, values, emit } = config;
|
|
926
|
+
const flattened = flattenScale(values);
|
|
927
|
+
let nextTheme;
|
|
928
|
+
if (emit) {
|
|
929
|
+
const { variables, tokens } = serializeTokens(flattened, name, this.#theme);
|
|
930
|
+
nextTheme = merge({}, this.#theme, {
|
|
931
|
+
[name]: tokens,
|
|
932
|
+
_variables: { [name]: variables },
|
|
933
|
+
_tokens: { [name]: flattened }
|
|
934
|
+
});
|
|
935
|
+
} else nextTheme = merge({}, this.#theme, { [name]: flattened });
|
|
936
|
+
const next = this.#checkpoint(nextTheme);
|
|
937
|
+
if (emit) next.#emittedScales.add(name);
|
|
938
|
+
return next;
|
|
867
939
|
}
|
|
868
940
|
/**
|
|
869
|
-
*
|
|
870
|
-
* @
|
|
871
|
-
* @param updateFn A function that accepts an argument of the current values at the specified keys an returns a map of new values to merge.
|
|
872
|
-
* @example .updateScale('fonts', ({ basic }) => ({ basicFallback: `{basic}, Montserrat` }))
|
|
941
|
+
* @param key A current key of theme to update with computed values.
|
|
942
|
+
* @example .updateScale('fonts', ({ basic }) => ({ basicFallback: `${basic}, Montserrat` }))
|
|
873
943
|
*/
|
|
874
944
|
updateScale(key, updateFn) {
|
|
875
|
-
|
|
876
|
-
return this;
|
|
945
|
+
const nextTheme = merge({}, this.#theme, { [key]: updateFn(this.#theme[key]) });
|
|
946
|
+
return this.#checkpoint(nextTheme);
|
|
877
947
|
}
|
|
878
|
-
/**
|
|
879
|
-
* This finalizes the theme build and returns the final theme and variables to be provided.
|
|
880
|
-
* Simplify flattens the deeply nested MergeTheme chain into a shallow object type.
|
|
881
|
-
*
|
|
882
|
-
* The returned theme object also has a non-enumerable `.manifest` property containing
|
|
883
|
-
* a structured ThemeManifest for plugin consumption.
|
|
884
|
-
*/
|
|
948
|
+
/** Finalize the theme build. Returns the theme with a non-enumerable `.manifest` property. */
|
|
885
949
|
build() {
|
|
950
|
+
resolveThemeTokenRefs(this.#theme, this.#emittedScales);
|
|
886
951
|
const { variables } = serializeTokens(mapValues(this.#theme.breakpoints, (val) => `${val}px`), "breakpoint", this.#theme);
|
|
887
952
|
const theme = merge({}, this.#theme, {
|
|
888
953
|
_variables: { breakpoints: variables },
|
|
@@ -901,6 +966,54 @@ var ThemeBuilder = class {
|
|
|
901
966
|
function createTheme(base) {
|
|
902
967
|
return new ThemeBuilder(base);
|
|
903
968
|
}
|
|
969
|
+
/** Token ref pattern: {scale.key} */
|
|
970
|
+
const TOKEN_REF_RE = /\{([^}]+)\}/g;
|
|
971
|
+
/**
|
|
972
|
+
* Resolve token refs ({scale.key}) in all scale values.
|
|
973
|
+
* Only refs to emitted scales (those with CSS variables) are valid.
|
|
974
|
+
* Runs once at build() time after all scales have been collected.
|
|
975
|
+
*/
|
|
976
|
+
function resolveThemeTokenRefs(theme, emittedScales) {
|
|
977
|
+
for (const [scaleName, scaleValue] of Object.entries(theme)) {
|
|
978
|
+
if (scaleName.startsWith("_")) continue;
|
|
979
|
+
if (scaleName === "breakpoints" || scaleName === "mode" || scaleName === "modes") continue;
|
|
980
|
+
if (typeof scaleValue === "function") continue;
|
|
981
|
+
if (!isObject(scaleValue)) continue;
|
|
982
|
+
for (const [key, value] of Object.entries(scaleValue)) {
|
|
983
|
+
if (typeof value !== "string") continue;
|
|
984
|
+
if (!value.includes("{")) continue;
|
|
985
|
+
const resolved = value.replace(TOKEN_REF_RE, (match, ref) => {
|
|
986
|
+
const dotIdx = ref.indexOf(".");
|
|
987
|
+
if (dotIdx === -1) return match;
|
|
988
|
+
const refScale = ref.slice(0, dotIdx);
|
|
989
|
+
const refKey = ref.slice(dotIdx + 1);
|
|
990
|
+
if (refScale === scaleName) {
|
|
991
|
+
console.warn(`[animus] Self-referential token ref {${ref}} in scale '${scaleName}' — skipped`);
|
|
992
|
+
return match;
|
|
993
|
+
}
|
|
994
|
+
const targetScale = theme[refScale];
|
|
995
|
+
if (!targetScale || !isObject(targetScale)) {
|
|
996
|
+
console.warn(`[animus] Token ref {${ref}} references unknown scale '${refScale}'`);
|
|
997
|
+
return match;
|
|
998
|
+
}
|
|
999
|
+
const resolvedValue = targetScale[refKey];
|
|
1000
|
+
if (resolvedValue === void 0) {
|
|
1001
|
+
console.warn(`[animus] Token ref {${ref}} — key '${refKey}' not found in scale '${refScale}'`);
|
|
1002
|
+
return match;
|
|
1003
|
+
}
|
|
1004
|
+
return String(resolvedValue);
|
|
1005
|
+
});
|
|
1006
|
+
if (resolved !== value) {
|
|
1007
|
+
scaleValue[key] = resolved;
|
|
1008
|
+
if (theme._tokens?.[scaleName]) theme._tokens[scaleName][key] = resolved;
|
|
1009
|
+
if (theme._variables?.[scaleName]) {
|
|
1010
|
+
const varName = `--${scaleName}-${key.replace("$", "")}`;
|
|
1011
|
+
if (theme._variables[scaleName][varName] !== void 0) theme._variables[scaleName][varName] = resolved;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
904
1017
|
/**
|
|
905
1018
|
* Assemble a ThemeManifest from the built theme object.
|
|
906
1019
|
*
|
|
@@ -979,4 +1092,4 @@ function flattenModeTokensCss(lines, obj, prefix) {
|
|
|
979
1092
|
}
|
|
980
1093
|
}
|
|
981
1094
|
//#endregion
|
|
982
|
-
export { Animus, AnimusExtended, AnimusExtendedWithAll, AnimusWithAll, PropertyBuilder, SystemBuilder, ThemeBuilder, borderShorthand, createClassResolver, createComponent, createScale, createSystem, createTheme, createTransform, flattenScale, gridItem, gridItemRatio, numericOrStringScale, numericScale, percentageOrAbsolute, serializeTokens, size, stringScale };
|
|
1095
|
+
export { Animus, AnimusExtended, AnimusExtendedWithAll, AnimusWithAll, PropertyBuilder, SystemBuilder, ThemeBuilder, borderShorthand, compose, createClassResolver, createComponent, createScale, createSystem, createTheme, createTransform, flattenScale, gridItem, gridItemRatio, numericOrStringScale, numericScale, percentageOrAbsolute, serializeTokens, size, stringScale };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,UAAU,EAAU,MAAM,OAAO,CAAC;AAE1D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,UAAU,eAAgB,SAAQ,mBAAmB;CAAG;AAIxD,KAAK,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAErD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG;IACrD,MAAM,EAAE,MAAM,KAAK,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,EACvB,aAAa,CAAC,EAAE,aAAa,EAC7B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,UAAU,EAAU,MAAM,OAAO,CAAC;AAE1D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,UAAU,eAAgB,SAAQ,mBAAmB;CAAG;AAIxD,KAAK,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAErD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG;IACrD,MAAM,EAAE,MAAM,KAAK,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,EACvB,aAAa,CAAC,EAAE,aAAa,EAC7B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,eAAe,CAoFjB"}
|
|
@@ -2,61 +2,62 @@ import { AbstractTheme, CSSColorValue } from '../types/theme';
|
|
|
2
2
|
import { LiteralPaths } from './flattenScale';
|
|
3
3
|
import { KeyAsVariable } from './serializeTokens';
|
|
4
4
|
import { ColorModeConfig, Merge, MergeTheme, PrivateThemeKeys } from './types';
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Validate token refs in scale values at the type level.
|
|
7
|
+
* Accepts `{scale.key}` for any emitted scale, plus `{colors.key/${number}}` opacity syntax.
|
|
8
|
+
*/
|
|
9
|
+
type ValidateScaleRef<V, ValidPaths extends string> = V extends string ? V extends `${string}{${infer Path}}${string}` ? Path extends ValidPaths ? V : Path extends `${infer Base}/${number}` ? Base extends ValidPaths & `colors.${string}` ? V : `{${Path}} is not a valid token ref` : `{${Path}} is not a valid token ref` : V : V;
|
|
10
|
+
/** Walk a values record and validate each value's token refs. */
|
|
11
|
+
type ValidateScaleValues<V extends Record<string | number, unknown>, ValidPaths extends string> = {
|
|
12
|
+
[K in keyof V]: V[K] extends Record<string, unknown> ? ValidateScaleValues<V[K], ValidPaths> : ValidateScaleRef<V[K], ValidPaths>;
|
|
13
|
+
};
|
|
14
|
+
export declare class ThemeBuilder<T extends AbstractTheme, Emitted extends string = never> {
|
|
6
15
|
#private;
|
|
7
16
|
constructor(baseTheme: T);
|
|
8
17
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @param key A key of the current theme to transform into CSS Variables and Variable References
|
|
11
|
-
* @example .createScaleVariables('fontSize')
|
|
12
|
-
*/
|
|
13
|
-
createScaleVariables<Key extends keyof Omit<T, 'breakpoints'> & string>(key: Key): ThemeBuilder<MergeTheme<T, PrivateThemeKeys, Record<Key, Record<Key, KeyAsVariable<T[Key], Key>>>>>;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* @param colors A map of color tokens to add to the theme. These tokens are immediately converted to CSS Variables `--color-${key}`.
|
|
18
|
+
* @param colors A map of color tokens. Immediately converted to CSS variables `--color-${key}`.
|
|
17
19
|
* @example .addColors({ navy: 'navy', hyper: 'purple' })
|
|
18
20
|
*/
|
|
19
|
-
addColors<Colors extends Record<string, CSSColorValue | Record<string, CSSColorValue>>, NextColors extends LiteralPaths<Colors, '-'>>(colors: Colors): ThemeBuilder<MergeTheme<T & PrivateThemeKeys, Record<
|
|
21
|
+
addColors<Colors extends Record<string, CSSColorValue | Record<string, CSSColorValue>>, NextColors extends LiteralPaths<Colors, '-'>>(colors: Colors): ThemeBuilder<MergeTheme<T & PrivateThemeKeys, Record<"colors", KeyAsVariable<NextColors, "color">>>, "colors" | Emitted>;
|
|
20
22
|
/**
|
|
21
|
-
*
|
|
22
|
-
* @param
|
|
23
|
-
* @
|
|
24
|
-
* @example .addColorModes('light', { light: { primary: 'hyper' }, { dark: { primary: 'navy' } } })
|
|
23
|
+
* @param initialMode Default color mode key.
|
|
24
|
+
* @param modeConfig Map of color modes with semantic aliases pointing to palette keys.
|
|
25
|
+
* @example .addColorModes('dark', { dark: { primary: 'ember' }, light: { primary: 'void' } })
|
|
25
26
|
*/
|
|
26
27
|
addColorModes<Modes extends string, InitialMode extends keyof Config, Colors extends keyof T['colors'], ModeColors extends ColorModeConfig<Colors>, Config extends Record<Modes, ModeColors>, ColorAliases extends {
|
|
27
28
|
[K in keyof Config]: LiteralPaths<Config[K], '-', '_'>;
|
|
28
29
|
}>(initialMode: InitialMode, modeConfig: Config): ThemeBuilder<MergeTheme<T & PrivateThemeKeys, {
|
|
29
|
-
colors: KeyAsVariable<LiteralPaths<Config[keyof Config],
|
|
30
|
-
modes: Merge<T[
|
|
30
|
+
colors: KeyAsVariable<LiteralPaths<Config[keyof Config], "-", "_">, "colors"> & T["colors"];
|
|
31
|
+
modes: Merge<T["modes"], ColorAliases>;
|
|
31
32
|
mode: keyof Config;
|
|
32
|
-
_getColorValue: (color: keyof T[
|
|
33
|
-
}
|
|
33
|
+
_getColorValue: (color: keyof T["colors"]) => string;
|
|
34
|
+
}>, Emitted>;
|
|
34
35
|
/**
|
|
36
|
+
* Add a named scale to the theme.
|
|
35
37
|
*
|
|
36
|
-
* @param
|
|
37
|
-
* @param
|
|
38
|
-
* @
|
|
39
|
-
*/
|
|
40
|
-
addScale<Key extends string, Fn extends (theme: T) => Record<string | number, string | number | Record<string, string | number>>, NewScale extends LiteralPaths<ReturnType<Fn>, '-'>>(key: Key, createScale: Fn): ThemeBuilder<{
|
|
41
|
-
[K in keyof MergeTheme<T, Record<Key, NewScale>>]: MergeTheme<T, Record<Key, NewScale>>[K];
|
|
42
|
-
}>;
|
|
43
|
-
/**
|
|
38
|
+
* @param config.name - Scale name (e.g. 'space', 'sizes')
|
|
39
|
+
* @param config.values - Scale value map
|
|
40
|
+
* @param config.emit - When true, generates CSS variables (default: false)
|
|
44
41
|
*
|
|
45
|
-
* @
|
|
46
|
-
*
|
|
47
|
-
*
|
|
42
|
+
* @example
|
|
43
|
+
* .addScale({ name: 'space', values: { 0: '0', 8: '0.5rem', 16: '1rem' } })
|
|
44
|
+
* .addScale({ name: 'sizes', emit: true, values: { navHeight: '48px' } })
|
|
48
45
|
*/
|
|
49
|
-
|
|
46
|
+
addScale<Key extends string, const Values extends Record<string | number, string | number | Record<string, string | number>>, Emit extends boolean = false, NewScale extends LiteralPaths<Values, '-'> = LiteralPaths<Values, '-'>, ValidPaths extends string = keyof LiteralPaths<Pick<T, Extract<Emitted | 'colors', keyof T>>, '.'> & string>(config: {
|
|
47
|
+
name: Key;
|
|
48
|
+
values: Values & ValidateScaleValues<Values, ValidPaths>;
|
|
49
|
+
emit?: Emit;
|
|
50
|
+
}): ThemeBuilder<{ [K in keyof MergeTheme<T, Record<Key, Emit extends true ? KeyAsVariable<NewScale, Key> : NewScale>>]: MergeTheme<T, Record<Key, Emit extends true ? KeyAsVariable<NewScale, Key> : NewScale>>[K]; }, Emit extends true ? Emitted | Key : Emitted>;
|
|
50
51
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* The returned theme object also has a non-enumerable `.manifest` property containing
|
|
55
|
-
* a structured ThemeManifest for plugin consumption.
|
|
52
|
+
* @param key A current key of theme to update with computed values.
|
|
53
|
+
* @example .updateScale('fonts', ({ basic }) => ({ basicFallback: `${basic}, Montserrat` }))
|
|
56
54
|
*/
|
|
55
|
+
updateScale<Key extends keyof T, Fn extends (tokens: T[Key]) => Record<string | number, unknown>>(key: Key, updateFn: Fn): ThemeBuilder<T & Record<Key, T[Key] & ReturnType<Fn>>, Emitted>;
|
|
56
|
+
/** Finalize the theme build. Returns the theme with a non-enumerable `.manifest` property. */
|
|
57
57
|
build(): {
|
|
58
58
|
[K in keyof (T & PrivateThemeKeys)]: (T & PrivateThemeKeys)[K];
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
export declare function createTheme<T extends AbstractTheme>(base: T): ThemeBuilder<T>;
|
|
61
|
+
export declare function createTheme<T extends AbstractTheme>(base: T): ThemeBuilder<T, never>;
|
|
62
|
+
export {};
|
|
62
63
|
//# sourceMappingURL=createTheme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgP/E,
|
|
1
|
+
{"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../src/theme/createTheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,8 +40,18 @@ type VariantProps<V> = string extends keyof V ? {} : {
|
|
|
40
40
|
type StateProps<S> = string extends keyof S ? {} : {
|
|
41
41
|
[K in keyof S]?: boolean;
|
|
42
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* Union of all prop keys that Animus manages. These override HTML attributes
|
|
45
|
+
* of the same name — the type-level equivalent of shouldForwardProp / isPropValid.
|
|
46
|
+
* The runtime (filterProps in createComponent) already strips these before
|
|
47
|
+
* forwarding to the DOM element; this ensures the types match.
|
|
48
|
+
*
|
|
49
|
+
* Computed from each source individually (not keyof an intersection) to
|
|
50
|
+
* avoid TS2590 "union type too complex" during declaration emit.
|
|
51
|
+
*/
|
|
52
|
+
type AnimusManagedKeys<PR extends Record<string, Prop>, GR extends Record<string, (keyof PR)[]>, V, S, AG, CP extends Record<string, Prop>> = ActiveGroupPropNames<PR, GR, AG> | keyof VariantProps<V> | keyof StateProps<S> | keyof CP | 'as' | 'className' | 'children';
|
|
43
53
|
/** Component type for .asElement() — HTML element tag with full Animus props. */
|
|
44
|
-
export type AnimusComponent<El extends keyof JSX.IntrinsicElements, PR extends Record<string, Prop>, GR extends Record<string, (keyof PR)[]>, BS, V, S, AG, CP extends Record<string, Prop>> = ForwardRefExoticComponent<ComponentPropsWithRef<El
|
|
54
|
+
export type AnimusComponent<El extends keyof JSX.IntrinsicElements, PR extends Record<string, Prop>, GR extends Record<string, (keyof PR)[]>, BS, V, S, AG, CP extends Record<string, Prop>> = ForwardRefExoticComponent<Omit<ComponentPropsWithRef<El>, AnimusManagedKeys<PR, GR, V, S, AG, CP>> & GroupProps<PR, GR, AG> & VariantProps<V> & StateProps<S> & CustomPropValues<CP> & {
|
|
45
55
|
as?: keyof JSX.IntrinsicElements | ComponentType<{
|
|
46
56
|
className?: string;
|
|
47
57
|
}>;
|
|
@@ -56,5 +66,96 @@ export type AnimusWrappedComponent<PR extends Record<string, Prop>, GR extends R
|
|
|
56
66
|
className?: string;
|
|
57
67
|
children?: ReactNode;
|
|
58
68
|
}> & ExtendFn<PR, GR, BS, V, S, AG, CP>;
|
|
69
|
+
/**
|
|
70
|
+
* Strip string index signatures from a type, keeping only
|
|
71
|
+
* explicitly-declared keys. Needed because ExtendFn widens V
|
|
72
|
+
* with `& Record<string, VariantConfig>`.
|
|
73
|
+
*/
|
|
74
|
+
type StripStringIndex<T> = {
|
|
75
|
+
[K in keyof T as string extends K ? never : K]: T[K];
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Extract the raw variant config (V generic) from an AnimusComponent.
|
|
79
|
+
* Routes through extend()'s return type → .variants field, then
|
|
80
|
+
* strips the string index signature added by ExtendFn's intersection.
|
|
81
|
+
*/
|
|
82
|
+
export type ExtractVariantsConfig<C> = C extends {
|
|
83
|
+
extend: () => {
|
|
84
|
+
variants: infer V;
|
|
85
|
+
};
|
|
86
|
+
} ? StripStringIndex<V> : {};
|
|
87
|
+
/**
|
|
88
|
+
* Extract consumer-facing variant props from an AnimusComponent.
|
|
89
|
+
* Returns { size?: 'sm' | 'lg', variant?: 'fill' | 'ghost', ... }
|
|
90
|
+
*/
|
|
91
|
+
export type VariantPropsOf<C> = VariantProps<ExtractVariantsConfig<C>>;
|
|
92
|
+
/**
|
|
93
|
+
* Union of all variant prop keys across all slots.
|
|
94
|
+
*/
|
|
95
|
+
type AllVariantKeys<Slots extends Record<string, unknown>> = keyof VariantPropsOf<Slots[keyof Slots]>;
|
|
96
|
+
/**
|
|
97
|
+
* Extract the Root slot component from a Slots record.
|
|
98
|
+
* Convention: the key 'root' or 'Root' (case-insensitive match).
|
|
99
|
+
*/
|
|
100
|
+
type RootSlot<Slots extends Record<string, unknown>> = {
|
|
101
|
+
[K in keyof Slots]: Lowercase<K & string> extends 'root' ? Slots[K] : never;
|
|
102
|
+
}[keyof Slots];
|
|
103
|
+
/**
|
|
104
|
+
* Variant keys that exist on the Root slot.
|
|
105
|
+
* Only Root variant keys are valid as shared keys — Root is the
|
|
106
|
+
* provider and must accept the prop to pass it through context.
|
|
107
|
+
*/
|
|
108
|
+
type RootVariantKeys<Slots extends Record<string, unknown>> = keyof VariantPropsOf<RootSlot<Slots>> & string;
|
|
109
|
+
/**
|
|
110
|
+
* Configuration object for shared variant propagation.
|
|
111
|
+
* Keys are variant names from Root. Value is `true` to share.
|
|
112
|
+
* Non-Root slots that have matching variant keys receive the
|
|
113
|
+
* value from context. Slots without the key are unaffected.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* compose(slots, { shared: { density: true, intent: true } })
|
|
117
|
+
*/
|
|
118
|
+
export type SharedConfig<Slots extends Record<string, unknown>> = {
|
|
119
|
+
[K in RootVariantKeys<Slots>]?: true;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* @deprecated Use SharedConfig instead. SharedVariantKeys required
|
|
123
|
+
* every shared key to exist on ALL slots. SharedConfig only requires
|
|
124
|
+
* the key to exist on Root.
|
|
125
|
+
*/
|
|
126
|
+
export type SharedVariantKeys<Slots extends Record<string, unknown>> = {
|
|
127
|
+
[K in AllVariantKeys<Slots> & string]: keyof Slots extends infer S ? S extends keyof Slots ? K extends keyof VariantPropsOf<Slots[S]> ? true : false : never : never extends false ? never : K;
|
|
128
|
+
}[AllVariantKeys<Slots> & string];
|
|
129
|
+
/**
|
|
130
|
+
* Extract the component props from a ForwardRefExoticComponent,
|
|
131
|
+
* including AnimusComponent (which extends it).
|
|
132
|
+
*/
|
|
133
|
+
type PropsOf<C> = C extends ForwardRefExoticComponent<infer P> ? P : never;
|
|
134
|
+
/**
|
|
135
|
+
* Sealed child slot — accepts source component's own props.
|
|
136
|
+
* Shared variant values come from context as defaults;
|
|
137
|
+
* direct props override context. Slots that don't have a
|
|
138
|
+
* shared variant key simply ignore it.
|
|
139
|
+
*/
|
|
140
|
+
export type ComposedSlot<C> = ForwardRefExoticComponent<Omit<PropsOf<C>, 'extend'> & {
|
|
141
|
+
className?: string;
|
|
142
|
+
children?: ReactNode;
|
|
143
|
+
}>;
|
|
144
|
+
/**
|
|
145
|
+
* Sealed Root slot — KEEPS shared variant props (it's the provider).
|
|
146
|
+
* Also accepts children for the Provider wrapper.
|
|
147
|
+
*/
|
|
148
|
+
export type ComposedRoot<C> = ForwardRefExoticComponent<Omit<PropsOf<C>, 'extend'> & {
|
|
149
|
+
className?: string;
|
|
150
|
+
children?: ReactNode;
|
|
151
|
+
}>;
|
|
152
|
+
/**
|
|
153
|
+
* The output of compose() — a record of capitalized slot names mapped
|
|
154
|
+
* to sealed React components. Root gets ComposedRoot (keeps shared props),
|
|
155
|
+
* all other slots get ComposedSlot (own props, context defaults).
|
|
156
|
+
*/
|
|
157
|
+
export type ComposedFamily<Slots extends Record<string, unknown>> = {
|
|
158
|
+
[K in keyof Slots as Capitalize<K & string>]: Lowercase<K & string> extends 'root' ? ComposedRoot<Slots[K]> : ComposedSlot<Slots[K]>;
|
|
159
|
+
};
|
|
59
160
|
export {};
|
|
60
161
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -55,7 +55,9 @@ export type SystemProps<P extends AbstractParser, SafeProps = Omit<Arg<P>, 'them
|
|
|
55
55
|
* instead of a generic T. This enables type-safe CSS object constraints
|
|
56
56
|
* without threading T through the entire class hierarchy.
|
|
57
57
|
*/
|
|
58
|
-
|
|
58
|
+
/** Colors-only: accept `{colors.key/number}` opacity syntax in component styles. */
|
|
59
|
+
type ColorOpacityRef<Config extends Prop> = Config['scale'] extends 'colors' ? 'colors' extends keyof TokenScales<Theme> ? `{colors.${keyof TokenScales<Theme>[Config['scale'] & keyof TokenScales<Theme>] & string}/${number}}` : never : never;
|
|
60
|
+
export type ThemedScaleValue<Config extends Prop> = Config['scale'] extends keyof TokenScales<Theme> ? keyof TokenScales<Theme>[Config['scale']] | NegativeOf<Config, keyof TokenScales<Theme>[Config['scale']]> | PropertyValues<Config, IsEmpty<TokenScales<Theme>[Config['scale']]>> | ColorOpacityRef<Config> : Config['scale'] extends MapScale ? keyof Config['scale'] | NegativeOf<Config, keyof Config['scale']> | PropertyValues<Config, IsEmpty<Config['scale']>> : Config['scale'] extends ArrayScale ? Config['scale'][number] | PropertyValues<Config, IsEmpty<Config['scale']>> : PropertyValues<Config, true>;
|
|
59
61
|
export type ThemedScale<Config extends Prop> = ResponsiveProp<ThemedScaleValue<Config>>;
|
|
60
62
|
/**
|
|
61
63
|
* Theme-aware CSS props — uses the augmentable Theme interface
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
package/dist/types/theme.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LiteralPaths } from '../theme/flattenScale';
|
|
1
2
|
export type { CSSObject } from './shared';
|
|
2
3
|
export interface Breakpoints<T = number> {
|
|
3
4
|
xs: T;
|
|
@@ -39,6 +40,34 @@ export interface Theme extends BaseTheme {
|
|
|
39
40
|
* (string & {}) escape hatch allows future CSS color functions without blocking.
|
|
40
41
|
*/
|
|
41
42
|
export type CSSColorValue = `#${string}` | `rgb(${string})` | `rgba(${string})` | `hsl(${string})` | `hsla(${string})` | `oklch(${string})` | `oklab(${string})` | `lch(${string})` | `lab(${string})` | `color-mix(${string})` | `color(${string})` | 'transparent' | 'currentColor' | (string & {});
|
|
43
|
+
/**
|
|
44
|
+
* Extract scale names from a built theme whose values are CSS variable references.
|
|
45
|
+
* These are scales that were emitted via `addScale({ emit: true })` or `addColors()`.
|
|
46
|
+
*
|
|
47
|
+
* Use with `TokenScales<T>` to pick emitted vs non-emitted subsets:
|
|
48
|
+
* ```ts
|
|
49
|
+
* type Emitted = Pick<TokenScales<T>, EmittedScales<T>>;
|
|
50
|
+
* type Static = Omit<TokenScales<T>, EmittedScales<T>>;
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export type EmittedScales<T> = {
|
|
54
|
+
[K in keyof TokenScales<T>]: TokenScales<T>[K] extends Record<string, `var(--${string})`> ? K : never;
|
|
55
|
+
}[keyof TokenScales<T>];
|
|
56
|
+
/**
|
|
57
|
+
* All valid token ref paths for emitted scales in a theme.
|
|
58
|
+
* Uses LiteralPaths to enumerate `scale.key` paths from emitted scale entries.
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* type Refs = EmittedTokenPaths<typeof tokens>;
|
|
62
|
+
* // → 'colors.primary' | 'colors.bg' | 'sizes.navHeight' | ...
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export type EmittedTokenPaths<T> = keyof LiteralPaths<Pick<TokenScales<T>, EmittedScales<T>>, '.'>;
|
|
66
|
+
/**
|
|
67
|
+
* Token ref pattern type for referencing emitted scales.
|
|
68
|
+
* Constrains the scale name portion of `{scale.key}` to only emitted scales.
|
|
69
|
+
*/
|
|
70
|
+
export type ScaleTokenRef<E extends string> = `${string}{${E}.${string}}${string}`;
|
|
42
71
|
/** Structured manifest emitted by ThemeBuilder.build() for plugin consumption. */
|
|
43
72
|
export interface ThemeManifest {
|
|
44
73
|
/** Flat token key → raw value (e.g. 'space.8' → '0.5rem', 'colors.ember' → '#FF2800') */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM;IACrC,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;CACP;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,IAAI,CAC/B,CAAC,EACD,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAC/E,CAAC;AAEF;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,KAAM,SAAQ,SAAS;CAAG;AAE3C;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB,IAAI,MAAM,EAAE,GACZ,OAAO,MAAM,GAAG,GAChB,QAAQ,MAAM,GAAG,GACjB,OAAO,MAAM,GAAG,GAChB,QAAQ,MAAM,GAAG,GACjB,SAAS,MAAM,GAAG,GAClB,SAAS,MAAM,GAAG,GAClB,OAAO,MAAM,GAAG,GAChB,OAAO,MAAM,GAAG,GAChB,aAAa,MAAM,GAAG,GACtB,SAAS,MAAM,GAAG,GAClB,aAAa,GACb,cAAc,GACd,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uGAAuG;IACvG,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iGAAiG;IACjG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM;IACrC,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;CACP;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,IAAI,CAC/B,CAAC,EACD,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAC/E,CAAC;AAEF;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,KAAM,SAAQ,SAAS;CAAG;AAE3C;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB,IAAI,MAAM,EAAE,GACZ,OAAO,MAAM,GAAG,GAChB,QAAQ,MAAM,GAAG,GACjB,OAAO,MAAM,GAAG,GAChB,QAAQ,MAAM,GAAG,GACjB,SAAS,MAAM,GAAG,GAClB,SAAS,MAAM,GAAG,GAClB,OAAO,MAAM,GAAG,GAChB,OAAO,MAAM,GAAG,GAChB,aAAa,MAAM,GAAG,GACtB,SAAS,MAAM,GAAG,GAClB,aAAa,GACb,cAAc,GACd,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;KAC5B,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAC3D,MAAM,EACN,SAAS,MAAM,GAAG,CACnB,GACG,CAAC,GACD,KAAK;CACV,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,MAAM,YAAY,CACnD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EACtC,GAAG,CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IACxC,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvC,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uGAAuG;IACvG,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iGAAiG;IACjG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
package/package.json
CHANGED