melta-app 0.1.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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +197 -0
  3. package/THIRD_PARTY_LICENSES.md +198 -0
  4. package/lib/module/components/ActionSheet.js +87 -0
  5. package/lib/module/components/ActionSheet.js.map +1 -0
  6. package/lib/module/components/Alert.js +93 -0
  7. package/lib/module/components/Alert.js.map +1 -0
  8. package/lib/module/components/Avatar.js +93 -0
  9. package/lib/module/components/Avatar.js.map +1 -0
  10. package/lib/module/components/BottomSheet.js +69 -0
  11. package/lib/module/components/BottomSheet.js.map +1 -0
  12. package/lib/module/components/Card.js +93 -0
  13. package/lib/module/components/Card.js.map +1 -0
  14. package/lib/module/components/Checkbox.js +115 -0
  15. package/lib/module/components/Checkbox.js.map +1 -0
  16. package/lib/module/components/EmptyState.js +70 -0
  17. package/lib/module/components/EmptyState.js.map +1 -0
  18. package/lib/module/components/Header.js +53 -0
  19. package/lib/module/components/Header.js.map +1 -0
  20. package/lib/module/components/Image.js +67 -0
  21. package/lib/module/components/Image.js.map +1 -0
  22. package/lib/module/components/Modal.js +95 -0
  23. package/lib/module/components/Modal.js.map +1 -0
  24. package/lib/module/components/Progress.js +113 -0
  25. package/lib/module/components/Progress.js.map +1 -0
  26. package/lib/module/components/Radio.js +134 -0
  27. package/lib/module/components/Radio.js.map +1 -0
  28. package/lib/module/components/Screen.js +57 -0
  29. package/lib/module/components/Screen.js.map +1 -0
  30. package/lib/module/components/Skeleton.js +169 -0
  31. package/lib/module/components/Skeleton.js.map +1 -0
  32. package/lib/module/components/Surface.js +49 -0
  33. package/lib/module/components/Surface.js.map +1 -0
  34. package/lib/module/components/TextField.js +84 -0
  35. package/lib/module/components/TextField.js.map +1 -0
  36. package/lib/module/components/Toast.js +105 -0
  37. package/lib/module/components/Toast.js.map +1 -0
  38. package/lib/module/components/Toggle.js +77 -0
  39. package/lib/module/components/Toggle.js.map +1 -0
  40. package/lib/module/components/action-sheet.styles.js +70 -0
  41. package/lib/module/components/action-sheet.styles.js.map +1 -0
  42. package/lib/module/components/alert.styles.js +80 -0
  43. package/lib/module/components/alert.styles.js.map +1 -0
  44. package/lib/module/components/avatar.styles.js +94 -0
  45. package/lib/module/components/avatar.styles.js.map +1 -0
  46. package/lib/module/components/bottom-sheet.styles.js +55 -0
  47. package/lib/module/components/bottom-sheet.styles.js.map +1 -0
  48. package/lib/module/components/card.styles.js +50 -0
  49. package/lib/module/components/card.styles.js.map +1 -0
  50. package/lib/module/components/checkbox.styles.js +55 -0
  51. package/lib/module/components/checkbox.styles.js.map +1 -0
  52. package/lib/module/components/empty-state.styles.js +60 -0
  53. package/lib/module/components/empty-state.styles.js.map +1 -0
  54. package/lib/module/components/header.styles.js +33 -0
  55. package/lib/module/components/header.styles.js.map +1 -0
  56. package/lib/module/components/image.styles.js +37 -0
  57. package/lib/module/components/image.styles.js.map +1 -0
  58. package/lib/module/components/index.js +26 -0
  59. package/lib/module/components/index.js.map +1 -0
  60. package/lib/module/components/modal.styles.js +68 -0
  61. package/lib/module/components/modal.styles.js.map +1 -0
  62. package/lib/module/components/progress.styles.js +55 -0
  63. package/lib/module/components/progress.styles.js.map +1 -0
  64. package/lib/module/components/radio.styles.js +96 -0
  65. package/lib/module/components/radio.styles.js.map +1 -0
  66. package/lib/module/components/screen.styles.js +38 -0
  67. package/lib/module/components/screen.styles.js.map +1 -0
  68. package/lib/module/components/skeleton.styles.js +114 -0
  69. package/lib/module/components/skeleton.styles.js.map +1 -0
  70. package/lib/module/components/surface.styles.js +37 -0
  71. package/lib/module/components/surface.styles.js.map +1 -0
  72. package/lib/module/components/textfield.styles.js +121 -0
  73. package/lib/module/components/textfield.styles.js.map +1 -0
  74. package/lib/module/components/toast.styles.js +81 -0
  75. package/lib/module/components/toast.styles.js.map +1 -0
  76. package/lib/module/components/toggle.styles.js +69 -0
  77. package/lib/module/components/toggle.styles.js.map +1 -0
  78. package/lib/module/contracts/contract-types.js +192 -0
  79. package/lib/module/contracts/contract-types.js.map +1 -0
  80. package/lib/module/icons/Icon.js +57 -0
  81. package/lib/module/icons/Icon.js.map +1 -0
  82. package/lib/module/icons/glyphs.js +257 -0
  83. package/lib/module/icons/glyphs.js.map +1 -0
  84. package/lib/module/icons/icon.styles.js +28 -0
  85. package/lib/module/icons/icon.styles.js.map +1 -0
  86. package/lib/module/icons/index.js +14 -0
  87. package/lib/module/icons/index.js.map +1 -0
  88. package/lib/module/index.js +20 -0
  89. package/lib/module/index.js.map +1 -0
  90. package/lib/module/package.json +1 -0
  91. package/lib/module/primitives/Button.js +105 -0
  92. package/lib/module/primitives/Button.js.map +1 -0
  93. package/lib/module/primitives/Metric.js +68 -0
  94. package/lib/module/primitives/Metric.js.map +1 -0
  95. package/lib/module/primitives/Row.js +43 -0
  96. package/lib/module/primitives/Row.js.map +1 -0
  97. package/lib/module/primitives/Stack.js +39 -0
  98. package/lib/module/primitives/Stack.js.map +1 -0
  99. package/lib/module/primitives/Tag.js +160 -0
  100. package/lib/module/primitives/Tag.js.map +1 -0
  101. package/lib/module/primitives/Text.js +54 -0
  102. package/lib/module/primitives/Text.js.map +1 -0
  103. package/lib/module/primitives/_internal/focus-ring.js +57 -0
  104. package/lib/module/primitives/_internal/focus-ring.js.map +1 -0
  105. package/lib/module/primitives/button.styles.js +88 -0
  106. package/lib/module/primitives/button.styles.js.map +1 -0
  107. package/lib/module/primitives/index.js +11 -0
  108. package/lib/module/primitives/index.js.map +1 -0
  109. package/lib/module/primitives/metric.styles.js +54 -0
  110. package/lib/module/primitives/metric.styles.js.map +1 -0
  111. package/lib/module/primitives/row.styles.js +53 -0
  112. package/lib/module/primitives/row.styles.js.map +1 -0
  113. package/lib/module/primitives/stack.styles.js +37 -0
  114. package/lib/module/primitives/stack.styles.js.map +1 -0
  115. package/lib/module/primitives/tag.styles.js +56 -0
  116. package/lib/module/primitives/tag.styles.js.map +1 -0
  117. package/lib/module/primitives/text.styles.js +33 -0
  118. package/lib/module/primitives/text.styles.js.map +1 -0
  119. package/lib/module/theme/ThemeProvider.js +41 -0
  120. package/lib/module/theme/ThemeProvider.js.map +1 -0
  121. package/lib/module/theme/index.js +19 -0
  122. package/lib/module/theme/index.js.map +1 -0
  123. package/lib/module/theme/native-theme.js +201 -0
  124. package/lib/module/theme/native-theme.js.map +1 -0
  125. package/lib/module/theme/types.js +4 -0
  126. package/lib/module/theme/types.js.map +1 -0
  127. package/lib/typescript/package.json +1 -0
  128. package/lib/typescript/src/components/ActionSheet.d.ts +45 -0
  129. package/lib/typescript/src/components/ActionSheet.d.ts.map +1 -0
  130. package/lib/typescript/src/components/Alert.d.ts +43 -0
  131. package/lib/typescript/src/components/Alert.d.ts.map +1 -0
  132. package/lib/typescript/src/components/Avatar.d.ts +45 -0
  133. package/lib/typescript/src/components/Avatar.d.ts.map +1 -0
  134. package/lib/typescript/src/components/BottomSheet.d.ts +36 -0
  135. package/lib/typescript/src/components/BottomSheet.d.ts.map +1 -0
  136. package/lib/typescript/src/components/Card.d.ts +46 -0
  137. package/lib/typescript/src/components/Card.d.ts.map +1 -0
  138. package/lib/typescript/src/components/Checkbox.d.ts +40 -0
  139. package/lib/typescript/src/components/Checkbox.d.ts.map +1 -0
  140. package/lib/typescript/src/components/EmptyState.d.ts +36 -0
  141. package/lib/typescript/src/components/EmptyState.d.ts.map +1 -0
  142. package/lib/typescript/src/components/Header.d.ts +34 -0
  143. package/lib/typescript/src/components/Header.d.ts.map +1 -0
  144. package/lib/typescript/src/components/Image.d.ts +41 -0
  145. package/lib/typescript/src/components/Image.d.ts.map +1 -0
  146. package/lib/typescript/src/components/Modal.d.ts +46 -0
  147. package/lib/typescript/src/components/Modal.d.ts.map +1 -0
  148. package/lib/typescript/src/components/Progress.d.ts +39 -0
  149. package/lib/typescript/src/components/Progress.d.ts.map +1 -0
  150. package/lib/typescript/src/components/Radio.d.ts +52 -0
  151. package/lib/typescript/src/components/Radio.d.ts.map +1 -0
  152. package/lib/typescript/src/components/Screen.d.ts +42 -0
  153. package/lib/typescript/src/components/Screen.d.ts.map +1 -0
  154. package/lib/typescript/src/components/Skeleton.d.ts +37 -0
  155. package/lib/typescript/src/components/Skeleton.d.ts.map +1 -0
  156. package/lib/typescript/src/components/Surface.d.ts +31 -0
  157. package/lib/typescript/src/components/Surface.d.ts.map +1 -0
  158. package/lib/typescript/src/components/TextField.d.ts +45 -0
  159. package/lib/typescript/src/components/TextField.d.ts.map +1 -0
  160. package/lib/typescript/src/components/Toast.d.ts +45 -0
  161. package/lib/typescript/src/components/Toast.d.ts.map +1 -0
  162. package/lib/typescript/src/components/Toggle.d.ts +39 -0
  163. package/lib/typescript/src/components/Toggle.d.ts.map +1 -0
  164. package/lib/typescript/src/components/action-sheet.styles.d.ts +65 -0
  165. package/lib/typescript/src/components/action-sheet.styles.d.ts.map +1 -0
  166. package/lib/typescript/src/components/alert.styles.d.ts +61 -0
  167. package/lib/typescript/src/components/alert.styles.d.ts.map +1 -0
  168. package/lib/typescript/src/components/avatar.styles.d.ts +60 -0
  169. package/lib/typescript/src/components/avatar.styles.d.ts.map +1 -0
  170. package/lib/typescript/src/components/bottom-sheet.styles.d.ts +50 -0
  171. package/lib/typescript/src/components/bottom-sheet.styles.d.ts.map +1 -0
  172. package/lib/typescript/src/components/card.styles.d.ts +27 -0
  173. package/lib/typescript/src/components/card.styles.d.ts.map +1 -0
  174. package/lib/typescript/src/components/checkbox.styles.d.ts +55 -0
  175. package/lib/typescript/src/components/checkbox.styles.d.ts.map +1 -0
  176. package/lib/typescript/src/components/empty-state.styles.d.ts +58 -0
  177. package/lib/typescript/src/components/empty-state.styles.d.ts.map +1 -0
  178. package/lib/typescript/src/components/header.styles.d.ts +30 -0
  179. package/lib/typescript/src/components/header.styles.d.ts.map +1 -0
  180. package/lib/typescript/src/components/image.styles.d.ts +28 -0
  181. package/lib/typescript/src/components/image.styles.d.ts.map +1 -0
  182. package/lib/typescript/src/components/index.d.ts +23 -0
  183. package/lib/typescript/src/components/index.d.ts.map +1 -0
  184. package/lib/typescript/src/components/modal.styles.d.ts +66 -0
  185. package/lib/typescript/src/components/modal.styles.d.ts.map +1 -0
  186. package/lib/typescript/src/components/progress.styles.d.ts +44 -0
  187. package/lib/typescript/src/components/progress.styles.d.ts.map +1 -0
  188. package/lib/typescript/src/components/radio.styles.d.ts +91 -0
  189. package/lib/typescript/src/components/radio.styles.d.ts.map +1 -0
  190. package/lib/typescript/src/components/screen.styles.d.ts +34 -0
  191. package/lib/typescript/src/components/screen.styles.d.ts.map +1 -0
  192. package/lib/typescript/src/components/skeleton.styles.d.ts +105 -0
  193. package/lib/typescript/src/components/skeleton.styles.d.ts.map +1 -0
  194. package/lib/typescript/src/components/surface.styles.d.ts +31 -0
  195. package/lib/typescript/src/components/surface.styles.d.ts.map +1 -0
  196. package/lib/typescript/src/components/textfield.styles.d.ts +75 -0
  197. package/lib/typescript/src/components/textfield.styles.d.ts.map +1 -0
  198. package/lib/typescript/src/components/toast.styles.d.ts +62 -0
  199. package/lib/typescript/src/components/toast.styles.d.ts.map +1 -0
  200. package/lib/typescript/src/components/toggle.styles.d.ts +53 -0
  201. package/lib/typescript/src/components/toggle.styles.d.ts.map +1 -0
  202. package/lib/typescript/src/contracts/contract-types.d.ts +193 -0
  203. package/lib/typescript/src/contracts/contract-types.d.ts.map +1 -0
  204. package/lib/typescript/src/icons/Icon.d.ts +40 -0
  205. package/lib/typescript/src/icons/Icon.d.ts.map +1 -0
  206. package/lib/typescript/src/icons/glyphs.d.ts +259 -0
  207. package/lib/typescript/src/icons/glyphs.d.ts.map +1 -0
  208. package/lib/typescript/src/icons/icon.styles.d.ts +20 -0
  209. package/lib/typescript/src/icons/icon.styles.d.ts.map +1 -0
  210. package/lib/typescript/src/icons/index.d.ts +12 -0
  211. package/lib/typescript/src/icons/index.d.ts.map +1 -0
  212. package/lib/typescript/src/index.d.ts +12 -0
  213. package/lib/typescript/src/index.d.ts.map +1 -0
  214. package/lib/typescript/src/primitives/Button.d.ts +48 -0
  215. package/lib/typescript/src/primitives/Button.d.ts.map +1 -0
  216. package/lib/typescript/src/primitives/Metric.d.ts +38 -0
  217. package/lib/typescript/src/primitives/Metric.d.ts.map +1 -0
  218. package/lib/typescript/src/primitives/Row.d.ts +37 -0
  219. package/lib/typescript/src/primitives/Row.d.ts.map +1 -0
  220. package/lib/typescript/src/primitives/Stack.d.ts +33 -0
  221. package/lib/typescript/src/primitives/Stack.d.ts.map +1 -0
  222. package/lib/typescript/src/primitives/Tag.d.ts +43 -0
  223. package/lib/typescript/src/primitives/Tag.d.ts.map +1 -0
  224. package/lib/typescript/src/primitives/Text.d.ts +45 -0
  225. package/lib/typescript/src/primitives/Text.d.ts.map +1 -0
  226. package/lib/typescript/src/primitives/_internal/focus-ring.d.ts +31 -0
  227. package/lib/typescript/src/primitives/_internal/focus-ring.d.ts.map +1 -0
  228. package/lib/typescript/src/primitives/button.styles.d.ts +29 -0
  229. package/lib/typescript/src/primitives/button.styles.d.ts.map +1 -0
  230. package/lib/typescript/src/primitives/index.d.ts +8 -0
  231. package/lib/typescript/src/primitives/index.d.ts.map +1 -0
  232. package/lib/typescript/src/primitives/metric.styles.d.ts +43 -0
  233. package/lib/typescript/src/primitives/metric.styles.d.ts.map +1 -0
  234. package/lib/typescript/src/primitives/row.styles.d.ts +50 -0
  235. package/lib/typescript/src/primitives/row.styles.d.ts.map +1 -0
  236. package/lib/typescript/src/primitives/stack.styles.d.ts +34 -0
  237. package/lib/typescript/src/primitives/stack.styles.d.ts.map +1 -0
  238. package/lib/typescript/src/primitives/tag.styles.d.ts +32 -0
  239. package/lib/typescript/src/primitives/tag.styles.d.ts.map +1 -0
  240. package/lib/typescript/src/primitives/text.styles.d.ts +26 -0
  241. package/lib/typescript/src/primitives/text.styles.d.ts.map +1 -0
  242. package/lib/typescript/src/theme/ThemeProvider.d.ts +32 -0
  243. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -0
  244. package/lib/typescript/src/theme/index.d.ts +15 -0
  245. package/lib/typescript/src/theme/index.d.ts.map +1 -0
  246. package/lib/typescript/src/theme/native-theme.d.ts +3 -0
  247. package/lib/typescript/src/theme/native-theme.d.ts.map +1 -0
  248. package/lib/typescript/src/theme/types.d.ts +121 -0
  249. package/lib/typescript/src/theme/types.d.ts.map +1 -0
  250. package/package.json +120 -0
  251. package/src/components/ActionSheet.tsx +112 -0
  252. package/src/components/Alert.tsx +84 -0
  253. package/src/components/Avatar.tsx +110 -0
  254. package/src/components/BottomSheet.tsx +81 -0
  255. package/src/components/Card.tsx +102 -0
  256. package/src/components/Checkbox.tsx +107 -0
  257. package/src/components/EmptyState.tsx +64 -0
  258. package/src/components/Header.tsx +51 -0
  259. package/src/components/Image.tsx +89 -0
  260. package/src/components/Modal.tsx +113 -0
  261. package/src/components/Progress.tsx +124 -0
  262. package/src/components/Radio.tsx +151 -0
  263. package/src/components/Screen.tsx +62 -0
  264. package/src/components/Skeleton.tsx +154 -0
  265. package/src/components/Surface.tsx +37 -0
  266. package/src/components/TextField.tsx +102 -0
  267. package/src/components/Toast.tsx +103 -0
  268. package/src/components/Toggle.tsx +94 -0
  269. package/src/components/action-sheet.styles.ts +102 -0
  270. package/src/components/alert.styles.ts +115 -0
  271. package/src/components/avatar.styles.ts +110 -0
  272. package/src/components/bottom-sheet.styles.ts +78 -0
  273. package/src/components/card.styles.ts +56 -0
  274. package/src/components/checkbox.styles.ts +83 -0
  275. package/src/components/empty-state.styles.ts +98 -0
  276. package/src/components/header.styles.ts +44 -0
  277. package/src/components/image.styles.ts +36 -0
  278. package/src/components/index.ts +23 -0
  279. package/src/components/modal.styles.ts +106 -0
  280. package/src/components/progress.styles.ts +74 -0
  281. package/src/components/radio.styles.ts +132 -0
  282. package/src/components/screen.styles.ts +44 -0
  283. package/src/components/skeleton.styles.ts +155 -0
  284. package/src/components/surface.styles.ts +50 -0
  285. package/src/components/textfield.styles.ts +135 -0
  286. package/src/components/toast.styles.ts +115 -0
  287. package/src/components/toggle.styles.ts +73 -0
  288. package/src/contracts/contract-types.ts +199 -0
  289. package/src/icons/Icon.tsx +65 -0
  290. package/src/icons/glyphs.ts +54 -0
  291. package/src/icons/icon.styles.ts +37 -0
  292. package/src/icons/index.ts +12 -0
  293. package/src/index.ts +24 -0
  294. package/src/primitives/Button.tsx +114 -0
  295. package/src/primitives/Metric.tsx +67 -0
  296. package/src/primitives/Row.tsx +54 -0
  297. package/src/primitives/Stack.tsx +42 -0
  298. package/src/primitives/Tag.tsx +126 -0
  299. package/src/primitives/Text.tsx +71 -0
  300. package/src/primitives/_internal/focus-ring.tsx +59 -0
  301. package/src/primitives/button.styles.ts +69 -0
  302. package/src/primitives/index.ts +8 -0
  303. package/src/primitives/metric.styles.ts +75 -0
  304. package/src/primitives/row.styles.ts +66 -0
  305. package/src/primitives/stack.styles.ts +47 -0
  306. package/src/primitives/tag.styles.ts +65 -0
  307. package/src/primitives/text.styles.ts +42 -0
  308. package/src/theme/ThemeProvider.tsx +60 -0
  309. package/src/theme/index.ts +18 -0
  310. package/src/theme/native-theme.ts +215 -0
  311. package/src/theme/types.ts +137 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Stack — 縦積み layout primitive。RN コア View の薄いラッパ。
