melta-app 0.6.0 → 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 (295) hide show
  1. package/README.md +220 -12
  2. package/docs/architecture.md +11 -4
  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 +13 -5
  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 +2 -2
  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 +6 -7
  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 +14 -1
  94. package/lib/module/theme/define-theme.js.map +1 -1
  95. package/lib/module/theme/index.js +6 -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 +9 -0
  100. package/lib/module/theme/line-height.js.map +1 -1
  101. package/lib/module/theme/native-theme.js +1 -1
  102. package/lib/typescript/src/a11y/tap-target.d.ts +34 -0
  103. package/lib/typescript/src/a11y/tap-target.d.ts.map +1 -0
  104. package/lib/typescript/src/components/ActionSheet.d.ts +8 -1
  105. package/lib/typescript/src/components/ActionSheet.d.ts.map +1 -1
  106. package/lib/typescript/src/components/Alert.d.ts +9 -2
  107. package/lib/typescript/src/components/Alert.d.ts.map +1 -1
  108. package/lib/typescript/src/components/Avatar.d.ts +1 -1
  109. package/lib/typescript/src/components/Avatar.d.ts.map +1 -1
  110. package/lib/typescript/src/components/BottomSheet.d.ts +4 -1
  111. package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -1
  112. package/lib/typescript/src/components/Card.d.ts +2 -2
  113. package/lib/typescript/src/components/Checkbox.d.ts +3 -3
  114. package/lib/typescript/src/components/Checkbox.d.ts.map +1 -1
  115. package/lib/typescript/src/components/Image.d.ts +4 -3
  116. package/lib/typescript/src/components/Image.d.ts.map +1 -1
  117. package/lib/typescript/src/components/Modal.d.ts +9 -3
  118. package/lib/typescript/src/components/Modal.d.ts.map +1 -1
  119. package/lib/typescript/src/components/Progress.d.ts +1 -1
  120. package/lib/typescript/src/components/Progress.d.ts.map +1 -1
  121. package/lib/typescript/src/components/Radio.d.ts +3 -2
  122. package/lib/typescript/src/components/Radio.d.ts.map +1 -1
  123. package/lib/typescript/src/components/Screen.d.ts +28 -5
  124. package/lib/typescript/src/components/Screen.d.ts.map +1 -1
  125. package/lib/typescript/src/components/Skeleton.d.ts +1 -1
  126. package/lib/typescript/src/components/Skeleton.d.ts.map +1 -1
  127. package/lib/typescript/src/components/Surface.d.ts +1 -1
  128. package/lib/typescript/src/components/Surface.d.ts.map +1 -1
  129. package/lib/typescript/src/components/TextField.d.ts +11 -4
  130. package/lib/typescript/src/components/TextField.d.ts.map +1 -1
  131. package/lib/typescript/src/components/Toast.d.ts +10 -3
  132. package/lib/typescript/src/components/Toast.d.ts.map +1 -1
  133. package/lib/typescript/src/components/Toggle.d.ts +3 -2
  134. package/lib/typescript/src/components/Toggle.d.ts.map +1 -1
  135. package/lib/typescript/src/components/action-sheet.styles.d.ts +1 -1
  136. package/lib/typescript/src/components/action-sheet.styles.d.ts.map +1 -1
  137. package/lib/typescript/src/components/alert.styles.d.ts +14 -14
  138. package/lib/typescript/src/components/alert.styles.d.ts.map +1 -1
  139. package/lib/typescript/src/components/avatar.styles.d.ts +36 -1
  140. package/lib/typescript/src/components/avatar.styles.d.ts.map +1 -1
  141. package/lib/typescript/src/components/bottom-sheet.styles.d.ts +1 -1
  142. package/lib/typescript/src/components/bottom-sheet.styles.d.ts.map +1 -1
  143. package/lib/typescript/src/components/card.styles.d.ts +1 -1
  144. package/lib/typescript/src/components/card.styles.d.ts.map +1 -1
  145. package/lib/typescript/src/components/card.validate.d.ts +1 -1
  146. package/lib/typescript/src/components/card.validate.d.ts.map +1 -1
  147. package/lib/typescript/src/components/checkbox.styles.d.ts +6 -3
  148. package/lib/typescript/src/components/checkbox.styles.d.ts.map +1 -1
  149. package/lib/typescript/src/components/empty-state.styles.d.ts +1 -1
  150. package/lib/typescript/src/components/empty-state.styles.d.ts.map +1 -1
  151. package/lib/typescript/src/components/header.styles.d.ts +1 -1
  152. package/lib/typescript/src/components/header.styles.d.ts.map +1 -1
  153. package/lib/typescript/src/components/image.styles.d.ts +1 -1
  154. package/lib/typescript/src/components/image.styles.d.ts.map +1 -1
  155. package/lib/typescript/src/components/index.d.ts +18 -18
  156. package/lib/typescript/src/components/index.d.ts.map +1 -1
  157. package/lib/typescript/src/components/modal.styles.d.ts +13 -2
  158. package/lib/typescript/src/components/modal.styles.d.ts.map +1 -1
  159. package/lib/typescript/src/components/progress.styles.d.ts +1 -1
  160. package/lib/typescript/src/components/progress.styles.d.ts.map +1 -1
  161. package/lib/typescript/src/components/radio.styles.d.ts +10 -2
  162. package/lib/typescript/src/components/radio.styles.d.ts.map +1 -1
  163. package/lib/typescript/src/components/safe-area-registry.d.ts +47 -11
  164. package/lib/typescript/src/components/safe-area-registry.d.ts.map +1 -1
  165. package/lib/typescript/src/components/screen.styles.d.ts +1 -1
  166. package/lib/typescript/src/components/screen.styles.d.ts.map +1 -1
  167. package/lib/typescript/src/components/skeleton.styles.d.ts +1 -1
  168. package/lib/typescript/src/components/skeleton.styles.d.ts.map +1 -1
  169. package/lib/typescript/src/components/status-colors.d.ts +33 -0
  170. package/lib/typescript/src/components/status-colors.d.ts.map +1 -0
  171. package/lib/typescript/src/components/surface.styles.d.ts +1 -1
  172. package/lib/typescript/src/components/surface.styles.d.ts.map +1 -1
  173. package/lib/typescript/src/components/textfield.styles.d.ts +9 -5
  174. package/lib/typescript/src/components/textfield.styles.d.ts.map +1 -1
  175. package/lib/typescript/src/components/toast.styles.d.ts +34 -14
  176. package/lib/typescript/src/components/toast.styles.d.ts.map +1 -1
  177. package/lib/typescript/src/components/toggle.styles.d.ts +17 -1
  178. package/lib/typescript/src/components/toggle.styles.d.ts.map +1 -1
  179. package/lib/typescript/src/icons/Icon.d.ts +12 -6
  180. package/lib/typescript/src/icons/Icon.d.ts.map +1 -1
  181. package/lib/typescript/src/icons/icon.styles.d.ts +14 -2
  182. package/lib/typescript/src/icons/icon.styles.d.ts.map +1 -1
  183. package/lib/typescript/src/icons/index.d.ts +3 -3
  184. package/lib/typescript/src/icons/index.d.ts.map +1 -1
  185. package/lib/typescript/src/index.d.ts +4 -4
  186. package/lib/typescript/src/index.d.ts.map +1 -1
  187. package/lib/typescript/src/primitives/Button.d.ts +8 -4
  188. package/lib/typescript/src/primitives/Button.d.ts.map +1 -1
  189. package/lib/typescript/src/primitives/Metric.d.ts +1 -1
  190. package/lib/typescript/src/primitives/Metric.d.ts.map +1 -1
  191. package/lib/typescript/src/primitives/Row.d.ts +2 -2
  192. package/lib/typescript/src/primitives/Row.d.ts.map +1 -1
  193. package/lib/typescript/src/primitives/Stack.d.ts +2 -2
  194. package/lib/typescript/src/primitives/Stack.d.ts.map +1 -1
  195. package/lib/typescript/src/primitives/Tag.d.ts +2 -2
  196. package/lib/typescript/src/primitives/Tag.d.ts.map +1 -1
  197. package/lib/typescript/src/primitives/Text.d.ts +20 -6
  198. package/lib/typescript/src/primitives/Text.d.ts.map +1 -1
  199. package/lib/typescript/src/primitives/button.styles.d.ts +44 -7
  200. package/lib/typescript/src/primitives/button.styles.d.ts.map +1 -1
  201. package/lib/typescript/src/primitives/index.d.ts +6 -6
  202. package/lib/typescript/src/primitives/index.d.ts.map +1 -1
  203. package/lib/typescript/src/primitives/metric.styles.d.ts +1 -1
  204. package/lib/typescript/src/primitives/metric.styles.d.ts.map +1 -1
  205. package/lib/typescript/src/primitives/row.styles.d.ts +1 -1
  206. package/lib/typescript/src/primitives/row.styles.d.ts.map +1 -1
  207. package/lib/typescript/src/primitives/stack.styles.d.ts +1 -1
  208. package/lib/typescript/src/primitives/stack.styles.d.ts.map +1 -1
  209. package/lib/typescript/src/primitives/tag.styles.d.ts +34 -1
  210. package/lib/typescript/src/primitives/tag.styles.d.ts.map +1 -1
  211. package/lib/typescript/src/primitives/text.styles.d.ts +2 -4
  212. package/lib/typescript/src/primitives/text.styles.d.ts.map +1 -1
  213. package/lib/typescript/src/safe-area/index.d.ts +19 -5
  214. package/lib/typescript/src/safe-area/index.d.ts.map +1 -1
  215. package/lib/typescript/src/theme/ThemeProvider.d.ts +2 -2
  216. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  217. package/lib/typescript/src/theme/define-theme.d.ts +15 -2
  218. package/lib/typescript/src/theme/define-theme.d.ts.map +1 -1
  219. package/lib/typescript/src/theme/index.d.ts +14 -14
  220. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  221. package/lib/typescript/src/theme/letter-spacing.d.ts +15 -0
  222. package/lib/typescript/src/theme/letter-spacing.d.ts.map +1 -0
  223. package/lib/typescript/src/theme/line-height.d.ts +10 -0
  224. package/lib/typescript/src/theme/line-height.d.ts.map +1 -1
  225. package/lib/typescript/src/theme/native-theme.d.ts +1 -1
  226. package/lib/typescript/src/theme/native-theme.d.ts.map +1 -1
  227. package/lib/typescript/src/theme/types.d.ts +1 -1
  228. package/package.json +22 -7
  229. package/src/a11y/tap-target.ts +38 -0
  230. package/src/components/ActionSheet.tsx +25 -15
  231. package/src/components/Alert.tsx +37 -10
  232. package/src/components/Avatar.tsx +12 -4
  233. package/src/components/BottomSheet.tsx +16 -13
  234. package/src/components/Card.tsx +9 -8
  235. package/src/components/Checkbox.tsx +12 -9
  236. package/src/components/EmptyState.tsx +7 -6
  237. package/src/components/Header.tsx +4 -4
  238. package/src/components/Image.tsx +9 -7
  239. package/src/components/Modal.tsx +22 -6
  240. package/src/components/Progress.tsx +5 -4
  241. package/src/components/Radio.tsx +11 -6
  242. package/src/components/Screen.tsx +66 -8
  243. package/src/components/Skeleton.tsx +6 -5
  244. package/src/components/Surface.tsx +5 -4
  245. package/src/components/TextField.tsx +25 -7
  246. package/src/components/Toast.tsx +33 -11
  247. package/src/components/Toggle.tsx +15 -6
  248. package/src/components/action-sheet.styles.ts +1 -1
  249. package/src/components/alert.styles.ts +13 -25
  250. package/src/components/avatar.styles.ts +25 -3
  251. package/src/components/bottom-sheet.styles.ts +1 -1
  252. package/src/components/card.styles.ts +1 -1
  253. package/src/components/card.validate.ts +2 -2
  254. package/src/components/checkbox.styles.ts +6 -3
  255. package/src/components/empty-state.styles.ts +1 -1
  256. package/src/components/header.styles.ts +1 -1
  257. package/src/components/image.styles.ts +1 -1
  258. package/src/components/index.ts +18 -18
  259. package/src/components/modal.styles.ts +11 -2
  260. package/src/components/progress.styles.ts +1 -1
  261. package/src/components/radio.styles.ts +11 -2
  262. package/src/components/safe-area-registry.ts +81 -14
  263. package/src/components/screen.styles.ts +1 -1
  264. package/src/components/skeleton.styles.ts +1 -1
  265. package/src/components/status-colors.ts +59 -0
  266. package/src/components/surface.styles.ts +1 -1
  267. package/src/components/textfield.styles.ts +18 -15
  268. package/src/components/toast.styles.ts +32 -25
  269. package/src/components/toggle.styles.ts +21 -1
  270. package/src/icons/Icon.tsx +13 -8
  271. package/src/icons/icon.styles.ts +38 -3
  272. package/src/icons/index.ts +3 -3
  273. package/src/index.ts +4 -4
  274. package/src/primitives/Button.tsx +28 -14
  275. package/src/primitives/Metric.tsx +5 -4
  276. package/src/primitives/Row.tsx +4 -4
  277. package/src/primitives/Stack.tsx +4 -4
  278. package/src/primitives/Tag.tsx +29 -11
  279. package/src/primitives/Text.tsx +28 -11
  280. package/src/primitives/_internal/focus-ring.tsx +1 -1
  281. package/src/primitives/button.styles.ts +63 -10
  282. package/src/primitives/index.ts +6 -6
  283. package/src/primitives/metric.styles.ts +3 -3
  284. package/src/primitives/row.styles.ts +1 -1
  285. package/src/primitives/stack.styles.ts +1 -1
  286. package/src/primitives/tag.styles.ts +43 -4
  287. package/src/primitives/text.styles.ts +7 -12
  288. package/src/safe-area/index.ts +21 -7
  289. package/src/theme/ThemeProvider.tsx +8 -5
  290. package/src/theme/define-theme.ts +15 -2
  291. package/src/theme/index.ts +14 -17
  292. package/src/theme/letter-spacing.ts +17 -0
  293. package/src/theme/line-height.ts +9 -0
  294. package/src/theme/native-theme.ts +2 -2
  295. package/src/theme/types.ts +1 -1
