@lt-three/love3 0.1.0 → 0.1.1

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 (271) hide show
  1. package/README.md +40 -40
  2. package/dist/native/analytics/animation.d.ts +1 -1
  3. package/dist/native/analytics/animation.js +1 -1
  4. package/dist/native/analytics/chart.types.d.ts +3 -3
  5. package/dist/native/analytics/metric-card.d.ts +3 -3
  6. package/dist/native/analytics/metric-card.js +3 -3
  7. package/dist/native/analytics/multi-line-chart.d.ts +9 -8
  8. package/dist/native/analytics/multi-line-chart.js +14 -13
  9. package/dist/native/analytics/pie-chart.d.ts +7 -7
  10. package/dist/native/analytics/pie-chart.js +8 -8
  11. package/dist/native/analytics/single-number.d.ts +4 -4
  12. package/dist/native/analytics/single-number.js +2 -2
  13. package/dist/native/atom/avatar.d.ts +6 -6
  14. package/dist/native/atom/avatar.js +2 -2
  15. package/dist/native/atom/badge.d.ts +5 -5
  16. package/dist/native/atom/button.d.ts +12 -12
  17. package/dist/native/atom/button.js +8 -8
  18. package/dist/native/atom/checkbox.d.ts +4 -4
  19. package/dist/native/atom/checkbox.js +2 -2
  20. package/dist/native/atom/colored-value.d.ts +4 -4
  21. package/dist/native/atom/colored-value.js +4 -4
  22. package/dist/native/atom/image.d.ts +7 -7
  23. package/dist/native/atom/image.js +2 -2
  24. package/dist/native/atom/label.d.ts +5 -5
  25. package/dist/native/atom/label.js +2 -2
  26. package/dist/native/atom/link.d.ts +5 -5
  27. package/dist/native/atom/link.js +5 -5
  28. package/dist/native/atom/readout.d.ts +7 -7
  29. package/dist/native/atom/readout.js +3 -3
  30. package/dist/native/atom/search-input.d.ts +2 -2
  31. package/dist/native/atom/search-input.js +2 -2
  32. package/dist/native/atom/select.d.ts +14 -14
  33. package/dist/native/atom/select.js +8 -8
  34. package/dist/native/atom/separator.d.ts +2 -3
  35. package/dist/native/atom/separator.js +2 -3
  36. package/dist/native/atom/skeleton.d.ts +3 -3
  37. package/dist/native/atom/skeleton.js +3 -3
  38. package/dist/native/atom/slider.d.ts +6 -6
  39. package/dist/native/atom/slider.js +3 -3
  40. package/dist/native/atom/spinner.d.ts +4 -4
  41. package/dist/native/atom/spinner.js +2 -2
  42. package/dist/native/atom/switch.d.ts +4 -4
  43. package/dist/native/atom/switch.js +3 -3
  44. package/dist/native/atom/symbol.d.ts +7 -7
  45. package/dist/native/atom/symbol.js +7 -7
  46. package/dist/native/atom/symbol.types.d.ts +8 -8
  47. package/dist/native/atom/symbol.types.js +7 -7
  48. package/dist/native/atom/text-field.d.ts +15 -15
  49. package/dist/native/atom/text-field.js +5 -5
  50. package/dist/native/atom/theme-toggle.d.ts +7 -7
  51. package/dist/native/atom/theme-toggle.js +4 -4
  52. package/dist/native/atom/timezone-select.d.ts +5 -5
  53. package/dist/native/atom/timezone-select.js +4 -4
  54. package/dist/native/atom/typography.d.ts +2 -2
  55. package/dist/native/atom/typography.js +2 -2
  56. package/dist/native/base/button.d.ts +13 -13
  57. package/dist/native/base/button.js +4 -4
  58. package/dist/native/base/form.d.ts +15 -15
  59. package/dist/native/base/form.js +11 -11
  60. package/dist/native/base/glass-card.d.ts +3 -3
  61. package/dist/native/base/glass-card.js +3 -3
  62. package/dist/native/base/input.d.ts +8 -8
  63. package/dist/native/base/input.js +7 -7
  64. package/dist/native/base/sheet.d.ts +27 -27
  65. package/dist/native/base/sheet.js +15 -15
  66. package/dist/native/form/checkbox.d.ts +3 -3
  67. package/dist/native/form/checkbox.js +2 -2
  68. package/dist/native/form/date-picker.d.ts +9 -9
  69. package/dist/native/form/date-picker.js +9 -9
  70. package/dist/native/form/form.d.ts +5 -6
  71. package/dist/native/form/form.js +4 -5
  72. package/dist/native/form/radio-group.d.ts +5 -5
  73. package/dist/native/form/radio-group.js +4 -4
  74. package/dist/native/form/select.d.ts +2 -2
  75. package/dist/native/form/select.js +2 -2
  76. package/dist/native/form/slider.d.ts +2 -2
  77. package/dist/native/form/slider.js +2 -2
  78. package/dist/native/form/switch.d.ts +2 -2
  79. package/dist/native/form/switch.js +2 -2
  80. package/dist/native/form/text-area.d.ts +2 -2
  81. package/dist/native/form/text-area.js +1 -1
  82. package/dist/native/form/text-input.d.ts +5 -5
  83. package/dist/native/form/text-input.js +8 -8
  84. package/dist/native/layout/accordion.d.ts +5 -5
  85. package/dist/native/layout/accordion.js +2 -2
  86. package/dist/native/layout/card.d.ts +8 -8
  87. package/dist/native/layout/card.js +3 -3
  88. package/dist/native/layout/description.d.ts +2 -2
  89. package/dist/native/layout/description.js +2 -2
  90. package/dist/native/layout/error.d.ts +5 -5
  91. package/dist/native/layout/error.js +2 -2
  92. package/dist/native/layout/information.d.ts +4 -4
  93. package/dist/native/layout/information.js +3 -3
  94. package/dist/native/layout/locked.d.ts +15 -15
  95. package/dist/native/layout/locked.js +7 -7
  96. package/dist/native/layout/modal.d.ts +8 -8
  97. package/dist/native/layout/modal.js +5 -5
  98. package/dist/native/layout/not-found.d.ts +4 -4
  99. package/dist/native/layout/not-found.js +3 -3
  100. package/dist/native/layout/page-frame.d.ts +8 -8
  101. package/dist/native/layout/page-frame.js +3 -3
  102. package/dist/native/layout/panel.d.ts +5 -5
  103. package/dist/native/layout/panel.js +5 -5
  104. package/dist/native/layout/reorderable-list.d.ts +14 -14
  105. package/dist/native/layout/reorderable-list.js +10 -10
  106. package/dist/native/layout/sheet.d.ts +10 -10
  107. package/dist/native/layout/sheet.js +4 -4
  108. package/dist/native/layout/simple-dialog.d.ts +3 -3
  109. package/dist/native/layout/simple-dialog.js +2 -2
  110. package/dist/native/layout/simple-table.d.ts +18 -18
  111. package/dist/native/layout/simple-table.js +1 -1
  112. package/dist/native/layout/tab-bar.d.ts +10 -10
  113. package/dist/native/layout/tab-bar.js +4 -4
  114. package/dist/native/layout/tabs.d.ts +6 -6
  115. package/dist/native/layout/tabs.js +4 -4
  116. package/dist/native/layout/tuning-panel.d.ts +10 -10
  117. package/dist/native/layout/tuning-panel.js +15 -15
  118. package/dist/native/lib/autocomplete.d.ts +1 -1
  119. package/dist/native/lib/autocomplete.js +1 -1
  120. package/dist/native/lib/breakpoints.d.ts +3 -3
  121. package/dist/native/lib/breakpoints.js +3 -3
  122. package/dist/native/lib/chart-palette.d.ts +2 -2
  123. package/dist/native/lib/chart-palette.js +2 -2
  124. package/dist/native/lib/confirm.d.ts +15 -16
  125. package/dist/native/lib/confirm.js +9 -10
  126. package/dist/native/lib/control.d.ts +9 -9
  127. package/dist/native/lib/external-store.d.ts +4 -5
  128. package/dist/native/lib/keyboard.d.ts +7 -7
  129. package/dist/native/lib/keyboard.js +7 -7
  130. package/dist/native/lib/labels.d.ts +6 -6
  131. package/dist/native/lib/labels.js +6 -6
  132. package/dist/native/lib/loading.d.ts +3 -3
  133. package/dist/native/lib/loading.js +3 -3
  134. package/dist/native/lib/network.d.ts +5 -6
  135. package/dist/native/lib/network.js +5 -6
  136. package/dist/native/lib/scheme.d.ts +7 -7
  137. package/dist/native/lib/scheme.js +3 -3
  138. package/dist/native/lib/snackbar.d.ts +12 -13
  139. package/dist/native/lib/snackbar.js +7 -8
  140. package/dist/native/lib/theme.d.ts +15 -15
  141. package/dist/native/lib/theme.js +15 -15
  142. package/dist/native/lib/timezone.d.ts +13 -13
  143. package/dist/native/lib/timezone.js +13 -13
  144. package/dist/native/lib/token-color.d.ts +1 -1
  145. package/dist/native/lib/token-color.js +1 -1
  146. package/dist/native/lib/tuning-context.d.ts +2 -2
  147. package/dist/native/lib/tuning.d.ts +10 -10
  148. package/dist/native/lib/tuning.js +8 -8
  149. package/dist/native/lib/typography.d.ts +3 -3
  150. package/dist/native/lib/typography.js +3 -3
  151. package/dist/native/lib/utils.d.ts +3 -3
  152. package/dist/native/lib/utils.js +3 -3
  153. package/dist/native/once/confirm.d.ts +2 -2
  154. package/dist/native/once/confirm.js +2 -2
  155. package/dist/native/once/error-boundary.d.ts +3 -3
  156. package/dist/native/once/error-boundary.js +2 -2
  157. package/dist/native/once/loading-lock.d.ts +3 -3
  158. package/dist/native/once/loading-lock.js +3 -3
  159. package/dist/native/once/offline-banner.d.ts +6 -6
  160. package/dist/native/once/offline-banner.js +5 -5
  161. package/dist/native/once/snackbar.d.ts +7 -7
  162. package/dist/native/once/snackbar.js +5 -5
  163. package/dist/native/styles.css +21 -21
  164. package/dist/shared/analytics.d.ts +23 -23
  165. package/dist/shared/button.d.ts +1 -1
  166. package/dist/shared/form.d.ts +7 -7
  167. package/dist/shared/form.js +2 -2
  168. package/dist/tokens/contrast-pairs.d.ts +9 -9
  169. package/dist/tokens/contrast-pairs.js +10 -10
  170. package/dist/tokens/index.d.ts +1 -1
  171. package/dist/tokens/index.js +1 -1
  172. package/dist/tokens/styles.gen.css +87 -87
  173. package/dist/tokens/tokens.gen.d.ts +2 -2
  174. package/dist/tokens/tokens.gen.js +2 -2
  175. package/dist/tuning/catalog.d.ts +8 -8
  176. package/dist/tuning/catalog.js +9 -9
  177. package/dist/tuning/color.d.ts +4 -4
  178. package/dist/tuning/color.js +5 -5
  179. package/dist/tuning/css.d.ts +13 -13
  180. package/dist/tuning/css.js +17 -17
  181. package/dist/tuning/model.d.ts +11 -11
  182. package/dist/tuning/model.js +11 -11
  183. package/dist/tuning/native.d.ts +18 -18
  184. package/dist/tuning/native.js +18 -18
  185. package/dist/tuning/schema.d.ts +15 -15
  186. package/dist/tuning/schema.js +22 -22
  187. package/dist/tuning/types.d.ts +25 -25
  188. package/dist/tuning/types.js +6 -6
  189. package/dist/web/analytics/line-chart.d.ts +6 -6
  190. package/dist/web/analytics/line-chart.js +3 -3
  191. package/dist/web/analytics/metric-card.d.ts +6 -6
  192. package/dist/web/analytics/metric-card.js +5 -5
  193. package/dist/web/analytics/multi-line-chart.d.ts +23 -23
  194. package/dist/web/analytics/multi-line-chart.js +33 -33
  195. package/dist/web/atom/avatar.d.ts +1 -1
  196. package/dist/web/atom/checkbox.d.ts +6 -6
  197. package/dist/web/atom/checkbox.js +2 -2
  198. package/dist/web/atom/colored-value.d.ts +4 -4
  199. package/dist/web/atom/colored-value.js +4 -4
  200. package/dist/web/atom/help.d.ts +1 -1
  201. package/dist/web/atom/segmented-control.d.ts +13 -14
  202. package/dist/web/atom/segmented-control.js +6 -7
  203. package/dist/web/atom/select.d.ts +7 -7
  204. package/dist/web/atom/select.js +5 -5
  205. package/dist/web/atom/slider.d.ts +3 -3
  206. package/dist/web/atom/slider.js +2 -2
  207. package/dist/web/atom/switch.d.ts +3 -3
  208. package/dist/web/atom/text-area.d.ts +9 -8
  209. package/dist/web/atom/text-area.js +9 -8
  210. package/dist/web/atom/text-field.d.ts +5 -4
  211. package/dist/web/atom/text-field.js +5 -4
  212. package/dist/web/atom/toggle-chip.d.ts +6 -6
  213. package/dist/web/atom/toggle-chip.js +4 -4
  214. package/dist/web/atom/tooltip.d.ts +6 -6
  215. package/dist/web/atom/tooltip.js +2 -2
  216. package/dist/web/base/accordion.js +1 -1
  217. package/dist/web/base/breadcrumb.d.ts +1 -1
  218. package/dist/web/base/breadcrumb.js +1 -1
  219. package/dist/web/base/card.d.ts +3 -3
  220. package/dist/web/base/card.js +2 -2
  221. package/dist/web/base/dialog.d.ts +1 -1
  222. package/dist/web/base/dialog.js +1 -1
  223. package/dist/web/base/form.d.ts +7 -7
  224. package/dist/web/base/form.js +5 -5
  225. package/dist/web/base/pagination.d.ts +5 -5
  226. package/dist/web/base/pagination.js +1 -1
  227. package/dist/web/base/sheet.d.ts +1 -1
  228. package/dist/web/base/sheet.js +1 -1
  229. package/dist/web/base/slider.d.ts +1 -1
  230. package/dist/web/base/sonner.d.ts +2 -2
  231. package/dist/web/base/sonner.js +2 -2
  232. package/dist/web/base/spinner.js +1 -1
  233. package/dist/web/form/checkbox.d.ts +8 -8
  234. package/dist/web/form/checkbox.js +3 -3
  235. package/dist/web/form/radio-group.js +3 -3
  236. package/dist/web/form/select.js +1 -1
  237. package/dist/web/form/slider.d.ts +3 -3
  238. package/dist/web/form/slider.js +3 -3
  239. package/dist/web/form/switch.d.ts +3 -3
  240. package/dist/web/form/switch.js +4 -4
  241. package/dist/web/form/text-area.js +1 -1
  242. package/dist/web/form/text-input.d.ts +1 -1
  243. package/dist/web/form/text-input.js +1 -1
  244. package/dist/web/layout/accordion.d.ts +5 -5
  245. package/dist/web/layout/accordion.js +2 -2
  246. package/dist/web/layout/alert-modal.d.ts +11 -11
  247. package/dist/web/layout/alert-modal.js +7 -7
  248. package/dist/web/layout/card.d.ts +1 -1
  249. package/dist/web/layout/information.d.ts +9 -9
  250. package/dist/web/layout/information.js +7 -7
  251. package/dist/web/layout/modal.d.ts +1 -1
  252. package/dist/web/layout/page-frame.d.ts +14 -14
  253. package/dist/web/layout/page-frame.js +7 -7
  254. package/dist/web/layout/scroll-area.d.ts +1 -1
  255. package/dist/web/layout/sheet.d.ts +4 -4
  256. package/dist/web/layout/simple-table.d.ts +18 -18
  257. package/dist/web/layout/simple-table.js +2 -2
  258. package/dist/web/layout/tabs.d.ts +4 -4
  259. package/dist/web/layout/titled-modal.d.ts +10 -11
  260. package/dist/web/layout/titled-modal.js +7 -8
  261. package/dist/web/lib/css-vars.d.ts +6 -6
  262. package/dist/web/lib/css-vars.js +5 -5
  263. package/dist/web/lib/dialog.d.ts +4 -4
  264. package/dist/web/lib/labels.d.ts +8 -8
  265. package/dist/web/lib/labels.js +8 -8
  266. package/dist/web/lib/modal-open-focus.d.ts +7 -7
  267. package/dist/web/lib/modal-open-focus.js +9 -9
  268. package/dist/web/lib/restore-focus.d.ts +4 -4
  269. package/dist/web/lib/restore-focus.js +4 -4
  270. package/dist/web/styles.css +33 -33
  271. package/package.json +2 -2
