@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
@@ -8,42 +8,42 @@ export type TextFieldProps = ControlA11yProps & {
8
8
  placeholder?: string;
9
9
  type?: TextFieldType;
10
10
  disabled?: boolean;
11
- /** エラー。罫線が destructive になり、`aria-invalid` が付く(フォームの中では `FormControl` が渡す)。 */
11
+ /** Error state. The border becomes destructive and `aria-invalid` is set (inside a form, `FormControl` passes it). */
12
12
  invalid?: boolean;
13
13
  /**
14
- * 自動入力の種類(web の `TextInput.autoComplete` と同じ意味の語。`email`・`current-password`・`one-time-code` など)。
15
- * RN の `autoComplete` にそのまま渡り、iOS では `textContentType` にも読み替えて渡す(`lib/autocomplete.ts`)。
16
- * web より型が狭い(RN が受ける語だけ)。
14
+ * The kind of autofill (the same terms as the web `TextInput.autoComplete`: `email`, `current-password`, `one-time-code`, etc.).
15
+ * Passed straight to RN's `autoComplete`, and on iOS also mapped to `textContentType` (`lib/autocomplete.ts`).
16
+ * The type is narrower than the web's (only the terms RN accepts).
17
17
  */
18
18
  autoComplete?: AutoComplete;
19
19
  autoCapitalize?: "none" | "sentences" | "words" | "characters";
20
- /** `false` で自動修正(スマート引用符への置き換えなど)を切る。JSON・コード・ID を打たせる欄に使う。 */
20
+ /** `false` turns off autocorrection (such as smart-quote replacement). Use it for fields where JSON, code or IDs are typed. */
21
21
  autoCorrect?: boolean;
22
- /** フォーカスが外れたとき(入力中の文字を確定する・破棄するのに使う)。 */
22
+ /** Called when focus leaves the field (used to commit or discard the text being typed). */
23
23
  onBlur?: () => void;
24
24
  multiline?: boolean;
25
- /** 複数行のときの行数目安(`multiline` と併用する)。 */
25
+ /** Approximate number of lines when multiline (use together with `multiline`). */
26
26
  numberOfLines?: number;
27
27
  onSubmitEditing?: () => void;
28
28
  returnKeyType?: "done" | "go" | "next" | "search" | "send";
29
29
  accessibilityLabel?: string;
30
30
  /**
31
- * E2E から一意に掴むための識別子(iOS では accessibilityIdentifier になる)。
31
+ * An identifier for targeting the field uniquely from E2E (becomes accessibilityIdentifier on iOS).
32
32
  *
33
- * ラベルと入力欄が同じ文言を持つフォームでは、テキスト一致だと**見出しの方に当たって
34
- * 入力が消える**(Maestro で実際に踏んだ)。掴ませたい入力欄には付けること。
33
+ * In a form where the label and the input share the same text, matching by text **hits the heading
34
+ * and the input gets cleared** (observed with Maestro). Set it on any input that must be targeted.
35
35
  */
36
36
  testID?: string;
37
37
  className?: string;
38
38
  };
39
39
  export declare const textFieldClass = "min-h-9 w-full rounded-control border border-line-strong bg-raised px-3 py-1.5 text-sm text-foreground";
40
40
  /**
41
- * 素のテキスト入力。`@lt-three/web` の base/input に対応する入力枠で、
42
- * TanStack Form を使わない画面(ログイン・設定・メモ欄など)から直接使う。
41
+ * A plain text input. The input frame corresponding to the web base/input,
42
+ * used directly on screens that do not use TanStack Form (login, settings, memo fields, etc.).
43
43
  *
44
- * `base/input` は `@expo/ui` の OS ネイティブ TextField なので**トークンで塗れない**。
45
- * web と同じ見た目にしたい入力はこちらを使うこと。フォーム統合が要るときは
46
- * `form/text-input`(これを内側で使っている)。
44
+ * `base/input` is the OS-native TextField from `@expo/ui`, so it **cannot be painted with tokens**.
45
+ * Use this one for inputs that should look the same as the web. When form integration is needed,
46
+ * use `form/text-input` (which uses this one internally).
47
47
  */
48
48
  export declare function TextField({ value, onChangeText, placeholder, type, disabled, invalid, autoComplete, autoCapitalize, autoCorrect, onBlur, multiline, numberOfLines, onSubmitEditing, returnKeyType, accessibilityLabel, accessibilityHint, testID, className, id, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }: TextFieldProps): import("react").JSX.Element;
49
49
  //#endregion
@@ -14,12 +14,12 @@ const KEYBOARD = {
14
14
  tel: "phone-pad"
15
15
  };
16
16
  /**
17
- * 素のテキスト入力。`@lt-three/web` の base/input に対応する入力枠で、
18
- * TanStack Form を使わない画面(ログイン・設定・メモ欄など)から直接使う。
17
+ * A plain text input. The input frame corresponding to the web base/input,
18
+ * used directly on screens that do not use TanStack Form (login, settings, memo fields, etc.).
19
19
  *
20
- * `base/input` は `@expo/ui` の OS ネイティブ TextField なので**トークンで塗れない**。
21
- * web と同じ見た目にしたい入力はこちらを使うこと。フォーム統合が要るときは
22
- * `form/text-input`(これを内側で使っている)。
20
+ * `base/input` is the OS-native TextField from `@expo/ui`, so it **cannot be painted with tokens**.
21
+ * Use this one for inputs that should look the same as the web. When form integration is needed,
22
+ * use `form/text-input` (which uses this one internally).
23
23
  */