@@ -1,28 +1,64 @@
1
1
  /**
2
- * safe-area-registry — Screen が使う SafeAreaView 実装の差し替え点(adapter registry)。
2
+ * safe-area-registry — SafeArea 実装の差し替え点(adapter registry)。
3
3
  *
4
4
  * 本体エントリは依存ゼロ方針(P1)のため、default は RN core の SafeAreaView
5
5
  * (deprecated / iOS のみの最小対応)。react-native-safe-area-context を使う利用者は
6
6
  * subpath "melta-app/safe-area" の enableSafeAreaContext() をアプリ起動時に一度呼ぶと
7
- * Screen の SafeArea が context hook + View adapter に差し替わる(optional peer の前例 =
8
- * Icon × react-native-svg。ただし Screen は本体エントリ所属のため subpath 分離ではなく
9
- * registry で切り替える)。
7
+ * SafeArea が context hook + View adapter に差し替わる(optional peer の前例 =
8
+ * Icon × react-native-svg。ただし Screen / シート系は本体エントリ所属のため subpath 分離
9
+ * ではなく registry で切り替える)。
10
+ *
11
+ * 登録するのは**コンポーネントではなくファクトリ**(edges → コンポーネント)。
12
+ * 消費者ごとに必要な edge が違うため(Screen = 既定 or prop 指定 / ActionSheet・BottomSheet =
13
+ * 下端固定なので bottom + 左右のみ)、edges をグローバル 1 個で持てない。
14
+ *
15
+ * ⚠️ 生成物は edges の正規化キーで memo する。resolveSafeAreaView() は render 中に
16
+ * 呼ばれるので、毎回新しいコンポーネント型を返すと React が別 type とみなして
17
+ * subtree を unmount/remount する(state・入力中のテキストが消える)。
10
18
  *
11
19
  * ⚠️ RN 0.85 は react-native の SafeAreaView プロパティへの getter アクセス時点で
12
20
  * deprecation 警告を出す。adapter 登録済みの利用者に警告を出さないため、core への
13
- * アクセスは「未登録のまま Screen が render された時」まで遅延させる。
21
+ * アクセスは「未登録のまま render された時」まで遅延させる。
14
22
  */
