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,16 +7,17 @@
7
7
  * - variant はレイアウト: vertical(標準)/ horizontal(wrap する横並び)/ card-style
8
8
  * (各 option を枠付きカードにする。web の grid 2col は RN では縦積みに読み替え)。
9
9
  * - RN にネイティブ radio が無いため各 option は Pressable + 描画(circle + 内側 dot)。
10
+ * option 行は minHeight 44pt(RADIO_SPEC.optionMinHeight)で実効タップ標的を確保する。
10
11
  * - states(contract → prop の写像): selected/unselected → value との一致、
11
12
  * error → error?: string(circle の borderColor 差分 + errorText 表示。selected と併用時は
12
13
  * error を優先 = 契約 stateSpecs)、disabled → グループ全体 or option 個別(opacity 0.5 + 非活性)。
13
- * focus は Phase1 非対応(recipe にも focus 差分なし)。
14
+ * focus は非対応(recipe にも focus 差分なし)。
14
15
  * - a11y: グループに accessibilityRole="radiogroup"、各 option に "radio" +
15
16
  * accessibilityState={{ checked, disabled }}。
16
17
  * - 色・寸法の決定は pure resolver(radio.styles.ts)に分離。
17
18
  * recipes/app/radio.recipe.json との機械照合は scripts/lib/radio-conformance.test.ts が行う。
18
19
  */