@@ -1,21 +1,21 @@
1
1
  //#region src/native/atom/image.d.ts
2
2
  export type ImageWithLoaderProps = {
3
3
  src: string;
4
- /** スクリーンリーダー向けの説明。web の `alt` に対応する。 */
4
+ /** Description for screen readers. Corresponds to the web `alt`. */
5
5
  alt: string;
6
- /** タップで全画面表示にする(既定 true)。 */
6
+ /** Opens a full-screen view on tap (default true). */
7
7
  expandable?: boolean;
8
- /** 読み込み失敗時に出す文言。共有パッケージなので文言は使用側が持つ。 */
8
+ /** Text shown when loading fails. This is a shared package, so consumers own the wording. */
9
9
  errorText?: string;
10
- /** 拡大するボタンの読み上げ名。 */
10
+ /** Screen reader name of the expand button. */
11
11
  expandLabel?: string;
12
- /** 拡大表示を閉じるボタンの読み上げ名。 */
12
+ /** Screen reader name of the button that closes the expanded view. */
13
13
  closeLabel?: string;
14
14
  className?: string;
15
15
  };
16
16
  /**
17
- * 読み込み中はスケルトン、失敗時はプレースホルダを出す画像。
18
- * `@lt-three/web` の atom/image(ImageWithLoader)に対応する。
17
+ * An image that shows a skeleton while loading and a placeholder on failure.
18
+ * Mirrors the web atom/image (ImageWithLoader).
19
19
  */
