melta-app 0.5.3 → 0.7.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 (298) hide show
  1. package/README.md +493 -186
  2. package/docs/architecture.md +99 -0
  3. package/eslint-rules/melta.d.mts +44 -0
  4. package/lib/module/a11y/tap-target.js +41 -0
  5. package/lib/module/a11y/tap-target.js.map +1 -0
  6. package/lib/module/components/ActionSheet.js +20 -6
  7. package/lib/module/components/ActionSheet.js.map +1 -1
  8. package/lib/module/components/Alert.js +11 -7
  9. package/lib/module/components/Alert.js.map +1 -1
  10. package/lib/module/components/Avatar.js +7 -2
  11. package/lib/module/components/Avatar.js.map +1 -1
  12. package/lib/module/components/BottomSheet.js +11 -3
  13. package/lib/module/components/BottomSheet.js.map +1 -1
  14. package/lib/module/components/Card.js +4 -3
  15. package/lib/module/components/Card.js.map +1 -1
  16. package/lib/module/components/Checkbox.js +8 -5
  17. package/lib/module/components/Checkbox.js.map +1 -1
  18. package/lib/module/components/EmptyState.js +2 -1
  19. package/lib/module/components/EmptyState.js.map +1 -1
  20. package/lib/module/components/Header.js.map +1 -1
  21. package/lib/module/components/Image.js +5 -3
  22. package/lib/module/components/Image.js.map +1 -1
  23. package/lib/module/components/Modal.js +12 -4
  24. package/lib/module/components/Modal.js.map +1 -1
  25. package/lib/module/components/Progress.js +2 -1
  26. package/lib/module/components/Progress.js.map +1 -1
  27. package/lib/module/components/Radio.js +11 -3
  28. package/lib/module/components/Radio.js.map +1 -1
  29. package/lib/module/components/Screen.js +28 -3
  30. package/lib/module/components/Screen.js.map +1 -1
  31. package/lib/module/components/Skeleton.js +2 -1
  32. package/lib/module/components/Skeleton.js.map +1 -1
  33. package/lib/module/components/Surface.js +2 -1
  34. package/lib/module/components/Surface.js.map +1 -1
  35. package/lib/module/components/TextField.js +16 -4
  36. package/lib/module/components/TextField.js.map +1 -1
  37. package/lib/module/components/Toast.js +17 -9
  38. package/lib/module/components/Toast.js.map +1 -1
  39. package/lib/module/components/Toggle.js +13 -4
  40. package/lib/module/components/Toggle.js.map +1 -1
  41. package/lib/module/components/alert.styles.js +12 -26
  42. package/lib/module/components/alert.styles.js.map +1 -1
  43. package/lib/module/components/avatar.styles.js +24 -2
  44. package/lib/module/components/avatar.styles.js.map +1 -1
  45. package/lib/module/components/card.validate.js.map +1 -1
  46. package/lib/module/components/checkbox.styles.js +5 -2
  47. package/lib/module/components/checkbox.styles.js.map +1 -1
  48. package/lib/module/components/index.js.map +1 -1
  49. package/lib/module/components/modal.styles.js +9 -0
  50. package/lib/module/components/modal.styles.js.map +1 -1
  51. package/lib/module/components/radio.styles.js +11 -2
  52. package/lib/module/components/radio.styles.js.map +1 -1
  53. package/lib/module/components/safe-area-registry.js +64 -13
  54. package/lib/module/components/safe-area-registry.js.map +1 -1
  55. package/lib/module/components/status-colors.js +53 -0
  56. package/lib/module/components/status-colors.js.map +1 -0
  57. package/lib/module/components/textfield.styles.js +15 -8
  58. package/lib/module/components/textfield.styles.js.map +1 -1
  59. package/lib/module/components/toast.styles.js +36 -25
  60. package/lib/module/components/toast.styles.js.map +1 -1
  61. package/lib/module/components/toggle.styles.js +20 -0
  62. package/lib/module/components/toggle.styles.js.map +1 -1
  63. package/lib/module/icons/Icon.js +4 -1
  64. package/lib/module/icons/Icon.js.map +1 -1
  65. package/lib/module/icons/icon.styles.js +32 -1
  66. package/lib/module/icons/icon.styles.js.map +1 -1
  67. package/lib/module/icons/index.js.map +1 -1
  68. package/lib/module/index.js.map +1 -1
  69. package/lib/module/primitives/Button.js +23 -11
  70. package/lib/module/primitives/Button.js.map +1 -1
  71. package/lib/module/primitives/Metric.js +2 -1
  72. package/lib/module/primitives/Metric.js.map +1 -1
  73. package/lib/module/primitives/Row.js.map +1 -1
  74. package/lib/module/primitives/Stack.js.map +1 -1
  75. package/lib/module/primitives/Tag.js +15 -7
  76. package/lib/module/primitives/Tag.js.map +1 -1
  77. package/lib/module/primitives/Text.js +28 -7
  78. package/lib/module/primitives/Text.js.map +1 -1
  79. package/lib/module/primitives/_internal/focus-ring.js.map +1 -1
  80. package/lib/module/primitives/button.styles.js +58 -8
  81. package/lib/module/primitives/button.styles.js.map +1 -1
  82. package/lib/module/primitives/index.js.map +1 -1
  83. package/lib/module/primitives/metric.styles.js +4 -1
  84. package/lib/module/primitives/metric.styles.js.map +1 -1
  85. package/lib/module/primitives/tag.styles.js +42 -3
  86. package/lib/module/primitives/tag.styles.js.map +1 -1
  87. package/lib/module/primitives/text.styles.js +10 -5
  88. package/lib/module/primitives/text.styles.js.map +1 -1
  89. package/lib/module/safe-area/index.js +11 -5
  90. package/lib/module/safe-area/index.js.map +1 -1
  91. package/lib/module/theme/ThemeProvider.js +5 -2
  92. package/lib/module/theme/ThemeProvider.js.map +1 -1
  93. package/lib/module/theme/define-theme.js +27 -1
  94. package/lib/module/theme/define-theme.js.map +1 -1
  95. package/lib/module/theme/index.js +7 -8
  96. package/lib/module/theme/index.js.map +1 -1
  97. package/lib/module/theme/letter-spacing.js +20 -0
  98. package/lib/module/theme/letter-spacing.js.map +1 -0
  99. package/lib/module/theme/line-height.js +52 -0
  100. package/lib/module/theme/line-height.js.map +1 -0
  101. package/lib/module/theme/native-theme.js +8 -7
  102. package/lib/module/theme/native-theme.js.map +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 -13
  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 +44 -0
  225. package/lib/typescript/src/theme/line-height.d.ts.map +1 -0
  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 +10 -1
  229. package/lib/typescript/src/theme/types.d.ts.map +1 -1
  230. package/llms.txt +2 -1
  231. package/package.json +22 -7
  232. package/src/a11y/tap-target.ts +38 -0
  233. package/src/components/ActionSheet.tsx +25 -15
  234. package/src/components/Alert.tsx +37 -10
  235. package/src/components/Avatar.tsx +12 -4
  236. package/src/components/BottomSheet.tsx +16 -13
  237. package/src/components/Card.tsx +9 -8
  238. package/src/components/Checkbox.tsx +12 -9
  239. package/src/components/EmptyState.tsx +7 -6
  240. package/src/components/Header.tsx +4 -4
  241. package/src/components/Image.tsx +9 -7
  242. package/src/components/Modal.tsx +22 -6
  243. package/src/components/Progress.tsx +5 -4
  244. package/src/components/Radio.tsx +11 -6
  245. package/src/components/Screen.tsx +66 -8
  246. package/src/components/Skeleton.tsx +6 -5
  247. package/src/components/Surface.tsx +5 -4
  248. package/src/components/TextField.tsx +25 -7
  249. package/src/components/Toast.tsx +33 -11
  250. package/src/components/Toggle.tsx +15 -6
  251. package/src/components/action-sheet.styles.ts +1 -1
  252. package/src/components/alert.styles.ts +13 -25
  253. package/src/components/avatar.styles.ts +25 -3
  254. package/src/components/bottom-sheet.styles.ts +1 -1
  255. package/src/components/card.styles.ts +1 -1
  256. package/src/components/card.validate.ts +2 -2
  257. package/src/components/checkbox.styles.ts +6 -3
  258. package/src/components/empty-state.styles.ts +1 -1
  259. package/src/components/header.styles.ts +1 -1
  260. package/src/components/image.styles.ts +1 -1
  261. package/src/components/index.ts +18 -18
  262. package/src/components/modal.styles.ts +11 -2
  263. package/src/components/progress.styles.ts +1 -1
  264. package/src/components/radio.styles.ts +11 -2
  265. package/src/components/safe-area-registry.ts +81 -14
  266. package/src/components/screen.styles.ts +1 -1
  267. package/src/components/skeleton.styles.ts +1 -1
  268. package/src/components/status-colors.ts +59 -0
  269. package/src/components/surface.styles.ts +1 -1
  270. package/src/components/textfield.styles.ts +18 -15
  271. package/src/components/toast.styles.ts +32 -25
  272. package/src/components/toggle.styles.ts +21 -1
  273. package/src/icons/Icon.tsx +13 -8
  274. package/src/icons/icon.styles.ts +38 -3
  275. package/src/icons/index.ts +3 -3
  276. package/src/index.ts +4 -4
  277. package/src/primitives/Button.tsx +28 -14
  278. package/src/primitives/Metric.tsx +5 -4
  279. package/src/primitives/Row.tsx +4 -4
  280. package/src/primitives/Stack.tsx +4 -4
  281. package/src/primitives/Tag.tsx +29 -11
  282. package/src/primitives/Text.tsx +42 -9
  283. package/src/primitives/_internal/focus-ring.tsx +1 -1
  284. package/src/primitives/button.styles.ts +63 -10
  285. package/src/primitives/index.ts +6 -6
  286. package/src/primitives/metric.styles.ts +9 -2
  287. package/src/primitives/row.styles.ts +1 -1
  288. package/src/primitives/stack.styles.ts +1 -1
  289. package/src/primitives/tag.styles.ts +43 -4
  290. package/src/primitives/text.styles.ts +10 -6
  291. package/src/safe-area/index.ts +21 -7
  292. package/src/theme/ThemeProvider.tsx +8 -5
  293. package/src/theme/define-theme.ts +33 -2
  294. package/src/theme/index.ts +18 -16
  295. package/src/theme/letter-spacing.ts +17 -0
  296. package/src/theme/line-height.ts +53 -0
  297. package/src/theme/native-theme.ts +9 -8
  298. package/src/theme/types.ts +10 -1
