@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/theme",
3
- "version": "7.65.2",
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.65.2",
76
- "@multiplatform.one/store": "^7.65.2",
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.65.2",
93
- "@multiplatform.one/test-utils": "7.65.2",
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",
@@ -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.slice(1)).toEqual([
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 single =
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
- if (
321
- fonts[key] !== defaultFonts[key] ||
322
- !source ||
323
- source === defaultFonts[category as keyof typeof defaultFonts]
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
- const family = source.family as string | { val: string };
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: typeof family === "string" ? family : family.val,
331
- face: source.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,6 @@
1
+ import type { FontCategory } from "./knobs";
2
+
3
+ /** Web keeps the CSS stack; the native twin resolves it to one family (LC-137). */
4
+ export function nativeCategoryFamily(_category: FontCategory, family: string): string {
5
+ return family;
6
+ }
@@ -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. `elevate={false}` leaves
182
- // the overlay ladder in `elevatedSurface` as the only shadow (MPO-99).
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(knobProps.overlayElevation);
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
- borderColor: scheme === "dark" ? "transparent" : edge("$borderColor", borderWidthValue),
805
- borderWidth: borderWidthValue,
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
- ...overlayPaintProps,
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: {
@@ -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
@@ -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;AA6ID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CAyBjF;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
+ {"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":"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"}
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;AA0CH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;eAEiB,SAAS;kDAelD,CAAC;AAOH,eAAO,MAAM,kBAAkB;eAxFlB,SAAS;WACb,UAAU;kDAiGlB,CAAC;AAgCF,eAAO,MAAM,kBAAkB;;;;;;;;eAEY,SAAS;kDAelD,CAAC;AAiBH,eAAO,MAAM,cAAc;eALd,SAAS;IACpB,iEAAiE;sBAC/C,aAAa;kDA0BhC,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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"}