15
23
  import type { ComponentType, ReactNode } from "react";
16
- import type { StyleProp, ViewStyle } from "react-native";
17
- /** Screen が SafeArea 実装に要求する最小 props(core / safe-area-context 両対応)。 */
24
+ import type { GestureResponderEvent, StyleProp, ViewStyle } from "react-native";
25
+ /**
26
+ * safe-area を適用する辺。react-native-safe-area-context の `Edge` と同値の union を
27
+ * 本体エントリ側に持つ(optional peer を型でも引かないため)。
28
+ */
29
+ export type SafeAreaEdge = "top" | "right" | "bottom" | "left";
30
+ /** 全 edge(未指定時の既定)。正規化の順序定義も兼ねる。 */
31
+ export declare const ALL_SAFE_AREA_EDGES: readonly ["top", "right", "bottom", "left"];
32
+ /** 消費者(Screen / シート系)が SafeArea 実装に要求する最小 props(core / safe-area-context 両対応)。 */
18
33
  export interface SafeAreaViewLikeProps {
19
34
  style?: StyleProp<ViewStyle>;
20
35
  testID?: string;
36
+ /** iOS: 背後の要素を a11y ツリーから隠す(modal 内のシートで使う)。 */
37
+ accessibilityViewIsModal?: boolean;
38
+ /** touch を claim して親(overlay)へ流さないために使う。 */
39
+ onStartShouldSetResponder?: (event: GestureResponderEvent) => boolean;
21
40
  children?: ReactNode;
22
41
  }
23
42
  export type SafeAreaViewLike = ComponentType<SafeAreaViewLikeProps>;
24
- /** SafeArea 実装を登録する(Screen の初回 render より前に呼ぶ)。 */
25
- export declare function setSafeAreaView(component: SafeAreaViewLike): void;
26
- /** 登録済み実装、無ければ RN core SafeAreaView(ここで初めて getter に触れる)。 */
27
- export declare function resolveSafeAreaView(): SafeAreaViewLike;
43
+ /** edges を受け取って SafeAreaView 相当を返すファクトリ(正規化済みの edges が渡る)。 */
44
+ export type SafeAreaViewFactory = (edges: readonly SafeAreaEdge[]) => SafeAreaViewLike;
45
+ /**
46
+ * SafeArea 実装のファクトリを登録する(初回 render より前に呼ぶ)。
47
+ *
48
+ * @param create edges → コンポーネントのファクトリ。同じ edges 集合には同じ参照が返るよう
49
+ * registry 側が memo するので、ファクトリ自体は毎回新規生成でよい。
50
+ * @param edges edges 未指定の消費者(= Screen の既定)に使う edge 集合。default は全 edge。
51
+ */
52
+ export declare function setSafeAreaView(create: SafeAreaViewFactory, edges?: readonly SafeAreaEdge[]): void;
53
+ /**
54
+ * edges に対応する SafeArea 実装を返す。同じ edges 集合には常に同じ参照を返す(memo)。
55
+ *
56
+ * @param edges 適用する辺。省略時は登録時の既定 edges(未登録なら全 edge)。
57
+ *
58
+ * ⚠️ 未登録時のフォールバックは RN core の SafeAreaView で、**edges は無視される**
59
+ * (core は「安全域と交差する辺すべて」に padding を入れる仕様で、辺を選べない。
60
+ * さらに Android では `Platform.select` により素の View = 完全 no-op)。
61
+ * edges 指定を実際に効かせたい場合は "melta-app/safe-area" の enableSafeAreaContext() が要る。
62
+ */
63
+ export declare function resolveSafeAreaView(edges?: readonly SafeAreaEdge[]): SafeAreaViewLike;
28
64
  //# sourceMappingURL=safe-area-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-area-registry.d.ts","sourceRoot":"","sources":["../../../../src/components/safe-area-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,uEAAuE;AACvE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAIpE,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAEjE;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD"}