24
24
  function TextField({ value, onChangeText, placeholder, type = "text", disabled, invalid, autoComplete, autoCapitalize, autoCorrect, onBlur, multiline, numberOfLines, onSubmitEditing, returnKeyType, accessibilityLabel, accessibilityHint, testID, className, id, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }) {
25
25
  const mutedInk = useTokenColor("--ink-500");
@@ -2,20 +2,20 @@ import { ActiveScheme } from "../lib/scheme.js";
2
2
  import "../lib/theme.js";
3
3
  //#region src/native/atom/theme-toggle.d.ts
4
4
  export type ThemeToggleProps = {
5
- /** 切り替えたいテーマ(`light` / `dark`)を受け取る。保存先(AsyncStorage・jotai など)はアプリが持つ。 */
5
+ /** Receives the theme to switch to (`light` / `dark`). Where it is stored (AsyncStorage, jotai, etc.) is up to the app. */
6
6
  onSchemeChange: (scheme: ActiveScheme) => void;
7
- /** いまのテーマ。省略すると `useActiveScheme()`(`ThemeRoot`、無ければ端末の設定)に従う。 */
7
+ /** The current theme. When omitted, follows `useActiveScheme()` (`ThemeRoot`, or the device setting if there is none). */
8
8
  scheme?: ActiveScheme;
9
- /** スクリーンリーダー向けのラベル。 */
9
+ /** Label for screen readers. */
10
10
  accessibilityLabel?: string;
11
11
  className?: string;
12
12
  };
13
13
  /**
14
- * ライト / ダークを 1 タップで入れ替える。
15
- * 「システム追従」を含む 3 択が要るなら、アプリが `ThemeRoot` の `preference` を直接持つ。
14
+ * Switches between light and dark with a single tap.
15
+ * If a three-way choice including "follow system" is needed, the app owns the `ThemeRoot` `preference` directly.
16
16
  *
17
- * 移植元は jotai の `themePreferenceAtom` を直接書き換えていた。love3 はテーマの保存先を持たない(`ThemeRoot` は
18
- * `preference` を props で受ける)ので、`onSchemeChange` で次のテーマを渡す形にした。
17
+ * love3 has no place to store the theme (`ThemeRoot` receives
18
+ * `preference` via props), so the next theme is handed over through `onSchemeChange`.
19
19
  */
20
20
  export declare function ThemeToggle({ onSchemeChange, scheme: schemeProp, accessibilityLabel, className }: ThemeToggleProps): import("react").JSX.Element;
21
21
  //#endregion
@@ -7,11 +7,11 @@ import Feather from "@expo/vector-icons/Feather";
7
7
 
8
8
  //#region src/native/atom/theme-toggle.tsx
9
9
  /**
10
- * ライト / ダークを 1 タップで入れ替える。
11
- * 「システム追従」を含む 3 択が要るなら、アプリが `ThemeRoot` の `preference` を直接持つ。
10
+ * Switches between light and dark with a single tap.
11
+ * If a three-way choice including "follow system" is needed, the app owns the `ThemeRoot` `preference` directly.
12
12
  *
13
- * 移植元は jotai の `themePreferenceAtom` を直接書き換えていた。love3 はテーマの保存先を持たない(`ThemeRoot` は
14
- * `preference` を props で受ける)ので、`onSchemeChange` で次のテーマを渡す形にした。
13
+ * love3 has no place to store the theme (`ThemeRoot` receives
14
+ * `preference` via props), so the next theme is handed over through `onSchemeChange`.
15
15
  */
16
16
  function ThemeToggle({ onSchemeChange, scheme: schemeProp, accessibilityLabel = "テーマ切り替え", className }) {
17
17
  const active = useActiveScheme();
@@ -1,16 +1,16 @@
1
1
  import { SelectProps } from "./select.js";
2
2
  //#region src/native/atom/timezone-select.d.ts
3
3
  export type TimezoneSelectProps = Pick<SelectProps, "label" | "description" | "placeholder" | "disabled" | "size" | "className" | "wrapperClassName" | "sheetTitle" | "closeLabel" | "accessibilityLabel"> & {
4
- /** 選択中の IANA タイムゾーン。空文字は「まだ決まっていない」(placeholder を出す)。 */
4
+ /** The selected IANA time zone. An empty string means "not decided yet" (the placeholder is shown). */
5
5
  value: string;
6
6
  onValueChange: (zone: string) => void;
7
7
  };
8
8
  /**
9
- * タイムゾーン(IANA 文字列)を選ぶ Select。`@lt-three/web` の atom/timezone-select と同じ名前・同じ props。
9
+ * A Select for choosing a time zone (IANA string). Same name and props as the web atom/timezone-select.
10
10
  *
11
- * 選択肢は主要な都市の固定リストに、この端末のタイムゾーンと選択中の値を足したもの(`lib/timezone.ts`)。
12
- * Hermes に `Intl.supportedValuesOf` が無いので固定リストにしている。
13
- * 下から出るシートで選ぶので、`closeLabel` は呼び出し側の言語で渡すこと(既定は日本語)。
11
+ * The options are a fixed list of major cities plus this device's time zone and the selected value (`lib/timezone.ts`).
12
+ * The list is fixed because Hermes has no `Intl.supportedValuesOf`.
13
+ * It is chosen in a bottom sheet, so pass `closeLabel` in the caller's language (the default is Japanese).
14
14
  */
15
15
  export declare function TimezoneSelect({ value, onValueChange, ...props }: TimezoneSelectProps): import("react").JSX.Element;
16
16
  //#endregion
@@ -5,11 +5,11 @@ import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/atom/timezone-select.tsx
7
7
  /**
8
- * タイムゾーン(IANA 文字列)を選ぶ Select。`@lt-three/web` の atom/timezone-select と同じ名前・同じ props。
8
+ * A Select for choosing a time zone (IANA string). Same name and props as the web atom/timezone-select.
9
9
  *
10
- * 選択肢は主要な都市の固定リストに、この端末のタイムゾーンと選択中の値を足したもの(`lib/timezone.ts`)。
11
- * Hermes に `Intl.supportedValuesOf` が無いので固定リストにしている。
12
- * 下から出るシートで選ぶので、`closeLabel` は呼び出し側の言語で渡すこと(既定は日本語)。
10
+ * The options are a fixed list of major cities plus this device's time zone and the selected value (`lib/timezone.ts`).
11
+ * The list is fixed because Hermes has no `Intl.supportedValuesOf`.
12
+ * It is chosen in a bottom sheet, so pass `closeLabel` in the caller's language (the default is Japanese).
13
13
  */
14
14
  function TimezoneSelect({ value, onValueChange, ...props }) {
15
15
  const options = useMemo(() => timeZoneOptions(getDeviceTimeZone(), value).map((zone) => ({
@@ -6,8 +6,8 @@ export type SectionTitleProps = {
6
6
  className?: string;
7
7
  };
8
8
  /**
9
- * セクション見出し。`@lt-three/web` の atom/typography の SectionTitle に対応する。
10
- * 左端の 2px インディゴのバー + 太字の見出し + 任意の説明という同じ構成。
9
+ * A section heading. Mirrors SectionTitle of the web atom/typography.
10
+ * Same structure: a 2px indigo bar on the left edge + a bold heading + an optional description.
11
11
  */
12
12
  export declare function SectionTitle({ children, description, className }: SectionTitleProps): import("react").JSX.Element;
13
13
  //#endregion
@@ -5,8 +5,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/native/atom/typography.tsx
7
7
  /**
8
- * セクション見出し。`@lt-three/web` の atom/typography の SectionTitle に対応する。
9
- * 左端の 2px インディゴのバー + 太字の見出し + 任意の説明という同じ構成。
8
+ * A section heading. Mirrors SectionTitle of the web atom/typography.
9
+ * Same structure: a 2px indigo bar on the left edge + a bold heading + an optional description.
10
10
  */
11
11
  function SectionTitle({ children, description, className }) {
12
12
  return /* @__PURE__ */ jsxs(View, {
@@ -3,10 +3,10 @@ import { ReactNode } from "react";
3
3
  import { ViewStyle } from "react-native";
4
4
  //#region src/native/base/button.d.ts
5
5
  /**
6
- * ボタンの見た目バリアント。**`atom/button`(と web の Button)と同じ名前**(`@lt-three/love3/shared` の `ButtonVariant`)に、
7
- * iOS 26 の Liquid Glass だけの `glass` を足したもの。
8
- * - `glass`: iOS 26 の Liquid Glass ボタン(主要アクション向け。iOS 26 未満・Android では塗りつぶしに落ちる)
9
- * - ほかは `atom/button` と同じ意味。OS のコントロールが持つ 3 つの形(塗り・枠・文字だけ)に写す(下の表)
6
+ * The button's appearance variants. **The same names as `atom/button` (and the web Button)** (`ButtonVariant` from `@lt-three/love3/shared`),
7
+ * plus `glass`, which exists only for iOS 26 Liquid Glass.
8
+ * - `glass`: the iOS 26 Liquid Glass button (for primary actions; falls back to a filled button below iOS 26 and on Android)
9
+ * - The others mean the same as in `atom/button`. They are mapped onto the three shapes the OS control has (filled, outlined, text only) (see the tables below)
10
10
  */
11
11
  export type NativeButtonVariant = ButtonVariant | "glass";
12
12
  declare const IOS_BUTTON_STYLE: {
@@ -37,24 +37,24 @@ type ButtonProps = {
37
37
  disabled?: boolean;
38
38
  variant?: NativeButtonVariant;
39
39
  /**
40
- * アクセント色(iOS の SwiftUI `.tint()`)。省略すると、variant に合わせたトークンの色
41
- * (`default` は主操作のインディゴ、`destructive` は destructive-solid、`<3` はブランド色)。
40
+ * The accent color (SwiftUI `.tint()` on iOS). When omitted, the token color matching the variant
41
+ * (`default` is the primary action's indigo, `destructive` is destructive-solid, `<3` is the brand color).
42
42
  */
43
43
  tintColor?: string;
44
44
  /**
45
- * ラベル文字色(iOS の SwiftUI `.foregroundStyle()`)。省略すると、塗りの上で読める組のトークンの色。
46
- * prominent 系は既定でラベルが白のため、明るい tint と組み合わせると読めなくなる(反転する面でも同じ)。
45
+ * The label text color (SwiftUI `.foregroundStyle()` on iOS). When omitted, the token color paired to be readable on the fill.
46
+ * Prominent styles default to a white label, so combining them with a light tint makes the label unreadable (the same applies on surfaces that invert).
47
47
  */
48
48
  labelColor?: string;
49
- /** Host コンテナ(RN View)に適用するスタイル。幅・余白の調整に使う。 */
49
+ /** Style applied to the Host container (an RN View). Used to adjust width and margins. */
50
50
  style?: ViewStyle;
51
51
  };
52
52
  /**
53
- * ネイティブボタン(OS のコントロールの層)。iOS は SwiftUI の `Button`、Android は Jetpack Compose の
54
- * `Button` を描画する(`@expo/ui` universal 経由)。iOS 26 では `glass` が Liquid Glass になる。
53
+ * The native button (the OS control layer). Renders SwiftUI's `Button` on iOS and Jetpack Compose's
54
+ * `Button` on Android (via `@expo/ui` universal). On iOS 26, `glass` becomes Liquid Glass.
55
55
  *
56
- * `atom/button`(RN の `Pressable`。トークンで塗るボタン)に対する、**OS ネイティブ版の base 層**。
57
- * web と同じ見た目にしたい場所は `atom/button`、OS の標準の見た目・触感がほしい場所はこちら。
56
+ * The **OS-native base layer** counterpart of `atom/button` (an RN `Pressable`, a button painted with tokens).
57
+ * Use `atom/button` where it should look the same as the web, and this one where the OS's standard look and feel is wanted.
58
58
  */
59
59
  declare function Button({ children, onPress, disabled, variant, tintColor, labelColor, style }: ButtonProps): import("react").JSX.Element;
60
60
  //#endregion
@@ -28,11 +28,11 @@ const UNIVERSAL_VARIANT = {
28
28
  glass: "filled"
29
29
  };
30
30
  /**
31
- * ネイティブボタン(OS のコントロールの層)。iOS は SwiftUI の `Button`、Android は Jetpack Compose の
32
- * `Button` を描画する(`@expo/ui` universal 経由)。iOS 26 では `glass` が Liquid Glass になる。
31
+ * The native button (the OS control layer). Renders SwiftUI's `Button` on iOS and Jetpack Compose's
32
+ * `Button` on Android (via `@expo/ui` universal). On iOS 26, `glass` becomes Liquid Glass.
33
33
  *
34
- * `atom/button`(RN の `Pressable`。トークンで塗るボタン)に対する、**OS ネイティブ版の base 層**。
35
- * web と同じ見た目にしたい場所は `atom/button`、OS の標準の見た目・触感がほしい場所はこちら。
34
+ * The **OS-native base layer** counterpart of `atom/button` (an RN `Pressable`, a button painted with tokens).
35
+ * Use `atom/button` where it should look the same as the web, and this one where the OS's standard look and feel is wanted.
36
36
  */
37
37
  function Button({ children, onPress, disabled, variant = "default", tintColor, labelColor, style }) {
38
38
  const primary = useTokenColor("--primary");
@@ -1,10 +1,10 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/native/base/form.d.ts
3
3
  /**
4
- * 外装の id の組と、エラー。`FormItem` の中で使う。フィールドの外(制御モード)でも落ちない。
4
+ * The set of chrome ids and the errors. Use it inside `FormItem`. It does not crash outside a field (controlled mode) either.
5
5
  *
6
- * **表示するエラーはここで 1 つに決める**(field のエラー + `FormItem` の `errors`)。`FormLabel` の色・`FormMessage` の文・
7
- * `FormControl` の `aria-invalid` / `aria-describedby` は全部これを読むので、文が出ているのに `aria-invalid` が無い、などの食い違いが起きない。
6
+ * **The errors to display are decided in one place here** (the field's errors + the `errors` of `FormItem`). The `FormLabel` color, the `FormMessage` text and
7
+ * the `FormControl` `aria-invalid` / `aria-describedby` all read from it, so mismatches such as a message being shown without `aria-invalid` cannot occur.
8
8
  */
9
9
  export declare function useFormField(): {
10
10
  id: string;
@@ -18,9 +18,9 @@ export declare function FormItem({ children, className, errors }: {
18
18
  children: ReactNode;
19
19
  className?: string;
20
20
  /**
21
- * field(TanStack Form)のエラーに**足す**エラー。フィールドの外で使うとき、またはフィールドの中でも入力の部品自身が
22
- * 持つエラー(数値欄の「数として読めない」など)を出したいときに使う。入力の `aria-invalid` と `aria-describedby`、
23
- * ラベルの色、`FormMessage` の表示に同じように効く。空配列を渡しても、field のエラーは隠れない。
21
+ * Errors **added to** the field's (TanStack Form) errors. Use it outside a field, or inside a field when you want to show an error
22
+ * owned by the input component itself (such as "not readable as a number" on a numeric field). It affects the input's `aria-invalid` and `aria-describedby`,
23
+ * the label color and the `FormMessage` display alike. Passing an empty array does not hide the field's errors.
24
24
  */
25
25
  errors?: readonly unknown[];
26
26
  }): import("react").JSX.Element;
@@ -30,7 +30,7 @@ export declare function FormLabel({ children, required, helpText, className }: {
30
30
  helpText?: ReactNode;
31
31
  className?: string;
32
32
  }): import("react").JSX.Element;
33
- /** `FormControl` が入力の部品に渡す props(部品の `ControlA11yProps` と同じ形)。 */
33
+ /** The props `FormControl` passes to the input component (the same shape as the component's `ControlA11yProps`). */
34
34
  export type FormControlProps = {
35
35
  id: string;
36
36
  "aria-labelledby": string | undefined;
@@ -38,7 +38,7 @@ export type FormControlProps = {
38
38
  "aria-invalid": boolean;
39
39
  };
40
40
  /**
41
- * 入力の部品に `id`・`aria-labelledby`・`aria-describedby`・`aria-invalid` を渡す。子は関数で受ける。
41
+ * Passes `id`, `aria-labelledby`, `aria-describedby` and `aria-invalid` to the input component. The child is received as a function.
42
42
  *
43
43
  * ```tsx
44
44
  * <FormControl labelled={Boolean(label)} described={Boolean(description)}>
@@ -46,11 +46,11 @@ export type FormControlProps = {
46
46
  * </FormControl>
47
47
  * ```
48
48
  *
49
- * - `labelled`: `FormLabel` を置いているとき。ラベルの文字を入力の名前にする(`aria-labelledby`)。置いていないときは
50
- * 存在しない id を指さないよう付けない。右にラベルを持つ入力(checkbox・radio)は、自分の文字が名前なので付けない
51
- * - `described`: `FormDescription` を置いているとき。説明を `aria-describedby` に足す。エラーがあるときは、エラーの文も足す
52
- * - `id`: 既定は `formItemId`(1 つの field に入力が 1 つのとき)。**1 つの field に入力が複数あるとき**(radio の選択肢)は、
53
- * 同じ id が重ならないよう、選択肢ごとに渡す
49
+ * - `labelled`: when a `FormLabel` is placed. Makes the label text the input's name (`aria-labelledby`). When none is placed,
50
+ * it is not set so it never points to a nonexistent id. Inputs that carry their own label on the right (checkbox, radio) do not set it, because their own text is the name
51
+ * - `described`: when a `FormDescription` is placed. Adds the description to `aria-describedby`. When there is an error, the error text is added too
52
+ * - `id`: defaults to `formItemId` (when a field has one input). **When a field has several inputs** (radio options),
53
+ * pass one per option so the same id does not collide
54
54
  */
55
55
  export declare function FormControl({ children, id, labelled, described }: {
56
56
  children: (control: FormControlProps) => ReactNode;
@@ -63,8 +63,8 @@ export declare function FormDescription({ children, className }: {
63
63
  className?: string;
64
64
  }): import("react").JSX.Element;
65
65
  /**
66
- * エラーの文。出すエラーは `useFormField` の 1 つだけ(`FormItem` の `errors` で足す)。
67
- * web の `FormMessage` にある「このメッセージだけに出すエラー」(`errors`)は持たない(文だけ変えると `aria-invalid` と食い違うため)。
66
+ * The error text. The only errors shown are the single set from `useFormField` (add more via the `errors` of `FormItem`).
67
+ * It does not have the web `FormMessage`'s "errors shown only in this message" (`errors`), because changing only the text would disagree with `aria-invalid`.
68
68
  */
69
69
  export declare function FormMessage({ className }: {
70
70
  className?: string;
@@ -8,10 +8,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region src/native/base/form.tsx
9
9
  const FormItemContext = createContext({ id: "" });
10
10
  /**
11
- * 外装の id の組と、エラー。`FormItem` の中で使う。フィールドの外(制御モード)でも落ちない。
11
+ * The set of chrome ids and the errors. Use it inside `FormItem`. It does not crash outside a field (controlled mode) either.
12
12
  *
13
- * **表示するエラーはここで 1 つに決める**(field のエラー + `FormItem` の `errors`)。`FormLabel` の色・`FormMessage` の文・
14
- * `FormControl` の `aria-invalid` / `aria-describedby` は全部これを読むので、文が出ているのに `aria-invalid` が無い、などの食い違いが起きない。
13
+ * **The errors to display are decided in one place here** (the field's errors + the `errors` of `FormItem`). The `FormLabel` color, the `FormMessage` text and
14
+ * the `FormControl` `aria-invalid` / `aria-describedby` all read from it, so mismatches such as a message being shown without `aria-invalid` cannot occur.
15
15
  */
16
16
  function useFormField() {
17
17
  const itemContext = useContext(FormItemContext);
@@ -61,7 +61,7 @@ function FormLabel({ children, required, helpText, className }) {
61
61
  });
62
62
  }
63
63
  /**
64
- * 入力の部品に `id`・`aria-labelledby`・`aria-describedby`・`aria-invalid` を渡す。子は関数で受ける。
64
+ * Passes `id`, `aria-labelledby`, `aria-describedby` and `aria-invalid` to the input component. The child is received as a function.
65
65
  *
66
66
  * ```tsx
67
67
  * <FormControl labelled={Boolean(label)} described={Boolean(description)}>
@@ -69,11 +69,11 @@ function FormLabel({ children, required, helpText, className }) {
69
69
  * </FormControl>
70
70
  * ```
71
71
  *
72
- * - `labelled`: `FormLabel` を置いているとき。ラベルの文字を入力の名前にする(`aria-labelledby`)。置いていないときは
73
- * 存在しない id を指さないよう付けない。右にラベルを持つ入力(checkbox・radio)は、自分の文字が名前なので付けない
74
- * - `described`: `FormDescription` を置いているとき。説明を `aria-describedby` に足す。エラーがあるときは、エラーの文も足す
75
- * - `id`: 既定は `formItemId`(1 つの field に入力が 1 つのとき)。**1 つの field に入力が複数あるとき**(radio の選択肢)は、
76
- * 同じ id が重ならないよう、選択肢ごとに渡す
72
+ * - `labelled`: when a `FormLabel` is placed. Makes the label text the input's name (`aria-labelledby`). When none is placed,
73
+ * it is not set so it never points to a nonexistent id. Inputs that carry their own label on the right (checkbox, radio) do not set it, because their own text is the name
74
+ * - `described`: when a `FormDescription` is placed. Adds the description to `aria-describedby`. When there is an error, the error text is added too
75
+ * - `id`: defaults to `formItemId` (when a field has one input). **When a field has several inputs** (radio options),
76
+ * pass one per option so the same id does not collide
77
77
  */
78
78
  function FormControl({ children, id, labelled = false, described = false }) {
79
79
  const { errors, formItemId, formLabelId, formDescriptionId, formMessageId } = useFormField();
@@ -95,8 +95,8 @@ function FormDescription({ children, className }) {
95
95
  });
96
96
  }
97
97
  /**
98
- * エラーの文。出すエラーは `useFormField` の 1 つだけ(`FormItem` の `errors` で足す)。
99
- * web の `FormMessage` にある「このメッセージだけに出すエラー」(`errors`)は持たない(文だけ変えると `aria-invalid` と食い違うため)。
98
+ * The error text. The only errors shown are the single set from `useFormField` (add more via the `errors` of `FormItem`).
99
+ * It does not have the web `FormMessage`'s "errors shown only in this message" (`errors`), because changing only the text would disagree with `aria-invalid`.
100
100
  */
101
101
  function FormMessage({ className }) {
102
102
  const { errors: list, formMessageId } = useFormField();
@@ -6,9 +6,9 @@ type GlassCardProps = {
6
6
  style?: ViewStyle;
7
7
  };
8
8
  /**
9
- * Liquid Glass のカードサーフェス。iOS 26 以上では `GlassView`(`UIGlassEffect`)で
10
- * 背後をぼかしたグラス表現になり、非対応環境(iOS 26 未満・Android・web)では枠線付きの通常 View にフォールバックする。
11
- * フォールバックの枠線は、トークンの罫線色(`--line`)。移植元は `rgba(…)` の直書きで、トークンから外れていた。
9
+ * A Liquid Glass card surface. On iOS 26 and later it uses `GlassView` (`UIGlassEffect`)
10
+ * for a glass look that blurs what is behind it; on unsupported environments (below iOS 26, Android, web) it falls back to a plain View with a border.
11
+ * The fallback border uses the token's line color (`--line`).
12
12
  */
13
13
  declare function GlassCard({ children, style }: GlassCardProps): import("react").JSX.Element;
14
14
  //#endregion
@@ -10,9 +10,9 @@ const BASE = {
10
10
  overflow: "hidden"
11
11
  };
12
12
  /**
13
- * Liquid Glass のカードサーフェス。iOS 26 以上では `GlassView`(`UIGlassEffect`)で
14
- * 背後をぼかしたグラス表現になり、非対応環境(iOS 26 未満・Android・web)では枠線付きの通常 View にフォールバックする。
15
- * フォールバックの枠線は、トークンの罫線色(`--line`)。移植元は `rgba(…)` の直書きで、トークンから外れていた。
13
+ * A Liquid Glass card surface. On iOS 26 and later it uses `GlassView` (`UIGlassEffect`)
14
+ * for a glass look that blurs what is behind it; on unsupported environments (below iOS 26, Android, web) it falls back to a plain View with a border.
15
+ * The fallback border uses the token's line color (`--line`).
16
16
  */
17
17
  function GlassCard({ children, style }) {
18
18
  const line = useTokenColor("--line");
@@ -2,7 +2,7 @@ import { KeyboardTypeOptions } from "react-native";
2
2
  //#region src/native/base/input.d.ts
3
3
  type InputProps = {
4
4
  placeholder?: string;
5
- /** 表示する値。外部 state と同期する場合に渡す(内部は非制御で駆動する)。 */
5
+ /** The value to display. Pass it when syncing with external state (internally it is driven uncontrolled). */
6
6
  value?: string;
7
7
  onChangeText?: (text: string) => void;
8
8
  secureTextEntry?: boolean;
@@ -14,15 +14,15 @@ type InputProps = {
14
14
  onSubmitEditing?: (text: string) => void;
15
15
  };
16
16
  /**
17
- * ネイティブテキスト入力(OS のコントロールの層)。iOS は SwiftUI の `TextField` / `SecureField`、
18
- * Android は Jetpack Compose の `TextField` を描画する(`@expo/ui` universal 経由)。
17
+ * The native text input (the OS control layer). Renders SwiftUI's `TextField` / `SecureField` on iOS
18
+ * and Jetpack Compose's `TextField` on Android (via `@expo/ui` universal).
19
19
  *
20
- * `atom/text-field`(RN の `TextInput`。トークンで塗る入力枠)に対する、**OS ネイティブ版の base 層**。
21
- * **トークンで塗れない**ので、web と同じ見た目にしたい入力は `atom/text-field`(フォームなら `form/text-input`)を使う。
20
+ * The **OS-native base layer** counterpart of `atom/text-field` (an RN `TextInput`, an input frame painted with tokens).
21
+ * It **cannot be painted with tokens**, so for inputs that should look the same as the web use `atom/text-field` (or `form/text-input` in a form).
22
22
  *
23
- * universal の `value` は `ObservableState` 型のため、素の string を扱えるよう
24
- * `defaultValue`(非制御)+ `onChangeText` で駆動する。外部 state は
25
- * `onChangeText` を通じて同期する。
23
+ * The universal `value` is an `ObservableState` type, so to handle a plain string it is driven by
24
+ * `defaultValue` (uncontrolled) + `onChangeText`. External state is
25
+ * synced through `onChangeText`.
26
26
  */
27
27
  declare function Input({ value, ...props }: InputProps): import("react").JSX.Element;
28
28
  //#endregion
@@ -3,15 +3,15 @@ import { Host, TextInput } from "@expo/ui";
3
3
 
4
4
  //#region src/native/base/input.tsx
5
5
  /**
6
- * ネイティブテキスト入力(OS のコントロールの層)。iOS は SwiftUI の `TextField` / `SecureField`、
7
- * Android は Jetpack Compose の `TextField` を描画する(`@expo/ui` universal 経由)。
6
+ * The native text input (the OS control layer). Renders SwiftUI's `TextField` / `SecureField` on iOS
7
+ * and Jetpack Compose's `TextField` on Android (via `@expo/ui` universal).
8
8
  *
9
- * `atom/text-field`(RN の `TextInput`。トークンで塗る入力枠)に対する、**OS ネイティブ版の base 層**。
10
- * **トークンで塗れない**ので、web と同じ見た目にしたい入力は `atom/text-field`(フォームなら `form/text-input`)を使う。
9
+ * The **OS-native base layer** counterpart of `atom/text-field` (an RN `TextInput`, an input frame painted with tokens).
10
+ * It **cannot be painted with tokens**, so for inputs that should look the same as the web use `atom/text-field` (or `form/text-input` in a form).
11
11
  *
12
- * universal の `value` は `ObservableState` 型のため、素の string を扱えるよう
13
- * `defaultValue`(非制御)+ `onChangeText` で駆動する。外部 state は
14
- * `onChangeText` を通じて同期する。
12
+ * The universal `value` is an `ObservableState` type, so to handle a plain string it is driven by
13
+ * `defaultValue` (uncontrolled) + `onChangeText`. External state is
14
+ * synced through `onChangeText`.
15
15
  */
16
16
  function Input({ value, ...props }) {
17
17
  return /* @__PURE__ */ jsx(Host, {
@@ -3,68 +3,68 @@ import { ReactNode } from "react";
3
3
  export type SheetShellProps = {
4
4
  open: boolean;
5
5
  onOpenChange: (open: boolean) => void;
6
- /** 背面タップで閉じるか(既定 true)。 */
6
+ /** Whether tapping the backdrop closes it (default true). */
7
7
  dismissOnBackdropPress?: boolean;
8
- /** 画面高に対する最大の高さ(既定 0.85)。 */
8
+ /** The maximum height as a ratio of the screen height (default 0.85). */
9
9
  maxHeightRatio?: number;
10
10
  /**
11
- * 閉じ切って `Modal` を畳んだ後に**1 度だけ**呼ばれる(開いたことが無いとき・再描画のたびには呼ばれない)。
12
- * **次のシートを開くときはここで開くこと。**
13
- * `open` を false にした直後に別のシートを開くと、閉じるアニメーションの間だけ `Modal` が
14
- * 2 枚並び、iOS は後から出したほうを出さない(何も起きないように見える)。
11
+ * Called **exactly once** after it has fully closed and the `Modal` has been dismissed (not called if it was never opened, nor on every re-render).
12
+ * **Open the next sheet from here.**
13
+ * If another sheet is opened right after setting `open` to false, two `Modal`s coexist for the duration of the
14
+ * closing animation, and iOS does not present the later one (it looks like nothing happens).
15
15
  *
16
- * **確認ダイアログ(`once/confirm`)も `Modal`。** シートの中から確認を出すときも
17
- * 同じ理由でここを使うこと。
16
+ * **A confirm dialog (`once/confirm`) is also a `Modal`.** When showing a confirmation from inside a sheet,
17
+ * use this for the same reason.
18
18
  */
19
19
  onClosed?: () => void;
20
20
  /**
21
- * ダイアログの名前になる見出しの `id`(`SheetHeader` の `titleId` と同じ値)。`aria-label` が無いときに必須級
22
- * (名前の無いダイアログは支援技術に「ダイアログ」としか伝わらない)。
21
+ * The `id` of the heading that names the dialog (the same value as `SheetHeader`'s `titleId`). Practically required when there is no `aria-label`
22
+ * (a dialog without a name is conveyed to assistive technology only as "dialog").
23
23
  */
24
24
  "aria-labelledby"?: string;
25
- /** 見出しが文字列でないとき、または見出しを出さないときの、ダイアログの名前。 */
25
+ /** The dialog's name when the heading is not a string or no heading is shown. */
26
26
  "aria-label"?: string;
27
- /** 補足の `id`(`SheetHeader` の `descriptionId` と同じ値)。 */
27
+ /** The `id` of the supplementary text (the same value as `SheetHeader`'s `descriptionId`). */
28
28
  "aria-describedby"?: string;
29
29
  children: ReactNode;
30
30
  };
31
31
  /**
32
- * `Modal` の `animationType="slide"` は使わない。あれは**スクリムごと**競り上がるので、
33
- * 暗幕が下から生えてくる安っぽい見え方になる。ここではスクリムのフェードとパネルの
34
- * スライドを別々の曲線で動かす。
32
+ * Do not use `Modal`'s `animationType="slide"`. It slides up **together with the scrim**,
33
+ * so the dark overlay appears to grow from the bottom and looks cheap. Here the scrim's fade and the panel's
34
+ * slide are driven by separate curves.
35
35
  *
36
- * ダイアログの役割(`role="dialog"`・`aria-modal`)・フォーカスの閉じ込め・Esc(`onRequestClose`)は `Modal` が持つ
37
- * (react-native-web の `Modal` は役割と閉じ込めを出す。名前は持たないので `aria-label(ledby)` を渡す)。
36
+ * The dialog role (`role="dialog"`, `aria-modal`), focus trapping and Esc (`onRequestClose`) are provided by `Modal`
37
+ * (react-native-web's `Modal` emits the role and the trap. It has no name of its own, so pass `aria-label(ledby)`).
38
38
  */
39
39
  export declare function SheetShell({ open, onOpenChange, dismissOnBackdropPress, maxHeightRatio, onClosed, "aria-labelledby": ariaLabelledBy, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, children }: SheetShellProps): import("react").JSX.Element | null;
40
40
  export type SheetHeaderProps = {
41
41
  title?: ReactNode;
42
42
  description?: ReactNode;
43
- /** 閉じるボタンの読み上げ名(既定は「閉じる」)。 */
43
+ /** Screen reader name of the close button (the default is the Japanese "close" label). */
44
44
  closeLabel?: string;
45
45
  onClose: () => void;
46
- /** 見出しの `id`。`SheetShell` の `aria-labelledby` に同じ値を渡すと、見出しがダイアログの名前になる。 */
46
+ /** The `id` of the heading. Pass the same value to `SheetShell`'s `aria-labelledby` and the heading becomes the dialog's name. */
47
47
  titleId?: string;
48
- /** 補足の `id`。`SheetShell` の `aria-describedby` に同じ値を渡す。 */
48
+ /** The `id` of the supplementary text. Pass the same value to `SheetShell`'s `aria-describedby`. */
49
49
  descriptionId?: string;
50
50
  };
51
- /** 掴む合図(グラバー)・見出し・閉じるボタン。 */
51
+ /** The grab cue (grabber), the heading and the close button. */
52
52
  export declare function SheetHeader({ title, description, closeLabel, onClose, titleId, descriptionId }: SheetHeaderProps): import("react").JSX.Element;
53
53
  export type SheetScrollProps = {
54
- /** 中身に余白を敷くか(既定 true)。端まで敷き詰める行リストでは false。 */
54
+ /** Whether to pad the content (default true). Use false for a row list that fills edge to edge. */
55
55
  padded?: boolean;
56
- /** フッターがあるか。無いときは中身の下端で safe-area を吸う。 */
56
+ /** Whether there is a footer. When there is none, the content's bottom edge absorbs the safe area. */
57
57
  hasFooter?: boolean;
58
58
  children: ReactNode;
59
59
  };
60
60
  /**
61
- * シートの本文。
61
+ * The sheet body.
62
62
  *
63
- * `contentContainerClassName` は react-native-css で**効かない**(無言で padding が消えて
64
- * 文字が端で切れる)。余白は必ず `contentContainerStyle` に書くこと。
63
+ * `contentContainerClassName` **does not work** with react-native-css (the padding silently disappears and
64
+ * text gets clipped at the edge). Always write padding in `contentContainerStyle`.
65
65
  */
66
66
  export declare function SheetScroll({ padded, hasFooter, children }: SheetScrollProps): import("react").JSX.Element;
67
- /** シートのフッター。ホームインジケータに潜らないよう safe-area を足す。 */
67
+ /** The sheet footer. Adds the safe area so it does not slip under the home indicator. */
68
68
  export declare function SheetFooter({ children }: {
69
69
  children: ReactNode;
70
70
  }): import("react").JSX.Element;