@multiplatform.one/theme 7.90.6 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.gnome.cjs +432 -0
- package/dist/cjs/index.gnome.native.js +435 -0
- package/dist/cjs/index.gnome.native.js.map +1 -0
- package/dist/cjs/{theme/useColorScale.native.js → nativeTwins.cjs} +11 -10
- package/dist/cjs/{theme/useColorScale.cjs → nativeTwins.native.js} +14 -24
- package/dist/cjs/nativeTwins.native.js.map +1 -0
- package/dist/cjs/theme/Surface.cjs +2 -10
- package/dist/cjs/theme/Surface.native.js +3 -12
- package/dist/cjs/theme/Surface.native.js.map +1 -1
- package/dist/cjs/theme/devtools/ColorLineVisualizer.cjs +91 -89
- package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js +79 -88
- package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js.map +1 -1
- package/dist/cjs/theme/devtools/index.cjs +25 -0
- package/dist/cjs/theme/devtools/index.native.js +28 -0
- package/dist/cjs/theme/devtools/index.native.js.map +1 -0
- package/dist/cjs/theme/devtools/knobIcons.cjs +147 -149
- package/dist/cjs/theme/devtools/knobIcons.native.js +135 -149
- package/dist/cjs/theme/devtools/knobIcons.native.js.map +1 -1
- package/dist/cjs/theme/nativePresetSwitch.cjs +45 -0
- package/dist/cjs/theme/nativePresetSwitch.native.js +50 -0
- package/dist/cjs/theme/nativePresetSwitch.native.js.map +1 -0
- package/dist/cjs/theme/nativeSchemePreference.cjs +72 -0
- package/dist/cjs/theme/nativeSchemePreference.native.js +80 -0
- package/dist/cjs/theme/nativeSchemePreference.native.js.map +1 -0
- package/dist/cjs/theme/nativeTheme.cjs +107 -0
- package/dist/cjs/theme/nativeTheme.native.js +115 -0
- package/dist/cjs/theme/nativeTheme.native.js.map +1 -0
- package/dist/cjs/theme/nativeTransitionProps.cjs +69 -0
- package/dist/cjs/theme/nativeTransitionProps.native.js +81 -0
- package/dist/cjs/theme/nativeTransitionProps.native.js.map +1 -0
- package/dist/cjs/theme/recipeInputs.native.js.map +1 -1
- package/dist/cjs/theme/resolveKnobs.cjs +0 -5
- package/dist/cjs/theme/resolveKnobs.native.js +0 -5
- package/dist/cjs/theme/resolveKnobs.native.js.map +1 -1
- package/dist/cjs/theme/sizeRecipes.cjs +3 -13
- package/dist/cjs/theme/sizeRecipes.native.js +3 -13
- package/dist/cjs/theme/sizeRecipes.native.js.map +1 -1
- package/dist/cjs/theme/theme.native.js +2 -94
- package/dist/cjs/theme/theme.native.js.map +1 -1
- package/dist/cjs/theme/transitionProps.native.js +2 -60
- package/dist/cjs/theme/transitionProps.native.js.map +1 -1
- package/dist/cjs/theme/usePresetSwitch.native.js +2 -29
- package/dist/cjs/theme/usePresetSwitch.native.js.map +1 -1
- package/dist/cjs/theme/useSchemePreference.native.js +2 -59
- package/dist/cjs/theme/useSchemePreference.native.js.map +1 -1
- package/dist/esm/index.gnome.mjs +48 -0
- package/dist/esm/index.gnome.mjs.map +1 -0
- package/dist/esm/index.gnome.native.js +48 -0
- package/dist/esm/index.gnome.native.js.map +1 -0
- package/dist/esm/nativeTwins.mjs +6 -0
- package/dist/esm/nativeTwins.mjs.map +1 -0
- package/dist/esm/nativeTwins.native.js +6 -0
- package/dist/esm/nativeTwins.native.js.map +1 -0
- package/dist/esm/theme/Surface.mjs +2 -9
- package/dist/esm/theme/Surface.mjs.map +1 -1
- package/dist/esm/theme/Surface.native.js +3 -11
- package/dist/esm/theme/Surface.native.js.map +1 -1
- package/dist/esm/theme/devtools/ColorLineVisualizer.mjs +80 -89
- package/dist/esm/theme/devtools/ColorLineVisualizer.mjs.map +1 -1
- package/dist/esm/theme/devtools/ColorLineVisualizer.native.js +79 -88
- package/dist/esm/theme/devtools/ColorLineVisualizer.native.js.map +1 -1
- package/dist/esm/theme/devtools/index.mjs +7 -0
- package/dist/esm/theme/devtools/index.mjs.map +1 -0
- package/dist/esm/theme/devtools/index.native.js +7 -0
- package/dist/esm/theme/devtools/index.native.js.map +1 -0
- package/dist/esm/theme/devtools/knobIcons.mjs +136 -149
- package/dist/esm/theme/devtools/knobIcons.mjs.map +1 -1
- package/dist/esm/theme/devtools/knobIcons.native.js +135 -149
- package/dist/esm/theme/devtools/knobIcons.native.js.map +1 -1
- package/dist/esm/theme/nativePresetSwitch.mjs +20 -0
- package/dist/esm/theme/nativePresetSwitch.mjs.map +1 -0
- package/dist/esm/theme/nativePresetSwitch.native.js +22 -0
- package/dist/esm/theme/nativePresetSwitch.native.js.map +1 -0
- package/dist/esm/theme/nativeSchemePreference.mjs +47 -0
- package/dist/esm/theme/nativeSchemePreference.mjs.map +1 -0
- package/dist/esm/theme/nativeSchemePreference.native.js +52 -0
- package/dist/esm/theme/nativeSchemePreference.native.js.map +1 -0
- package/dist/esm/theme/nativeTheme.mjs +82 -0
- package/dist/esm/theme/nativeTheme.mjs.map +1 -0
- package/dist/esm/theme/nativeTheme.native.js +87 -0
- package/dist/esm/theme/nativeTheme.native.js.map +1 -0
- package/dist/esm/theme/nativeTransitionProps.mjs +44 -0
- package/dist/esm/theme/nativeTransitionProps.mjs.map +1 -0
- package/dist/esm/theme/nativeTransitionProps.native.js +53 -0
- package/dist/esm/theme/nativeTransitionProps.native.js.map +1 -0
- package/dist/esm/theme/recipeInputs.mjs.map +1 -1
- package/dist/esm/theme/recipeInputs.native.js.map +1 -1
- package/dist/esm/theme/resolveKnobs.mjs +0 -5
- package/dist/esm/theme/resolveKnobs.mjs.map +1 -1
- package/dist/esm/theme/resolveKnobs.native.js +0 -5
- package/dist/esm/theme/resolveKnobs.native.js.map +1 -1
- package/dist/esm/theme/sizeRecipes.mjs +4 -9
- package/dist/esm/theme/sizeRecipes.mjs.map +1 -1
- package/dist/esm/theme/sizeRecipes.native.js +4 -9
- package/dist/esm/theme/sizeRecipes.native.js.map +1 -1
- package/dist/esm/theme/theme.native.js +1 -86
- package/dist/esm/theme/theme.native.js.map +1 -1
- package/dist/esm/theme/transitionProps.native.js +1 -52
- package/dist/esm/theme/transitionProps.native.js.map +1 -1
- package/dist/esm/theme/usePresetSwitch.native.js +1 -21
- package/dist/esm/theme/usePresetSwitch.native.js.map +1 -1
- package/dist/esm/theme/useSchemePreference.native.js +1 -51
- package/dist/esm/theme/useSchemePreference.native.js.map +1 -1
- package/package.json +54 -6
- package/src/index.gnome.ts +544 -0
- package/src/nativeTwins.ts +11 -0
- package/src/theme/Surface.spec.tsx +0 -34
- package/src/theme/Surface.tsx +1 -20
- package/src/theme/devtools/ColorLineVisualizer.tsx +1 -0
- package/src/theme/devtools/index.ts +14 -0
- package/src/theme/devtools/knobIcons.tsx +1 -0
- package/src/theme/mpo19Proof.spec.ts +0 -5
- package/src/theme/nativePresetSwitch.ts +32 -0
- package/src/theme/nativeSchemePreference.ts +58 -0
- package/src/theme/nativeTheme.tsx +113 -0
- package/src/theme/nativeTransitionProps.ts +74 -0
- package/src/theme/recipeInputs.ts +0 -5
- package/src/theme/recipes.ts +1 -7
- package/src/theme/resolveKnobs.spec.ts +4 -7
- package/src/theme/resolveKnobs.ts +0 -5
- package/src/theme/shared.tsx +4 -4
- package/src/theme/sizeLadder.spec.ts +4 -5
- package/src/theme/sizeRecipes.spec.ts +11 -16
- package/src/theme/sizeRecipes.ts +12 -19
- package/src/theme/theme.native.tsx +1 -113
- package/src/theme/theme.provider.spec.ts +1 -1
- package/src/theme/transitionProps.native.ts +1 -74
- package/src/theme/usePresetSwitch.native.ts +1 -32
- package/src/theme/useResolvedKnobs.hydration.spec.tsx +1 -1
- package/src/theme/useResolvedKnobsBehavior.spec.tsx +3 -3
- package/src/theme/useSchemePreference.native.ts +1 -58
- package/types/index.gnome.d.ts +84 -0
- package/types/index.gnome.d.ts.map +1 -0
- package/types/nativeTwins.d.ts +11 -0
- package/types/nativeTwins.d.ts.map +1 -0
- package/types/theme/Surface.d.ts +2 -13
- package/types/theme/Surface.d.ts.map +1 -1
- package/types/theme/devtools/ColorLineVisualizer.d.ts +3 -1
- package/types/theme/devtools/ColorLineVisualizer.d.ts.map +1 -1
- package/types/theme/devtools/index.d.ts +14 -0
- package/types/theme/devtools/index.d.ts.map +1 -0
- package/types/theme/devtools/knobIcons.d.ts +1 -0
- package/types/theme/devtools/knobIcons.d.ts.map +1 -1
- package/types/theme/nativePresetSwitch.d.ts +10 -0
- package/types/theme/nativePresetSwitch.d.ts.map +1 -0
- package/types/theme/nativeSchemePreference.d.ts +8 -0
- package/types/theme/nativeSchemePreference.d.ts.map +1 -0
- package/types/theme/nativeTheme.d.ts +19 -0
- package/types/theme/nativeTheme.d.ts.map +1 -0
- package/types/theme/nativeTransitionProps.d.ts +15 -0
- package/types/theme/nativeTransitionProps.d.ts.map +1 -0
- package/types/theme/recipeInputs.d.ts +0 -4
- package/types/theme/recipeInputs.d.ts.map +1 -1
- package/types/theme/recipes.d.ts +2 -9
- package/types/theme/recipes.d.ts.map +1 -1
- package/types/theme/resolveKnobs.d.ts.map +1 -1
- package/types/theme/shared.d.ts +4 -4
- package/types/theme/shared.d.ts.map +1 -1
- package/types/theme/sizeRecipes.d.ts +8 -13
- package/types/theme/sizeRecipes.d.ts.map +1 -1
- package/types/theme/theme.native.d.ts +1 -18
- package/types/theme/theme.native.d.ts.map +1 -1
- package/types/theme/transitionProps.native.d.ts +1 -14
- package/types/theme/transitionProps.native.d.ts.map +1 -1
- package/types/theme/usePresetSwitch.native.d.ts +1 -9
- package/types/theme/usePresetSwitch.native.d.ts.map +1 -1
- package/types/theme/useSchemePreference.native.d.ts +1 -7
- package/types/theme/useSchemePreference.native.d.ts.map +1 -1
- package/dist/cjs/theme/useColorScale.native.js.map +0 -1
- package/dist/esm/theme/useColorScale.mjs +0 -22
- package/dist/esm/theme/useColorScale.mjs.map +0 -1
- package/dist/esm/theme/useColorScale.native.js +0 -5
- package/dist/esm/theme/useColorScale.native.js.map +0 -1
- package/src/theme/useColorScale.native.ts +0 -7
- package/src/theme/useColorScale.ts +0 -29
- package/types/theme/useColorScale.d.ts +0 -7
- package/types/theme/useColorScale.d.ts.map +0 -1
- package/types/theme/useColorScale.native.d.ts +0 -6
- package/types/theme/useColorScale.native.d.ts.map +0 -1
|
@@ -5,12 +5,7 @@ import { getActiveScaleTokens, setActiveScaleTokens } from "./scale/activeScale"
|
|
|
5
5
|
import { generateScale } from "./scale/generateScale";
|
|
6
6
|
import {
|
|
7
7
|
DEFAULT_SIZE_RECIPE_INPUTS,
|
|
8
|
-
SIZE_RECIPE_CHIP_RATIOS,
|
|
9
8
|
SIZE_RECIPE_FAMILY_NAMES,
|
|
10
|
-
SIZE_RECIPE_HEIGHTS,
|
|
11
|
-
SIZE_RECIPE_HEIGHTS_TOUCH,
|
|
12
|
-
SIZE_RECIPE_RADII,
|
|
13
|
-
SIZE_RECIPE_RATIOS,
|
|
14
9
|
applyTouchFloor,
|
|
15
10
|
defaultRecipeInputs,
|
|
16
11
|
generateSizeRecipeTables,
|
|
@@ -49,8 +44,8 @@ describe("size recipes", () => {
|
|
|
49
44
|
});
|
|
50
45
|
expect(sizeRecipeFromHeight(40)).toEqual(recipe);
|
|
51
46
|
expect(sizeRecipeForToken("$4")).toEqual(recipe);
|
|
52
|
-
expect(
|
|
53
|
-
expect(
|
|
47
|
+
expect(recipeFamilies.control.heights.$4).toBe(40);
|
|
48
|
+
expect(recipeFamilies.control.ratios).toEqual({
|
|
54
49
|
padX: 16 / 40,
|
|
55
50
|
font: 15 / 40,
|
|
56
51
|
icon: 16 / 40,
|
|
@@ -60,7 +55,7 @@ describe("size recipes", () => {
|
|
|
60
55
|
|
|
61
56
|
it("$true equals $4", () => {
|
|
62
57
|
expect(sizeRecipes.$true).toEqual(sizeRecipes.$4);
|
|
63
|
-
expect(
|
|
58
|
+
expect(recipeFamilies.control.heights.$true).toBe(recipeFamilies.control.heights.$4);
|
|
64
59
|
expect(sizeRecipeForToken("$true")).toEqual(sizeRecipeForToken("$4"));
|
|
65
60
|
});
|
|
66
61
|
|
|
@@ -217,7 +212,7 @@ describe("generateSizeRecipes (LC-70)", () => {
|
|
|
217
212
|
expect(generateSizeRecipeTables(defaultRecipeInputs).touchHeights).toEqual(
|
|
218
213
|
generated.heightsTouch,
|
|
219
214
|
);
|
|
220
|
-
expect(
|
|
215
|
+
expect(recipeFamilies.control.touchHeights.$4).toBe(44);
|
|
221
216
|
});
|
|
222
217
|
|
|
223
218
|
it("control: 40 regenerates $4 from the scale and keeps $5 distinct", () => {
|
|
@@ -266,7 +261,7 @@ describe("generateSizeRecipes (LC-70)", () => {
|
|
|
266
261
|
|
|
267
262
|
it("setSizeRecipeInputs({ control }) regenerates live tables from the scale", () => {
|
|
268
263
|
setSizeRecipeInputs({ control: 36 });
|
|
269
|
-
expect(
|
|
264
|
+
expect(recipeFamilies.control.heights.$4).toBe(36);
|
|
270
265
|
expect(sizeRecipes.$4.height).toBe(36);
|
|
271
266
|
expect(sizeRecipeForToken("$4").height).toBe(36);
|
|
272
267
|
expect(sizeRecipeBoxVariants.$4.height).toBe(36);
|
|
@@ -278,8 +273,6 @@ describe("generateSizeRecipes (LC-70)", () => {
|
|
|
278
273
|
expect(sizeRecipes).toBe(recipeFamilies.control.recipes);
|
|
279
274
|
expect(sizeRecipeTypeVariants).toBe(recipeFamilies.control.typeVariants);
|
|
280
275
|
expect(sizeRecipeIconVariants).toBe(recipeFamilies.control.iconVariants);
|
|
281
|
-
expect(SIZE_RECIPE_HEIGHTS).toBe(recipeFamilies.control.heights);
|
|
282
|
-
expect(SIZE_RECIPE_RADII).toBe(recipeFamilies.control.radii);
|
|
283
276
|
});
|
|
284
277
|
|
|
285
278
|
it("sizeRecipeEscape is identity", () => {
|
|
@@ -329,7 +322,9 @@ describe("size recipe families", () => {
|
|
|
329
322
|
expect(getSizeRecipeFamily("control")).toEqual(control);
|
|
330
323
|
for (const token of RECIPE_KEYS) {
|
|
331
324
|
expect(control.boxVariants[token]).toEqual(sizeRecipeBoxVariants[token]);
|
|
332
|
-
expect(control.heightVariants[token]).toEqual({
|
|
325
|
+
expect(control.heightVariants[token]).toEqual({
|
|
326
|
+
height: recipeFamilies.control.heights[token],
|
|
327
|
+
});
|
|
333
328
|
}
|
|
334
329
|
expect(control.boxVariants.$4).toEqual({
|
|
335
330
|
height: 40,
|
|
@@ -341,7 +336,7 @@ describe("size recipe families", () => {
|
|
|
341
336
|
it("chip keeps height and tightens padX", () => {
|
|
342
337
|
const compact = getSizeRecipeFamily("chip");
|
|
343
338
|
const control = getSizeRecipeFamily("control");
|
|
344
|
-
expect(compact.ratios).toEqual(
|
|
339
|
+
expect(compact.ratios).toEqual(recipeFamilies.chip.ratios);
|
|
345
340
|
expect(compact.boxVariants.$4.height).toBe(control.boxVariants.$4.height);
|
|
346
341
|
expect(compact.boxVariants.$4.paddingHorizontal).toBeLessThan(
|
|
347
342
|
control.boxVariants.$4.paddingHorizontal,
|
|
@@ -361,7 +356,7 @@ describe("size recipe families", () => {
|
|
|
361
356
|
it("chip reads input padX and type one key below at the control's heights", () => {
|
|
362
357
|
const chip = getSizeRecipeFamily("chip");
|
|
363
358
|
for (const token of RECIPE_KEYS) {
|
|
364
|
-
expect(chip.heights[token]).toBe(
|
|
359
|
+
expect(chip.heights[token]).toBe(recipeFamilies.control.heights[token]);
|
|
365
360
|
expect(chip.recipes[token].paddingHorizontal).toBe(
|
|
366
361
|
DEFAULT_SIZE_RECIPE_INPUTS.inputPadX[token],
|
|
367
362
|
);
|
|
@@ -374,7 +369,7 @@ describe("size recipe families", () => {
|
|
|
374
369
|
expect(menuRow.recipes.$true).toEqual(menuRow.recipes.$4);
|
|
375
370
|
expect(sizeRecipeForToken("$4", { family: "menuRow", touch: true }).height).toBe(44);
|
|
376
371
|
for (const token of RECIPE_KEYS) {
|
|
377
|
-
expect(menuRow.heights[token]).toBe(
|
|
372
|
+
expect(menuRow.heights[token]).toBe(recipeFamilies.control.heights[recipeKeyBelow(token)]);
|
|
378
373
|
expect(menuRow.recipes[token].paddingHorizontal).toBe(sizeRecipes.$3.paddingHorizontal);
|
|
379
374
|
expect(menuRow.recipes[token].fontSize).toBe(sizeRecipes[token].fontSize);
|
|
380
375
|
}
|
package/src/theme/sizeRecipes.ts
CHANGED
|
@@ -55,8 +55,6 @@ export {
|
|
|
55
55
|
export type {
|
|
56
56
|
GeneratedSizeRecipes,
|
|
57
57
|
RecipeFamilies,
|
|
58
|
-
RecipeFamilyName,
|
|
59
|
-
RecipeInputs,
|
|
60
58
|
SizeRecipe,
|
|
61
59
|
SizeRecipeBoxVariant,
|
|
62
60
|
SizeRecipeFamily,
|
|
@@ -79,10 +77,10 @@ import {
|
|
|
79
77
|
generateSizeRecipes,
|
|
80
78
|
sizeRecipeFromHeight as recipeFromHeight,
|
|
81
79
|
type GeneratedSizeRecipes,
|
|
82
|
-
type RecipeFamilyName,
|
|
83
|
-
type RecipeInputs,
|
|
84
80
|
type SizeRecipe,
|
|
85
81
|
type SizeRecipeFamily,
|
|
82
|
+
type SizeRecipeFamilyName,
|
|
83
|
+
type SizeRecipeInputs,
|
|
86
84
|
type SizeRecipeToken,
|
|
87
85
|
} from "./recipeInputs";
|
|
88
86
|
|
|
@@ -121,11 +119,6 @@ export const sizeRecipes = recipeFamilies.control.recipes;
|
|
|
121
119
|
export const sizeRecipeBoxVariants = recipeFamilies.control.boxVariants;
|
|
122
120
|
export const sizeRecipeTypeVariants = recipeFamilies.control.typeVariants;
|
|
123
121
|
export const sizeRecipeIconVariants = recipeFamilies.control.iconVariants;
|
|
124
|
-
export const SIZE_RECIPE_HEIGHTS = recipeFamilies.control.heights;
|
|
125
|
-
export const SIZE_RECIPE_HEIGHTS_TOUCH = recipeFamilies.control.touchHeights;
|
|
126
|
-
export const SIZE_RECIPE_RADII = recipeFamilies.control.radii;
|
|
127
|
-
export const SIZE_RECIPE_RATIOS = recipeFamilies.control.ratios;
|
|
128
|
-
export const SIZE_RECIPE_CHIP_RATIOS = recipeFamilies.chip.ratios;
|
|
129
122
|
|
|
130
123
|
export const SIZE_RECIPE_FAMILY_NAMES = ["control", "chip", "menuRow", "tab"] as const;
|
|
131
124
|
|
|
@@ -150,25 +143,25 @@ function adoptGenerated(next: GeneratedSizeRecipes): GeneratedSizeRecipes {
|
|
|
150
143
|
current = {
|
|
151
144
|
...next,
|
|
152
145
|
tiles: tileSizeLadder,
|
|
153
|
-
heights:
|
|
154
|
-
heightsTouch:
|
|
146
|
+
heights: recipeFamilies.control.heights,
|
|
147
|
+
heightsTouch: recipeFamilies.control.touchHeights,
|
|
155
148
|
recipes: sizeRecipes,
|
|
156
149
|
recipesTouch: recipeFamilies.control.recipesTouch,
|
|
157
150
|
boxVariants: sizeRecipeBoxVariants,
|
|
158
151
|
typeVariants: sizeRecipeTypeVariants,
|
|
159
152
|
iconVariants: sizeRecipeIconVariants,
|
|
160
|
-
radii:
|
|
153
|
+
radii: recipeFamilies.control.radii,
|
|
161
154
|
families: recipeFamilies,
|
|
162
155
|
};
|
|
163
156
|
return current;
|
|
164
157
|
}
|
|
165
158
|
|
|
166
159
|
/** Merge `partial` over defaultRecipeInputs (not the previous override) and rewrite live tables. */
|
|
167
|
-
export function setSizeRecipeInputs(partial: Partial<
|
|
160
|
+
export function setSizeRecipeInputs(partial: Partial<SizeRecipeInputs> = {}): GeneratedSizeRecipes {
|
|
168
161
|
return adoptGenerated(generateSizeRecipes(partial));
|
|
169
162
|
}
|
|
170
163
|
|
|
171
|
-
export function getSizeRecipeInputs():
|
|
164
|
+
export function getSizeRecipeInputs(): SizeRecipeInputs {
|
|
172
165
|
return cloneSizeRecipeInputs(current.inputs);
|
|
173
166
|
}
|
|
174
167
|
|
|
@@ -176,18 +169,18 @@ export function getGeneratedSizeRecipes(): GeneratedSizeRecipes {
|
|
|
176
169
|
return current;
|
|
177
170
|
}
|
|
178
171
|
|
|
179
|
-
export function getSizeRecipeFamily(name:
|
|
172
|
+
export function getSizeRecipeFamily(name: SizeRecipeFamilyName = "control"): SizeRecipeFamily {
|
|
180
173
|
return recipeFamilies[name] ?? recipeFamilies.control;
|
|
181
174
|
}
|
|
182
175
|
|
|
183
176
|
export function sizeRecipeFromHeight(
|
|
184
177
|
height: number,
|
|
185
|
-
ratios:
|
|
178
|
+
ratios: SizeRecipeInputs["ratios"] = current.inputs.ratios,
|
|
186
179
|
): SizeRecipe {
|
|
187
180
|
return recipeFromHeight(height, ratios);
|
|
188
181
|
}
|
|
189
182
|
|
|
190
|
-
function resolveFamily(family?:
|
|
183
|
+
function resolveFamily(family?: SizeRecipeFamilyName | SizeRecipeFamily): SizeRecipeFamily {
|
|
191
184
|
if (family && typeof family === "object") return family;
|
|
192
185
|
return recipeFamilies[family ?? "control"] ?? recipeFamilies.control;
|
|
193
186
|
}
|
|
@@ -195,7 +188,7 @@ function resolveFamily(family?: RecipeFamilyName | SizeRecipeFamily): SizeRecipe
|
|
|
195
188
|
export function applyTouchFloor(
|
|
196
189
|
recipe: SizeRecipe,
|
|
197
190
|
touch: boolean,
|
|
198
|
-
family?:
|
|
191
|
+
family?: SizeRecipeFamilyName | SizeRecipeFamily,
|
|
199
192
|
): SizeRecipe {
|
|
200
193
|
if (!touch) return recipe;
|
|
201
194
|
const tables = resolveFamily(family);
|
|
@@ -219,7 +212,7 @@ export function applyTouchFloor(
|
|
|
219
212
|
|
|
220
213
|
export function sizeRecipeForToken(
|
|
221
214
|
token: string,
|
|
222
|
-
options?: { touch?: boolean; family?:
|
|
215
|
+
options?: { touch?: boolean; family?: SizeRecipeFamilyName | SizeRecipeFamily },
|
|
223
216
|
): SizeRecipe {
|
|
224
217
|
const tables = resolveFamily(options?.family);
|
|
225
218
|
const table = options?.touch ? tables.recipesTouch : tables.recipes;
|
|
@@ -1,113 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Fragment, useContext, useMemo, useSyncExternalStore } from "react";
|
|
3
|
-
import {
|
|
4
|
-
type CreateTamaguiProps,
|
|
5
|
-
TamaguiProvider,
|
|
6
|
-
type TamaguiProviderProps,
|
|
7
|
-
Theme,
|
|
8
|
-
} from "tamagui";
|
|
9
|
-
import type { PropsWithChildren } from "react";
|
|
10
|
-
import { CornerSmoothingStyles } from "./cornerSmoothing";
|
|
11
|
-
import { FontKnobStyles } from "./FontKnobStyles";
|
|
12
|
-
import type { Knobs } from "./knobs";
|
|
13
|
-
import { PresetContext, type PresetContextValue } from "./PresetContext";
|
|
14
|
-
import { getStoredPreset, subscribeStoredPreset } from "./presetStore";
|
|
15
|
-
import { defaultPreset } from "./presets";
|
|
16
|
-
import { resolveThemeScale, useActiveScale } from "./scale/useActiveScale";
|
|
17
|
-
import { type ThemeConfig, getPreset } from "./shared";
|
|
18
|
-
import { useSchemePreference } from "./useSchemePreference";
|
|
19
|
-
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// ThemeProviderProps (simplified — knob-based theming)
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
|
|
24
|
-
export interface ThemeProviderProps<
|
|
25
|
-
T extends CreateTamaguiProps = CreateTamaguiProps,
|
|
26
|
-
> extends PropsWithChildren<Omit<TamaguiProviderProps, "config" | "defaultTheme">> {
|
|
27
|
-
config?: {
|
|
28
|
-
tamagui: ReturnType<typeof import("tamagui").createTamagui<T>>;
|
|
29
|
-
} & Partial<Pick<ThemeConfig, "scales" | "defaultPreset">>;
|
|
30
|
-
systemTheme?: "light" | "dark";
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
// ThemeProvider (simplified — TamaguiProvider + scheme + ToastProvider)
|
|
35
|
-
// ---------------------------------------------------------------------------
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Native resolves token values (`.val`) at render and only theme subscribers
|
|
39
|
-
* re-render on a config change, so a preset whose scale differs remounts the
|
|
40
|
-
* subtree under the provider (keyed on the scale id). That is a settings-level
|
|
41
|
-
* action: local component state under the provider does not survive it.
|
|
42
|
-
* The preset persists in `@multiplatform.one/store` storage (`mp.preset`);
|
|
43
|
-
* first render waits for storage so a relaunch paints the stored scale.
|
|
44
|
-
*/
|
|
45
|
-
export function ThemeProvider<T extends CreateTamaguiProps>({
|
|
46
|
-
children,
|
|
47
|
-
config,
|
|
48
|
-
systemTheme,
|
|
49
|
-
...tamaguiProps
|
|
50
|
-
}: ThemeProviderProps<T>) {
|
|
51
|
-
const scheme = useSchemePreference();
|
|
52
|
-
const activeTheme = systemTheme ?? scheme.value;
|
|
53
|
-
const ancestor = useContext(PresetContext);
|
|
54
|
-
const stored = useSyncExternalStore(subscribeStoredPreset, getStoredPreset, getStoredPreset);
|
|
55
|
-
const presetName = (ancestor ? ancestor.presetName : stored.presetName) ?? config?.defaultPreset;
|
|
56
|
-
const scaleId = useActiveScale(config, presetName);
|
|
57
|
-
const scaleConfig = resolveThemeScale(config, presetName)?.tamagui() ?? config?.tamagui;
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<TamaguiProvider
|
|
61
|
-
{...tamaguiProps}
|
|
62
|
-
config={scaleConfig as TamaguiProviderProps["config"]}
|
|
63
|
-
defaultTheme={activeTheme}
|
|
64
|
-
disableInjectCSS={false}
|
|
65
|
-
>
|
|
66
|
-
{ancestor || stored.hydrated ? (
|
|
67
|
-
<Fragment key={scaleId}>
|
|
68
|
-
<ToastProvider>
|
|
69
|
-
<KnobBridge presetName={presetName} overrides={stored.overrides} scaleId={scaleId}>
|
|
70
|
-
{children}
|
|
71
|
-
</KnobBridge>
|
|
72
|
-
</ToastProvider>
|
|
73
|
-
</Fragment>
|
|
74
|
-
) : null}
|
|
75
|
-
</TamaguiProvider>
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function KnobBridge({
|
|
80
|
-
children,
|
|
81
|
-
presetName,
|
|
82
|
-
overrides,
|
|
83
|
-
scaleId,
|
|
84
|
-
}: PropsWithChildren<{ presetName?: string; overrides: Partial<Knobs>; scaleId: string }>) {
|
|
85
|
-
const existingCtx = useContext(PresetContext);
|
|
86
|
-
|
|
87
|
-
const presetCtxValue = useMemo<PresetContextValue>(() => {
|
|
88
|
-
const base = (presetName ? getPreset(presetName) : undefined) ?? defaultPreset;
|
|
89
|
-
return {
|
|
90
|
-
preset: { ...base, knobs: { ...base.knobs, ...overrides } },
|
|
91
|
-
overrides,
|
|
92
|
-
presetName,
|
|
93
|
-
scaleId,
|
|
94
|
-
};
|
|
95
|
-
}, [presetName, overrides, scaleId]);
|
|
96
|
-
|
|
97
|
-
const tree = (
|
|
98
|
-
<>
|
|
99
|
-
<FontKnobStyles />
|
|
100
|
-
<CornerSmoothingStyles />
|
|
101
|
-
{children}
|
|
102
|
-
</>
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
const theme = (existingCtx ?? presetCtxValue).preset.theme;
|
|
106
|
-
const themedTree = theme ? <Theme name={theme}>{tree}</Theme> : tree;
|
|
107
|
-
|
|
108
|
-
if (existingCtx) {
|
|
109
|
-
return themedTree;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return <PresetContext.Provider value={presetCtxValue}>{themedTree}</PresetContext.Provider>;
|
|
113
|
-
}
|
|
1
|
+
export * from "./nativeTheme";
|
|
@@ -42,7 +42,7 @@ describe("ThemeProvider knob injectors", () => {
|
|
|
42
42
|
expect(src).toMatch(/import \{ CornerSmoothingStyles \} from "\.\/cornerSmoothing"/);
|
|
43
43
|
const bridge = src.slice(src.indexOf("function KnobBridge"));
|
|
44
44
|
expect(bridge).toContain("<CornerSmoothingStyles");
|
|
45
|
-
const native = readFileSync(join(here, "
|
|
45
|
+
const native = readFileSync(join(here, "nativeTheme.tsx"), "utf8");
|
|
46
46
|
expect(native).toContain("<CornerSmoothingStyles");
|
|
47
47
|
});
|
|
48
48
|
|
|
@@ -1,74 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import type { TransitionProp } from "tamagui";
|
|
3
|
-
import { animationConfig as nativeAnimationConfig } from "./animations/reactNative";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Native twin of `transitionProps.ts`.
|
|
7
|
-
*
|
|
8
|
-
* The React Native driver resolves an undefined `transition` to an empty
|
|
9
|
-
* config and animates with a default spring (LC-59), so keeping the key at
|
|
10
|
-
* animation `none` would put motion on every part that is meant to be still.
|
|
11
|
-
* Native keeps omitting it until the driver has an instant token to pass.
|
|
12
|
-
*/
|
|
13
|
-
export function transitionProps(
|
|
14
|
-
role: MotionRole | TransitionProp | undefined,
|
|
15
|
-
extra: readonly string[] = [],
|
|
16
|
-
): {
|
|
17
|
-
transition?: TransitionProp;
|
|
18
|
-
animateOnly?: string[];
|
|
19
|
-
} {
|
|
20
|
-
const isRole = isMotionRole(role);
|
|
21
|
-
const transition = isRole ? role.transition : role;
|
|
22
|
-
if (transition === undefined) return {};
|
|
23
|
-
if (!isRole) return { transition };
|
|
24
|
-
const properties = [...role.animateOnly, ...extra].flatMap(
|
|
25
|
-
(property) => nativeLonghands[property] ?? [property],
|
|
26
|
-
);
|
|
27
|
-
if (typeof transition !== "string") return { transition, animateOnly: properties };
|
|
28
|
-
const exit = typeof role.exit === "string" && role.exit !== transition ? role.exit : undefined;
|
|
29
|
-
const clamp = isSpring(transition) && !presetBounce.has(transition);
|
|
30
|
-
if (!exit && !clamp) return { transition, animateOnly: properties };
|
|
31
|
-
return {
|
|
32
|
-
transition: [
|
|
33
|
-
transition,
|
|
34
|
-
{ ...(clamp ? { overshootClamping: true } : {}), ...(exit ? { exit } : {}) },
|
|
35
|
-
],
|
|
36
|
-
animateOnly: properties,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function isSpring(stop: string): boolean {
|
|
41
|
-
const config = nativeAnimationConfig[stop as keyof typeof nativeAnimationConfig] as
|
|
42
|
-
| { type?: string }
|
|
43
|
-
| undefined;
|
|
44
|
-
return config !== undefined && config.type !== "timing";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* FZ-7919: tamagui expands `borderColor` into its four sides before the React
|
|
49
|
-
* Native driver sees the style, and the driver matches `animateOnly` by exact
|
|
50
|
-
* key. A render therefore painted the sides as static, while a pseudo state
|
|
51
|
-
* (the bubbled focus of a field's text input) animated them. The animated
|
|
52
|
-
* copy outranked the static one and held the previous focus or theme colour.
|
|
53
|
-
*/
|
|
54
|
-
const presetBounce = new Set(["bouncy", "superBouncy"]);
|
|
55
|
-
|
|
56
|
-
const nativeLonghands: Record<string, readonly string[]> = {
|
|
57
|
-
borderColor: [
|
|
58
|
-
"borderColor",
|
|
59
|
-
"borderTopColor",
|
|
60
|
-
"borderRightColor",
|
|
61
|
-
"borderBottomColor",
|
|
62
|
-
"borderLeftColor",
|
|
63
|
-
],
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
function isMotionRole(value: MotionRole | TransitionProp | undefined): value is MotionRole {
|
|
67
|
-
return (
|
|
68
|
-
typeof value === "object" &&
|
|
69
|
-
value !== null &&
|
|
70
|
-
"transition" in value &&
|
|
71
|
-
"animateOnly" in value &&
|
|
72
|
-
Array.isArray(value.animateOnly)
|
|
73
|
-
);
|
|
74
|
-
}
|
|
1
|
+
export * from "./nativeTransitionProps";
|
|
@@ -1,32 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { usePresetContext } from "./PresetContext";
|
|
3
|
-
import {
|
|
4
|
-
getStoredPreset,
|
|
5
|
-
recordPresetChoice,
|
|
6
|
-
setStoredPreset,
|
|
7
|
-
subscribeStoredPreset,
|
|
8
|
-
} from "./presetStore";
|
|
9
|
-
|
|
10
|
-
export interface PresetSwitch {
|
|
11
|
-
/** The provider's active preset; "default" when none is stored. */
|
|
12
|
-
presetName: string;
|
|
13
|
-
/** Switch the active preset without recording anyone's choice. */
|
|
14
|
-
applyPreset(name: string): void;
|
|
15
|
-
/** Switch and record it as this user's choice (no user = this device's signed-out choice). */
|
|
16
|
-
choosePreset(name: string, userId?: string | null): void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function usePresetSwitch(): PresetSwitch {
|
|
20
|
-
const context = usePresetContext();
|
|
21
|
-
const stored = useSyncExternalStore(subscribeStoredPreset, getStoredPreset, getStoredPreset);
|
|
22
|
-
const presetName = context?.presetName || stored.presetName || "default";
|
|
23
|
-
const applyPreset = useCallback((name: string) => setStoredPreset(name), []);
|
|
24
|
-
const choosePreset = useCallback(
|
|
25
|
-
(name: string, userId?: string | null) => {
|
|
26
|
-
recordPresetChoice(name, userId);
|
|
27
|
-
applyPreset(name);
|
|
28
|
-
},
|
|
29
|
-
[applyPreset],
|
|
30
|
-
);
|
|
31
|
-
return { presetName, applyPreset, choosePreset };
|
|
32
|
-
}
|
|
1
|
+
export * from "./nativePresetSwitch";
|
|
@@ -39,7 +39,7 @@ let observed: { height: unknown; transition: unknown }[];
|
|
|
39
39
|
function Probe() {
|
|
40
40
|
const { knobProps } = useResolvedKnobs();
|
|
41
41
|
const height = knobProps.control.height;
|
|
42
|
-
const transition = knobProps.transition;
|
|
42
|
+
const transition = knobProps.motion.control.transition;
|
|
43
43
|
observed.push({ height, transition });
|
|
44
44
|
return (
|
|
45
45
|
<button data-height={String(height)} data-motion={String(transition)}>
|
|
@@ -102,13 +102,13 @@ describe("size token", () => {
|
|
|
102
102
|
describe("reduced motion", () => {
|
|
103
103
|
it("keeps the animation knob's transition when the OS does not prefer reduced motion", () => {
|
|
104
104
|
const { result } = renderHook(() => useResolvedKnobs());
|
|
105
|
-
expect(result.current.knobProps.transition).toBe(defaultKnobs.animation);
|
|
105
|
+
expect(result.current.knobProps.motion.control.transition).toBe(defaultKnobs.animation);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
it("forces the transition off when prefers-reduced-motion matches", () => {
|
|
109
109
|
stubMatchMedia((query) => modernMq(query === "(prefers-reduced-motion: reduce)"));
|
|
110
110
|
const { result } = renderHook(() => useResolvedKnobs());
|
|
111
|
-
expect(result.current.knobProps.transition).toBeUndefined();
|
|
111
|
+
expect(result.current.knobProps.motion.control.transition).toBeUndefined();
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
it("supports legacy MediaQueryList hosts exposing only addListener", () => {
|
|
@@ -116,7 +116,7 @@ describe("reduced motion", () => {
|
|
|
116
116
|
const removeListener = vi.fn();
|
|
117
117
|
stubMatchMedia(() => ({ matches: true, addListener, removeListener }));
|
|
118
118
|
const { result, unmount } = renderHook(() => useResolvedKnobs());
|
|
119
|
-
expect(result.current.knobProps.transition).toBeUndefined();
|
|
119
|
+
expect(result.current.knobProps.motion.control.transition).toBeUndefined();
|
|
120
120
|
expect(addListener).toHaveBeenCalledWith(expect.any(Function));
|
|
121
121
|
unmount();
|
|
122
122
|
expect(removeListener).toHaveBeenCalledWith(expect.any(Function));
|
|
@@ -1,58 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Appearance } from "react-native";
|
|
3
|
-
import { useDidFinishSSR } from "tamagui";
|
|
4
|
-
import { isWeb } from "@multiplatform.one/platform";
|
|
5
|
-
import { getStoredScheme, setStoredScheme, subscribeStoredScheme } from "./schemeStore";
|
|
6
|
-
import type { ThemeScheme } from "./useTheme";
|
|
7
|
-
|
|
8
|
-
export interface SchemePreference {
|
|
9
|
-
setting: ThemeScheme;
|
|
10
|
-
value: "light" | "dark";
|
|
11
|
-
set(scheme: ThemeScheme): void;
|
|
12
|
-
}
|
|
13
|
-
const serverScheme = (): ThemeScheme => "system";
|
|
14
|
-
|
|
15
|
-
// RN's Appearance.setColorScheme("unspecified") writes "unspecified" into the
|
|
16
|
-
// JS cache that getColorScheme/useColorScheme read, with no change event, so
|
|
17
|
-
// System resolved light until the OS flipped (FZ-8708). The native scheme is
|
|
18
|
-
// read once before the first override and then only from change events.
|
|
19
|
-
let nativeScheme: "light" | "dark" | undefined;
|
|
20
|
-
const nativeListeners = new Set<() => void>();
|
|
21
|
-
|
|
22
|
-
function getNativeScheme(): "light" | "dark" {
|
|
23
|
-
if (nativeScheme === undefined) {
|
|
24
|
-
nativeScheme = Appearance.getColorScheme() === "dark" ? "dark" : "light";
|
|
25
|
-
Appearance.addChangeListener(({ colorScheme }) => {
|
|
26
|
-
if ((colorScheme !== "light" && colorScheme !== "dark") || colorScheme === nativeScheme) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
nativeScheme = colorScheme;
|
|
30
|
-
nativeListeners.forEach((listener) => listener());
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
return nativeScheme;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function subscribeNativeScheme(listener: () => void) {
|
|
37
|
-
getNativeScheme();
|
|
38
|
-
nativeListeners.add(listener);
|
|
39
|
-
return () => {
|
|
40
|
-
nativeListeners.delete(listener);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function useSchemePreference(): SchemePreference {
|
|
45
|
-
const setting = useSyncExternalStore(subscribeStoredScheme, getStoredScheme, serverScheme);
|
|
46
|
-
const os = useSyncExternalStore(subscribeNativeScheme, getNativeScheme, getNativeScheme);
|
|
47
|
-
const hydrated = useDidFinishSSR();
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (isWeb) return;
|
|
50
|
-
getNativeScheme();
|
|
51
|
-
Appearance.setColorScheme(setting === "system" ? "unspecified" : setting);
|
|
52
|
-
}, [setting]);
|
|
53
|
-
return {
|
|
54
|
-
setting: hydrated ? setting : "system",
|
|
55
|
-
value: !hydrated ? "light" : setting === "system" ? os : setting,
|
|
56
|
-
set: setStoredScheme,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
1
|
+
export * from "./nativeSchemePreference";
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export { assertNoPrebuiltThemes, createDefaultThemeConfig, TAMAGUI_ERA, tamaguiEra, } from "./theme/createDefaultThemeConfig";
|
|
2
|
+
export type { CreateDefaultThemeConfigOptions } from "./theme/createDefaultThemeConfig";
|
|
3
|
+
export { createThemesBuilder, houseComponentThemes, houseGrandChildrenThemes, houseTemplates, tintHueNames, } from "./theme/createThemes";
|
|
4
|
+
export type { BaseThemeBuilderDefinition, CreateThemesBuilderOptions, GetThemeProps, Shadows, ThemeBuilderDefinition, } from "./theme/createThemes";
|
|
5
|
+
export { clearPresets, createThemeConfig, getPreset, getPresetNames, registerPreset, resolveThemeFromPreset, } from "./theme/shared";
|
|
6
|
+
export type { ThemeConfig, ThemeConfigScaleOptions } from "./theme/shared";
|
|
7
|
+
export { BodyFont, BorderRadius, BorderWidth, BulkBarPlacement, CornerSmoothing, defaultKnobs, DisabledStyle, Elevation, emptyStateKnobs, FieldLabelPlacement, FillStyle, FontCategory, FontWeight, FormAutofocus, HeadingFont, interactionStates, normalizeAnimationKnob, PageTitleScale, RequiredMarking, SelectAllScope, TableZebra, TextAccent, TimestampStyle, } from "./theme/knobs";
|
|
8
|
+
export type { Animation, InteractionState, Knobs, StateKnobs } from "./theme/knobs";
|
|
9
|
+
export { defaultIntents } from "./theme/intents";
|
|
10
|
+
export type { CardLiftProps, ControlStateProps, CornerSmoothingCarrier, DisabledAssemblyProps, DisabledChromeProps, DisabledRecipe, DisabledSurfaceProps, DisabledTextProps, ElevationChromeProps, ElevationPaintProps, ElevationStateProps, KnobProps, KnobPropsOverride, KnobRecipe, PageTitleFragment, ResolvedKnobs, SelectedRecipe, StateRecipes, TextRoleFragment, TextStateProps, } from "./theme/recipes";
|
|
11
|
+
export { borderRadiusMap, capContainerRadius, capFieldRadius, cardElevationMap, cardLift, containerCapProps, containerRadiusMap, edgeColorAt, elevationMap, getHeadingFontFamily, labelFontSizeFor, nestedControlPx, normalizeSizeToken, overlayElevationMap, paintedCardFill, panelPaddingPx, radiusStopFromToken, railFillRadius, resolveKnobs, resolvePageTitleScale, resolveTextRoles, sizedElevation, sizeKeyBelow, spacingRoles, } from "./theme/resolveKnobs";
|
|
12
|
+
export type { CappedContainer, ColorScheme, ContainerCapDeclaration, ResolveKnobsEnvironment, } from "./theme/resolveKnobs";
|
|
13
|
+
export { applyRadiusStop, applyTouchFloor, cloneSizeRecipeInputs, createRecipeFamilies, DEFAULT_SIZE_RECIPE_INPUTS, defaultRecipeInputs, generateSizeRecipes, generateSizeRecipeTables, getGeneratedSizeRecipes, getSizeRecipeFamily, getSizeRecipeInputs, getTileSizeLadder, mergeRecipeInputs, recipeFamilies, recipeFromTokenChannels, recipeKeyAbove, recipeKeyBelow, resolveControlRadius, resolveSizeRecipeInputs, setSizeRecipeInputs, SIZE_RECIPE_FAMILY_NAMES, SIZE_RECIPE_RADIUS_STOPS, SIZE_RECIPE_RADIUS_TOKEN_TO_STOP, SIZE_RECIPE_TOKENS, SIZE_TOKEN_EXPONENTS, sizeRecipeBoxVariants, sizeRecipeEscape, sizeRecipeForToken, sizeRecipeFromHeight, sizeRecipeIconVariants, sizeRecipes, sizeRecipeTypeVariants, textFieldInset, tileSizeLadder, TOUCH_HEIGHT_FLOOR, } from "./theme/sizeRecipes";
|
|
14
|
+
export type { GeneratedSizeRecipes, RecipeFamilies, SizeRecipe, SizeRecipeBoxVariant, SizeRecipeFamily, SizeRecipeFamilyName, SizeRecipeIconVariant, SizeRecipeInputs, SizeRecipeRadiusStop, SizeRecipeRatios, SizeRecipeTables, SizeRecipeToken, SizeRecipeTokenChannels, SizeRecipeTokenTable, SizeRecipeTypeVariant, } from "./theme/sizeRecipes";
|
|
15
|
+
export { cloneTileSizeInputs, defaultTileSizeInputs, defaultWidthFactors, generateTileSizeLadder, mediaAspectRatios, resolveMediaAspect, resolveTileSizeInputs, tileColumnsForWidth, tileRungFlexProps, tileSizeRungs, tileSizeStepExponents, } from "./theme/tileSizes";
|
|
16
|
+
export type { MediaAspect, MediaAspectName, TileRungFlexProps, TileSizeInputs, TileSizeLadder, TileSizeRung, TileSizeStop, } from "./theme/tileSizes";
|
|
17
|
+
export { PresetContext, usePresetContext, usePresetTints } from "./theme/PresetContext";
|
|
18
|
+
export type { PresetContextValue } from "./theme/PresetContext";
|
|
19
|
+
export { applyColorTheme, Preset } from "./theme/Preset";
|
|
20
|
+
export type { PresetProps } from "./theme/Preset";
|
|
21
|
+
export { clampSurfaceSize, compareSizeTokens, sizeTokenBelow, sizeTokenStep, sizeTokenStop, Surface, SurfaceContext, surfaceSizeRank, useBarSurface, useElevatedSurface, useFieldSurface, } from "./theme/Surface";
|
|
22
|
+
export type { SurfaceIntent, SurfaceSize } from "./theme/Surface";
|
|
23
|
+
export { controlTierDisabled, controlTierPaint, controlTierWash, isDarkThemeName, } from "./theme/controlTiers";
|
|
24
|
+
export type { ControlTier, ControlTierPaint } from "./theme/controlTiers";
|
|
25
|
+
export { AlertDialogContent, AlertDialogOverlay, DialogContent, DialogOverlay, DialogRegionContext, DialogSheetFaceProvider, DialogShowFocus, overlayScrim, PopoverContent, sheetGrabber, sheetGrabberClearance, sheetGrabberZone, useDialogRegionContext, useDialogSheetFace, useIsInDialogRegion, } from "./theme/overlaySurfaces";
|
|
26
|
+
export type { DialogContentProps, DialogRegionContextValue } from "./theme/overlaySurfaces";
|
|
27
|
+
export { boldPreset, consolePreset, defaultPreset, densePreset, heroPreset, roomyPreset, storefrontPreset, } from "./theme/presets";
|
|
28
|
+
export { IntentContext, solidButtonIntents, solidPaletteThemes, useIntentContext, useResolvedKnobs, } from "./theme/useResolvedKnobs";
|
|
29
|
+
export type { UseResolvedKnobsOptions } from "./theme/useResolvedKnobs";
|
|
30
|
+
export { useTheme } from "./theme/useTheme";
|
|
31
|
+
export type { ThemeScheme } from "./theme/useTheme";
|
|
32
|
+
export { createDefaultFont } from "./font";
|
|
33
|
+
export { __resetDevWarnSeen, __resetThemeDevWarnSeen, devWarn, DIALOG_MAX_ACTIONS, themeDevWarn, warnBannedErrorWords, warnBareDisabled, warnCancelDisabled, warnDialogTooManyActions, warnOutlinedIgnored, warnOutlineNone, warnPlaceholderAsLabel, warnPositiveTabIndex, warnSelectTooFewOptions, warnSizeRecipeEscape, warnTooltipOnDisabled, } from "./devWarn";
|
|
34
|
+
export type { DevWarnCode, DevWarnDetail, GuardrailSpecimenParameter } from "./devWarn";
|
|
35
|
+
export { defaultMaxPanes, DETAIL_READABLE_WIDTH, FORM_READABLE_WIDTH, FORM_READABLE_WIDTH_MAX, FORM_READABLE_WIDTH_MIN, getLayoutSizeClass, isTouchSurface, LAYOUT_SIZE_CLASS_ORDER, layoutBreakpoints, layoutSizeClassAtLeast, MIN_PRESS_TARGET, NARROW_BREAKPOINT, OVERLAY_ANCHOR_GAP, OVERLAY_ATTACH_GAP, OVERLAY_BREAKPOINT, pressTargetHitSlop, pressTargetStyle, READING_WIDTH_BODY_FALLBACK, READING_WIDTH_CH, READING_WIDTH_CH_EM, READING_WIDTH_MAX_CH, READING_WIDTH_MIN_CH, readingWidthStyle, useLayoutSizeClass, useMultiPane, useReadingWidthStyle, useSemanticGaps, } from "./theme/layoutTokens";
|
|
36
|
+
export type { HitSlopInsets, LayoutBreakpointName, LayoutSizeClass, PressTargetStyle, ReadingWidthStyle, } from "./theme/layoutTokens";
|
|
37
|
+
export { Intent } from "./theme/Intent";
|
|
38
|
+
export type { IntentProps } from "./theme/Intent";
|
|
39
|
+
export { ensureFocusVisibleRing, FOCUS_RING_CLIPPED_OFFSET, FOCUS_RING_FLUSH_OFFSET, FOCUS_RING_HALO_OFFSET, FOCUS_RING_MIN_CONTRAST, FOCUS_RING_MIN_WIDTH, FOCUS_VISIBLE_RING, FOCUS_VISIBLE_RING_HALO, FOCUS_VISIBLE_RING_INSET, focusRingColorMeetsContrast, isSanctionedFocusRingOffset, SANCTIONED_FOCUS_RING_OFFSETS, STATE_LAYER_HOVER, STATE_LAYER_PRESS, withDefaultStateLayer, } from "./theme/focusState";
|
|
40
|
+
export { FIELD_FOCUS_COLOR, FIELD_FOCUS_REST, FIELD_FOCUS_STYLE, fieldFocusCss, fieldFocusHoldsContrast, } from "./theme/fieldFocus";
|
|
41
|
+
export { ensureHairlineFallback, hairline, hairlineBorderWidth, hairlineFallbackCss, hairlineWidth, } from "./theme/hairline";
|
|
42
|
+
export { compositeFocusRingCss, ensureCompositeFocusRing, ensureKeyboardModalityTracking, focusOnOpen, keyboardFocusRingProps, wasKeyboardFocus, } from "./keyboardFocusRing";
|
|
43
|
+
export { CLOCK_TIME, formatAbsoluteDate, formatAbsoluteDateTime, formatCalendarDate, formatDayLong, formatDayOfMonth, formatMonthYear, formatRelativeTimestamp, formatTimeOfDay, getMonthNames, getWeekdayNames, ISO_DATE_ONLY, parseCalendarDate, } from "./dates";
|
|
44
|
+
export type { AbsoluteDateFormatOptions, CalendarDateShape, DateInput, DayLongFormatOptions, MonthYearFormatOptions, TimeOfDayFormatOptions, WeekdayNamesOptions, } from "./dates";
|
|
45
|
+
export { menuRowChecked, menuRowCheckGlyph, menuRowCheckInk, menuRowFrame, menuRowIconGlyph, resolveMenuRowCheckInk, useMenuRowCheckInk, } from "./menuRow";
|
|
46
|
+
export type { MenuRowGlyph } from "./menuRow";
|
|
47
|
+
export { currencyAffix, formatCurrency, formatNumber, formatPercent, resolveCurrencyCode, } from "./numbers";
|
|
48
|
+
export type { CurrencyAffix, CurrencyFormatOptions, NumberFormatOptions, NumberInput, PercentFormatOptions, } from "./numbers";
|
|
49
|
+
export { radiusClassProps, radiusOverrideFor, radiusResolutionProps, resolveRadiusClass, resolveRadiusForPart, } from "./theme/radiusClass";
|
|
50
|
+
export type { KnobImmuneRadiusClass, RadiusClassDeclaration, RadiusClassGeometry, RadiusResolutionDeclaration, ResolvedPartRadius, ResolvedRadiusSource, ResolveRadiusForPartOptions, } from "./theme/radiusClass";
|
|
51
|
+
export { $color, aaTextContrastRatio, apcaContrast, assertContrast, buttonColors, contrastRatio, fillLabelLc, findReadableStep, holdHueToFloor, holdInkFloor, inputColors, inSwitchOffBand, isLightGround, measureContrast, minContrastRatio, normalizeColorScale, normalizeToHex, pickReadableForeground, plateContrastRatio, relativeLuminance, resolveThemeContrast, semanticGroups, switchOffFillAlpha, switchOffFillBand, systemFillHex, systemFillLuminance, } from "./theme/colorRules";
|
|
52
|
+
export type { ButtonColorConfig, ColorRamp, ColorStep, ComponentColorConfig, ContrastPair, ContrastReport, SemanticGroup, ThemeContrastPair, } from "./theme/colorRules";
|
|
53
|
+
export { getGroupPosition, GroupPositionContext, stackEdgeRadius, stackRadiusProps, useGroupPosition, } from "./theme/groupGeometry";
|
|
54
|
+
export type { GroupOrientation, GroupPosition, StackRadiusFragment } from "./theme/groupGeometry";
|
|
55
|
+
export { resolveAccentOnSurface, resolveAccentTintedSurface, resolveActiveTabInk, resolveIdentityInk, resolveLegibleInkOn, useAccentOnSurface, useAccentTintedSurface, useActiveTabInk, useIdentityHue, useIdentityInkOnSurface, useLegibleInkOn, useReadableTextOn, } from "./theme/readableColor";
|
|
56
|
+
export type { ResolveAccentTintedSurfaceInput, ResolveActiveTabInkInput, } from "./theme/readableColor";
|
|
57
|
+
export { accentIdentityCandidates, resolveChartPalette, useChartPalette, } from "./theme/chartPalette";
|
|
58
|
+
export type { ChartPalette, ResolveChartPaletteInput } from "./theme/chartPalette";
|
|
59
|
+
export { animationConfig, animationDurations, animationNames, animations, animationConfig as cssAnimationConfig, motionStops, } from "./theme/animations/css";
|
|
60
|
+
export type { AnimationName, MotionStop } from "./theme/animations/css";
|
|
61
|
+
export { motionDurationMs, motionExitFactor, motionFor, motionHideDelayMs, motionRoleProperties, motionSeconds, motionSettleMs, } from "./theme/motion";
|
|
62
|
+
export type { MotionRole, MotionRoleName } from "./theme/motion";
|
|
63
|
+
export { resolveGlyphPaint, useGlyphColor } from "./theme/glyphPaint";
|
|
64
|
+
export { GLYPH_CONTRAST_FLOOR, glyphTintFallback, GlyphTintFallbackProvider, platformSystemTint, resolveGlyphTint, useGlyphTintOnSurface, } from "./theme/glyphTint";
|
|
65
|
+
export type { GlyphTintFallback, ResolveGlyphTintInput } from "./theme/glyphTint";
|
|
66
|
+
export { IconSlot } from "./theme/IconSlot";
|
|
67
|
+
export type { IconSlotValue } from "./theme/IconSlot";
|
|
68
|
+
export { transitionProps } from "./theme/transitionProps";
|
|
69
|
+
export { Anchor, Paragraph, SizableText, Text } from "./theme/Text";
|
|
70
|
+
export type { AnchorProps, ParagraphProps, SizableTextProps, TextProps } from "./theme/Text";
|
|
71
|
+
export { H1, H2, H3, H4, H5, H6, Heading } from "./theme/Heading";
|
|
72
|
+
export type { HeadingProps } from "./theme/Heading";
|
|
73
|
+
export { negateSpaceToken, PageGutter, ScreenNesting, usePageGutter, useParentScreen, usePhoneTableBleed, } from "./theme/pageGutter";
|
|
74
|
+
export type { PageGutterProps, ParentScreen, PhoneTableBleed } from "./theme/pageGutter";
|
|
75
|
+
export { dynamicTypeFit, effectiveFontScale, headingMaxFontScale, maxFontScaleToFit, } from "./theme/dynamicType";
|
|
76
|
+
export { animationConfig as nativeAnimationConfig } from "./theme/animations/reactNative";
|
|
77
|
+
export { getActiveScaleTokens, scaleRadiusPx, scaleSpaceFractionPx, setActiveScaleTokens, } from "./theme/scale/activeScale";
|
|
78
|
+
export type { IntentOverride, Preset as PresetDefinition } from "./theme/preset.types";
|
|
79
|
+
export type { ThemeSubset } from "./theme/subsetThemes";
|
|
80
|
+
export type { SizeKey } from "./theme/scale/scaleInputs";
|
|
81
|
+
export { listHeightForRows } from "./theme/listRows";
|
|
82
|
+
export { useTouchSurface } from "./theme/useTouchSurface";
|
|
83
|
+
export type { GenericFonts, MediaQueryKey, ThemeName } from "@tamagui/web";
|
|
84
|
+
//# sourceMappingURL=index.gnome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.gnome.d.ts","sourceRoot":"","sources":["../src/index.gnome.ts"],"names":[],"mappings":"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"}
|