@@ -1 +1 @@
1
- {"version":3,"names":["TOAST_SPEC","padding","gap","radius","elevation","messageFont","messageWeight","resolveToastColors","theme","mode","variant","bg","color","primary","text","status","subtleDark","textDark","subtleLight","textLight","resolveToastStyles","containerStyle","backgroundColor","borderRadius","spacing","flexDirection","alignItems","messageStyle","fontSize","typography","fontWeight"],"sourceRoot":"../../../src","sources":["components/toast.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAG;EACxBC,OAAO,EAAE,GAAG;EACZC,GAAG,EAAE,GAAG;EACRC,MAAM,EAAE,IAAI;EACZC,SAAS,EAAE,IAAI;EACfC,WAAW,EAAE,IAAI;EACjBC,aAAa,EAAE;AACjB,CAOC;;AAED;AACA;AACA;AACA;;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACfC,OAAqB,EACS;EAC9B,IAAIA,OAAO,KAAK,MAAM,EAAE;IACtB,OAAO;MAAEC,EAAE,EAAEH,KAAK,CAACI,KAAK,CAACC,OAAO,CAAC,IAAI,CAAC;MAAEC,IAAI,EAAEN,KAAK,CAACI,KAAK,CAACC,OAAO,CAAC,KAAK;IAAE,CAAC;EAC5E;EACA,MAAME,MAAM,GAAGP,KAAK,CAACI,KAAK,CAACG,MAAM,CAACL,OAAO,KAAK,OAAO,GAAG,QAAQ,GAAGA,OAAO,CAAC;EAC3E,OAAOD,IAAI,KAAK,MAAM,GAClB;IAAEE,EAAE,EAAEI,MAAM,CAACC,UAAU;IAAEF,IAAI,EAAEC,MAAM,CAACE;EAAS,CAAC,GAChD;IAAEN,EAAE,EAAEI,MAAM,CAACG,WAAW;IAAEJ,IAAI,EAAEC,MAAM,CAACI;EAAU,CAAC;AACxD;;AAEA;AACA,OAAO,SAASC,kBAAkBA,CAChCZ,KAAkB,EAClBC,IAAe,EACfC,OAAqB,EACR;EACb,MAAM;IAAEC,EAAE;IAAEG;EAAK,CAAC,GAAGP,kBAAkB,CAACC,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC;EAC7D,OAAO;IACLW,cAAc,EAAE;MACdC,eAAe,EAAEX,EAAE;MACnBY,YAAY,EAAEf,KAAK,CAACL,MAAM,CAACH,UAAU,CAACG,MAAM,CAAC;MAC7CF,OAAO,EAAEO,KAAK,CAACgB,OAAO,CAACxB,UAAU,CAACC,OAAO,CAAC;MAC1CwB,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBxB,GAAG,EAAEM,KAAK,CAACgB,OAAO,CAACxB,UAAU,CAACE,GAAG;IACnC,CAAC;IACDE,SAAS,EAAEI,KAAK,CAACJ,SAAS,CAACJ,UAAU,CAACI,SAAS,CAAC;IAChDuB,YAAY,EAAE;MACZf,KAAK,EAAEE,IAAI;MACXc,QAAQ,EAAEpB,KAAK,CAACqB,UAAU,CAACD,QAAQ,CAAC5B,UAAU,CAACK,WAAW,CAAC,CAACuB,QAAQ;MACpEE,UAAU,EAAEtB,KAAK,CAACqB,UAAU,CAACC,UAAU,CAAC9B,UAAU,CAACM,aAAa;IAClE;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["resolveStatusVariantColors","CANONICAL_TAP_TARGET","TOAST_SPEC","padding","gap","radius","elevation","messageFont","messageWeight","TOAST_TAP_TARGET","hitSlop","top","bottom","left","right","closeMinWidth","closeMinHeight","minHeight","resolveToastStyles","theme","mode","variant","bg","text","containerStyle","backgroundColor","borderRadius","spacing","flexDirection","alignItems","messageStyle","color","fontSize","typography","fontWeight"],"sourceRoot":"../../../src","sources":["components/toast.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA,SAASA,0BAA0B,QAA4B,oBAAoB;AACnF,SAASC,oBAAoB,QAAQ,uBAAuB;;AAE5D;;AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAG;EACxBC,OAAO,EAAE,GAAG;EACZC,GAAG,EAAE,GAAG;EACRC,MAAM,EAAE,IAAI;EACZC,SAAS,EAAE,IAAI;EACfC,WAAW,EAAE,IAAI;EACjBC,aAAa,EAAE;AACjB,CAOC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG;EAC9B;EACAC,OAAO,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,IAAI,EAAE,CAAC;IAAEC,KAAK,EAAE;EAAE,CAAC;EACnD;EACAC,aAAa,EAAE,EAAE;EACjB;EACAC,cAAc,EAAEf,oBAAoB,CAACgB;AACvC,CAAU;;AAEV;AACA;AACA;AACA;;AAoBA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACfC,OAAqB,EACR;EACb,MAAM;IAAEC,EAAE;IAAEC;EAAK,CAAC,GAAGvB,0BAA0B,CAACmB,KAAK,EAAEC,IAAI,EAAEC,OAAO,CAAC;EACrE,OAAO;IACLG,cAAc,EAAE;MACdC,eAAe,EAAEH,EAAE;MACnBI,YAAY,EAAEP,KAAK,CAACd,MAAM,CAACH,UAAU,CAACG,MAAM,CAAC;MAC7CF,OAAO,EAAEgB,KAAK,CAACQ,OAAO,CAACzB,UAAU,CAACC,OAAO,CAAC;MAC1CyB,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBzB,GAAG,EAAEe,KAAK,CAACQ,OAAO,CAACzB,UAAU,CAACE,GAAG;IACnC,CAAC;IACDE,SAAS,EAAEa,KAAK,CAACb,SAAS,CAACJ,UAAU,CAACI,SAAS,CAAC;IAChDwB,YAAY,EAAE;MACZC,KAAK,EAAER,IAAI;MACXS,QAAQ,EAAEb,KAAK,CAACc,UAAU,CAACD,QAAQ,CAAC9B,UAAU,CAACK,WAAW,CAAC,CAACyB,QAAQ;MACpEE,UAAU,EAAEf,KAAK,CAACc,UAAU,CAACC,UAAU,CAAChC,UAAU,CAACM,aAAa;IAClE;EACF,CAAC;AACH","ignoreList":[]}
@@ -39,6 +39,26 @@ export const TOGGLE_SIZE_SPEC = {
39
39
  /** disabled state の opacity(recipe states.disabled.style.opacity と照合)。 */
40
40
  export const TOGGLE_DISABLED_OPACITY = 0.5;
41
41
 
42
+ /**
43
+ * size → 縦方向の片側 hitSlop(実効タップ標的 44pt。A11Y_MIN_TAP_TARGET_44)。
44
+ *
45
+ * Pressable の高さは **label 無しなら track の高さそのもの**(medium 24 / large 28)で、
46
+ * どちらも 44pt に届かない。track は背景(色付きの丸)を持つので minHeight で伸ばすと
47
+ * スイッチが縦長に見える → 当たり判定だけ広げる:
48
+ * medium 24 + 10×2 = 44 / large 28 + 8×2 = 44
49
+ *
50
+ * label 付きの行でも高さは label(base)の lineHeight 36pt にしかならず 44pt に届かないため、
51
+ * **label の有無に関わらず同じ値を適用する**(label 付きは 36 + 20 = 56pt と余裕が出るが、
52
+ * Toggle は alignSelf: flex-start の独立行なので横に重なる相手がいない)。
53
+ *
54
+ * ⚠️ literal で持つ(TOGGLE_SIZE_SPEC から自動導出しない)。導出にすると track 寸法を変えたときに
55
+ * hitSlop が黙って追随し、conformance が fail-open になる。
56
+ */
57
+ export const TOGGLE_VERTICAL_HIT_SLOP = {
58
+ medium: 10,
59
+ large: 8
60
+ };
61
+
42
62
  /**
43
63
  * variant / size → track + thumb の最終 style 値の解決(toggle.recipe styleRefs の 1:1 写像)。
44
64
  * track.padding = thumbOffset(thumb を track 内で浮かせる余白)。
@@ -1 +1 @@
1
- {"version":3,"names":["TOGGLE_SIZE_SPEC","medium","trackWidth","trackHeight","thumbSize","thumbOffset","large","TOGGLE_DISABLED_OPACITY","resolveToggleStyle","theme","mode","variant","size","c","color","sem","semantic","spec","track","width","height","backgroundColor","primary","borderRadius","radius","full","padding","thumb"],"sourceRoot":"../../../src","sources":["components/toggle.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAIA;AACA;AACA;AACA;AACA,OAAO,MAAMA,gBAGZ,GAAG;EACFC,MAAM,EAAE;IAAEC,UAAU,EAAE,EAAE;IAAEC,WAAW,EAAE,EAAE;IAAEC,SAAS,EAAE,EAAE;IAAEC,WAAW,EAAE;EAAE,CAAC;EAC1EC,KAAK,EAAE;IAAEJ,UAAU,EAAE,EAAE;IAAEC,WAAW,EAAE,EAAE;IAAEC,SAAS,EAAE,EAAE;IAAEC,WAAW,EAAE;EAAE;AAC1E,CAAC;;AAED;AACA,OAAO,MAAME,uBAAuB,GAAG,GAAG;;AAE1C;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACf;EAAEC,OAAO;EAAEC,IAAI,GAAG;AAAwD,CAAC,EAU3E;EACA,MAAMC,CAAC,GAAGJ,KAAK,CAACK,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACN,IAAI,CAAC;EAC5B,MAAMO,IAAI,GAAGjB,gBAAgB,CAACY,IAAI,CAAC;EACnC,OAAO;IACLM,KAAK,EAAE;MACLC,KAAK,EAAEF,IAAI,CAACf,UAAU;MACtBkB,MAAM,EAAEH,IAAI,CAACd,WAAW;MACxBkB,eAAe,EAAEV,OAAO,KAAK,IAAI,GAAGE,CAAC,CAACS,OAAO,CAAC,KAAK,CAAC,GAAGP,GAAG,CAAC,eAAe,CAAC;MAC3EQ,YAAY,EAAEd,KAAK,CAACe,MAAM,CAACC,IAAI;MAC/BC,OAAO,EAAET,IAAI,CAACZ;IAChB,CAAC;IACDsB,KAAK,EAAE;MACLR,KAAK,EAAEF,IAAI,CAACb,SAAS;MACrBgB,MAAM,EAAEH,IAAI,CAACb,SAAS;MACtBiB,eAAe,EAAEN,GAAG,CAAC,YAAY,CAAC;MAClCQ,YAAY,EAAEd,KAAK,CAACe,MAAM,CAACC;IAC7B;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["TOGGLE_SIZE_SPEC","medium","trackWidth","trackHeight","thumbSize","thumbOffset","large","TOGGLE_DISABLED_OPACITY","TOGGLE_VERTICAL_HIT_SLOP","resolveToggleStyle","theme","mode","variant","size","c","color","sem","semantic","spec","track","width","height","backgroundColor","primary","borderRadius","radius","full","padding","thumb"],"sourceRoot":"../../../src","sources":["components/toggle.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAIA;AACA;AACA;AACA;AACA,OAAO,MAAMA,gBAGZ,GAAG;EACFC,MAAM,EAAE;IAAEC,UAAU,EAAE,EAAE;IAAEC,WAAW,EAAE,EAAE;IAAEC,SAAS,EAAE,EAAE;IAAEC,WAAW,EAAE;EAAE,CAAC;EAC1EC,KAAK,EAAE;IAAEJ,UAAU,EAAE,EAAE;IAAEC,WAAW,EAAE,EAAE;IAAEC,SAAS,EAAE,EAAE;IAAEC,WAAW,EAAE;EAAE;AAC1E,CAAC;;AAED;AACA,OAAO,MAAME,uBAAuB,GAAG,GAAG;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAoD,GAAG;EAClEP,MAAM,EAAE,EAAE;EACVK,KAAK,EAAE;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASG,kBAAkBA,CAChCC,KAAkB,EAClBC,IAAe,EACf;EAAEC,OAAO;EAAEC,IAAI,GAAG;AAAwD,CAAC,EAU3E;EACA,MAAMC,CAAC,GAAGJ,KAAK,CAACK,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACN,IAAI,CAAC;EAC5B,MAAMO,IAAI,GAAGlB,gBAAgB,CAACa,IAAI,CAAC;EACnC,OAAO;IACLM,KAAK,EAAE;MACLC,KAAK,EAAEF,IAAI,CAAChB,UAAU;MACtBmB,MAAM,EAAEH,IAAI,CAACf,WAAW;MACxBmB,eAAe,EAAEV,OAAO,KAAK,IAAI,GAAGE,CAAC,CAACS,OAAO,CAAC,KAAK,CAAC,GAAGP,GAAG,CAAC,eAAe,CAAC;MAC3EQ,YAAY,EAAEd,KAAK,CAACe,MAAM,CAACC,IAAI;MAC/BC,OAAO,EAAET,IAAI,CAACb;IAChB,CAAC;IACDuB,KAAK,EAAE;MACLR,KAAK,EAAEF,IAAI,CAACd,SAAS;MACrBiB,MAAM,EAAEH,IAAI,CAACd,SAAS;MACtBkB,eAAe,EAAEN,GAAG,CAAC,YAAY,CAAC;MAClCQ,YAAY,EAAEd,KAAK,CAACe,MAAM,CAACC;IAC7B;EACF,CAAC;AACH","ignoreList":[]}
@@ -9,7 +9,10 @@
9
9
  * export される(optional peerDependency。利用者は `npx expo install react-native-svg` が必要)。
10
10
  *
11
11
  * - name は glyphs.ts(assets/icons/*.svg からの codegen、commit 済み配布)のキー。
12
- * - color は semantic token キー限定(default "text-default")、size は contract sizes(sm/md/lg)。
12
+ * - color は semantic token キー + status 色("status-success" / "status-warning" / "status-error")。
13
+ * default "text-default"、size は contract sizes(sm/md/lg)。status 色は Alert / Toast と同じ
14
+ * status token を引くので、アイコン単体で状態を示す場面(フォーム行の成功チェック等)に使える。
15
+ * "status-info" は無い(status token に info の実体が無い。text-accent 等で代替する)。
13
16
  * - a11y: 意味を持つ場合は accessibilityLabel を渡す。無指定は装飾扱いで a11y ツリーから除外
14
17
  * (contract a11y required の両ケース)。
15
18
  * - 決定ロジックは pure resolver(icon.styles.ts)に分離 — recipe との機械照合対象。
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","Svg","Path","useTheme","CONTRACTS","resolveIconStyle","GLYPHS","jsx","_jsx","Icon","name","size","color","accessibilityLabel","testID","theme","mode","resolved","glyph","decorative","width","height","viewBox","accessible","accessibilityRole","accessibilityElementsHidden","importantForAccessibility","children","paths","map","p","i","d","fillRule","fill","__contract","icon"],"sourceRoot":"../../../src","sources":["icons/Icon.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAqB,gCAA6B;AACpE,SAASC,gBAAgB,QAAwB,kBAAe;AAChE,SAASC,MAAM,QAAuB,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAcjD,OAAO,SAASC,IAAIA,CAAC;EAAEC,IAAI;EAAEC,IAAI,GAAG,IAAI;EAAEC,KAAK,GAAG,cAAc;EAAEC,kBAAkB;EAAEC;AAAkB,CAAC,EAAE;EACzG,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAElC,MAAMc,QAAQ,GAAGjB,OAAO,CACtB,MAAMK,gBAAgB,CAACU,KAAK,EAAEC,IAAI,EAAEL,IAAI,EAAEC,KAAK,CAAC,EAChD,CAACG,KAAK,EAAEC,IAAI,EAAEL,IAAI,EAAEC,KAAK,CAC3B,CAAC;EACD,MAAMM,KAAK,GAAGZ,MAAM,CAACI,IAAI,CAAC;EAC1B,MAAMS,UAAU,GAAGN,kBAAkB,IAAI,IAAI;EAE7C,oBACEL,IAAA,CAACP,GAAG;IACFmB,KAAK,EAAEH,QAAQ,CAACG,KAAM;IACtBC,MAAM,EAAEJ,QAAQ,CAACI,MAAO;IACxBC,OAAO,EAAEJ,KAAK,CAACI,OAAQ;IACvBC,UAAU,EAAE,CAACJ,UAAW;IACxBK,iBAAiB,EAAC,OAAO;IACzBX,kBAAkB,EAAEA,kBAAmB;IACvCY,2BAA2B,EAAEN,UAAW;IACxCO,yBAAyB,EAAEP,UAAU,GAAG,qBAAqB,GAAG,KAAM;IACtEL,MAAM,EAAEA,MAAO;IAAAa,QAAA,EAEdT,KAAK,CAACU,KAAK,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,kBACpBvB,IAAA,CAACN,IAAI;MAAS8B,CAAC,EAAEF,CAAC,CAACE,CAAE;MAACC,QAAQ,EAAEH,CAAC,CAACG,QAAS;MAACC,IAAI,EAAEjB,QAAQ,CAACL;IAAM,GAAtDmB,CAAwD,CACpE;EAAC,CACC,CAAC;AAEV;AAEAtB,IAAI,CAAC0B,UAAU,GAAG/B,SAAS,CAACgC,IAAI","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","Svg","Path","useTheme","CONTRACTS","resolveIconStyle","GLYPHS","jsx","_jsx","Icon","name","size","color","accessibilityLabel","testID","theme","mode","resolved","glyph","decorative","width","height","viewBox","accessible","accessibilityRole","accessibilityElementsHidden","importantForAccessibility","children","paths","map","p","i","d","fillRule","fill","__contract","icon"],"sourceRoot":"../../../src","sources":["icons/Icon.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,SAAS,QAAqB,gCAAgC;AACvE,SAASC,gBAAgB,QAAwC,kBAAkB;AACnF,SAASC,MAAM,QAAuB,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAiBpD,OAAO,SAASC,IAAIA,CAAC;EAAEC,IAAI;EAAEC,IAAI,GAAG,IAAI;EAAEC,KAAK,GAAG,cAAc;EAAEC,kBAAkB;EAAEC;AAAkB,CAAC,EAAE;EACzG,MAAM;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAElC,MAAMc,QAAQ,GAAGjB,OAAO,CACtB,MAAMK,gBAAgB,CAACU,KAAK,EAAEC,IAAI,EAAEL,IAAI,EAAEC,KAAK,CAAC,EAChD,CAACG,KAAK,EAAEC,IAAI,EAAEL,IAAI,EAAEC,KAAK,CAC3B,CAAC;EACD,MAAMM,KAAK,GAAGZ,MAAM,CAACI,IAAI,CAAC;EAC1B,MAAMS,UAAU,GAAGN,kBAAkB,IAAI,IAAI;EAE7C,oBACEL,IAAA,CAACP,GAAG;IACFmB,KAAK,EAAEH,QAAQ,CAACG,KAAM;IACtBC,MAAM,EAAEJ,QAAQ,CAACI,MAAO;IACxBC,OAAO,EAAEJ,KAAK,CAACI,OAAQ;IACvBC,UAAU,EAAE,CAACJ,UAAW;IACxBK,iBAAiB,EAAC,OAAO;IACzBX,kBAAkB,EAAEA,kBAAmB;IACvCY,2BAA2B,EAAEN,UAAW;IACxCO,yBAAyB,EAAEP,UAAU,GAAG,qBAAqB,GAAG,KAAM;IACtEL,MAAM,EAAEA,MAAO;IAAAa,QAAA,EAEdT,KAAK,CAACU,KAAK,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,kBACpBvB,IAAA,CAACN,IAAI;MAAS8B,CAAC,EAAEF,CAAC,CAACE,CAAE;MAACC,QAAQ,EAAEH,CAAC,CAACG,QAAS;MAACC,IAAI,EAAEjB,QAAQ,CAACL;IAAM,GAAtDmB,CAAwD,CACpE;EAAC,CACC,CAAC;AAEV;AAEAtB,IAAI,CAAC0B,UAAU,GAAG/B,SAAS,CAACgC,IAAI","ignoreList":[]}
@@ -8,21 +8,52 @@
8
8
  * 機械照合は scripts/lib/icon-conformance.test.ts が行う。
9
9
  */
10
10
 
11
+ // status 色の「error → token では danger」読み替えは status-colors.ts が SSOT(AGENTS.md 規約 7)。
12
+ // icons → components の参照になるが、status-colors.ts は theme の型しか import しない純粋モジュール
13
+ // なので依存の向きとして安全(ActionSheet destructive の文字色と同じ慣用)。
14
+ import { toStatusTokenKey } from "../components/status-colors.js";
15
+
16
+ /**
17
+ * Icon の色指定。semantic token キーに加えて status 色(success / warning / error)を受ける。
18
+ *
19
+ * - status 系は `theme.color.status.<key>.base` を引く(面ではなく tint に載る色)。
20
+ * - `"status-"` の prefix を付けるのは、将来 SemanticColors に同名キー(`success` 等)が
21
+ * 入ったときに衝突しないようにするため。
22
+ * - **`"status-info"` は無い** — status token に info の実体が無く(web と同じ既知の割り切り)、
23
+ * info 相当は semantic の `text-accent` / primary 系で表現する。
24
+ */
25
+
11
26
  /** サイズ軸(contract sizes の height と 1:1。width=height の正方形)。 */
12
27
  const SIZE_TABLE = {
13
28
  sm: 16,
14
29
  md: 20,
15
30
  lg: 24
16
31
  };
32
+
33
+ /** `"status-error"` → `"error"`(型で status 系だけを絞り込むための判定)。 */
34
+ function statusVariantOf(color) {
35
+ switch (color) {
36
+ case "status-success":
37
+ return "success";
38
+ case "status-warning":
39
+ return "warning";
40
+ case "status-error":
41
+ return "error";
42
+ default:
43
+ return null;
44
+ }
45
+ }
17
46
  /**
18
47
  * size / color → Icon style の解決(icon.recipe styleRefs の 1:1 写像)。
19
48
  * デフォルト(size=md / color=text-default)は recipe の default variant と一致させている。
49
+ * status 色は mode 非依存(status token の base は light/dark 共通)。
20
50
  */
21
51
  export function resolveIconStyle(theme, mode, size = "md", color = "text-default") {
52
+ const status = statusVariantOf(color);
22
53
  return {
23
54
  width: SIZE_TABLE[size],
24
55
  height: SIZE_TABLE[size],
25
- color: theme.color.semantic[mode][color]
56
+ color: status !== null ? theme.color.status[toStatusTokenKey(status)].base : theme.color.semantic[mode][color]
26
57
  };
27
58
  }
28
59
  //# sourceMappingURL=icon.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SIZE_TABLE","sm","md","lg","resolveIconStyle","theme","mode","size","color","width","height","semantic"],"sourceRoot":"../../../src","sources":["icons/icon.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA,MAAMA,UAAU,GAAG;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE;AAAG,CAAU;AAQtD;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,KAAkB,EAClBC,IAAe,EACfC,IAAc,GAAG,IAAI,EACrBC,KAA2B,GAAG,cAAc,EACjC;EACX,OAAO;IACLC,KAAK,EAAET,UAAU,CAACO,IAAI,CAAC;IACvBG,MAAM,EAAEV,UAAU,CAACO,IAAI,CAAC;IACxBC,KAAK,EAAEH,KAAK,CAACG,KAAK,CAACG,QAAQ,CAACL,IAAI,CAAC,CAACE,KAAK;EACzC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["toStatusTokenKey","SIZE_TABLE","sm","md","lg","statusVariantOf","color","resolveIconStyle","theme","mode","size","status","width","height","base","semantic"],"sourceRoot":"../../../src","sources":["icons/icon.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA,SAASA,gBAAgB,QAAQ,gCAAgC;;AAIjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,MAAMC,UAAU,GAAG;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE;AAAG,CAAU;;AAEtD;AACA,SAASC,eAAeA,CAACC,KAAgB,EAA0C;EACjF,QAAQA,KAAK;IACX,KAAK,gBAAgB;MACnB,OAAO,SAAS;IAClB,KAAK,gBAAgB;MACnB,OAAO,SAAS;IAClB,KAAK,cAAc;MACjB,OAAO,OAAO;IAChB;MACE,OAAO,IAAI;EACf;AACF;AAQA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,KAAkB,EAClBC,IAAe,EACfC,IAAc,GAAG,IAAI,EACrBJ,KAAgB,GAAG,cAAc,EACtB;EACX,MAAMK,MAAM,GAAGN,eAAe,CAACC,KAAK,CAAC;EACrC,OAAO;IACLM,KAAK,EAAEX,UAAU,CAACS,IAAI,CAAC;IACvBG,MAAM,EAAEZ,UAAU,CAACS,IAAI,CAAC;IACxBJ,KAAK,EACHK,MAAM,KAAK,IAAI,GACXH,KAAK,CAACF,KAAK,CAACK,MAAM,CAACX,gBAAgB,CAACW,MAAM,CAAC,CAAC,CAACG,IAAI,GACjDN,KAAK,CAACF,KAAK,CAACS,QAAQ,CAACN,IAAI,CAAC,CAACH,KAAK;EACxC,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Icon","GLYPHS","ICON_NAMES"],"sourceRoot":"../../../src","sources":["icons/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,QAAQ,WAAQ;AAC7B,SAASC,MAAM,EAAEC,UAAU,QAAQ,aAAU","ignoreList":[]}
1
+ {"version":3,"names":["Icon","GLYPHS","ICON_NAMES"],"sourceRoot":"../../../src","sources":["icons/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,QAAQ,WAAW;AAChC,SAASC,MAAM,EAAEC,UAAU,QAAQ,aAAa","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["CONTRACTS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAS;;AAEvB;AACA,cAAc,uBAAc;AAC5B,cAAc,uBAAc;;AAE5B;AACA,SACEA,SAAS,QAMJ,+BAA4B","ignoreList":[]}
1
+ {"version":3,"names":["CONTRACTS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;;AAEhC;AACA,cAAc,uBAAuB;AACrC,cAAc,uBAAuB;;AAErC;AACA,SACEA,SAAS,QAMJ,+BAA+B","ignoreList":[]}
@@ -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":"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","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
- import { Text as RNText } from "react-native";
20
+ import { StyleSheet, Text as RNText } from "react-native";
19
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
@@ -38,17 +43,33 @@ export function Text({
38
43
  // 形状(mode 非依存)は variant/role/weight にだけ依存させてメモ化(B-3)。
39
44
  // 決定ロジックは pure resolver(text.styles.ts)に分離済み — recipe との機械照合対象。
40
45
  const shape = useMemo(() => resolveTextShape(theme, variant, role, weight), [theme, variant, role, weight]);
46
+
47
+ // 消費者 style は合成順で最後=上書きが勝つため、resolver 内のクランプだけでは
48
+ // `style={{lineHeight: 16}}` を止められない。flatten した**最終値**に行間の安全下限を掛ける
49
+ // (fontSize の上書きにも追随させるため、下限は最終 fontSize から算出。機序は theme/line-height.ts)。
50
+ const flat = StyleSheet.flatten([shape, {
51
+ color: colors[color]
52
+ }, style]);
53
+ // `fontSize: undefined` の明示上書き(flatten は undefined でも上書きする)は、RN 既定サイズで
54
+ // 描画されるのにクランプ基準だけ variant 値になる齟齬を生む。variant の fontSize を復元して
55
+ // 「Text の文字サイズは variant が決める」契約とクランプ基準を一致させる。
56
+ if (typeof flat.fontSize !== "number") flat.fontSize = shape.fontSize;
57
+ if (flat.lineHeight !== undefined) {
58
+ const floor = minLineHeightFor(flat.fontSize ?? 0, minRatioOf(theme));
59
+ if (flat.lineHeight < floor) flat.lineHeight = floor;
60
+ }
41
61
  return /*#__PURE__*/_jsx(RNText, {
42
- style: [shape, {
43
- color: colors[color]
44
- }, style],
62
+ style: flat,
45
63
  numberOfLines: numberOfLines,
64
+ allowFontScaling: allowFontScaling,
65
+ maxFontSizeMultiplier: maxFontSizeMultiplier,
46
66
  accessibilityRole: role === "heading" ? "header" : undefined,
47
67
  testID: testID,
48
68
  children: children
49
69
  });
50
70
  }
51
71
 
52
- // Phase 2 conformance test 用の contract メタ(§2 A-3)。
72
+ // conformance test 用の contract メタ(§2 A-3)。scripts/lib/conformance.test.ts が
73
+ // 「この宣言が正しい contract を指しているか」を静的スキャンで照合する。
53
74
  Text.__contract = CONTRACTS.text;
54
75
  //# sourceMappingURL=Text.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","Text","RNText","useTheme","CONTRACTS","resolveTextShape","jsx","_jsx","variant","weight","color","role","numberOfLines","style","testID","children","theme","colors","shape","accessibilityRole","undefined","__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,IAAI,IAAIC,MAAM,QAAwC,cAAc;AAC7E,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAwB,gCAA6B;AACvE,SAASC,gBAAgB,QAAuB,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBhE,OAAO,SAASN,IAAIA,CAAC;EACnBO,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,GAAGd,QAAQ,CAAC,CAAC;;EAEpC;EACA;EACA,MAAMe,KAAK,GAAGlB,OAAO,CACnB,MAAMK,gBAAgB,CAACW,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAAC,EACpD,CAACO,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAC/B,CAAC;EAED,oBACEF,IAAA,CAACL,MAAM;IACLW,KAAK,EAAE,CAACK,KAAK,EAAE;MAAER,KAAK,EAAEO,MAAM,CAACP,KAAK;IAAE,CAAC,EAAEG,KAAK,CAAE;IAChDD,aAAa,EAAEA,aAAc;IAC7BO,iBAAiB,EAAER,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAGS,SAAU;IAC7DN,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAEdA;EAAQ,CACH,CAAC;AAEb;;AAEA;AACAd,IAAI,CAACoB,UAAU,GAAGjB,SAAS,CAACkB,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":[]}