melta-app 0.6.0 → 0.8.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.
Files changed (296) hide show
  1. package/README.md +231 -21
  2. package/docs/architecture.md +12 -5
  3. package/eslint-rules/melta.d.mts +45 -0
  4. package/eslint-rules/melta.mjs +32 -5
  5. package/lib/module/a11y/tap-target.js +41 -0
  6. package/lib/module/a11y/tap-target.js.map +1 -0
  7. package/lib/module/components/ActionSheet.js +20 -6
  8. package/lib/module/components/ActionSheet.js.map +1 -1
  9. package/lib/module/components/Alert.js +11 -7
  10. package/lib/module/components/Alert.js.map +1 -1
  11. package/lib/module/components/Avatar.js +7 -2
  12. package/lib/module/components/Avatar.js.map +1 -1
  13. package/lib/module/components/BottomSheet.js +11 -3
  14. package/lib/module/components/BottomSheet.js.map +1 -1
  15. package/lib/module/components/Card.js +4 -3
  16. package/lib/module/components/Card.js.map +1 -1
  17. package/lib/module/components/Checkbox.js +8 -5
  18. package/lib/module/components/Checkbox.js.map +1 -1
  19. package/lib/module/components/EmptyState.js +2 -1
  20. package/lib/module/components/EmptyState.js.map +1 -1
  21. package/lib/module/components/Header.js.map +1 -1
  22. package/lib/module/components/Image.js +5 -3
  23. package/lib/module/components/Image.js.map +1 -1
  24. package/lib/module/components/Modal.js +12 -4
  25. package/lib/module/components/Modal.js.map +1 -1
  26. package/lib/module/components/Progress.js +2 -1
  27. package/lib/module/components/Progress.js.map +1 -1
  28. package/lib/module/components/Radio.js +11 -3
  29. package/lib/module/components/Radio.js.map +1 -1
  30. package/lib/module/components/Screen.js +28 -3
  31. package/lib/module/components/Screen.js.map +1 -1
  32. package/lib/module/components/Skeleton.js +2 -1
  33. package/lib/module/components/Skeleton.js.map +1 -1
  34. package/lib/module/components/Surface.js +2 -1
  35. package/lib/module/components/Surface.js.map +1 -1
  36. package/lib/module/components/TextField.js +16 -4
  37. package/lib/module/components/TextField.js.map +1 -1
  38. package/lib/module/components/Toast.js +17 -9
  39. package/lib/module/components/Toast.js.map +1 -1
  40. package/lib/module/components/Toggle.js +13 -4
  41. package/lib/module/components/Toggle.js.map +1 -1
  42. package/lib/module/components/alert.styles.js +12 -26
  43. package/lib/module/components/alert.styles.js.map +1 -1
  44. package/lib/module/components/avatar.styles.js +24 -2
  45. package/lib/module/components/avatar.styles.js.map +1 -1
  46. package/lib/module/components/card.validate.js.map +1 -1
  47. package/lib/module/components/checkbox.styles.js +5 -2
  48. package/lib/module/components/checkbox.styles.js.map +1 -1
  49. package/lib/module/components/index.js.map +1 -1
  50. package/lib/module/components/modal.styles.js +9 -0
  51. package/lib/module/components/modal.styles.js.map +1 -1
  52. package/lib/module/components/radio.styles.js +11 -2
  53. package/lib/module/components/radio.styles.js.map +1 -1
  54. package/lib/module/components/safe-area-registry.js +64 -13
  55. package/lib/module/components/safe-area-registry.js.map +1 -1
  56. package/lib/module/components/status-colors.js +53 -0
  57. package/lib/module/components/status-colors.js.map +1 -0
  58. package/lib/module/components/textfield.styles.js +15 -8
  59. package/lib/module/components/textfield.styles.js.map +1 -1
  60. package/lib/module/components/toast.styles.js +36 -25
  61. package/lib/module/components/toast.styles.js.map +1 -1
  62. package/lib/module/components/toggle.styles.js +20 -0
  63. package/lib/module/components/toggle.styles.js.map +1 -1
  64. package/lib/module/icons/Icon.js +4 -1
  65. package/lib/module/icons/Icon.js.map +1 -1
  66. package/lib/module/icons/icon.styles.js +32 -1
  67. package/lib/module/icons/icon.styles.js.map +1 -1
  68. package/lib/module/icons/index.js.map +1 -1
  69. package/lib/module/index.js.map +1 -1
  70. package/lib/module/primitives/Button.js +23 -11
  71. package/lib/module/primitives/Button.js.map +1 -1
  72. package/lib/module/primitives/Metric.js +2 -1
  73. package/lib/module/primitives/Metric.js.map +1 -1
  74. package/lib/module/primitives/Row.js.map +1 -1
  75. package/lib/module/primitives/Stack.js.map +1 -1
  76. package/lib/module/primitives/Tag.js +15 -7
  77. package/lib/module/primitives/Tag.js.map +1 -1
  78. package/lib/module/primitives/Text.js +13 -5
  79. package/lib/module/primitives/Text.js.map +1 -1
  80. package/lib/module/primitives/_internal/focus-ring.js.map +1 -1
  81. package/lib/module/primitives/button.styles.js +58 -8
  82. package/lib/module/primitives/button.styles.js.map +1 -1
  83. package/lib/module/primitives/index.js.map +1 -1
  84. package/lib/module/primitives/metric.styles.js +2 -2
  85. package/lib/module/primitives/metric.styles.js.map +1 -1
  86. package/lib/module/primitives/tag.styles.js +42 -3
  87. package/lib/module/primitives/tag.styles.js.map +1 -1
  88. package/lib/module/primitives/text.styles.js +6 -7
  89. package/lib/module/primitives/text.styles.js.map +1 -1
  90. package/lib/module/safe-area/index.js +11 -5
  91. package/lib/module/safe-area/index.js.map +1 -1
  92. package/lib/module/theme/ThemeProvider.js +5 -2
  93. package/lib/module/theme/ThemeProvider.js.map +1 -1
  94. package/lib/module/theme/define-theme.js +14 -1
  95. package/lib/module/theme/define-theme.js.map +1 -1
  96. package/lib/module/theme/index.js +6 -8
  97. package/lib/module/theme/index.js.map +1 -1
  98. package/lib/module/theme/letter-spacing.js +20 -0
  99. package/lib/module/theme/letter-spacing.js.map +1 -0
  100. package/lib/module/theme/line-height.js +18 -2
  101. package/lib/module/theme/line-height.js.map +1 -1
  102. package/lib/module/theme/native-theme.js +1 -1
  103. package/lib/typescript/src/a11y/tap-target.d.ts +34 -0
  104. package/lib/typescript/src/a11y/tap-target.d.ts.map +1 -0
  105. package/lib/typescript/src/components/ActionSheet.d.ts +8 -1
  106. package/lib/typescript/src/components/ActionSheet.d.ts.map +1 -1
  107. package/lib/typescript/src/components/Alert.d.ts +9 -2
  108. package/lib/typescript/src/components/Alert.d.ts.map +1 -1
  109. package/lib/typescript/src/components/Avatar.d.ts +1 -1
  110. package/lib/typescript/src/components/Avatar.d.ts.map +1 -1
  111. package/lib/typescript/src/components/BottomSheet.d.ts +4 -1
  112. package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -1
  113. package/lib/typescript/src/components/Card.d.ts +2 -2
  114. package/lib/typescript/src/components/Checkbox.d.ts +3 -3
  115. package/lib/typescript/src/components/Checkbox.d.ts.map +1 -1
  116. package/lib/typescript/src/components/Image.d.ts +4 -3
  117. package/lib/typescript/src/components/Image.d.ts.map +1 -1
  118. package/lib/typescript/src/components/Modal.d.ts +9 -3
  119. package/lib/typescript/src/components/Modal.d.ts.map +1 -1
  120. package/lib/typescript/src/components/Progress.d.ts +1 -1
  121. package/lib/typescript/src/components/Progress.d.ts.map +1 -1
  122. package/lib/typescript/src/components/Radio.d.ts +3 -2
  123. package/lib/typescript/src/components/Radio.d.ts.map +1 -1
  124. package/lib/typescript/src/components/Screen.d.ts +28 -5
  125. package/lib/typescript/src/components/Screen.d.ts.map +1 -1
  126. package/lib/typescript/src/components/Skeleton.d.ts +1 -1
  127. package/lib/typescript/src/components/Skeleton.d.ts.map +1 -1
  128. package/lib/typescript/src/components/Surface.d.ts +1 -1
  129. package/lib/typescript/src/components/Surface.d.ts.map +1 -1
  130. package/lib/typescript/src/components/TextField.d.ts +11 -4
  131. package/lib/typescript/src/components/TextField.d.ts.map +1 -1
  132. package/lib/typescript/src/components/Toast.d.ts +10 -3
  133. package/lib/typescript/src/components/Toast.d.ts.map +1 -1
  134. package/lib/typescript/src/components/Toggle.d.ts +3 -2
  135. package/lib/typescript/src/components/Toggle.d.ts.map +1 -1
  136. package/lib/typescript/src/components/action-sheet.styles.d.ts +1 -1
  137. package/lib/typescript/src/components/action-sheet.styles.d.ts.map +1 -1
  138. package/lib/typescript/src/components/alert.styles.d.ts +14 -14
  139. package/lib/typescript/src/components/alert.styles.d.ts.map +1 -1
  140. package/lib/typescript/src/components/avatar.styles.d.ts +36 -1
  141. package/lib/typescript/src/components/avatar.styles.d.ts.map +1 -1
  142. package/lib/typescript/src/components/bottom-sheet.styles.d.ts +1 -1
  143. package/lib/typescript/src/components/bottom-sheet.styles.d.ts.map +1 -1
  144. package/lib/typescript/src/components/card.styles.d.ts +1 -1
  145. package/lib/typescript/src/components/card.styles.d.ts.map +1 -1
  146. package/lib/typescript/src/components/card.validate.d.ts +1 -1
  147. package/lib/typescript/src/components/card.validate.d.ts.map +1 -1
  148. package/lib/typescript/src/components/checkbox.styles.d.ts +6 -3
  149. package/lib/typescript/src/components/checkbox.styles.d.ts.map +1 -1
  150. package/lib/typescript/src/components/empty-state.styles.d.ts +1 -1
  151. package/lib/typescript/src/components/empty-state.styles.d.ts.map +1 -1
  152. package/lib/typescript/src/components/header.styles.d.ts +1 -1
  153. package/lib/typescript/src/components/header.styles.d.ts.map +1 -1
  154. package/lib/typescript/src/components/image.styles.d.ts +1 -1
  155. package/lib/typescript/src/components/image.styles.d.ts.map +1 -1
  156. package/lib/typescript/src/components/index.d.ts +18 -18
  157. package/lib/typescript/src/components/index.d.ts.map +1 -1
  158. package/lib/typescript/src/components/modal.styles.d.ts +13 -2
  159. package/lib/typescript/src/components/modal.styles.d.ts.map +1 -1
  160. package/lib/typescript/src/components/progress.styles.d.ts +1 -1
  161. package/lib/typescript/src/components/progress.styles.d.ts.map +1 -1
  162. package/lib/typescript/src/components/radio.styles.d.ts +10 -2
  163. package/lib/typescript/src/components/radio.styles.d.ts.map +1 -1
  164. package/lib/typescript/src/components/safe-area-registry.d.ts +47 -11
  165. package/lib/typescript/src/components/safe-area-registry.d.ts.map +1 -1
  166. package/lib/typescript/src/components/screen.styles.d.ts +1 -1
  167. package/lib/typescript/src/components/screen.styles.d.ts.map +1 -1
  168. package/lib/typescript/src/components/skeleton.styles.d.ts +1 -1
  169. package/lib/typescript/src/components/skeleton.styles.d.ts.map +1 -1
  170. package/lib/typescript/src/components/status-colors.d.ts +33 -0
  171. package/lib/typescript/src/components/status-colors.d.ts.map +1 -0
  172. package/lib/typescript/src/components/surface.styles.d.ts +1 -1
  173. package/lib/typescript/src/components/surface.styles.d.ts.map +1 -1
  174. package/lib/typescript/src/components/textfield.styles.d.ts +9 -5
  175. package/lib/typescript/src/components/textfield.styles.d.ts.map +1 -1
  176. package/lib/typescript/src/components/toast.styles.d.ts +34 -14
  177. package/lib/typescript/src/components/toast.styles.d.ts.map +1 -1
  178. package/lib/typescript/src/components/toggle.styles.d.ts +17 -1
  179. package/lib/typescript/src/components/toggle.styles.d.ts.map +1 -1
  180. package/lib/typescript/src/icons/Icon.d.ts +12 -6
  181. package/lib/typescript/src/icons/Icon.d.ts.map +1 -1
  182. package/lib/typescript/src/icons/icon.styles.d.ts +14 -2
  183. package/lib/typescript/src/icons/icon.styles.d.ts.map +1 -1
  184. package/lib/typescript/src/icons/index.d.ts +3 -3
  185. package/lib/typescript/src/icons/index.d.ts.map +1 -1
  186. package/lib/typescript/src/index.d.ts +4 -4
  187. package/lib/typescript/src/index.d.ts.map +1 -1
  188. package/lib/typescript/src/primitives/Button.d.ts +8 -4
  189. package/lib/typescript/src/primitives/Button.d.ts.map +1 -1
  190. package/lib/typescript/src/primitives/Metric.d.ts +1 -1
  191. package/lib/typescript/src/primitives/Metric.d.ts.map +1 -1
  192. package/lib/typescript/src/primitives/Row.d.ts +2 -2
  193. package/lib/typescript/src/primitives/Row.d.ts.map +1 -1
  194. package/lib/typescript/src/primitives/Stack.d.ts +2 -2
  195. package/lib/typescript/src/primitives/Stack.d.ts.map +1 -1
  196. package/lib/typescript/src/primitives/Tag.d.ts +2 -2
  197. package/lib/typescript/src/primitives/Tag.d.ts.map +1 -1
  198. package/lib/typescript/src/primitives/Text.d.ts +20 -6
  199. package/lib/typescript/src/primitives/Text.d.ts.map +1 -1
  200. package/lib/typescript/src/primitives/button.styles.d.ts +44 -7
  201. package/lib/typescript/src/primitives/button.styles.d.ts.map +1 -1
  202. package/lib/typescript/src/primitives/index.d.ts +6 -6
  203. package/lib/typescript/src/primitives/index.d.ts.map +1 -1
  204. package/lib/typescript/src/primitives/metric.styles.d.ts +1 -1
  205. package/lib/typescript/src/primitives/metric.styles.d.ts.map +1 -1
  206. package/lib/typescript/src/primitives/row.styles.d.ts +1 -1
  207. package/lib/typescript/src/primitives/row.styles.d.ts.map +1 -1
  208. package/lib/typescript/src/primitives/stack.styles.d.ts +1 -1
  209. package/lib/typescript/src/primitives/stack.styles.d.ts.map +1 -1
  210. package/lib/typescript/src/primitives/tag.styles.d.ts +34 -1
  211. package/lib/typescript/src/primitives/tag.styles.d.ts.map +1 -1
  212. package/lib/typescript/src/primitives/text.styles.d.ts +2 -4
  213. package/lib/typescript/src/primitives/text.styles.d.ts.map +1 -1
  214. package/lib/typescript/src/safe-area/index.d.ts +19 -5
  215. package/lib/typescript/src/safe-area/index.d.ts.map +1 -1
  216. package/lib/typescript/src/theme/ThemeProvider.d.ts +2 -2
  217. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  218. package/lib/typescript/src/theme/define-theme.d.ts +15 -2
  219. package/lib/typescript/src/theme/define-theme.d.ts.map +1 -1
  220. package/lib/typescript/src/theme/index.d.ts +14 -14
  221. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  222. package/lib/typescript/src/theme/letter-spacing.d.ts +15 -0
  223. package/lib/typescript/src/theme/letter-spacing.d.ts.map +1 -0
  224. package/lib/typescript/src/theme/line-height.d.ts +19 -2
  225. package/lib/typescript/src/theme/line-height.d.ts.map +1 -1
  226. package/lib/typescript/src/theme/native-theme.d.ts +1 -1
  227. package/lib/typescript/src/theme/native-theme.d.ts.map +1 -1
  228. package/lib/typescript/src/theme/types.d.ts +1 -1
  229. package/package.json +22 -7
  230. package/src/a11y/tap-target.ts +38 -0
  231. package/src/components/ActionSheet.tsx +25 -15
  232. package/src/components/Alert.tsx +37 -10
  233. package/src/components/Avatar.tsx +12 -4
  234. package/src/components/BottomSheet.tsx +16 -13
  235. package/src/components/Card.tsx +9 -8
  236. package/src/components/Checkbox.tsx +12 -9
  237. package/src/components/EmptyState.tsx +7 -6
  238. package/src/components/Header.tsx +4 -4
  239. package/src/components/Image.tsx +9 -7
  240. package/src/components/Modal.tsx +22 -6
  241. package/src/components/Progress.tsx +5 -4
  242. package/src/components/Radio.tsx +11 -6
  243. package/src/components/Screen.tsx +66 -8
  244. package/src/components/Skeleton.tsx +6 -5
  245. package/src/components/Surface.tsx +5 -4
  246. package/src/components/TextField.tsx +25 -7
  247. package/src/components/Toast.tsx +33 -11
  248. package/src/components/Toggle.tsx +15 -6
  249. package/src/components/action-sheet.styles.ts +1 -1
  250. package/src/components/alert.styles.ts +13 -25
  251. package/src/components/avatar.styles.ts +25 -3
  252. package/src/components/bottom-sheet.styles.ts +1 -1
  253. package/src/components/card.styles.ts +1 -1
  254. package/src/components/card.validate.ts +2 -2
  255. package/src/components/checkbox.styles.ts +6 -3
  256. package/src/components/empty-state.styles.ts +1 -1
  257. package/src/components/header.styles.ts +1 -1
  258. package/src/components/image.styles.ts +1 -1
  259. package/src/components/index.ts +18 -18
  260. package/src/components/modal.styles.ts +11 -2
  261. package/src/components/progress.styles.ts +1 -1
  262. package/src/components/radio.styles.ts +11 -2
  263. package/src/components/safe-area-registry.ts +81 -14
  264. package/src/components/screen.styles.ts +1 -1
  265. package/src/components/skeleton.styles.ts +1 -1
  266. package/src/components/status-colors.ts +59 -0
  267. package/src/components/surface.styles.ts +1 -1
  268. package/src/components/textfield.styles.ts +18 -15
  269. package/src/components/toast.styles.ts +32 -25
  270. package/src/components/toggle.styles.ts +21 -1
  271. package/src/icons/Icon.tsx +13 -8
  272. package/src/icons/icon.styles.ts +38 -3
  273. package/src/icons/index.ts +3 -3
  274. package/src/index.ts +4 -4
  275. package/src/primitives/Button.tsx +28 -14
  276. package/src/primitives/Metric.tsx +5 -4
  277. package/src/primitives/Row.tsx +4 -4
  278. package/src/primitives/Stack.tsx +4 -4
  279. package/src/primitives/Tag.tsx +29 -11
  280. package/src/primitives/Text.tsx +28 -11
  281. package/src/primitives/_internal/focus-ring.tsx +1 -1
  282. package/src/primitives/button.styles.ts +63 -10
  283. package/src/primitives/index.ts +6 -6
  284. package/src/primitives/metric.styles.ts +3 -3
  285. package/src/primitives/row.styles.ts +1 -1
  286. package/src/primitives/stack.styles.ts +1 -1
  287. package/src/primitives/tag.styles.ts +43 -4
  288. package/src/primitives/text.styles.ts +7 -12
  289. package/src/safe-area/index.ts +21 -7
  290. package/src/theme/ThemeProvider.tsx +8 -5
  291. package/src/theme/define-theme.ts +15 -2
  292. package/src/theme/index.ts +14 -17
  293. package/src/theme/letter-spacing.ts +17 -0
  294. package/src/theme/line-height.ts +18 -2
  295. package/src/theme/native-theme.ts +2 -2
  296. package/src/theme/types.ts +1 -1
