@vitus-labs/rocketstyle 2.0.0-alpha.26 → 2.0.0-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +12 -5
- package/lib/index.js +28 -7
- package/package.json +6 -6
package/lib/index.d.ts
CHANGED
|
@@ -35,6 +35,11 @@ declare const DEFAULT_DIMENSIONS: {
|
|
|
35
35
|
readonly propName: "multiple";
|
|
36
36
|
readonly multi: true;
|
|
37
37
|
};
|
|
38
|
+
readonly modifiers: {
|
|
39
|
+
readonly propName: "modifier";
|
|
40
|
+
readonly multi: true;
|
|
41
|
+
readonly transform: true;
|
|
42
|
+
};
|
|
38
43
|
};
|
|
39
44
|
type DefaultDimensions = typeof DEFAULT_DIMENSIONS;
|
|
40
45
|
//#endregion
|
|
@@ -129,16 +134,17 @@ type ExtractDimensionMulti<T extends DimensionValue> = T extends DimensionValueO
|
|
|
129
134
|
type DimensionValuePrimitive = string;
|
|
130
135
|
type DimensionValueObj = {
|
|
131
136
|
propName: string;
|
|
132
|
-
multi?: boolean;
|
|
137
|
+
multi?: boolean; /** When true, this dimension is evaluated last and its values receive the accumulated theme as argument. */
|
|
138
|
+
transform?: boolean;
|
|
133
139
|
};
|
|
134
140
|
type DimensionValue = DimensionValuePrimitive | DimensionValueObj;
|
|
135
141
|
type Dimensions = Record<string, DimensionValue>;
|
|
136
142
|
type MultiKeys<T extends Dimensions = Dimensions> = Partial<Record<ExtractDimensionKey<T[keyof T]>, true>>;
|
|
137
143
|
type DeepPartial<T> = { [K in keyof T]?: T[K] extends ((...args: any[]) => any) ? T[K] : NonNullable<T[K]> extends Record<string, any> ? DeepPartial<NonNullable<T[K]>> | Extract<T[K], null> : T[K] };
|
|
138
|
-
type DimensionResult<CT> = Record<string, boolean | null | DeepPartial<CT
|
|
139
|
-
type DimensionObj<CT> = DimensionResult<CT>;
|
|
140
|
-
type DimensionCb<T, CT> = (theme: T, mode: ThemeModeCallback, css: Css) => DimensionResult<CT>;
|
|
141
|
-
type DimensionCallbackParam<T, CT> = DimensionObj<CT> | DimensionCb<T, CT>;
|
|
144
|
+
type DimensionResult<CT, T = any> = Record<string, boolean | null | DeepPartial<CT> | ((theme: CT, appTheme: T, mode: ThemeModeCallback, css: Css) => DeepPartial<CT>)>;
|
|
145
|
+
type DimensionObj<CT, T = any> = DimensionResult<CT, T>;
|
|
146
|
+
type DimensionCb<T, CT> = (theme: T, mode: ThemeModeCallback, css: Css) => DimensionResult<CT, T>;
|
|
147
|
+
type DimensionCallbackParam<T, CT> = DimensionObj<CT, T> | DimensionCb<T, CT>;
|
|
142
148
|
type TDKP = Record<ExtractDimensionKey<Dimensions[keyof Dimensions]>, Record<string, boolean | never | Record<string, boolean>> | unknown>;
|
|
143
149
|
type DimensionProps<K extends DimensionValue, D extends Dimensions, P extends CallBackParam, DKP extends TDKP> = { [I in ExtractDimensionKey<D[keyof D]>]: I extends ExtractDimensionKey<K> ? ExtractNullableDimensionKeys<Spread<[DKP[I], NullableKeys<ReturnCbParam<P>>]>> : DKP[I] };
|
|
144
150
|
type DimensionTypesHelper<DKP extends TDKP> = { [I in keyof DKP]: keyof DKP[I] };
|
|
@@ -181,6 +187,7 @@ type InitConfiguration<C, D> = {
|
|
|
181
187
|
dimensionKeys: ArrayOfKeys<D>;
|
|
182
188
|
dimensionValues: ArrayOfValues<D>;
|
|
183
189
|
multiKeys: MultiKeys;
|
|
190
|
+
transformKeys: Partial<Record<string, true>>;
|
|
184
191
|
};
|
|
185
192
|
type Configuration<C = ElementType | unknown, D extends Dimensions = Dimensions> = InitConfiguration<C, D> & {
|
|
186
193
|
provider?: boolean;
|
package/lib/index.js
CHANGED
|
@@ -85,6 +85,11 @@ const DEFAULT_DIMENSIONS = {
|
|
|
85
85
|
multiple: {
|
|
86
86
|
propName: "multiple",
|
|
87
87
|
multi: true
|
|
88
|
+
},
|
|
89
|
+
modifiers: {
|
|
90
|
+
propName: "modifier",
|
|
91
|
+
multi: true,
|
|
92
|
+
transform: true
|
|
88
93
|
}
|
|
89
94
|
};
|
|
90
95
|
|
|
@@ -393,6 +398,12 @@ const getMultipleDimensions = (obj) => getValues(obj).reduce((accumulator, value
|
|
|
393
398
|
}
|
|
394
399
|
return accumulator;
|
|
395
400
|
}, {});
|
|
401
|
+
const getTransformDimensions = (obj) => getValues(obj).reduce((accumulator, value) => {
|
|
402
|
+
if (typeof value === "object") {
|
|
403
|
+
if (value.transform === true) accumulator[value.propName] = true;
|
|
404
|
+
}
|
|
405
|
+
return accumulator;
|
|
406
|
+
}, {});
|
|
396
407
|
|
|
397
408
|
//#endregion
|
|
398
409
|
//#region src/utils/statics.ts
|
|
@@ -442,15 +453,21 @@ const getDimensionThemes = (theme, options) => {
|
|
|
442
453
|
return acc;
|
|
443
454
|
}, result);
|
|
444
455
|
};
|
|
445
|
-
const getTheme = ({ rocketstate, themes, baseTheme }) => {
|
|
456
|
+
const getTheme = ({ rocketstate, themes, baseTheme, transformKeys, appTheme }) => {
|
|
446
457
|
let finalTheme = { ...baseTheme };
|
|
458
|
+
const deferredTransforms = [];
|
|
447
459
|
Object.entries(rocketstate).forEach(([key, value]) => {
|
|
448
460
|
const keyTheme = themes[key];
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
461
|
+
const isTransform = transformKeys?.[key];
|
|
462
|
+
const mergeValue = (item) => {
|
|
463
|
+
const val = keyTheme[item];
|
|
464
|
+
if (isTransform && typeof val === "function") deferredTransforms.push(val);
|
|
465
|
+
else finalTheme = merge({}, finalTheme, val);
|
|
466
|
+
};
|
|
467
|
+
if (Array.isArray(value)) value.forEach(mergeValue);
|
|
468
|
+
else mergeValue(value);
|
|
453
469
|
});
|
|
470
|
+
for (const transform of deferredTransforms) finalTheme = merge({}, finalTheme, transform(finalTheme, appTheme ?? {}, themeModeCallback, config.css));
|
|
454
471
|
return finalTheme;
|
|
455
472
|
};
|
|
456
473
|
const getThemeByMode = (object, mode) => Object.keys(object).reduce((acc, key) => {
|
|
@@ -556,11 +573,14 @@ const rocketComponent = (options) => {
|
|
|
556
573
|
const rocketstyle = useMemo(() => getTheme({
|
|
557
574
|
rocketstate,
|
|
558
575
|
themes: currentModeThemes,
|
|
559
|
-
baseTheme: currentModeBaseTheme
|
|
576
|
+
baseTheme: currentModeBaseTheme,
|
|
577
|
+
transformKeys: options.transformKeys,
|
|
578
|
+
appTheme: theme
|
|
560
579
|
}), [
|
|
561
580
|
rsKey,
|
|
562
581
|
currentModeThemes,
|
|
563
|
-
currentModeBaseTheme
|
|
582
|
+
currentModeBaseTheme,
|
|
583
|
+
theme
|
|
564
584
|
]);
|
|
565
585
|
const finalProps = {
|
|
566
586
|
...omit(mergeProps, [
|
|
@@ -672,6 +692,7 @@ const rocketstyle = ({ dimensions = DEFAULT_DIMENSIONS, useBooleans = true } = {
|
|
|
672
692
|
dimensionKeys: getKeys(dimensions),
|
|
673
693
|
dimensionValues: getDimensionsValues(dimensions),
|
|
674
694
|
multiKeys: getMultipleDimensions(dimensions),
|
|
695
|
+
transformKeys: getTransformDimensions(dimensions),
|
|
675
696
|
styled: true
|
|
676
697
|
});
|
|
677
698
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitus-labs/rocketstyle",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.27",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Vit Bokisch <vit@bokisch.cz>",
|
|
6
6
|
"maintainers": [
|
|
@@ -64,16 +64,16 @@
|
|
|
64
64
|
"version": "node ../../scripts/sync-peer-deps.mjs"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
|
-
"@vitus-labs/core": "2.0.0-alpha.
|
|
67
|
+
"@vitus-labs/core": "2.0.0-alpha.26",
|
|
68
68
|
"react": ">= 19"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@vitus-labs/core": "2.0.0-alpha.
|
|
72
|
-
"@vitus-labs/elements": "2.0.0-alpha.
|
|
71
|
+
"@vitus-labs/core": "2.0.0-alpha.27",
|
|
72
|
+
"@vitus-labs/elements": "2.0.0-alpha.27",
|
|
73
73
|
"@vitus-labs/tools-rolldown": "1.9.1-alpha.19",
|
|
74
74
|
"@vitus-labs/tools-storybook": "1.9.1-alpha.19",
|
|
75
75
|
"@vitus-labs/tools-typescript": "1.9.1-alpha.19",
|
|
76
|
-
"@vitus-labs/unistyle": "2.0.0-alpha.
|
|
76
|
+
"@vitus-labs/unistyle": "2.0.0-alpha.27"
|
|
77
77
|
},
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "6230c7b4eb1f8fe52bd47275cf72cdcab706cb45"
|
|
79
79
|
}
|