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
@@ -9,7 +9,14 @@
9
9
  * 色だけでなくラベル文言でも破壊的操作と分かる文言にするのは呼び出し側の責務(contract a11y)。
10
10
  * - 先頭 action の borderTop は title が無い場合は消す(title がある時だけ区切りとして意味を持つ)。
11
11
  * - action の onPress 後は onClose も呼ぶ(選択 = シートを閉じる)。
12
- * - sheet 群は SafeAreaView で包み下余白(ホームインジケータ)を確保(recipe description 参照)。
12
+ * - 下余白(ホームインジケータ)は SafeArea で確保する(recipe description 参照)。位置は
13
+ * **最下部の面である cancel ブロックの内側**(BottomSheet と同じ「内側」方針に統一)。
14
+ * 0.5.x までは sheet 群の外側に置いていたため、iOS では inset 帯に overlay の黒が見えていた。
15
+ * 内側に移したことで inset 帯まで bg-surface で塗られる代わり、cancel ブロックは
16
+ * inset のぶん背が高くなる(ラベルは上寄りに見える)=意図した見た目の変更。
17
+ * edge は bottom + 左右のみ(top は overlay 側で、シートは上端に接しない)。
18
+ * SafeArea 実装は registry 経由(safe-area-registry.ts)— "melta-app/safe-area" を
19
+ * 有効化したアプリでは Android でも inset が入る(RN core の SafeAreaView は Android で no-op)。
13
20
  * - sheet 側は onStartShouldSetResponder で touch を claim し、overlay tap でだけ閉じる。
14
21
  * - style の決定は pure resolver(action-sheet.styles.ts)に分離 — recipe との機械照合対象。