@@ -7,11 +7,15 @@
7
7
  * - iconOnly は discriminated union で accessibilityLabel 必須を型強制(§4、label 排他)。
8
8
  * - states(§2 mapping): hover→pressed(背景を pressed 色に)、focus→FocusRing overlay(共通 helper)、
9
9
  * disabled→prop(opacity + 非活性)、loading→Spinner + disabled 相当。
10
+ * - タップ標的: labeled は minHeight(fontScale でクリップさせない)+ 縦 hitSlop、
11
+ * iconOnly は正方形固定 + 四方 hitSlop で実効 44pt を確保する(A11Y_MIN_TAP_TARGET_44、
12
+ * 値の根拠は button.styles.ts の BUTTON_VERTICAL_HIT_SLOP)。
10
13
  * - 色は variant ごとに NativeTheme から解決(button.contract tokenRefs を 1:1 で写像)。
11
14
  * contained の pressed は hover-bg=primary.700(contract に native readable token あり、唯一)。
12
- * 他 variant の pressed 視覚変化は contract が Tailwind のみ=Phase1 non-conformant(§2 M-1)、
13
- * ここでは pressed 時に薄い overlay を敷く近似に留め、Phase2 で contract に pressed-* token 追加。
14
- * - height は contract sizes(small32/medium40/large48)。
15
+ * 他 variant の pressed 視覚変化は contract が Tailwind クラスしか持たず native 解決できない
16
+ * (§2 M-1)。ここでは pressed 時に薄い overlay を敷く近似に留めている。contract 側に
17
+ * pressed-* token が入ったら実値解決へ置き換える(契約側が未対応のため未着手)。
18
+ * - 高さは contract sizes(small32/medium40/large48)を **下限**として使う。
15
19
  */
16
20
 
17
21
  import { useMemo } from "react";
@@ -20,7 +24,7 @@ import { Text } from "./Text.js";
20
24
  import { useTheme } from "../theme/index.js";
21
25
  import { useFocusRing, FocusRing } from "./_internal/focus-ring.js";
22
26
  import { CONTRACTS } from "../contracts/contract-types.js";