19
- import { type RadioVariant } from "./radio.styles";
20
+ import { type RadioVariant } from "./radio.styles.js";
20
21
  export interface RadioOption {
21
22
  label: string;
22
23
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../../src/components/Radio.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAoB,EACpB,KAAK,EACL,QAAgB,EAChB,MAAM,GACP,EAAE,UAAU,2CAsFZ;yBA/Fe,KAAK"}
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../../src/components/Radio.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAoB,EACpB,KAAK,EACL,QAAgB,EAChB,MAAM,GACP,EAAE,UAAU,2CAyFZ;yBAlGe,KAAK"}
@@ -13,23 +13,46 @@
13
13
  * react-native-safe-area-context 利用者は subpath "melta-app/safe-area" の
14
14
  * enableSafeAreaContext() で context hook + View adapter に差し替えられる
15
15
  * (rally-nav dogfood 由来、RN 0.85 Fabric/Android の初回 inset flash 対応)。
16
+ * 適用する edge は `edges` prop(省略時は enableSafeAreaContext の既定)。
16
17
  */
17
- import { type ReactNode } from "react";
18
- import { type StyleProp, type ViewStyle } from "react-native";
19
- import { type VariantOf } from "../contracts/contract-types";
20
- import { type ScreenPadding } from "./screen.styles";
18
+ import { type ReactNode, type Ref } from "react";
19
+ import { ScrollView, type ScrollViewProps, type StyleProp, type ViewStyle } from "react-native";
20
+ import { type SafeAreaEdge } from "./safe-area-registry.js";
21
+ import { type VariantOf } from "../contracts/contract-types.js";
22
+ import { type ScreenPadding } from "./screen.styles.js";
21
23
  interface ScreenProps {
22
24
  /** 画面の骨格(contract variant)。default "scroll"。 */
23
25
  variant?: VariantOf<"screen">;
24
26
  /** content の padding(spacing token キー限定 | "none")。default "4"。 */
25
27
  padding?: ScreenPadding;
28
+ /**
29
+ * safe-area を適用する辺。省略時は enableSafeAreaContext({ edges }) の既定。
30
+ * タブバーが bottom を自前処理する画面は `["top"]` のように絞る。
31
+ *
32
+ * ⚠️ adapter 未登録(RN core SafeAreaView)では**無視される**(core は辺を選べない)。
33
+ */
34
+ edges?: readonly SafeAreaEdge[];
26
35
  /** scroll 外(SafeArea 直下)に固定されるヘッダー slot(Header を差す想定)。 */
27
36
  header?: ReactNode;
37
+ /**
38
+ * 内部 ScrollView への passthrough(variant="scroll" のみ)。children は Screen が持つ。
39
+ *
40
+ * - `contentContainerStyle` は DS の padding と**配列合成**される(渡した側が後勝ち。
41
+ * 意図的な非常口 — DS の padding を残したい場合は padding 系を書かないこと)。
42
+ * - `contentInsetAdjustmentBehavior` は**型で遮断**(safe-area は Screen 側が持つので
43
+ * iOS の自動 inset と必ず二重になる。正当な用途が無いため Omit)。
44
+ */
45
+ scrollViewProps?: Omit<ScrollViewProps, "children" | "contentInsetAdjustmentBehavior">;
46
+ /**
47
+ * 内部 ScrollView の ref(scrollTo / scrollToEnd 用、variant="scroll" のみ)。
48
+ * Screen 自体は `__contract` 静的プロパティを持つため forwardRef 化せず別 prop にしている。
49
+ */
50
+ scrollViewRef?: Ref<ScrollView>;
28
51
  style?: StyleProp<ViewStyle>;
29
52
  testID?: string;
30
53
  children: ReactNode;
31
54
  }
32
- export declare function Screen({ variant, padding, header, style, testID, children, }: ScreenProps): import("react/jsx-runtime").JSX.Element;
55
+ export declare function Screen({ variant, padding, edges, header, scrollViewProps, scrollViewRef, style, testID, children, }: ScreenProps): import("react/jsx-runtime").JSX.Element;
33
56
  export declare namespace Screen {
34
57
  var __contract: {
35
58
  readonly id: "screen";
@@ -1 +1 @@
1
- {"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../../src/components/Screen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGhF,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAsB,KAAK,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAE3F,UAAU,WAAW;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,kEAAkE;IAClE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAkB,EAClB,OAAa,EACb,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,GACT,EAAE,WAAW,2CAoBb;yBA3Be,MAAM"}
1
+ {"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../../src/components/Screen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,EACL,UAAU,EAEV,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAsB,KAAK,aAAa,EAAoB,MAAM,oBAAoB,CAAC;AAK9F,UAAU,WAAW;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,kEAAkE;IAClE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,gCAAgC,CAAC,CAAC;IACvF;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAkB,EAClB,OAAa,EACb,KAAK,EACL,MAAM,EACN,eAAe,EACf,aAAa,EACb,KAAK,EACL,MAAM,EACN,QAAQ,GACT,EAAE,WAAW,2CA2Cb;yBArDe,MAAM"}
@@ -13,7 +13,7 @@
13
13
  * 同期的に loop を start すると reduce-motion ON でも一瞬光るため。ON 時は pulse 完全停止 + busy 維持。
14
14
  */
15
15
  import { type DimensionValue, type StyleProp, type ViewStyle } from "react-native";
16
- import { type SkeletonVariant } from "./skeleton.styles";
16
+ import { type SkeletonVariant } from "./skeleton.styles.js";
17
17
  interface SkeletonProps {
18
18
  variant?: SkeletonVariant;
19
19
  width?: DimensionValue;
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAChB,KAAc,EACd,KAAS,EACT,kBAA4B,EAC5B,KAAK,EACL,MAAM,GACP,EAAE,aAAa,2CAiGf;yBAxGe,QAAQ"}
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAChB,KAAc,EACd,KAAS,EACT,kBAA4B,EAC5B,KAAK,EACL,MAAM,GACP,EAAE,aAAa,2CAiGf;yBAxGe,QAAQ"}
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { ReactNode } from "react";
14
14
  import { type StyleProp, type ViewStyle } from "react-native";
15
- import { type SurfaceStyleProps } from "./surface.styles";
15
+ import { type SurfaceStyleProps } from "./surface.styles.js";
16
16
  export interface SurfaceProps extends SurfaceStyleProps {
17
17
  style?: StyleProp<ViewStyle>;
18
18
  testID?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../src/components/Surface.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAQhG;yBARe,OAAO"}
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../src/components/Surface.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElF,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAQhG;yBARe,OAAO"}
@@ -6,7 +6,8 @@
6
6
  * editable=false + accessibilityState.disabled を併せて適用する(recipe description の規約)。
7
7
  * - error 時は errorText を必ずテキストで表示する(FORM_NO_COLOR_ONLY_ERROR = 色だけで伝えない)。
8
8
  * RN には aria-describedby 相当が無いため、(a) errorText を input の accessibilityLabel に合成
9
- * (再フォーカス時に読み上げ)、(b) errorText 側に accessibilityLiveRegion="polite"(Android は
9
+ * (再フォーカス時に読み上げ。合成文は formatErrorAccessibilityLabel で差し替え可能 = i18n フック。
10
+ * 既定は日本語)、(b) errorText 側に accessibilityLiveRegion="polite"(Android は
10
11
  * 出現時に通知。iOS の即時通知が要る画面は submit 時に announceForAccessibility を併用する —
11
12
  * docs/patterns.md 参照)。
12
13
  * - focus は内部 state(onFocus/onBlur)で recipe states.focus の inputStyle 差分
@@ -19,9 +20,9 @@
19
20
  * 透過しない(token 純度維持)。
20
21
  */
21
22
  import { Platform, type KeyboardTypeOptions, type ReturnKeyTypeOptions, type TextInputProps, type StyleProp, type TextStyle, type ViewStyle } from "react-native";
22
- import { type TextFieldSize } from "./textfield.styles";
23
+ import { type TextFieldSize } from "./textfield.styles.js";
23
24
  /**
24
- * Android の EditText は固定 height と組み合わさると既定の縦 padding で文字が
25
+ * Android の EditText は高さ下限(minHeight)と組み合わさると既定の縦 padding で文字が
25
26
  * 上寄り・下端切れになるため、縦 padding を殺して縦センターに揃える。
26
27
  * textAlignVertical は Android 専用、paddingVertical: 0 は iOS の見た目を変えない
27
28
  * (iOS の単一行入力は元々縦センター)。
@@ -49,6 +50,12 @@ interface TextFieldProps {
49
50
  helperText?: string;
50
51
  /** variant="error" 時に表示するエラーメッセージ(色だけでなくテキストで伝える)。 */
51
52
  errorText?: string;
53
+ /**
54
+ * error 時に input の accessibilityLabel へ合成する文字列の組み立て(i18n フック)。
55
+ * 既定は日本語の `${label}。エラー: ${errorText}`(既存アプリの読み上げを変えないため据え置き)。
56
+ * 英語アプリなどでは `(label, error) => \`${label}. Error: ${error}\`` を渡す。
57
+ */
58
+ formatErrorAccessibilityLabel?: (label: string, errorText: string) => string;
52
59
  /** キーボード種別(RN TextInput へ透過)。 */
53
60
  keyboardType?: KeyboardTypeOptions;
54
61
  autoCapitalize?: "none" | "sentences" | "words" | "characters";
@@ -62,7 +69,7 @@ interface TextFieldProps {
62
69
  style?: StyleProp<ViewStyle>;
63
70
  testID?: string;
64
71
  }
65
- export declare function TextField({ label, value, onChangeText, placeholder, variant, disabled, size, helperText, errorText, keyboardType, autoCapitalize, autoCorrect, maxLength, returnKeyType, onSubmitEditing, onBlur, onFocus, style, testID, }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
72
+ export declare function TextField({ label, value, onChangeText, placeholder, variant, disabled, size, helperText, errorText, formatErrorAccessibilityLabel, keyboardType, autoCapitalize, autoCorrect, maxLength, returnKeyType, onSubmitEditing, onBlur, onFocus, style, testID, }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
66
73
  export declare namespace TextField {
67
74
  var __contract: {
68
75
  readonly id: "textfield";
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/components/TextField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,QAAQ,EAIR,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;GAWG;AAEH,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,SAAS,CAMzE;AAKD,UAAU,cAAc;IACtB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,mEAAmE;IACnE,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,WAAW,EACX,OAAmB,EACnB,QAAgB,EAChB,IAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,cAAc,2CAmDhB;yBAvEe,SAAS"}
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/components/TextField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,QAAQ,EAIR,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;GAWG;AAEH,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,SAAS,CAMzE;AAcD,UAAU,cAAc;IACtB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,iCAAiC;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,mEAAmE;IACnE,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,WAAW,EACX,OAAmB,EACnB,QAAgB,EAChB,IAAe,EACf,UAAU,EACV,SAAS,EACT,6BAA8D,EAC9D,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,cAAc,2CAmDhB;yBAxEe,SAAS"}
@@ -5,7 +5,9 @@
5
5
  * - presentational component。表示位置・キュー・自動消滅はアプリ層の責務
6
6
  * (entering/visible/dismissing のアニメ state は Phase 外、recipe description)。
7
7
  * - closeButton は契約 anatomy で必須 → onClose を required prop にして型で強制。
8
- * Pressable + テキスト ×(accessibilityLabel="閉じる" 必須)。
8
+ * Pressable + テキスト ×(accessibilityLabel は既定 "閉じる"、closeAccessibilityLabel で差し替え可能)。
9
+ * - action と × は隣接する 2 つの操作要素。当たり判定が重なると押し違いが起きるので、
10
+ * 横 hitSlop を gap の 1/2 に絞る(toast.styles.ts の TOAST_TAP_TARGET)。
9
11
  * - a11y(§2 web→RN mapping): web の role=status + aria-live=polite を
10
12
  * accessibilityLiveRegion="polite"(Android のみ有効)に落とす。
11
13
  * - elevation は theme.elevation.sm(iOS shadow* + Android elevation の複合値)を container に
@@ -15,7 +17,7 @@
15
17
  * recipes/app/toast.recipe.json との機械照合は scripts/lib/toast-conformance.test.ts が行う。
16
18
  */
17
19
  import { type StyleProp, type ViewStyle } from "react-native";
18
- import { type ToastVariant } from "./toast.styles";
20
+ import { type ToastVariant } from "./toast.styles.js";
19
21
  interface ToastProps {
20
22
  /** 通知タイプ(contract variant)。 */
21
23
  variant: ToastVariant;
@@ -28,10 +30,15 @@ interface ToastProps {
28
30
  /** あれば message の後にアクションテキスト(onAction とセットで有効)。 */
29
31
  actionLabel?: string;
30
32
  onAction?: () => void;
33
+ /**
34
+ * × ボタンの accessibilityLabel(i18n フック)。既定は日本語 "閉じる"
35
+ * (既存アプリの読み上げを変えないため据え置き)。
36
+ */
37
+ closeAccessibilityLabel?: string;
31
38
  style?: StyleProp<ViewStyle>;
32
39
  testID?: string;
33
40
  }
34
- export declare function Toast({ variant, message, description, onClose, actionLabel, onAction, style, testID, }: ToastProps): import("react/jsx-runtime").JSX.Element;
41
+ export declare function Toast({ variant, message, description, onClose, actionLabel, onAction, closeAccessibilityLabel, style, testID, }: ToastProps): import("react/jsx-runtime").JSX.Element;
35
42
  export declare namespace Toast {
36
43
  var __contract: {
37
44
  readonly id: "toast";
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnF,UAAU,UAAU;IAClB,+BAA+B;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CAkDZ;yBA3De,KAAK"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/Toast.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,UAAU;IAClB,+BAA+B;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,uBAA+B,EAC/B,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CA0DZ;yBApEe,KAAK"}
@@ -8,12 +8,13 @@
8
8
  * flex-start / flex-end を切り替える(アニメは Phase 外)。
9
9
  * - disabled: recipe states.disabled の opacity + accessibilityState.disabled + onPress 無効。
10
10
  * - a11y: accessibilityRole="switch" + accessibilityState.checked。label があれば右に表示し、
11
- * Pressable 全体がタップ領域 + accessibilityLabel になる。
11
+ * Pressable 全体がタップ領域 + accessibilityLabel になる。実効タップ標的 44pt は
12
+ * 縦 hitSlop で確保する(TOGGLE_VERTICAL_HIT_SLOP、A11Y_MIN_TAP_TARGET_44)。
12
13
  * - 色・寸法の決定は pure resolver(toggle.styles.ts)に分離。
13
14
  * recipes/app/toggle.recipe.json との機械照合は scripts/lib/toggle-conformance.test.ts が行う。
14
15
  */
15
16
  import { type StyleProp, type ViewStyle } from "react-native";
16
- import { type ToggleSize } from "./toggle.styles";
17
+ import { type ToggleSize } from "./toggle.styles.js";
17
18
  interface ToggleProps {
18
19
  /** 現在値(true=on / false=off。variant はここから暗黙決定)。 */
19
20
  value: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../../src/components/Toggle.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,WAAW;IACnB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,aAAa,EACb,KAAK,EACL,IAAe,EACf,QAAgB,EAChB,KAAK,EACL,MAAM,GACP,EAAE,WAAW,2CA2Cb;yBAnDe,MAAM"}
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../../src/components/Toggle.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI/E,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,WAAW;IACnB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,aAAa,EACb,KAAK,EACL,IAAe,EACf,QAAgB,EAChB,KAAK,EACL,MAAM,GACP,EAAE,WAAW,2CAiDb;yBAzDe,MAAM"}
@@ -12,7 +12,7 @@
12
12
  * - overlay の黒 50% は token 外の literal(modal と同じ)。
13
13
  * - sheet の下余白(SafeArea)は実装(ActionSheet.tsx)が SafeAreaView で加算する。
14
14
  */
15
- import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme";
15
+ import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
16
16
  /** overlay の黒 50%(token 外 literal。modal と同値)。 */
17
17
  export declare const ACTION_SHEET_OVERLAY_COLOR = "rgba(0,0,0,0.5)";
18
18
  export interface ActionSheetStyle {
@@ -1 +1 @@
1
- {"version":3,"file":"action-sheet.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/action-sheet.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExE,iDAAiD;AAEjD,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,CAAC;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,UAAU,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAClF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,QAAQ,CAAC;QACrB,cAAc,EAAE,CAAC,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,oBAAoB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,QAAQ,CAAC;KACtB,CAAC;IACF,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACnF;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CA+C7F"}
1
+ {"version":3,"file":"action-sheet.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/action-sheet.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjF,iDAAiD;AAEjD,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,CAAC;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,UAAU,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAClF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,QAAQ,CAAC;QACrB,cAAc,EAAE,CAAC,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,oBAAoB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,QAAQ,CAAC;KACtB,CAAC;IACF,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACnF;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CA+C7F"}
@@ -7,15 +7,25 @@
7
7
  *
8
8
  * - RN では border を持たず bg subtle + text 色で表現する(status token に border 用の中間色が
9
9
  * 無いため。COLOR_ONLY_FORBIDDEN は title/message のテキストと icon slot で担保、recipe description)。
10
- * - dark mode は status.*.subtleDark / textDark 側を解決する。info variant のみ primary 固定
11
- * (dark token が無い既知の割り切り、web と同じ)。
10
+ * - status 色(mode ごとの subtle / text、info の primary 固定)の解決は status-colors.ts が SSOT。
12
11
  */
13
- import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme";
14
- export type AlertVariant = "info" | "success" | "warning" | "error";
12
+ import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
13
+ import { type StatusVariant } from "./status-colors.js";
14
+ /** alert.contract の variant 語彙(status 共通語彙と 1:1)。 */
15
+ export type AlertVariant = StatusVariant;
15
16
  /**
16
17
  * 構成キー(token キー)。component は Text にこのキーをそのまま渡し、resolver は同じキーから
17
18
  * style 値を解決する(component と resolver が別々のキーを持って drift する事故を防ぐ SSOT)。
18
19
  */
20
+ /**
21
+ * × の当たり判定(正典パターン: 視覚 24pt + hitSlop 10 = 実効 44pt)。
22
+ * Alert の × は右端に単独で立つ(Toast と違い隣接する操作要素が無い)ので横も 10 のままでよい。
23
+ */
24
+ export declare const ALERT_CLOSE_TAP_TARGET: {
25
+ readonly minWidth: 24;
26
+ readonly minHeight: 24;
27
+ readonly hitSlop: 10;
28
+ };
19
29
  export declare const ALERT_SPEC: {
20
30
  readonly padding: "4";
21
31
  readonly gap: "3";
@@ -46,16 +56,6 @@ export interface AlertStyles {
46
56
  fontSize: number;
47
57
  };
48
58
  }
49
- /**
50
- * variant → bg / text 色の解決。
51
- * - info: primary.50 / primary.800 固定(mode 非依存)。
52
- * - success / warning / error: status token(error は status キー上は danger)。
53
- * light は subtleLight / textLight、dark は subtleDark / textDark(recipe description の写像)。
54
- */
55
- export declare function resolveAlertColors(theme: NativeTheme, mode: ThemeMode, variant: AlertVariant): {
56
- bg: string;
57
- text: string;
58
- };
59
59
  /** variant → 全 slot の style 解決(alert.recipe styleRefs の 1:1 写像)。 */
60
60
  export declare function resolveAlertStyles(theme: NativeTheme, mode: ThemeMode, variant: AlertVariant): AlertStyles;
61
61
  //# sourceMappingURL=alert.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/alert.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,YAAY,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,gDAAgD;IAChD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;IACF,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ9B;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB,WAAW,CAqBb"}
1
+ {"version":3,"file":"alert.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/alert.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGpF,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC;;;GAGG;AACH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;CAAuB,CAAC;AAE3D,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,YAAY,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,gDAAgD;IAChD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;IACF,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB,WAAW,CAqBb"}
@@ -5,11 +5,46 @@
5
5
  * 直接実行できる。recipes/app/avatar.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/avatar-conformance.test.ts が行う。
7
7
  */
8
- import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme";
8
+ import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
9
9
  export type AvatarSize = "small" | "medium" | "large";
10
10
  export type AvatarStatus = "online" | "away" | "offline";
11
+ /** サイズ軸(contract sizes の height と 1:1。recipe sizes の width/height/dotSize/fontSize に対応)。 */
12
+ export declare const AVATAR_SIZE_SPEC: {
13
+ readonly small: {
14
+ readonly box: 32;
15
+ readonly dot: 8;
16
+ readonly fontSize: "xs";
17
+ };
18
+ readonly medium: {
19
+ readonly box: 40;
20
+ readonly dot: 10;
21
+ readonly fontSize: "sm";
22
+ };
23
+ readonly large: {
24
+ readonly box: 48;
25
+ readonly dot: 12;
26
+ readonly fontSize: "base";
27
+ };
28
+ };
11
29
  /** group の重なり(-spacing.2 相当。負値 token が無いため recipe と同じ literal)。 */
12
30
  export declare const AVATAR_GROUP_OVERLAP = -8;
31
+ /**
32
+ * initials の文字サイズ倍率の上限(size 別)。
33
+ *
34
+ * Avatar の器は **width = height の円**(recipe sizes の box)で、fontScale で伸びるのは
35
+ * 中身の文字だけ。器は伸びないので、上限を掛けないと OS の文字サイズ拡大で文字が円から
36
+ * はみ出す(円が楕円に見える / 文字が切れる)。
37
+ *
38
+ * 導出は「box ÷ その size が使う fontSize token の lineHeight」を**小数第1位で切り捨て**(安全側):
39
+ * small 32 ÷ 19(xs の lineHeight) = 1.68… → 1.6
40
+ * medium 40 ÷ 26(sm の lineHeight) = 1.53… → 1.5
41
+ * large 48 ÷ 36(base の lineHeight) = 1.33… → 1.3
42
+ *
43
+ * lineHeight(fontSize ではなく)を分母に採るのは、RN が確保する行ボックスの高さが
44
+ * 溢れの実体だから。theme を差し替えても壊れないよう、この導出そのものは
45
+ * avatar-conformance.test.ts が実 theme の値で再検算する。
46
+ */
47
+ export declare const AVATAR_INITIALS_MAX_FONT_SCALE: Record<AvatarSize, number>;
13
48
  /**
14
49
  * group variant(avatar.recipe の group.style / group.overlapStyle の 1:1 写像)。
15
50
  * container は横並び、2枚目以降の子に overlap(負 margin)を適用する。
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/avatar.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AASzD,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI;IACzC,SAAS,EAAE;QAAE,aAAa,EAAE,KAAK,CAAA;KAAE,CAAC;IACpC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC,CAKA;AAED,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;QACtB,cAAc,CAAC,EAAE,QAAQ,CAAC;KAC3B,CAAC;IACF,wCAAwC;IACxC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,4DAA4D;IAC5D,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,GAAG,UAAU,EAC7B,IAAI,EAAE,UAAU,GACf,iBAAiB,CA4BnB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CASR"}
1
+ {"version":3,"file":"avatar.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/avatar.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAInB,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAIrE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI;IACzC,SAAS,EAAE;QAAE,aAAa,EAAE,KAAK,CAAA;KAAE,CAAC;IACpC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC,CAKA;AAED,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,QAAQ,CAAC;QACtB,cAAc,CAAC,EAAE,QAAQ,CAAC;KAC3B,CAAC;IACF,wCAAwC;IACxC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,4DAA4D;IAC5D,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,GAAG,UAAU,EAC7B,IAAI,EAAE,UAAU,GACf,iBAAiB,CA4BnB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CASR"}
@@ -12,7 +12,7 @@
12
12
  * - overlay の黒 50% は token 外の literal(modal と同じ)。
13
13
  * - sheet の下余白(SafeArea)は実装(BottomSheet.tsx)が SafeAreaView で加算する。
14
14
  */
15
- import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme";
15
+ import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
16
16
  /** overlay の黒 50%(token 外 literal。modal と同値)。 */
17
17
  export declare const BOTTOM_SHEET_OVERLAY_COLOR = "rgba(0,0,0,0.5)";
18
18
  export interface BottomSheetStyle {
@@ -1 +1 @@
1
- {"version":3,"file":"bottom-sheet.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/bottom-sheet.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExE,iDAAiD;AAEjD,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,UAAU,CAAA;KAAE,CAAC;IAC/E,UAAU,EAAE;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,CAAC;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,QAAQ,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CA8B7F"}
1
+ {"version":3,"file":"bottom-sheet.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/bottom-sheet.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjF,iDAAiD;AAEjD,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,UAAU,CAAA;KAAE,CAAC;IAC/E,UAAU,EAAE;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,CAAC;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,QAAQ,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CA8B7F"}
@@ -6,7 +6,7 @@
6
6
  * との機械照合は scripts/lib/card-conformance.test.ts が行う。
7
7
  */
8
8
  import type { ViewStyle } from "react-native";
9
- import type { NativeTheme, ThemeMode } from "../theme";
9
+ import type { NativeTheme, ThemeMode } from "../theme/index.js";
10
10
  export type CardVariant = "basic" | "media" | "action" | "link";
11
11
  /** variant → インタラクティブ(Pressable)か。action/link のみ true(recipe pressedStyle の有無と対応)。 */
12
12
  export declare const CARD_INTERACTIVE: Record<CardVariant, boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"card.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/card.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAgB,MAAM,UAAU,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAKzD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,EACpB,OAAO,UAAQ,GACd,SAAS,CAYX;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACnB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEjC"}
1
+ {"version":3,"file":"card.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/card.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAKzD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,EACpB,OAAO,UAAQ,GACd,SAAS,CAYX;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACnB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEjC"}
@@ -8,7 +8,7 @@
8
8
  * 直接網羅できるようにしている。Card 側は結果を dev で1回だけ報告するだけ
9
9
  * (警告のラッチに依存せずに検査内容そのものをテストできる形にするため)。
10
10
  */
11
- import type { CardVariant } from "./card.styles";
11
+ import type { CardVariant } from "./card.styles.js";
12
12
  export interface CardPropsForValidation {
13
13
  variant: CardVariant;
14
14
  onPress?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"card.validate.d.ts","sourceRoot":"","sources":["../../../../src/components/card.validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,OAAO,EACP,aAAa,GACd,EAAE,sBAAsB,GAAG,MAAM,EAAE,CA0DnC"}
1
+ {"version":3,"file":"card.validate.d.ts","sourceRoot":"","sources":["../../../../src/components/card.validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,OAAO,EACP,aAAa,GACd,EAAE,sBAAsB,GAAG,MAAM,EAAE,CA0DnC"}
@@ -5,17 +5,20 @@
5
5
  * 直接実行できる。recipes/app/checkbox.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/checkbox-conformance.test.ts が行う。
7
7
  */
8
- import type { NativeTheme, ThemeMode } from "../theme";
8
+ import type { NativeTheme, ThemeMode } from "../theme/index.js";
9
9
  /**
10
10
  * recipe 由来の literal 値テーブル(token 化されていない数値。conformance が recipe と照合する)。
11
11
  * - box は 20px(web の 16px より大きいのはタッチ前提、recipe description)
12
- * - hitSlop は (44 - box 20) / 2 = 12。行全体 Pressable に足して実タッチ領域 44pt を確保
12
+ * - 実効タップ標的 44pt は行の minHeight で確保(A11Y_MIN_TAP_TARGET_44。規約 10-(b):
13
+ * 背景を持たない行は hitSlop でなく寸法で満たす — 旧実装の四方 hitSlop 12 は行全体
14
+ * Pressable に効くため、縦積みの隣接 Checkbox と当たり判定が最大 24pt 重なっていた
15
+ * (Codex レビュー指摘)。Radio の option 行と同じ手当てに統一)
13
16
  */
14
17
  export declare const CHECKBOX_SPEC: {
15
18
  readonly boxSize: 20;
16
19
  readonly boxBorderWidth: 2;
17
20
  readonly disabledOpacity: 0.5;
18
- readonly hitSlop: 12;
21
+ readonly rowMinHeight: 44;
19
22
  };
20
23
  /** 見た目(色)に効く状態入力。disabled は opacity のみで色を変えないため含めない。 */
21
24
  export interface CheckboxStateInput {
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/checkbox.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,uFAAuF;IACvF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,aAAqB,EAAE,KAAa,EAAE,EAAE,kBAAkB,GACpE,gBAAgB,CAuBlB"}
1
+ {"version":3,"file":"checkbox.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/checkbox.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,uFAAuF;IACvF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,aAAqB,EAAE,KAAa,EAAE,EAAE,kBAAkB,GACpE,gBAAgB,CAuBlB"}
@@ -6,7 +6,7 @@
6
6
  * 直接実行できる。recipes/app/empty-state.recipe.json(melta-contracts の styleRefs)との
7
7
  * 機械照合は scripts/lib/empty-state-conformance.test.ts が行う。
8
8
  */
9
- import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme";
9
+ import type { FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
10
10
  /**
11
11
  * default variant の構成キー(token キー)。
12
12
  * component は Text / View にこのキーをそのまま渡し、resolver は同じキーから style 値を解決する
@@ -1 +1 @@
1
- {"version":3,"file":"empty-state.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/empty-state.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,UAAU,CAAC;AAElB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;CAkB5B,CAAC;AAEF,mGAAmG;AACnG,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,KAAK,EAAE;QACL,UAAU,EAAE,QAAQ,CAAC;QACrB,cAAc,EAAE,QAAQ,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,gDAAgD;IAChD,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;KACrB,CAAC;IACF,sDAAsD;IACtD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;KACrB,CAAC;IACF,kDAAkD;IAClD,WAAW,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAsB7F"}
1
+ {"version":3,"file":"empty-state.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/empty-state.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;CAkB5B,CAAC;AAEF,mGAAmG;AACnG,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,KAAK,EAAE;QACL,UAAU,EAAE,QAAQ,CAAC;QACrB,cAAc,EAAE,QAAQ,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,gDAAgD;IAChD,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;KACrB,CAAC;IACF,sDAAsD;IACtD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,CAAC;KACrB,CAAC;IACF,kDAAkD;IAClD,WAAW,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAsB7F"}
@@ -5,7 +5,7 @@
5
5
  * 直接実行できる。recipes/app/header.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/header-conformance.test.ts が行う。
7
7
  */
8
- import type { NativeTheme, ThemeMode } from "../theme";
8
+ import type { NativeTheme, ThemeMode } from "../theme/index.js";
9
9
  export interface HeaderStyle {
10
10
  containerStyle: {
11
11
  flexDirection: "row";
@@ -1 +1 @@
1
- {"version":3,"file":"header.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/header.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,CAAC,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,cAAc,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAcnF"}
1
+ {"version":3,"file":"header.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/header.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE;QACd,aAAa,EAAE,KAAK,CAAC;QACrB,UAAU,EAAE,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,CAAC,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,cAAc,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAcnF"}
@@ -10,7 +10,7 @@
10
10
  * とは意図的な食い違い。recipe description に明記済み)。ここでは radius prop
11
11
  * (token キー限定)指定時のみ borderRadius + overflow:hidden を付ける。
12
12
  */
13
- import type { NativeTheme, RadiusKey } from "../theme";
13
+ import type { NativeTheme, RadiusKey } from "../theme/index.js";
14
14
  /**
15
15
  * ImageStyle / ViewStyle 双方に有効な共通サブセット。
16
16
  * 画像本体(RNImage)と error 時の fallback View で同じ shape を共用する。
@@ -1 +1 @@
1
- {"version":3,"file":"image.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/image.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,EAAE,WAAW,EAAE,MAAM,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAO,GACzE,eAAe,CAMjB"}
1
+ {"version":3,"file":"image.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/image.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,EAAE,WAAW,EAAE,MAAM,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAO,GACzE,eAAe,CAMjB"}
@@ -2,22 +2,22 @@
2
2
  * melta-app components の公開エントリ(設計書 §1)。
3
3
  * Surface はライブラリ公開(P1)で正式 export(契約 surface.contract.json + recipe を持つ implemented)。
4
4
  */
5
- export { Surface } from "./Surface";
6
- export { Image } from "./Image";
7
- export { Card } from "./Card";
8
- export { Skeleton } from "./Skeleton";
9
- export { EmptyState } from "./EmptyState";
10
- export { Screen } from "./Screen";
11
- export { Header } from "./Header";
12
- export { Avatar } from "./Avatar";
13
- export { TextField } from "./TextField";
14
- export { Toggle } from "./Toggle";
15
- export { Checkbox } from "./Checkbox";
16
- export { Radio } from "./Radio";
17
- export { Alert } from "./Alert";
18
- export { Toast } from "./Toast";
19
- export { Progress } from "./Progress";
20
- export { Modal } from "./Modal";
21
- export { ActionSheet } from "./ActionSheet";
22
- export { BottomSheet } from "./BottomSheet";
5
+ export { Surface } from "./Surface.js";
6
+ export { Image } from "./Image.js";
7
+ export { Card } from "./Card.js";
8
+ export { Skeleton } from "./Skeleton.js";
9
+ export { EmptyState } from "./EmptyState.js";
10
+ export { Screen } from "./Screen.js";
11
+ export { Header } from "./Header.js";
12
+ export { Avatar } from "./Avatar.js";
13
+ export { TextField } from "./TextField.js";
14
+ export { Toggle } from "./Toggle.js";
15
+ export { Checkbox } from "./Checkbox.js";
16
+ export { Radio } from "./Radio.js";
17
+ export { Alert } from "./Alert.js";
18
+ export { Toast } from "./Toast.js";
19
+ export { Progress } from "./Progress.js";
20
+ export { Modal } from "./Modal.js";
21
+ export { ActionSheet } from "./ActionSheet.js";
22
+ export { BottomSheet } from "./BottomSheet.js";
23
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -12,8 +12,19 @@
12
12
  * panelStyle 本体と分けて panelElevation で返す(Surface と同じ扱い)。
13
13
  * - sizes はタブレット以上で効く maxWidth(モバイルは width 100% - overlay padding が先に効く)。
14
14
  */
15
- import type { ElevationStyle, FontWeightValue, NativeTheme, ThemeMode } from "../theme";
16
- import type { SizeOf, VariantOf } from "../contracts/contract-types";
15
+ import type { ElevationStyle, FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
16
+ import type { SizeOf, VariantOf } from "../contracts/contract-types.js";
17
+ /**
18
+ * title 行の × の当たり判定(正典パターン: 視覚 24pt + hitSlop 10 = 実効 44pt)。
19
+ *
20
+ * 以前は hitSlop=spacing.2(8)だけで、× のグリフ幅(fontSize.xl の "×" ≈ 13pt)+ 8×2 =
21
+ * 実効 29pt しか無かった(Toast / Alert の × は正典パターン済みだったので Modal だけ取り残されていた)。
22
+ */
23
+ export declare const MODAL_CLOSE_TAP_TARGET: {
24
+ readonly minWidth: 24;
25
+ readonly minHeight: 24;
26
+ readonly hitSlop: 10;
27
+ };
17
28
  export type ModalVariant = VariantOf<"modal">;
18
29
  export type ModalSize = SizeOf<"modal">;
19
30
  /** size → panel の maxWidth(modal.recipe sizes の literal と 1:1)。 */