15
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../../src/components/ActionSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAO,EACP,WAAqB,EACrB,MAAM,GACP,EAAE,gBAAgB,2CAsDlB;yBA7De,WAAW"}
1
+ {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../../src/components/ActionSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAO,EACP,WAAqB,EACrB,MAAM,GACP,EAAE,gBAAgB,2CA2DlB;yBAlEe,WAAW"}
@@ -5,6 +5,8 @@
5
5
  * - RN では border を持たず bg subtle + text 色で表現(status token に border 用の中間色が無い、
6
6
  * recipe description)。COLOR_ONLY_FORBIDDEN は title/message のテキストと icon slot で担保する設計。
7
7
  * - icon は ReactNode slot(EmptyState 前例。Icon を差すなら melta-app/icons を利用者が opt-in)。
8
+ * - × の accessibilityLabel は既定 "閉じる"(closeAccessibilityLabel で差し替え可能)。
9
+ * 当たり判定は正典パターン(24 + hitSlop 10 = 44pt)。
8
10
  * - a11y(§2 web→RN mapping): web の role=alert(error/warning) / status(info/success) を、
9
11
  * error/warning → accessibilityRole="alert"、info/success → accessibilityLiveRegion="polite"
10
12
  * (Android のみ有効。RN に status role が無いための写像)に落とす。
@@ -14,7 +16,7 @@
14
16
  */
15
17
  import { type ReactNode } from "react";
16
18
  import { type StyleProp, type ViewStyle } from "react-native";
17
- import { type AlertVariant } from "./alert.styles";
19
+ import { type AlertVariant } from "./alert.styles.js";
18
20
  interface AlertProps {
19
21
  /** 通知タイプ(contract variant)。 */
20
22
  variant: AlertVariant;
@@ -26,10 +28,15 @@ interface AlertProps {
26
28
  icon?: ReactNode;
27
29
  /** あれば右端に閉じるボタン(Pressable の ×)を出す。 */
28
30
  onClose?: () => void;
31
+ /**
32
+ * × ボタンの accessibilityLabel(i18n フック)。既定は日本語 "閉じる"
33
+ * (既存アプリの読み上げを変えないため据え置き)。
34
+ */
35
+ closeAccessibilityLabel?: string;
29
36
  style?: StyleProp<ViewStyle>;
30
37
  testID?: string;
31
38
  }
32
- export declare function Alert({ variant, title, message, icon, onClose, style, testID }: AlertProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function Alert({ variant, title, message, icon, onClose, closeAccessibilityLabel, style, testID, }: AlertProps): import("react/jsx-runtime").JSX.Element;
33
40
  export declare namespace Alert {
34
41
  var __contract: {
35
42
  readonly id: "alert";
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../../src/components/Alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,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,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,2CA2C1F;yBA3Ce,KAAK"}
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../../src/components/Alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,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,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;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,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,uBAA+B,EAC/B,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CAgDZ;yBAzDe,KAAK"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { type ReactNode } from "react";
12
12
  import { type ImageSourcePropType, type StyleProp, type ViewStyle } from "react-native";
13
- import { type AvatarSize, type AvatarStatus } from "./avatar.styles";
13
+ import { type AvatarSize, type AvatarStatus } from "./avatar.styles.js";
14
14
  interface AvatarProps {
15
15
  /** 表示名(initials の生成元 + accessibilityLabel。contract a11y required)。 */
16
16
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,WAAW;IACnB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iDAAiD;IACjD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,2CAqC3F;yBArCe,MAAM;;;;;;;;;;AAuCtB,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iEAAiE;AACjE,iBAAS,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CASjE"}
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,WAAW;IACnB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iDAAiD;IACjD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,2CA4C3F;yBA5Ce,MAAM;;;;;;;;;;AA8CtB,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iEAAiE;AACjE,iBAAS,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CASjE"}
@@ -6,8 +6,11 @@
6
6
  * - grabber は装飾バー。a11y ツリーから除外する(importantForAccessibility="no" +
7
7
  * accessibilityElementsHidden。recipe description 参照)。
8
8
  * - スワイプで閉じるジェスチャは実装しない(overlay tap + Android back で閉じる、Phase 外)。
9
- * - sheet は下端密着(bg-surface)のため、SafeAreaView を sheet の内側に置いて
9
+ * - sheet は下端密着(bg-surface)のため、SafeArea を sheet の内側に置いて
10
10
  * 下余白(ホームインジケータ)まで sheet 背景で覆いつつ content を安全域に収める。
11
+ * edge は bottom + 左右のみ(top は overlay 側で、シートは上端に接しない)。
12
+ * SafeArea 実装は registry 経由(safe-area-registry.ts)— "melta-app/safe-area" を
13
+ * 有効化したアプリでは Android でも inset が入る(RN core の SafeAreaView は Android で no-op)。
11
14
  * - sheet 側は onStartShouldSetResponder で touch を claim し、overlay tap でだけ閉じる。
12
15
  * - style の決定は pure resolver(bottom-sheet.styles.ts)に分離 — recipe との機械照合対象。
13
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../../src/components/BottomSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYhD,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAyC1F;yBAzCe,WAAW"}
1
+ {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../../src/components/BottomSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUhD,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CA2C1F;yBA3Ce,WAAW"}
@@ -7,7 +7,7 @@
7
7
  * scripts/lib/card-conformance.test.ts が行う。
8
8
  * - variant: basic/media は非インタラクティブ、action/link は Pressable。
9
9
  * action/link は pressed 時 elevation.sm→md(§2 hover→pressed mapping)。
10
- * focus-within は RN 非サポートとして Phase1 明示 drop(§2)。
10
+ * focus-within は RN 非サポートとして明示 drop(§2)。
11
11
  * - 型で action/link は onPress 必須を強制(§4 の DU 精神。無言で非対話に落ちる事故を防ぐ)。
12
12
  * - **カード面自体は操作要素にしない**(contract 2.1.0 の a11y.required)。面の Pressable は
13
13
  * `accessibilityRole` を名乗らず `accessible={false}`。理由は2つ:
@@ -21,7 +21,7 @@
21
21
  * react-native-web では実際に `<article>` 要素になる)。accessibilityRole 系とは別系統。
22
22
  * - **focus ring は Card では描かない**。フォーカスを受けるのは `primaryAction` 側で、
23
23
  * melta の Button は自前の ring を持つ。カードにも出すと1回のフォーカスで ring が二重に描かれる。
24
- * contract の focus-within は RN 非サポートとして Phase1 で明示 drop 済み(app recipe に記録あり)で、
24
+ * contract の focus-within は RN 非サポートとして明示 drop 済み(app recipe に記録あり)で、
25
25
  * web だけ動く実装を残すとプラットフォーム非対称になるため、実装ごと持たない。
26
26
  * - `accessibilityLabel` は 0.5.0 で削除した。面が `accessible={false}` なので native では
27
27
  * 原理的に読まれず、web だけ `aria-label` として効く非対称な prop だった。
@@ -4,14 +4,14 @@
4
4
  * - RN にネイティブ checkbox が無いため Pressable(行全体タップ)+ 描画で実装する。
5
5
  * checkmark は rotate した View の L 字 border、indeterminate は横棒
6
6
  * (react-native-svg 非依存 = 本体エントリの依存ゼロ維持。recipe description 参照)。
7
- * - box は 20px(web の 16px より大きいのはタッチ前提)。実タッチ領域は hitSlop 12 で
8
- * 44pt(20 + 12×2)を確保する。
7
+ * - box は 20px(web の 16px より大きいのはタッチ前提)。実効タップ標的は行の
8
+ * minHeight 44 で確保する(規約 10-(b): 背景を持たない行は hitSlop でなく寸法)。
9
9
  * - label 必須(FORM_NO_LABEL_OMIT を props 型で強制)。label は Text primitive
10
10
  * (base/text-default = recipe labelStyle と同値)。
11
11
  * - states(contract → prop の写像): checked/unchecked → checked:boolean、
12
12
  * indeterminate → indeterminate:boolean(variant "indeterminate"。a11y は "mixed")、
13
13
  * error → error:boolean(borderColor 差分、checked より優先)、disabled → prop
14
- * (opacity 0.5 + 非活性)。focus は Phase1 非対応(recipe にも focus 差分なし)。
14
+ * (opacity 0.5 + 非活性)。focus は非対応(recipe にも focus 差分なし)。
15
15
  * - 色・寸法の決定は pure resolver(checkbox.styles.ts)に分離。
16
16
  * recipes/app/checkbox.recipe.json との機械照合は scripts/lib/checkbox-conformance.test.ts が行う。
17
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,aAAqB,EACrB,QAAgB,EAChB,KAAa,EACb,MAAM,GACP,EAAE,aAAa,2CAqDf;yBA7De,QAAQ"}
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,aAAqB,EACrB,QAAgB,EAChB,KAAa,EACb,MAAM,GACP,EAAE,aAAa,2CAuDf;yBA/De,QAAQ"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Image — 画像表示 component(設計書 §1)。contract: image(app 先行定義)。
3
3
  *
4
- * - Phase 1 は RN コア Image。expo-image は Phase 2(blurhash / 高度 cache 要件化時)。
5
- * 差し替えコスト最小化のためここで包む(呼び出し側は melta-app の Image だけ見る)。
4
+ * - 実装は RN コア Image(依存ゼロ維持)。expo-image への差し替えは blurhash / 高度 cache が
5
+ * 要件化してから(未着手)。差し替えコスト最小化のためここで包む(呼び出し側は melta-app の
6
+ * Image だけ見る)。
6
7
  * - contentFit("cover"|"contain") → RN の resizeMode に変換。
7
8
  * - onError 時に fallback(ReactNode)を表示。fallback 未指定なら何も出さない。
8
9
  * - radius は token キーのみ(生数値不可、§5)。shape の解決は pure resolver
@@ -11,7 +12,7 @@
11
12
  */
12
13
  import { type ReactNode } from "react";
13
14
  import { type ImageStyle, type StyleProp } from "react-native";
14
- import type { RadiusKey } from "../theme";
15
+ import type { RadiusKey } from "../theme/index.js";
15
16
  type ContentFit = "cover" | "contain";
16
17
  interface ImageProps {
17
18
  source: {
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/components/Image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,KAAK,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtC,UAAU,UAAU;IAClB,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,MAAM,EACN,WAAW,EACX,MAAM,EACN,UAAoB,EACpB,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CAmCZ;yBA5Ce,KAAK"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/components/Image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,KAAK,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtC,UAAU,UAAU;IAClB,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,EACpB,MAAM,EACN,WAAW,EACX,MAAM,EACN,UAAoB,EACpB,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,MAAM,GACP,EAAE,UAAU,2CAmCZ;yBA5Ce,KAAK"}
@@ -8,13 +8,14 @@
8
8
  * Escape → Android back(onRequestClose)、open/closing state → RN Modal の visible + animationType。
9
9
  * - overlay tap で閉じる(MODAL_OVERLAY_REQUIRED)。panel 側は onStartShouldSetResponder で
10
10
  * touch を claim し、overlay への伝播を止める(panel 内 tap では閉じない)。
11
- * - title 行の右端に閉じるボタン「×」(MODAL_CLOSE_REQUIRED、accessibilityLabel="閉じる")。
11
+ * - title 行の右端に閉じるボタン「×」(MODAL_CLOSE_REQUIRED、accessibilityLabel は既定 "閉じる"、
12
+ * closeAccessibilityLabel で差し替え可能)。当たり判定は正典パターン(24 + hitSlop 10 = 44pt)。
12
13
  * title は melta の Text ではなく titleStyle 直(recipe が typography を持つ)。
13
14
  * - style の決定は pure resolver(modal.styles.ts)に分離 — recipe との機械照合対象。
14
15
  * title 行の row layout と × の見た目は recipe 外の構造 glue(token 経由で解決)。
15
16
  */
16
17
  import { type ReactNode } from "react";
17
- import { type ModalSize, type ModalVariant } from "./modal.styles";
18
+ import { type ModalSize, type ModalVariant } from "./modal.styles.js";
18
19
  interface ModalProps {
19
20
  /** 表示制御(契約の open state に対応。閉じるアニメは RN Modal に委譲)。 */
20
21
  visible: boolean;
@@ -28,11 +29,16 @@ interface ModalProps {
28
29
  size?: ModalSize;
29
30
  /** アクション群(任意)。footerStyle の row に載る。 */
30
31
  footer?: ReactNode;
32
+ /**
33
+ * × ボタンの accessibilityLabel(i18n フック)。既定は日本語 "閉じる"
34
+ * (既存アプリの読み上げを変えないため据え置き)。
35
+ */
36
+ closeAccessibilityLabel?: string;
31
37
  testID?: string;
32
38
  /** body。 */
33
39
  children: ReactNode;
34
40
  }
35
- export declare function Modal({ visible, onClose, title, variant, size, footer, testID, children, }: ModalProps): import("react/jsx-runtime").JSX.Element;
41
+ export declare function Modal({ visible, onClose, title, variant, size, footer, closeAccessibilityLabel, testID, children, }: ModalProps): import("react/jsx-runtime").JSX.Element;
36
42
  export declare namespace Modal {
37
43
  var __contract: {
38
44
  readonly id: "modal";
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/Modal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAShD,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,UAAU,UAAU;IAClB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAwB,EACxB,IAAe,EACf,MAAM,EACN,MAAM,EACN,QAAQ,GACT,EAAE,UAAU,2CAmDZ;yBA5De,KAAK"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/Modal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAShD,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,UAAU;IAClB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAwB,EACxB,IAAe,EACf,MAAM,EACN,uBAA+B,EAC/B,MAAM,EACN,QAAQ,GACT,EAAE,UAAU,2CA2DZ;yBArEe,KAAK"}
@@ -14,7 +14,7 @@
14
14
  * recipes/app/progress.recipe.json との機械照合は scripts/lib/progress-conformance.test.ts が行う。
15
15
  */
16
16
  import { type StyleProp, type ViewStyle } from "react-native";
17
- import { type ProgressVariant } from "./progress.styles";
17
+ import { type ProgressVariant } from "./progress.styles.js";
18
18
  interface ProgressProps {
19
19
  /** 進捗タイプ(contract variant)。default "primary"。 */
20
20
  variant?: ProgressVariant;
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../../../src/components/Progress.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,aAAa;IACrB,iDAAiD;IACjD,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,2CA2E3F;yBA3Ee,QAAQ"}
1
+ {"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../../../src/components/Progress.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,UAAU,aAAa;IACrB,iDAAiD;IACjD,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,2CA2E3F;yBA3Ee,QAAQ"}
@@ -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"}