5
+ * contract: stack(app 先行定義、melta-contracts)。dogfood 不足-1(生 flexbox 手書き)の解消。
6
+ *
7
+ * - gap は spacing token キー限定(生数値不可、§5 lint の意味を保つ)。
8
+ * - align は交差軸の配置(default stretch = RN デフォルト)。
9
+ * - 決定ロジックは pure resolver(stack.styles.ts)に分離 — recipe との機械照合対象。
10
+ */
11
+
12
+ import { useMemo } from "react";
13
+ import { View } from "react-native";
14
+ import { useTheme } from "../theme/index.js";
15
+ import { CONTRACTS } from "../contracts/contract-types.js";
16
+ import { resolveStackStyle } from "./stack.styles.js";
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ export function Stack({
19
+ gap,
20
+ align = "stretch",
21
+ style,
22
+ testID,
23
+ children
24
+ }) {
25
+ const {
26
+ theme
27
+ } = useTheme();
28
+ const layout = useMemo(() => resolveStackStyle(theme, {
29
+ gap,
30
+ align
31
+ }), [theme, gap, align]);
32
+ return /*#__PURE__*/_jsx(View, {
33
+ style: [layout, style],
34
+ testID: testID,
35
+ children: children
36
+ });
37
+ }
38
+ Stack.__contract = CONTRACTS.stack;
39
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","View","useTheme","CONTRACTS","resolveStackStyle","jsx","_jsx","Stack","gap","align","style","testID","children","theme","layout","__contract","stack"],"sourceRoot":"../../../src","sources":["primitives/Stack.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,QAAwC,cAAc;AACnE,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAQ,gCAA6B;AACvD,SAASC,iBAAiB,QAA0C,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYrF,OAAO,SAASC,KAAKA,CAAC;EAAEC,GAAG;EAAEC,KAAK,GAAG,SAAS;EAAEC,KAAK;EAAEC,MAAM;EAAEC;AAAqB,CAAC,EAAE;EACrF,MAAM;IAAEC;EAAM,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAE5B,MAAMY,MAAM,GAAGd,OAAO,CACpB,MAAMI,iBAAiB,CAACS,KAAK,EAAE;IAAEL,GAAG;IAAEC;EAAM,CAAC,CAAC,EAC9C,CAACI,KAAK,EAAEL,GAAG,EAAEC,KAAK,CACpB,CAAC;EAED,oBACEH,IAAA,CAACL,IAAI;IAACS,KAAK,EAAE,CAACI,MAAM,EAAEJ,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAC1CA;EAAQ,CACL,CAAC;AAEX;AAEAL,KAAK,CAACQ,UAAU,GAAGZ,SAAS,CAACa,KAAK","ignoreList":[]}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Tag — タグ / フィルターチップ primitive(設計書 §1, §4 C-3)。contract: tag。discriminated union。
5
+ *
6
+ * - variant で必須 prop が変わるため DU(§4: basic は表示のみ、removable は onRemove 必須、
7
+ * filter-chip は selected/onToggle 必須)。
8
+ * - contract states active/inactive → prop selected:boolean(§2)。selected→accessibilityState.selected。
9
+ * - 配色: basic/removable は bg-page-alt、filter-chip は bg-surface+border、selected 時は
10
+ * active-bg=primary.50 / active-border=primary.200 / active-text=primary.700(tag.contract tokenRefs)。
11
+ * 色・寸法の決定は pure resolver(tag.styles.ts)に分離、recipe との機械照合は
12
+ * scripts/lib/tag-conformance.test.ts が行う。
13
+ * - label は Text primitive。filter-chip active の文字色だけ primary.700(SemanticColors 外なので style 上書き)。
14
+ * - focus outline は Button(Step8) で Pressable focus handling を共通化してから Tag にも適用する
15
+ * (§1 は Phase1 scope だが acceptance 外。今は accessibilityState のみ。Button 実装時に回収)。
16
+ */
17
+
18
+ import { Pressable, View } from "react-native";
19
+ import { Text } from "./Text.js";
20
+ import { useTheme } from "../theme/index.js";
21
+ import { useFocusRing, FocusRing } from "./_internal/focus-ring.js";
22
+ import { CONTRACTS } from "../contracts/contract-types.js";
23
+ import { resolveTagBase, resolveTagVariant } from "./tag.styles.js";
24
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
+ /** 共通形状(px-3 py-1 rounded-full。寸法は resolver、layout はここで足す)。 */
26
+ function useTagBase() {
27
+ const {
28
+ theme
29
+ } = useTheme();
30
+ return {
31
+ flexDirection: "row",
32
+ alignItems: "center",
33
+ ...resolveTagBase(theme)
34
+ };
35
+ }
36
+ function FilterChipTag(props) {
37
+ const {
38
+ theme,
39
+ mode
40
+ } = useTheme();
41
+ const base = useTagBase();
42
+ const {
43
+ focused,
44
+ focusHandlers
45
+ } = useFocusRing();
46
+ const {
47
+ label,
48
+ selected,
49
+ onToggle,
50
+ style,
51
+ testID
52
+ } = props;
53
+ const v = resolveTagVariant(theme, mode, "filter-chip", selected);
54
+ return /*#__PURE__*/_jsxs(Pressable, {
55
+ ...focusHandlers,
56
+ onPress: onToggle,
57
+ accessibilityRole: "button",
58
+ accessibilityState: {
59
+ selected
60
+ },
61
+ testID: testID,
62
+ style: [base, {
63
+ backgroundColor: v.bg,
64
+ borderWidth: v.borderWidth,
65
+ borderColor: v.border
66
+ }, style],
67
+ children: [/*#__PURE__*/_jsx(Text, {
68
+ variant: v.font,
69
+ color: "text-default",
70
+ style: selected ? {
71
+ color: v.textColor
72
+ } : undefined,
73
+ children: label
74
+ }), /*#__PURE__*/_jsx(FocusRing, {
75
+ visible: focused,
76
+ radius: theme.radius.full
77
+ })]
78
+ });
79
+ }
80
+ function RemovableTag(props) {
81
+ const {
82
+ theme,
83
+ mode
84
+ } = useTheme();
85
+ const base = useTagBase();
86
+ const {
87
+ focused,
88
+ focusHandlers
89
+ } = useFocusRing();
90
+ const {
91
+ label,
92
+ onRemove,
93
+ removeAccessibilityLabel,
94
+ style,
95
+ testID
96
+ } = props;
97
+ const v = resolveTagVariant(theme, mode, "removable");
98
+ return /*#__PURE__*/_jsxs(View, {
99
+ testID: testID,
100
+ style: [base, {
101
+ backgroundColor: v.bg
102
+ }, style],
103
+ children: [/*#__PURE__*/_jsx(Text, {
104
+ variant: v.font,
105
+ color: "text-default",
106
+ children: label
107
+ }), /*#__PURE__*/_jsxs(Pressable, {
108
+ ...focusHandlers,
109
+ onPress: onRemove,
110
+ accessibilityRole: "button",
111
+ accessibilityLabel: removeAccessibilityLabel,
112
+ hitSlop: 10,
113
+ style: {
114
+ minWidth: 24,
115
+ minHeight: 24,
116
+ alignItems: "center",
117
+ justifyContent: "center"
118
+ },
119
+ children: [/*#__PURE__*/_jsx(Text, {
120
+ variant: "xs",
121
+ color: "text-muted",
122
+ children: "\xD7"
123
+ }), /*#__PURE__*/_jsx(FocusRing, {
124
+ visible: focused,
125
+ radius: theme.radius.full
126
+ })]
127
+ })]
128
+ });
129
+ }
130
+ export function Tag(props) {
131
+ const {
132
+ theme,
133
+ mode
134
+ } = useTheme();
135
+ const base = useTagBase();
136
+ if (props.variant === "filter-chip") return /*#__PURE__*/_jsx(FilterChipTag, {
137
+ ...props
138
+ });
139
+ if (props.variant === "removable") return /*#__PURE__*/_jsx(RemovableTag, {
140
+ ...props
141
+ });
142
+
143
+ // basic(表示のみ)
144
+ const v = resolveTagVariant(theme, mode, "basic");
145
+ return /*#__PURE__*/_jsx(View, {
146
+ testID: props.testID,
147
+ style: [base, {
148
+ backgroundColor: v.bg
149
+ }, props.style],
150
+ children: /*#__PURE__*/_jsx(Text, {
151
+ variant: v.font,
152
+ color: "text-default",
153
+ children: props.label
154
+ })
155
+ });
156
+ }
157
+
158
+ // Phase 2 conformance test 用の contract メタ(§2 A-3)。
159
+ Tag.__contract = CONTRACTS.tag;
160
+ //# sourceMappingURL=Tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Pressable","View","Text","useTheme","useFocusRing","FocusRing","CONTRACTS","resolveTagBase","resolveTagVariant","jsx","_jsx","jsxs","_jsxs","useTagBase","theme","flexDirection","alignItems","FilterChipTag","props","mode","base","focused","focusHandlers","label","selected","onToggle","style","testID","v","onPress","accessibilityRole","accessibilityState","backgroundColor","bg","borderWidth","borderColor","border","children","variant","font","color","textColor","undefined","visible","radius","full","RemovableTag","onRemove","removeAccessibilityLabel","accessibilityLabel","hitSlop","minWidth","minHeight","justifyContent","Tag","__contract","tag"],"sourceRoot":"../../../src","sources":["primitives/Tag.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Text — 基本テキスト primitive(設計書 §1)。RN コア Text の薄いラッパ。
5
+ * contract: text(app 先行定義、melta-contracts)。
6
+ *
7
+ * - variant は contract 由来の VariantOf<"text">(= fontSize の段階)。theme の FontSizeKey と
8
+ * 構造一致している前提で theme.typography.fontSize[variant] を引く。乖離したら型エラーで検知
9
+ * される(= A-3 conformance の型レベル最低ライン、§2)。
10
+ * - 色は token キーのみ(生 hex 不可、§5 lint の意味を保つ)。
11
+ * - letterSpacing は role(heading/body) の ratio を fontSize から pt 換算(text.styles.ts)。
12
+ * - 形状(fontSize/lineHeight/letterSpacing/fontWeight)は variant/role/weight 依存なので useMemo で
13
+ * 分離(B-3 の「形状/色 分離 + 参照安定性」を Phase1 は useMemo で満たす。StyleSheet 事前生成の
14
+ * 最適化は Card で実証予定)。色のみ render 時に colors から取る。
15
+ */
16
+
17
+ import { useMemo } from "react";
18
+ import { Text as RNText } from "react-native";
19
+ import { useTheme } from "../theme/index.js";
20
+ import { CONTRACTS } from "../contracts/contract-types.js";
21
+ import { resolveTextShape } from "./text.styles.js";
22
+ import { jsx as _jsx } from "react/jsx-runtime";
23
+ export function Text({
24
+ variant = "base",
25
+ weight,
26
+ color = "text-default",
27
+ role = "body",
28
+ numberOfLines,
29
+ style,
30
+ testID,
31
+ children
32
+ }) {
33
+ const {
34
+ theme,
35
+ colors
36
+ } = useTheme();
37
+
38
+ // 形状(mode 非依存)は variant/role/weight にだけ依存させてメモ化(B-3)。
39
+ // 決定ロジックは pure resolver(text.styles.ts)に分離済み — recipe との機械照合対象。
40
+ const shape = useMemo(() => resolveTextShape(theme, variant, role, weight), [theme, variant, role, weight]);
41
+ return /*#__PURE__*/_jsx(RNText, {
42
+ style: [shape, {
43
+ color: colors[color]
44
+ }, style],
45
+ numberOfLines: numberOfLines,
46
+ accessibilityRole: role === "heading" ? "header" : undefined,
47
+ testID: testID,
48
+ children: children
49
+ });
50
+ }
51
+
52
+ // Phase 2 conformance test 用の contract メタ(§2 A-3)。
53
+ Text.__contract = CONTRACTS.text;
54
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","Text","RNText","useTheme","CONTRACTS","resolveTextShape","jsx","_jsx","variant","weight","color","role","numberOfLines","style","testID","children","theme","colors","shape","accessibilityRole","undefined","__contract","text"],"sourceRoot":"../../../src","sources":["primitives/Text.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAwB,OAAO;AAC/C,SAASC,IAAI,IAAIC,MAAM,QAAwC,cAAc;AAC7E,SAASC,QAAQ,QAAQ,mBAAU;AAEnC,SAASC,SAAS,QAAwB,gCAA6B;AACvE,SAASC,gBAAgB,QAAuB,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBhE,OAAO,SAASN,IAAIA,CAAC;EACnBO,OAAO,GAAG,MAAM;EAChBC,MAAM;EACNC,KAAK,GAAG,cAAc;EACtBC,IAAI,GAAG,MAAM;EACbC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACS,CAAC,EAAE;EACZ,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGd,QAAQ,CAAC,CAAC;;EAEpC;EACA;EACA,MAAMe,KAAK,GAAGlB,OAAO,CACnB,MAAMK,gBAAgB,CAACW,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAAC,EACpD,CAACO,KAAK,EAAER,OAAO,EAAEG,IAAI,EAAEF,MAAM,CAC/B,CAAC;EAED,oBACEF,IAAA,CAACL,MAAM;IACLW,KAAK,EAAE,CAACK,KAAK,EAAE;MAAER,KAAK,EAAEO,MAAM,CAACP,KAAK;IAAE,CAAC,EAAEG,KAAK,CAAE;IAChDD,aAAa,EAAEA,aAAc;IAC7BO,iBAAiB,EAAER,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAGS,SAAU;IAC7DN,MAAM,EAAEA,MAAO;IAAAC,QAAA,EAEdA;EAAQ,CACH,CAAC;AAEb;;AAEA;AACAd,IAAI,CAACoB,UAAU,GAAGjB,SAAS,CAACkB,IAAI","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * focus-ring — Pressable の focus 可視化を共通化する internal helper(設計書 §1/§2)。
5
+ *
6
+ * RN にブラウザの focus-visible / ring はないので、focus 時に「outline 相当の View overlay」を
7
+ * 対象の外側に絶対配置で描く(§2 mapping: focus → accessible + Pressable onFocus で outline)。
8
+ * 外付けキーボード / TV / a11y focus で効く。Button / Tag / Card で共有する(個別実装の重複を防ぐ)。
9
+ *
10
+ * 使い方:
11
+ * const { focused, focusHandlers } = useFocusRing();
12
+ * <Pressable {...focusHandlers} style={{ ... }}>
13
+ * {children}
14
+ * <FocusRing visible={focused} radius={theme.radius.md} />
15
+ * </Pressable>
16
+ * 注: 親 Pressable は position:relative(RN 既定)かつ overflow を hidden にしないこと
17
+ * (ring は inset 負値で外側に出るため)。
18
+ */
19
+
20
+ import { useState } from "react";
21
+ import { View } from "react-native";
22
+ import { useTheme } from "../../theme/index.js";
23
+ import { jsx as _jsx } from "react/jsx-runtime";
24
+ export function useFocusRing() {
25
+ const [focused, setFocused] = useState(false);
26
+ return {
27
+ focused,
28
+ focusHandlers: {
29
+ onFocus: () => setFocused(true),
30
+ onBlur: () => setFocused(false)
31
+ }
32
+ };
33
+ }
34
+ const INSET = 3;
35
+ export function FocusRing({
36
+ visible,
37
+ radius
38
+ }) {
39
+ const {
40
+ theme
41
+ } = useTheme();
42
+ if (!visible) return null;
43
+ return /*#__PURE__*/_jsx(View, {
44
+ pointerEvents: "none",
45
+ style: {
46
+ position: "absolute",
47
+ top: -INSET,
48
+ left: -INSET,
49
+ right: -INSET,
50
+ bottom: -INSET,
51
+ borderWidth: 2,
52
+ borderColor: theme.color.primary["500"],
53
+ borderRadius: radius + INSET
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=focus-ring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","View","useTheme","jsx","_jsx","useFocusRing","focused","setFocused","focusHandlers","onFocus","onBlur","INSET","FocusRing","visible","radius","theme","pointerEvents","style","position","top","left","right","bottom","borderWidth","borderColor","color","primary","borderRadius"],"sourceRoot":"../../../../src","sources":["primitives/_internal/focus-ring.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,QAAQ,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvC,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGP,QAAQ,CAAC,KAAK,CAAC;EAC7C,OAAO;IACLM,OAAO;IACPE,aAAa,EAAE;MACbC,OAAO,EAAEA,CAAA,KAAMF,UAAU,CAAC,IAAI,CAAC;MAC/BG,MAAM,EAAEA,CAAA,KAAMH,UAAU,CAAC,KAAK;IAChC;EACF,CAAC;AACH;AAQA,MAAMI,KAAK,GAAG,CAAC;AAEf,OAAO,SAASC,SAASA,CAAC;EAAEC,OAAO;EAAEC;AAAuB,CAAC,EAAE;EAC7D,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAACW,OAAO,EAAE,OAAO,IAAI;EACzB,oBACET,IAAA,CAACH,IAAI;IACHe,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,GAAG,EAAE,CAACR,KAAK;MACXS,IAAI,EAAE,CAACT,KAAK;MACZU,KAAK,EAAE,CAACV,KAAK;MACbW,MAAM,EAAE,CAACX,KAAK;MACdY,WAAW,EAAE,CAAC;MACdC,WAAW,EAAET,KAAK,CAACU,KAAK,CAACC,OAAO,CAAC,KAAK,CAAC;MACvCC,YAAY,EAAEb,MAAM,GAAGH;IACzB;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * button.styles — Button の pure style resolver(P4 conformance 対応で Button.tsx から分離)。
5
+ *
6
+ * react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
7
+ * 直接実行できる。recipes/app/button.recipe.json(melta-contracts の styleRefs)との
8
+ * 機械照合は scripts/lib/recipe-conformance.test.ts が行う。
9
+ */
10
+
11
+ /** size → height / 横 padding / label fontSize / icon box(contract sizes/iconButton と整合)。 */
12
+ export const SIZE_SPEC = {
13
+ small: {
14
+ height: 32,
15
+ px: "3",
16
+ font: "sm",
17
+ iconBox: 32
18
+ },
19
+ medium: {
20
+ height: 40,
21
+ px: "4",
22
+ font: "base",
23
+ iconBox: 40
24
+ },
25
+ large: {
26
+ height: 48,
27
+ px: "6",
28
+ font: "base",
29
+ iconBox: 48
30
+ }
31
+ };
32
+
33
+ /**
34
+ * variant → 色解決(button.contract tokenRefs の 1:1 写像)。
35
+ * 文字色は variant により semantic 外(primary.500 等)もあるため hex 文字列で返し、
36
+ * Text の style で color 上書きする(Text の color prop は SemanticColors キー限定のため)。
37
+ */
38
+ export function resolveVariant(theme, mode, variant) {
39
+ const c = theme.color;
40
+ const sem = c.semantic[mode];
41
+ switch (variant) {
42
+ case "contained":
43
+ return {
44
+ bg: c.primary["500"],
45
+ pressedBg: c.primary["700"],
46
+ textColor: sem["text-on-accent"]
47
+ };
48
+ case "outlined":
49
+ return {
50
+ bg: sem["bg-surface"],
51
+ pressedBg: sem["bg-surface-alt"],
52
+ textColor: sem["text-default"],
53
+ border: sem["border-default"]
54
+ };
55
+ case "brand-outline":
56
+ return {
57
+ bg: sem["bg-surface"],
58
+ pressedBg: c.primary["50"],
59
+ textColor: c.primary["500"],
60
+ border: c.primary["500"]
61
+ };
62
+ case "neutral":
63
+ return {
64
+ bg: sem["bg-surface-alt"],
65
+ pressedBg: sem["border-default"],
66
+ textColor: sem["text-default"]
67
+ };
68
+ case "lighted":
69
+ return {
70
+ bg: c.primary["50"],
71
+ pressedBg: c.primary["100"],
72
+ textColor: c.primary["500"]
73
+ };
74
+ case "danger":
75
+ return {
76
+ bg: c.status.danger.base,
77
+ pressedBg: c.status.danger.textLight,
78
+ textColor: sem["text-on-accent"]
79
+ };
80
+ case "subtle":
81
+ return {
82
+ bg: "transparent",
83
+ pressedBg: sem["bg-surface-alt"],
84
+ textColor: sem["text-default"]
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=button.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SIZE_SPEC","small","height","px","font","iconBox","medium","large","resolveVariant","theme","mode","variant","c","color","sem","semantic","bg","primary","pressedBg","textColor","border","status","danger","base","textLight"],"sourceRoot":"../../../src","sources":["primitives/button.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA,OAAO,MAAMA,SAGZ,GAAG;EACFC,KAAK,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,IAAI;IAAEC,OAAO,EAAE;EAAG,CAAC;EACvDC,MAAM,EAAE;IAAEJ,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG,CAAC;EAC1DE,KAAK,EAAE;IAAEL,MAAM,EAAE,EAAE;IAAEC,EAAE,EAAE,GAAG;IAAEC,IAAI,EAAE,MAAM;IAAEC,OAAO,EAAE;EAAG;AAC1D,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,cAAcA,CAC5BC,KAAkB,EAClBC,IAAe,EACfC,OAAsB,EACmD;EACzE,MAAMC,CAAC,GAAGH,KAAK,CAACI,KAAK;EACrB,MAAMC,GAAG,GAAGF,CAAC,CAACG,QAAQ,CAACL,IAAI,CAAC;EAC5B,QAAQC,OAAO;IACb,KAAK,WAAW;MACd,OAAO;QAAEK,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAChG,KAAK,UAAU;MACb,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAChCK,SAAS,EAAEL,GAAG,CAAC,cAAc,CAAC;QAC9BM,MAAM,EAAEN,GAAG,CAAC,gBAAgB;MAC9B,CAAC;IACH,KAAK,eAAe;MAClB,OAAO;QACLE,EAAE,EAAEF,GAAG,CAAC,YAAY,CAAC;QACrBI,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAC1BE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAC3BG,MAAM,EAAER,CAAC,CAACK,OAAO,CAAC,KAAK;MACzB,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QAAED,EAAE,EAAEF,GAAG,CAAC,gBAAgB,CAAC;QAAEI,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;IACxG,KAAK,SAAS;MACZ,OAAO;QAAEE,EAAE,EAAEJ,CAAC,CAACK,OAAO,CAAC,IAAI,CAAC;QAAEC,SAAS,EAAEN,CAAC,CAACK,OAAO,CAAC,KAAK,CAAC;QAAEE,SAAS,EAAEP,CAAC,CAACK,OAAO,CAAC,KAAK;MAAE,CAAC;IAC1F,KAAK,QAAQ;MACX,OAAO;QAAED,EAAE,EAAEJ,CAAC,CAACS,MAAM,CAACC,MAAM,CAACC,IAAI;QAAEL,SAAS,EAAEN,CAAC,CAACS,MAAM,CAACC,MAAM,CAACE,SAAS;QAAEL,SAAS,EAAEL,GAAG,CAAC,gBAAgB;MAAE,CAAC;IAC7G,KAAK,QAAQ;MACX,OAAO;QAAEE,EAAE,EAAE,aAAa;QAAEE,SAAS,EAAEJ,GAAG,CAAC,gBAAgB,CAAC;QAAEK,SAAS,EAAEL,GAAG,CAAC,cAAc;MAAE,CAAC;EAClG;AACF","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ /** melta-app primitives の公開エントリ。実装ごとにここへ追記する(設計書 §1)。 */
4
+
5
+ export { Text } from "./Text.js";
6
+ export { Metric } from "./Metric.js";
7
+ export { Tag } from "./Tag.js";
8
+ export { Button } from "./Button.js";
9
+ export { Stack } from "./Stack.js";
10
+ export { Row } from "./Row.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","Metric","Tag","Button","Stack","Row"],"sourceRoot":"../../../src","sources":["primitives/index.ts"],"mappings":";;AAAA;;AAEA,SAASA,IAAI,QAAQ,WAAQ;AAC7B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,GAAG,QAAQ,UAAO;AAC3B,SAASC,MAAM,QAAQ,aAAU;AACjC,SAASC,KAAK,QAAQ,YAAS;AAC/B,SAASC,GAAG,QAAQ,UAAO","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * metric.styles — Metric の pure style resolver(styleRefs conformance 対応で Metric.tsx から分離)。
5
+ *
6
+ * react-native を import しない純粋モジュール(型 import のみ可)にすることで node テスト
7
+ * (tsx --test)から直接実行できる。recipes/app/metric.recipe.json(melta-contracts の
8
+ * styleRefs)との機械照合は scripts/lib/metric-conformance.test.ts が行う。
9
+ */
10
+
11
+ /**
12
+ * size → value / unit の fontSize token(metric.recipe sizes と整合)。
13
+ * unit は value の1段下の fontSize(ベースライン揃え用)。
14
+ */
15
+ export const METRIC_FONT = {
16
+ sm: {
17
+ value: "lg",
18
+ unit: "base"
19
+ },
20
+ md: {
21
+ value: "2xl",
22
+ unit: "lg"
23
+ },
24
+ lg: {
25
+ value: "3xl",
26
+ unit: "xl"
27
+ }
28
+ };
29
+ /** size → value / unit / label の style 解決(metric.recipe styleRefs の 1:1 写像)。 */
30
+ export function resolveMetricStyles(theme, mode, size) {
31
+ const sem = theme.color.semantic[mode];
32
+ const fontSize = theme.typography.fontSize;
33
+ const font = METRIC_FONT[size];
34
+ return {
35
+ valueStyle: {
36
+ fontSize: fontSize[font.value].fontSize,
37
+ lineHeight: fontSize[font.value].lineHeight,
38
+ fontWeight: theme.typography.fontWeight.bold,
39
+ color: sem["text-heading"],
40
+ fontVariant: ["tabular-nums"]
41
+ },
42
+ unitStyle: {
43
+ fontSize: fontSize[font.unit].fontSize,
44
+ fontWeight: theme.typography.fontWeight.medium,
45
+ color: sem["text-muted"],
46
+ marginLeft: theme.spacing["1"]
47
+ },
48
+ labelStyle: {
49
+ fontSize: fontSize.sm.fontSize,
50
+ color: sem["text-muted"]
51
+ }
52
+ };
53
+ }
54
+ //# sourceMappingURL=metric.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["METRIC_FONT","sm","value","unit","md","lg","resolveMetricStyles","theme","mode","size","sem","color","semantic","fontSize","typography","font","valueStyle","lineHeight","fontWeight","bold","fontVariant","unitStyle","medium","marginLeft","spacing","labelStyle"],"sourceRoot":"../../../src","sources":["primitives/metric.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAA0E,GAAG;EACxFC,EAAE,EAAE;IAAEC,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAE;EAAO,CAAC;EACjCC,EAAE,EAAE;IAAEF,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK,CAAC;EAChCE,EAAE,EAAE;IAAEH,KAAK,EAAE,KAAK;IAAEC,IAAI,EAAE;EAAK;AACjC,CAAC;AAyBD;AACA,OAAO,SAASG,mBAAmBA,CACjCC,KAAkB,EAClBC,IAAe,EACfC,IAAgB,EACF;EACd,MAAMC,GAAG,GAAGH,KAAK,CAACI,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;EACtC,MAAMK,QAAQ,GAAGN,KAAK,CAACO,UAAU,CAACD,QAAQ;EAC1C,MAAME,IAAI,GAAGf,WAAW,CAACS,IAAI,CAAC;EAC9B,OAAO;IACLO,UAAU,EAAE;MACVH,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACW,QAAQ;MACvCI,UAAU,EAAEJ,QAAQ,CAACE,IAAI,CAACb,KAAK,CAAC,CAACe,UAAU;MAC3CC,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACC,IAAI;MAC5CR,KAAK,EAAED,GAAG,CAAC,cAAc,CAAC;MAC1BU,WAAW,EAAE,CAAC,cAAc;IAC9B,CAAC;IACDC,SAAS,EAAE;MACTR,QAAQ,EAAEA,QAAQ,CAACE,IAAI,CAACZ,IAAI,CAAC,CAACU,QAAQ;MACtCK,UAAU,EAAEX,KAAK,CAACO,UAAU,CAACI,UAAU,CAACI,MAAM;MAC9CX,KAAK,EAAED,GAAG,CAAC,YAAY,CAAC;MACxBa,UAAU,EAAEhB,KAAK,CAACiB,OAAO,CAAC,GAAG;IAC/B,CAAC;IACDC,UAAU,EAAE;MACVZ,QAAQ,EAAEA,QAAQ,CAACZ,EAAE,CAACY,QAAQ;MAC9BF,KAAK,EAAED,GAAG,CAAC,YAAY;IACzB;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * row.styles — Row の pure style resolver(styleRefs conformance 対応で Row.tsx から分離)。
5
+ *
6
+ * react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
7
+ * 直接実行できる。recipes/app/row.recipe.json(melta-contracts の styleRefs)との
8
+ * 機械照合は scripts/lib/row-conformance.test.ts が行う。
9
+ */
10
+
11
+ /** 交差軸の配置(RN alignItems への写像)。default "center"(recipe default に焼いてある)。 */
12
+
13
+ /** 主軸の配置(RN justifyContent への写像)。default "start"(= RN デフォルト、style 出力なし)。 */
14
+
15
+ const ALIGN_MAP = {
16
+ start: "flex-start",
17
+ center: "center",
18
+ end: "flex-end",
19
+ baseline: "baseline",
20
+ stretch: "stretch"
21
+ };
22
+ const JUSTIFY_MAP = {
23
+ start: "flex-start",
24
+ center: "center",
25
+ end: "flex-end",
26
+ between: "space-between"
27
+ };
28
+ /**
29
+ * props → 横並び style の解決(row.recipe styleRefs の 1:1 写像)。
30
+ * デフォルト(align=center / justify=start / wrap=false / gap なし)は
31
+ * recipe の default variant(flexDirection + alignItems: "center")と一致させている。
32
+ */
33
+ export function resolveRowStyle(theme, {
34
+ gap,
35
+ align = "center",
36
+ justify = "start",
37
+ wrap = false
38
+ } = {}) {
39
+ return {
40
+ flexDirection: "row",
41
+ alignItems: ALIGN_MAP[align],
42
+ ...(justify !== "start" ? {
43
+ justifyContent: JUSTIFY_MAP[justify]
44
+ } : null),
45
+ ...(wrap ? {
46
+ flexWrap: "wrap"
47
+ } : null),
48
+ ...(gap != null ? {
49
+ gap: theme.spacing[gap]
50
+ } : null)
51
+ };
52
+ }
53
+ //# sourceMappingURL=row.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ALIGN_MAP","start","center","end","baseline","stretch","JUSTIFY_MAP","between","resolveRowStyle","theme","gap","align","justify","wrap","flexDirection","alignItems","justifyContent","flexWrap","spacing"],"sourceRoot":"../../../src","sources":["primitives/row.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAEA;;AAGA,MAAMA,SAAS,GAAG;EAChBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;AACX,CAAU;AAEV,MAAMC,WAAW,GAAG;EAClBL,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfI,OAAO,EAAE;AACX,CAAU;AAqBV;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,KAAkB,EAClB;EAAEC,GAAG;EAAEC,KAAK,GAAG,QAAQ;EAAEC,OAAO,GAAG,OAAO;EAAEC,IAAI,GAAG;AAAqB,CAAC,GAAG,CAAC,CAAC,EACpE;EACV,OAAO;IACLC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAEf,SAAS,CAACW,KAAK,CAAC;IAC5B,IAAIC,OAAO,KAAK,OAAO,GAAG;MAAEI,cAAc,EAAEV,WAAW,CAACM,OAAO;IAAE,CAAC,GAAG,IAAI,CAAC;IAC1E,IAAIC,IAAI,GAAG;MAAEI,QAAQ,EAAE;IAAgB,CAAC,GAAG,IAAI,CAAC;IAChD,IAAIP,GAAG,IAAI,IAAI,GAAG;MAAEA,GAAG,EAAED,KAAK,CAACS,OAAO,CAACR,GAAG;IAAE,CAAC,GAAG,IAAI;EACtD,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * stack.styles — Stack の pure style resolver(styleRefs conformance 対応で Stack.tsx から分離)。
5
+ *
6
+ * react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
7
+ * 直接実行できる。recipes/app/stack.recipe.json(melta-contracts の styleRefs)との
8
+ * 機械照合は scripts/lib/stack-conformance.test.ts が行う。
9
+ */
10
+
11
+ /** 交差軸の配置(RN alignItems への写像。default stretch = RN デフォルトなので出力しない)。 */
12
+
13
+ const ALIGN_MAP = {
14
+ start: "flex-start",
15
+ center: "center",
16
+ end: "flex-end",
17
+ stretch: "stretch"
18
+ };
19
+ /**
20
+ * props → 縦積み style の解決(stack.recipe styleRefs の 1:1 写像)。
21
+ * デフォルト(gap なし / align=stretch)は recipe の default variant(flexDirection のみ)と一致させている。
22
+ */
23
+ export function resolveStackStyle(theme, {
24
+ gap,
25
+ align = "stretch"
26
+ } = {}) {
27
+ return {
28
+ flexDirection: "column",
29
+ ...(gap != null ? {
30
+ gap: theme.spacing[gap]
31
+ } : null),
32
+ ...(align !== "stretch" ? {
33
+ alignItems: ALIGN_MAP[align]
34
+ } : null)
35
+ };
36
+ }
37
+ //# sourceMappingURL=stack.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ALIGN_MAP","start","center","end","stretch","resolveStackStyle","theme","gap","align","flexDirection","spacing","alignItems"],"sourceRoot":"../../../src","sources":["primitives/stack.styles.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AAGA,MAAMA,SAAS,GAAG;EAChBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,UAAU;EACfC,OAAO,EAAE;AACX,CAAU;AAeV;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,KAAkB,EAClB;EAAEC,GAAG;EAAEC,KAAK,GAAG;AAA2B,CAAC,GAAG,CAAC,CAAC,EACpC;EACZ,OAAO;IACLC,aAAa,EAAE,QAAQ;IACvB,IAAIF,GAAG,IAAI,IAAI,GAAG;MAAEA,GAAG,EAAED,KAAK,CAACI,OAAO,CAACH,GAAG;IAAE,CAAC,GAAG,IAAI,CAAC;IACrD,IAAIC,KAAK,KAAK,SAAS,GAAG;MAAEG,UAAU,EAAEX,SAAS,CAACQ,KAAK;IAAE,CAAC,GAAG,IAAI;EACnE,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * tag.styles — Tag の pure style resolver(styleRefs conformance 対応で Tag.tsx から分離)。
5
+ *
6
+ * react-native を import しない純粋モジュールにすることで node テスト(tsx --test)から
7
+ * 直接実行できる。recipes/app/tag.recipe.json(melta-contracts の styleRefs)との
8
+ * 機械照合は scripts/lib/tag-conformance.test.ts が行う。
9
+ */
10
+
11
+ /** 共通形状(px-3 py-1 gap-1 rounded-full。tag.recipe の全 variant style と共通の寸法キー)。 */
12
+ export function resolveTagBase(theme) {
13
+ return {
14
+ gap: theme.spacing["1"],
15
+ paddingHorizontal: theme.spacing["3"],
16
+ paddingVertical: theme.spacing["1"],
17
+ borderRadius: theme.radius.full
18
+ };
19
+ }
20
+
21
+ /**
22
+ * variant(+ filter-chip の selected 状態)→ 配色 + label fontSize(tag.recipe styleRefs の 1:1 写像)。
23
+ *
24
+ * - selected は contract states active/inactive → prop selected:boolean の写像(filter-chip のみ有効)。
25
+ * active は bg=primary.50 / border=primary.200 / text=primary.700 の差分、inactive は variant style そのまま。
26
+ * - 文字色は active 時に semantic 外(primary.700)になるため hex 文字列で返し、
27
+ * Text の style で color 上書きする(Text の color prop は SemanticColors キー限定のため)。
28
+ */
29
+ export function resolveTagVariant(theme, mode, variant, selected = false) {
30
+ const c = theme.color;
31
+ const sem = c.semantic[mode];
32
+ switch (variant) {
33
+ case "basic":
34
+ case "removable":
35
+ return {
36
+ bg: sem["bg-page-alt"],
37
+ textColor: sem["text-default"],
38
+ font: "xs"
39
+ };
40
+ case "filter-chip":
41
+ return selected ? {
42
+ bg: c.primary["50"],
43
+ borderWidth: 1,
44
+ border: c.primary["200"],
45
+ textColor: c.primary["700"],
46
+ font: "sm"
47
+ } : {
48
+ bg: sem["bg-surface"],
49
+ borderWidth: 1,
50
+ border: sem["border-default"],
51
+ textColor: sem["text-default"],
52
+ font: "sm"
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=tag.styles.js.map