20
20
  export declare function ImageWithLoader({ src, alt, expandable, errorText, expandLabel, closeLabel, className }: ImageWithLoaderProps): import("react").JSX.Element;
21
21
  //#endregion
@@ -8,8 +8,8 @@ import { Image } from "expo-image";
8
8
 
9
9
  //#region src/native/atom/image.tsx
10
10
  /**
11
- * 読み込み中はスケルトン、失敗時はプレースホルダを出す画像。
12
- * `@lt-three/web` の atom/image(ImageWithLoader)に対応する。
11
+ * An image that shows a skeleton while loading and a placeholder on failure.
12
+ * Mirrors the web atom/image (ImageWithLoader).
13
13
  */
14
14
  function ImageWithLoader({ src, alt, expandable = true, errorText = "画像の読み込みに失敗しました", expandLabel = "画像を拡大する", closeLabel = "閉じる", className }) {
15
15
  const [status, setStatus] = useState("loading");
@@ -2,17 +2,17 @@ import { ReactNode } from "react";
2
2
  //#region src/native/atom/label.d.ts
3
3
  export type LabelProps = {
4
4
  children: ReactNode;
5
- /** 必須マーク(`*`)を付ける。 */
5
+ /** Adds the required mark (`*`). */
6
6
  required?: boolean;
7
- /** ラベルの右に添える補足。 */
7
+ /** Supplementary text placed to the right of the label. */
8
8
  helpText?: ReactNode;
9
9
  className?: string;
10
- /** 文字の部分の `id`。入力の `aria-labelledby` から指す(必須の `*` と補足は名前に含めない)。 */
10
+ /** The `id` of the text part. Point to it from the input's `aria-labelledby` (the required `*` and the supplementary text are not part of the name). */
11
11
  id?: string;
12
12
  };
13
13
  /**
14
- * `@lt-three/web` の base/label と同じ見た目のラベル。
15
- * web の `htmlFor` に相当するものは RN に無いので、タップでの入力フォーカス連動は持たない。
14
+ * A label that looks the same as the web base/label.
15
+ * RN has no equivalent of the web's `htmlFor`, so tapping the label does not move focus to the input.
16
16
  */
17
17
  export declare function Label({ children, required, helpText, className, id }: LabelProps): import("react").JSX.Element;
18
18
  //#endregion
@@ -5,8 +5,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/atom/label.tsx
7
7
  /**
8
- * `@lt-three/web` の base/label と同じ見た目のラベル。
9
- * web の `htmlFor` に相当するものは RN に無いので、タップでの入力フォーカス連動は持たない。
8
+ * A label that looks the same as the web base/label.
9
+ * RN has no equivalent of the web's `htmlFor`, so tapping the label does not move focus to the input.
10
10
  */
11
11
  function Label({ children, required, helpText, className, id }) {
12
12
  return /* @__PURE__ */ jsxs(View, {
@@ -6,13 +6,13 @@ export type LinkProps = ComponentProps<typeof Link$1> & {
6
6
  children: ReactNode;
7
7
  };
8
8
  /**
9
- * expo-router の `Link` にスタイルを当てたもの。`@lt-three/web` の atom/link
10
- * (TanStack Router の `Link` をラップ)に対応する。`href` の型はルーター側のものを保つ。
9
+ * A styled expo-router `Link`. Mirrors the web atom/link
10
+ * (which wraps TanStack Router's `Link`). The `href` type stays the router's own.
11
11
  *
12
- * 文字色は `text-foreground`(移植元は色を持たず、親が色を渡さないとダークで黒のまま背景に沈む)。className で上書きできる。
12
+ * The text color is `text-foreground` (without a color of its own, the link would stay black on a dark background unless the parent passed one). It can be overridden via className.
13
13
  *
14
- * expo-router のナビゲーションツリーの中でしか描画できないため、実機では story を持たない
15
- * (`base/` を Storybook から外しているのと同じ理由)。preview・vitest は `<a href>` の差し替え(`web/expo-router.tsx`)で描く。
14
+ * It can only render inside an expo-router navigation tree, so it has no story on a device
15
+ * (the same reason `base/` is excluded from Storybook). Previews and vitest render it by substituting `<a href>` (`web/expo-router.tsx`).
16
16
  */
17
17
  export declare function Link({ disabled, className, children, ...props }: LinkProps): import("react").JSX.Element;
18
18
  //#endregion
@@ -4,13 +4,13 @@ import { Link as Link$1 } from "expo-router";
4
4
 
5
5
  //#region src/native/atom/link.tsx
6
6
  /**
7
- * expo-router の `Link` にスタイルを当てたもの。`@lt-three/web` の atom/link
8
- * (TanStack Router の `Link` をラップ)に対応する。`href` の型はルーター側のものを保つ。
7
+ * A styled expo-router `Link`. Mirrors the web atom/link
8
+ * (which wraps TanStack Router's `Link`). The `href` type stays the router's own.
9
9
  *
10
- * 文字色は `text-foreground`(移植元は色を持たず、親が色を渡さないとダークで黒のまま背景に沈む)。className で上書きできる。
10
+ * The text color is `text-foreground` (without a color of its own, the link would stay black on a dark background unless the parent passed one). It can be overridden via className.
11
11
  *
12
- * expo-router のナビゲーションツリーの中でしか描画できないため、実機では story を持たない
13
- * (`base/` を Storybook から外しているのと同じ理由)。preview・vitest は `<a href>` の差し替え(`web/expo-router.tsx`)で描く。
12
+ * It can only render inside an expo-router navigation tree, so it has no story on a device
13
+ * (the same reason `base/` is excluded from Storybook). Previews and vitest render it by substituting `<a href>` (`web/expo-router.tsx`).
14
14
  */
15
15
  function Link({ disabled, className, children, ...props }) {
16
16
  return /* @__PURE__ */ jsx(Link$1, {
@@ -1,22 +1,22 @@
1
1
  //#region src/native/atom/readout.d.ts
2
2
  export type ReadoutProps = {
3
- /** オールキャップスのメトリクス名(例: NET PROFIT)。 */
3
+ /** Metric name in all caps (e.g. NET PROFIT). */
4
4
  label: string;
5
5
  value: string;
6
6
  /**
7
- * 数値の色。損益の gain/loss のように**テーマ非依存で意味が固定された色**を
8
- * 呼び出し側が渡す用途に限る。未指定なら `text-foreground`。
7
+ * The value color. Reserved for callers passing a **theme-independent color with a fixed meaning**,
8
+ * such as gain/loss. Defaults to `text-foreground`.
9
9
  */
10
10
  valueColor?: string;
11
11
  sub?: string;
12
- /** 大型(詳細ヘッダ用)か通常か。 */
12
+ /** Large (for detail headers) or regular. */
13
13
  size?: "md" | "lg";
14
14
  className?: string;
15
15
  };
16
16
  /**
17
- * 計器的な読み取り値。`@lt-three/web` の MetricCard の内側に揃えた
18
- * 「オールキャップスのミュートラベル + 大型の太字数値 + 補助テキスト」の 3 段構成。
19
- * 数値は等幅(Geist Mono + タブラー)にして桁を揃える。
17
+ * An instrument-style readout, matching the inside of the web MetricCard:
18
+ * three tiers of an all-caps muted label, a large bold number and secondary text.
19
+ * The number is monospaced (Geist Mono + tabular) so the digits line up.
20
20
  */
21
21
  export declare function Readout({ label, value, valueColor, sub, size, className }: ReadoutProps): import("react").JSX.Element;
22
22
  //#endregion
@@ -6,9 +6,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/native/atom/readout.tsx
8
8
  /**
9
- * 計器的な読み取り値。`@lt-three/web` の MetricCard の内側に揃えた
10
- * 「オールキャップスのミュートラベル + 大型の太字数値 + 補助テキスト」の 3 段構成。
11
- * 数値は等幅(Geist Mono + タブラー)にして桁を揃える。
9
+ * An instrument-style readout, matching the inside of the web MetricCard:
10
+ * three tiers of an all-caps muted label, a large bold number and secondary text.
11
+ * The number is monospaced (Geist Mono + tabular) so the digits line up.
12
12
  */
13
13
  function Readout({ label, value, valueColor, sub, size = "md", className }) {
14
14
  return /* @__PURE__ */ jsxs(View, {
@@ -5,8 +5,8 @@ export type SearchInputProps = {
5
5
  placeholder: string;
6
6
  };
7
7
  /**
8
- * 検索入力。`@lt-three/web` の SearchInput に合わせ、control 角丸・ソフトな面・
9
- * 先頭の検索アイコンという同じ構成にする(Liquid Glass のカプセルは使わない)。
8
+ * A search input. Matches the web SearchInput with the same structure: control corner radius, a soft surface,
9
+ * and a leading search icon (no Liquid Glass capsule).
10
10
  */
11
11
  export declare function SearchInput({ value, onChangeText, placeholder }: SearchInputProps): import("react").JSX.Element;
12
12
  //#endregion
@@ -5,8 +5,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/atom/search-input.tsx
7
7
  /**
8
- * 検索入力。`@lt-three/web` の SearchInput に合わせ、control 角丸・ソフトな面・
9
- * 先頭の検索アイコンという同じ構成にする(Liquid Glass のカプセルは使わない)。
8
+ * A search input. Matches the web SearchInput with the same structure: control corner radius, a soft surface,
9
+ * and a leading search icon (no Liquid Glass capsule).
10
10
  */
11
11
  function SearchInput({ value, onChangeText, placeholder }) {
12
12
  const mutedInk = useTokenColor("--ink-500");
@@ -19,36 +19,36 @@ export type SelectProps = ControlA11yProps & {
19
19
  description?: ReactNode;
20
20
  helpText?: ReactNode;
21
21
  disabled?: boolean;
22
- /** エラー。トリガーの罫線が destructive になり、`aria-invalid` が付く(フォームの中では `FormControl` が渡す `aria-invalid` でも同じ)。 */
22
+ /** Error state. The trigger's border becomes destructive and `aria-invalid` is set (inside a form, the `aria-invalid` passed by `FormControl` has the same effect). */
23
23
  invalid?: boolean;
24
24
  size?: "xs" | "sm" | "default";
25
- /** 開閉の制御(省略時は内部状態)。 */
25
+ /** Controls open/closed (internal state when omitted). */
26
26
  open?: boolean;
27
27
  onOpenChange?: (open: boolean) => void;
28
- /** ピッカーの見出し(省略時は `label`、無ければ `placeholder`)。ダイアログの名前になる。 */
28
+ /** The picker heading (falls back to `label`, then `placeholder`). It becomes the dialog's name. */
29
29
  sheetTitle?: ReactNode;
30
- /** ピッカーの閉じるボタンの読み上げ名(既定は「閉じる」)。 */
30
+ /** Screen reader name of the picker's close button (the default is the Japanese "close" label). */
31
31
  closeLabel?: string;
32
32
  /**
33
- * トリガーの名前(可視のラベルが無いとき。`label` が文字列ならそれが既定)。読み上げは「名前、現在の値」になる
34
- * (トリガーは押すとシートが開くボタンなので、値も名前に含めて読ませる)。
33
+ * The trigger's name (when there is no visible label; a string `label` is the default). It is read as "name, current value"
34
+ * (the trigger is a button that opens a sheet, so the value is included in the name).
35
35
  */
36
36
  accessibilityLabel?: string;
37
- /** form 側でエラーを差し込むためのスロット。 */
37
+ /** Slot for the form to insert an error. */
38
38
  errorSlot?: ReactNode;
39
39
  className?: string;
40
40
  wrapperClassName?: string;
41
41
  };
42
42
  /**
43
- * 制御専用の Select。`@lt-three/web` の atom/select と同じ API(フラット / グループのオプション、
44
- * ラベル・説明・エラースロット・`open` / `onOpenChange`)を持つ。検索は web にも移植元にも無い。
43
+ * A controlled-only Select. It has the same API as the web atom/select (flat / grouped options,
44
+ * label, description, error slot, `open` / `onOpenChange`). There is no search, just like on the web.
45
45
  *
46
- * web は Radix のポップオーバーだが、native は下から出るシート(`Modal`)で選ばせる。
47
- * トリガーの見た目は web の入力枠(control 角丸・1px の line-strong 枠・raised 面)に揃えてある。
46
+ * The web uses a Radix popover, but native lets the user choose in a bottom sheet (`Modal`).
47
+ * The trigger looks the same as the web input frame (control corner radius, 1px line-strong border, raised surface).
48
48
  *
49
- * アクセシビリティ: トリガーは `button`(`aria-expanded`)で、web の `combobox` ではない(押すと**ダイアログ**が開くため)。
50
- * 名前は「ラベル 現在の値」。シートはダイアログで、見出し(`sheetTitle`)が名前。選択肢は `radiogroup` の `radio`
51
- * (`aria-checked`。グループは見出しで名前を付けた radiogroup)。
49
+ * Accessibility: the trigger is a `button` (`aria-expanded`), not the web's `combobox` (pressing it opens a **dialog**).
50
+ * Its name is "label, current value". The sheet is a dialog whose name is the heading (`sheetTitle`). The options are `radio`s in a `radiogroup`
51
+ * (`aria-checked`; each group is a radiogroup named by its heading).
52
52
  */
53
53
  export declare function Select({ value, onValueChange, options, placeholder, label, required, description, helpText, disabled, invalid, size, open, onOpenChange, sheetTitle, closeLabel, accessibilityLabel, errorSlot, className, wrapperClassName, id, accessibilityHint, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }: SelectProps): import("react").JSX.Element;
54
54
  //#endregion
@@ -22,7 +22,7 @@ function isOptionGroup(option) {
22
22
  function flatten(options) {
23
23
  return options.flatMap((option) => isOptionGroup(option) ? option.options : [option]);
24
24
  }
25
- /** グループでない選択肢の連続を 1 つの塊にする(それぞれを 1 つの radiogroup にするため)。 */
25
+ /** Groups consecutive non-group options into one segment (so that each becomes a single radiogroup). */
26
26
  function toSegments(options) {
27
27
  const segments = [];
28
28
  for (const option of options) {
@@ -43,15 +43,15 @@ function toSegments(options) {
43
43
  return segments;
44
44
  }
45
45
  /**
46
- * 制御専用の Select。`@lt-three/web` の atom/select と同じ API(フラット / グループのオプション、
47
- * ラベル・説明・エラースロット・`open` / `onOpenChange`)を持つ。検索は web にも移植元にも無い。
46
+ * A controlled-only Select. It has the same API as the web atom/select (flat / grouped options,
47
+ * label, description, error slot, `open` / `onOpenChange`). There is no search, just like on the web.
48
48
  *
49
- * web は Radix のポップオーバーだが、native は下から出るシート(`Modal`)で選ばせる。
50
- * トリガーの見た目は web の入力枠(control 角丸・1px の line-strong 枠・raised 面)に揃えてある。
49
+ * The web uses a Radix popover, but native lets the user choose in a bottom sheet (`Modal`).
50
+ * The trigger looks the same as the web input frame (control corner radius, 1px line-strong border, raised surface).
51
51
  *
52
- * アクセシビリティ: トリガーは `button`(`aria-expanded`)で、web の `combobox` ではない(押すと**ダイアログ**が開くため)。
53
- * 名前は「ラベル 現在の値」。シートはダイアログで、見出し(`sheetTitle`)が名前。選択肢は `radiogroup` の `radio`
54
- * (`aria-checked`。グループは見出しで名前を付けた radiogroup)。
52
+ * Accessibility: the trigger is a `button` (`aria-expanded`), not the web's `combobox` (pressing it opens a **dialog**).
53
+ * Its name is "label, current value". The sheet is a dialog whose name is the heading (`sheetTitle`). The options are `radio`s in a `radiogroup`
54
+ * (`aria-checked`; each group is a radiogroup named by its heading).
55
55
  */
56
56
  function Select({ value, onValueChange, options, placeholder, label, required, description, helpText, disabled, invalid, size = "default", open, onOpenChange, sheetTitle, closeLabel, accessibilityLabel, errorSlot, className, wrapperClassName, id, accessibilityHint, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }) {
57
57
  const [internalOpen, setInternalOpen] = useState(false);
@@ -4,10 +4,9 @@ export type SeparatorProps = {
4
4
  className?: string;
5
5
  };
6
6
  /**
7
- * 1px の区切り線。`@lt-three/web` の base/separator と同じ役割。
7
+ * A 1px divider line. Same role as the web base/separator.
8
8
  *
9
- * 色は `bg-border` ではなく `bg-line` を使う(`--border` は畳み込みでダークに追従しないことがある。
10
- * `.claude/rules/packages/ts/index.md` 参照)。
9
+ * Use `bg-line` rather than `bg-border` for the color (`--border` can fail to follow dark mode after its value is folded).
11
10
  */
12
11
  export declare function Separator({ orientation, className }: SeparatorProps): import("react").JSX.Element;
13
12
  //#endregion
@@ -4,10 +4,9 @@ import { jsx } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/native/atom/separator.tsx
6
6
  /**
7
- * 1px の区切り線。`@lt-three/web` の base/separator と同じ役割。
7
+ * A 1px divider line. Same role as the web base/separator.
8
8
  *
9
- * 色は `bg-border` ではなく `bg-line` を使う(`--border` は畳み込みでダークに追従しないことがある。
10
- * `.claude/rules/packages/ts/index.md` 参照)。
9
+ * Use `bg-line` rather than `bg-border` for the color (`--border` can fail to follow dark mode after its value is folded).
11
10
  */
12
11
  function Separator({ orientation = "horizontal", className }) {
13
12
  return /* @__PURE__ */ jsx(View, { className: cn("bg-line shrink-0", orientation === "horizontal" ? "h-px w-full" : "h-full w-px", className) });
@@ -3,10 +3,10 @@ export type SkeletonProps = {
3
3
  className?: string;
4
4
  };
5
5
  /**
6
- * 読み込み中のプレースホルダ。`@lt-three/web` の base/skeleton と同じ薄い面 + 明滅。
6
+ * A loading placeholder. The same pale surface + pulse as the web base/skeleton.
7
7
  *
8
- * web は `animate-pulse`(CSS アニメーション)だが、native は CSS アニメーションの対応状況に
9
- * 依存させたくないので `Animated` で同じ 2 秒周期の明滅を作る。
8
+ * The web uses `animate-pulse` (a CSS animation), but native should not depend on
9
+ * CSS animation support, so `Animated` produces the same 2-second pulse.
10
10
  */
11
11
  export declare function Skeleton({ className }: SkeletonProps): import("react").JSX.Element;
12
12
  //#endregion
@@ -5,10 +5,10 @@ import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/atom/skeleton.tsx
7
7
  /**
8
- * 読み込み中のプレースホルダ。`@lt-three/web` の base/skeleton と同じ薄い面 + 明滅。
8
+ * A loading placeholder. The same pale surface + pulse as the web base/skeleton.
9
9
  *
10
- * web は `animate-pulse`(CSS アニメーション)だが、native は CSS アニメーションの対応状況に
11
- * 依存させたくないので `Animated` で同じ 2 秒周期の明滅を作る。
10
+ * The web uses `animate-pulse` (a CSS animation), but native should not depend on
11
+ * CSS animation support, so `Animated` produces the same 2-second pulse.
12
12
  */
13
13
  function Skeleton({ className }) {
14
14
  const opacity = useRef(new Animated.Value(1)).current;
@@ -12,21 +12,21 @@ export type SliderProps = NamedControlA11yProps & {
12
12
  description?: ReactNode;
13
13
  helpText?: ReactNode;
14
14
  disabled?: boolean;
15
- /** 値の右側に表示する整形済み文字列。省略時は生の数値。 */
15
+ /** Formatted string shown to the right of the value. Defaults to the raw number. */
16
16
  formattedValue?: string;
17
- /** 読み上げ名。`label` が文字列ならそれを使うので、文字列でないときだけ渡す。 */
17
+ /** Name for screen readers. A string `label` is used as-is, so pass this only when `label` is not a string. */
18
18
  accessibilityLabel?: string;
19
19
  className?: string;
20
- /** ラベルの文字のクラス(フォームがエラーのとき destructive にする)。 */
20
+ /** Class for the label text (made destructive when the form has an error). */
21
21
  labelClassName?: string;
22
22
  wrapperClassName?: string;
23
23
  errorSlot?: ReactNode;
24
24
  };
25
25
  /**
26
- * 制御専用の Slider。`@lt-three/web` の atom/slider と同じ「ラベル行 + 右端に現在値」の構成。
26
+ * A controlled-only Slider. Same layout as the web atom/slider: a label row with the current value at the right end.
27
27
  *
28
- * web は Radix の内部表現に合わせて範囲(`number[]`)も取れるが、
29
- * `@react-native-community/slider` は単一つまみのみなので native は単一値だけを扱う。
28
+ * The web also accepts a range (`number[]`) to match Radix's internal representation,
29
+ * but `@react-native-community/slider` has a single thumb only, so native handles a single value only.
30
30
  */
31
31
  export declare function Slider({ value, onValueChange, min, max, step, label, required, description, helpText, disabled, formattedValue, accessibilityLabel, accessibilityHint, className, labelClassName, wrapperClassName, errorSlot, id, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }: SliderProps): import("react").JSX.Element;
32
32
  //#endregion
@@ -9,10 +9,10 @@ import SliderPrimitive from "@react-native-community/slider";
9
9
 
10
10
  //#region src/native/atom/slider.tsx
11
11
  /**
12
- * 制御専用の Slider。`@lt-three/web` の atom/slider と同じ「ラベル行 + 右端に現在値」の構成。
12
+ * A controlled-only Slider. Same layout as the web atom/slider: a label row with the current value at the right end.
13
13
  *
14
- * web は Radix の内部表現に合わせて範囲(`number[]`)も取れるが、
15
- * `@react-native-community/slider` は単一つまみのみなので native は単一値だけを扱う。
14
+ * The web also accepts a range (`number[]`) to match Radix's internal representation,
15
+ * but `@react-native-community/slider` has a single thumb only, so native handles a single value only.
16
16
  */
17
17
  function Slider({ value, onValueChange, min = 0, max, step, label, required, description, helpText, disabled, formattedValue, accessibilityLabel, accessibilityHint, className, labelClassName, wrapperClassName, errorSlot, id, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }) {
18
18
  const action = useTokenColor("--action");
@@ -1,15 +1,15 @@
1
1
  //#region src/native/atom/spinner.d.ts
2
2
  export type SpinnerProps = {
3
- /** 親いっぱいに広げて中央寄せする。 */
3
+ /** Fills the parent and centers the spinner. */
4
4
  full?: boolean;
5
5
  size?: "small" | "large";
6
- /** 読み上げ名。既定は「読み込み中」。 */
6
+ /** Name for screen readers. Defaults to the "loading" label. */
7
7
  label?: string;
8
8
  className?: string;
9
9
  };
10
10
  /**
11
- * 読み込みインジケータ。`@lt-three/web` の atom/spinner と同じ `full` の振る舞いを持つ。
12
- * 見た目は OS 標準のスピナー(web の lucide の回転アイコンに対応する native の作法)。
11
+ * Loading indicator. Its `full` behavior is the same as the web atom/spinner.
12
+ * It looks like the OS-standard spinner (the native counterpart of the web's rotating lucide icon).
13
13
  */
14
14
  export declare function Spinner({ full, size, label, className }: SpinnerProps): import("react").JSX.Element;
15
15
  //#endregion
@@ -6,8 +6,8 @@ import { jsx } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/native/atom/spinner.tsx
8
8
  /**
9
- * 読み込みインジケータ。`@lt-three/web` の atom/spinner と同じ `full` の振る舞いを持つ。
10
- * 見た目は OS 標準のスピナー(web の lucide の回転アイコンに対応する native の作法)。
9
+ * Loading indicator. Its `full` behavior is the same as the web atom/spinner.
10
+ * It looks like the OS-standard spinner (the native counterpart of the web's rotating lucide icon).
11
11
  */
12
12
  function Spinner({ full, size = "small", label = LOADING_LABEL, className }) {
13
13
  const ink = useTokenColor("--ink-1000");
@@ -4,15 +4,15 @@ export type SwitchProps = ControlA11yProps & {
4
4
  checked: boolean;
5
5
  onCheckedChange: (checked: boolean) => void;
6
6
  disabled?: boolean;
7
- /** 読み上げ用の名前。スイッチ単体には文字が無いので、隣にラベルを置く使い方では必ず渡す。 */
7
+ /** Name for screen readers. The switch itself has no text, so always pass it when a label is placed next to it. */
8
8
  accessibilityLabel?: string;
9
9
  className?: string;
10
10
  };
11
11
  /**
12
- * `@lt-three/web` の base/switch と同じ丸いスイッチ(on はインディゴ塗り、off は wash 面 + line-control の枠)。
12
+ * A round switch identical to the web base/switch (on is filled indigo, off is a wash surface with a line-control border).
13
13
  *
14
- * OS 標準のスイッチが要る場合は `base/` の `@expo/ui` 側を使う。ここは
15
- * 「web と同じ見た目を優先する」方針に沿った RN 実装。
14
+ * When the OS-standard switch is needed, use the `@expo/ui` one in `base/`. This is
15
+ * an RN implementation that prioritizes looking the same as the web.
16
16
  */
17
17
  export declare function Switch({ checked, onCheckedChange, disabled, accessibilityLabel, accessibilityHint, className, id, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }: SwitchProps): import("react").JSX.Element;
18
18
  //#endregion
@@ -8,10 +8,10 @@ import { jsx } from "react/jsx-runtime";
8
8
  const TRACK_PADDING = 1;
9
9
  const KNOB_TRAVEL = 19;
10
10
  /**
11
- * `@lt-three/web` の base/switch と同じ丸いスイッチ(on はインディゴ塗り、off は wash 面 + line-control の枠)。
11
+ * A round switch identical to the web base/switch (on is filled indigo, off is a wash surface with a line-control border).
12
12
  *
13
- * OS 標準のスイッチが要る場合は `base/` の `@expo/ui` 側を使う。ここは
14
- * 「web と同じ見た目を優先する」方針に沿った RN 実装。
13
+ * When the OS-standard switch is needed, use the `@expo/ui` one in `base/`. This is
14
+ * an RN implementation that prioritizes looking the same as the web.
15
15
  */
16
16
  function Switch({ checked, onCheckedChange, disabled, accessibilityLabel, accessibilityHint, className, id, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }) {
17
17
  const progress = useRef(new Animated.Value(checked ? 1 : 0)).current;
@@ -1,15 +1,15 @@
1
1
  import { SymbolProps } from "./symbol.types.js";
2
2
  //#region src/native/atom/symbol.d.ts
3
3
  /**
4
- * アイコン。iOS は SF Symbols、Android は Material Symbols で描く。
4
+ * An icon. Drawn with SF Symbols on iOS and Material Symbols on Android.
5
5
  *
6
- * **`SymbolView` に SF 名を文字列で渡すと Android では何も描かれない。**
7
- * 例外も警告も出ないのでアイコンだけが無言で消える(実際に Android では検索欄の虫眼鏡・
8
- * 設定の歯車・行の `>`・空状態のアイコンが全部消えていた)。`{ ios, android }` の形で
9
- * 渡したときだけ Android 実装が動くので、**アプリからは必ずこのコンポーネントを使う**。
6
+ * **Passing an SF name to `SymbolView` as a string draws nothing on Android.**
7
+ * No exception or warning is raised, so the icon silently disappears (for example the search magnifier,
8
+ * the settings gear, a row's `>` and empty-state icons all vanish). The Android implementation
9
+ * only runs when the name is passed as `{ ios, android }`, so **apps must always use this component**.
10
10
  *
11
- * 読み替え表は `symbol.types.ts`。表に無い SF 名は Android で描かれないため、
12
- * `fallback` に薄い丸を出して「アイコンがあるべき場所」を残す(詰めた見た目にしない)。
11
+ * The mapping table is in `symbol.types.ts`. SF names missing from the table are not drawn on Android,
12
+ * so `fallback` renders an empty box of the icon's size to keep the space where the icon should be (the layout does not collapse).
13
13
  */
14
14
  export declare function Symbol({ name, size, tintColor, accessibilityLabel, className, style }: SymbolProps): import("react").JSX.Element;
15
15
  //#endregion
@@ -5,15 +5,15 @@ import { SymbolView } from "expo-symbols";
5
5
 
6
6
  //#region src/native/atom/symbol.tsx
7
7
  /**
8
- * アイコン。iOS は SF Symbols、Android は Material Symbols で描く。
8
+ * An icon. Drawn with SF Symbols on iOS and Material Symbols on Android.
9
9
  *
10
- * **`SymbolView` に SF 名を文字列で渡すと Android では何も描かれない。**
11
- * 例外も警告も出ないのでアイコンだけが無言で消える(実際に Android では検索欄の虫眼鏡・
12
- * 設定の歯車・行の `>`・空状態のアイコンが全部消えていた)。`{ ios, android }` の形で
13
- * 渡したときだけ Android 実装が動くので、**アプリからは必ずこのコンポーネントを使う**。
10
+ * **Passing an SF name to `SymbolView` as a string draws nothing on Android.**
11
+ * No exception or warning is raised, so the icon silently disappears (for example the search magnifier,
12
+ * the settings gear, a row's `>` and empty-state icons all vanish). The Android implementation
13
+ * only runs when the name is passed as `{ ios, android }`, so **apps must always use this component**.
14
14
  *
15
- * 読み替え表は `symbol.types.ts`。表に無い SF 名は Android で描かれないため、
16
- * `fallback` に薄い丸を出して「アイコンがあるべき場所」を残す(詰めた見た目にしない)。
15
+ * The mapping table is in `symbol.types.ts`. SF names missing from the table are not drawn on Android,
16
+ * so `fallback` renders an empty box of the icon's size to keep the space where the icon should be (the layout does not collapse).
17
17
  */
18
18
  function Symbol({ name, size = 20, tintColor, accessibilityLabel, className, style }) {
19
19
  const android = SF_TO_ANDROID[name];
@@ -2,7 +2,7 @@ import { StyleProp, ViewStyle } from "react-native";
2
2
  import { AndroidSymbol, SFSymbol } from "expo-symbols";
3
3
  //#region src/native/atom/symbol.types.d.ts
4
4
  export type SymbolProps = {
5
- /** SF Symbol の名前。Android は `SF_TO_ANDROID` で Material Symbols に読み替える。 */
5
+ /** The SF Symbol name. On Android it is mapped to Material Symbols via `SF_TO_ANDROID`. */
6
6
  name: SFSymbol;
7
7
  size?: number;
8
8
  tintColor?: string;
@@ -11,15 +11,15 @@ export type SymbolProps = {
11
11
  style?: StyleProp<ViewStyle>;
12
12
  };
13
13
  /**
14
- * SF Symbol → Material Symbols(Android)の読み替え表。
14
+ * Mapping table from SF Symbol to Material Symbols (Android).
15
15
  *
16
- * **`SymbolView` は `name` を文字列で渡すと Android では何も描かない。**
17
- * `{ ios, android }` の形で渡したときだけ Android 実装(Material Symbols のフォント)が動く。
18
- * 実際、アプリ全体が SF 名の文字列を渡していたため、Android では検索欄の虫眼鏡・設定の歯車・
19
- * 行の `>`・空状態のアイコンが**例外も警告も無く全部消えていた**。
16
+ * **`SymbolView` draws nothing on Android when `name` is passed as a string.**
17
+ * The Android implementation (the Material Symbols font) only runs when `name` is passed as `{ ios, android }`.
18
+ * Passing SF names as plain strings makes icons such as the search magnifier, the settings gear,
19
+ * a row's `>` and empty-state icons **disappear on Android without any exception or warning**.
20
20
  *
21
- * **fill の有無を潰さない。** SF は `circle` / `circle.fill` の差だけで選択状態や
22
- * チェック済みを表している箇所があるので、Android 側も別のアイコンに割り当てる。
21
+ * **Do not collapse the fill distinction.** SF sometimes expresses selected or
22
+ * checked state only through `circle` vs `circle.fill`, so the Android side maps them to different icons.
23
23
  */
24
24
  export declare const SF_TO_ANDROID: Record<string, AndroidSymbol>;
25
25
  //#endregion
@@ -1,14 +1,14 @@
1
1
  //#region src/native/atom/symbol.types.ts
2
2
  /**
3
- * SF Symbol → Material Symbols(Android)の読み替え表。
3
+ * Mapping table from SF Symbol to Material Symbols (Android).
4
4
  *
5
- * **`SymbolView` は `name` を文字列で渡すと Android では何も描かない。**
6
- * `{ ios, android }` の形で渡したときだけ Android 実装(Material Symbols のフォント)が動く。
7
- * 実際、アプリ全体が SF 名の文字列を渡していたため、Android では検索欄の虫眼鏡・設定の歯車・
8
- * 行の `>`・空状態のアイコンが**例外も警告も無く全部消えていた**。
5
+ * **`SymbolView` draws nothing on Android when `name` is passed as a string.**
6
+ * The Android implementation (the Material Symbols font) only runs when `name` is passed as `{ ios, android }`.
7
+ * Passing SF names as plain strings makes icons such as the search magnifier, the settings gear,
8
+ * a row's `>` and empty-state icons **disappear on Android without any exception or warning**.
9
9
  *
10
- * **fill の有無を潰さない。** SF は `circle` / `circle.fill` の差だけで選択状態や
11
- * チェック済みを表している箇所があるので、Android 側も別のアイコンに割り当てる。
10
+ * **Do not collapse the fill distinction.** SF sometimes expresses selected or
11
+ * checked state only through `circle` vs `circle.fill`, so the Android side maps them to different icons.
12
12
  */
13
13
  const SF_TO_ANDROID = {
14
14
  archivebox: "archive",