@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
@@ -7,10 +7,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
8
  //#region src/native/layout/information.tsx
9
9
  /**
10
- * ラベルと値を並べる定義リスト。`@lt-three/web` の layout/information に対応する。
10
+ * A definition list that lays out labels and values. Corresponds to the web `layout/information`.
11
11
  *
12
- * web は画面が広いので複数カラムに分けられるが、native は幅が足りないので
13
- * **常に 1 カラム**(ラベル左・値右の行)で描く。
12
+ * Web has room to split into several columns, but native lacks the width, so it
13
+ * **always renders a single column** (rows with the label on the left and the value on the right).
14
14
  */
15
15
  function Information({ fields, highlighted, className }) {
16
16
  return /* @__PURE__ */ jsx(View, {
@@ -2,37 +2,37 @@ import { ReactNode } from "react";
2
2
  //#region src/native/layout/locked.d.ts
3
3
  export type LockedProps = {
4
4
  /**
5
- * ロックの向こう側にあるものの形。**読ませない前提の見本**を渡す。
6
- * 実データを渡してはいけない(覆いは表現であって遮蔽ではない)。
5
+ * The shape of what lies behind the lock. Pass a **sample that is not meant to be read**.
6
+ * Never pass real data (the cover is a visual treatment, not a barrier).
7
7
  */
8
8
  children: ReactNode;
9
- /** 面に重ねる短い説明。例:「Pro で見られます」。 */
9
+ /** Short text overlaid on the surface. Example: "Available with Pro". */
10
10
  label: string;
11
- /** 見本であることの断り書き。例:「見本」。省略すると出さない。 */
11
+ /** Note stating that the content is a sample. Example: "Sample". Not shown when omitted. */
12
12
  sampleLabel?: string;
13
- /** 面全体を押せるようにする。鍵は押したくなるので、基本は渡す。 */
13
+ /** Makes the whole surface pressable. A lock invites pressing, so pass this in most cases. */
14
14
  onPress?: () => void;
15
15
  accessibilityLabel?: string;
16
16
  /**
17
- * 覆いの下に置く行き先(説明と出口のボタン)。**同じ面の中に入れる**ことで、
18
- * 「見えないもの」と「その開け方」が 1 枚に収まる。
17
+ * The destination placed under the cover (an explanation and an exit button). **Keeping it inside the same surface**
18
+ * puts "what you can't see" and "how to unlock it" on a single card.
19
19
  */
20
20
  footer?: ReactNode;
21
- /** 見本の高さ。既定 160。 */
21
+ /** Height of the sample. Defaults to 160. */
22
22
  height?: number;
23
23
  className?: string;
24
24
  };
25
25
  /**
26
- * ロックされた面。**中身の形は見せて、読めなくする。**
26
+ * A locked surface. **Shows the shape of the content but makes it unreadable.**
27
27
  *
28
- * 中身を丸ごと差し替えると「ロック」ではなく「不在」が伝わり、何が惜しいのか分からない。
29
- * 形だけ残して覆うことで、そこに何があるかを示したまま手が届かないことを表す。
28
+ * Replacing the content wholesale communicates "absence" rather than "locked", and it is unclear what is being missed.
29
+ * Keeping the shape and covering it shows what is there while conveying that it is out of reach.
30
30
  *
31
- * **読み込み中の Skeleton とは別物**として作ってある。Skeleton は「待てば出てくる」を
32
- * 意味するので、同じ見た目をロックに使ってはいけない(待っても出ないため)。
31
+ * It is built as **distinct from the loading Skeleton**. A Skeleton means "it will appear if you wait",
32
+ * so the same look must not be used for a lock (waiting will not reveal anything).
33
33
  *
34
- * 覆いは iOS 26 以上では `GlassView`(背後をぼかすガラス)、非対応環境(iOS 26 未満・Android・web)ではカード地で覆う。
35
- * **見本はダミーなので、覆いの強さに機密性の要件は無い**。表現として選んでよい。
34
+ * The cover is a `GlassView` (glass that blurs what is behind it) on iOS 26 and later, and a card-colored cover where that is unsupported (below iOS 26, Android, web).
35
+ * **The sample is a dummy, so the strength of the cover has no confidentiality requirement.** Choose it as a visual treatment.
36
36
  */
37
37
  export declare function Locked({ children, label, sampleLabel, onPress, accessibilityLabel, footer, height, className }: LockedProps): import("react").JSX.Element;
38
38
  //#endregion
@@ -20,16 +20,16 @@ const FILL = {
20
20
  padding: 16
21
21
  };
22
22
  /**
23
- * ロックされた面。**中身の形は見せて、読めなくする。**
23
+ * A locked surface. **Shows the shape of the content but makes it unreadable.**
24
24
  *
25
- * 中身を丸ごと差し替えると「ロック」ではなく「不在」が伝わり、何が惜しいのか分からない。
26
- * 形だけ残して覆うことで、そこに何があるかを示したまま手が届かないことを表す。
25
+ * Replacing the content wholesale communicates "absence" rather than "locked", and it is unclear what is being missed.
26
+ * Keeping the shape and covering it shows what is there while conveying that it is out of reach.
27
27
  *
28
- * **読み込み中の Skeleton とは別物**として作ってある。Skeleton は「待てば出てくる」を
29
- * 意味するので、同じ見た目をロックに使ってはいけない(待っても出ないため)。
28
+ * It is built as **distinct from the loading Skeleton**. A Skeleton means "it will appear if you wait",
29
+ * so the same look must not be used for a lock (waiting will not reveal anything).
30
30
  *
31
- * 覆いは iOS 26 以上では `GlassView`(背後をぼかすガラス)、非対応環境(iOS 26 未満・Android・web)ではカード地で覆う。
32
- * **見本はダミーなので、覆いの強さに機密性の要件は無い**。表現として選んでよい。
31
+ * The cover is a `GlassView` (glass that blurs what is behind it) on iOS 26 and later, and a card-colored cover where that is unsupported (below iOS 26, Android, web).
32
+ * **The sample is a dummy, so the strength of the cover has no confidentiality requirement.** Choose it as a visual treatment.
33
33
  */
34
34
  function Locked({ children, label, sampleLabel, onPress, accessibilityLabel, footer, height = 160, className }) {
35
35
  const ink = useTokenColor("--ink-900");
@@ -3,23 +3,23 @@ import { ReactNode } from "react";
3
3
  export type ModalProps = {
4
4
  open: boolean;
5
5
  onOpenChange: (open: boolean) => void;
6
- /** 見出し。ダイアログの名前になる。 */
6
+ /** Heading. Becomes the dialog's name. */
7
7
  title: ReactNode;
8
8
  description?: ReactNode;
9
9
  content: ReactNode;
10
10
  footer?: ReactNode;
11
- /** 背面タップで閉じるか(既定 false = 明示的に閉じさせる)。Esc・Android の戻る操作では、この設定にかかわらず閉じる。 */
11
+ /** Whether tapping the backdrop closes it (default false = require an explicit close). Esc and Android's back action close it regardless of this setting. */
12
12
  dismissOnBackdropPress?: boolean;
13
- /** 閉じるボタンの読み上げ名(既定は「閉じる」)。共有パッケージなので、別の言語はここで渡す。 */
13
+ /** Spoken name of the close button (default "閉じる", i.e. "Close"). This is a shared package, so pass other languages here. */
14
14
  closeLabel?: string;
15
15
  };
16
16
  /**
17
- * 画面中央に出る確認・編集用のダイアログ。`@lt-three/web` の layout/modal に対応する。
18
- * 外装は overlay 面(surface 角丸・shadow-lg。枠は付けない)で、本文だけがスクロールする。
17
+ * A confirmation/editing dialog shown at the center of the screen. Corresponds to the web `layout/modal`.
18
+ * The shell is an overlay surface (surface radius, shadow-lg; no border), and only the body scrolls.
19
19
  *
20
- * 見出しがダイアログの名前(`aria-labelledby`)、補足が説明(`aria-describedby`)になる。
21
- * 役割(`role="dialog"`・`aria-modal`)・フォーカスの閉じ込め・Esc は `Modal` が持つ。
22
- * web の `layout/modal` は `dialog`(`DialogController`)で開閉を受けるが、native は `open` / `onOpenChange`(移植元のまま)。
20
+ * The heading is the dialog's name (`aria-labelledby`), and the supplementary text is its description (`aria-describedby`).
21
+ * The role (`role="dialog"`, `aria-modal`), focus trapping, and Esc are handled by `Modal`.
22
+ * The web `layout/modal` takes open/close through `dialog` (`DialogController`), whereas native uses `open` / `onOpenChange`.
23
23
  */
24
24
  export declare function Modal({ open, onOpenChange, title, description, content, footer, dismissOnBackdropPress, closeLabel }: ModalProps): import("react").JSX.Element;
25
25
  //#endregion
@@ -8,12 +8,12 @@ import Feather from "@expo/vector-icons/Feather";
8
8
 
9
9
  //#region src/native/layout/modal.tsx
10
10
  /**
11
- * 画面中央に出る確認・編集用のダイアログ。`@lt-three/web` の layout/modal に対応する。
12
- * 外装は overlay 面(surface 角丸・shadow-lg。枠は付けない)で、本文だけがスクロールする。
11
+ * A confirmation/editing dialog shown at the center of the screen. Corresponds to the web `layout/modal`.
12
+ * The shell is an overlay surface (surface radius, shadow-lg; no border), and only the body scrolls.
13
13
  *
14
- * 見出しがダイアログの名前(`aria-labelledby`)、補足が説明(`aria-describedby`)になる。
15
- * 役割(`role="dialog"`・`aria-modal`)・フォーカスの閉じ込め・Esc は `Modal` が持つ。
16
- * web の `layout/modal` は `dialog`(`DialogController`)で開閉を受けるが、native は `open` / `onOpenChange`(移植元のまま)。
14
+ * The heading is the dialog's name (`aria-labelledby`), and the supplementary text is its description (`aria-describedby`).
15
+ * The role (`role="dialog"`, `aria-modal`), focus trapping, and Esc are handled by `Modal`.
16
+ * The web `layout/modal` takes open/close through `dialog` (`DialogController`), whereas native uses `open` / `onOpenChange`.
17
17
  */
18
18
  function Modal({ open, onOpenChange, title, description, content, footer, dismissOnBackdropPress = false, closeLabel = CLOSE_LABEL }) {
19
19
  const ink = useTokenColor("--ink-500");
@@ -1,6 +1,6 @@
1
1
  //#region src/native/layout/not-found.d.ts
2
2
  export type NotFoundProps = {
3
- /** 表示文言。共有パッケージなので使用側が持つ。 */
3
+ /** Display text. This is a shared package, so the caller owns it. */
4
4
  labels: {
5
5
  title: string;
6
6
  back: string;
@@ -8,10 +8,10 @@ export type NotFoundProps = {
8
8
  onBack: () => void;
9
9
  };
10
10
  /**
11
- * 見つからなかった画面。`@lt-three/web` の layout/not-found に対応する。
11
+ * The screen shown when something is not found.
12
12
  *
13
- * web は `action="previous-page"` で `history.back()` を呼ぶが、native の戻り先は
14
- * ナビゲーションスタックに依存するので、使用側から `onBack`(`router.back()` 等)を受け取る。
13
+ * Web calls `history.back()` with `action="previous-page"`, but native's back destination
14
+ * depends on the navigation stack, so it receives `onBack` (`router.back()`, etc.) from the caller.
15
15
  */
16
16
  export declare function NotFound({ labels, onBack }: NotFoundProps): import("react").JSX.Element;
17
17
  //#endregion
@@ -5,10 +5,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/layout/not-found.tsx
7
7
  /**
8
- * 見つからなかった画面。`@lt-three/web` の layout/not-found に対応する。
8
+ * The screen shown when something is not found.
9
9
  *
10
- * web は `action="previous-page"` で `history.back()` を呼ぶが、native の戻り先は
11
- * ナビゲーションスタックに依存するので、使用側から `onBack`(`router.back()` 等)を受け取る。
10
+ * Web calls `history.back()` with `action="previous-page"`, but native's back destination
11
+ * depends on the navigation stack, so it receives `onBack` (`router.back()`, etc.) from the caller.
12
12
  */
13
13
  function NotFound({ labels, onBack }) {
14
14
  return /* @__PURE__ */ jsxs(View, {
@@ -1,23 +1,23 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/native/layout/page-frame.d.ts
3
3
  export type PageFrameProps = {
4
- /** ヘッダの見出し(画面のタイトル。`role="heading"` `aria-level=1`)。 */
4
+ /** Header heading (the screen title; `role="heading"` `aria-level=1`). */
5
5
  title: string;
6
- /** ヘッダ右端(戻る・設定・ユーザーなどのボタン)。 */
6
+ /** Right end of the header (buttons such as back, settings, user). */
7
7
  trailing?: ReactNode;
8
8
  children: ReactNode;
9
- /** 本文の下のフッタ(著作権・リンクなど)。 */
9
+ /** Footer below the body (copyright, links, etc.). */
10
10
  footer?: ReactNode;
11
- /** 下に固定するナビ(`layout/tab-bar`)。本文はこの上でスクロールする。 */
11
+ /** Navigation pinned at the bottom (`layout/tab-bar`). The body scrolls above it. */
12
12
  nav?: ReactNode;
13
- /** 本文(スクロールする領域)の追加クラス。 */
13
+ /** Extra classes for the body (the scrolling area). */
14
14
  contentClassName?: string;
15
15
  className?: string;
16
16
  };
17
17
  /**
18
- * 画面の骨組み。`@lt-three/love3/web/layout/page-frame.tsx` に対応する(header・main・footer・nav)。
19
- * 上にヘッダ(banner)、真ん中にスクロールする本文(main)、その下にフッタ(contentinfo)、最下段にナビ(`TabBar`)。
20
- * 上端・下端の安全領域はアプリが持つ(外側の `SafeAreaView` か、`className` の `pt-*`)。
18
+ * The screen skeleton. Corresponds to `@lt-three/love3/web/layout/page-frame.tsx` (header, main, footer, nav).
19
+ * A header (banner) at the top, a scrolling body (main) in the middle, a footer (contentinfo) below it, and navigation (`TabBar`) at the very bottom.
20
+ * The top and bottom safe areas are the app's responsibility (an outer `SafeAreaView`, or `pt-*` in `className`).
21
21
  */
22
22
  export declare function PageFrame({ title, trailing, children, footer, nav, contentClassName, className }: PageFrameProps): import("react").JSX.Element;
23
23
  //#endregion
@@ -5,9 +5,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/layout/page-frame.tsx
7
7
  /**
8
- * 画面の骨組み。`@lt-three/love3/web/layout/page-frame.tsx` に対応する(header・main・footer・nav)。
9
- * 上にヘッダ(banner)、真ん中にスクロールする本文(main)、その下にフッタ(contentinfo)、最下段にナビ(`TabBar`)。
10
- * 上端・下端の安全領域はアプリが持つ(外側の `SafeAreaView` か、`className` の `pt-*`)。
8
+ * The screen skeleton. Corresponds to `@lt-three/love3/web/layout/page-frame.tsx` (header, main, footer, nav).
9
+ * A header (banner) at the top, a scrolling body (main) in the middle, a footer (contentinfo) below it, and navigation (`TabBar`) at the very bottom.
10
+ * The top and bottom safe areas are the app's responsibility (an outer `SafeAreaView`, or `pt-*` in `className`).
11
11
  */
12
12
  function PageFrame({ title, trailing, children, footer, nav, contentClassName, className }) {
13
13
  return /* @__PURE__ */ jsxs(View, {
@@ -7,12 +7,12 @@ export type PanelProps = {
7
7
  style?: ViewStyle;
8
8
  };
9
9
  /**
10
- * 内容面。`@lt-three/web` の Card と同じ外装(surface 角丸・1px の極薄の罫線・raised 面。影は付けない)。
11
- * 内側の余白は使用側が決める。
10
+ * A content surface. Same shell as the web Card (surface radius, a very faint 1px rule, raised surface; no shadow).
11
+ * The inner padding is up to the caller.
12
12
  *
13
- * 罫線は `border-border` ではなく `border-line` を使う。`--border` は
14
- * スタイルシート中で 1 度しか宣言されないため react-native-css がビルド時に
15
- * 単一値へ畳んでしまい、`.dark` で切り替わらなくなる(`.claude/rules/packages/ts/index.md` 参照)。
13
+ * The rule uses `border-line` rather than `border-border`. `--border` is declared only once
14
+ * in the stylesheet, so react-native-css folds it into a single value at build time
15
+ * and it no longer switches under `.dark`.
16
16
  */
17
17
  export declare function Panel({ children, className, style }: PanelProps): import("react").JSX.Element;
18
18
  //#endregion
@@ -4,12 +4,12 @@ import { jsx } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/native/layout/panel.tsx
6
6
  /**
7
- * 内容面。`@lt-three/web` の Card と同じ外装(surface 角丸・1px の極薄の罫線・raised 面。影は付けない)。
8
- * 内側の余白は使用側が決める。
7
+ * A content surface. Same shell as the web Card (surface radius, a very faint 1px rule, raised surface; no shadow).
8
+ * The inner padding is up to the caller.
9
9
  *
10
- * 罫線は `border-border` ではなく `border-line` を使う。`--border` は
11
- * スタイルシート中で 1 度しか宣言されないため react-native-css がビルド時に
12
- * 単一値へ畳んでしまい、`.dark` で切り替わらなくなる(`.claude/rules/packages/ts/index.md` 参照)。
10
+ * The rule uses `border-line` rather than `border-border`. `--border` is declared only once
11
+ * in the stylesheet, so react-native-css folds it into a single value at build time
12
+ * and it no longer switches under `.dark`.
13
13
  */
14
14
  function Panel({ children, className, style }) {
15
15
  return /* @__PURE__ */ jsx(View, {
@@ -4,21 +4,21 @@ export type ReorderableRenderInfo<T> = {
4
4
  item: T;
5
5
  index: number;
6
6
  /**
7
- * 掴んでドラッグを始める。**行自身の `Pressable` の `onLongPress` に渡すこと。**
8
- * ラッパーの `Pressable` に付けると、行の内側の `Pressable`(タップで詳細を開く等)が
9
- * レスポンダを取ってしまい、長押しが外側まで来ない = ドラッグが始まらない。
7
+ * Grabs the row and starts dragging. **Pass it to the row's own `Pressable` `onLongPress`.**
8
+ * If attached to a wrapper `Pressable`, a `Pressable` inside the row (one that opens details on tap, etc.)
9
+ * takes the responder and the long press never reaches the outer one, so dragging does not start.
10
10
  */
11
11
  drag: () => void;
12
- /** その行がいま掴まれているか。掴んだ行は見た目を明確に変えること。 */
12
+ /** Whether the row is currently grabbed. Make the grabbed row look clearly different. */
13
13
  active: boolean;
14
14
  };
15
15
  export type ReorderableListProps<T> = {
16
16
  data: T[];
17
17
  keyExtractor: (item: T) => string;
18
18
  renderItem: (info: ReorderableRenderInfo<T>) => ReactNode;
19
- /** 並べ替え後の配列を返す。永続化は使用側が行う。 */
19
+ /** Receives the reordered array. Persistence is up to the caller. */
20
20
  onReorder: (next: T[]) => void;
21
- /** false のあいだはドラッグを受け付けない(絞り込み中など)。 */
21
+ /** While false, dragging is not accepted (for example while filtering). */
22
22
  dragEnabled?: boolean;
23
23
  ListHeaderComponent?: ReactElement | null;
24
24
  ListFooterComponent?: ReactElement | null;
@@ -26,17 +26,17 @@ export type ReorderableListProps<T> = {
26
26
  contentContainerClassName?: string;
27
27
  };
28
28
  /**
29
- * 長押しで掴んで並べ替えるリスト。**iOS / Android の同じ実装で動く**。
29
+ * A list reordered by long-press and drag. **Runs on the same implementation for iOS and Android.**
30
30
  *
31
- * SwiftUI の `List.ForEach onMove` は iOS でしか使えず、放っておくと
32
- * 「Android だけ並べ替えできない」が生まれる。ここは Reanimated + Gesture Handler の
33
- * `react-native-reorderable-list` に寄せて、プラットフォームで実装を分けない。
31
+ * SwiftUI's `List.ForEach onMove` works only on iOS, which would leave
32
+ * "reordering works everywhere except Android". This builds on Reanimated + Gesture Handler's
33
+ * `react-native-reorderable-list` so the implementation does not split by platform.
34
34
  *
35
- * **アプリの root に `GestureHandlerRootView` が要る**(Android)。無くても例外は出ず、
36
- * ドラッグもスワイプも無言で効かなくなる。
35
+ * **A `GestureHandlerRootView` is required at the app's root** (Android). Without it no exception is thrown,
36
+ * and dragging and swiping silently stop working.
37
37
  *
38
- * 並べ替えの確定は `onReorder` の 1 回だけ。ドラッグ中は内部で表示だけ動かすので、
39
- * 途中経過で API を叩かない。
38
+ * The reorder is committed by a single `onReorder` call. During a drag only the display moves internally,
39
+ * so do not hit an API with intermediate states.
40
40
  */
41
41
  export declare function ReorderableList<T>({ data, keyExtractor, renderItem, onReorder, dragEnabled, ListHeaderComponent, ListFooterComponent, ListEmptyComponent, contentContainerClassName }: ReorderableListProps<T>): import("react").JSX.Element;
42
42
  //#endregion
@@ -3,17 +3,17 @@ import Reorderable, { reorderItems, useIsActive, useReorderableDrag } from "reac
3
3
 
4
4
  //#region src/native/layout/reorderable-list.tsx
5
5
  /**
6
- * 長押しで掴んで並べ替えるリスト。**iOS / Android の同じ実装で動く**。
6
+ * A list reordered by long-press and drag. **Runs on the same implementation for iOS and Android.**
7
7
  *
8
- * SwiftUI の `List.ForEach onMove` は iOS でしか使えず、放っておくと
9
- * 「Android だけ並べ替えできない」が生まれる。ここは Reanimated + Gesture Handler の
10
- * `react-native-reorderable-list` に寄せて、プラットフォームで実装を分けない。
8
+ * SwiftUI's `List.ForEach onMove` works only on iOS, which would leave
9
+ * "reordering works everywhere except Android". This builds on Reanimated + Gesture Handler's
10
+ * `react-native-reorderable-list` so the implementation does not split by platform.
11
11
  *
12
- * **アプリの root に `GestureHandlerRootView` が要る**(Android)。無くても例外は出ず、
13
- * ドラッグもスワイプも無言で効かなくなる。
12
+ * **A `GestureHandlerRootView` is required at the app's root** (Android). Without it no exception is thrown,
13
+ * and dragging and swiping silently stop working.
14
14
  *
15
- * 並べ替えの確定は `onReorder` の 1 回だけ。ドラッグ中は内部で表示だけ動かすので、
16
- * 途中経過で API を叩かない。
15
+ * The reorder is committed by a single `onReorder` call. During a drag only the display moves internally,
16
+ * so do not hit an API with intermediate states.
17
17
  */
18
18
  function ReorderableList({ data, keyExtractor, renderItem, onReorder, dragEnabled = true, ListHeaderComponent, ListFooterComponent, ListEmptyComponent, contentContainerClassName }) {
19
19
  return /* @__PURE__ */ jsx(Reorderable, {
@@ -34,8 +34,8 @@ function ReorderableList({ data, keyExtractor, renderItem, onReorder, dragEnable
34
34
  });
35
35
  }
36
36
  /**
37
- * 行の描画。`useReorderableDrag` / `useIsActive` は**リストの item の中でしか呼べない**ので、
38
- * ここで呼んで使用側へ渡す。
37
+ * Renders a row. `useReorderableDrag` / `useIsActive` **can only be called inside a list item**,
38
+ * so they are called here and handed to the caller.
39
39
  */
40
40
  function Cell({ item, index, render }) {
41
41
  const drag = useReorderableDrag();
@@ -3,28 +3,28 @@ import { ReactNode } from "react";
3
3
  export type SheetProps = {
4
4
  open: boolean;
5
5
  onOpenChange: (open: boolean) => void;
6
- /** 見出し。ダイアログの名前になる(名前の無いダイアログにしないため、移植元と違って必須。web の `layout/sheet` と同じ)。 */
6
+ /** Heading. Becomes the dialog's name (required so the dialog is never nameless; same as the web `layout/sheet`). */
7
7
  title: ReactNode;
8
8
  description?: ReactNode;
9
9
  content: ReactNode;
10
10
  footer?: ReactNode;
11
- /** 背面タップで閉じるか(既定 true)。 */
11
+ /** Whether tapping the backdrop closes it (default true). */
12
12
  dismissOnBackdropPress?: boolean;
13
- /** 閉じるボタンの読み上げ名(既定は「閉じる」)。 */
13
+ /** Spoken name of the close button (default "閉じる", i.e. "Close"). */
14
14
  closeLabel?: string;
15
- /** 中身に余白を敷くか(既定 true)。端まで敷き詰める行リストでは false。 */
15
+ /** Whether to pad the content (default true). Use false for row lists that run edge to edge. */
16
16
  padded?: boolean;
17
- /** 画面高に対する最大の高さ(既定 0.85)。 */
17
+ /** Maximum height as a ratio of the screen height (default 0.85). */
18
18
  maxHeightRatio?: number;
19
- /** 閉じ切った後に呼ばれる。**次のシートを開くときはここで開くこと**(`base/sheet` 参照)。 */
19
+ /** Called after it has fully closed. **Open the next sheet here** (see `base/sheet`). */
20
20
  onClosed?: () => void;
21
21
  };
22
22
  /**
23
- * 下から出るシート。`@lt-three/web` の layout/sheet(画面端から出るパネル)に対応する。
24
- * native では端ではなく下から出すのが標準の作法なので、位置だけ読み替えている(web の `side` は持たない)。
23
+ * A sheet that slides up from the bottom. Corresponds to the web `layout/sheet` (a panel that slides in from a screen edge).
24
+ * On native the standard convention is to slide up from the bottom rather than from an edge, so only the position is reinterpreted (there is no web `side`).
25
25
  *
26
- * 面の出し方・スクリム・safe-area・キーボード回避は `base/sheet` が持つ。
27
- * 見出しがダイアログの名前(`aria-labelledby`)、補足が説明(`aria-describedby`)になる。
26
+ * How the surface appears, the scrim, safe-area, and keyboard avoidance belong to `base/sheet`.
27
+ * The heading is the dialog's name (`aria-labelledby`), and the supplementary text is its description (`aria-describedby`).
28
28
  */
29
29
  export declare function Sheet({ open, onOpenChange, title, description, content, footer, dismissOnBackdropPress, closeLabel, padded, maxHeightRatio, onClosed }: SheetProps): import("react").JSX.Element;
30
30
  //#endregion
@@ -5,11 +5,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/layout/sheet.tsx
7
7
  /**
8
- * 下から出るシート。`@lt-three/web` の layout/sheet(画面端から出るパネル)に対応する。
9
- * native では端ではなく下から出すのが標準の作法なので、位置だけ読み替えている(web の `side` は持たない)。
8
+ * A sheet that slides up from the bottom. Corresponds to the web `layout/sheet` (a panel that slides in from a screen edge).
9
+ * On native the standard convention is to slide up from the bottom rather than from an edge, so only the position is reinterpreted (there is no web `side`).
10
10
  *
11
- * 面の出し方・スクリム・safe-area・キーボード回避は `base/sheet` が持つ。
12
- * 見出しがダイアログの名前(`aria-labelledby`)、補足が説明(`aria-describedby`)になる。
11
+ * How the surface appears, the scrim, safe-area, and keyboard avoidance belong to `base/sheet`.
12
+ * The heading is the dialog's name (`aria-labelledby`), and the supplementary text is its description (`aria-describedby`).
13
13
  */
14
14
  function Sheet({ open, onOpenChange, title, description, content, footer, dismissOnBackdropPress = true, closeLabel, padded = true, maxHeightRatio = .85, onClosed }) {
15
15
  const id = useId();
@@ -5,12 +5,12 @@ export type SimpleDialogProps = {
5
5
  onOpenChange: (open: boolean) => void;
6
6
  title: ReactNode;
7
7
  children: ReactNode;
8
- /** 閉じるボタンの読み上げ名(既定は「閉じる」)。 */
8
+ /** Spoken name of the close button (default "閉じる", i.e. "Close"). */
9
9
  closeLabel?: string;
10
10
  };
11
11
  /**
12
- * タイトルと本文だけの軽量なダイアログ。`@lt-three/web` の layout/simple-dialog に対応する。
13
- * フッターや説明が要るなら `Modal` を直接使う。
12
+ * A lightweight dialog with only a title and a body. Corresponds to the web `layout/simple-dialog`.
13
+ * Use `Modal` directly if you need a footer or a description.
14
14
  */
15
15
  export declare function SimpleDialog({ open, onOpenChange, title, children, closeLabel }: SimpleDialogProps): import("react").JSX.Element;
16
16
  //#endregion
@@ -3,8 +3,8 @@ import { jsx } from "react/jsx-runtime";
3
3
 
4
4
  //#region src/native/layout/simple-dialog.tsx
5
5
  /**
6
- * タイトルと本文だけの軽量なダイアログ。`@lt-three/web` の layout/simple-dialog に対応する。
7
- * フッターや説明が要るなら `Modal` を直接使う。
6
+ * A lightweight dialog with only a title and a body. Corresponds to the web `layout/simple-dialog`.
7
+ * Use `Modal` directly if you need a footer or a description.
8
8
  */
9
9
  function SimpleDialog({ open, onOpenChange, title, children, closeLabel }) {
10
10
  return /* @__PURE__ */ jsx(Modal, {
@@ -2,48 +2,48 @@ import { Breakpoint } from "../lib/breakpoints.js";
2
2
  import { ReactNode } from "react";
3
3
  //#region src/native/layout/simple-table.d.ts
4
4
  /**
5
- * 宣言的な薄い罫線のデータテーブル。columns / data を渡すだけで使える。
6
- * `@lt-three/web` の layout/simple-table と同じ列定義・同じ名前の props(`onRowClick`・`hideBelow`)を取る。
5
+ * A declarative data table with thin rules. Just pass columns / data.
6
+ * It takes the same column definitions and the same prop names (`onRowClick`, `hideBelow`) as the web `layout/simple-table`.
7
7
  *
8
- * ヘッダは frame の淡い面、行罫線は 1px の極薄の線。
9
- * 数値列は mono + タブラー + 右寄せにする。
8
+ * The header is a pale frame surface, and row rules are very faint 1px lines.
9
+ * Numeric columns use mono + tabular + right alignment.
10
10
  */
11
11
  export type SimpleColumn<T> = {
12
- /** 列キー(行内で一意)。 */
12
+ /** Column key (unique within a row). */
13
13
  key: string;
14
14
  header: ReactNode;
15
- /** セル / ヘッダの揃え(既定 left)。 */
15
+ /** Alignment of cells / header (default left). */
16
16
  align?: "left" | "right" | "center";
17
- /** 等幅 + タブラー(数値・ID 向け)。 */
17
+ /** Monospace + tabular (for numbers and IDs). */
18
18
  mono?: boolean;
19
- /** 強調(font-medium)。 */
19
+ /** Emphasis (font-medium). */
20
20
  strong?: boolean;
21
21
  /**
22
- * この幅(Tailwind と同じブレークポイント: sm 640・md 768・lg 1024 px。**画面の幅**で見る)より狭いときは列ごと隠す。
23
- * 狭い画面で重要でない列(ID・補足など)を畳む(web の `hideBelow` と同じ)。未指定なら常に出す。
22
+ * Hides the whole column when narrower than this width (same breakpoints as Tailwind: sm 640, md 768, lg 1024 px; judged by the **screen width**).
23
+ * Collapses unimportant columns (ID, notes, etc.) on narrow screens (same as web's `hideBelow`). Always shown when unspecified.
24
24
  */
25
25
  hideBelow?: Breakpoint;
26
- /** 列幅(px)。省略時は等分。 */
26
+ /** Column width (px). Divided equally when omitted. */
27
27
  width?: number;
28
- /** セル(View)の追加クラス。 */
28
+ /** Extra classes for the cell (View). */
29
29
  cellClassName?: string;
30
- /** ヘッダのセル(View)の追加クラス。 */
30
+ /** Extra classes for the header cell (View). */
31
31
  headClassName?: string;
32
- /** セルの描画。未指定時は row[key] を表示する。 */
32
+ /** Renders the cell. Shows row[key] when unspecified. */
33
33
  render?: (row: T) => ReactNode;
34
34
  };
35
35
  export type SimpleTableProps<T> = {
36
36
  columns: SimpleColumn<T>[];
37
37
  data: T[];
38
- /** 行キーの導出。未指定時は index を使う。 */
38
+ /** Derives the row key. Uses the index when unspecified. */
39
39
  getRowKey?: (row: T, index: number) => string;
40
40
  /**
41
- * 行を押す(web の `onRowClick` と同じ名前)。渡すと各行がボタン(フォーカスでき、Enter・Space でも押せる)になり、
42
- * フォーカスは不透明の outline で示す。
41
+ * Pressing a row (same name as web's `onRowClick`). When passed, each row becomes a button (focusable, and pressable with Enter and Space),
42
+ * and focus is shown with an opaque outline.
43
43
  */
44
44
  onRowClick?: (row: T) => void;
45
45
  className?: string;
46
- /** 列が画面幅に収まらないとき横スクロールさせる。 */
46
+ /** Scrolls horizontally when the columns do not fit the screen width. */
47
47
  horizontalScroll?: boolean;
48
48
  };
49
49
  export declare function SimpleTable<T extends object>({ columns: allColumns, data, getRowKey, onRowClick, className, horizontalScroll }: SimpleTableProps<T>): import("react").JSX.Element;
@@ -17,7 +17,7 @@ const justifyClass = {
17
17
  right: "justify-end",
18
18
  center: "justify-center"
19
19
  };
20
- /** `render` が無い列の既定の描画。行の `key` の値が、文字・数値・要素のときだけ表示する。 */
20
+ /** Default rendering for a column without `render`. Shows the row's `key` value only when it is text, a number, or an element. */
21
21
  function cellValue(row, key) {
22
22
  const value = Reflect.get(row, key);
23
23
  if (typeof value === "string" || typeof value === "number" || isValidElement(value)) return value;
@@ -1,13 +1,13 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/native/layout/tab-bar.d.ts
3
3
  export type TabBarItem = {
4
- /** 選択値(一意)。 */
4
+ /** Selection value (unique). */
5
5
  value: string;
6
- /** 文字のラベル。アイコンだけにしない(読み上げ名・分かりやすさのため)。 */
6
+ /** Text label. Never use an icon alone (for the spoken name and clarity). */
7
7
  label: string;
8
8
  /**
9
- * アイコン。選択状態に合う色(`color`)を渡すので、`Symbol` の `tintColor` などに使う。
10
- * 文字だけで足りるなら省く。
9
+ * Icon. It receives the color (`color`) matching the selection state, for use as `Symbol`'s `tintColor` and the like.
10
+ * Omit it if text alone is enough.
11
11
  */
12
12
  icon?: (state: {
13
13
  active: boolean;
@@ -16,18 +16,18 @@ export type TabBarItem = {
16
16
  };
17
17
  export type TabBarProps = {
18
18
  items: readonly TabBarItem[];
19
- /** 選択中の値。 */
19
+ /** The selected value. */
20
20
  value: string;
21
21
  onValueChange: (value: string) => void;
22
- /** 読み上げ名(ランドマークが複数あるとき区別する)。既定は「メイン」。 */
22
+ /** Spoken name (distinguishes landmarks when there are several). Defaults to "メイン" ("Main"). */
23
23
  accessibilityLabel?: string;
24
24
  className?: string;
25
25
  };
26
26
  /**
27
- * 画面の下に置く、トップレベルの行き先の切り替え(3〜5 件)。`layout/tabs`(本文を切り替える下線タブ)とは別物。
28
- * 選択中は `text-action-ink`(暗い面でも AA)で、選択状態は色だけにせず太さ(`font-semibold`)でも示す。
29
- * 1 件の押す範囲は高さ 56px 以上(実機の 44pt 基準を上回る)。**下端の安全領域(ホームインジケータ)はアプリが持つ**
30
- * (`className` に `pb-*` を渡すか、外側の `SafeAreaView` に置く)。
27
+ * Switcher for top-level destinations placed at the bottom of the screen (3 to 5 items). Distinct from `layout/tabs` (underlined tabs that switch the body).
28
+ * The selected item uses `text-action-ink` (AA even on dark surfaces), and the selected state is shown by weight (`font-semibold`) as well as color.
29
+ * Each item's press target is at least 56px tall (above the 44pt real-device guideline). **The bottom safe area (home indicator) is the app's responsibility**
30
+ * (pass `pb-*` in `className`, or place it inside an outer `SafeAreaView`).
31
31
  */
32
32
  export declare function TabBar({ items, value, onValueChange, accessibilityLabel, className }: TabBarProps): import("react").JSX.Element;
33
33
  //#endregion
@@ -6,10 +6,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/native/layout/tab-bar.tsx
8
8
  /**
9
- * 画面の下に置く、トップレベルの行き先の切り替え(3〜5 件)。`layout/tabs`(本文を切り替える下線タブ)とは別物。
10
- * 選択中は `text-action-ink`(暗い面でも AA)で、選択状態は色だけにせず太さ(`font-semibold`)でも示す。
11
- * 1 件の押す範囲は高さ 56px 以上(実機の 44pt 基準を上回る)。**下端の安全領域(ホームインジケータ)はアプリが持つ**
12
- * (`className` に `pb-*` を渡すか、外側の `SafeAreaView` に置く)。
9
+ * Switcher for top-level destinations placed at the bottom of the screen (3 to 5 items). Distinct from `layout/tabs` (underlined tabs that switch the body).
10
+ * The selected item uses `text-action-ink` (AA even on dark surfaces), and the selected state is shown by weight (`font-semibold`) as well as color.
11
+ * Each item's press target is at least 56px tall (above the 44pt real-device guideline). **The bottom safe area (home indicator) is the app's responsibility**
12
+ * (pass `pb-*` in `className`, or place it inside an outer `SafeAreaView`).
13
13
  */
14
14
  function TabBar({ items, value, onValueChange, accessibilityLabel = "メイン", className }) {
15
15
  const activeColor = useTokenColor("--action-ink");