23
- import { SIZE_SPEC, resolveVariant } from "./button.styles.js";
27
+ import { BUTTON_SIZE_SPEC, resolveButtonColors, resolveButtonHitSlop } from "./button.styles.js";
24
28
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
25
29
  export function Button(props) {
26
30
  const {
@@ -42,8 +46,8 @@ export function Button(props) {
42
46
  focused,
43
47
  focusHandlers
44
48
  } = useFocusRing();
45
- const spec = SIZE_SPEC[size];
46
- const colors = useMemo(() => resolveVariant(theme, mode, variant), [theme, mode, variant]);
49
+ const spec = BUTTON_SIZE_SPEC[size];
50
+ const colors = useMemo(() => resolveButtonColors(theme, mode, variant), [theme, mode, variant]);
47
51
  const isDisabled = disabled || loading;
48
52
  const iconOnly = props.iconOnly === true;
49
53
  return /*#__PURE__*/_jsxs(Pressable, {
@@ -56,20 +60,27 @@ export function Button(props) {
56
60
  busy: loading
57
61
  },
58
62
  accessibilityLabel: iconOnly ? props.accessibilityLabel : undefined,
63
+ hitSlop: resolveButtonHitSlop(size, iconOnly),
59
64
  testID: testID,
60
65
  style: ({
61
66
  pressed
62
67
  }) => [{
63
- height: spec.height,
64
68
  flexDirection: "row",
65
69
  alignItems: "center",
66
70
  justifyContent: "center",
67
71
  gap: theme.spacing["2"],
68
72
  borderRadius: theme.radius.md,
69
73
  backgroundColor: pressed && !isDisabled ? colors.pressedBg : colors.bg,
70
- ...(iconOnly ? {
71
- width: spec.iconBox
72
- } : {
74
+ ...(iconOnly ?
75
+ // iconOnly は正方形を保つ(recipe の iconOnlyWidth/iconOnlyHeight)。
76
+ // 中身は glyph 固定でテキストが伸びないので height 固定でもクリップしない。
77
+ {
78
+ width: spec.iconBox,
79
+ height: spec.iconBox
80
+ } :
81
+ // labeled は minHeight(fontScale で label が伸びてもクリップしない)。
82
+ {
83
+ minHeight: spec.minHeight,
73
84
  paddingHorizontal: theme.spacing[spec.px]
74
85
  }),
75
86
  ...(colors.border != null ? {
@@ -100,6 +111,7 @@ export function Button(props) {
100
111
  });
101
112
  }
102
113
 
103
- // Phase 2 conformance test 用の contract メタ(§2 A-3)。
114
+ // conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
115
+ // 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
104
116
  Button.__contract = CONTRACTS.button;
105
117
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","ActivityIndicator","Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","SIZE_SPEC","resolveVariant","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Button","props","theme","mode","variant","size","leadingIcon","trailingIcon","disabled","loading","onPress","style","testID","focused","focusHandlers","spec","colors","isDisabled","iconOnly","accessibilityRole","accessibilityState","busy","accessibilityLabel","undefined","pressed","height","flexDirection","alignItems","justifyContent","gap","spacing","borderRadius","radius","md","backgroundColor","pressedBg","bg","width","iconBox","paddingHorizontal","px","border","borderWidth","borderColor","opacity","children","color","textColor","font","weight","label","visible","__contract","button"],"sourceRoot":"../../../src","sources":["primitives/Button.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","ActivityIndicator","Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","BUTTON_SIZE_SPEC","resolveButtonColors","resolveButtonHitSlop","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Button","props","theme","mode","variant","size","leadingIcon","trailingIcon","disabled","loading","onPress","style","testID","focused","focusHandlers","spec","colors","isDisabled","iconOnly","accessibilityRole","accessibilityState","busy","accessibilityLabel","undefined","hitSlop","pressed","flexDirection","alignItems","justifyContent","gap","spacing","borderRadius","radius","md","backgroundColor","pressedBg","bg","width","iconBox","height","minHeight","paddingHorizontal","px","border","borderWidth","borderColor","opacity","children","color","textColor","font","weight","label","visible","__contract","button"],"sourceRoot":"../../../src","sources":["primitives/Button.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SACEC,iBAAiB,EACjBC,SAAS,EACTC,IAAI,QAGC,cAAc;AACrB,SAASC,IAAI,QAAQ,WAAW;AAChC,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,YAAY,EAAEC,SAAS,QAAQ,2BAA2B;AACnE,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SACEC,gBAAgB,EAChBC,mBAAmB,EACnBC,oBAAoB,QAGf,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAqB5B,OAAO,SAASC,MAAMA,CAACC,KAAkB,EAAE;EACzC,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;EAClC,MAAM;IACJiB,OAAO,GAAG,WAAW;IACrBC,IAAI,GAAG,QAAQ;IACfC,WAAW;IACXC,YAAY;IACZC,QAAQ,GAAG,KAAK;IAChBC,OAAO,GAAG,KAAK;IACfC,OAAO;IACPC,KAAK;IACLC;EACF,CAAC,GAAGX,KAAK;EACT,MAAM;IAAEY,OAAO;IAAEC;EAAc,CAAC,GAAG1B,YAAY,CAAC,CAAC;EAEjD,MAAM2B,IAAI,GAAGxB,gBAAgB,CAACc,IAAI,CAAC;EACnC,MAAMW,MAAM,GAAGlC,OAAO,CAAC,MAAMU,mBAAmB,CAACU,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC,EAAE,CAACF,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC,CAAC;EAC/F,MAAMa,UAAU,GAAGT,QAAQ,IAAIC,OAAO;EACtC,MAAMS,QAAQ,GAAGjB,KAAK,CAACiB,QAAQ,KAAK,IAAI;EAExC,oBACEnB,KAAA,CAACf,SAAS;IAAA,GACJ8B,aAAa;IACjBJ,OAAO,EAAEA,OAAQ;IACjBF,QAAQ,EAAES,UAAW;IACrBE,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAE;MAAEZ,QAAQ,EAAES,UAAU;MAAEI,IAAI,EAAEZ;IAAQ,CAAE;IAC5Da,kBAAkB,EAAEJ,QAAQ,GAAGjB,KAAK,CAACqB,kBAAkB,GAAGC,SAAU;IACpEC,OAAO,EAAE/B,oBAAoB,CAACY,IAAI,EAAEa,QAAQ,CAAE;IAC9CN,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAEA,CAAC;MAAEc;IAAQ,CAAC,KAAK,CACtB;MACEC,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE,QAAQ;MACxBC,GAAG,EAAE3B,KAAK,CAAC4B,OAAO,CAAC,GAAG,CAAC;MACvBC,YAAY,EAAE7B,KAAK,CAAC8B,MAAM,CAACC,EAAE;MAC7BC,eAAe,EAAET,OAAO,IAAI,CAACR,UAAU,GAAGD,MAAM,CAACmB,SAAS,GAAGnB,MAAM,CAACoB,EAAE;MACtE,IAAIlB,QAAQ;MACR;MACA;MACA;QAAEmB,KAAK,EAAEtB,IAAI,CAACuB,OAAO;QAAEC,MAAM,EAAExB,IAAI,CAACuB;MAAQ,CAAC;MAC7C;MACA;QAAEE,SAAS,EAAEzB,IAAI,CAACyB,SAAS;QAAEC,iBAAiB,EAAEvC,KAAK,CAAC4B,OAAO,CAACf,IAAI,CAAC2B,EAAE;MAAE,CAAC,CAAC;MAC7E,IAAI1B,MAAM,CAAC2B,MAAM,IAAI,IAAI,GAAG;QAAEC,WAAW,EAAE,CAAC;QAAEC,WAAW,EAAE7B,MAAM,CAAC2B;MAAO,CAAC,GAAG,IAAI,CAAC;MAClFG,OAAO,EAAE7B,UAAU,GAAG,GAAG,GAAG;IAC9B,CAAC,EACDN,KAAK,CACL;IAAAoC,QAAA,GAEDtC,OAAO,gBACNd,IAAA,CAACZ,iBAAiB;MAACiE,KAAK,EAAEhC,MAAM,CAACiC;IAAU,CAAE,CAAC,gBAE9ClD,KAAA,CAAAF,SAAA;MAAAkD,QAAA,GACGzC,WAAW,IAAI,IAAI,iBAAIX,IAAA,CAACV,IAAI;QAAA8D,QAAA,EAAEzC;MAAW,CAAO,CAAC,EACjD,CAACY,QAAQ,iBACRvB,IAAA,CAACT,IAAI;QAACkB,OAAO,EAAEW,IAAI,CAACmC,IAAK;QAACC,MAAM,EAAC,QAAQ;QAACxC,KAAK,EAAE;UAAEqC,KAAK,EAAEhC,MAAM,CAACiC;QAAU,CAAE;QAAAF,QAAA,EAC1E9C,KAAK,CAACmD;MAAK,CACR,CACP,EACA7C,YAAY,IAAI,IAAI,iBAAIZ,IAAA,CAACV,IAAI;QAAA8D,QAAA,EAAExC;MAAY,CAAO,CAAC;IAAA,CACpD,CACH,eACDZ,IAAA,CAACN,SAAS;MAACgE,OAAO,EAAExC,OAAO,IAAI,CAACI,UAAW;MAACe,MAAM,EAAE9B,KAAK,CAAC8B,MAAM,CAACC;IAAG,CAAE,CAAC;EAAA,CAC9D,CAAC;AAEhB;;AAEA;AACA;AACAjC,MAAM,CAACsD,UAAU,GAAGhE,SAAS,CAACiE,MAAM","ignoreList":[]}
@@ -63,6 +63,7 @@ export function Metric({
63
63
  });
64
64
  }
65
65
 
66
- // Phase 2 conformance test 用の contract メタ(§2 A-3)。
66
+ // conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
67
+ // 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
67
68
  Metric.__contract = CONTRACTS.metric;
68
69
  //# sourceMappingURL=Metric.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","Text","RNText","View","useTheme","CONTRACTS","resolveMetricStyles","jsx","_jsx","jsxs","_jsxs","Metric","value","unit","label","size","align","style","testID","theme","mode","styles","a11yLabel","filter","Boolean","join","accessible","accessibilityLabel","alignItems","children","flexDirection","valueStyle","unitStyle","labelStyle","__contract","metric"],"sourceRoot":"../../../src","sources":["primitives/Metric.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,IAAI,IAAIC,MAAM,EAAEC,IAAI,QAAwC,cAAc;AACnF,SAASC,QAAQ,QAAQ,mBAAU;AACnC,SAASC,SAAS,QAAqB,gCAA6B;AACpE,SAASC,mBAAmB,QAAQ,oBAAiB;;AAEjB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAepC,OAAO,SAASC,MAAMA,CAAC;EACrBC,KAAK;EACLC,IAAI;EACJC,KAAK;EACLC,IAAI,GAAG,IAAI;EACXC,KAAK,GAAG,OAAO;EACfC,KAAK;EACLC;AACW,CAAC,EAAE;EACd,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;;EAElC;EACA,MAAMiB,MAAM,GAAGrB,OAAO,CAAC,MAAMM,mBAAmB,CAACa,KAAK,EAAEC,IAAI,EAAEL,IAAI,CAAC,EAAE,CAACI,KAAK,EAAEC,IAAI,EAAEL,IAAI,CAAC,CAAC;EAEzF,MAAMO,SAAS,GAAG,CAACV,KAAK,EAAEC,IAAI,EAAEC,KAAK,CAAC,CAACS,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;EAEhE,oBACEf,KAAA,CAACP,IAAI;IACHe,MAAM,EAAEA,MAAO;IACfQ,UAAU;IACVC,kBAAkB,EAAEL,SAAU;IAC9BL,KAAK,EAAE,CAAC;MAAEW,UAAU,EAAEZ,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAG;IAAa,CAAC,EAAEC,KAAK,CAAE;IAAAY,QAAA,gBAE7EnB,KAAA,CAACP,IAAI;MAACc,KAAK,EAAE;QAAEa,aAAa,EAAE,KAAK;QAAEF,UAAU,EAAE;MAAW,CAAE;MAAAC,QAAA,gBAC5DrB,IAAA,CAACN,MAAM;QAACe,KAAK,EAAEI,MAAM,CAACU,UAAW;QAAAF,QAAA,EAAEjB;MAAK,CAAS,CAAC,EACjDC,IAAI,IAAI,IAAI,iBAAIL,IAAA,CAACN,MAAM;QAACe,KAAK,EAAEI,MAAM,CAACW,SAAU;QAAAH,QAAA,EAAEhB;MAAI,CAAS,CAAC;IAAA,CAC7D,CAAC,EACNC,KAAK,IAAI,IAAI,iBAAIN,IAAA,CAACN,MAAM;MAACe,KAAK,EAAEI,MAAM,CAACY,UAAW;MAAAJ,QAAA,EAAEf;IAAK,CAAS,CAAC;EAAA,CAChE,CAAC;AAEX;;AAEA;AACAH,MAAM,CAACuB,UAAU,GAAG7B,SAAS,CAAC8B,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","Text","RNText","View","useTheme","CONTRACTS","resolveMetricStyles","jsx","_jsx","jsxs","_jsxs","Metric","value","unit","label","size","align","style","testID","theme","mode","styles","a11yLabel","filter","Boolean","join","accessible","accessibilityLabel","alignItems","children","flexDirection","valueStyle","unitStyle","labelStyle","__contract","metric"],"sourceRoot":"../../../src","sources":["primitives/Metric.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,IAAI,IAAIC,MAAM,EAAEC,IAAI,QAAwC,cAAc;AACnF,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAqB,gCAAgC;AACvE,SAASC,mBAAmB,QAAQ,oBAAoB;;AAEpB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAepC,OAAO,SAASC,MAAMA,CAAC;EACrBC,KAAK;EACLC,IAAI;EACJC,KAAK;EACLC,IAAI,GAAG,IAAI;EACXC,KAAK,GAAG,OAAO;EACfC,KAAK;EACLC;AACW,CAAC,EAAE;EACd,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAAC,CAAC;;EAElC;EACA,MAAMiB,MAAM,GAAGrB,OAAO,CAAC,MAAMM,mBAAmB,CAACa,KAAK,EAAEC,IAAI,EAAEL,IAAI,CAAC,EAAE,CAACI,KAAK,EAAEC,IAAI,EAAEL,IAAI,CAAC,CAAC;EAEzF,MAAMO,SAAS,GAAG,CAACV,KAAK,EAAEC,IAAI,EAAEC,KAAK,CAAC,CAACS,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;EAEhE,oBACEf,KAAA,CAACP,IAAI;IACHe,MAAM,EAAEA,MAAO;IACfQ,UAAU;IACVC,kBAAkB,EAAEL,SAAU;IAC9BL,KAAK,EAAE,CAAC;MAAEW,UAAU,EAAEZ,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAG;IAAa,CAAC,EAAEC,KAAK,CAAE;IAAAY,QAAA,gBAE7EnB,KAAA,CAACP,IAAI;MAACc,KAAK,EAAE;QAAEa,aAAa,EAAE,KAAK;QAAEF,UAAU,EAAE;MAAW,CAAE;MAAAC,QAAA,gBAC5DrB,IAAA,CAACN,MAAM;QAACe,KAAK,EAAEI,MAAM,CAACU,UAAW;QAAAF,QAAA,EAAEjB;MAAK,CAAS,CAAC,EACjDC,IAAI,IAAI,IAAI,iBAAIL,IAAA,CAACN,MAAM;QAACe,KAAK,EAAEI,MAAM,CAACW,SAAU;QAAAH,QAAA,EAAEhB;MAAI,CAAS,CAAC;IAAA,CAC7D,CAAC,EACNC,KAAK,IAAI,IAAI,iBAAIN,IAAA,CAACN,MAAM;MAACe,KAAK,EAAEI,MAAM,CAACY,UAAW;MAAAJ,QAAA,EAAEf;IAAK,CAAS,CAAC;EAAA,CAChE,CAAC;AAEX;;AAEA;AACA;AACAH,MAAM,CAACuB,UAAU,GAAG7B,SAAS,CAAC8B,MAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveRowStyle","jsx","_jsx","Row","gap","align","justify","wrap","style","testID","children","theme","layout","__contract","row"],"sourceRoot":"../../../src","sources":["primitives/Row.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAQ,gCAA6B;AACvD,SAASC,eAAe,QAAuD,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgB9F,OAAO,SAASC,GAAGA,CAAC;EAClBC,GAAG;EACHC,KAAK,GAAG,QAAQ;EAChBC,OAAO,GAAG,OAAO;EACjBC,IAAI,GAAG,KAAK;EACZC,KAAK;EACLC,MAAM;EACNC;AACQ,CAAC,EAAE;EACX,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAE5B,MAAMc,MAAM,GAAGhB,OAAO,CACpB,MAAMI,eAAe,CAACW,KAAK,EAAE;IAAEP,GAAG;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAK,CAAC,CAAC,EAC3D,CAACI,KAAK,EAAEP,GAAG,EAAEC,KAAK,EAAEC,OAAO,EAAEC,IAAI,CACnC,CAAC;EAED,oBACEL,IAAA,CAACL,IAAI;IAACW,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAP,GAAG,CAACU,UAAU,GAAGd,SAAS,CAACe,GAAG","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveRowStyle","jsx","_jsx","Row","gap","align","justify","wrap","style","testID","children","theme","layout","__contract","row"],"sourceRoot":"../../../src","sources":["primitives/Row.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAmB;AAE5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,eAAe,QAAuD,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgBjG,OAAO,SAASC,GAAGA,CAAC;EAClBC,GAAG;EACHC,KAAK,GAAG,QAAQ;EAChBC,OAAO,GAAG,OAAO;EACjBC,IAAI,GAAG,KAAK;EACZC,KAAK;EACLC,MAAM;EACNC;AACQ,CAAC,EAAE;EACX,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAE5B,MAAMc,MAAM,GAAGhB,OAAO,CACpB,MAAMI,eAAe,CAACW,KAAK,EAAE;IAAEP,GAAG;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAK,CAAC,CAAC,EAC3D,CAACI,KAAK,EAAEP,GAAG,EAAEC,KAAK,EAAEC,OAAO,EAAEC,IAAI,CACnC,CAAC;EAED,oBACEL,IAAA,CAACL,IAAI;IAACW,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAP,GAAG,CAACU,UAAU,GAAGd,SAAS,CAACe,GAAG","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveStackStyle","jsx","_jsx","Stack","gap","align","style","testID","children","theme","layout","__contract","stack"],"sourceRoot":"../../../src","sources":["primitives/Stack.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAQ,gCAA6B;AACvD,SAASC,iBAAiB,QAA0C,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYrF,OAAO,SAASC,KAAKA,CAAC;EAAEC,GAAG;EAAEC,KAAK,GAAG,SAAS;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAqB,CAAC,EAAE;EACrF,MAAM;IAAEC;EAAM,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAE5B,MAAMY,MAAM,GAAGd,OAAO,CACpB,MAAMI,iBAAiB,CAACS,KAAK,EAAE;IAAEL,GAAG;IAAEC;EAAM,CAAC,CAAC,EAC9C,CAACI,KAAK,EAAEL,GAAG,EAAEC,KAAK,CACpB,CAAC;EAED,oBACEH,IAAA,CAACL,IAAI;IAACS,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAL,KAAK,CAACQ,UAAU,GAAGZ,SAAS,CAACa,KAAK","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveStackStyle","jsx","_jsx","Stack","gap","align","style","testID","children","theme","layout","__contract","stack"],"sourceRoot":"../../../src","sources":["primitives/Stack.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAmB;AAE5C,SAASC,SAAS,QAAQ,gCAAgC;AAC1D,SAASC,iBAAiB,QAA0C,mBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYxF,OAAO,SAASC,KAAKA,CAAC;EAAEC,GAAG;EAAEC,KAAK,GAAG,SAAS;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAqB,CAAC,EAAE;EACrF,MAAM;IAAEC;EAAM,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAE5B,MAAMY,MAAM,GAAGd,OAAO,CACpB,MAAMI,iBAAiB,CAACS,KAAK,EAAE;IAAEL,GAAG;IAAEC;EAAM,CAAC,CAAC,EAC9C,CAACI,KAAK,EAAEL,GAAG,EAAEC,KAAK,CACpB,CAAC;EAED,oBACEH,IAAA,CAACL,IAAI;IAACS,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAL,KAAK,CAACQ,UAAU,GAAGZ,SAAS,CAACa,KAAK","ignoreList":[]}
@@ -11,8 +11,8 @@
11
11
  * 色・寸法の決定は pure resolver(tag.styles.ts)に分離、recipe との機械照合は
12
12
  * scripts/lib/tag-conformance.test.ts が行う。
13
13
  * - label は Text primitive。filter-chip active の文字色だけ primary.700(SemanticColors 外なので style 上書き)。
14
- * - focus outline は Button(Step8) で Pressable focus handling を共通化してから Tag にも適用する
15
- * (§1 は Phase1 scope だが acceptance 外。今は accessibilityState のみ。Button 実装時に回収)。
14
+ * - focus outline は Button と共通の Pressable focus handling(_internal/focus-ring)を使う
15
+ * (removable / filter-chip の押せる要素に FocusRing を描く)。
16
16
  */
17
17
 
18
18
  import { Pressable, View } from "react-native";
@@ -20,7 +20,7 @@ import { Text } from "./Text.js";
20
20
  import { useTheme } from "../theme/index.js";
21
21
  import { useFocusRing, FocusRing } from "./_internal/focus-ring.js";
22
22
  import { CONTRACTS } from "../contracts/contract-types.js";
23
- import { resolveTagBase, resolveTagVariant } from "./tag.styles.js";
23
+ import { resolveTagBase, resolveTagVariant, TAG_FILTER_CHIP_VERTICAL_HIT_SLOP, TAG_REMOVE_TAP_TARGET } from "./tag.styles.js";
24
24
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
25
  /** 共通形状(px-3 py-1 rounded-full。寸法は resolver、layout はここで足す)。 */
26
26
  function useTagBase() {
@@ -57,6 +57,13 @@ function FilterChipTag(props) {
57
57
  accessibilityRole: "button",
58
58
  accessibilityState: {
59
59
  selected
60
+ }
61
+ // 視覚高さ 34pt(padding 駆動)に縦 hitSlop を足して実効 44pt(A11Y_MIN_TAP_TARGET_44)。
62
+ // 背景と枠を持つので minHeight で伸ばすと見た目が変わる → 当たり判定だけ広げる。
63
+ ,
64
+ hitSlop: {
65
+ top: TAG_FILTER_CHIP_VERTICAL_HIT_SLOP,
66
+ bottom: TAG_FILTER_CHIP_VERTICAL_HIT_SLOP
60
67
  },
61
68
  testID: testID,
62
69
  style: [base, {
@@ -109,10 +116,10 @@ function RemovableTag(props) {
109
116
  onPress: onRemove,
110
117
  accessibilityRole: "button",
111
118
  accessibilityLabel: removeAccessibilityLabel,
112
- hitSlop: 10,
119
+ hitSlop: TAG_REMOVE_TAP_TARGET.hitSlop,
113
120
  style: {
114
- minWidth: 24,
115
- minHeight: 24,
121
+ minWidth: TAG_REMOVE_TAP_TARGET.minWidth,
122
+ minHeight: TAG_REMOVE_TAP_TARGET.minHeight,
116
123
  alignItems: "center",
117
124
  justifyContent: "center"
118
125
  },
@@ -155,6 +162,7 @@ export function Tag(props) {
155
162
  });
156
163
  }
157
164
 
158
- // Phase 2 conformance test 用の contract メタ(§2 A-3)。
165
+ // conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
166
+ // 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
159
167
  Tag.__contract = CONTRACTS.tag;
160
168
  //# sourceMappingURL=Tag.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","resolveTagBase","resolveTagVariant","jsx","_jsx","jsxs","_jsxs","useTagBase","theme","flexDirection","alignItems","FilterChipTag","props","mode","base","focused","focusHandlers","label","selected","onToggle","style","testID","v","onPress","accessibilityRole","accessibilityState","backgroundColor","bg","borderWidth","borderColor","border","children","variant","font","color","textColor","undefined","visible","radius","full","RemovableTag","onRemove","removeAccessibilityLabel","accessibilityLabel","hitSlop","minWidth","minHeight","justifyContent","Tag","__contract","tag"],"sourceRoot":"../../../src","sources":["primitives/Tag.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","resolveTagBase","resolveTagVariant","TAG_FILTER_CHIP_VERTICAL_HIT_SLOP","TAG_REMOVE_TAP_TARGET","jsx","_jsx","jsxs","_jsxs","useTagBase","theme","flexDirection","alignItems","FilterChipTag","props","mode","base","focused","focusHandlers","label","selected","onToggle","style","testID","v","onPress","accessibilityRole","accessibilityState","hitSlop","top","bottom","backgroundColor","bg","borderWidth","borderColor","border","children","variant","font","color","textColor","undefined","visible","radius","full","RemovableTag","onRemove","removeAccessibilityLabel","accessibilityLabel","minWidth","minHeight","justifyContent","Tag","__contract","tag"],"sourceRoot":"../../../src","sources":["primitives/Tag.tsx"],"mappings":"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","ignoreList":[]}
@@ -8,15 +8,18 @@
8
8
  * 構造一致している前提で theme.typography.fontSize[variant] を引く。乖離したら型エラーで検知
9
9
  * される(= A-3 conformance の型レベル最低ライン、§2)。
10
10
  * - 色は token キーのみ(生 hex 不可、§5 lint の意味を保つ)。
11
+ * - fontScale 制御(allowFontScaling / maxFontSizeMultiplier)は RN Text へ素通しする。
12
+ * 既定は未指定 = RN 既定(OS の文字サイズ設定に追随)。器が固定寸法の箇所だけ opt-in で絞る。
11
13
  * - letterSpacing は role(heading/body) の ratio を fontSize から pt 換算(text.styles.ts)。
12
14
  * - 形状(fontSize/lineHeight/letterSpacing/fontWeight)は variant/role/weight 依存なので useMemo で
13
- * 分離(B-3 の「形状/色 分離 + 参照安定性」を Phase1 は useMemo で満たす。StyleSheet 事前生成の
14
- * 最適化は Card で実証予定)。色のみ render 時に colors から取る。
15
+ * 分離(B-3 の「形状/色 分離 + 参照安定性」は useMemo で満たす。StyleSheet 事前生成による
16
+ * 最適化はどのコンポーネントでも採っていない)。色のみ render 時に colors から取る。
15
17
  */
16
18
 
17
19
  import { useMemo } from "react";
18
20
  import { StyleSheet, Text as RNText } from "react-native";
19
- import { useTheme, DEFAULT_MIN_LINE_HEIGHT_RATIO, minLineHeightFor } from "../theme/index.js";
21
+ import { useTheme } from "../theme/index.js";
22
+ import { minLineHeightFor, minRatioOf } from "../theme/line-height.js";
20
23
  import { CONTRACTS } from "../contracts/contract-types.js";
21
24
  import { resolveTextShape } from "./text.styles.js";
22
25
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -26,6 +29,8 @@ export function Text({
26
29
  color = "text-default",
27
30
  role = "body",
28
31
  numberOfLines,
32
+ allowFontScaling,
33
+ maxFontSizeMultiplier,
29
34
  style,
30
35
  testID,
31
36
  children
@@ -50,18 +55,21 @@ export function Text({
50
55
  // 「Text の文字サイズは variant が決める」契約とクランプ基準を一致させる。
51
56
  if (typeof flat.fontSize !== "number") flat.fontSize = shape.fontSize;
52
57
  if (flat.lineHeight !== undefined) {
53
- const floor = minLineHeightFor(flat.fontSize ?? 0, theme.typography.minLineHeightRatio ?? DEFAULT_MIN_LINE_HEIGHT_RATIO);
58
+ const floor = minLineHeightFor(flat.fontSize ?? 0, minRatioOf(theme));
54
59
  if (flat.lineHeight < floor) flat.lineHeight = floor;
55
60
  }
56
61
  return /*#__PURE__*/_jsx(RNText, {
57
62
  style: flat,
58
63
  numberOfLines: numberOfLines,
64
+ allowFontScaling: allowFontScaling,
65
+ maxFontSizeMultiplier: maxFontSizeMultiplier,
59
66
  accessibilityRole: role === "heading" ? "header" : undefined,
60
67
  testID: testID,
61
68
  children: children
62
69
  });
63
70
  }
64
71
 
65
- // Phase 2 conformance test 用の contract メタ(§2 A-3)。
72
+ // conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
73
+ // 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
66
74
  Text.__contract = CONTRACTS.text;
67
75
  //# sourceMappingURL=Text.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","StyleSheet","Text","RNText","useTheme","DEFAULT_MIN_LINE_HEIGHT_RATIO","minLineHeightFor","CONTRACTS","resolveTextShape","jsx","_jsx","variant","weight","color","role","numberOfLines","style","testID","children","theme","colors","shape","flat","flatten","fontSize","lineHeight","undefined","floor","typography","minLineHeightRatio","accessibilityRole","__contract","text"],"sourceRoot":"../../../src","sources":["primitives/Text.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,UAAU,EAAEC,IAAI,IAAIC,MAAM,QAAwC,cAAc;AACzF,SAASC,QAAQ,EAAEC,6BAA6B,EAAEC,gBAAgB,QAAQ,mBAAU;AAEpF,SAASC,SAAS,QAAwB,gCAA6B;AACvE,SAASC,gBAAgB,QAAuB,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBhE,OAAO,SAASR,IAAIA,CAAC;EACnBS,OAAO,GAAG,MAAM;EAChBC,MAAM;EACNC,KAAK,GAAG,cAAc;EACtBC,IAAI,GAAG,MAAM;EACbC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACS,CAAC,EAAE;EACZ,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGhB,QAAQ,CAAC,CAAC;;EAEpC;EACA;EACA,MAAMiB,KAAK,GAAGrB,OAAO,CACnB,MAAMQ,gBAAgB,CAACW,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAAC,EACpD,CAACO,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAC/B,CAAC;;EAED;EACA;EACA;EACA,MAAMU,IAAe,GAAGrB,UAAU,CAACsB,OAAO,CAAC,CAACF,KAAK,EAAE;IAAER,KAAK,EAAEO,MAAM,CAACP,KAAK;EAAE,CAAC,EAAEG,KAAK,CAAC,CAAC;EACpF;EACA;EACA;EACA,IAAI,OAAOM,IAAI,CAACE,QAAQ,KAAK,QAAQ,EAAEF,IAAI,CAACE,QAAQ,GAAGH,KAAK,CAACG,QAAQ;EACrE,IAAIF,IAAI,CAACG,UAAU,KAAKC,SAAS,EAAE;IACjC,MAAMC,KAAK,GAAGrB,gBAAgB,CAC5BgB,IAAI,CAACE,QAAQ,IAAI,CAAC,EAClBL,KAAK,CAACS,UAAU,CAACC,kBAAkB,IAAIxB,6BACzC,CAAC;IACD,IAAIiB,IAAI,CAACG,UAAU,GAAGE,KAAK,EAAEL,IAAI,CAACG,UAAU,GAAGE,KAAK;EACtD;EAEA,oBACEjB,IAAA,CAACP,MAAM;IACLa,KAAK,EAAEM,IAAK;IACZP,aAAa,EAAEA,aAAc;IAC7Be,iBAAiB,EAAEhB,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAGY,SAAU;IAC7DT,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAEdA;EAAQ,CACH,CAAC;AAEb;;AAEA;AACAhB,IAAI,CAAC6B,UAAU,GAAGxB,SAAS,CAACyB,IAAI","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","StyleSheet","Text","RNText","useTheme","minLineHeightFor","minRatioOf","CONTRACTS","resolveTextShape","jsx","_jsx","variant","weight","color","role","numberOfLines","allowFontScaling","maxFontSizeMultiplier","style","testID","children","theme","colors","shape","flat","flatten","fontSize","lineHeight","undefined","floor","accessibilityRole","__contract","text"],"sourceRoot":"../../../src","sources":["primitives/Text.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,UAAU,EAAEC,IAAI,IAAIC,MAAM,QAAwC,cAAc;AACzF,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,gBAAgB,EAAEC,UAAU,QAAQ,yBAAyB;AAEtE,SAASC,SAAS,QAAwB,gCAAgC;AAC1E,SAASC,gBAAgB,QAAuB,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA+BnE,OAAO,SAASR,IAAIA,CAAC;EACnBS,OAAO,GAAG,MAAM;EAChBC,MAAM;EACNC,KAAK,GAAG,cAAc;EACtBC,IAAI,GAAG,MAAM;EACbC,aAAa;EACbC,gBAAgB;EAChBC,qBAAqB;EACrBC,KAAK;EACLC,MAAM;EACNC;AACS,CAAC,EAAE;EACZ,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGlB,QAAQ,CAAC,CAAC;;EAEpC;EACA;EACA,MAAMmB,KAAK,GAAGvB,OAAO,CACnB,MAAMQ,gBAAgB,CAACa,KAAK,EAAEV,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAAC,EACpD,CAACS,KAAK,EAAEV,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAC/B,CAAC;;EAED;EACA;EACA;EACA,MAAMY,IAAe,GAAGvB,UAAU,CAACwB,OAAO,CAAC,CAACF,KAAK,EAAE;IAAEV,KAAK,EAAES,MAAM,CAACT,KAAK;EAAE,CAAC,EAAEK,KAAK,CAAC,CAAC;EACpF;EACA;EACA;EACA,IAAI,OAAOM,IAAI,CAACE,QAAQ,KAAK,QAAQ,EAAEF,IAAI,CAACE,QAAQ,GAAGH,KAAK,CAACG,QAAQ;EACrE,IAAIF,IAAI,CAACG,UAAU,KAAKC,SAAS,EAAE;IACjC,MAAMC,KAAK,GAAGxB,gBAAgB,CAACmB,IAAI,CAACE,QAAQ,IAAI,CAAC,EAAEpB,UAAU,CAACe,KAAK,CAAC,CAAC;IACrE,IAAIG,IAAI,CAACG,UAAU,GAAGE,KAAK,EAAEL,IAAI,CAACG,UAAU,GAAGE,KAAK;EACtD;EAEA,oBACEnB,IAAA,CAACP,MAAM;IACLe,KAAK,EAAEM,IAAK;IACZT,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCC,qBAAqB,EAAEA,qBAAsB;IAC7Ca,iBAAiB,EAAEhB,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAGc,SAAU;IAC7DT,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAEdA;EAAQ,CACH,CAAC;AAEb;;AAEA;AACA;AACAlB,IAAI,CAAC6B,UAAU,GAAGxB,SAAS,CAACyB,IAAI","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["useState","View","useTheme","jsx","_jsx","useFocusRing","focused","setFocused","focusHandlers","onFocus","onBlur","INSET","FocusRing","visible","radius","theme","pointerEvents","style","position","top","left","right","bottom","borderWidth","borderColor","color","primary","borderRadius"],"sourceRoot":"../../../../src","sources":["primitives/_internal/focus-ring.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,QAAQ,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvC,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAC7C,OAAO;IACLM,OAAO;IACPE,aAAa,EAAE;MACbC,OAAO,EAAEA,CAAA,KAAMF,UAAU,CAAC,IAAI,CAAC;MAC/BG,MAAM,EAAEA,CAAA,KAAMH,UAAU,CAAC,KAAK;IAChC;EACF,CAAC;AACH;AAQA,MAAMI,KAAK,GAAG,CAAC;AAEf,OAAO,SAASC,SAASA,CAAC;EAAEC,OAAO;EAAEC;AAAuB,CAAC,EAAE;EAC7D,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAACW,OAAO,EAAE,OAAO,IAAI;EACzB,oBACET,IAAA,CAACH,IAAI;IACHe,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,GAAG,EAAE,CAACR,KAAK;MACXS,IAAI,EAAE,CAACT,KAAK;MACZU,KAAK,EAAE,CAACV,KAAK;MACbW,MAAM,EAAE,CAACX,KAAK;MACdY,WAAW,EAAE,CAAC;MACdC,WAAW,EAAET,KAAK,CAACU,KAAK,CAACC,OAAO,CAAC,KAAK,CAAC;MACvCC,YAAY,EAAEb,MAAM,GAAGH;IACzB;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"names":["useState","View","useTheme","jsx","_jsx","useFocusRing","focused","setFocused","focusHandlers","onFocus","onBlur","INSET","FocusRing","visible","radius","theme","pointerEvents","style","position","top","left","right","bottom","borderWidth","borderColor","color","primary","borderRadius"],"sourceRoot":"../../../../src","sources":["primitives/_internal/focus-ring.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,QAAQ,QAAQ,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAC7C,OAAO;IACLM,OAAO;IACPE,aAAa,EAAE;MACbC,OAAO,EAAEA,CAAA,KAAMF,UAAU,CAAC,IAAI,CAAC;MAC/BG,MAAM,EAAEA,CAAA,KAAMH,UAAU,CAAC,KAAK;IAChC;EACF,CAAC;AACH;AAQA,MAAMI,KAAK,GAAG,CAAC;AAEf,OAAO,SAASC,SAASA,CAAC;EAAEC,OAAO;EAAEC;AAAuB,CAAC,EAAE;EAC7D,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAACW,OAAO,EAAE,OAAO,IAAI;EACzB,oBACET,IAAA,CAACH,IAAI;IACHe,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,GAAG,EAAE,CAACR,KAAK;MACXS,IAAI,EAAE,CAACT,KAAK;MACZU,KAAK,EAAE,CAACV,KAAK;MACbW,MAAM,EAAE,CAACX,KAAK;MACdY,WAAW,EAAE,CAAC;MACdC,WAAW,EAAET,KAAK,CAACU,KAAK,CAACC,OAAO,CAAC,KAAK,CAAC;MACvCC,YAAY,EAAEb,MAAM,GAAGH;IACzB;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
@@ -1,41 +1,91 @@
1
1
  "use strict";
2
2
 
3
3
  /**
4
- * button.styles — Button の pure style resolver(P4 conformance 対応で Button.tsx から分離)。
4
+ * button.styles — Button の pure style resolver(styleRefs conformance 対応で Button.tsx から分離)。
5
5
  *
6
6
  * react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
7
7
  * 直接実行できる。recipes/app/button.recipe.json(melta-contracts の styleRefs)との
8
- * 機械照合は scripts/lib/recipe-conformance.test.ts が行う。
8
+ * 機械照合は scripts/lib/recipe-conformance.test.ts が行う(層B)。
9
+ *
10
+ * ⚠️ このファイルは resolver 機構の**最初の実装**で、戻り値が slot 単位に揃っていない
11
+ * (色だけを返し、寸法は component 側で組む)。現行の書き方は AGENTS.md「style resolver の規約」
12
+ * を参照すること — 新規 / 改修は alert.styles.ts・textfield.styles.ts の形に寄せる。
9
13
  */
10
14
 
11
- /** size → height / 横 padding / label fontSize / icon box(contract sizes/iconButton と整合)。 */
12
- export const SIZE_SPEC = {
15
+ /**
16
+ * size → 最小高さ / 横 padding / label fontSize / icon box(contract sizes/iconButton と整合)。
17
+ *
18
+ * `minHeight`(`height` ではない)なのは fontScale 対策。label は Text primitive の
19
+ * lineHeight(base = 36pt)で伸びるため、height 固定だと fontScale 1.12x あたりから
20
+ * medium(40pt)で文字がクリップする。recipe 側も 0.7.0 で `minHeight` に変わっている。
21
+ * iconOnly だけは正方形を保つため width/height 固定のまま(recipe の iconOnlyWidth/iconOnlyHeight)。
22
+ */
23
+ export const BUTTON_SIZE_SPEC = {
13
24
  small: {
14
- height: 32,
25
+ minHeight: 32,
15
26
  px: "3",
16
27
  font: "sm",
17
28
  iconBox: 32
18
29
  },
19
30
  medium: {
20
- height: 40,
31
+ minHeight: 40,
21
32
  px: "4",
22
33
  font: "base",
23
34
  iconBox: 40
24
35
  },
25
36
  large: {
26
- height: 48,
37
+ minHeight: 48,
27
38
  px: "6",
28
39
  font: "base",
29
40
  iconBox: 48
30
41
  }
31
42
  };
32
43
 
44
+ /**
45
+ * size → 縦方向の片側 hitSlop(実効タップ標的 44pt 確保。A11Y_MIN_TAP_TARGET_44)。
46
+ *
47
+ * 視覚寸法は据え置き、当たり判定だけを広げる:
48
+ * small 32 + 6*2 = 44 / medium 40 + 2*2 = 44 / large 48(既に 44 以上なので 0)
49
+ *
50
+ * ⚠️ literal で持つ(BUTTON_SIZE_SPEC から自動導出しない)。導出にすると視覚寸法を変えたときに
51
+ * hitSlop が黙って追随してしまい、conformance が構造的に fail-open になる。
52
+ */
53
+ export const BUTTON_VERTICAL_HIT_SLOP = {
54
+ small: 6,
55
+ medium: 2,
56
+ large: 0
57
+ };
58
+
59
+ /** Pressable の hitSlop(RN の Insets)。 */
60
+
61
+ /**
62
+ * size / iconOnly → Pressable に渡す hitSlop。0 のときは undefined(prop を付けない)。
63
+ *
64
+ * - labeled: **縦だけ**。横は付けない — Row の gap 0 で隣接した Button 同士の当たり判定が
65
+ * 重なって押し違いが起きるため(横方向は padding で既に広い)。
66
+ * - iconOnly: 幅も 32/40 と狭い正方形なので**横にも同値**を付ける(左右の隣接は
67
+ * iconOnly ボタンを gap 0 で並べない前提。並べる場合は消費者側で gap を取る)。
68
+ */
69
+ export function resolveButtonHitSlop(size, iconOnly) {
70
+ const slop = BUTTON_VERTICAL_HIT_SLOP[size];
71
+ if (slop === 0) return undefined;
72
+ return iconOnly ? {
73
+ top: slop,
74
+ bottom: slop,
75
+ left: slop,
76
+ right: slop
77
+ } : {
78
+ top: slop,
79
+ bottom: slop
80
+ };
81
+ }
82
+
33
83
  /**
34
84
  * variant → 色解決(button.contract tokenRefs の 1:1 写像)。
35
85
  * 文字色は variant により semantic 外(primary.500 等)もあるため hex 文字列で返し、
36
86
  * Text の style で color 上書きする(Text の color prop は SemanticColors キー限定のため)。
37
87
  */
38
- export function resolveVariant(theme, mode, variant) {
88
+ export function resolveButtonColors(theme, mode, variant) {
39
89
  const c = theme.color;
40
90
  const sem = c.semantic[mode];
41
91
  switch (variant) {
@@ -1 +1 @@
1
- {"version":3,"names":["SIZE_SPEC","small","height","px","font","iconBox","medium","large","resolveVariant","theme","mode","variant","c","color","sem","semantic","bg","primary","pressedBg","textColor","border","status","danger","base","textLight"],"sourceRoot":"../../../src","sources":["primitives/button.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA,OAAO,MAAMA,SAGZ,GAAG;EACFC,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,IAAI;IAAEC,OAAO,EAAE;EAAG,CAAC;EACvDC,MAAM,EAAE;IAAEJ,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG,CAAC;EAC1DE,KAAK,EAAE;IAAEL,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG;AAC1D,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,cAAcA,CAC5BC,KAAkB,EAClBC,IAAe,EACfC,OAAsB,EACmD;EACzE,MAAMC,CAAC,GAAGH,KAAK,CAACI,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACL,IAAI,CAAC;EAC5B,QAAQC,OAAO;IACb,KAAK,WAAW;MACd,OAAO;QAAEK,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAChG,KAAK,UAAU;MACb,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAChCK,SAAS,EAAEL,GAAG,CAAC,cAAc,CAAC;QAC9BM,MAAM,EAAEN,GAAG,CAAC,gBAAgB;MAC9B,CAAC;IACH,KAAK,eAAe;MAClB,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAC1BE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAC3BG,MAAM,EAAER,CAAC,CAACK,OAAO,CAAC,KAAK;MACzB,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QAAED,EAAE,EAAEF,GAAG,CAAC,gBAAgB,CAAC;QAAEI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;IACxG,KAAK,SAAS;MACZ,OAAO;QAAEE,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK;MAAE,CAAC;IAC1F,KAAK,QAAQ;MACX,OAAO;QAAED,EAAE,EAAEJ,CAAC,CAACS,MAAM,CAACC,MAAM,CAACC,IAAI;QAAEL,SAAS,EAAEN,CAAC,CAACS,MAAM,CAACC,MAAM,CAACE,SAAS;QAAEL,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAC7G,KAAK,QAAQ;MACX,OAAO;QAAEE,EAAE,EAAE,aAAa;QAAEE,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;EAClG;AACF","ignoreList":[]}
1
+ {"version":3,"names":["BUTTON_SIZE_SPEC","small","minHeight","px","font","iconBox","medium","large","BUTTON_VERTICAL_HIT_SLOP","resolveButtonHitSlop","size","iconOnly","slop","undefined","top","bottom","left","right","resolveButtonColors","theme","mode","variant","c","color","sem","semantic","bg","primary","pressedBg","textColor","border","status","danger","base","textLight"],"sourceRoot":"../../../src","sources":["primitives/button.styles.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Text","Metric","Tag","Button","Stack","Row"],"sourceRoot":"../../../src","sources":["primitives/index.ts"],"mappings":";;AAAA;;AAEA,SAASA,IAAI,QAAQ,WAAQ;AAC7B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,GAAG,QAAQ,UAAO;AAC3B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,KAAK,QAAQ,YAAS;AAC/B,SAASC,GAAG,QAAQ,UAAO","ignoreList":[]}
1
+ {"version":3,"names":["Text","Metric","Tag","Button","Stack","Row"],"sourceRoot":"../../../src","sources":["primitives/index.ts"],"mappings":";;AAAA;;AAEA,SAASA,IAAI,QAAQ,WAAW;AAChC,SAASC,MAAM,QAAQ,aAAa;AACpC,SAASC,GAAG,QAAQ,UAAU;AAC9B,SAASC,MAAM,QAAQ,aAAa;AACpC,SAASC,KAAK,QAAQ,YAAY;AAClC,SAASC,GAAG,QAAQ,UAAU","ignoreList":[]}
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  // theme index からの runtime import は ThemeProvider → react-native を引くため pure module を直接参照
12
- import { DEFAULT_MIN_LINE_HEIGHT_RATIO, clampLineHeight } from "../theme/line-height.js";
12
+ import { clampLineHeight, minRatioOf } from "../theme/line-height.js";
13
13
  /**
14
14
  * size → value / unit の fontSize token(metric.recipe sizes と整合)。
15
15
  * unit は value の1段下の fontSize(ベースライン揃え用)。
@@ -37,7 +37,7 @@ export function resolveMetricStyles(theme, mode, size) {
37
37
  valueStyle: {
38
38
  fontSize: fontSize[font.value].fontSize,
39
39
  // カスタム theme の未クランプ値への防波堤(text.styles.ts と同じ。根拠は theme/line-height.ts)
40
- lineHeight: clampLineHeight(fontSize[font.value].fontSize, fontSize[font.value].lineHeight, theme.typography.minLineHeightRatio ?? DEFAULT_MIN_LINE_HEIGHT_RATIO),
40
+ lineHeight: clampLineHeight(fontSize[font.value].fontSize, fontSize[font.value].lineHeight, minRatioOf(theme)),
41
41
  fontWeight: theme.typography.fontWeight.bold,
42
42
  color: sem["text-heading"],
43
43
  fontVariant: ["tabular-nums"]
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_MIN_LINE_HEIGHT_RATIO","clampLineHeight","METRIC_FONT","sm","value","unit","md","lg","resolveMetricStyles","theme","mode","size","sem","color","semantic","fontSize","typography","font","valueStyle","lineHeight","minLineHeightRatio","fontWeight","bold","fontVariant","unitStyle","medium","marginLeft","spacing","labelStyle"],"sourceRoot":"../../../src","sources":["primitives/metric.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,SAASA,6BAA6B,EAAEC,eAAe,QAAQ,yBAAsB;AAIrF;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAA0E,GAAG;EACxFC,EAAE,EAAE;IAAEC,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAE;EAAO,CAAC;EACjCC,EAAE,EAAE;IAAEF,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK,CAAC;EAChCE,EAAE,EAAE;IAAEH,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK;AACjC,CAAC;AAyBD;AACA,OAAO,SAASG,mBAAmBA,CACjCC,KAAkB,EAClBC,IAAe,EACfC,IAAgB,EACF;EACd,MAAMC,GAAG,GAAGH,KAAK,CAACI,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;EACtC,MAAMK,QAAQ,GAAGN,KAAK,CAACO,UAAU,CAACD,QAAQ;EAC1C,MAAME,IAAI,GAAGf,WAAW,CAACS,IAAI,CAAC;EAC9B,OAAO;IACLO,UAAU,EAAE;MACVH,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ;MACvC;MACAI,UAAU,EAAElB,eAAe,CACzBc,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ,EAC7BA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACe,UAAU,EAC/BV,KAAK,CAACO,UAAU,CAACI,kBAAkB,IAAIpB,6BACzC,CAAC;MACDqB,UAAU,EAAEZ,KAAK,CAACO,UAAU,CAACK,UAAU,CAACC,IAAI;MAC5CT,KAAK,EAAED,GAAG,CAAC,cAAc,CAAC;MAC1BW,WAAW,EAAE,CAAC,cAAc;IAC9B,CAAC;IACDC,SAAS,EAAE;MACTT,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACZ,IAAI,CAAC,CAACU,QAAQ;MACtCM,UAAU,EAAEZ,KAAK,CAACO,UAAU,CAACK,UAAU,CAACI,MAAM;MAC9CZ,KAAK,EAAED,GAAG,CAAC,YAAY,CAAC;MACxBc,UAAU,EAAEjB,KAAK,CAACkB,OAAO,CAAC,GAAG;IAC/B,CAAC;IACDC,UAAU,EAAE;MACVb,QAAQ,EAAEA,QAAQ,CAACZ,EAAE,CAACY,QAAQ;MAC9BF,KAAK,EAAED,GAAG,CAAC,YAAY;IACzB;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["clampLineHeight","minRatioOf","METRIC_FONT","sm","value","unit","md","lg","resolveMetricStyles","theme","mode","size","sem","color","semantic","fontSize","typography","font","valueStyle","lineHeight","fontWeight","bold","fontVariant","unitStyle","medium","marginLeft","spacing","labelStyle"],"sourceRoot":"../../../src","sources":["primitives/metric.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,SAASA,eAAe,EAAEC,UAAU,QAAQ,yBAAyB;AAIrE;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAA0E,GAAG;EACxFC,EAAE,EAAE;IAAEC,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAE;EAAO,CAAC;EACjCC,EAAE,EAAE;IAAEF,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK,CAAC;EAChCE,EAAE,EAAE;IAAEH,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK;AACjC,CAAC;AAyBD;AACA,OAAO,SAASG,mBAAmBA,CACjCC,KAAkB,EAClBC,IAAe,EACfC,IAAgB,EACF;EACd,MAAMC,GAAG,GAAGH,KAAK,CAACI,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;EACtC,MAAMK,QAAQ,GAAGN,KAAK,CAACO,UAAU,CAACD,QAAQ;EAC1C,MAAME,IAAI,GAAGf,WAAW,CAACS,IAAI,CAAC;EAC9B,OAAO;IACLO,UAAU,EAAE;MACVH,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ;MACvC;MACAI,UAAU,EAAEnB,eAAe,CACzBe,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ,EAC7BA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACe,UAAU,EAC/BlB,UAAU,CAACQ,KAAK,CAClB,CAAC;MACDW,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACC,IAAI;MAC5CR,KAAK,EAAED,GAAG,CAAC,cAAc,CAAC;MAC1BU,WAAW,EAAE,CAAC,cAAc;IAC9B,CAAC;IACDC,SAAS,EAAE;MACTR,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACZ,IAAI,CAAC,CAACU,QAAQ;MACtCK,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACI,MAAM;MAC9CX,KAAK,EAAED,GAAG,CAAC,YAAY,CAAC;MACxBa,UAAU,EAAEhB,KAAK,CAACiB,OAAO,CAAC,GAAG;IAC/B,CAAC;IACDC,UAAU,EAAE;MACVZ,QAAQ,EAAEA,QAAQ,CAACZ,EAAE,CAACY,QAAQ;MAC9BF,KAAK,EAAED,GAAG,CAAC,YAAY;IACzB;EACF,CAAC;AACH","ignoreList":[]}
@@ -8,6 +8,45 @@
8
8
  * 機械照合は scripts/lib/tag-conformance.test.ts が行う。
9
9
  */
10
10
 
11
+ import { CANONICAL_TAP_TARGET } from "../a11y/tap-target.js";
12
+ import { clampLineHeight, minRatioOf } from "../theme/line-height.js";
13
+ /** label の fontSize token キー(component / resolver / 検算が同じキーを読む SSOT)。 */
14
+ export const TAG_SPEC = {
15
+ /** basic / removable の label。 */
16
+ labelFont: "xs",
17
+ /** filter-chip の label(押せる要素なので一段大きい)。 */
18
+ chipLabelFont: "sm"
19
+ };
20
+
21
+ /**
22
+ * removable の × の当たり判定(正典パターン: 視覚 24pt + hitSlop 10 = 実効 44pt)。
23
+ * 親 Tag の高さ(padding 駆動で 34pt 前後)を超えられないので × 自身に持たせる。
24
+ */
25
+ export const TAG_REMOVE_TAP_TARGET = CANONICAL_TAP_TARGET;
26
+
27
+ /**
28
+ * filter-chip(押せる chip 本体)の縦 hitSlop。
29
+ *
30
+ * chip は背景と枠を持つので minHeight で伸ばすと**見た目が変わる**(他 variant と高さが揃わない)。
31
+ * よって視覚寸法は据え置き、当たり判定だけ広げる:
32
+ * 視覚高さ 34pt(paddingVertical 4 × 2 + label sm の lineHeight 26)+ 5 × 2 = 44pt。
33
+ *
34
+ * padding 駆動なので fontScale で視覚高さ自体が伸びる = 拡大時に過剰な当たり判定にならない。
35
+ * ⚠️ literal で持つ(resolveTagFilterChipVisualHeight から導出しない)。導出にすると
36
+ * 寸法変更に hitSlop が黙って追随し、conformance が fail-open になる。
37
+ */
38
+ export const TAG_FILTER_CHIP_VERTICAL_HIT_SLOP = 5;
39
+
40
+ /**
41
+ * filter-chip の視覚高さ(padding 駆動)。conformance が 44pt 到達を検算するための実測値。
42
+ * = paddingVertical × 2 + label(sm)の lineHeight。
43
+ */
44
+ export function resolveTagFilterChipVisualHeight(theme) {
45
+ const font = theme.typography.fontSize[TAG_SPEC.chipLabelFont];
46
+ const lineHeight = clampLineHeight(font.fontSize, font.lineHeight, minRatioOf(theme));
47
+ return resolveTagBase(theme).paddingVertical * 2 + lineHeight;
48
+ }
49
+
11
50
  /** 共通形状(px-3 py-1 gap-1 rounded-full。tag.recipe の全 variant style と共通の寸法キー)。 */
12
51
  export function resolveTagBase(theme) {
13
52
  return {
@@ -35,7 +74,7 @@ export function resolveTagVariant(theme, mode, variant, selected = false) {
35
74
  return {
36
75
  bg: sem["bg-page-alt"],
37
76
  textColor: sem["text-default"],
38
- font: "xs"
77
+ font: TAG_SPEC.labelFont
39
78
  };
40
79
  case "filter-chip":
41
80
  return selected ? {
@@ -43,13 +82,13 @@ export function resolveTagVariant(theme, mode, variant, selected = false) {
43
82
  borderWidth: 1,
44
83
  border: c.primary["200"],
45
84
  textColor: c.primary["700"],
46
- font: "sm"
85
+ font: TAG_SPEC.chipLabelFont
47
86
  } : {
48
87
  bg: sem["bg-surface"],
49
88
  borderWidth: 1,
50
89
  border: sem["border-default"],
51
90
  textColor: sem["text-default"],
52
- font: "sm"
91
+ font: TAG_SPEC.chipLabelFont
53
92
  };
54
93
  }
55
94
  }
@@ -1 +1 @@
1
- {"version":3,"names":["resolveTagBase","theme","gap","spacing","paddingHorizontal","paddingVertical","borderRadius","radius","full","resolveTagVariant","mode","variant","selected","c","color","sem","semantic","bg","textColor","font","primary","borderWidth","border"],"sourceRoot":"../../../src","sources":["primitives/tag.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA,OAAO,SAASA,cAAcA,CAACC,KAAkB,EAK/C;EACA,OAAO;IACLC,GAAG,EAAED,KAAK,CAACE,OAAO,CAAC,GAAG,CAAC;IACvBC,iBAAiB,EAAEH,KAAK,CAACE,OAAO,CAAC,GAAG,CAAC;IACrCE,eAAe,EAAEJ,KAAK,CAACE,OAAO,CAAC,GAAG,CAAC;IACnCG,YAAY,EAAEL,KAAK,CAACM,MAAM,CAACC;EAC7B,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BR,KAAkB,EAClBS,IAAe,EACfC,OAAmB,EACnBC,QAAQ,GAAG,KAAK,EAC6E;EAC7F,MAAMC,CAAC,GAAGZ,KAAK,CAACa,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACN,IAAI,CAAC;EAC5B,QAAQC,OAAO;IACb,KAAK,OAAO;IACZ,KAAK,WAAW;MACd,OAAO;QAAEM,EAAE,EAAEF,GAAG,CAAC,aAAa,CAAC;QAAEG,SAAS,EAAEH,GAAG,CAAC,cAAc,CAAC;QAAEI,IAAI,EAAE;MAAK,CAAC;IAC/E,KAAK,aAAa;MAChB,OAAOP,QAAQ,GACX;QACEK,EAAE,EAAEJ,CAAC,CAACO,OAAO,CAAC,IAAI,CAAC;QACnBC,WAAW,EAAE,CAAC;QACdC,MAAM,EAAET,CAAC,CAACO,OAAO,CAAC,KAAK,CAAC;QACxBF,SAAS,EAAEL,CAAC,CAACO,OAAO,CAAC,KAAK,CAAC;QAC3BD,IAAI,EAAE;MACR,CAAC,GACD;QACEF,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBM,WAAW,EAAE,CAAC;QACdC,MAAM,EAAEP,GAAG,CAAC,gBAAgB,CAAC;QAC7BG,SAAS,EAAEH,GAAG,CAAC,cAAc,CAAC;QAC9BI,IAAI,EAAE;MACR,CAAC;EACT;AACF","ignoreList":[]}
1
+ {"version":3,"names":["CANONICAL_TAP_TARGET","clampLineHeight","minRatioOf","TAG_SPEC","labelFont","chipLabelFont","TAG_REMOVE_TAP_TARGET","TAG_FILTER_CHIP_VERTICAL_HIT_SLOP","resolveTagFilterChipVisualHeight","theme","font","typography","fontSize","lineHeight","resolveTagBase","paddingVertical","gap","spacing","paddingHorizontal","borderRadius","radius","full","resolveTagVariant","mode","variant","selected","c","color","sem","semantic","bg","textColor","primary","borderWidth","border"],"sourceRoot":"../../../src","sources":["primitives/tag.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,oBAAoB,QAAQ,uBAAuB;AAC5D,SAASC,eAAe,EAAEC,UAAU,QAAQ,yBAAyB;AAIrE;AACA,OAAO,MAAMC,QAAQ,GAAG;EACtB;EACAC,SAAS,EAAE,IAAI;EACf;EACAC,aAAa,EAAE;AACjB,CAA2E;;AAE3E;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGN,oBAAoB;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,iCAAiC,GAAG,CAAC;;AAElD;AACA;AACA;AACA;AACA,OAAO,SAASC,gCAAgCA,CAACC,KAAkB,EAAU;EAC3E,MAAMC,IAAI,GAAGD,KAAK,CAACE,UAAU,CAACC,QAAQ,CAACT,QAAQ,CAACE,aAAa,CAAC;EAC9D,MAAMQ,UAAU,GAAGZ,eAAe,CAACS,IAAI,CAACE,QAAQ,EAAEF,IAAI,CAACG,UAAU,EAAEX,UAAU,CAACO,KAAK,CAAC,CAAC;EACrF,OAAOK,cAAc,CAACL,KAAK,CAAC,CAACM,eAAe,GAAG,CAAC,GAAGF,UAAU;AAC/D;;AAEA;AACA,OAAO,SAASC,cAAcA,CAACL,KAAkB,EAK/C;EACA,OAAO;IACLO,GAAG,EAAEP,KAAK,CAACQ,OAAO,CAAC,GAAG,CAAC;IACvBC,iBAAiB,EAAET,KAAK,CAACQ,OAAO,CAAC,GAAG,CAAC;IACrCF,eAAe,EAAEN,KAAK,CAACQ,OAAO,CAAC,GAAG,CAAC;IACnCE,YAAY,EAAEV,KAAK,CAACW,MAAM,CAACC;EAC7B,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/Bb,KAAkB,EAClBc,IAAe,EACfC,OAAmB,EACnBC,QAAQ,GAAG,KAAK,EAC6E;EAC7F,MAAMC,CAAC,GAAGjB,KAAK,CAACkB,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACN,IAAI,CAAC;EAC5B,QAAQC,OAAO;IACb,KAAK,OAAO;IACZ,KAAK,WAAW;MACd,OAAO;QAAEM,EAAE,EAAEF,GAAG,CAAC,aAAa,CAAC;QAAEG,SAAS,EAAEH,GAAG,CAAC,cAAc,CAAC;QAAElB,IAAI,EAAEP,QAAQ,CAACC;MAAU,CAAC;IAC7F,KAAK,aAAa;MAChB,OAAOqB,QAAQ,GACX;QACEK,EAAE,EAAEJ,CAAC,CAACM,OAAO,CAAC,IAAI,CAAC;QACnBC,WAAW,EAAE,CAAC;QACdC,MAAM,EAAER,CAAC,CAACM,OAAO,CAAC,KAAK,CAAC;QACxBD,SAAS,EAAEL,CAAC,CAACM,OAAO,CAAC,KAAK,CAAC;QAC3BtB,IAAI,EAAEP,QAAQ,CAACE;MACjB,CAAC,GACD;QACEyB,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBK,WAAW,EAAE,CAAC;QACdC,MAAM,EAAEN,GAAG,CAAC,gBAAgB,CAAC;QAC7BG,SAAS,EAAEH,GAAG,CAAC,cAAc,CAAC;QAC9BlB,IAAI,EAAEP,QAAQ,CAACE;MACjB,CAAC;EACT;AACF","ignoreList":[]}
@@ -9,8 +9,9 @@
9
9
  */
10
10
 
11
11
  // theme index からの runtime import は ThemeProvider → react-native を引くため、
12
- // pure module(line-height.ts)を直接参照する(letterSpacing の式直書きと同じ理由)。
13
- import { DEFAULT_MIN_LINE_HEIGHT_RATIO, clampLineHeight } from "../theme/line-height.js";
12
+ // pure module(line-height.ts / letter-spacing.ts)を直接参照する。
13
+ import { clampLineHeight, minRatioOf } from "../theme/line-height.js";
14
+ import { resolveLetterSpacing } from "../theme/letter-spacing.js";
14
15
 
15
16
  /** letterSpacing の切替軸(text.recipe description の role prop に対応)。 */
16
17
 
@@ -19,9 +20,7 @@ import { DEFAULT_MIN_LINE_HEIGHT_RATIO, clampLineHeight } from "../theme/line-he
19
20
  /**
20
21
  * variant / role / weight → 形状解決(text.recipe styleRefs の 1:1 写像)。
21
22
  * - fontSize token は複合値(px + lineHeight 比率)。theme 生成時に lineHeight は px 化済み。
22
- * - letterSpacing は em 比率 token のため fontSize × ratio で pt 化する。
23
- * theme の resolveLetterSpacing と同一式だが、theme index 経由の runtime import は
24
- * ThemeProvider → react-native を引くため、pure に保つ目的でここでは式を直書きする。
23
+ * - letterSpacing は em 比率 token のため fontSize × ratio で pt 化する(resolveLetterSpacing)。
25
24
  */
26
25
  export function resolveTextShape(theme, variant, role, weight) {
27
26
  const fs = theme.typography.fontSize[variant];
@@ -29,8 +28,8 @@ export function resolveTextShape(theme, variant, role, weight) {
29
28
  fontSize: fs.fontSize,
30
29
  // 既定 theme は codegen 時点でクランプ済みだが、defineTheme で注入されたカスタム theme の
31
30
  // 値はここが最初の防波堤(機序と下限の根拠は theme/line-height.ts)。
32
- lineHeight: clampLineHeight(fs.fontSize, fs.lineHeight, theme.typography.minLineHeightRatio ?? DEFAULT_MIN_LINE_HEIGHT_RATIO),
33
- letterSpacing: fs.fontSize * theme.typography.letterSpacingRatio[role],
31
+ lineHeight: clampLineHeight(fs.fontSize, fs.lineHeight, minRatioOf(theme)),
32
+ letterSpacing: resolveLetterSpacing(fs.fontSize, theme.typography.letterSpacingRatio[role]),
34
33
  ...(weight ? {
35
34
  fontWeight: theme.typography.fontWeight[weight]
36
35
  } : null)
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_MIN_LINE_HEIGHT_RATIO","clampLineHeight","resolveTextShape","theme","variant","role","weight","fs","typography","fontSize","lineHeight","minLineHeightRatio","letterSpacing","letterSpacingRatio","fontWeight"],"sourceRoot":"../../../src","sources":["primitives/text.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA,SAASA,6BAA6B,EAAEC,eAAe,QAAQ,yBAAsB;;AAErF;;AAGA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,KAAkB,EAClBC,OAAoB,EACpBC,IAAc,EACdC,MAAsB,EACX;EACX,MAAMC,EAAE,GAAGJ,KAAK,CAACK,UAAU,CAACC,QAAQ,CAACL,OAAO,CAAC;EAC7C,OAAO;IACLK,QAAQ,EAAEF,EAAE,CAACE,QAAQ;IACrB;IACA;IACAC,UAAU,EAAET,eAAe,CACzBM,EAAE,CAACE,QAAQ,EACXF,EAAE,CAACG,UAAU,EACbP,KAAK,CAACK,UAAU,CAACG,kBAAkB,IAAIX,6BACzC,CAAC;IACDY,aAAa,EAAEL,EAAE,CAACE,QAAQ,GAAGN,KAAK,CAACK,UAAU,CAACK,kBAAkB,CAACR,IAAI,CAAC;IACtE,IAAIC,MAAM,GAAG;MAAEQ,UAAU,EAAEX,KAAK,CAACK,UAAU,CAACM,UAAU,CAACR,MAAM;IAAE,CAAC,GAAG,IAAI;EACzE,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["clampLineHeight","minRatioOf","resolveLetterSpacing","resolveTextShape","theme","variant","role","weight","fs","typography","fontSize","lineHeight","letterSpacing","letterSpacingRatio","fontWeight"],"sourceRoot":"../../../src","sources":["primitives/text.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA,SAASA,eAAe,EAAEC,UAAU,QAAQ,yBAAyB;AACrE,SAASC,oBAAoB,QAAQ,4BAA4B;;AAEjE;;AAGA;;AAQA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,KAAkB,EAClBC,OAAoB,EACpBC,IAAc,EACdC,MAAsB,EACX;EACX,MAAMC,EAAE,GAAGJ,KAAK,CAACK,UAAU,CAACC,QAAQ,CAACL,OAAO,CAAC;EAC7C,OAAO;IACLK,QAAQ,EAAEF,EAAE,CAACE,QAAQ;IACrB;IACA;IACAC,UAAU,EAAEX,eAAe,CAACQ,EAAE,CAACE,QAAQ,EAAEF,EAAE,CAACG,UAAU,EAAEV,UAAU,CAACG,KAAK,CAAC,CAAC;IAC1EQ,aAAa,EAAEV,oBAAoB,CAACM,EAAE,CAACE,QAAQ,EAAEN,KAAK,CAACK,UAAU,CAACI,kBAAkB,CAACP,IAAI,CAAC,CAAC;IAC3F,IAAIC,MAAM,GAAG;MAAEO,UAAU,EAAEV,KAAK,CAACK,UAAU,CAACK,UAAU,CAACP,MAAM;IAAE,CAAC,GAAG,IAAI;EACzE,CAAC;AACH","ignoreList":[]}