1
+ {"version":3,"file":"safe-area-registry.d.ts","sourceRoot":"","sources":["../../../../src/components/safe-area-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGhF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,6CAKY,CAAC;AAE7C,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,4CAA4C;IAC5C,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC;IACtE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAEpE,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,KAAK,gBAAgB,CAAC;AAavF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,GAAE,SAAS,YAAY,EAAwB,GACnD,IAAI,CAIN;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,gBAAgB,CAWrF"}
@@ -5,7 +5,7 @@
5
5
  * 直接実行できる。recipes/app/screen.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/screen-conformance.test.ts が行う。
7
7
  */
8
- import type { NativeTheme, SpacingKey, ThemeMode } from "../theme";
8
+ import type { NativeTheme, SpacingKey, ThemeMode } from "../theme/index.js";
9
9
  /** content の padding(spacing token キー限定 | "none")。default "4"(recipe に焼いてある)。 */
10
10
  export type ScreenPadding = SpacingKey | "none";
11
11
  export interface ScreenStyleProps {
@@ -1 +1 @@
1
- {"version":3,"file":"screen.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/screen.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,OAAa,EAAE,EAAE,gBAAgB,GAC3C,WAAW,CAQb"}
1
+ {"version":3,"file":"screen.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/screen.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE5E,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,OAAa,EAAE,EAAE,gBAAgB,GAC3C,WAAW,CAQb"}
@@ -5,7 +5,7 @@
5
5
  * 直接実行できる。recipes/app/skeleton.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/skeleton-conformance.test.ts が行う。
7
7
  */
8
- import type { ElevationStyle, NativeTheme, ThemeMode } from "../theme";
8
+ import type { ElevationStyle, NativeTheme, ThemeMode } from "../theme/index.js";
9
9
  export type SkeletonVariant = "text" | "circle" | "card";
10
10
  /** contract states(loading = pulse、loaded = Skeleton 自体をアンマウント)。 */
11
11
  export type SkeletonState = "loading" | "loaded";
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/skeleton.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,WAAW,EAIX,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AACzD,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;CAU7B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB;IAC3B,0BAA0B;;IAE1B,0BAA0B;;IAE1B,sCAAsC;;CAE9B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,aAAa;;;CAAgC,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,IAAI,EAAE;QAAE,KAAK,EAAE,gBAAgB,GAAG;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACpD,MAAM,EAAE;QACN,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC;KACzF,CAAC;IACF,IAAI,EAAE;QACJ,6EAA6E;QAC7E,KAAK,EAAE;YACL,eAAe,EAAE,MAAM,CAAC;YACxB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,cAAc,CAAC;SAC3B,CAAC;QACF,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAoClG;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE;QACP,2BAA2B;QAC3B,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,yDAAyD;QACzD,SAAS,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACzE,CAAC;IACF,8CAA8C;IAC9C,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAAE,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAY7E"}
1
+ {"version":3,"file":"skeleton.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/skeleton.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,WAAW,EAIX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AACzD,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;CAU7B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB;IAC3B,0BAA0B;;IAE1B,0BAA0B;;IAE1B,sCAAsC;;CAE9B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,aAAa;;;CAAgC,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,IAAI,EAAE;QAAE,KAAK,EAAE,gBAAgB,GAAG;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACpD,MAAM,EAAE;QACN,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC;KACzF,CAAC;IACF,IAAI,EAAE;QACJ,6EAA6E;QAC7E,KAAK,EAAE;YACL,eAAe,EAAE,MAAM,CAAC;YACxB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,cAAc,CAAC;SAC3B,CAAC;QACF,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAoClG;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE;QACP,2BAA2B;QAC3B,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3B,yDAAyD;QACzD,SAAS,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACzE,CAAC;IACF,8CAA8C;IAC9C,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAAE,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAY7E"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * status-colors — status 語彙(info / success / warning / error)→ 面の色(bg / text)の解決。
3
+ *
4
+ * Alert / Toast / TextField が同じ写像を各自に持っていた(Alert と Toast は完全重複、TextField は
5
+ * inline の同型ロジック)。status token の light/dark 切替と「error → token 上は danger」の
6
+ * 読み替えは**一箇所**にしないと、片方だけ直して drift する形になるためここへ集約する。
7
+ *
8
+ * react-native を import しない純粋モジュール(各 *.styles.ts と同じ規約)。
9
+ */
10
+ import type { NativeTheme, ThemeMode } from "../theme/index.js";
11
+ /** 契約側の status 語彙。token 側のキーとは error / danger だけ表記が違う。 */
12
+ export type StatusVariant = "info" | "success" | "warning" | "error";
13
+ /** theme.color.status のキー(token 側の表記)。 */
14
+ export type StatusTokenKey = keyof NativeTheme["color"]["status"];
15
+ /** 解決結果(subtle な面の背景色と、その上に載る文字色)。 */
16
+ export interface StatusSurfaceColors {
17
+ bg: string;
18
+ text: string;
19
+ }
20
+ /** 契約語彙 → token キー(error は token では danger)。 */
21
+ export declare function toStatusTokenKey(variant: Exclude<StatusVariant, "info">): StatusTokenKey;
22
+ /**
23
+ * status token の subtle 面 + text 色を mode で解決する。
24
+ * light は subtleLight / textLight、dark は subtleDark / textDark(recipe description の写像)。
25
+ */
26
+ export declare function resolveStatusTokenColors(theme: NativeTheme, mode: ThemeMode, key: StatusTokenKey): StatusSurfaceColors;
27
+ /**
28
+ * status 語彙 → 面の色。
29
+ * info だけ primary.50 / primary.800 固定(status token に info が無い既知の割り切り、web と同じ。
30
+ * mode 非依存)。それ以外は status token を mode で解決する。
31
+ */
32
+ export declare function resolveStatusVariantColors(theme: NativeTheme, mode: ThemeMode, variant: StatusVariant): StatusSurfaceColors;
33
+ //# sourceMappingURL=status-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-colors.d.ts","sourceRoot":"","sources":["../../../../src/components/status-colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAErE,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AAElE,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,cAAc,CAExF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,cAAc,GAClB,mBAAmB,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,aAAa,GACrB,mBAAmB,CAKrB"}
@@ -5,7 +5,7 @@
5
5
  * 直接実行できる。recipes/app/surface.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/surface-conformance.test.ts が行う。
7
7
  */
8
- import type { ElevationKey, ElevationStyle, NativeTheme, RadiusKey, SemanticColors, SpacingKey, ThemeMode } from "../theme";
8
+ import type { ElevationKey, ElevationStyle, NativeTheme, RadiusKey, SemanticColors, SpacingKey, ThemeMode } from "../theme/index.js";
9
9
  /** Surface の見た目 props(すべて token キー限定。デフォルトは recipe default variant と 1:1)。 */
10
10
  export interface SurfaceStyleProps {
11
11
  bg?: keyof SemanticColors;
@@ -1 +1 @@
1
- {"version":3,"file":"surface.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/surface.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,EAAiB,EAAE,MAAa,EAAE,SAAkB,EAAE,OAAO,EAAE,GAAE,iBAAsB,GACxF;IACD,IAAI,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,SAAS,EAAE,cAAc,CAAC;CAC3B,CASA"}
1
+ {"version":3,"file":"surface.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/surface.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,EAAiB,EAAE,MAAa,EAAE,SAAkB,EAAE,OAAO,EAAE,GAAE,iBAAsB,GACxF;IACD,IAAI,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,SAAS,EAAE,cAAc,CAAC;CAC3B,CASA"}
@@ -14,23 +14,27 @@
14
14
  * - focus は state 差分(borderColor のみ)。resolveTextFieldFocusStyle で別関数にし、
15
15
  * conformance が recipe states.focus と照合する。
16
16
  */
17
- import type { NativeTheme, ThemeMode, FontSizeKey, FontWeightValue, SpacingKey } from "../theme";
17
+ import type { NativeTheme, ThemeMode, FontSizeKey, FontWeightValue, SpacingKey } from "../theme/index.js";
18
18
  /** 検証状態(textfield.contract の variant 語彙と 1:1)。 */
19
19
  export type TextFieldVariant = "default" | "error" | "success" | "disabled";
20
20
  export type TextFieldSize = "small" | "medium" | "large";
21
21
  /**
22
- * size → height / 横 padding / 入力文字 fontSize(textfield.recipe sizes と整合)。
23
- * height の literal は recipe の値を直書きし、conformance で recipe と照合する。
22
+ * size → 最小高さ / 横 padding / 入力文字 fontSize(textfield.recipe sizes と整合)。
23
+ * literal は recipe の値を直書きし、conformance で recipe と照合する。
24
+ *
25
+ * `minHeight`(`height` ではない)なのは fontScale 対策。height 固定だと OS の文字サイズ拡大で
26
+ * 入力文字が縦にクリップする(recipe 側も 0.7.0 で `minHeight` に変わっている)。
24
27
  */
25
28
  export declare const TEXTFIELD_SIZE_SPEC: Record<TextFieldSize, {
26
- height: number;
29
+ minHeight: number;
27
30
  px: SpacingKey;
28
31
  font: FontSizeKey;
29
32
  }>;
30
33
  /** resolver の出力(label → input → helperText / errorText の縦構成の各パート)。 */
31
34
  export interface TextFieldResolvedStyle {
32
35
  input: {
33
- height: number;
36
+ /** 下限(fontScale で伸びる余地を残す。height 固定は文字がクリップする)。 */
37
+ minHeight: number;
34
38
  paddingHorizontal: number;
35
39
  fontSize: number;
36
40
  borderWidth: number;
@@ -1 +1 @@
1
- {"version":3,"file":"textfield.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/textfield.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAKtD,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,kEAAkE;QAClE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EACE,OAAmB,EACnB,IAAe,GAChB,GAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAA;CAAO,GAC3D,sBAAsB,CAkDxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAEtF"}
1
+ {"version":3,"file":"textfield.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/textfield.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAKzD,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QACL,mDAAmD;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,kEAAkE;QAClE,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EACE,OAAmB,EACnB,IAAe,GAChB,GAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAA;CAAO,GAC3D,sBAAsB,CAgDxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAEtF"}
@@ -8,11 +8,13 @@
8
8
  * - Alert と同系の bg subtle + text 色に elevation.sm を重ねる(浮いている通知、recipe description)。
9
9
  * elevation は iOS shadow* + Android elevation の複合 token のため containerStyle と分けて返し、
10
10
  * 呼び出し側が [containerStyle, elevation, style] の順で合成する(Surface と同じ扱い)。
11
- * - dark mode は status.*.subtleDark / textDark 側を解決する。info variant のみ primary 固定
12
- * (dark token が無い既知の割り切り、alert と同じ)。
11
+ * - status 色(mode ごとの subtle / text、info の primary 固定)の解決は status-colors.ts が SSOT
12
+ * (Alert と同じ写像を共有する)。
13
13
  */
14
- import type { ElevationStyle, FontWeightValue, NativeTheme, ThemeMode } from "../theme";
15
- export type ToastVariant = "success" | "error" | "warning" | "info";
14
+ import type { ElevationStyle, FontWeightValue, NativeTheme, ThemeMode } from "../theme/index.js";
15
+ import { type StatusVariant } from "./status-colors.js";
16
+ /** toast.contract の variant 語彙(status 共通語彙と 1:1)。 */
17
+ export type ToastVariant = StatusVariant;
16
18
  /**
17
19
  * 構成キー(token キー)。component は Text にこのキーをそのまま渡し、resolver は同じキーから
18
20
  * style 値を解決する(component と resolver が別々のキーを持って drift する事故を防ぐ SSOT)。
@@ -25,6 +27,34 @@ export declare const TOAST_SPEC: {
25
27
  readonly messageFont: "sm";
26
28
  readonly messageWeight: "medium";
27
29
  };
30
+ /**
31
+ * 右端に並ぶ 2 つの操作要素(action テキストと × ボタン)の当たり判定。
32
+ *
33
+ * **既存バグの修正**: 以前は両方とも hitSlop 10(全方向)で、両者の間隔は gap = spacing.3 = 12pt
34
+ * しかなかった。左右 10 + 10 = 20pt の当たり判定が 12pt の隙間に食い込み、**20 − 12 = 8pt ぶん
35
+ * 重なって**いた(重なった帯では手前に描画された × が勝つ = action を押したつもりが閉じる)。
36
+ *
37
+ * 規約(AGENTS.md): **横方向の hitSlop は隣接要素との gap の 1/2 を超えない**。
38
+ * gap 12 → 片側 6pt。これで両者の当たり判定はちょうど接し、重ならない。
39
+ * 縦は隣接する操作要素が無いので 10pt を維持する(正典パターンと同じ)。
40
+ *
41
+ * 横を 6 に削ると × の実効幅が 24 + 6×2 = 36pt と 44pt を割るため、**箱の下限を 32pt に広げて**
42
+ * 32 + 6×2 = 44pt を確保する(× は背景を持たないので幅を広げても見た目は変わらない)。
43
+ * action 側はテキスト幅が可変で静的に決められないため、縦のみ 44pt を保証する。
44
+ */
45
+ export declare const TOAST_TAP_TARGET: {
46
+ /** action / × 共通の hitSlop(横だけ gap/2 = 6 に絞る)。 */
47
+ readonly hitSlop: {
48
+ readonly top: 10;
49
+ readonly bottom: 10;
50
+ readonly left: 6;
51
+ readonly right: 6;
52
+ };
53
+ /** × の箱の幅の下限(横 hitSlop を削ったぶん canonical の 24 から広げる。32 + 6×2 = 44)。 */
54
+ readonly closeMinWidth: 32;
55
+ /** × の箱の高さ下限(正典パターンと同値)。 */
56
+ readonly closeMinHeight: 24;
57
+ };
28
58
  /**
29
59
  * slot 構成(toast.recipe 各 variant の containerStyle / messageStyle と 1:1。
30
60
  * containerStyle 内の elevation 参照だけは複合 token のため別 slot に分離して返す)。
@@ -47,16 +77,6 @@ export interface ToastStyles {
47
77
  fontWeight: FontWeightValue;
48
78
  };
49
79
  }
50
- /**
51
- * variant → bg / text 色の解決。
52
- * - info: primary.50 / primary.800 固定(mode 非依存)。
53
- * - success / error / warning: status token(error は status キー上は danger)。
54
- * light は subtleLight / textLight、dark は subtleDark / textDark(recipe description の写像)。
55
- */
56
- export declare function resolveToastColors(theme: NativeTheme, mode: ThemeMode, variant: ToastVariant): {
57
- bg: string;
58
- text: string;
59
- };
60
80
  /** variant → 全 slot の style 解決(toast.recipe styleRefs の 1:1 写像)。 */
61
81
  export declare function resolveToastStyles(theme: NativeTheme, mode: ThemeMode, variant: ToastVariant): ToastStyles;
62
82
  //# sourceMappingURL=toast.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toast.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,cAAc,EAGd,eAAe,EACf,WAAW,EAGX,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF;;;GAGG;AACH,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,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,kEAAkE;IAClE,SAAS,EAAE,cAAc,CAAC;IAC1B,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,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,CAkBb"}
1
+ {"version":3,"file":"toast.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toast.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,cAAc,EAGd,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,eAAO,MAAM,UAAU;;;;;;;CActB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iDAAiD;;;;;;;IAEjD,sEAAsE;;IAEtE,4BAA4B;;CAEpB,CAAC;AAEX;;;GAGG;AACH,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,QAAQ,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,kEAAkE;IAClE,SAAS,EAAE,cAAc,CAAC;IAC1B,kDAAkD;IAClD,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;CACH;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GACpB,WAAW,CAkBb"}
@@ -12,7 +12,7 @@
12
12
  * - disabled は state 差分(opacity)。TOGGLE_DISABLED_OPACITY を component が適用し、
13
13
  * conformance が recipe states.disabled と照合する。
14
14
  */
15
- import type { NativeTheme, ThemeMode } from "../theme";
15
+ import type { NativeTheme, ThemeMode } from "../theme/index.js";
16
16
  /** ON/OFF(toggle.contract の variantModeledStates と 1:1)。 */
17
17
  export type ToggleVariant = "off" | "on";
18
18
  export type ToggleSize = "medium" | "large";
@@ -28,6 +28,22 @@ export declare const TOGGLE_SIZE_SPEC: Record<ToggleSize, {
28
28
  }>;
29
29
  /** disabled state の opacity(recipe states.disabled.style.opacity と照合)。 */
30
30
  export declare const TOGGLE_DISABLED_OPACITY = 0.5;
31
+ /**
32
+ * size → 縦方向の片側 hitSlop(実効タップ標的 44pt。A11Y_MIN_TAP_TARGET_44)。
33
+ *
34
+ * Pressable の高さは **label 無しなら track の高さそのもの**(medium 24 / large 28)で、
35
+ * どちらも 44pt に届かない。track は背景(色付きの丸)を持つので minHeight で伸ばすと
36
+ * スイッチが縦長に見える → 当たり判定だけ広げる:
37
+ * medium 24 + 10×2 = 44 / large 28 + 8×2 = 44
38
+ *
39
+ * label 付きの行でも高さは label(base)の lineHeight 36pt にしかならず 44pt に届かないため、
40
+ * **label の有無に関わらず同じ値を適用する**(label 付きは 36 + 20 = 56pt と余裕が出るが、
41
+ * Toggle は alignSelf: flex-start の独立行なので横に重なる相手がいない)。
42
+ *
43
+ * ⚠️ literal で持つ(TOGGLE_SIZE_SPEC から自動導出しない)。導出にすると track 寸法を変えたときに
44
+ * hitSlop が黙って追随し、conformance が fail-open になる。
45
+ */
46
+ export declare const TOGGLE_VERTICAL_HIT_SLOP: Record<ToggleSize, number>;
31
47
  /**
32
48
  * variant / size → track + thumb の最終 style 値の解決(toggle.recipe styleRefs の 1:1 写像)。
33
49
  * track.padding = thumbOffset(thumb を track 内で浮かせる余白)。
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toggle.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvD,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,UAAU,EACV;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAIpF,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,IAAe,EAAE,EAAE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC1E;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF,CAmBA"}
1
+ {"version":3,"file":"toggle.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/toggle.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhE,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,UAAU,EACV;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAIpF,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAG/D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,EAAE,OAAO,EAAE,IAAe,EAAE,EAAE;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC1E;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF,CAmBA"}
@@ -7,21 +7,27 @@
7
7
  * export される(optional peerDependency。利用者は `npx expo install react-native-svg` が必要)。
8
8
  *
9
9
  * - name は glyphs.ts(assets/icons/*.svg からの codegen、commit 済み配布)のキー。
10
- * - color は semantic token キー限定(default "text-default")、size は contract sizes(sm/md/lg)。
10
+ * - color は semantic token キー + status 色("status-success" / "status-warning" / "status-error")。
11
+ * default "text-default"、size は contract sizes(sm/md/lg)。status 色は Alert / Toast と同じ
12
+ * status token を引くので、アイコン単体で状態を示す場面(フォーム行の成功チェック等)に使える。
13
+ * "status-info" は無い(status token に info の実体が無い。text-accent 等で代替する)。
11
14
  * - a11y: 意味を持つ場合は accessibilityLabel を渡す。無指定は装飾扱いで a11y ツリーから除外
12
15
  * (contract a11y required の両ケース)。
13
16
  * - 決定ロジックは pure resolver(icon.styles.ts)に分離 — recipe との機械照合対象。
14
17
  */
15
- import type { SemanticColors } from "../theme";
16
- import { type SizeOf } from "../contracts/contract-types";
17
- import { type IconName } from "./glyphs";
18
+ import { type SizeOf } from "../contracts/contract-types.js";
19
+ import { type IconColor } from "./icon.styles.js";
20
+ import { type IconName } from "./glyphs.js";
18
21
  interface IconProps {
19
22
  /** グリフ名(glyphs.ts のキー。例 "close" / "share-ios")。 */
20
23
  name: IconName;
21
24
  /** サイズ(contract sizes)。default "md"(20px)。 */
22
25
  size?: SizeOf<"icon">;
23
- /** 色(semantic token キーのみ)。default "text-default"。 */
24
- color?: keyof SemanticColors;
26
+ /**
27
+ * 色(semantic token キー、または status 色 "status-success" / "status-warning" / "status-error")。
28
+ * default "text-default"。生 hex は受けない(§5 lint の意味を保つ)。
29
+ */
30
+ color?: IconColor;
25
31
  /** 意味を持つ icon は必須。省略時は装飾扱い(a11y ツリーから除外)。 */
26
32
  accessibilityLabel?: string;
27
33
  testID?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/icons/Icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEjD,UAAU,SAAS;IACjB,mDAAmD;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,cAAc,CAAC;IAC7B,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,KAAsB,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,SAAS,2CA2BxG;yBA3Be,IAAI"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/icons/Icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAoB,KAAK,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEpD,UAAU,SAAS;IACjB,mDAAmD;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,KAAsB,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,SAAS,2CA2BxG;yBA3Be,IAAI"}
@@ -5,8 +5,19 @@
5
5
  * 直接実行できる。recipes/app/icon.recipe.json(melta-contracts の styleRefs)との
6
6
  * 機械照合は scripts/lib/icon-conformance.test.ts が行う。
7
7
  */
8
- import type { NativeTheme, SemanticColors, ThemeMode } from "../theme";
8
+ import type { NativeTheme, SemanticColors, ThemeMode } from "../theme/index.js";
9
9
  export type IconSize = "sm" | "md" | "lg";
10
+ /**
11
+ * Icon の色指定。semantic token キーに加えて status 色(success / warning / error)を受ける。
12
+ *
13
+ * - status 系は `theme.color.status.<key>.base` を引く(面ではなく tint に載る色)。
14
+ * - `"status-"` の prefix を付けるのは、将来 SemanticColors に同名キー(`success` 等)が
15
+ * 入ったときに衝突しないようにするため。
16
+ * - **`"status-info"` は無い** — status token に info の実体が無く(web と同じ既知の割り切り)、
17
+ * info 相当は semantic の `text-accent` / primary 系で表現する。
18
+ */
19
+ export type IconStatusColor = "status-success" | "status-warning" | "status-error";
20
+ export type IconColor = keyof SemanticColors | IconStatusColor;
10
21
  export interface IconStyle {
11
22
  width: number;
12
23
  height: number;
@@ -15,6 +26,7 @@ export interface IconStyle {
15
26
  /**
16
27
  * size / color → Icon style の解決(icon.recipe styleRefs の 1:1 写像)。
17
28
  * デフォルト(size=md / color=text-default)は recipe の default variant と一致させている。
29
+ * status 色は mode 非依存(status token の base は light/dark 共通)。
18
30
  */
19
- export declare function resolveIconStyle(theme: NativeTheme, mode: ThemeMode, size?: IconSize, color?: keyof SemanticColors): IconStyle;
31
+ export declare function resolveIconStyle(theme: NativeTheme, mode: ThemeMode, size?: IconSize, color?: IconColor): IconStyle;
20
32
  //# sourceMappingURL=icon.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon.styles.d.ts","sourceRoot":"","sources":["../../../../src/icons/icon.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvE,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAK1C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,IAAI,GAAE,QAAe,EACrB,KAAK,GAAE,MAAM,cAA+B,GAC3C,SAAS,CAMX"}
1
+ {"version":3,"file":"icon.styles.d.ts","sourceRoot":"","sources":["../../../../src/icons/icon.styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMhF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AACnF,MAAM,MAAM,SAAS,GAAG,MAAM,cAAc,GAAG,eAAe,CAAC;AAmB/D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,EACf,IAAI,GAAE,QAAe,EACrB,KAAK,GAAE,SAA0B,GAChC,SAAS,CAUX"}
@@ -6,7 +6,7 @@
6
6
  * 本体エントリに Icon を含めると react-native-svg 未 install の利用者がバンドルできなくなる。
7
7
  * この subpath を import する利用者だけが react-native-svg を要求される。
8
8
  */
9
- export { Icon } from "./Icon";
10
- export { GLYPHS, ICON_NAMES } from "./glyphs";
11
- export type { IconName, Glyph } from "./glyphs";
9
+ export { Icon } from "./Icon.js";
10
+ export { GLYPHS, ICON_NAMES } from "./glyphs.js";
11
+ export type { IconName, Glyph } from "./glyphs.js";
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
@@ -5,8 +5,8 @@
5
5
  * primitives / components がその契約を満たす。契約との整合は conformance テストが機械照合する。
6
6
  * アプリ本体ではなく UI kit。使い方はルートを ThemeProvider で包み、コンポーネントを import する。
7
7
  */
8
- export * from "./theme";
9
- export * from "./primitives";
10
- export * from "./components";
11
- export { CONTRACTS, type ContractId, type ContractShape, type VariantOf, type SizeOf, type StateOf, } from "./contracts/contract-types";
8
+ export * from "./theme/index.js";
9
+ export * from "./primitives/index.js";
10
+ export * from "./components/index.js";
11
+ export { CONTRACTS, type ContractId, type ContractShape, type VariantOf, type SizeOf, type StateOf, } from "./contracts/contract-types.js";
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAG7B,OAAO,EACL,SAAS,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,OAAO,GACb,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EACL,SAAS,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,OAAO,GACb,MAAM,+BAA+B,CAAC"}
@@ -5,15 +5,19 @@
5
5
  * - iconOnly は discriminated union で accessibilityLabel 必須を型強制(§4、label 排他)。
6
6
  * - states(§2 mapping): hover→pressed(背景を pressed 色に)、focus→FocusRing overlay(共通 helper)、
7
7
  * disabled→prop(opacity + 非活性)、loading→Spinner + disabled 相当。
8
+ * - タップ標的: labeled は minHeight(fontScale でクリップさせない)+ 縦 hitSlop、
9
+ * iconOnly は正方形固定 + 四方 hitSlop で実効 44pt を確保する(A11Y_MIN_TAP_TARGET_44、
10
+ * 値の根拠は button.styles.ts の BUTTON_VERTICAL_HIT_SLOP)。
8
11
  * - 色は variant ごとに NativeTheme から解決(button.contract tokenRefs を 1:1 で写像)。
9
12
  * contained の pressed は hover-bg=primary.700(contract に native readable token あり、唯一)。
10
- * 他 variant の pressed 視覚変化は contract が Tailwind のみ=Phase1 non-conformant(§2 M-1)、
11
- * ここでは pressed 時に薄い overlay を敷く近似に留め、Phase2 で contract に pressed-* token 追加。
12
- * - height は contract sizes(small32/medium40/large48)。
13
+ * 他 variant の pressed 視覚変化は contract が Tailwind クラスしか持たず native 解決できない
14
+ * (§2 M-1)。ここでは pressed 時に薄い overlay を敷く近似に留めている。contract 側に
15
+ * pressed-* token が入ったら実値解決へ置き換える(契約側が未対応のため未着手)。
16
+ * - 高さは contract sizes(small32/medium40/large48)を **下限**として使う。
13
17
  */
14
18
  import { type ReactNode } from "react";
15
19
  import { type StyleProp, type ViewStyle } from "react-native";
16
- import { type ButtonVariant, type ButtonSize } from "./button.styles";
20
+ import { type ButtonVariant, type ButtonSize } from "./button.styles.js";
17
21
  interface ButtonBase {
18
22
  variant?: ButtonVariant;
19
23
  size?: ButtonSize;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Button.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAKtB,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjG,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,WAAW,GAAG,UAAU,GAC3B,CAEI;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACtC,CAAC;AAEJ,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CA+DxC;yBA/De,MAAM"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Button.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAKtB,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,WAAW,GAAG,UAAU,GAC3B,CAEI;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACtC,CAAC;AAEJ,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAkExC;yBAlEe,MAAM"}
@@ -10,7 +10,7 @@
10
10
  * - a11y: value+unit+label を1つの accessibilityLabel に合成して読み上げる(contract a11y)。
11
11
  */
12
12
  import { type StyleProp, type ViewStyle } from "react-native";
13
- import { type SizeOf } from "../contracts/contract-types";
13
+ import { type SizeOf } from "../contracts/contract-types.js";
14
14
  type MetricSize = SizeOf<"metric">;
15
15
  interface MetricProps {
16
16
  /** 整形済みの数値文字列(整形は呼び出し側)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"Metric.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Metric.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAGrE,KAAK,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEnC,UAAU,WAAW;IACnB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,IAAW,EACX,KAAe,EACf,KAAK,EACL,MAAM,GACP,EAAE,WAAW,2CAsBb;yBA9Be,MAAM"}
1
+ {"version":3,"file":"Metric.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Metric.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxE,KAAK,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEnC,UAAU,WAAW;IACnB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,IAAW,EACX,KAAe,EACf,KAAK,EACL,MAAM,GACP,EAAE,WAAW,2CAsBb;yBA9Be,MAAM"}
@@ -8,8 +8,8 @@
8
8
  */
9
9
  import { type ReactNode } from "react";
10
10
  import { type StyleProp, type ViewStyle } from "react-native";
11
- import type { SpacingKey } from "../theme";
12
- import { type RowAlign, type RowJustify } from "./row.styles";
11
+ import type { SpacingKey } from "../theme/index.js";
12
+ import { type RowAlign, type RowJustify } from "./row.styles.js";
13
13
  interface RowProps {
14
14
  /** 子要素間の gap(spacing token キー限定)。省略時 gap なし。 */
15
15
  gap?: SpacingKey;
@@ -1 +1 @@
1
- {"version":3,"file":"Row.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Row.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAiB,MAAM,cAAc,CAAC;AAE9F,UAAU,QAAQ;IAChB,gDAAgD;IAChD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,EAClB,GAAG,EACH,KAAgB,EAChB,OAAiB,EACjB,IAAY,EACZ,KAAK,EACL,MAAM,EACN,QAAQ,GACT,EAAE,QAAQ,2CAaV;yBArBe,GAAG"}
1
+ {"version":3,"file":"Row.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Row.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAEjG,UAAU,QAAQ;IAChB,gDAAgD;IAChD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,EAClB,GAAG,EACH,KAAgB,EAChB,OAAiB,EACjB,IAAY,EACZ,KAAK,EACL,MAAM,EACN,QAAQ,GACT,EAAE,QAAQ,2CAaV;yBArBe,GAAG"}
@@ -8,8 +8,8 @@
8
8
  */
9
9
  import { type ReactNode } from "react";
10
10
  import { type StyleProp, type ViewStyle } from "react-native";
11
- import type { SpacingKey } from "../theme";
12
- import { type StackAlign } from "./stack.styles";
11
+ import type { SpacingKey } from "../theme/index.js";
12
+ import { type StackAlign } from "./stack.styles.js";
13
13
  interface StackProps {
14
14
  /** 子要素間の gap(spacing token キー限定)。省略時 gap なし。 */
15
15
  gap?: SpacingKey;
@@ -1 +1 @@
1
- {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Stack.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAqB,KAAK,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAErF,UAAU,UAAU;IAClB,gDAAgD;IAChD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gCAAgC;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,KAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAapF;yBAbe,KAAK"}
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Stack.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAqB,KAAK,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAExF,UAAU,UAAU;IAClB,gDAAgD;IAChD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,gCAAgC;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,KAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAapF;yBAbe,KAAK"}
@@ -9,8 +9,8 @@
9
9
  * 色・寸法の決定は pure resolver(tag.styles.ts)に分離、recipe との機械照合は
10
10
  * scripts/lib/tag-conformance.test.ts が行う。
11
11
  * - label は Text primitive。filter-chip active の文字色だけ primary.700(SemanticColors 外なので style 上書き)。
12
- * - focus outline は Button(Step8) で Pressable focus handling を共通化してから Tag にも適用する
13
- * (§1 は Phase1 scope だが acceptance 外。今は accessibilityState のみ。Button 実装時に回収)。
12
+ * - focus outline は Button と共通の Pressable focus handling(_internal/focus-ring)を使う
13
+ * (removable / filter-chip の押せる要素に FocusRing を描く)。
14
14
  */
15
15
  import { type StyleProp, type ViewStyle } from "react-native";
16
16
  interface TagBase {
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Tag.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAO/E,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,QAAQ,GACT,CAAC,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACjC,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5F,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AA2EpF,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,2CAgBlC;yBAhBe,GAAG"}
1
+ {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../../../src/primitives/Tag.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAY/E,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,QAAQ,GACT,CAAC,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GACjC,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5F,CAAC,OAAO,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAuFpF,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,2CAgBlC;yBAhBe,GAAG"}