@multiplatform.one/theme 6.4.1 → 6.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/numbers.ts +8 -5
- package/src/theme/knobs.ts +25 -0
- package/src/theme/presets.ts +21 -0
- package/src/theme/recipes.ts +8 -1
- package/src/theme/resolveKnobs.ts +25 -2
- package/types/dates.d.ts +64 -2
- package/types/dates.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/numbers.d.ts +74 -0
- package/types/numbers.d.ts.map +1 -0
- package/types/theme/colorRules.d.ts +1 -1
- package/types/theme/defaults/fonts.d.ts +2 -2
- package/types/theme/knobs.d.ts +23 -0
- package/types/theme/knobs.d.ts.map +1 -1
- package/types/theme/presets.d.ts +15 -0
- package/types/theme/presets.d.ts.map +1 -1
- package/types/theme/readableColor.d.ts +23 -6
- package/types/theme/readableColor.d.ts.map +1 -1
- package/types/theme/recipes.d.ts +10 -1
- package/types/theme/recipes.d.ts.map +1 -1
- package/types/theme/resolveKnobs.d.ts +12 -1
- package/types/theme/resolveKnobs.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/theme",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.3",
|
|
4
4
|
"description": "Tamagui theme system for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multiplatform",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"@tamagui/toast": "2.0.0-rc.41",
|
|
54
54
|
"@tamagui/web": "2.0.0-rc.41",
|
|
55
55
|
"react-cookie": "^8.1.2",
|
|
56
|
-
"@multiplatform.one/
|
|
57
|
-
"@multiplatform.one/
|
|
56
|
+
"@multiplatform.one/store": "6.4.3",
|
|
57
|
+
"@multiplatform.one/platform": "6.4.3"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@tamagui/animations-css": "2.0.0-rc.41",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"tamagui": "2.0.0-rc.41",
|
|
70
70
|
"typescript": "~5.9.3",
|
|
71
71
|
"vitest": "^4.1.5",
|
|
72
|
-
"@multiplatform.one/
|
|
73
|
-
"@multiplatform.one/
|
|
72
|
+
"@multiplatform.one/config": "6.4.3",
|
|
73
|
+
"@multiplatform.one/test-utils": "6.4.3"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"@tamagui/animations-css": "^2.0.0-rc",
|
package/src/numbers.ts
CHANGED
|
@@ -85,10 +85,9 @@ function coerceNumberInput(value: NumberInput): CoercedNumber | null {
|
|
|
85
85
|
return Number.isFinite(num) ? { num } : null;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
function resolveDigits(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
> {
|
|
88
|
+
function resolveDigits(
|
|
89
|
+
options: NumberFormatOptions,
|
|
90
|
+
): Pick<Intl.NumberFormatOptions, "minimumFractionDigits" | "maximumFractionDigits"> {
|
|
92
91
|
const { precision, minimumFractionDigits, maximumFractionDigits } = options;
|
|
93
92
|
if (precision != null) {
|
|
94
93
|
return { minimumFractionDigits: precision, maximumFractionDigits: precision };
|
|
@@ -143,7 +142,11 @@ export function formatCurrency(value: NumberInput, options: CurrencyFormatOption
|
|
|
143
142
|
const code = currency ?? resolveCurrencyCode(symbol);
|
|
144
143
|
const useGrouping = grouping ?? true;
|
|
145
144
|
if (code) {
|
|
146
|
-
return formatWith(
|
|
145
|
+
return formatWith(
|
|
146
|
+
coerced.num,
|
|
147
|
+
{ ...digits, useGrouping, style: "currency", currency: code },
|
|
148
|
+
locale,
|
|
149
|
+
);
|
|
147
150
|
}
|
|
148
151
|
const amount = formatWith(coerced.num, { ...digits, useGrouping }, locale);
|
|
149
152
|
return symbol ? `${symbol}${amount}` : amount;
|
package/src/theme/knobs.ts
CHANGED
|
@@ -179,6 +179,25 @@ export const FontWeight = {
|
|
|
179
179
|
} as const;
|
|
180
180
|
export type FontWeight = (typeof FontWeight)[keyof typeof FontWeight];
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Page-title type step (D-11 hero-H1 dial, owner ruling 2026-08-12).
|
|
184
|
+
*
|
|
185
|
+
* `moderate` ($8 = 32px) is the product default: a page title is wayfinding,
|
|
186
|
+
* not content, so it does not spend the display scale's emphasis budget
|
|
187
|
+
* (Axiom 10) — and the 64px step is the direct amplifier of the DF-02 title
|
|
188
|
+
* clip. `display` ($10 = 64px) is the deliberate marketing/hero opt-in,
|
|
189
|
+
* reached through the `hero` preset or an explicit knob override; it is never
|
|
190
|
+
* the ambient default.
|
|
191
|
+
*
|
|
192
|
+
* Two values, not a token dial: a free size invites per-screen drift
|
|
193
|
+
* (Axiom 5), and the semantic level stays `headingLevel`'s job either way.
|
|
194
|
+
*/
|
|
195
|
+
export const PageTitleScale = {
|
|
196
|
+
Moderate: "moderate",
|
|
197
|
+
Display: "display",
|
|
198
|
+
} as const;
|
|
199
|
+
export type PageTitleScale = (typeof PageTitleScale)[keyof typeof PageTitleScale];
|
|
200
|
+
|
|
182
201
|
// ── Animation ──────────────────────────────────────────────
|
|
183
202
|
|
|
184
203
|
import type { AnimationName } from "./animations/index";
|
|
@@ -223,6 +242,11 @@ export interface Knobs {
|
|
|
223
242
|
headingFont: HeadingFont;
|
|
224
243
|
bodyFont: BodyFont;
|
|
225
244
|
fontWeight: FontWeight;
|
|
245
|
+
/**
|
|
246
|
+
* Page-title step (D-11). Optional so existing preset/knob constructions
|
|
247
|
+
* stay valid; resolveKnobs defaults to `moderate`.
|
|
248
|
+
*/
|
|
249
|
+
pageTitleScale?: PageTitleScale;
|
|
226
250
|
animation: Animation;
|
|
227
251
|
/** House: field label placement. Default top. */
|
|
228
252
|
fieldLabelPlacement: FieldLabelPlacement;
|
|
@@ -263,6 +287,7 @@ export const defaultKnobs: Knobs = {
|
|
|
263
287
|
headingFont: "sans-serif",
|
|
264
288
|
bodyFont: "sans-serif",
|
|
265
289
|
fontWeight: "regular",
|
|
290
|
+
pageTitleScale: "moderate",
|
|
266
291
|
animation: "quick",
|
|
267
292
|
fieldLabelPlacement: "top",
|
|
268
293
|
requiredMarking: "minority",
|
package/src/theme/presets.ts
CHANGED
|
@@ -17,6 +17,7 @@ export const defaultPreset: Preset = {
|
|
|
17
17
|
headingFont: "sans-serif",
|
|
18
18
|
bodyFont: "sans-serif",
|
|
19
19
|
fontWeight: "regular",
|
|
20
|
+
pageTitleScale: "moderate",
|
|
20
21
|
animation: "quick",
|
|
21
22
|
fieldLabelPlacement: "top",
|
|
22
23
|
requiredMarking: "minority",
|
|
@@ -50,6 +51,7 @@ export const boldPreset: Preset = {
|
|
|
50
51
|
headingFont: "sans-serif",
|
|
51
52
|
bodyFont: "sans-serif",
|
|
52
53
|
fontWeight: "bold",
|
|
54
|
+
pageTitleScale: "moderate",
|
|
53
55
|
animation: "bouncy",
|
|
54
56
|
fieldLabelPlacement: "top",
|
|
55
57
|
requiredMarking: "minority",
|
|
@@ -67,3 +69,22 @@ export const boldPreset: Preset = {
|
|
|
67
69
|
intents: defaultIntents,
|
|
68
70
|
tints: ["pink", "purple", "pink", "purple", "pink", "purple", "pink"] as ThemeName[],
|
|
69
71
|
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Marketing / hero surface preset (D-11 hero-H1 dial, owner ruling
|
|
75
|
+
* 2026-08-12). Identical to `defaultPreset` except the page title returns to
|
|
76
|
+
* the display step ($10 = 64px): product screens are wayfinding and take the
|
|
77
|
+
* moderate step by default, so the loud scale has to be ASKED for.
|
|
78
|
+
*
|
|
79
|
+
* @example Whole marketing app
|
|
80
|
+
* createDefaultThemeConfig({ presets: { default: defaultPreset, hero: heroPreset } })
|
|
81
|
+
*
|
|
82
|
+
* @example One hero region inside a product app (cascades onto the live preset)
|
|
83
|
+
* <Preset overrides={{ pageTitleScale: "display" }}>
|
|
84
|
+
* <PageHeader title="Ship faster" />
|
|
85
|
+
* </Preset>
|
|
86
|
+
*/
|
|
87
|
+
export const heroPreset: Preset = {
|
|
88
|
+
...defaultPreset,
|
|
89
|
+
knobs: { ...defaultPreset.knobs, pageTitleScale: "display" },
|
|
90
|
+
};
|
package/src/theme/recipes.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorTokens, TransitionProp } from "tamagui";
|
|
1
|
+
import type { ColorTokens, FontSizeTokens, TransitionProp } from "tamagui";
|
|
2
2
|
import type { Knobs } from "./knobs";
|
|
3
3
|
|
|
4
4
|
// ── State knob prop types (by concern) ───────────────────────────────────
|
|
@@ -154,6 +154,13 @@ export interface KnobProps {
|
|
|
154
154
|
gapLg: { gap: string };
|
|
155
155
|
sizeToken: string;
|
|
156
156
|
heading: { fontFamily: string; fontWeight: string };
|
|
157
|
+
/**
|
|
158
|
+
* Page-title type step (D-11 hero-H1 dial) — the complete size fragment for
|
|
159
|
+
* the single page-title heading, spread whole onto the title node. Product
|
|
160
|
+
* screens land on the moderate step; the `hero` preset (or an explicit
|
|
161
|
+
* `pageTitleScale` override) re-opens the display scale for marketing.
|
|
162
|
+
*/
|
|
163
|
+
pageTitle: { size: FontSizeTokens };
|
|
157
164
|
/** color is set only for solid semantic-intent Buttons (error/warning/success). */
|
|
158
165
|
body: { fontFamily: string; fontWeight: string; color?: ColorTokens };
|
|
159
166
|
textWeight: { fontWeight: string };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isWeb } from "@multiplatform.one/platform";
|
|
2
|
-
import type { TransitionProp } from "tamagui";
|
|
2
|
+
import type { FontSizeTokens, TransitionProp } from "tamagui";
|
|
3
3
|
// Importing the class constant also mounts the corner-shape stylesheet at
|
|
4
4
|
// theme load (web only, idempotent) — see cornerSmoothing.ts.
|
|
5
5
|
import { cornerSmoothClassName } from "./cornerSmoothing";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
STATE_LAYER_PRESS,
|
|
10
10
|
withDefaultStateLayer,
|
|
11
11
|
} from "./focusState";
|
|
12
|
-
import type { CornerSmoothing, Knobs, StateKnobs } from "./knobs";
|
|
12
|
+
import type { CornerSmoothing, Knobs, PageTitleScale, StateKnobs } from "./knobs";
|
|
13
13
|
import type {
|
|
14
14
|
ControlStateProps,
|
|
15
15
|
DisabledRecipe,
|
|
@@ -101,6 +101,28 @@ const panelPaddingMap = {
|
|
|
101
101
|
large: "$6",
|
|
102
102
|
} as const;
|
|
103
103
|
|
|
104
|
+
// ── Page-title step (D-11 hero-H1 dial) ───────────────────────
|
|
105
|
+
// The one canonical definition of how big a page title is. On the heading
|
|
106
|
+
// scale (1.4x Inter, defaults/fonts.ts) $8 = 32px and $10 = 64px, so
|
|
107
|
+
// `moderate` lands in the page-title class while `display` keeps the
|
|
108
|
+
// marketing hero step. Screens never pick a heading step by hand — they
|
|
109
|
+
// spread `knobProps.pageTitle`, so one knob flip re-scales every title.
|
|
110
|
+
const pageTitleSizeMap: Record<PageTitleScale, FontSizeTokens> = {
|
|
111
|
+
moderate: "$8",
|
|
112
|
+
display: "$10",
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Resolve a page-title scale to its complete size fragment (D-11).
|
|
117
|
+
*
|
|
118
|
+
* Exported so a per-instance eject (`PageHeader titleScale="display"` on a
|
|
119
|
+
* marketing hero) resolves through the same table as the knob — never a
|
|
120
|
+
* second hardcoded step.
|
|
121
|
+
*/
|
|
122
|
+
export function resolvePageTitleScale(scale: PageTitleScale): { size: FontSizeTokens } {
|
|
123
|
+
return { size: pageTitleSizeMap[scale] };
|
|
124
|
+
}
|
|
125
|
+
|
|
104
126
|
// ── Container radius cap (Axiom 1 CLIP) ──────────────────────
|
|
105
127
|
// A padded container's effective radius must not exceed its own padding:
|
|
106
128
|
// past that, the corner curve sweeps through the cell where children sit
|
|
@@ -433,6 +455,7 @@ export function resolveKnobs(knobs: Knobs, override?: KnobPropsOverride): Resolv
|
|
|
433
455
|
fontFamily: headingFontMap[knobs.headingFont],
|
|
434
456
|
fontWeight: fontWeightValue,
|
|
435
457
|
},
|
|
458
|
+
pageTitle: resolvePageTitleScale(knobs.pageTitleScale ?? "moderate"),
|
|
436
459
|
body: {
|
|
437
460
|
fontFamily: bodyFontValue,
|
|
438
461
|
fontWeight: fontWeightValue,
|
package/types/dates.d.ts
CHANGED
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
* current year elided (`year: "auto"`)
|
|
13
13
|
* - editing surfaces → compact absolute with the year always shown
|
|
14
14
|
* ("Jul 1, 2026") — pickers are precision contexts
|
|
15
|
+
* - calendar chrome → the day/month/time-of-day registers below
|
|
16
|
+
* (weekday and month names, "2 PM" hour ticks,
|
|
17
|
+
* "2:00 PM" times, "Tuesday, March 10" day names)
|
|
18
|
+
* - date axis ticks → compact absolute with `year: "never"`, because
|
|
19
|
+
* the surrounding chrome already states the year
|
|
15
20
|
* No default may emit verbose locale output with seconds.
|
|
16
21
|
*/
|
|
17
22
|
export type DateInput = Date | string | number | null | undefined;
|
|
@@ -19,9 +24,11 @@ export interface AbsoluteDateFormatOptions {
|
|
|
19
24
|
/**
|
|
20
25
|
* `"auto"` (default) elides the current year — the display register for
|
|
21
26
|
* tables, feeds, and system events. `"always"` keeps it — the editing
|
|
22
|
-
* register for picker display values.
|
|
27
|
+
* register for picker display values. `"never"` drops it — the axis-tick
|
|
28
|
+
* register, where a wider label would collide with its neighbours and the
|
|
29
|
+
* period header carries the year.
|
|
23
30
|
*/
|
|
24
|
-
year?: "auto" | "always";
|
|
31
|
+
year?: "auto" | "always" | "never";
|
|
25
32
|
/** Include the time component ("Aug 9, 3:30 PM"). Default false. */
|
|
26
33
|
withTime?: boolean;
|
|
27
34
|
/** BCP-47 locale forwarded to Intl. Default: system locale. */
|
|
@@ -49,4 +56,59 @@ export declare function formatAbsoluteDateTime(value: DateInput, options?: Omit<
|
|
|
49
56
|
* feed/social register (LC-12), selected by `timestampStyle: "relative"`.
|
|
50
57
|
*/
|
|
51
58
|
export declare function formatRelativeTimestamp(value: DateInput, now?: number): string;
|
|
59
|
+
/** Clock-time shape ("HH:MM" / "HH:MM:SS") — how Frappe `Time` values arrive. */
|
|
60
|
+
export declare const CLOCK_TIME: RegExp;
|
|
61
|
+
export interface TimeOfDayFormatOptions {
|
|
62
|
+
/** BCP-47 locale forwarded to Intl. Default: system locale. */
|
|
63
|
+
locale?: string;
|
|
64
|
+
/** Minutes ride along by default; `false` is the hour-tick register. */
|
|
65
|
+
minutes?: boolean;
|
|
66
|
+
/** Pin the 12/24-hour clock. Default: whatever the locale uses. */
|
|
67
|
+
hour12?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Time-of-day register ("2:00 PM", or "2 PM" with `minutes: false` for
|
|
71
|
+
* hour ticks) — calendar time grids, Frappe `Time` fields, and
|
|
72
|
+
* "last updated" chrome. Accepts a clock-time string as well as a date,
|
|
73
|
+
* and never emits seconds.
|
|
74
|
+
*/
|
|
75
|
+
export declare function formatTimeOfDay(value: DateInput, options?: TimeOfDayFormatOptions): string;
|
|
76
|
+
export interface DayLongFormatOptions {
|
|
77
|
+
locale?: string;
|
|
78
|
+
/** Lead with the weekday ("Tuesday, March 10"). Default true. */
|
|
79
|
+
weekday?: boolean;
|
|
80
|
+
/** Append the year ("Tuesday, March 10, 2026"). Default false. */
|
|
81
|
+
year?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Long day register ("Tuesday, March 10") — calendar day headers and the
|
|
85
|
+
* accessible names that read a date aloud, where the compact absolute
|
|
86
|
+
* register is too terse to speak.
|
|
87
|
+
*/
|
|
88
|
+
export declare function formatDayLong(value: DateInput, options?: DayLongFormatOptions): string;
|
|
89
|
+
export interface MonthYearFormatOptions {
|
|
90
|
+
locale?: string;
|
|
91
|
+
/** `"short"` ("Mar 2026", the tick register) or `"long"` ("March 2026"). */
|
|
92
|
+
month?: "short" | "long";
|
|
93
|
+
}
|
|
94
|
+
/** Month-year register ("Mar 2026") — period headers and month axis ticks. */
|
|
95
|
+
export declare function formatMonthYear(value: DateInput, options?: MonthYearFormatOptions): string;
|
|
96
|
+
/** Day-of-month register ("10") — the densest date axis tick. */
|
|
97
|
+
export declare function formatDayOfMonth(value: DateInput, options?: {
|
|
98
|
+
locale?: string;
|
|
99
|
+
}): string;
|
|
100
|
+
export interface WeekdayNamesOptions {
|
|
101
|
+
locale?: string;
|
|
102
|
+
/** `"short"` ("Mon"), `"long"` ("Monday") or `"narrow"` ("M"). */
|
|
103
|
+
style?: "short" | "long" | "narrow";
|
|
104
|
+
/** Week start, 0 = Sunday (default) — the index base callers rely on. */
|
|
105
|
+
firstDay?: number;
|
|
106
|
+
}
|
|
107
|
+
/** Weekday names for calendar chrome, in week order from `firstDay`. */
|
|
108
|
+
export declare function getWeekdayNames(options?: WeekdayNamesOptions): string[];
|
|
109
|
+
/** Month names for calendar chrome and picker headers, January first. */
|
|
110
|
+
export declare function getMonthNames(options?: {
|
|
111
|
+
locale?: string;
|
|
112
|
+
style?: "long" | "short";
|
|
113
|
+
}): string[];
|
|
52
114
|
//# sourceMappingURL=dates.d.ts.map
|
package/types/dates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"AAAA
|
|
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;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,CA0BR;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAM,GACxD,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAgB1F;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU,QAAqC,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAuB9F;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAa1F;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAW9F;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAU5F;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAO3E;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAO,GAC1D,MAAM,EAAE,CAIV"}
|
package/types/index.d.ts
CHANGED
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAG9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAG9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical number / currency registers (LC-12 render channel, Axiom 9).
|
|
3
|
+
*
|
|
4
|
+
* One formatter owns every number the catalog renders — table aggregates,
|
|
5
|
+
* KPI values, report cells, chart value labels — so the same data class
|
|
6
|
+
* never speaks in two voices ("15400" in a group header beside "15,400" in
|
|
7
|
+
* the cell two rows below).
|
|
8
|
+
*
|
|
9
|
+
* Content class picks the register:
|
|
10
|
+
* - cardinal / aggregate → `formatNumber` (grouped, ≤2 fraction digits)
|
|
11
|
+
* - money → `formatCurrency` (grouped, 2 fraction digits;
|
|
12
|
+
* `fractionDigits: "auto"` elides a whole-value
|
|
13
|
+
* `.00` for summary tiles)
|
|
14
|
+
* - rate → `formatPercent` (value already carries percent
|
|
15
|
+
* units: 94.2 → "94.2%")
|
|
16
|
+
*
|
|
17
|
+
* Not covered (declared exemptions): chart AXIS tick labels, whose
|
|
18
|
+
* density-driven register is owned by `charts/math.ts#formatAxisTick`;
|
|
19
|
+
* app-land `useFormatNumber` / `useFormatCurrency` (i18n package), which
|
|
20
|
+
* bind the active UI language outside the catalog; and machine formats
|
|
21
|
+
* (export/serialization).
|
|
22
|
+
*/
|
|
23
|
+
export type NumberInput = number | string | null | undefined;
|
|
24
|
+
export interface NumberFormatOptions {
|
|
25
|
+
/** BCP-47 locale forwarded to Intl. Default: system locale. */
|
|
26
|
+
locale?: string;
|
|
27
|
+
/** Pins min and max fraction digits together (fixed-precision columns). */
|
|
28
|
+
precision?: number;
|
|
29
|
+
minimumFractionDigits?: number;
|
|
30
|
+
/** House cap for the cardinal register. Default 2. */
|
|
31
|
+
maximumFractionDigits?: number;
|
|
32
|
+
/** Thousands grouping. Default true. */
|
|
33
|
+
grouping?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface CurrencyFormatOptions extends NumberFormatOptions {
|
|
36
|
+
/** ISO 4217 code, e.g. "USD" — renders through Intl's currency style. */
|
|
37
|
+
currency?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Currency symbol as handed over by Frappe-style adapters. Resolved to an
|
|
40
|
+
* ISO code when known, otherwise prefixed literally.
|
|
41
|
+
*/
|
|
42
|
+
symbol?: string;
|
|
43
|
+
/**
|
|
44
|
+
* `"always"` (default) pins 2 fraction digits — the money register that
|
|
45
|
+
* keeps columns aligned. `"auto"` drops them for whole values — the
|
|
46
|
+
* summary-tile register (KPI cards read "$48,250", not "$48,250.00")
|
|
47
|
+
* while still showing cents when a value has them.
|
|
48
|
+
*/
|
|
49
|
+
fractionDigits?: "always" | "auto";
|
|
50
|
+
}
|
|
51
|
+
export type PercentFormatOptions = NumberFormatOptions;
|
|
52
|
+
/**
|
|
53
|
+
* ISO 4217 code for a currency symbol (or a code passed straight through).
|
|
54
|
+
* `undefined` when the symbol has no known code — callers prefix it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveCurrencyCode(symbol: string | undefined): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Cardinal / aggregate register — grouped digits, at most two fraction
|
|
59
|
+
* digits ("15,400", "5,133.33"). Empty input renders "" and an unparseable
|
|
60
|
+
* string passes through unchanged (honest passthrough — never invents).
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatNumber(value: NumberInput, options?: NumberFormatOptions): string;
|
|
63
|
+
/**
|
|
64
|
+
* Money register — grouped digits with two fraction digits, rendered with
|
|
65
|
+
* the currency's own symbol placement when the code is known ("$15,400.00",
|
|
66
|
+
* "₹15,400.00") and symbol-prefixed otherwise.
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatCurrency(value: NumberInput, options?: CurrencyFormatOptions): string;
|
|
69
|
+
/**
|
|
70
|
+
* Rate register — the value already carries percent units (94.2 → "94.2%"),
|
|
71
|
+
* never a 0..1 ratio; ratios are converted by the caller that owns the unit.
|
|
72
|
+
*/
|
|
73
|
+
export declare function formatPercent(value: NumberInput, options?: PercentFormatOptions): string;
|
|
74
|
+
//# sourceMappingURL=numbers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../src/numbers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAYvD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIlF;AAiCD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAyB9F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAK5F"}
|
|
@@ -55,7 +55,7 @@ export interface ButtonColorConfig extends ComponentColorConfig {
|
|
|
55
55
|
}
|
|
56
56
|
export declare const buttonColors: ButtonColorConfig;
|
|
57
57
|
export declare const inputColors: ComponentColorConfig;
|
|
58
|
-
export declare function $color(step: ColorStep): "$color1" | "$color12" | "$
|
|
58
|
+
export declare function $color(step: ColorStep): "$color1" | "$color12" | "$color2" | "$color7" | "$color4" | "$color5" | "$color11" | "$color3" | "$color6" | "$color8" | "$color9" | "$color10";
|
|
59
59
|
export interface SemanticGroup {
|
|
60
60
|
key: string;
|
|
61
61
|
label: string;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
export declare function interTrackingEm(sizePx: number): number;
|
|
3
3
|
/** Inter dynamic tracking for a rendered `sizePx`, in px (2-decimal). */
|
|
4
4
|
export declare function interTrackingPx(sizePx: number): number;
|
|
5
|
-
export declare const defaultHeadingFont: import("@tamagui/web").FillInFont<import("tamagui").GenericFont, 1 | 12 |
|
|
6
|
-
export declare const defaultBodyFont: import("@tamagui/web").FillInFont<import("tamagui").GenericFont, 1 | 12 |
|
|
5
|
+
export declare const defaultHeadingFont: import("@tamagui/web").FillInFont<import("tamagui").GenericFont, 1 | 12 | 2 | 7 | 4 | 5 | 11 | 13 | 14 | 15 | 16 | 3 | 6 | 8 | 9 | 10 | "true">;
|
|
6
|
+
export declare const defaultBodyFont: import("@tamagui/web").FillInFont<import("tamagui").GenericFont, 1 | 12 | 2 | 7 | 4 | 5 | 11 | 13 | 14 | 15 | 16 | 3 | 6 | 8 | 9 | 10 | "true">;
|
|
7
7
|
//# sourceMappingURL=fonts.d.ts.map
|
package/types/theme/knobs.d.ts
CHANGED
|
@@ -176,6 +176,24 @@ export declare const FontWeight: {
|
|
|
176
176
|
readonly Bold: "bold";
|
|
177
177
|
};
|
|
178
178
|
export type FontWeight = (typeof FontWeight)[keyof typeof FontWeight];
|
|
179
|
+
/**
|
|
180
|
+
* Page-title type step (D-11 hero-H1 dial, owner ruling 2026-08-12).
|
|
181
|
+
*
|
|
182
|
+
* `moderate` ($8 = 32px) is the product default: a page title is wayfinding,
|
|
183
|
+
* not content, so it does not spend the display scale's emphasis budget
|
|
184
|
+
* (Axiom 10) — and the 64px step is the direct amplifier of the DF-02 title
|
|
185
|
+
* clip. `display` ($10 = 64px) is the deliberate marketing/hero opt-in,
|
|
186
|
+
* reached through the `hero` preset or an explicit knob override; it is never
|
|
187
|
+
* the ambient default.
|
|
188
|
+
*
|
|
189
|
+
* Two values, not a token dial: a free size invites per-screen drift
|
|
190
|
+
* (Axiom 5), and the semantic level stays `headingLevel`'s job either way.
|
|
191
|
+
*/
|
|
192
|
+
export declare const PageTitleScale: {
|
|
193
|
+
readonly Moderate: "moderate";
|
|
194
|
+
readonly Display: "display";
|
|
195
|
+
};
|
|
196
|
+
export type PageTitleScale = (typeof PageTitleScale)[keyof typeof PageTitleScale];
|
|
179
197
|
import type { AnimationName } from "./animations/index";
|
|
180
198
|
export type Animation = "none" | AnimationName;
|
|
181
199
|
export interface StateKnobs {
|
|
@@ -209,6 +227,11 @@ export interface Knobs {
|
|
|
209
227
|
headingFont: HeadingFont;
|
|
210
228
|
bodyFont: BodyFont;
|
|
211
229
|
fontWeight: FontWeight;
|
|
230
|
+
/**
|
|
231
|
+
* Page-title step (D-11). Optional so existing preset/knob constructions
|
|
232
|
+
* stay valid; resolveKnobs defaults to `moderate`.
|
|
233
|
+
*/
|
|
234
|
+
pageTitleScale?: PageTitleScale;
|
|
212
235
|
animation: Animation;
|
|
213
236
|
/** House: field label placement. Default top. */
|
|
214
237
|
fieldLabelPlacement: FieldLabelPlacement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knobs.d.ts","sourceRoot":"","sources":["../../src/theme/knobs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"knobs.d.ts","sourceRoot":"","sources":["../../src/theme/knobs.ts"],"names":[],"mappings":"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"}
|
package/types/theme/presets.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import type { Preset } from "./preset.types";
|
|
2
2
|
export declare const defaultPreset: Preset;
|
|
3
3
|
export declare const boldPreset: Preset;
|
|
4
|
+
/**
|
|
5
|
+
* Marketing / hero surface preset (D-11 hero-H1 dial, owner ruling
|
|
6
|
+
* 2026-08-12). Identical to `defaultPreset` except the page title returns to
|
|
7
|
+
* the display step ($10 = 64px): product screens are wayfinding and take the
|
|
8
|
+
* moderate step by default, so the loud scale has to be ASKED for.
|
|
9
|
+
*
|
|
10
|
+
* @example Whole marketing app
|
|
11
|
+
* createDefaultThemeConfig({ presets: { default: defaultPreset, hero: heroPreset } })
|
|
12
|
+
*
|
|
13
|
+
* @example One hero region inside a product app (cascades onto the live preset)
|
|
14
|
+
* <Preset overrides={{ pageTitleScale: "display" }}>
|
|
15
|
+
* <PageHeader title="Ship faster" />
|
|
16
|
+
* </Preset>
|
|
17
|
+
*/
|
|
18
|
+
export declare const heroPreset: Preset;
|
|
4
19
|
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/theme/presets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/theme/presets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,MAgC3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAgCxB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,EAAE,MAGxB,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Readable text/glyph color to sit ON `
|
|
3
|
-
* "$color8"
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Readable text/glyph color to sit ON `fill` (a token like "$accentBackground"
|
|
3
|
+
* / "$color8", or an already-resolved color value — e.g. the step returned by
|
|
4
|
+
* `useAccentTintedSurface`): the scheme's paper (`$color1`) or ink (`$color12`)
|
|
5
|
+
* anchor, whichever contrasts more on the resolved fill, returned as a concrete
|
|
6
|
+
* value so no nested sub-theme can flip it. Returns `undefined` when any color
|
|
7
|
+
* fails to resolve/parse — callers keep their own default in that case.
|
|
7
8
|
*/
|
|
8
|
-
export declare function useReadableTextOn(
|
|
9
|
+
export declare function useReadableTextOn(fill_: string | undefined): string | undefined;
|
|
9
10
|
/**
|
|
10
11
|
* Accent-hued text/link color readable on the page surfaces (color1/color2).
|
|
11
12
|
* Scans the theme's own accent ramp for the most chromatic step that clears
|
|
@@ -14,4 +15,20 @@ export declare function useReadableTextOn(fillToken: string): string | undefined
|
|
|
14
15
|
* tint sub-themes, where neutral text is the house default anyway).
|
|
15
16
|
*/
|
|
16
17
|
export declare function useAccentOnSurface(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Accent-TINTED surface step — the accent-ramp analogue of a neutral surface
|
|
20
|
+
* tier, for selected/current chips that carry the accent language at surface
|
|
21
|
+
* strength rather than as a solid fill (LC-05: selected state is accent; the
|
|
22
|
+
* ViewSwitcher rider pins segmented-control strength at "tinted", not solid).
|
|
23
|
+
*
|
|
24
|
+
* Picks the accent step whose relative luminance sits closest to the neutral
|
|
25
|
+
* tier it replaces, so the chip stays a surface in BOTH schemes without a
|
|
26
|
+
* per-component light/dark fork: against this repo's stock accent ramp that
|
|
27
|
+
* resolves to a pale violet in light and a deep violet in dark, because the
|
|
28
|
+
* accent ramp flips with the scheme exactly as the neutral ramp does.
|
|
29
|
+
*
|
|
30
|
+
* Returns `undefined` when the accent ramp is absent or unparseable — callers
|
|
31
|
+
* keep their neutral default rather than render an unthemed chip.
|
|
32
|
+
*/
|
|
33
|
+
export declare function useAccentTintedSurface(neutralToken?: string): string | undefined;
|
|
17
34
|
//# sourceMappingURL=readableColor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readableColor.d.ts","sourceRoot":"","sources":["../../src/theme/readableColor.ts"],"names":[],"mappings":"AA4CA
|
|
1
|
+
{"version":3,"file":"readableColor.d.ts","sourceRoot":"","sources":["../../src/theme/readableColor.ts"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAU/E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA8B3C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,SAAY,GAAG,MAAM,GAAG,SAAS,CAuBnF"}
|
package/types/theme/recipes.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorTokens, TransitionProp } from "tamagui";
|
|
1
|
+
import type { ColorTokens, FontSizeTokens, TransitionProp } from "tamagui";
|
|
2
2
|
import type { Knobs } from "./knobs";
|
|
3
3
|
export interface ControlStateProps {
|
|
4
4
|
borderRadius?: string;
|
|
@@ -159,6 +159,15 @@ export interface KnobProps {
|
|
|
159
159
|
fontFamily: string;
|
|
160
160
|
fontWeight: string;
|
|
161
161
|
};
|
|
162
|
+
/**
|
|
163
|
+
* Page-title type step (D-11 hero-H1 dial) — the complete size fragment for
|
|
164
|
+
* the single page-title heading, spread whole onto the title node. Product
|
|
165
|
+
* screens land on the moderate step; the `hero` preset (or an explicit
|
|
166
|
+
* `pageTitleScale` override) re-opens the display scale for marketing.
|
|
167
|
+
*/
|
|
168
|
+
pageTitle: {
|
|
169
|
+
size: FontSizeTokens;
|
|
170
|
+
};
|
|
162
171
|
/** color is set only for solid semantic-intent Buttons (error/warning/success). */
|
|
163
172
|
body: {
|
|
164
173
|
fontFamily: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/theme/recipes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/theme/recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FontSizeTokens } from "tamagui";
|
|
2
|
+
import type { Knobs, PageTitleScale } from "./knobs";
|
|
2
3
|
import type { KnobPropsOverride, ResolvedKnobs } from "./recipes";
|
|
3
4
|
/** Step size down one level for compact density. */
|
|
4
5
|
export declare const compactSizeMap: Record<Knobs["size"], Knobs["size"]>;
|
|
@@ -12,6 +13,16 @@ export declare const compactSpaceMap: Record<Knobs["space"], Knobs["space"]>;
|
|
|
12
13
|
* `true` forces compact stepping; `false` forces comfortable (no step).
|
|
13
14
|
*/
|
|
14
15
|
export declare function applyDensity(knobs: Knobs, compactOverride?: boolean): Knobs;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a page-title scale to its complete size fragment (D-11).
|
|
18
|
+
*
|
|
19
|
+
* Exported so a per-instance eject (`PageHeader titleScale="display"` on a
|
|
20
|
+
* marketing hero) resolves through the same table as the knob — never a
|
|
21
|
+
* second hardcoded step.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolvePageTitleScale(scale: PageTitleScale): {
|
|
24
|
+
size: FontSizeTokens;
|
|
25
|
+
};
|
|
15
26
|
/**
|
|
16
27
|
* Cap a container's radius at its own padding (Axiom 1 CLIP: "my children's
|
|
17
28
|
* pixel clips first → cap at padding"). Returns the radius token untouched
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAC;AAU9D,OAAO,KAAK,EAAmB,KAAK,EAAE,cAAc,EAAc,MAAM,SAAS,CAAC;AAClF,OAAO,KAAK,EAKV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,WAAW,CAAC;AAInB,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAI/D,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAIlE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,KAAK,CAW3E;AAyDD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAErF;AA0BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GACpB,MAAM,GAAG,MAAM,CAIjB;AAgLD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,aAAa,CA2JtF"}
|