@multiplatform.one/theme 7.79.0 → 7.81.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.79.0",
3
+ "version": "7.81.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.79.0",
76
- "@multiplatform.one/store": "^7.79.0",
75
+ "@multiplatform.one/platform": "^7.81.0",
76
+ "@multiplatform.one/store": "^7.81.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.79.0",
93
- "@multiplatform.one/test-utils": "7.79.0",
92
+ "@multiplatform.one/config": "7.81.0",
93
+ "@multiplatform.one/test-utils": "7.81.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.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,35 @@ 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): a 36×5 capsule inside the sheet's top
32
+ * edge, 6pt down, drawn over the frame rather than floating on the scrim.
33
+ * Spread on `Sheet.Handle`; the frame keeps `sheetGrabberClearance` clear.
34
+ */
35
+ export const sheetGrabber = {
36
+ width: 36,
37
+ height: 5,
38
+ borderRadius: 100,
39
+ backgroundColor: "$color8",
40
+ opacity: 0.45,
41
+ alignSelf: "center",
42
+ marginHorizontal: 0,
43
+ marginTop: 0,
44
+ marginBottom: -11,
45
+ zIndex: 10,
46
+ } as const;
47
+
48
+ /** The top inset a sheet's content keeps clear of its grabber. */
49
+ export const sheetGrabberClearance = 16;
50
+
22
51
  // ── Overlay frame focus (LC-71) ──────────────────────────────────────────
23
52
  // Radix Dialog.Content / Primer Dialog are tabIndex=-1 and auto-focused on
24
53
  // open. The frame is not a control: UA :focus-visible must not ring the
@@ -247,7 +276,7 @@ export const DialogOverlay = forwardRef<
247
276
  return (
248
277
  <Dialog.Overlay
249
278
  ref={ref}
250
- backgroundColor="$shadow6"
279
+ backgroundColor={overlayScrim}
251
280
  {...transitionProps(knobProps.motion.scrim)}
252
281
  enterStyle={scrimFade}
253
282
  exitStyle={scrimFade}
@@ -313,7 +342,7 @@ export const AlertDialogOverlay = forwardRef<
313
342
  return (
314
343
  <AlertDialog.Overlay
315
344
  ref={ref}
316
- backgroundColor="$shadow6"
345
+ backgroundColor={overlayScrim}
317
346
  {...transitionProps(knobProps.motion.scrim)}
318
347
  enterStyle={scrimFade}
319
348
  exitStyle={scrimFade}
@@ -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,31 @@
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): a 36×5 capsule inside the sheet's top
12
+ * edge, 6pt down, drawn over the frame rather than floating on the scrim.
13
+ * Spread on `Sheet.Handle`; the frame keeps `sheetGrabberClearance` clear.
14
+ */
15
+ export declare const sheetGrabber: {
16
+ readonly width: 36;
17
+ readonly height: 5;
18
+ readonly borderRadius: 100;
19
+ readonly backgroundColor: "$color8";
20
+ readonly opacity: 0.45;
21
+ readonly alignSelf: "center";
22
+ readonly marginHorizontal: 0;
23
+ readonly marginTop: 0;
24
+ readonly marginBottom: -11;
25
+ readonly zIndex: 10;
26
+ };
27
+ /** The top inset a sheet's content keeps clear of its grabber. */
28
+ export declare const sheetGrabberClearance = 16;
3
29
  type OpenAutoFocus = (event: Event) => void;
4
30
  /**
5
31
  * 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;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AA6DxC,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";