@multiplatform.one/theme 7.88.4 → 7.88.5

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.
@@ -32,7 +32,9 @@ __export(layoutTokens_exports, {
32
32
  OVERLAY_ANCHOR_GAP: () => OVERLAY_ANCHOR_GAP,
33
33
  OVERLAY_ATTACH_GAP: () => OVERLAY_ATTACH_GAP,
34
34
  OVERLAY_BREAKPOINT: () => OVERLAY_BREAKPOINT,
35
+ READING_WIDTH_BODY_FALLBACK: () => READING_WIDTH_BODY_FALLBACK,
35
36
  READING_WIDTH_CH: () => READING_WIDTH_CH,
37
+ READING_WIDTH_CH_EM: () => READING_WIDTH_CH_EM,
36
38
  READING_WIDTH_MAX_CH: () => READING_WIDTH_MAX_CH,
37
39
  READING_WIDTH_MIN_CH: () => READING_WIDTH_MIN_CH,
38
40
  defaultMaxPanes: () => defaultMaxPanes,
@@ -45,6 +47,7 @@ __export(layoutTokens_exports, {
45
47
  readingWidthStyle: () => readingWidthStyle,
46
48
  useLayoutSizeClass: () => useLayoutSizeClass,
47
49
  useMultiPane: () => useMultiPane,
50
+ useReadingWidthStyle: () => useReadingWidthStyle,
48
51
  useSemanticGaps: () => useSemanticGaps
49
52
  });
50
53
  module.exports = __toCommonJS(layoutTokens_exports);
@@ -127,14 +130,22 @@ function useMultiPane(maxPanes) {
127
130
  const READING_WIDTH_CH = 70;
128
131
  const READING_WIDTH_MIN_CH = 65;
129
132
  const READING_WIDTH_MAX_CH = 75;
130
- function readingWidthStyle(measure = READING_WIDTH_CH) {
133
+ const READING_WIDTH_CH_EM = 0.5;
134
+ const READING_WIDTH_BODY_FALLBACK = 16;
135
+ function readingWidthStyle(measure = READING_WIDTH_CH, web = import_tamagui.isWeb, bodyFontSize = READING_WIDTH_BODY_FALLBACK) {
131
136
  if (measure === "none" || measure === null) return {};
132
137
  const ch = Math.min(READING_WIDTH_MAX_CH, Math.max(READING_WIDTH_MIN_CH, measure));
133
138
  return {
134
- maxWidth: `${ch}ch`,
139
+ maxWidth: web ? `${ch}ch` : Math.round(ch * READING_WIDTH_CH_EM * bodyFontSize),
135
140
  width: "100%"
136
141
  };
137
142
  }
143
+ function useReadingWidthStyle(measure = READING_WIDTH_CH) {
144
+ const bodyFontSize = import_tamagui.isWeb ? READING_WIDTH_BODY_FALLBACK : (0, import_tamagui.getFontSize)("$true", {
145
+ font: "$body"
146
+ });
147
+ return readingWidthStyle(measure, import_tamagui.isWeb, bodyFontSize);
148
+ }
138
149
  const FORM_READABLE_WIDTH = 560;
139
150
  const FORM_READABLE_WIDTH_MIN = 480;
140
151
  const FORM_READABLE_WIDTH_MAX = 640;
@@ -34,7 +34,9 @@ __export(layoutTokens_exports, {
34
34
  OVERLAY_ANCHOR_GAP: () => OVERLAY_ANCHOR_GAP,
35
35
  OVERLAY_ATTACH_GAP: () => OVERLAY_ATTACH_GAP,
36
36
  OVERLAY_BREAKPOINT: () => OVERLAY_BREAKPOINT,
37
+ READING_WIDTH_BODY_FALLBACK: () => READING_WIDTH_BODY_FALLBACK,
37
38
  READING_WIDTH_CH: () => READING_WIDTH_CH,
39
+ READING_WIDTH_CH_EM: () => READING_WIDTH_CH_EM,
38
40
  READING_WIDTH_MAX_CH: () => READING_WIDTH_MAX_CH,
39
41
  READING_WIDTH_MIN_CH: () => READING_WIDTH_MIN_CH,
40
42
  defaultMaxPanes: () => defaultMaxPanes,
@@ -47,6 +49,7 @@ __export(layoutTokens_exports, {
47
49
  readingWidthStyle: () => readingWidthStyle,
48
50
  useLayoutSizeClass: () => useLayoutSizeClass,
49
51
  useMultiPane: () => useMultiPane,
52
+ useReadingWidthStyle: () => useReadingWidthStyle,
50
53
  useSemanticGaps: () => useSemanticGaps
51
54
  });
52
55
  module.exports = __toCommonJS(layoutTokens_exports);
@@ -173,15 +176,26 @@ function useMultiPane(maxPanes) {
173
176
  var READING_WIDTH_CH = 70;
174
177
  var READING_WIDTH_MIN_CH = 65;
175
178
  var READING_WIDTH_MAX_CH = 75;
179
+ var READING_WIDTH_CH_EM = 0.5;
180
+ var READING_WIDTH_BODY_FALLBACK = 16;
176
181
  function readingWidthStyle() {
177
- var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH;
182
+ var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH,
183
+ web = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : import_tamagui.isWeb,
184
+ bodyFontSize = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : READING_WIDTH_BODY_FALLBACK;
178
185
  if (measure === "none" || measure === null) return {};
179
186
  var ch = Math.min(READING_WIDTH_MAX_CH, Math.max(READING_WIDTH_MIN_CH, measure));
180
187
  return {
181
- maxWidth: `${ch}ch`,
188
+ maxWidth: web ? `${ch}ch` : Math.round(ch * READING_WIDTH_CH_EM * bodyFontSize),
182
189
  width: "100%"
183
190
  };
184
191
  }
192
+ function useReadingWidthStyle() {
193
+ var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH;
194
+ var bodyFontSize = import_tamagui.isWeb ? READING_WIDTH_BODY_FALLBACK : (0, import_tamagui.getFontSize)("$true", {
195
+ font: "$body"
196
+ });
197
+ return readingWidthStyle(measure, import_tamagui.isWeb, bodyFontSize);
198
+ }
185
199
  var FORM_READABLE_WIDTH = 560;
186
200
  var FORM_READABLE_WIDTH_MIN = 480;
187
201
  var FORM_READABLE_WIDTH_MAX = 640;
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","layoutTokens_exports","__export","DETAIL_READABLE_WIDTH","FORM_READABLE_WIDTH","FORM_READABLE_WIDTH_MAX","FORM_READABLE_WIDTH_MIN","LAYOUT_SIZE_CLASS_ORDER","MIN_PRESS_TARGET","NARROW_BREAKPOINT","OVERLAY_ANCHOR_GAP","OVERLAY_ATTACH_GAP","OVERLAY_BREAKPOINT","READING_WIDTH_CH","READING_WIDTH_MAX_CH","READING_WIDTH_MIN_CH","defaultMaxPanes","getLayoutSizeClass","isTouchSurface","layoutBreakpoints","layoutSizeClassAtLeast","pressTargetHitSlop","pressTargetStyle","readingWidthStyle","useLayoutSizeClass","useMultiPane","useSemanticGaps","module","exports","import_platform","require","import_react","import_tamagui","import_useResolvedKnobs","xxs","xs","medium","md","expanded","large","xl","xxl","width","sizeClass","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","isWeb","queries","map","matchMedia","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","mq","addEventListener","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","mq2","removeEventListener","viewportSizeClass","serverViewportSizeClass","nativeWidth","useWindowDimensions","webSizeClass","useSyncExternalStore","maxPanes"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","layoutTokens_exports","__export","DETAIL_READABLE_WIDTH","FORM_READABLE_WIDTH","FORM_READABLE_WIDTH_MAX","FORM_READABLE_WIDTH_MIN","LAYOUT_SIZE_CLASS_ORDER","MIN_PRESS_TARGET","NARROW_BREAKPOINT","OVERLAY_ANCHOR_GAP","OVERLAY_ATTACH_GAP","OVERLAY_BREAKPOINT","READING_WIDTH_BODY_FALLBACK","READING_WIDTH_CH","READING_WIDTH_CH_EM","READING_WIDTH_MAX_CH","READING_WIDTH_MIN_CH","defaultMaxPanes","getLayoutSizeClass","isTouchSurface","layoutBreakpoints","layoutSizeClassAtLeast","pressTargetHitSlop","pressTargetStyle","readingWidthStyle","useLayoutSizeClass","useMultiPane","useReadingWidthStyle","useSemanticGaps","module","exports","import_platform","require","import_react","import_tamagui","import_useResolvedKnobs","xxs","xs","medium","md","expanded","large","xl","xxl","width","sizeClass","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","isWeb","queries","map","matchMedia","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","mq","addEventListener","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","mq2","removeEventListener","viewportSizeClass","serverViewportSizeClass","nativeWidth","useWindowDimensions","webSizeClass","useSyncExternalStore","maxPanes","budget"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { isTouchable, isWebTouchable } from "@multiplatform.one/platform";
2
2
  import { useSyncExternalStore } from "react";
3
- import { isWeb, useWindowDimensions } from "tamagui";
3
+ import { getFontSize, isWeb, useWindowDimensions } from "tamagui";
4
4
  import { useResolvedKnobs } from "./useResolvedKnobs.mjs";
5
5
  const layoutBreakpoints = {
6
6
  /** Tamagui `$xxs`. Smallest phones. */
@@ -77,14 +77,22 @@ function useMultiPane(maxPanes) {
77
77
  const READING_WIDTH_CH = 70;
78
78
  const READING_WIDTH_MIN_CH = 65;
79
79
  const READING_WIDTH_MAX_CH = 75;
80
- function readingWidthStyle(measure = READING_WIDTH_CH) {
80
+ const READING_WIDTH_CH_EM = 0.5;
81
+ const READING_WIDTH_BODY_FALLBACK = 16;
82
+ function readingWidthStyle(measure = READING_WIDTH_CH, web = isWeb, bodyFontSize = READING_WIDTH_BODY_FALLBACK) {
81
83
  if (measure === "none" || measure === null) return {};
82
84
  const ch = Math.min(READING_WIDTH_MAX_CH, Math.max(READING_WIDTH_MIN_CH, measure));
83
85
  return {
84
- maxWidth: `${ch}ch`,
86
+ maxWidth: web ? `${ch}ch` : Math.round(ch * READING_WIDTH_CH_EM * bodyFontSize),
85
87
  width: "100%"
86
88
  };
87
89
  }
90
+ function useReadingWidthStyle(measure = READING_WIDTH_CH) {
91
+ const bodyFontSize = isWeb ? READING_WIDTH_BODY_FALLBACK : getFontSize("$true", {
92
+ font: "$body"
93
+ });
94
+ return readingWidthStyle(measure, isWeb, bodyFontSize);
95
+ }
88
96
  const FORM_READABLE_WIDTH = 560;
89
97
  const FORM_READABLE_WIDTH_MIN = 480;
90
98
  const FORM_READABLE_WIDTH_MAX = 640;
@@ -120,5 +128,5 @@ function useSemanticGaps() {
120
128
  betweenGroups: knobProps.gapLg
121
129
  };
122
130
  }
123
- export { DETAIL_READABLE_WIDTH, FORM_READABLE_WIDTH, FORM_READABLE_WIDTH_MAX, FORM_READABLE_WIDTH_MIN, LAYOUT_SIZE_CLASS_ORDER, MIN_PRESS_TARGET, NARROW_BREAKPOINT, OVERLAY_ANCHOR_GAP, OVERLAY_ATTACH_GAP, OVERLAY_BREAKPOINT, READING_WIDTH_CH, READING_WIDTH_MAX_CH, READING_WIDTH_MIN_CH, defaultMaxPanes, getLayoutSizeClass, isTouchSurface, layoutBreakpoints, layoutSizeClassAtLeast, pressTargetHitSlop, pressTargetStyle, readingWidthStyle, useLayoutSizeClass, useMultiPane, useSemanticGaps };
131
+ export { DETAIL_READABLE_WIDTH, FORM_READABLE_WIDTH, FORM_READABLE_WIDTH_MAX, FORM_READABLE_WIDTH_MIN, LAYOUT_SIZE_CLASS_ORDER, MIN_PRESS_TARGET, NARROW_BREAKPOINT, OVERLAY_ANCHOR_GAP, OVERLAY_ATTACH_GAP, OVERLAY_BREAKPOINT, READING_WIDTH_BODY_FALLBACK, READING_WIDTH_CH, READING_WIDTH_CH_EM, READING_WIDTH_MAX_CH, READING_WIDTH_MIN_CH, defaultMaxPanes, getLayoutSizeClass, isTouchSurface, layoutBreakpoints, layoutSizeClassAtLeast, pressTargetHitSlop, pressTargetStyle, readingWidthStyle, useLayoutSizeClass, useMultiPane, useReadingWidthStyle, useSemanticGaps };
124
132
  //# sourceMappingURL=layoutTokens.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["isTouchable","isWebTouchable","useSyncExternalStore","isWeb","useWindowDimensions","useResolvedKnobs","layoutBreakpoints","xxs","xs","medium","md","expanded","large","xl","xxl","OVERLAY_BREAKPOINT","NARROW_BREAKPOINT","LAYOUT_SIZE_CLASS_ORDER","getLayoutSizeClass","width","defaultMaxPanes","sizeClass","layoutSizeClassAtLeast","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","queries","map","matchMedia","mq","addEventListener","removeEventListener","viewportSizeClass","serverViewportSizeClass","useLayoutSizeClass","nativeWidth","webSizeClass","useMultiPane","maxPanes","budget","READING_WIDTH_CH","READING_WIDTH_MIN_CH","READING_WIDTH_MAX_CH","readingWidthStyle","measure","ch","Math","min","max","maxWidth","FORM_READABLE_WIDTH","FORM_READABLE_WIDTH_MIN","FORM_READABLE_WIDTH_MAX","DETAIL_READABLE_WIDTH","MIN_PRESS_TARGET","isTouchSurface","pressTargetStyle","size","minWidth","minHeight","pressTargetHitSlop","visualSize","pad","ceil","top","bottom","left","right","OVERLAY_ANCHOR_GAP","OVERLAY_ATTACH_GAP","useSemanticGaps","knobProps","tight","gapSm","withinGroup","gap","betweenGroups","gapLg"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isTouchable","isWebTouchable","useSyncExternalStore","getFontSize","isWeb","useWindowDimensions","useResolvedKnobs","layoutBreakpoints","xxs","xs","medium","md","expanded","large","xl","xxl","OVERLAY_BREAKPOINT","NARROW_BREAKPOINT","LAYOUT_SIZE_CLASS_ORDER","getLayoutSizeClass","width","defaultMaxPanes","sizeClass","layoutSizeClassAtLeast","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","queries","map","matchMedia","mq","addEventListener","removeEventListener","viewportSizeClass","serverViewportSizeClass","useLayoutSizeClass","nativeWidth","webSizeClass","useMultiPane","maxPanes","budget","READING_WIDTH_CH","READING_WIDTH_MIN_CH","READING_WIDTH_MAX_CH","READING_WIDTH_CH_EM","READING_WIDTH_BODY_FALLBACK","readingWidthStyle","measure","web","bodyFontSize","ch","Math","min","max","maxWidth","round","useReadingWidthStyle","font","FORM_READABLE_WIDTH","FORM_READABLE_WIDTH_MIN","FORM_READABLE_WIDTH_MAX","DETAIL_READABLE_WIDTH","MIN_PRESS_TARGET","isTouchSurface","pressTargetStyle","size","minWidth","minHeight","pressTargetHitSlop","visualSize","pad","ceil","top","bottom","left","right","OVERLAY_ANCHOR_GAP","OVERLAY_ATTACH_GAP","useSemanticGaps","knobProps","tight","gapSm","withinGroup","gap","betweenGroups","gapLg"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { isTouchable, isWebTouchable } from "@multiplatform.one/platform";
2
2
  import { useSyncExternalStore } from "react";
3
- import { isWeb, useWindowDimensions } from "tamagui";
3
+ import { getFontSize, isWeb, useWindowDimensions } from "tamagui";
4
4
  import { useResolvedKnobs } from "./useResolvedKnobs.native.js";
5
5
  var layoutBreakpoints = {
6
6
  /** Tamagui `$xxs`. Smallest phones. */
@@ -121,15 +121,26 @@ function useMultiPane(maxPanes) {
121
121
  var READING_WIDTH_CH = 70;
122
122
  var READING_WIDTH_MIN_CH = 65;
123
123
  var READING_WIDTH_MAX_CH = 75;
124
+ var READING_WIDTH_CH_EM = 0.5;
125
+ var READING_WIDTH_BODY_FALLBACK = 16;
124
126
  function readingWidthStyle() {
125
- var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH;
127
+ var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH,
128
+ web = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : isWeb,
129
+ bodyFontSize = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : READING_WIDTH_BODY_FALLBACK;
126
130
  if (measure === "none" || measure === null) return {};
127
131
  var ch = Math.min(READING_WIDTH_MAX_CH, Math.max(READING_WIDTH_MIN_CH, measure));
128
132
  return {
129
- maxWidth: `${ch}ch`,
133
+ maxWidth: web ? `${ch}ch` : Math.round(ch * READING_WIDTH_CH_EM * bodyFontSize),
130
134
  width: "100%"
131
135
  };
132
136
  }
137
+ function useReadingWidthStyle() {
138
+ var measure = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : READING_WIDTH_CH;
139
+ var bodyFontSize = isWeb ? READING_WIDTH_BODY_FALLBACK : getFontSize("$true", {
140
+ font: "$body"
141
+ });
142
+ return readingWidthStyle(measure, isWeb, bodyFontSize);
143
+ }
133
144
  var FORM_READABLE_WIDTH = 560;
134
145
  var FORM_READABLE_WIDTH_MIN = 480;
135
146
  var FORM_READABLE_WIDTH_MAX = 640;
@@ -167,5 +178,5 @@ function useSemanticGaps() {
167
178
  betweenGroups: knobProps.gapLg
168
179
  };
169
180
  }
170
- export { DETAIL_READABLE_WIDTH, FORM_READABLE_WIDTH, FORM_READABLE_WIDTH_MAX, FORM_READABLE_WIDTH_MIN, LAYOUT_SIZE_CLASS_ORDER, MIN_PRESS_TARGET, NARROW_BREAKPOINT, OVERLAY_ANCHOR_GAP, OVERLAY_ATTACH_GAP, OVERLAY_BREAKPOINT, READING_WIDTH_CH, READING_WIDTH_MAX_CH, READING_WIDTH_MIN_CH, defaultMaxPanes, getLayoutSizeClass, isTouchSurface, layoutBreakpoints, layoutSizeClassAtLeast, pressTargetHitSlop, pressTargetStyle, readingWidthStyle, useLayoutSizeClass, useMultiPane, useSemanticGaps };
181
+ export { DETAIL_READABLE_WIDTH, FORM_READABLE_WIDTH, FORM_READABLE_WIDTH_MAX, FORM_READABLE_WIDTH_MIN, LAYOUT_SIZE_CLASS_ORDER, MIN_PRESS_TARGET, NARROW_BREAKPOINT, OVERLAY_ANCHOR_GAP, OVERLAY_ATTACH_GAP, OVERLAY_BREAKPOINT, READING_WIDTH_BODY_FALLBACK, READING_WIDTH_CH, READING_WIDTH_CH_EM, READING_WIDTH_MAX_CH, READING_WIDTH_MIN_CH, defaultMaxPanes, getLayoutSizeClass, isTouchSurface, layoutBreakpoints, layoutSizeClassAtLeast, pressTargetHitSlop, pressTargetStyle, readingWidthStyle, useLayoutSizeClass, useMultiPane, useReadingWidthStyle, useSemanticGaps };
171
182
  //# sourceMappingURL=layoutTokens.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isTouchable","isWebTouchable","useSyncExternalStore","isWeb","useWindowDimensions","useResolvedKnobs","layoutBreakpoints","xxs","xs","medium","md","expanded","large","xl","xxl","OVERLAY_BREAKPOINT","NARROW_BREAKPOINT","LAYOUT_SIZE_CLASS_ORDER","getLayoutSizeClass","width","defaultMaxPanes","sizeClass","layoutSizeClassAtLeast","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","queries","map","matchMedia","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","mq","value","addEventListener","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","mq2","removeEventListener","viewportSizeClass","serverViewportSizeClass","useLayoutSizeClass","nativeWidth","webSizeClass","useMultiPane","maxPanes"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isTouchable","isWebTouchable","useSyncExternalStore","getFontSize","isWeb","useWindowDimensions","useResolvedKnobs","layoutBreakpoints","xxs","xs","medium","md","expanded","large","xl","xxl","OVERLAY_BREAKPOINT","NARROW_BREAKPOINT","LAYOUT_SIZE_CLASS_ORDER","getLayoutSizeClass","width","defaultMaxPanes","sizeClass","layoutSizeClassAtLeast","current","minimum","indexOf","readViewportWidth","window","innerWidth","subscribeViewportSizeClass","onChange","queries","map","matchMedia","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","mq","value","addEventListener","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","mq2","removeEventListener","viewportSizeClass","serverViewportSizeClass","useLayoutSizeClass","nativeWidth","webSizeClass","useMultiPane","maxPanes","budget","READING_WIDTH_CH","READING_WIDTH_MIN_CH","READING_WIDTH_MAX_CH","READING_WIDTH_CH_EM","READING_WIDTH_BODY_FALLBACK","readingWidthStyle"],"sources":["../../../src/theme/layoutTokens.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/theme",
3
- "version": "7.88.4",
3
+ "version": "7.88.5",
4
4
  "description": "Tamagui theme system for multiplatform.one",
5
5
  "keywords": [
6
6
  "multiplatform",
@@ -115,8 +115,8 @@
115
115
  "access": "public"
116
116
  },
117
117
  "dependencies": {
118
- "@multiplatform.one/platform": "^7.88.4",
119
- "@multiplatform.one/store": "^7.88.4",
118
+ "@multiplatform.one/platform": "^7.88.5",
119
+ "@multiplatform.one/store": "^7.88.5",
120
120
  "@tamagui/animations-react-native": "2.7.6",
121
121
  "@tamagui/colors": "2.7.6",
122
122
  "@tamagui/config": "2.7.6",
@@ -132,8 +132,8 @@
132
132
  },
133
133
  "devDependencies": {
134
134
  "@expo/prebuild-config": "55.0.18",
135
- "@multiplatform.one/config": "7.88.4",
136
- "@multiplatform.one/test-utils": "7.88.4",
135
+ "@multiplatform.one/config": "7.88.5",
136
+ "@multiplatform.one/test-utils": "7.88.5",
137
137
  "@tamagui/animations-css": "2.7.6",
138
138
  "@tamagui/animations-reanimated": "2.7.6",
139
139
  "@tamagui/build": "2.7.6",
@@ -15,8 +15,11 @@ import {
15
15
  layoutSizeClassAtLeast,
16
16
  pressTargetHitSlop,
17
17
  pressTargetStyle,
18
+ READING_WIDTH_CH_EM,
18
19
  readingWidthStyle,
19
20
  } from "./layoutTokens";
21
+ import { densePreset, roomyPreset } from "./presets";
22
+ import { generateScaleFonts } from "./scale";
20
23
 
21
24
  describe("layoutBreakpoints (DG-LAY-01)", () => {
22
25
  it("pivots overlays at medium 640 (Tamagui $sm — MPO-13 C5); expanded 860 stays the pane class", () => {
@@ -67,6 +70,24 @@ describe("readingWidthStyle (DG-LAY-05)", () => {
67
70
  expect(readingWidthStyle("none")).toEqual({});
68
71
  expect(readingWidthStyle(null)).toEqual({});
69
72
  });
73
+
74
+ it("gives targets without a ch unit the measure in points from the body size (FZ-9278)", () => {
75
+ const denseBody = generateScaleFonts(densePreset.scale!.type, "native").bodySizes.true;
76
+ const roomyBody = generateScaleFonts(roomyPreset.scale!.type, "native").bodySizes.true;
77
+ expect(denseBody).toBeLessThan(roomyBody);
78
+ expect(readingWidthStyle(undefined, false, denseBody)).toEqual({
79
+ maxWidth: Math.round(70 * READING_WIDTH_CH_EM * denseBody),
80
+ width: "100%",
81
+ });
82
+ expect(readingWidthStyle(undefined, false, roomyBody)).toEqual({
83
+ maxWidth: Math.round(70 * READING_WIDTH_CH_EM * roomyBody),
84
+ width: "100%",
85
+ });
86
+ expect(readingWidthStyle(90, false, roomyBody)).toEqual({
87
+ maxWidth: Math.round(75 * READING_WIDTH_CH_EM * roomyBody),
88
+ width: "100%",
89
+ });
90
+ });
70
91
  });
71
92
 
72
93
  describe("overlay anchoring", () => {
@@ -33,7 +33,7 @@
33
33
 
34
34
  import { isTouchable, isWebTouchable } from "@multiplatform.one/platform";
35
35
  import { useSyncExternalStore } from "react";
36
- import { isWeb, useWindowDimensions } from "tamagui";
36
+ import { type FontSizeTokens, getFontSize, isWeb, useWindowDimensions } from "tamagui";
37
37
  import { useResolvedKnobs } from "./useResolvedKnobs";
38
38
 
39
39
  // ── Breakpoint tokens (DG-LAY-01) ─────────────────────────────────────────
@@ -191,18 +191,45 @@ export const READING_WIDTH_CH = 70;
191
191
  export const READING_WIDTH_MIN_CH = 65;
192
192
  export const READING_WIDTH_MAX_CH = 75;
193
193
 
194
+ /** One `ch` as a share of the body font size, for targets with no `ch` unit. */
195
+ export const READING_WIDTH_CH_EM = 0.5;
196
+
197
+ /** Body size the pure helper assumes when the caller has no live one. */
198
+ export const READING_WIDTH_BODY_FALLBACK = 16;
199
+
194
200
  export type ReadingWidthStyle = {
195
- maxWidth: string;
201
+ maxWidth: string | number;
196
202
  width: "100%";
197
203
  };
198
204
 
199
- /** Style props for prose / long-form columns. Pass `null`/`"none"` to eject. */
205
+ /**
206
+ * Style props for prose / long-form columns. Pass `null`/`"none"` to eject.
207
+ * React Native and the GTK renderer have no `ch` unit and read "70ch" as 70
208
+ * points, so off the web the measure is points from the body font size
209
+ * (FZ-9278). Components use `useReadingWidthStyle`, which reads that size
210
+ * from the active preset.
211
+ */
200
212
  export function readingWidthStyle(
201
213
  measure: number | "none" | null = READING_WIDTH_CH,
214
+ web: boolean = isWeb,
215
+ bodyFontSize: number = READING_WIDTH_BODY_FALLBACK,
202
216
  ): ReadingWidthStyle | Record<string, never> {
203
217
  if (measure === "none" || measure === null) return {};
204
218
  const ch = Math.min(READING_WIDTH_MAX_CH, Math.max(READING_WIDTH_MIN_CH, measure));
205
- return { maxWidth: `${ch}ch`, width: "100%" };
219
+ return {
220
+ maxWidth: web ? `${ch}ch` : Math.round(ch * READING_WIDTH_CH_EM * bodyFontSize),
221
+ width: "100%",
222
+ };
223
+ }
224
+
225
+ /** `readingWidthStyle` at the active preset's body size (`$true` on `$body`). */
226
+ export function useReadingWidthStyle(
227
+ measure: number | "none" | null = READING_WIDTH_CH,
228
+ ): ReadingWidthStyle | Record<string, never> {
229
+ const bodyFontSize = isWeb
230
+ ? READING_WIDTH_BODY_FALLBACK
231
+ : getFontSize("$true" as FontSizeTokens, { font: "$body" });
232
+ return readingWidthStyle(measure, isWeb, bodyFontSize);
206
233
  }
207
234
 
208
235
  // ── Form readable width ───────────────────────────────────────────────────
@@ -0,0 +1,61 @@
1
+ /**
2
+ * FZ-9211. The dark elevation order: page < card <= sheet. A sheet frame paints
3
+ * `elevatedSurface.backgroundColor`, which must resolve at or above the card
4
+ * (the Card surface1 theme) it slides over, in every colour theme and every knob preset.
5
+ */
6
+ import { describe, expect, it, vi } from "vitest";
7
+
8
+ vi.mock("tamagui", async (original) => ({
9
+ ...(await original<typeof import("tamagui")>()),
10
+ createTamagui: vi.fn((config: Record<string, unknown>) => config),
11
+ }));
12
+ vi.mock("./animations/index", () => ({ animations: {} }));
13
+
14
+ import { normalizeToHex, relativeLuminance } from "./colorRules";
15
+ import { createDefaultThemeConfig } from "./createDefaultThemeConfig";
16
+ import { resolveAllThemes } from "./dedupeInherited";
17
+ import { defaultKnobs } from "./knobs";
18
+ import * as presets from "./presets";
19
+ import { resolveKnobs } from "./resolveKnobs";
20
+
21
+ const themes = resolveAllThemes(
22
+ createDefaultThemeConfig().tamagui.themes as unknown as Record<string, Record<string, unknown>>,
23
+ );
24
+
25
+ const darkRoots = Object.keys(themes).filter(
26
+ (name) => /^dark(_[a-z]+)?$/.test(name) && !name.endsWith("_accent") && themes[`${name}_Card`],
27
+ );
28
+
29
+ function luminance(theme: Record<string, unknown>, token: string): number {
30
+ const key = token.startsWith("$") ? token.slice(1) : token;
31
+ const hex = normalizeToHex(String(theme[key]));
32
+ if (!hex) throw new Error(`${key} has no colour: ${String(theme[key])}`);
33
+ return relativeLuminance(hex);
34
+ }
35
+
36
+ const knobPresets = Object.entries(presets as Record<string, unknown>)
37
+ .filter(([name, value]) => name.endsWith("Preset") && typeof value === "object" && value !== null)
38
+ .map(([name, value]) => [name, value as { knobs?: Record<string, unknown> }] as const);
39
+
40
+ describe("FZ-9211: dark sheets sit at or above the card", () => {
41
+ it("covers the dark colour themes", () => {
42
+ expect(darkRoots).toContain("dark");
43
+ expect(darkRoots.length).toBeGreaterThan(4);
44
+ });
45
+
46
+ it.each(darkRoots)("%s: page < card <= sheet", (name) => {
47
+ const root = themes[name]!;
48
+ const card = themes[`${name}_Card`]!;
49
+ const page = luminance(root, "background");
50
+ const cardFill = luminance(card, "background");
51
+ expect(cardFill, `${name} card over page`).toBeGreaterThan(page);
52
+ for (const [presetName, preset] of [["default", {}], ...knobPresets] as const) {
53
+ const knobs = { ...defaultKnobs, ...(preset as { knobs?: object }).knobs };
54
+ const sheet = resolveKnobs(knobs as never, undefined, "dark").knobProps.elevatedSurface;
55
+ expect(
56
+ luminance(root, sheet.backgroundColor),
57
+ `${name} ${presetName}: sheet ${sheet.backgroundColor} over card`,
58
+ ).toBeGreaterThanOrEqual(cardFill);
59
+ }
60
+ });
61
+ });
@@ -110,12 +110,24 @@ export declare function useMultiPane(maxPanes?: 1 | 2): boolean;
110
110
  export declare const READING_WIDTH_CH = 70;
111
111
  export declare const READING_WIDTH_MIN_CH = 65;
112
112
  export declare const READING_WIDTH_MAX_CH = 75;
113
+ /** One `ch` as a share of the body font size, for targets with no `ch` unit. */
114
+ export declare const READING_WIDTH_CH_EM = 0.5;
115
+ /** Body size the pure helper assumes when the caller has no live one. */
116
+ export declare const READING_WIDTH_BODY_FALLBACK = 16;
113
117
  export type ReadingWidthStyle = {
114
- maxWidth: string;
118
+ maxWidth: string | number;
115
119
  width: "100%";
116
120
  };
117
- /** Style props for prose / long-form columns. Pass `null`/`"none"` to eject. */
118
- export declare function readingWidthStyle(measure?: number | "none" | null): ReadingWidthStyle | Record<string, never>;
121
+ /**
122
+ * Style props for prose / long-form columns. Pass `null`/`"none"` to eject.
123
+ * React Native and the GTK renderer have no `ch` unit and read "70ch" as 70
124
+ * points, so off the web the measure is points from the body font size
125
+ * (FZ-9278). Components use `useReadingWidthStyle`, which reads that size
126
+ * from the active preset.
127
+ */
128
+ export declare function readingWidthStyle(measure?: number | "none" | null, web?: boolean, bodyFontSize?: number): ReadingWidthStyle | Record<string, never>;
129
+ /** `readingWidthStyle` at the active preset's body size (`$true` on `$body`). */
130
+ export declare function useReadingWidthStyle(measure?: number | "none" | null): ReadingWidthStyle | Record<string, never>;
119
131
  /**
120
132
  * A form column's readable max width: wide enough for two FormGrid columns
121
133
  * (FORM_GRID_COLLAPSE_WIDTH 480), narrow enough that a label, its field and
@@ -1 +1 @@
1
- {"version":3,"file":"layoutTokens.d.ts","sourceRoot":"","sources":["../../src/theme/layoutTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AASH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;AAEjF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB;IAC5B,uCAAuC;;IAEvC,qBAAqB;;IAErB;;;;OAIG;;IAEH;;;;;;OAMG;;IAEH,0EAA0E;;IAE1E,qBAAqB;;IAErB,qBAAqB;;IAErB,sBAAsB;;CAEd,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAElE;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,KAA2B,CAAC;AAE3D,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,KAA2B,CAAC;AAE1D,eAAO,MAAM,uBAAuB,EAAE,SAAS,eAAe,EAMpD,CAAC;AAEX,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAMjE;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,SAAS,EAAE,eAAe,GAAG,CAAC,GAAG,CAAC,CAEjE;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAET;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAQpD;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAItD;AAID,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,MAAM,GAAG,MAAM,GAAG,IAAuB,GACjD,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAI3C;AAID;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAI3C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAIzC,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAyB,GAAG,gBAAgB,CAElF;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAyB,GAC7B,aAAa,CAGf;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC,CAOA"}
1
+ {"version":3,"file":"layoutTokens.d.ts","sourceRoot":"","sources":["../../src/theme/layoutTokens.ts"],"names":[],"mappings":"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"}