@multiplatform.one/theme 6.6.0 → 7.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/package.json +18 -18
- package/src/dates.spec.ts +344 -1
- package/src/dates.ts +50 -3
- package/src/devWarn.ts +29 -1
- package/src/figma/figmaTokens.spec.ts +3 -3
- package/src/figma/figmaTokens.ts +6 -3
- package/src/keyboardFocusRing.ts +61 -5
- package/src/menuRow.spec.ts +2 -2
- package/src/menuRow.ts +5 -4
- package/src/theme/Surface.spec.tsx +146 -0
- package/src/theme/Surface.tsx +73 -0
- package/src/theme/createDefaultThemeConfig.spec.ts +152 -0
- package/src/theme/createDefaultThemeConfig.ts +47 -3
- package/src/theme/createThemes.ts +27 -4
- package/src/theme/devtools/ThemeDevtoolsPanel.tsx +6 -2
- package/src/theme/focusState.ts +9 -1
- package/src/theme/groupGeometry.spec.ts +108 -0
- package/src/theme/groupGeometry.ts +119 -0
- package/src/theme/index.ts +3 -0
- package/src/theme/intent.spec.tsx +17 -0
- package/src/theme/knobs.ts +2 -2
- package/src/theme/layoutTokens.spec.ts +14 -0
- package/src/theme/layoutTokens.ts +29 -0
- package/src/theme/recipeInputs.ts +368 -0
- package/src/theme/recipes.ts +34 -0
- package/src/theme/resolveKnobs.spec.ts +91 -9
- package/src/theme/resolveKnobs.ts +55 -5
- package/src/theme/shared.tsx +11 -0
- package/src/theme/sizeRecipes.spec.ts +296 -0
- package/src/theme/sizeRecipes.ts +198 -0
- package/src/theme/useResolvedKnobs.ts +76 -24
- package/src/theme/useResolvedKnobsBehavior.spec.tsx +11 -3
- package/types/dates.d.ts +36 -2
- package/types/dates.d.ts.map +1 -1
- package/types/devWarn.d.ts +16 -1
- package/types/devWarn.d.ts.map +1 -1
- package/types/figma/figmaTokens.d.ts +1 -1
- package/types/figma/figmaTokens.d.ts.map +1 -1
- package/types/keyboardFocusRing.d.ts +19 -4
- package/types/keyboardFocusRing.d.ts.map +1 -1
- package/types/menuRow.d.ts +5 -4
- package/types/menuRow.d.ts.map +1 -1
- package/types/theme/Surface.d.ts +37 -0
- package/types/theme/Surface.d.ts.map +1 -0
- package/types/theme/createDefaultThemeConfig.d.ts +14 -3
- package/types/theme/createDefaultThemeConfig.d.ts.map +1 -1
- package/types/theme/createThemes.d.ts.map +1 -1
- package/types/theme/devtools/ThemeDevtoolsPanel.d.ts.map +1 -1
- package/types/theme/focusState.d.ts +8 -0
- package/types/theme/focusState.d.ts.map +1 -1
- package/types/theme/groupGeometry.d.ts +69 -0
- package/types/theme/groupGeometry.d.ts.map +1 -0
- package/types/theme/index.d.ts +3 -0
- package/types/theme/index.d.ts.map +1 -1
- package/types/theme/knobs.d.ts +2 -2
- package/types/theme/knobs.d.ts.map +1 -1
- package/types/theme/layoutTokens.d.ts +22 -0
- package/types/theme/layoutTokens.d.ts.map +1 -1
- package/types/theme/recipeInputs.d.ts +110 -0
- package/types/theme/recipeInputs.d.ts.map +1 -0
- package/types/theme/recipes.d.ts +47 -0
- package/types/theme/recipes.d.ts.map +1 -1
- package/types/theme/resolveKnobs.d.ts +7 -3
- package/types/theme/resolveKnobs.d.ts.map +1 -1
- package/types/theme/shared.d.ts +9 -0
- package/types/theme/shared.d.ts.map +1 -1
- package/types/theme/sizeRecipes.d.ts +68 -0
- package/types/theme/sizeRecipes.d.ts.map +1 -0
- package/types/theme/useResolvedKnobs.d.ts +10 -6
- package/types/theme/useResolvedKnobs.d.ts.map +1 -1
- package/src/audit/baselines/home-pokemon.json +0 -355
|
@@ -3,9 +3,15 @@ import type { SizeTokens } from "tamagui";
|
|
|
3
3
|
import { defaultKnobs, type Knobs } from "./knobs";
|
|
4
4
|
import type { IntentOverride } from "./preset.types";
|
|
5
5
|
import type { KnobPropsOverride, ResolvedKnobs } from "./recipes";
|
|
6
|
-
import { applyDensity, resolveKnobs } from "./resolveKnobs";
|
|
6
|
+
import { applyDensity, compactSpaceMap, resolveKnobs } from "./resolveKnobs";
|
|
7
7
|
import { usePresetContext } from "./PresetContext";
|
|
8
8
|
import { defaultIntents } from "./intents";
|
|
9
|
+
import {
|
|
10
|
+
clampSurfaceDensity,
|
|
11
|
+
clampSurfaceSize,
|
|
12
|
+
SurfaceContext,
|
|
13
|
+
type SurfaceIntent,
|
|
14
|
+
} from "./Surface";
|
|
9
15
|
|
|
10
16
|
export const IntentContext = createContext<string | null>(null);
|
|
11
17
|
|
|
@@ -24,7 +30,6 @@ function usePrefersReducedMotion(): boolean {
|
|
|
24
30
|
const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
25
31
|
const handler = () => setReduced(mq.matches);
|
|
26
32
|
handler();
|
|
27
|
-
// RN / older WebKit: MediaQueryList has addListener, not addEventListener
|
|
28
33
|
if (typeof mq.addEventListener === "function") {
|
|
29
34
|
mq.addEventListener("change", handler);
|
|
30
35
|
return () => mq.removeEventListener("change", handler);
|
|
@@ -37,6 +42,35 @@ function usePrefersReducedMotion(): boolean {
|
|
|
37
42
|
return reduced;
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
function applySurfaceToKnobs(
|
|
46
|
+
knobs: Knobs,
|
|
47
|
+
surface: SurfaceIntent,
|
|
48
|
+
opts: { sizeOverride: boolean; densityOverride: boolean },
|
|
49
|
+
): Knobs {
|
|
50
|
+
let next = knobs;
|
|
51
|
+
if (surface.size !== "unset") {
|
|
52
|
+
if (!opts.sizeOverride) {
|
|
53
|
+
next = { ...next, size: surface.size };
|
|
54
|
+
} else {
|
|
55
|
+
const size = clampSurfaceSize(next.size, surface.size);
|
|
56
|
+
if (size !== "unset" && size !== next.size) {
|
|
57
|
+
next = { ...next, size };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (surface.density !== "unset") {
|
|
62
|
+
if (!opts.densityOverride) {
|
|
63
|
+
next = { ...next, density: surface.density };
|
|
64
|
+
} else {
|
|
65
|
+
const density = clampSurfaceDensity(next.density, surface.density);
|
|
66
|
+
if (density !== "unset" && density !== next.density) {
|
|
67
|
+
next = { ...next, density };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return next;
|
|
72
|
+
}
|
|
73
|
+
|
|
40
74
|
export interface UseResolvedKnobsOptions {
|
|
41
75
|
intent?: string;
|
|
42
76
|
component?: string;
|
|
@@ -44,14 +78,15 @@ export interface UseResolvedKnobsOptions {
|
|
|
44
78
|
/** Override the size from knobs */
|
|
45
79
|
size?: SizeTokens;
|
|
46
80
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
81
|
+
* Density-compact override (layout gaps only — does not step size).
|
|
82
|
+
* When set, wins over `knobs.density`:
|
|
83
|
+
* `true` forces compact density; `false` forces comfortable.
|
|
84
|
+
* Then re-clamped to the parent Surface ceiling (LC-68).
|
|
85
|
+
* When omitted, the density knob / Surface controls compact vs comfortable.
|
|
50
86
|
*/
|
|
51
87
|
compact?: boolean;
|
|
52
88
|
}
|
|
53
89
|
|
|
54
|
-
// Map size tokens to knob size values
|
|
55
90
|
const sizeTokenToKnobSize: Record<string, Knobs["size"]> = {
|
|
56
91
|
$1: "small",
|
|
57
92
|
$2: "small",
|
|
@@ -62,12 +97,6 @@ const sizeTokenToKnobSize: Record<string, Knobs["size"]> = {
|
|
|
62
97
|
$true: "medium",
|
|
63
98
|
};
|
|
64
99
|
|
|
65
|
-
// Semantic intents whose Buttons render SOLID (see defaults/builderOptions):
|
|
66
|
-
// the _Button sub-theme surfaces on the hue's step 11 and carries a
|
|
67
|
-
// luminance-computed on-fill foreground as its `color` token (Axiom 15 /
|
|
68
|
-
// LC-05), so filled labels bind `$color` and outlined labels pin to the
|
|
69
|
-
// hue's readable text tier instead of the on-fill foreground. Exported so
|
|
70
|
-
// Button can anchor outlined frames (icon currentColor) the same way.
|
|
71
100
|
export const solidButtonIntents = new Set(["error", "warning", "success"]);
|
|
72
101
|
|
|
73
102
|
/**
|
|
@@ -78,14 +107,19 @@ export const solidButtonIntents = new Set(["error", "warning", "success"]);
|
|
|
78
107
|
* 2. Merge intent-level overrides (if intent provided or from context)
|
|
79
108
|
* 3. Merge intent+component overrides (if both provided)
|
|
80
109
|
* 4. Apply size override if provided
|
|
81
|
-
* 5.
|
|
82
|
-
* 6.
|
|
83
|
-
* 7.
|
|
110
|
+
* 5. Clamp size/density to Surface context (step-down only, LC-68)
|
|
111
|
+
* 6. Apply density (space only; compact option wins when provided)
|
|
112
|
+
* 7. Re-clamp to Surface ceiling (compact option cannot exceed parent)
|
|
113
|
+
* 8. OS reduced-motion forces animation="none"
|
|
114
|
+
* 9. Call resolveKnobs(mergedKnobs, override) — override merges last
|
|
84
115
|
*/
|
|
85
116
|
export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKnobs {
|
|
86
117
|
const presetCtx = usePresetContext();
|
|
87
118
|
const contextIntent = useIntentContext();
|
|
88
119
|
const prefersReducedMotion = usePrefersReducedMotion();
|
|
120
|
+
const surfaceCtx = SurfaceContext.useStyledContext();
|
|
121
|
+
const surfaceSize = surfaceCtx?.size ?? "unset";
|
|
122
|
+
const surfaceDensity = surfaceCtx?.density ?? "unset";
|
|
89
123
|
|
|
90
124
|
const intent = options?.intent ?? contextIntent ?? undefined;
|
|
91
125
|
const component = options?.component;
|
|
@@ -122,7 +156,6 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
|
|
|
122
156
|
}
|
|
123
157
|
}
|
|
124
158
|
|
|
125
|
-
// Apply size override if provided
|
|
126
159
|
if (sizeOverride) {
|
|
127
160
|
const sizeStr = String(sizeOverride);
|
|
128
161
|
const knobSize = sizeTokenToKnobSize[sizeStr];
|
|
@@ -131,21 +164,30 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
|
|
|
131
164
|
}
|
|
132
165
|
}
|
|
133
166
|
|
|
134
|
-
|
|
167
|
+
const surfaceIntent: SurfaceIntent = { size: surfaceSize, density: surfaceDensity };
|
|
168
|
+
merged = applySurfaceToKnobs(merged, surfaceIntent, {
|
|
169
|
+
sizeOverride: Boolean(sizeOverride),
|
|
170
|
+
densityOverride: compact !== undefined,
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
const spaceBeforeDensity = merged.space;
|
|
135
174
|
merged = applyDensity(merged, compact);
|
|
175
|
+
merged = applySurfaceToKnobs(merged, surfaceIntent, {
|
|
176
|
+
sizeOverride: true,
|
|
177
|
+
densityOverride: true,
|
|
178
|
+
});
|
|
179
|
+
if (merged.density === "compact") {
|
|
180
|
+
merged = { ...merged, space: compactSpaceMap[spaceBeforeDensity] };
|
|
181
|
+
} else {
|
|
182
|
+
merged = { ...merged, space: spaceBeforeDensity };
|
|
183
|
+
}
|
|
136
184
|
|
|
137
|
-
// OS reduced-motion ≡ animation=none for decorative A-* motion (knob consumers).
|
|
138
185
|
if (prefersReducedMotion) {
|
|
139
186
|
merged = { ...merged, animation: "none" };
|
|
140
187
|
}
|
|
141
188
|
|
|
142
189
|
const resolved = resolveKnobs(merged, override);
|
|
143
190
|
|
|
144
|
-
// Semantic-intent Button labels: filled binds `$color` — the sub-theme's
|
|
145
|
-
// luminance-computed on-fill foreground (defaults/builderOptions, Axiom
|
|
146
|
-
// 15 / LC-05) — while outlined pins the hue's readable text tier
|
|
147
|
-
// ($color11 falls through the narrow _Button sub-theme to the intent
|
|
148
|
-
// theme), since the on-fill foreground is illegible on page surfaces.
|
|
149
191
|
if (intent && component === "Button" && solidButtonIntents.has(intent)) {
|
|
150
192
|
const labelColor = merged.fillStyle === "filled" ? "$color" : "$color11";
|
|
151
193
|
return {
|
|
@@ -158,5 +200,15 @@ export function useResolvedKnobs(options?: UseResolvedKnobsOptions): ResolvedKno
|
|
|
158
200
|
}
|
|
159
201
|
|
|
160
202
|
return resolved;
|
|
161
|
-
}, [
|
|
203
|
+
}, [
|
|
204
|
+
presetCtx,
|
|
205
|
+
intent,
|
|
206
|
+
component,
|
|
207
|
+
override,
|
|
208
|
+
sizeOverride,
|
|
209
|
+
compact,
|
|
210
|
+
prefersReducedMotion,
|
|
211
|
+
surfaceSize,
|
|
212
|
+
surfaceDensity,
|
|
213
|
+
]);
|
|
162
214
|
}
|
|
@@ -156,11 +156,19 @@ describe("intent + component knob merging", () => {
|
|
|
156
156
|
);
|
|
157
157
|
});
|
|
158
158
|
|
|
159
|
-
it("compact option
|
|
159
|
+
it("compact option does not shrink size; it shrinks gap and sets density compact", () => {
|
|
160
160
|
const comfortable = renderHook(() => useResolvedKnobs());
|
|
161
161
|
const compact = renderHook(() => useResolvedKnobs({ compact: true }));
|
|
162
|
-
// default medium comfort → small under compact stepping
|
|
163
162
|
expect(comfortable.result.current.knobProps.size).toBe("medium");
|
|
164
|
-
expect(compact.result.current.knobProps.size).toBe("
|
|
163
|
+
expect(compact.result.current.knobProps.size).toBe("medium");
|
|
164
|
+
expect(compact.result.current.knobProps.sizeToken).toBe(
|
|
165
|
+
comfortable.result.current.knobProps.sizeToken,
|
|
166
|
+
);
|
|
167
|
+
expect(compact.result.current.knobProps.control.height).toBe(
|
|
168
|
+
comfortable.result.current.knobProps.control.height,
|
|
169
|
+
);
|
|
170
|
+
expect(compact.result.current.knobProps.density).toBe("compact");
|
|
171
|
+
expect(comfortable.result.current.knobProps.gap).toEqual({ gap: "$4" });
|
|
172
|
+
expect(compact.result.current.knobProps.gap).toEqual({ gap: "$2" });
|
|
165
173
|
});
|
|
166
174
|
});
|
package/types/dates.d.ts
CHANGED
|
@@ -31,6 +31,19 @@ export interface AbsoluteDateFormatOptions {
|
|
|
31
31
|
year?: "auto" | "always" | "never";
|
|
32
32
|
/** Include the time component ("Aug 9, 3:30 PM"). Default false. */
|
|
33
33
|
withTime?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Append seconds to the time component ("Aug 9, 3:30:45 PM"). Off by
|
|
36
|
+
* default — no register emits seconds unless a surface asks. Only the
|
|
37
|
+
* editing register does: a `showSeconds` picker has to display the second
|
|
38
|
+
* it lets you set. Ignored without `withTime`.
|
|
39
|
+
*/
|
|
40
|
+
seconds?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Pin the 12/24-hour clock instead of following the locale — the
|
|
43
|
+
* `timeFormat` contract a datetime picker exposes to its consumers.
|
|
44
|
+
* Ignored without `withTime`.
|
|
45
|
+
*/
|
|
46
|
+
hour12?: boolean;
|
|
34
47
|
/** BCP-47 locale forwarded to Intl. Default: system locale. */
|
|
35
48
|
locale?: string;
|
|
36
49
|
/** Reference date for current-year elision (injectable for tests). */
|
|
@@ -56,6 +69,25 @@ export declare const ISO_DATE_ONLY: RegExp;
|
|
|
56
69
|
* ("2026-13-45") rather than silently rolling them into the next month.
|
|
57
70
|
*/
|
|
58
71
|
export declare function parseCalendarDate(value: DateInput): Date | null;
|
|
72
|
+
/** Timezone-naive wire shapes: Frappe's `Date`, `Datetime` and `Time`. */
|
|
73
|
+
export type CalendarDateShape = "date" | "datetime" | "time";
|
|
74
|
+
/**
|
|
75
|
+
* Serialize a date onto the LOCAL calendar parts it names — the write
|
|
76
|
+
* counterpart to `parseCalendarDate`, and the only place the repo builds a
|
|
77
|
+
* timezone-naive wire string.
|
|
78
|
+
*
|
|
79
|
+
* `"date"` emits `YYYY-MM-DD`, `"datetime"` emits `YYYY-MM-DD HH:mm:ss`, and
|
|
80
|
+
* `"time"` emits `HH:mm:ss` — the shapes Frappe stores, none of which carries
|
|
81
|
+
* an offset. `toISOString()` renders the UTC instant instead, so it names the
|
|
82
|
+
* wrong day whenever the value's local time of day sits across the UTC date
|
|
83
|
+
* boundary, and shifts a wall clock by the whole offset. Reading such a string
|
|
84
|
+
* back through `parseCalendarDate` then compounds the error, because the read
|
|
85
|
+
* side treats it as local.
|
|
86
|
+
*
|
|
87
|
+
* Accepts anything `parseCalendarDate` does, so a value already on the wire
|
|
88
|
+
* round-trips unchanged; empty and unparseable input serialize to "".
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatCalendarDate(value: DateInput, shape?: CalendarDateShape): string;
|
|
59
91
|
/**
|
|
60
92
|
* Compact absolute date — the house register for every absolute date.
|
|
61
93
|
* "Jul 1" / "Jul 1, 2025" (year auto-elided when current), or with
|
|
@@ -65,8 +97,10 @@ export declare function parseCalendarDate(value: DateInput): Date | null;
|
|
|
65
97
|
export declare function formatAbsoluteDate(value: DateInput, options?: AbsoluteDateFormatOptions): string;
|
|
66
98
|
/**
|
|
67
99
|
* Compact absolute date-time ("Aug 9, 3:30 PM"; year added when not
|
|
68
|
-
* current). The system-event register (LC-12)
|
|
69
|
-
*
|
|
100
|
+
* current). The system-event register (LC-12), the tooltip form for relative
|
|
101
|
+
* timestamps, and — with `year: "always"` — the datetime picker display on
|
|
102
|
+
* BOTH platform halves, which is why it takes `hour12` / `seconds`: the two
|
|
103
|
+
* halves used to compose their own and drifted by a comma.
|
|
70
104
|
*/
|
|
71
105
|
export declare function formatAbsoluteDateTime(value: DateInput, options?: Omit<AbsoluteDateFormatOptions, "withTime">): string;
|
|
72
106
|
/**
|
package/types/dates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACxC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,0CAA0C;AAC1C,eAAO,MAAM,aAAa,QAAwB,CAAC;AAyBnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAkB/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"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"}
|
package/types/devWarn.d.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* W12 owns `outline-none` + `positive-tabindex`. Other codes are catalogued
|
|
6
6
|
* here so consumers share one tree-shaken entry point.
|
|
7
7
|
*/
|
|
8
|
-
export type DevWarnCode = "placeholder-as-label" | "two-primaries" | "banned-error-word" | "bare-disabled" | "cancel-disabled" | "dialog-too-many-actions" | "select-too-few-options" | "positive-tabindex" | "tooltip-on-disabled" | "outline-none" | "multiple-h1"
|
|
8
|
+
export type DevWarnCode = "placeholder-as-label" | "two-primaries" | "banned-error-word" | "bare-disabled" | "cancel-disabled" | "dialog-too-many-actions" | "select-too-few-options" | "positive-tabindex" | "tooltip-on-disabled" | "outline-none" | "multiple-h1" | "opaque-stack-group"
|
|
9
|
+
/** Numeric height/paddingHorizontal on a recipe control without sizeRecipeEscape. */
|
|
10
|
+
| "size-recipe-escape";
|
|
9
11
|
export type DevWarnDetail = {
|
|
10
12
|
component?: string;
|
|
11
13
|
id?: string;
|
|
@@ -80,6 +82,19 @@ export declare function warnBareDisabled(args: {
|
|
|
80
82
|
component?: string;
|
|
81
83
|
id?: string;
|
|
82
84
|
}): void;
|
|
85
|
+
/**
|
|
86
|
+
* LC-65 — numeric `height` / `paddingHorizontal` on a size-recipe control
|
|
87
|
+
* (Button, Input.Box) must opt in with `sizeRecipeEscape="reason"`. Warns
|
|
88
|
+
* once per component+id like `warnBareDisabled`; does not invent a general
|
|
89
|
+
* style escape.
|
|
90
|
+
*/
|
|
91
|
+
export declare function warnSizeRecipeEscape(args: {
|
|
92
|
+
height?: unknown;
|
|
93
|
+
paddingHorizontal?: unknown;
|
|
94
|
+
sizeRecipeEscape?: string | null;
|
|
95
|
+
component?: string;
|
|
96
|
+
id?: string;
|
|
97
|
+
}): void;
|
|
83
98
|
/**
|
|
84
99
|
* DG-ACT-05 — the cancel/dismiss action never renders disabled (while confirm
|
|
85
100
|
* may be). Enforcing callers strip the prop and report the attempt here.
|
package/types/devWarn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devWarn.d.ts","sourceRoot":"","sources":["../src/devWarn.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,WAAW,GACnB,sBAAsB,GACtB,eAAe,GACf,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,yBAAyB,GACzB,wBAAwB,GACxB,mBAAmB,GACnB,qBAAqB,GACrB,cAAc,GAGd,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"devWarn.d.ts","sourceRoot":"","sources":["../src/devWarn.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,7 +117,7 @@ export interface FigmaKnobsExport {
|
|
|
117
117
|
};
|
|
118
118
|
density: {
|
|
119
119
|
default: Knobs["density"];
|
|
120
|
-
/** compact steps
|
|
120
|
+
/** compact steps space only (applyDensity); size is an independent axis. */
|
|
121
121
|
compact: {
|
|
122
122
|
size: Record<string, string>;
|
|
123
123
|
space: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figmaTokens.d.ts","sourceRoot":"","sources":["../../src/figma/figmaTokens.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"figmaTokens.d.ts","sourceRoot":"","sources":["../../src/figma/figmaTokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,11 +22,26 @@ export declare function ensureKeyboardModalityTracking(): void;
|
|
|
22
22
|
* false) and during SSR.
|
|
23
23
|
*/
|
|
24
24
|
export declare function wasKeyboardFocus(): boolean;
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Standard manual ring props — the SAME geometry as `FOCUS_VISIBLE_RING`
|
|
27
|
+
* (2px solid `$outlineColor`, inset −2), spread here so manually-painted
|
|
28
|
+
* rings and `focusVisibleStyle` rings can never drift apart.
|
|
29
|
+
*/
|
|
26
30
|
export declare const keyboardFocusRingProps: {
|
|
27
|
-
readonly
|
|
28
|
-
readonly outlineWidth: 2;
|
|
31
|
+
readonly outlineWidth: number;
|
|
29
32
|
readonly outlineStyle: "solid";
|
|
30
|
-
readonly
|
|
33
|
+
readonly outlineColor: string;
|
|
34
|
+
readonly outlineOffset: number;
|
|
31
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* LC-71 RING-ANATOMY — CSS-synchronous ring on a composite's outer boundary.
|
|
38
|
+
*
|
|
39
|
+
* `:has(:focus-visible)` paints the same frame the keyboard heuristic would,
|
|
40
|
+
* with zero React latency (the prior `focused` JS path lagged one frame and
|
|
41
|
+
* spawned the inner-Area ring cascade). Inner targets suppress their own
|
|
42
|
+
* outline so the box carries exactly one ring. Class: `mp-composite-ring`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const compositeFocusRingCss = "/* LC-71: ring on the composite outer box; never on the inner field.\n Inset (\u22122px): these frames use overflow:hidden to clip children to radius,\n which severs an outer ring. Do NOT use :has(:focus-visible) on every\n descendant \u2014 that would ring the whole SearchInput when the clear \u2715 is\n focused (two focusables \u2192 two rings, chip-dismiss rule). */\n.mp-composite-ring:focus-visible,\n.mp-composite-ring:has(input:focus),\n.mp-composite-ring:has(textarea:focus),\n.mp-composite-ring:has(.mp-input-area:focus) {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: -2px;\n}\n.mp-composite-ring-deep:has(:focus-visible) {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: -2px;\n}\n.mp-composite-ring input,\n.mp-composite-ring textarea,\n.mp-composite-ring [contenteditable],\n.mp-input-area,\n.mp-input-area:focus,\n.mp-input-area:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n}\n.mp-chip-dismiss:focus-visible {\n outline: none !important;\n}\n.mp-chip-dismiss:focus-visible .mp-chip-dismiss-ring {\n outline: 2px solid var(--outlineColor, var(--c-outlineColor, CanvasText));\n outline-offset: 2px;\n}";
|
|
45
|
+
/** Idempotently mount the composite-boundary focus-ring stylesheet. */
|
|
46
|
+
export declare function ensureCompositeFocusRing(): void;
|
|
32
47
|
//# sourceMappingURL=keyboardFocusRing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardFocusRing.d.ts","sourceRoot":"","sources":["../src/keyboardFocusRing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;GAIG;AACH,wBAAgB,8BAA8B,SAK7C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;
|
|
1
|
+
{"version":3,"file":"keyboardFocusRing.d.ts","sourceRoot":"","sources":["../src/keyboardFocusRing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;GAIG;AACH,wBAAgB,8BAA8B,SAK7C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAID;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;CAEzB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,gvCA+BhC,CAAC;AAIH,uEAAuE;AACvE,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C"}
|
package/types/menuRow.d.ts
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* One geometry recipe for every menu/listbox row (DropdownMenu `ItemRow`,
|
|
5
5
|
* Select `SelectRow`, MentionInput `MentionSuggestionItem`): the row spans
|
|
6
6
|
* the full overlay width (edge-to-edge highlight, SP-EDGE), owns its
|
|
7
|
-
* horizontal padding, keeps flat corners (the overlay container clips to
|
|
8
|
-
* radius knob
|
|
9
|
-
*
|
|
7
|
+
* horizontal padding, and keeps flat corners (the overlay container clips to
|
|
8
|
+
* the radius knob — LC-72 CONTAINER-CLIP). LC-71 RING-ANATOMY: the highlight
|
|
9
|
+
* fill and the focus ring are orthogonal; consumers paint
|
|
10
|
+
* `ensureFocusVisibleRing({ outlineOffset: -2 })` on `focusVisibleStyle`
|
|
11
|
+
* (inset so the overlay clip does not sever it). Do not delete the ring.
|
|
10
12
|
*
|
|
11
13
|
* It lives in `@multiplatform.one/theme` (not `components`) because the
|
|
12
14
|
* dependency direction is `components` → `forms` → `theme`; the two forms
|
|
@@ -27,6 +29,5 @@ export declare const menuRowFrame: {
|
|
|
27
29
|
readonly borderRadius: 0;
|
|
28
30
|
readonly userSelect: "none";
|
|
29
31
|
readonly backgroundColor: "transparent";
|
|
30
|
-
readonly outlineStyle: any;
|
|
31
32
|
};
|
|
32
33
|
//# sourceMappingURL=menuRow.d.ts.map
|
package/types/menuRow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type SurfaceSize = "small" | "medium" | "large";
|
|
3
|
+
export type SurfaceSizeIntent = SurfaceSize | "sm" | "md" | "lg";
|
|
4
|
+
export type SurfaceDensity = "compact" | "comfortable";
|
|
5
|
+
export type SurfaceIntent = {
|
|
6
|
+
size: SurfaceSize | "unset";
|
|
7
|
+
density: SurfaceDensity | "unset";
|
|
8
|
+
};
|
|
9
|
+
export declare function normalizeSurfaceSize(size: SurfaceSizeIntent): SurfaceSize;
|
|
10
|
+
export declare const SurfaceContext: import("@tamagui/web").StyledContext<SurfaceIntent>;
|
|
11
|
+
export declare const SURFACE_SIZE_RANK: {
|
|
12
|
+
readonly unset: 99;
|
|
13
|
+
readonly small: 0;
|
|
14
|
+
readonly medium: 1;
|
|
15
|
+
readonly large: 2;
|
|
16
|
+
};
|
|
17
|
+
export declare const SURFACE_DENSITY_RANK: {
|
|
18
|
+
readonly unset: 99;
|
|
19
|
+
readonly compact: 0;
|
|
20
|
+
readonly comfortable: 1;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Nested surfaces/controls may inherit or go tighter (lower rank), never larger
|
|
24
|
+
* than the parent (LC-68). `unset` parent = no ceiling. `unset` requested = inherit.
|
|
25
|
+
*/
|
|
26
|
+
export declare function clampSurfaceSize(requested: SurfaceSize | "unset", parent: SurfaceSize | "unset"): SurfaceSize | "unset";
|
|
27
|
+
export declare function clampSurfaceDensity(requested: SurfaceDensity | "unset", parent: SurfaceDensity | "unset"): SurfaceDensity | "unset";
|
|
28
|
+
/**
|
|
29
|
+
* Declares size/density INTENT for a subtree. Nested Surfaces clamp step-down
|
|
30
|
+
* only — never raw gap tokens (LC-68, LC-69). Accepts sm/md/lg aliases.
|
|
31
|
+
*/
|
|
32
|
+
export declare function Surface({ size, density, children, }: {
|
|
33
|
+
size?: SurfaceSizeIntent;
|
|
34
|
+
density?: SurfaceDensity;
|
|
35
|
+
children?: ReactNode;
|
|
36
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=Surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../src/theme/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAA;CAAE,CAAC;AAW/F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAED,eAAO,MAAM,cAAc,qDAGzB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;CAAwD,CAAC;AACvF,eAAO,MAAM,oBAAoB;;;;CAAqD,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,GAAG,OAAO,EAChC,MAAM,EAAE,WAAW,GAAG,OAAO,GAC5B,WAAW,GAAG,OAAO,CAIvB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,cAAc,GAAG,OAAO,EACnC,MAAM,EAAE,cAAc,GAAG,OAAO,GAC/B,cAAc,GAAG,OAAO,CAI1B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CASA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CreateTamaguiProps, GenericFont } from "tamagui";
|
|
2
2
|
import { type BaseThemeBuilderDefinition, type CreateThemesBuilderOptions, type ThemeBuilderDefinition } from "./createThemes";
|
|
3
3
|
import type { Preset } from "./preset.types";
|
|
4
|
+
import { type SizeRecipeInputs } from "./recipeInputs";
|
|
4
5
|
import { type ThemeConfig } from "./shared";
|
|
5
6
|
export interface CreateDefaultThemeConfigOptions {
|
|
6
7
|
/** Base theme palette (dark/light with optional shadows; defaults to the built-in neutral ramps) */
|
|
@@ -23,15 +24,25 @@ export interface CreateDefaultThemeConfigOptions {
|
|
|
23
24
|
presets?: Record<string, Preset>;
|
|
24
25
|
/** Default preset name to use when no `mp.preset` cookie is set */
|
|
25
26
|
defaultPreset?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Size-recipe inputs (LC-70). Merged over `defaultRecipeInputs`; tables are
|
|
29
|
+
* generated, written into the live aliases Button/Input already import, and
|
|
30
|
+
* attached on ThemeConfig as `recipeInputs` / `recipeFamilies`. Not written
|
|
31
|
+
* into Tamagui `themes` (those stay color palettes from createThemes /
|
|
32
|
+
* theme-builder).
|
|
33
|
+
*/
|
|
34
|
+
recipeInputs?: Partial<SizeRecipeInputs>;
|
|
26
35
|
}
|
|
27
36
|
/**
|
|
28
37
|
* Builds a complete Tamagui theme config with batteries included: calling it
|
|
29
38
|
* with zero options yields the framework's polished defaults — the neutral
|
|
30
39
|
* Radix-mauve-curve base ramps, the solid-surface brand accent ramps, Inter
|
|
31
40
|
* heading/body fonts and the interaction-ramp `getTheme` theme builder.
|
|
32
|
-
* Every option overrides its piece independently: `base
|
|
33
|
-
*
|
|
34
|
-
*
|
|
41
|
+
* Every option overrides its piece independently: `base` and `accent` each
|
|
42
|
+
* replace their default, `fonts` are spread OVER the defaults so a partial
|
|
43
|
+
* font map keeps the default heading/body, and `builderOptions.getTheme`
|
|
44
|
+
* COMPOSES with the default (consumer keys win; framework derivations like
|
|
45
|
+
* the solid `$outlineColor` focus ring survive partial overrides).
|
|
35
46
|
*/
|
|
36
47
|
export declare function createDefaultThemeConfig(options?: CreateDefaultThemeConfigOptions): ThemeConfig;
|
|
37
48
|
//# sourceMappingURL=createDefaultThemeConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDefaultThemeConfig.d.ts","sourceRoot":"","sources":["../../src/theme/createDefaultThemeConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,
|
|
1
|
+
{"version":3,"file":"createDefaultThemeConfig.d.ts","sourceRoot":"","sources":["../../src/theme/createDefaultThemeConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE5B,MAAM,gBAAgB,CAAC;AAKxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,UAAU,CAAC;AAG/D,MAAM,WAAW,+BAA+B;IAC9C,oGAAoG;IACpG,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC,mEAAmE;IACnE,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC1D,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,qEAAqE;IACrE,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC9C,oEAAoE;IACpE,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,WAAW,CA6Db"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAchC,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAExC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B,CACzC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACxC,WAAW,SAAS,OAAO,GAAG,OAAO,EACrC,YAAY,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACtE;
|
|
1
|
+
{"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAchC,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAExC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B,CACzC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACxC,WAAW,SAAS,OAAO,GAAG,OAAO,EACrC,YAAY,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACtE;AA8BD,eAAO,MAAM,YAAY,aA6BvB,CAAC;AA0DH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,0BAA0B,EACrC,WAAW,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,0BAA0B;;aAmLzB,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,sBAAsB,GAuB1D,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;;+BAAkC;EAG7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeDevtoolsPanel.d.ts","sourceRoot":"","sources":["../../../src/theme/devtools/ThemeDevtoolsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAyMH,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAkiBF,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,UAAU,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmDD,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"ThemeDevtoolsPanel.d.ts","sourceRoot":"","sources":["../../../src/theme/devtools/ThemeDevtoolsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAyMH,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAkiBF,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,UAAU,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmDD,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,EAAE,uBAAuB,2CAi8BzB"}
|
|
@@ -14,6 +14,14 @@ export declare const FOCUS_RING_MIN_CONTRAST = 3;
|
|
|
14
14
|
* unresolved rings as failing.
|
|
15
15
|
*/
|
|
16
16
|
export declare function focusRingColorMeetsContrast(ringColor: string, surfaceColor: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* ONE ring geometry (DG-A11Y-01): 2px solid `$outlineColor`, inset −2.
|
|
19
|
+
* Inset is the only offset that survives fused/clipped groups (segmented
|
|
20
|
+
* controls clip children at the group radius; an outset ring paints square
|
|
21
|
+
* across the clip or disappears under `overflow: hidden`) and it matches
|
|
22
|
+
* `keyboardFocusRingProps`, the manual ring painted for roving-focus
|
|
23
|
+
* widgets — so keyboard focus reads identically everywhere.
|
|
24
|
+
*/
|
|
17
25
|
export declare const FOCUS_VISIBLE_RING: {
|
|
18
26
|
outlineWidth: number;
|
|
19
27
|
outlineStyle: "solid";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusState.d.ts","sourceRoot":"","sources":["../../src/theme/focusState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAuBzC;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED,eAAO,MAAM,kBAAkB;;;;;CAKF,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,IAAI,GACxC,CAAC,GAAG,iBAAiB,CAyBvB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,iBAAiB,GACvB,iBAAiB,CAKnB"}
|
|
1
|
+
{"version":3,"file":"focusState.d.ts","sourceRoot":"","sources":["../../src/theme/focusState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAuBzC;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKF,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B,eAAO,MAAM,iBAAiB;;CAED,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,IAAI,GACxC,CAAC,GAAG,iBAAiB,CAyBvB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,iBAAiB,GACvB,iBAAiB,CAKnB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stacked-group corner geometry — the one canonical mapping from a row's
|
|
3
|
+
* position in a flush stack to its corner radii (Axiom 1 R-OUTER: a nested
|
|
4
|
+
* rounded child directly against the frame rounds only the outer corners;
|
|
5
|
+
* inner boundaries stay square).
|
|
6
|
+
*
|
|
7
|
+
* A "stacked group" is any run of flush siblings composing one visual unit —
|
|
8
|
+
* segmented buttons, grouped inputs, accordion/sidebar rows, list rows. The
|
|
9
|
+
* FIRST item rounds only its leading corners, the LAST only its trailing
|
|
10
|
+
* corners, everything between is square, and a lone item keeps the plain
|
|
11
|
+
* radius. State highlights (hover/press/selection) paint on the row surface
|
|
12
|
+
* itself, so they inherit exactly this geometry — a uniformly rounded
|
|
13
|
+
* highlight against a straight interior seam is the defect this module
|
|
14
|
+
* exists to prevent. Web focus outlines follow the element's border-radius,
|
|
15
|
+
* so the focus ring inherits the same geometry for free.
|
|
16
|
+
*
|
|
17
|
+
* It lives in `@multiplatform.one/theme` because both `components`
|
|
18
|
+
* (Accordion, List) and `forms` (ToggleGroup, ControlGroup) consume it and
|
|
19
|
+
* the dependency direction is components → forms → theme (same reasoning as
|
|
20
|
+
* menuRow.ts). Corners are LOGICAL (start/end) so RTL flips the rounding
|
|
21
|
+
* with the items — physical corners would land rounded edges on interior
|
|
22
|
+
* seams (the ControlGroup/ToggleGroup precedent).
|
|
23
|
+
*
|
|
24
|
+
* Overlay-clipped stacks (DropdownMenu/Select rows via `menuRowFrame`,
|
|
25
|
+
* table frames) are the CONTAINER-CLIP arm of the same rule: rows stay flat
|
|
26
|
+
* and the rounded overflow-hidden container cuts the outer corners. Use that
|
|
27
|
+
* arm when a rounded clipping container already exists; use this arm when
|
|
28
|
+
* the rows themselves are the outermost painted surface.
|
|
29
|
+
*/
|
|
30
|
+
/** A row's position within its stacked group. */
|
|
31
|
+
export type GroupPosition = "only" | "first" | "middle" | "last";
|
|
32
|
+
/** Stacking direction: vertical stacks round top/bottom, horizontal start/end. */
|
|
33
|
+
export type GroupOrientation = "horizontal" | "vertical";
|
|
34
|
+
/** Resolve a row index to its group position (count <= 1 is "only"). */
|
|
35
|
+
export declare function getGroupPosition(index: number, count: number): GroupPosition;
|
|
36
|
+
export type StackRadiusFragment = {
|
|
37
|
+
borderStartStartRadius: string | number;
|
|
38
|
+
borderStartEndRadius: string | number;
|
|
39
|
+
borderEndStartRadius: string | number;
|
|
40
|
+
borderEndEndRadius: string | number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Corner fragment for a row whose leading/trailing edge may or may not be
|
|
44
|
+
* the group's outer edge. `start` is the top edge (vertical) or inline-start
|
|
45
|
+
* edge (horizontal); `end` the opposite. This is the low-level arm for rows
|
|
46
|
+
* whose outer-edge status is conditional — an open accordion trigger's
|
|
47
|
+
* bottom edge abuts its own content, so its bottom corners go square even on
|
|
48
|
+
* the last item.
|
|
49
|
+
*/
|
|
50
|
+
export declare function stackEdgeRadius(radius: string | number | undefined, edges: {
|
|
51
|
+
start?: boolean;
|
|
52
|
+
end?: boolean;
|
|
53
|
+
}, orientation?: GroupOrientation): StackRadiusFragment;
|
|
54
|
+
/**
|
|
55
|
+
* The complete corner fragment for a row at `position` in a stacked group.
|
|
56
|
+
* Spread it onto the row surface (the element that paints hover/press/
|
|
57
|
+
* selection) — never cherry-pick single corners out of it.
|
|
58
|
+
*/
|
|
59
|
+
export declare function stackRadiusProps(position: GroupPosition, radius: string | number | undefined, orientation?: GroupOrientation): StackRadiusFragment;
|
|
60
|
+
/**
|
|
61
|
+
* Group containers provide each item's position so nested compound parts
|
|
62
|
+
* (an Accordion.Trigger inside an Accordion.Item) resolve their geometry
|
|
63
|
+
* without prop drilling. `undefined` means "not inside a stacked group" —
|
|
64
|
+
* consumers treat that as "only".
|
|
65
|
+
*/
|
|
66
|
+
export declare const GroupPositionContext: import("react").Context<GroupPosition | undefined>;
|
|
67
|
+
/** The current row's position within its stacked group, if any. */
|
|
68
|
+
export declare function useGroupPosition(): GroupPosition | undefined;
|
|
69
|
+
//# sourceMappingURL=groupGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupGeometry.d.ts","sourceRoot":"","sources":["../../src/theme/groupGeometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEzD,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAK5E;AAID,MAAM,MAAM,mBAAmB,GAAG;IAChC,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,WAAW,GAAE,gBAA6B,GACzC,mBAAmB,CAkBrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,WAAW,GAAE,gBAA6B,GACzC,mBAAmB,CASrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,oDAAsD,CAAC;AAExF,mEAAmE;AACnE,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D"}
|