@multiplatform.one/theme 7.65.2 → 7.67.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 +5 -5
- package/src/menuRow.spec.ts +7 -1
- package/src/menuRow.ts +10 -0
- package/src/theme/chartPalette.spec.ts +13 -1
- package/src/theme/chartPalette.ts +15 -2
- package/src/theme/defaults/fonts.ts +49 -9
- package/src/theme/layoutTokens.ts +10 -0
- package/src/theme/monoFamily.native.spec.ts +187 -0
- package/src/theme/nativeFontFamily.native.ts +14 -0
- package/src/theme/nativeFontFamily.ts +6 -0
- package/src/theme/nativeMonoFamily.ts +46 -0
- package/src/theme/overlaySurfaces.tsx +6 -2
- package/src/theme/resolveKnobs.spec.ts +26 -2
- package/src/theme/resolveKnobs.ts +11 -4
- package/types/menuRow.d.ts +9 -0
- package/types/menuRow.d.ts.map +1 -1
- package/types/theme/chartPalette.d.ts.map +1 -1
- package/types/theme/defaults/fonts.d.ts.map +1 -1
- package/types/theme/layoutTokens.d.ts +7 -0
- package/types/theme/layoutTokens.d.ts.map +1 -1
- package/types/theme/nativeFontFamily.d.ts +4 -0
- package/types/theme/nativeFontFamily.d.ts.map +1 -0
- package/types/theme/nativeFontFamily.native.d.ts +8 -0
- package/types/theme/nativeFontFamily.native.d.ts.map +1 -0
- package/types/theme/nativeMonoFamily.d.ts +15 -0
- package/types/theme/nativeMonoFamily.d.ts.map +1 -0
- package/types/theme/overlaySurfaces.d.ts.map +1 -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": "7.
|
|
3
|
+
"version": "7.67.0",
|
|
4
4
|
"description": "Tamagui theme system for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multiplatform",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@multiplatform.one/platform": "^7.
|
|
76
|
-
"@multiplatform.one/store": "^7.
|
|
75
|
+
"@multiplatform.one/platform": "^7.67.0",
|
|
76
|
+
"@multiplatform.one/store": "^7.67.0",
|
|
77
77
|
"@tamagui/animations-react-native": "2.7.6",
|
|
78
78
|
"@tamagui/colors": "2.7.6",
|
|
79
79
|
"@tamagui/config": "2.7.6",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
91
|
"@expo/prebuild-config": "55.0.18",
|
|
92
|
-
"@multiplatform.one/config": "7.
|
|
93
|
-
"@multiplatform.one/test-utils": "7.
|
|
92
|
+
"@multiplatform.one/config": "7.67.0",
|
|
93
|
+
"@multiplatform.one/test-utils": "7.67.0",
|
|
94
94
|
"@tamagui/animations-css": "2.7.6",
|
|
95
95
|
"@tamagui/animations-reanimated": "2.7.6",
|
|
96
96
|
"@tamagui/font-inter": "2.7.6",
|
package/src/menuRow.spec.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { menuRowFrame } from "./menuRow";
|
|
2
|
+
import { menuRowChecked, menuRowFrame } from "./menuRow";
|
|
3
3
|
|
|
4
4
|
describe("menuRowFrame (LC-16 shared menu-row geometry)", () => {
|
|
5
5
|
it("spans the overlay edge-to-edge with its own horizontal padding (SP-EDGE)", () => {
|
|
@@ -30,3 +30,9 @@ describe("menuRowFrame (LC-16 shared menu-row geometry)", () => {
|
|
|
30
30
|
expect(menuRowFrame).not.toHaveProperty("paddingVertical");
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
describe("menuRowChecked (LC-262 / LC-172 checked row)", () => {
|
|
35
|
+
it("draws no fill: the check mark carries the selection (FZ-8355)", () => {
|
|
36
|
+
expect(menuRowChecked).toEqual({ backgroundColor: "transparent" });
|
|
37
|
+
});
|
|
38
|
+
});
|
package/src/menuRow.ts
CHANGED
|
@@ -33,3 +33,13 @@ export const menuRowFrame = {
|
|
|
33
33
|
userSelect: "none",
|
|
34
34
|
backgroundColor: "transparent",
|
|
35
35
|
} as const;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* LC-262 / LC-172: a checked or selected menu or picker row draws no fill in
|
|
39
|
+
* either scheme; the accent check alone marks it. A per-row `$color2` plate
|
|
40
|
+
* read as nothing in light and near-black in dark (FZ-8355). Hover, press and
|
|
41
|
+
* keyboard focus stay transient feedback, owned by each consumer.
|
|
42
|
+
*/
|
|
43
|
+
export const menuRowChecked = {
|
|
44
|
+
backgroundColor: "transparent",
|
|
45
|
+
} as const;
|
|
@@ -115,7 +115,7 @@ describe("resolveChartPalette", () => {
|
|
|
115
115
|
|
|
116
116
|
it("retains the dark cycle order while deepening its failing violet slot", () => {
|
|
117
117
|
const palette = resolveChartPalette({ scheme: "dark", identitySolid: "#aaaaaa" });
|
|
118
|
-
expect(palette.categorical
|
|
118
|
+
expect(palette.categorical).toEqual([
|
|
119
119
|
Colors.blueDark.blue9,
|
|
120
120
|
Colors.orangeDark.orange9,
|
|
121
121
|
Colors.greenDark.green9,
|
|
@@ -205,6 +205,18 @@ describe("resolveChartPalette", () => {
|
|
|
205
205
|
).toBeGreaterThanOrEqual(3);
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
+
it("leads with the series cycle when the identity is an ink (LC-172)", () => {
|
|
209
|
+
const light = resolveChartPalette({ scheme: "light", identitySolid: "#111111" });
|
|
210
|
+
expect(light.single).toBe(Colors.blue.blue10);
|
|
211
|
+
expect(light.categorical[0]).toBe(Colors.blue.blue10);
|
|
212
|
+
expect(light.categorical).not.toContain("#111111");
|
|
213
|
+
const dark = resolveChartPalette({ scheme: "dark", identitySolid: "#eeeeee" });
|
|
214
|
+
expect(dark.single).toBe(Colors.blueDark.blue9);
|
|
215
|
+
expect(resolveChartPalette({ scheme: "light", identitySolid: grayTintSolid }).single).toBe(
|
|
216
|
+
grayTintSolid,
|
|
217
|
+
);
|
|
218
|
+
});
|
|
219
|
+
|
|
208
220
|
it("single-series takes the theme identity solid", () => {
|
|
209
221
|
expect(resolveChartPalette({ scheme: "light", identitySolid: lightAccent }).single).toBe(
|
|
210
222
|
lightAccent,
|
|
@@ -122,6 +122,16 @@ const semanticSeries = {
|
|
|
122
122
|
|
|
123
123
|
/** Below this HSL saturation the identity is neutral-ish; hue is meaningless. */
|
|
124
124
|
const neutralSaturationFloor = 0.15;
|
|
125
|
+
/** A neutral identity this far from the reference page reads as ink, not a series. */
|
|
126
|
+
const inkContrastFloor = 7;
|
|
127
|
+
|
|
128
|
+
function isInkIdentity(color: string, scheme: "light" | "dark"): boolean {
|
|
129
|
+
const hex = normalizeToHex(color);
|
|
130
|
+
const hsl = colorToHsl(color);
|
|
131
|
+
if (!hex || !hsl || hsl.s >= neutralSaturationFloor) return false;
|
|
132
|
+
const page = normalizeToHex(chartReferenceSurfaces[scheme][0]) as string;
|
|
133
|
+
return contrastRatio(relativeLuminance(hex), relativeLuminance(page)) >= inkContrastFloor;
|
|
134
|
+
}
|
|
125
135
|
/** Cycle hues closer than this to the identity hue are dropped as confusable. */
|
|
126
136
|
const hueDedupeThresholdDeg = 30;
|
|
127
137
|
|
|
@@ -204,13 +214,16 @@ function orderCategoricalCycle(identity: string, cycle: string[]): string[] {
|
|
|
204
214
|
export function resolveChartPalette(input: ResolveChartPaletteInput): ChartPalette {
|
|
205
215
|
const { scheme } = input;
|
|
206
216
|
const fallbackIdentity = scheme === "dark" ? Colors.violetDark.violet10 : Colors.violet.violet9;
|
|
207
|
-
const
|
|
217
|
+
const identity =
|
|
208
218
|
[input.identitySolid, ...(input.identityCandidates ?? [])].find((candidate) =>
|
|
209
219
|
readableIdentity(candidate, scheme, input.surfaces ?? []),
|
|
210
220
|
) ?? fallbackIdentity;
|
|
221
|
+
const cycle = categoricalHueCycle.map((entry) => (scheme === "dark" ? entry.dark : entry.light));
|
|
222
|
+
// LC-172: an ink identity (a hueless preset's near-black, or near-white in
|
|
223
|
+
// dark) paints marks as solid as text, so the series leads with the cycle.
|
|
224
|
+
const single = isInkIdentity(identity, scheme) ? cycle[0] : identity;
|
|
211
225
|
const identityHsl = colorToHsl(single) as Hsl;
|
|
212
226
|
|
|
213
|
-
const cycle = categoricalHueCycle.map((entry) => (scheme === "dark" ? entry.dark : entry.light));
|
|
214
227
|
const deduped =
|
|
215
228
|
identityHsl.s < neutralSaturationFloor
|
|
216
229
|
? cycle
|
|
@@ -7,6 +7,7 @@ import { createFont, type GenericFont } from "@tamagui/web";
|
|
|
7
7
|
import { flooredLineHeight, fontCategoryMetrics } from "../fontCategoryMetrics";
|
|
8
8
|
import { fontCategoryStacks } from "../fontCategoryStacks";
|
|
9
9
|
import type { FontCategory } from "../knobs";
|
|
10
|
+
import { nativeCategoryFamily } from "../nativeFontFamily";
|
|
10
11
|
import { generateScale, type ScaleFonts } from "../scale/generateScale";
|
|
11
12
|
import { defaultScaleInputs } from "../scale/scaleInputs";
|
|
12
13
|
|
|
@@ -137,7 +138,7 @@ export function createCategoryFont(
|
|
|
137
138
|
): GenericFont {
|
|
138
139
|
const sizes = scope === "heading" ? tables.headingSizes : tables.bodySizes;
|
|
139
140
|
return createFont({
|
|
140
|
-
family,
|
|
141
|
+
family: nativeCategoryFamily(category, family),
|
|
141
142
|
size: { ...sizes },
|
|
142
143
|
lineHeight: categoryLineHeights(category, tables, scope),
|
|
143
144
|
weight: scope === "heading" ? headingWeights : bodyWeights,
|
|
@@ -310,6 +311,44 @@ function deriveHeading(source: HeadingSource, tables: ScaleFonts): GenericFont {
|
|
|
310
311
|
return font;
|
|
311
312
|
}
|
|
312
313
|
|
|
314
|
+
function familyOf(font: GenericFont): string | undefined {
|
|
315
|
+
const family = font.family as string | { val?: string } | undefined;
|
|
316
|
+
return typeof family === "string" ? family : family?.val;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
type FaceName = string | { val?: string } | undefined;
|
|
320
|
+
type FaceMap = Record<string, Record<string, FaceName> | undefined>;
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* `createFont` fills every weight a face map lacks with `{ normal: family }`,
|
|
324
|
+
* and tamagui's native split swaps the family for that entry and drops the
|
|
325
|
+
* weight. Entries that only repeat the renamed family go, so the weight
|
|
326
|
+
* reaches the platform face; a named face (a bundled bold) stays.
|
|
327
|
+
*/
|
|
328
|
+
function withoutFamilyFill(face: GenericFont["face"], family: string): GenericFont["face"] {
|
|
329
|
+
if (!face) return face;
|
|
330
|
+
const kept: FaceMap = {};
|
|
331
|
+
for (const [weight, styles] of Object.entries(face as FaceMap)) {
|
|
332
|
+
const named = Object.entries(styles ?? {}).filter(([, name]) => {
|
|
333
|
+
const value = typeof name === "string" ? name : name?.val;
|
|
334
|
+
return value !== undefined && value !== family;
|
|
335
|
+
});
|
|
336
|
+
if (named.length) kept[weight] = Object.fromEntries(named);
|
|
337
|
+
}
|
|
338
|
+
return Object.keys(kept).length ? (kept as GenericFont["face"]) : undefined;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/** A consumer category font keeps its object unless native must rename its family. */
|
|
342
|
+
function withNativeFamily(category: FontCategory, font: GenericFont | undefined) {
|
|
343
|
+
const family = font && familyOf(font);
|
|
344
|
+
if (!font || family === undefined) return font;
|
|
345
|
+
const resolved = nativeCategoryFamily(category, family);
|
|
346
|
+
if (resolved === family) return font;
|
|
347
|
+
const { face, ...rest } = font;
|
|
348
|
+
const kept = withoutFamilyFill(face, family);
|
|
349
|
+
return { ...rest, family: resolved, ...(kept ? { face: kept } : {}) } as GenericFont;
|
|
350
|
+
}
|
|
351
|
+
|
|
313
352
|
export function withDerivedHeadingCategories(
|
|
314
353
|
fonts: Record<string, GenericFont>,
|
|
315
354
|
tables: ScaleFonts = defaultTypeTables,
|
|
@@ -317,18 +356,19 @@ export function withDerivedHeadingCategories(
|
|
|
317
356
|
const result = { ...fonts };
|
|
318
357
|
for (const [category, key] of Object.entries(headingCategoryFontKeys)) {
|
|
319
358
|
const source = fonts[category];
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
359
|
+
const resolvedSource = withNativeFamily(category as FontCategory, source);
|
|
360
|
+
if (resolvedSource) result[category] = resolvedSource;
|
|
361
|
+
if (fonts[key] !== defaultFonts[key]) {
|
|
362
|
+
const heading = withNativeFamily(category as FontCategory, fonts[key]);
|
|
363
|
+
if (heading) result[key] = heading;
|
|
325
364
|
continue;
|
|
326
|
-
|
|
365
|
+
}
|
|
366
|
+
if (!resolvedSource || source === defaultFonts[category as keyof typeof defaultFonts]) continue;
|
|
327
367
|
result[key] = deriveHeading(
|
|
328
368
|
{
|
|
329
369
|
category: category as FontCategory,
|
|
330
|
-
family:
|
|
331
|
-
face:
|
|
370
|
+
family: familyOf(resolvedSource) ?? "",
|
|
371
|
+
face: resolvedSource.face,
|
|
332
372
|
},
|
|
333
373
|
tables,
|
|
334
374
|
);
|
|
@@ -216,6 +216,16 @@ export const FORM_READABLE_WIDTH = 560;
|
|
|
216
216
|
export const FORM_READABLE_WIDTH_MIN = 480;
|
|
217
217
|
export const FORM_READABLE_WIDTH_MAX = 640;
|
|
218
218
|
|
|
219
|
+
// ── Detail readable width ─────────────────────────────────────────────────
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* A single-record page's column on a wide screen: the iOS readable content
|
|
223
|
+
* guide (~672pt) plus the page gutters. The hero, identity, tabs and sections
|
|
224
|
+
* stay one column at this width instead of stretching across a desktop
|
|
225
|
+
* (LC-263). Phones are narrower, so the cap never bites there.
|
|
226
|
+
*/
|
|
227
|
+
export const DETAIL_READABLE_WIDTH = 720;
|
|
228
|
+
|
|
219
229
|
// ── Min press target (DG-LAY-04) ──────────────────────────────────────────
|
|
220
230
|
|
|
221
231
|
/** Platform floor for interactive targets (Fluent/HIG web+iOS 44; M3 48 on Android). */
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-137 NATIVE-FONT-FAMILY, the mono category on device (FZ-8143). The SHC
|
|
3
|
+
* console on an iPhone 16 sim drew every bold `$mono` hostname in the
|
|
4
|
+
* proportional system face: `$mono` reached React Native as a CSS stack, and
|
|
5
|
+
* iOS matches no family against a stack.
|
|
6
|
+
*
|
|
7
|
+
* Each registered mono font is resolved the way the device resolves it:
|
|
8
|
+
* tamagui's native `face` swap first, then iOS RCTFont (a known family's
|
|
9
|
+
* nearest-weight face, else the system face) or Android (`monospace` takes
|
|
10
|
+
* the weight, an unknown family falls to the default sans).
|
|
11
|
+
*/
|
|
12
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
13
|
+
|
|
14
|
+
vi.mock("tamagui", () => ({ createTamagui: (config: unknown) => config }));
|
|
15
|
+
vi.mock("./animations/index", () => ({ animations: {} }));
|
|
16
|
+
|
|
17
|
+
const os = vi.hoisted(() => ({ current: "ios" as "ios" | "android" }));
|
|
18
|
+
vi.mock("react-native", () => ({
|
|
19
|
+
Platform: {
|
|
20
|
+
get OS() {
|
|
21
|
+
return os.current;
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
// A glob, not an import: the spec has to load and fail its assertions on
|
|
27
|
+
// code that has no native twin yet.
|
|
28
|
+
const nativeTwin = import.meta.glob<Record<string, unknown>>("./nativeFontFamily.native.ts");
|
|
29
|
+
|
|
30
|
+
type Face = { family: string; weight: number; mono: boolean };
|
|
31
|
+
type Font = {
|
|
32
|
+
family?: string | { val?: string };
|
|
33
|
+
weight?: Record<string, string>;
|
|
34
|
+
face?: Record<string, { normal?: string | { val?: string } }>;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** Families iOS ships, by face: what `UIFont.fontNamesForFamilyName` returns. */
|
|
38
|
+
const iosFamilies: Record<string, { name: string; weight: number }[]> = {
|
|
39
|
+
Menlo: [
|
|
40
|
+
{ name: "Menlo-Regular", weight: 400 },
|
|
41
|
+
{ name: "Menlo-Bold", weight: 700 },
|
|
42
|
+
],
|
|
43
|
+
"Courier New": [
|
|
44
|
+
{ name: "CourierNewPSMT", weight: 400 },
|
|
45
|
+
{ name: "CourierNewPS-BoldMT", weight: 700 },
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
const iosMonoFaces = new Set([
|
|
49
|
+
"Menlo-Regular",
|
|
50
|
+
"Menlo-Bold",
|
|
51
|
+
"CourierNewPSMT",
|
|
52
|
+
"CourierNewPS-BoldMT",
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
/** The type ramp's weights: the v5 tables plus every weight a use site writes. */
|
|
56
|
+
const rampWeights = ["400", "500", "600", "700", "800"];
|
|
57
|
+
|
|
58
|
+
function plainFamily(font: Font): string | undefined {
|
|
59
|
+
return typeof font.family === "string" ? font.family : font.family?.val;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function resolveOnDevice(font: Font, fontWeight: string): Face {
|
|
63
|
+
let family = plainFamily(font) ?? "System";
|
|
64
|
+
let weight: string | undefined = fontWeight;
|
|
65
|
+
const swap = font.face?.[fontWeight]?.normal;
|
|
66
|
+
const swapped = typeof swap === "string" ? swap : swap?.val;
|
|
67
|
+
if (swapped) {
|
|
68
|
+
family = swapped;
|
|
69
|
+
weight = undefined;
|
|
70
|
+
}
|
|
71
|
+
const want = Number(weight ?? 400);
|
|
72
|
+
if (os.current === "android") {
|
|
73
|
+
if (family === "monospace") return { family, weight: want, mono: true };
|
|
74
|
+
return { family: "sans-serif", weight: want, mono: false };
|
|
75
|
+
}
|
|
76
|
+
const faces = iosFamilies[family];
|
|
77
|
+
if (!faces) return { family: "SF Pro (system)", weight: want, mono: false };
|
|
78
|
+
const face = faces.reduce((best, next) =>
|
|
79
|
+
Math.abs(next.weight - want) < Math.abs(best.weight - want) ? next : best,
|
|
80
|
+
);
|
|
81
|
+
return { family: face.name, weight: face.weight, mono: iosMonoFaces.has(face.name) };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async function nativeFonts(
|
|
85
|
+
target: "ios" | "android",
|
|
86
|
+
consumerMono?: (createDefaultFont: typeof import("../font").createDefaultFont) => unknown,
|
|
87
|
+
) {
|
|
88
|
+
os.current = target;
|
|
89
|
+
vi.resetModules();
|
|
90
|
+
vi.doMock("./nativeFontFamily", () => nativeTwin["./nativeFontFamily.native.ts"]!());
|
|
91
|
+
const { createDefaultFont } = await import("../font");
|
|
92
|
+
const { createDefaultThemeConfig } = await import("./createDefaultThemeConfig");
|
|
93
|
+
const { densePreset } = await import("./presets");
|
|
94
|
+
const config = createDefaultThemeConfig({
|
|
95
|
+
presets: { dense: densePreset },
|
|
96
|
+
...(consumerMono ? { fonts: { mono: consumerMono(createDefaultFont) as never } } : {}),
|
|
97
|
+
});
|
|
98
|
+
const base = config.tamagui.fonts as unknown as Record<string, Font>;
|
|
99
|
+
const dense = config.scales?.dense?.tamagui().fonts as unknown as Record<string, Font>;
|
|
100
|
+
return { base, dense };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function expectMonoAtEveryWeight(fonts: Record<string, Font>, label: string) {
|
|
104
|
+
for (const key of ["mono", "headingMono"]) {
|
|
105
|
+
const font = fonts[key];
|
|
106
|
+
expect(font, `${label} ${key}`).toBeDefined();
|
|
107
|
+
for (const weight of rampWeights) {
|
|
108
|
+
const face = resolveOnDevice(font!, weight);
|
|
109
|
+
expect(face.mono, `${label} $${key} @${weight} -> ${face.family}`).toBe(true);
|
|
110
|
+
}
|
|
111
|
+
const bold = resolveOnDevice(font!, "700");
|
|
112
|
+
expect(bold.weight, `${label} $${key} @700 is bold`).toBeGreaterThanOrEqual(700);
|
|
113
|
+
const regular = resolveOnDevice(font!, "400");
|
|
114
|
+
expect(regular.weight, `${label} $${key} @400 is regular`).toBe(400);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
afterEach(() => {
|
|
119
|
+
vi.doUnmock("./nativeFontFamily");
|
|
120
|
+
vi.resetModules();
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe("$mono resolves to a monospaced face at every weight on native (LC-137, FZ-8143)", () => {
|
|
124
|
+
it.each(["ios", "android"] as const)("MPO's own $mono on %s", async (target) => {
|
|
125
|
+
const { base, dense } = await nativeFonts(target);
|
|
126
|
+
expectMonoAtEveryWeight(base, `${target} default`);
|
|
127
|
+
expectMonoAtEveryWeight(dense, `${target} dense scale`);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it.each(["ios", "android"] as const)(
|
|
131
|
+
"a consumer $mono registered as a CSS stack on %s (the SHC console's)",
|
|
132
|
+
async (target) => {
|
|
133
|
+
// `face: {}` through createFont fills every weight with the stack, and
|
|
134
|
+
// the native face swap then drops the weight: proportional regular.
|
|
135
|
+
const { base, dense } = await nativeFonts(target, (createDefaultFont) =>
|
|
136
|
+
createDefaultFont({
|
|
137
|
+
family: "'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",
|
|
138
|
+
weight: { 1: "400", 4: "400", true: "400", 5: "500", 7: "600" },
|
|
139
|
+
face: {},
|
|
140
|
+
}),
|
|
141
|
+
);
|
|
142
|
+
expectMonoAtEveryWeight(base, `${target} stack`);
|
|
143
|
+
expectMonoAtEveryWeight(dense, `${target} stack dense`);
|
|
144
|
+
},
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
it.each(["ios", "android"] as const)(
|
|
148
|
+
"a consumer $mono naming another platform's system mono on %s (Kitchen Sink's Menlo)",
|
|
149
|
+
async (target) => {
|
|
150
|
+
const { base } = await nativeFonts(target, (createDefaultFont) =>
|
|
151
|
+
createDefaultFont({ family: "Menlo" }),
|
|
152
|
+
);
|
|
153
|
+
expectMonoAtEveryWeight(base, `${target} Menlo`);
|
|
154
|
+
},
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
it("keeps a named face while dropping the stack fill", async () => {
|
|
158
|
+
const { base } = await nativeFonts("ios", (createDefaultFont) =>
|
|
159
|
+
createDefaultFont({
|
|
160
|
+
family: "'Plex', ui-monospace, monospace",
|
|
161
|
+
face: { 800: { normal: "IBMPlexMono-ExtraBold" } },
|
|
162
|
+
}),
|
|
163
|
+
);
|
|
164
|
+
const face = base.mono!.face!;
|
|
165
|
+
expect(Object.keys(face).filter((weight) => Number(weight) < 800)).toEqual([]);
|
|
166
|
+
expect(face["800"]?.normal).toBe("IBMPlexMono-ExtraBold");
|
|
167
|
+
expect(resolveOnDevice(base.mono!, "700")).toMatchObject({ family: "Menlo-Bold", mono: true });
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("keeps a single family the app bundles", async () => {
|
|
171
|
+
const { base } = await nativeFonts("ios", (createDefaultFont) =>
|
|
172
|
+
createDefaultFont({ family: "JetBrains Mono" }),
|
|
173
|
+
);
|
|
174
|
+
expect(plainFamily(base.mono!)).toBe("JetBrains Mono");
|
|
175
|
+
expect(plainFamily(base.headingMono!)).toBe("JetBrains Mono");
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("leaves the web stack and every other category untouched", async () => {
|
|
179
|
+
vi.resetModules();
|
|
180
|
+
const { defaultFonts } = await import("./defaults/fonts");
|
|
181
|
+
const { fontCategoryStacks } = await import("./fontCategoryStacks");
|
|
182
|
+
expect(defaultFonts.mono.family).toBe(fontCategoryStacks.mono);
|
|
183
|
+
const { base } = await nativeFonts("ios");
|
|
184
|
+
expect(plainFamily(base.pixel!)).toBe(fontCategoryStacks.pixel);
|
|
185
|
+
expect(plainFamily(base.serif!)).toBe(fontCategoryStacks.serif);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Platform } from "react-native";
|
|
2
|
+
import type { FontCategory } from "./knobs";
|
|
3
|
+
import { resolveNativeMonoFamily } from "./nativeMonoFamily";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* One registered family per category on iOS and Android, never a CSS stack
|
|
7
|
+
* (LC-137). Other native hosts keep the stack: GNOME's Pango reads a
|
|
8
|
+
* comma-separated family list.
|
|
9
|
+
*/
|
|
10
|
+
export function nativeCategoryFamily(category: FontCategory, family: string): string {
|
|
11
|
+
if (category !== "mono") return family;
|
|
12
|
+
if (Platform.OS !== "ios" && Platform.OS !== "android") return family;
|
|
13
|
+
return resolveNativeMonoFamily(family, Platform.OS);
|
|
14
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-137 NATIVE-FONT-FAMILY for the mono category (FZ-8143).
|
|
3
|
+
*
|
|
4
|
+
* React Native takes one family name. A CSS stack, or a system mono that
|
|
5
|
+
* only another platform ships, matches nothing: iOS draws the proportional
|
|
6
|
+
* system face and Android its default sans, at whatever weight survives.
|
|
7
|
+
* Each native platform has one monospaced family with every weight the type
|
|
8
|
+
* ramp asks for reachable through `fontWeight`: Menlo on iOS (Regular and
|
|
9
|
+
* Bold, matched by nearest weight) and `monospace` on Android (weight
|
|
10
|
+
* applied by the platform). A single family the app bundles is kept.
|
|
11
|
+
*/
|
|
12
|
+
export type NativeOS = "ios" | "android";
|
|
13
|
+
|
|
14
|
+
export const platformMonoFamily: Record<NativeOS, string> = {
|
|
15
|
+
ios: "Menlo",
|
|
16
|
+
android: "monospace",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const shippedMono: Record<NativeOS, ReadonlySet<string>> = {
|
|
20
|
+
ios: new Set(["Menlo", "Courier", "Courier New"]),
|
|
21
|
+
android: new Set(["monospace"]),
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const systemMono = new Set([
|
|
25
|
+
"ui-monospace",
|
|
26
|
+
"monospace",
|
|
27
|
+
"SFMono-Regular",
|
|
28
|
+
"SF Mono",
|
|
29
|
+
"Menlo",
|
|
30
|
+
"Monaco",
|
|
31
|
+
"Consolas",
|
|
32
|
+
"Courier",
|
|
33
|
+
"Courier New",
|
|
34
|
+
"Liberation Mono",
|
|
35
|
+
"DejaVu Sans Mono",
|
|
36
|
+
"Cascadia Code",
|
|
37
|
+
"Cascadia Mono",
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
export function resolveNativeMonoFamily(family: string, os: NativeOS): string {
|
|
41
|
+
if (family.includes(",")) return platformMonoFamily[os];
|
|
42
|
+
const name = family.trim().replace(/^(['"])(.*)\1$/, "$2");
|
|
43
|
+
if (shippedMono[os].has(name)) return name;
|
|
44
|
+
if (systemMono.has(name)) return platformMonoFamily[os];
|
|
45
|
+
return name;
|
|
46
|
+
}
|
|
@@ -178,11 +178,15 @@ const DialogContentInner = forwardRef<
|
|
|
178
178
|
const openFocus = withHouseOpenFocus(onOpenAutoFocus);
|
|
179
179
|
useDialogShowFocus(openFocus);
|
|
180
180
|
// ThemeableStack unstyled:false defaults `elevate: true`, which paints
|
|
181
|
-
// getElevation(size) — `$true` is a control stop
|
|
182
|
-
//
|
|
181
|
+
// getElevation(size) — `$true` is a control stop — and that variant wins
|
|
182
|
+
// over `elevate={false}`. `unstyled` leaves the overlay ladder in
|
|
183
|
+
// `elevatedSurface` as the only shadow (MPO-99), so dark paints none.
|
|
183
184
|
return (
|
|
184
185
|
<Dialog.Content
|
|
185
186
|
ref={ref}
|
|
187
|
+
unstyled
|
|
188
|
+
position="relative"
|
|
189
|
+
pointerEvents="auto"
|
|
186
190
|
{...knobProps.elevatedSurface}
|
|
187
191
|
{...knobProps.containerRadius}
|
|
188
192
|
{...knobProps.panelPadding}
|
|
@@ -317,6 +317,7 @@ describe("resolveKnobs", () => {
|
|
|
317
317
|
expect(knobProps.elevatedSurface.borderColor).toBe(
|
|
318
318
|
scheme === "dark" ? "transparent" : "$borderColor",
|
|
319
319
|
);
|
|
320
|
+
if (scheme === "dark") expect(knobProps.elevatedSurface.borderWidth).toBe(0);
|
|
320
321
|
if (!key) {
|
|
321
322
|
expect(knobProps.elevationChrome).toEqual({});
|
|
322
323
|
return;
|
|
@@ -394,7 +395,9 @@ describe("resolveKnobs", () => {
|
|
|
394
395
|
expect(knobProps.overlayElevation).toBe(
|
|
395
396
|
overlay ? active.getActiveScaleTokens().size[overlay] : undefined,
|
|
396
397
|
);
|
|
397
|
-
expect(knobProps.elevatedSurface.elevation).toBe(
|
|
398
|
+
expect(knobProps.elevatedSurface.elevation).toBe(
|
|
399
|
+
scheme === "dark" ? undefined : knobProps.overlayElevation,
|
|
400
|
+
);
|
|
398
401
|
const state = resolveNative(
|
|
399
402
|
knobsWith({ hover: { elevation: stop } }),
|
|
400
403
|
undefined,
|
|
@@ -457,6 +460,12 @@ describe("resolveKnobs", () => {
|
|
|
457
460
|
const { knobProps } = resolveKnobs(knobsWith({ elevation: stop }), undefined, scheme);
|
|
458
461
|
const { offsetY, radius } = sizedElevation(getActiveScaleTokens().size[key]);
|
|
459
462
|
expect(knobProps.overlayElevation).toBe(key);
|
|
463
|
+
if (scheme === "dark") {
|
|
464
|
+
expect(knobProps.elevatedSurface.backgroundColor).toBe("$color4");
|
|
465
|
+
expect(knobProps.elevatedSurface.shadowColor).toBeUndefined();
|
|
466
|
+
expect(knobProps.elevatedSurface.style?.boxShadow).toBeUndefined();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
460
469
|
expect(knobProps.elevatedSurface.shadowColor).toBe("$shadowColor");
|
|
461
470
|
expect(knobProps.elevatedSurface.shadowColor).not.toBe("$color12");
|
|
462
471
|
expect(knobProps.elevatedSurface.shadowOpacity).toBe(1);
|
|
@@ -1068,10 +1077,25 @@ describe("resolveKnobs", () => {
|
|
|
1068
1077
|
const { knobProps } = resolveKnobs(knobsWith({ fillStyle: "filled", borderWidth: "none" }));
|
|
1069
1078
|
expect(knobProps.borderRadius.borderWidth).toBe(0);
|
|
1070
1079
|
expect(knobProps.surface.borderWidth).toBe(0);
|
|
1071
|
-
expect(knobProps.elevatedSurface.borderWidth).toBe(0);
|
|
1072
1080
|
expect(knobProps.inputSurface.borderWidth).toBe(0);
|
|
1073
1081
|
});
|
|
1074
1082
|
|
|
1083
|
+
it("filled + none still edges a light overlay with the hairline (FZ-8116)", () => {
|
|
1084
|
+
const light = resolveKnobs(
|
|
1085
|
+
knobsWith({ fillStyle: "filled", borderWidth: "none" }),
|
|
1086
|
+
undefined,
|
|
1087
|
+
"light",
|
|
1088
|
+
);
|
|
1089
|
+
expect(light.knobProps.elevatedSurface.borderWidth).toBe(hairlineBorderWidth);
|
|
1090
|
+
expect(light.knobProps.elevatedSurface.borderColor).toBe("$borderColor");
|
|
1091
|
+
const dark = resolveKnobs(
|
|
1092
|
+
knobsWith({ fillStyle: "filled", borderWidth: "none" }),
|
|
1093
|
+
undefined,
|
|
1094
|
+
"dark",
|
|
1095
|
+
);
|
|
1096
|
+
expect(dark.knobProps.elevatedSurface.borderWidth).toBe(0);
|
|
1097
|
+
});
|
|
1098
|
+
|
|
1075
1099
|
it("outlined + none still draws the hairline (the small stop's token)", () => {
|
|
1076
1100
|
const { knobProps } = resolveKnobs(knobsWith({ fillStyle: "outlined", borderWidth: "none" }));
|
|
1077
1101
|
expect(knobProps.borderRadius.borderWidth).toBe(hairlineBorderWidth);
|
|
@@ -700,6 +700,7 @@ export function resolveKnobs(
|
|
|
700
700
|
const elevationToken = elevationMap[knobs.elevation];
|
|
701
701
|
const overlayElevationToken = overlayElevationMap[knobs.elevation];
|
|
702
702
|
const overlayPaintProps = elevationPaint(overlayElevationToken);
|
|
703
|
+
const overlayEdgeWidth = Math.max(borderWidthValue, borderWidthMap.small);
|
|
703
704
|
const elevationChrome = elevationChromeFor(elevationToken);
|
|
704
705
|
const textAccentColor = textAccentColorMap[knobs.textAccent] ?? "$color";
|
|
705
706
|
// One input surface (DF-19 / Axiom 5 ONE SOURCE): Timeline's composer,
|
|
@@ -801,11 +802,17 @@ export function resolveKnobs(
|
|
|
801
802
|
}
|
|
802
803
|
: {
|
|
803
804
|
backgroundColor: scheme === "dark" ? surface2.fill : "$background",
|
|
804
|
-
|
|
805
|
-
|
|
805
|
+
// Light: an overlay fills the page's own white, so it always keeps at
|
|
806
|
+
// least the hairline, even on a chromeless preset (FZ-8116).
|
|
807
|
+
borderColor: scheme === "dark" ? "transparent" : edge("$borderColor", overlayEdgeWidth),
|
|
808
|
+
// Dark draws no edge at all: on iOS a transparent border on a sheet
|
|
809
|
+
// mounted under a light OS painted the light $borderColor (FZ-8116).
|
|
810
|
+
borderWidth: scheme === "dark" ? 0 : overlayEdgeWidth,
|
|
806
811
|
borderRadius: radiusToken,
|
|
807
|
-
elevation: platformElevation(overlayElevationToken),
|
|
808
|
-
|
|
812
|
+
elevation: scheme === "dark" ? undefined : platformElevation(overlayElevationToken),
|
|
813
|
+
// Dark lifts an overlay by its lighter fill, as the card lift does: a
|
|
814
|
+
// black shadow on a near-black page reads as a smudge (FZ-8116).
|
|
815
|
+
...(scheme === "dark" ? undefined : overlayPaintProps),
|
|
809
816
|
...scaleSmoothing,
|
|
810
817
|
},
|
|
811
818
|
featureSurface: {
|
package/types/menuRow.d.ts
CHANGED
|
@@ -33,4 +33,13 @@ export declare const menuRowFrame: {
|
|
|
33
33
|
readonly userSelect: "none";
|
|
34
34
|
readonly backgroundColor: "transparent";
|
|
35
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* LC-262 / LC-172: a checked or selected menu or picker row draws no fill in
|
|
38
|
+
* either scheme; the accent check alone marks it. A per-row `$color2` plate
|
|
39
|
+
* read as nothing in light and near-black in dark (FZ-8355). Hover, press and
|
|
40
|
+
* keyboard focus stay transient feedback, owned by each consumer.
|
|
41
|
+
*/
|
|
42
|
+
export declare const menuRowChecked: {
|
|
43
|
+
readonly backgroundColor: "transparent";
|
|
44
|
+
};
|
|
36
45
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC"}
|
|
1
|
+
{"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;CAEjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartPalette.d.ts","sourceRoot":"","sources":["../../src/theme/chartPalette.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"chartPalette.d.ts","sourceRoot":"","sources":["../../src/theme/chartPalette.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CAC5C;AAuJD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CA4BjF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GACtC,MAAM,EAAE,CAaV;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAgC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/fonts.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/theme/defaults/fonts.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,13 @@ export declare function readingWidthStyle(measure?: number | "none" | null): Rea
|
|
|
124
124
|
export declare const FORM_READABLE_WIDTH = 560;
|
|
125
125
|
export declare const FORM_READABLE_WIDTH_MIN = 480;
|
|
126
126
|
export declare const FORM_READABLE_WIDTH_MAX = 640;
|
|
127
|
+
/**
|
|
128
|
+
* A single-record page's column on a wide screen: the iOS readable content
|
|
129
|
+
* guide (~672pt) plus the page gutters. The hero, identity, tabs and sections
|
|
130
|
+
* stay one column at this width instead of stretching across a desktop
|
|
131
|
+
* (LC-263). Phones are narrower, so the cap never bites there.
|
|
132
|
+
*/
|
|
133
|
+
export declare const DETAIL_READABLE_WIDTH = 720;
|
|
127
134
|
/** Platform floor for interactive targets (Fluent/HIG web+iOS 44; M3 48 on Android). */
|
|
128
135
|
export declare const MIN_PRESS_TARGET = 44;
|
|
129
136
|
/** Touch surfaces — native touchable or web touchable (LC-67). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutTokens.d.ts","sourceRoot":"","sources":["../../src/theme/layoutTokens.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layoutTokens.d.ts","sourceRoot":"","sources":["../../src/theme/layoutTokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FontCategory } from "./knobs";
|
|
2
|
+
/** Web keeps the CSS stack; the native twin resolves it to one family (LC-137). */
|
|
3
|
+
export declare function nativeCategoryFamily(_category: FontCategory, family: string): string;
|
|
4
|
+
//# sourceMappingURL=nativeFontFamily.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeFontFamily.d.ts","sourceRoot":"","sources":["../../src/theme/nativeFontFamily.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FontCategory } from "./knobs";
|
|
2
|
+
/**
|
|
3
|
+
* One registered family per category on iOS and Android, never a CSS stack
|
|
4
|
+
* (LC-137). Other native hosts keep the stack: GNOME's Pango reads a
|
|
5
|
+
* comma-separated family list.
|
|
6
|
+
*/
|
|
7
|
+
export declare function nativeCategoryFamily(category: FontCategory, family: string): string;
|
|
8
|
+
//# sourceMappingURL=nativeFontFamily.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeFontFamily.native.d.ts","sourceRoot":"","sources":["../../src/theme/nativeFontFamily.native.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAInF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-137 NATIVE-FONT-FAMILY for the mono category (FZ-8143).
|
|
3
|
+
*
|
|
4
|
+
* React Native takes one family name. A CSS stack, or a system mono that
|
|
5
|
+
* only another platform ships, matches nothing: iOS draws the proportional
|
|
6
|
+
* system face and Android its default sans, at whatever weight survives.
|
|
7
|
+
* Each native platform has one monospaced family with every weight the type
|
|
8
|
+
* ramp asks for reachable through `fontWeight`: Menlo on iOS (Regular and
|
|
9
|
+
* Bold, matched by nearest weight) and `monospace` on Android (weight
|
|
10
|
+
* applied by the platform). A single family the app bundles is kept.
|
|
11
|
+
*/
|
|
12
|
+
export type NativeOS = "ios" | "android";
|
|
13
|
+
export declare const platformMonoFamily: Record<NativeOS, string>;
|
|
14
|
+
export declare function resolveNativeMonoFamily(family: string, os: NativeOS): string;
|
|
15
|
+
//# sourceMappingURL=nativeMonoFamily.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeMonoFamily.d.ts","sourceRoot":"","sources":["../../src/theme/nativeMonoFamily.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzC,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAGvD,CAAC;AAuBF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAM5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlaySurfaces.d.ts","sourceRoot":"","sources":["../../src/theme/overlaySurfaces.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAML,KAAK,kBAAkB,IAAI,yBAAyB,EAEpD,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AA6DjB,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAmC5C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAG9F;AAID,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,mDAE9B,CAAC;AAEH,wBAAgB,sBAAsB,IAAI,wBAAwB,CAEjE;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAQD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,GAAG;IACzE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,aAAa;eAJb,SAAS;WACb,UAAU;kDAcjB,CAAC;
|
|
1
|
+
{"version":3,"file":"overlaySurfaces.d.ts","sourceRoot":"","sources":["../../src/theme/overlaySurfaces.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAML,KAAK,kBAAkB,IAAI,yBAAyB,EAEpD,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AA6DjB,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAmC5C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAG9F;AAID,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,mDAE9B,CAAC;AAEH,wBAAgB,sBAAsB,IAAI,wBAAwB,CAEjE;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAQD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,GAAG;IACzE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,aAAa;eAJb,SAAS;WACb,UAAU;kDAcjB,CAAC;AA8CH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;eAEiB,SAAS;kDAelD,CAAC;AAOH,eAAO,MAAM,kBAAkB;eA5FlB,SAAS;WACb,UAAU;kDAqGlB,CAAC;AAgCF,eAAO,MAAM,kBAAkB;;;;;;;;eAEY,SAAS;kDAelD,CAAC;AAiBH,eAAO,MAAM,cAAc;eALd,SAAS;IACpB,iEAAiE;sBAC/C,aAAa;kDA0BhC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolveKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/resolveKnobs.ts"],"names":[],"mappings":"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"}
|