@multiplatform.one/theme 7.80.0 → 7.81.1

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.80.0",
3
+ "version": "7.81.1",
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.80.0",
76
- "@multiplatform.one/store": "^7.80.0",
75
+ "@multiplatform.one/platform": "^7.81.1",
76
+ "@multiplatform.one/store": "^7.81.1",
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.80.0",
93
- "@multiplatform.one/test-utils": "7.80.0",
92
+ "@multiplatform.one/config": "7.81.1",
93
+ "@multiplatform.one/test-utils": "7.81.1",
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.ts CHANGED
@@ -64,6 +64,23 @@ export function menuRowChecked(scheme: ColorScheme) {
64
64
  /** The check mark on a `menuRowChecked` row: the theme's accent (FZ-8557). */
65
65
  export const menuRowCheckInk = "$accentColor" as const;
66
66
 
67
+ /**
68
+ * The check mark's glyph on every menu and picker row (LC-262, FZ-8557): the
69
+ * 14px bold check Clay rated 4/4 in FZ-8355 r6. Forms and components each draw
70
+ * it through a thin `CheckGlyph` that reads this one recipe, in
71
+ * `useMenuRowCheckInk`'s paint.
72
+ */
73
+ export const menuRowCheckGlyph = { size: 14, weight: "bold" } as const;
74
+
75
+ /**
76
+ * The glyph a menu row's leading icon draws at (FZ-8557 r3, LC-262). A menu
77
+ * whose rows carry icons draws its check at this glyph too, so both share one
78
+ * stroke.
79
+ */
80
+ export const menuRowIconGlyph = { size: 18, weight: "bold" } as const;
81
+
82
+ export type MenuRowGlyph = { readonly size: number; readonly weight: "bold" };
83
+
67
84
  type ThemeValues = Record<string, { val?: unknown } | undefined>;
68
85
 
69
86
  function isHueless(paint: string): boolean {
@@ -19,6 +19,44 @@ import {
19
19
  type ViewProps,
20
20
  } from "tamagui";
21
21
 
22
+ /**
23
+ * The scrim under every modal surface: dialogs, alerts and sheets (FZ-8557).
24
+ * `$shadow4` is the SHC console's `backgroundScrim` weight (light 0.26, dark
25
+ * 0.58 there; 0.22 and 0.45 here), the dim an iOS sheet lays over its page.
26
+ * `$shadow6` read as a heavy grey wash in light.
27
+ */
28
+ export const overlayScrim = "$shadow4" as const;
29
+
30
+ /**
31
+ * A sheet's grabber (HIG, FZ-8557, FZ-8648): a 36×5 capsule 5pt inside the
32
+ * sheet's top edge, drawn over the frame rather than floating on the scrim.
33
+ * Its margins net to no height, so it lands the same on a web `Sheet.Handle`
34
+ * laid out above the frame and on a native grab zone's first child. The one
35
+ * recipe for every sheet: spread it and set nothing else.
36
+ */
37
+ export const sheetGrabber = {
38
+ width: 36,
39
+ height: 5,
40
+ borderRadius: 100,
41
+ backgroundColor: "$color8",
42
+ opacity: 0.45,
43
+ alignSelf: "center",
44
+ marginHorizontal: 0,
45
+ marginTop: 5,
46
+ marginBottom: -10,
47
+ zIndex: 10,
48
+ } as const;
49
+
50
+ /** The top inset a sheet's content keeps clear of its grabber. */
51
+ export const sheetGrabberClearance = 16;
52
+
53
+ /** A native sheet's grab zone, the target around `sheetGrabber`. */
54
+ export const sheetGrabberZone = {
55
+ alignSelf: "stretch",
56
+ alignItems: "center",
57
+ height: 21,
58
+ } as const;
59
+
22
60
  // ── Overlay frame focus (LC-71) ──────────────────────────────────────────
23
61
  // Radix Dialog.Content / Primer Dialog are tabIndex=-1 and auto-focused on
24
62
  // open. The frame is not a control: UA :focus-visible must not ring the
@@ -247,7 +285,7 @@ export const DialogOverlay = forwardRef<
247
285
  return (
248
286
  <Dialog.Overlay
249
287
  ref={ref}
250
- backgroundColor="$shadow6"
288
+ backgroundColor={overlayScrim}
251
289
  {...transitionProps(knobProps.motion.scrim)}
252
290
  enterStyle={scrimFade}
253
291
  exitStyle={scrimFade}
@@ -313,7 +351,7 @@ export const AlertDialogOverlay = forwardRef<
313
351
  return (
314
352
  <AlertDialog.Overlay
315
353
  ref={ref}
316
- backgroundColor="$shadow6"
354
+ backgroundColor={overlayScrim}
317
355
  {...transitionProps(knobProps.motion.scrim)}
318
356
  enterStyle={scrimFade}
319
357
  exitStyle={scrimFade}
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { sheetGrabber, sheetGrabberClearance, sheetGrabberZone } from "./overlaySurfaces";
3
+
4
+ describe("sheetGrabber (FZ-8648)", () => {
5
+ it("is the HIG capsule, 36×5 and 5pt inside the sheet's top edge", () => {
6
+ expect(sheetGrabber).toMatchObject({ width: 36, height: 5, marginTop: 5, alignSelf: "center" });
7
+ });
8
+
9
+ it("takes no height, so it lands the same above a frame and inside a grab zone", () => {
10
+ expect(sheetGrabber.marginTop + sheetGrabber.height + sheetGrabber.marginBottom).toBe(0);
11
+ });
12
+
13
+ it("clears a frame's content and fits its grab zone", () => {
14
+ const end = sheetGrabber.marginTop + sheetGrabber.height;
15
+ expect(sheetGrabberClearance).toBeGreaterThan(end);
16
+ expect(sheetGrabberZone.height).toBeGreaterThan(end);
17
+ });
18
+ });
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useSyncExternalStore } from "react";
2
- import { Appearance, useColorScheme } from "react-native";
2
+ import { Appearance } from "react-native";
3
3
  import { useDidFinishSSR } from "tamagui";
4
4
  import { isWeb } from "@multiplatform.one/platform";
5
5
  import { getStoredScheme, setStoredScheme, subscribeStoredScheme } from "./schemeStore";
@@ -12,22 +12,47 @@ export interface SchemePreference {
12
12
  }
13
13
  const serverScheme = (): ThemeScheme => "system";
14
14
 
15
+ // RN's Appearance.setColorScheme("unspecified") writes "unspecified" into the
16
+ // JS cache that getColorScheme/useColorScheme read, with no change event, so
17
+ // System resolved light until the OS flipped (FZ-8708). The native scheme is
18
+ // read once before the first override and then only from change events.
19
+ let nativeScheme: "light" | "dark" | undefined;
20
+ const nativeListeners = new Set<() => void>();
21
+
22
+ function getNativeScheme(): "light" | "dark" {
23
+ if (nativeScheme === undefined) {
24
+ nativeScheme = Appearance.getColorScheme() === "dark" ? "dark" : "light";
25
+ Appearance.addChangeListener(({ colorScheme }) => {
26
+ if ((colorScheme !== "light" && colorScheme !== "dark") || colorScheme === nativeScheme) {
27
+ return;
28
+ }
29
+ nativeScheme = colorScheme;
30
+ nativeListeners.forEach((listener) => listener());
31
+ });
32
+ }
33
+ return nativeScheme;
34
+ }
35
+
36
+ function subscribeNativeScheme(listener: () => void) {
37
+ getNativeScheme();
38
+ nativeListeners.add(listener);
39
+ return () => {
40
+ nativeListeners.delete(listener);
41
+ };
42
+ }
43
+
15
44
  export function useSchemePreference(): SchemePreference {
16
45
  const setting = useSyncExternalStore(subscribeStoredScheme, getStoredScheme, serverScheme);
17
- const os = useColorScheme();
46
+ const os = useSyncExternalStore(subscribeNativeScheme, getNativeScheme, getNativeScheme);
18
47
  const hydrated = useDidFinishSSR();
19
48
  useEffect(() => {
20
- if (!isWeb) Appearance.setColorScheme(setting === "system" ? "unspecified" : setting);
49
+ if (isWeb) return;
50
+ getNativeScheme();
51
+ Appearance.setColorScheme(setting === "system" ? "unspecified" : setting);
21
52
  }, [setting]);
22
53
  return {
23
54
  setting: hydrated ? setting : "system",
24
- value: !hydrated
25
- ? "light"
26
- : setting === "system"
27
- ? os === "dark"
28
- ? "dark"
29
- : "light"
30
- : setting,
55
+ value: !hydrated ? "light" : setting === "system" ? os : setting,
31
56
  set: setStoredScheme,
32
57
  };
33
58
  }
@@ -1,51 +1,118 @@
1
- import { act, cleanup, renderHook } from "@testing-library/react";
2
- import { afterEach, expect, it, vi } from "vitest";
1
+ import { act, cleanup, render, renderHook } from "@testing-library/react";
2
+ import { afterEach, beforeEach, expect, it, vi } from "vitest";
3
3
  import { useSyncExternalStore } from "react";
4
+ import type { SchemePreference } from "./useSchemePreference.native";
4
5
 
5
- const os = vi.hoisted(() => ({
6
- value: "light",
7
- forced: null as string | null,
8
- listeners: new Set<() => void>(),
6
+ // Mirrors react-native 0.83 Libraries/Utilities/Appearance.js over RCTAppearance:
7
+ // the JS side caches the first native read, setColorScheme overwrites that
8
+ // cache with its argument and emits nothing, and native emits a change only
9
+ // when the window's effective style moves.
10
+ const rn = vi.hoisted(() => ({
11
+ os: "light" as "light" | "dark",
12
+ override: "unspecified" as string,
13
+ current: "light" as string,
14
+ cache: null as { colorScheme: string } | null,
15
+ listeners: new Set<(value: { colorScheme: string }) => void>(),
9
16
  }));
17
+ function syncNative() {
18
+ const effective = rn.override === "unspecified" ? rn.os : rn.override;
19
+ if (effective === rn.current) return;
20
+ rn.current = effective;
21
+ rn.cache = { colorScheme: effective };
22
+ rn.listeners.forEach((listener) => listener({ colorScheme: effective }));
23
+ }
10
24
  vi.mock("@multiplatform.one/platform", () => ({ isWeb: false }));
11
25
  vi.mock("@multiplatform.one/store", () => ({
12
26
  storage: { getItem: () => null, setItem: () => {} },
13
27
  }));
14
28
  vi.mock("tamagui", () => ({ useDidFinishSSR: () => true }));
15
- vi.mock("react-native", () => ({
16
- useColorScheme: () =>
17
- useSyncExternalStore(
18
- (l) => {
19
- os.listeners.add(l);
20
- return () => {
21
- os.listeners.delete(l);
22
- };
23
- },
24
- () => os.forced ?? os.value,
25
- ),
26
- Appearance: {
27
- setColorScheme: (value: string | null) => {
28
- os.forced = value === "unspecified" ? null : value;
29
- os.listeners.forEach((l) => l());
29
+ vi.mock("react-native", () => {
30
+ const Appearance = {
31
+ getColorScheme: () => {
32
+ if (rn.cache == null) rn.cache = { colorScheme: rn.current };
33
+ return rn.cache.colorScheme;
30
34
  },
31
- },
32
- }));
33
- import { useSchemePreference } from "./useSchemePreference.native";
35
+ setColorScheme: (value: string) => {
36
+ rn.cache = { colorScheme: value };
37
+ queueMicrotask(() => {
38
+ rn.override = value;
39
+ syncNative();
40
+ });
41
+ },
42
+ addChangeListener: (listener: (value: { colorScheme: string }) => void) => {
43
+ rn.listeners.add(listener);
44
+ return { remove: () => rn.listeners.delete(listener) };
45
+ },
46
+ };
47
+ const subscribe = (onChange: () => void) => {
48
+ const subscription = Appearance.addChangeListener(onChange);
49
+ return () => subscription.remove();
50
+ };
51
+ return {
52
+ Appearance,
53
+ useColorScheme: () => useSyncExternalStore(subscribe, Appearance.getColorScheme),
54
+ };
55
+ });
56
+
57
+ let useSchemePreference: () => SchemePreference;
58
+ beforeEach(async () => {
59
+ vi.resetModules();
60
+ rn.cache = null;
61
+ rn.listeners.clear();
62
+ rn.override = "unspecified";
63
+ ({ useSchemePreference } = await import("./useSchemePreference.native"));
64
+ });
34
65
  afterEach(cleanup);
35
66
 
36
- it("shares selection, clears the native override for System and follows subsequent OS changes", () => {
67
+ function flipOs(scheme: "light" | "dark") {
68
+ rn.os = scheme;
69
+ syncNative();
70
+ }
71
+
72
+ it("system follows the OS scheme on first render, before any change event (FZ-8708)", async () => {
73
+ rn.os = "dark";
74
+ rn.current = "dark";
75
+ const seen: string[] = [];
76
+ function Probe({ tick }: { tick: number }) {
77
+ const { value } = useSchemePreference();
78
+ seen.push(`${tick}:${value}`);
79
+ return null;
80
+ }
81
+ const view = render(<Probe tick={0} />);
82
+ expect(seen[0]).toBe("0:dark");
83
+ await act(async () => {});
84
+ expect(rn.cache).toEqual({ colorScheme: "unspecified" });
85
+ view.rerender(<Probe tick={1} />);
86
+ expect(seen.at(-1)).toBe("1:dark");
87
+ expect(seen.filter((entry) => entry.endsWith("light"))).toEqual([]);
88
+ });
89
+
90
+ it("keeps the OS scheme when Dark goes back to System on a dark OS, and follows later OS flips", async () => {
91
+ rn.os = "dark";
92
+ rn.current = "dark";
93
+ const hook = renderHook(useSchemePreference);
94
+ await act(async () => hook.result.current.set("dark"));
95
+ expect(rn.override).toBe("dark");
96
+ await act(async () => hook.result.current.set("system"));
97
+ expect(rn.override).toBe("unspecified");
98
+ expect(hook.result.current.value).toBe("dark");
99
+ act(() => flipOs("light"));
100
+ expect(hook.result.current.value).toBe("light");
101
+ expect(hook.result.current.setting).toBe("system");
102
+ });
103
+
104
+ it("shares selection, clears the native override for System and follows subsequent OS changes", async () => {
105
+ rn.os = "light";
106
+ rn.current = "light";
37
107
  const first = renderHook(useSchemePreference);
38
108
  const second = renderHook(useSchemePreference);
39
- act(() => first.result.current.set("dark"));
109
+ await act(async () => first.result.current.set("dark"));
40
110
  expect(second.result.current.value).toBe("dark");
41
- expect(os.forced).toBe("dark");
42
- act(() => first.result.current.set("system"));
43
- expect(os.forced).toBeNull();
111
+ expect(rn.override).toBe("dark");
112
+ await act(async () => first.result.current.set("system"));
113
+ expect(rn.override).toBe("unspecified");
44
114
  expect(second.result.current.value).toBe("light");
45
- act(() => {
46
- os.value = "dark";
47
- os.listeners.forEach((l) => l());
48
- });
115
+ act(() => flipOs("dark"));
49
116
  expect(second.result.current.value).toBe("dark");
50
117
  expect(second.result.current.setting).toBe("system");
51
118
  });
@@ -14,7 +14,7 @@ export const v3TokenRoles = {
14
14
  backgroundChrome: "background",
15
15
  backgroundStrong: "color3",
16
16
  backgroundSunk: "color3",
17
- backgroundScrim: "shadow6",
17
+ backgroundScrim: "shadow4",
18
18
  hairline: "borderColorHairline",
19
19
  hairlineStrong: "borderColor",
20
20
  colorSubtle: "textMuted",
@@ -59,6 +59,29 @@ export declare function menuRowChecked(scheme: ColorScheme): {
59
59
  };
60
60
  /** The check mark on a `menuRowChecked` row: the theme's accent (FZ-8557). */
61
61
  export declare const menuRowCheckInk: "$accentColor";
62
+ /**
63
+ * The check mark's glyph on every menu and picker row (LC-262, FZ-8557): the
64
+ * 14px bold check Clay rated 4/4 in FZ-8355 r6. Forms and components each draw
65
+ * it through a thin `CheckGlyph` that reads this one recipe, in
66
+ * `useMenuRowCheckInk`'s paint.
67
+ */
68
+ export declare const menuRowCheckGlyph: {
69
+ readonly size: 14;
70
+ readonly weight: "bold";
71
+ };
72
+ /**
73
+ * The glyph a menu row's leading icon draws at (FZ-8557 r3, LC-262). A menu
74
+ * whose rows carry icons draws its check at this glyph too, so both share one
75
+ * stroke.
76
+ */
77
+ export declare const menuRowIconGlyph: {
78
+ readonly size: 18;
79
+ readonly weight: "bold";
80
+ };
81
+ export type MenuRowGlyph = {
82
+ readonly size: number;
83
+ readonly weight: "bold";
84
+ };
62
85
  type ThemeValues = Record<string, {
63
86
  val?: unknown;
64
87
  } | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW;;;;;;;;EAOjD;AAED,8EAA8E;AAC9E,eAAO,MAAM,eAAe,EAAG,cAAuB,CAAC;AAEvD,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AASjE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKjE;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
1
+ {"version":3,"file":"menuRow.d.ts","sourceRoot":"","sources":["../src/menuRow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW;;;;;;;;EAOjD;AAED,8EAA8E;AAC9E,eAAO,MAAM,eAAe,EAAG,cAAuB,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;CAAwC,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;CAAwC,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AASjE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKjE;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
@@ -1,5 +1,39 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { type DialogContentProps as TamaguiDialogContentProps, type SizeTokens, type TamaguiElement } from "tamagui";
3
+ /**
4
+ * The scrim under every modal surface: dialogs, alerts and sheets (FZ-8557).
5
+ * `$shadow4` is the SHC console's `backgroundScrim` weight (light 0.26, dark
6
+ * 0.58 there; 0.22 and 0.45 here), the dim an iOS sheet lays over its page.
7
+ * `$shadow6` read as a heavy grey wash in light.
8
+ */
9
+ export declare const overlayScrim: "$shadow4";
10
+ /**
11
+ * A sheet's grabber (HIG, FZ-8557, FZ-8648): a 36×5 capsule 5pt inside the
12
+ * sheet's top edge, drawn over the frame rather than floating on the scrim.
13
+ * Its margins net to no height, so it lands the same on a web `Sheet.Handle`
14
+ * laid out above the frame and on a native grab zone's first child. The one
15
+ * recipe for every sheet: spread it and set nothing else.
16
+ */
17
+ export declare const sheetGrabber: {
18
+ readonly width: 36;
19
+ readonly height: 5;
20
+ readonly borderRadius: 100;
21
+ readonly backgroundColor: "$color8";
22
+ readonly opacity: 0.45;
23
+ readonly alignSelf: "center";
24
+ readonly marginHorizontal: 0;
25
+ readonly marginTop: 5;
26
+ readonly marginBottom: -10;
27
+ readonly zIndex: 10;
28
+ };
29
+ /** The top inset a sheet's content keeps clear of its grabber. */
30
+ export declare const sheetGrabberClearance = 16;
31
+ /** A native sheet's grab zone, the target around `sheetGrabber`. */
32
+ export declare const sheetGrabberZone: {
33
+ readonly alignSelf: "stretch";
34
+ readonly alignItems: "center";
35
+ readonly height: 21;
36
+ };
3
37
  type OpenAutoFocus = (event: Event) => void;
4
38
  /**
5
39
  * The house open focus for a raw `Dialog.Content`, which `DialogContent` and
@@ -1 +1 @@
1
- {"version":3,"file":"overlaySurfaces.d.ts","sourceRoot":"","sources":["../../src/theme/overlaySurfaces.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAOL,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;AA8DH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;eAEiB,SAAS;kDAelD,CAAC;AAOH,eAAO,MAAM,kBAAkB;eA5GlB,SAAS;WACb,UAAU;kDAqHlB,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":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAOL,KAAK,kBAAkB,IAAI,yBAAyB,EAEpD,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAG,UAAmB,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,oEAAoE;AACpE,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AA6DX,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;AA8DH;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;eAEiB,SAAS;kDAelD,CAAC;AAOH,eAAO,MAAM,kBAAkB;eA5GlB,SAAS;WACb,UAAU;kDAqHlB,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":"useSchemePreference.native.d.ts","sourceRoot":"","sources":["../../src/theme/useSchemePreference.native.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAGD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAkBtD"}
1
+ {"version":3,"file":"useSchemePreference.native.d.ts","sourceRoot":"","sources":["../../src/theme/useSchemePreference.native.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAgCD,wBAAgB,mBAAmB,IAAI,gBAAgB,CActD"}
@@ -14,7 +14,7 @@ export declare const v3TokenRoles: {
14
14
  readonly backgroundChrome: "background";
15
15
  readonly backgroundStrong: "color3";
16
16
  readonly backgroundSunk: "color3";
17
- readonly backgroundScrim: "shadow6";
17
+ readonly backgroundScrim: "shadow4";
18
18
  readonly hairline: "borderColorHairline";
19
19
  readonly hairlineStrong: "borderColor";
20
20
  readonly colorSubtle: "textMuted";