@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.
- package/README.md +40 -40
- package/dist/native/analytics/animation.d.ts +1 -1
- package/dist/native/analytics/animation.js +1 -1
- package/dist/native/analytics/chart.types.d.ts +3 -3
- package/dist/native/analytics/metric-card.d.ts +3 -3
- package/dist/native/analytics/metric-card.js +3 -3
- package/dist/native/analytics/multi-line-chart.d.ts +9 -8
- package/dist/native/analytics/multi-line-chart.js +14 -13
- package/dist/native/analytics/pie-chart.d.ts +7 -7
- package/dist/native/analytics/pie-chart.js +8 -8
- package/dist/native/analytics/single-number.d.ts +4 -4
- package/dist/native/analytics/single-number.js +2 -2
- package/dist/native/atom/avatar.d.ts +6 -6
- package/dist/native/atom/avatar.js +2 -2
- package/dist/native/atom/badge.d.ts +5 -5
- package/dist/native/atom/button.d.ts +12 -12
- package/dist/native/atom/button.js +8 -8
- package/dist/native/atom/checkbox.d.ts +4 -4
- package/dist/native/atom/checkbox.js +2 -2
- package/dist/native/atom/colored-value.d.ts +4 -4
- package/dist/native/atom/colored-value.js +4 -4
- package/dist/native/atom/image.d.ts +7 -7
- package/dist/native/atom/image.js +2 -2
- package/dist/native/atom/label.d.ts +5 -5
- package/dist/native/atom/label.js +2 -2
- package/dist/native/atom/link.d.ts +5 -5
- package/dist/native/atom/link.js +5 -5
- package/dist/native/atom/readout.d.ts +7 -7
- package/dist/native/atom/readout.js +3 -3
- package/dist/native/atom/search-input.d.ts +2 -2
- package/dist/native/atom/search-input.js +2 -2
- package/dist/native/atom/select.d.ts +14 -14
- package/dist/native/atom/select.js +8 -8
- package/dist/native/atom/separator.d.ts +2 -3
- package/dist/native/atom/separator.js +2 -3
- package/dist/native/atom/skeleton.d.ts +3 -3
- package/dist/native/atom/skeleton.js +3 -3
- package/dist/native/atom/slider.d.ts +6 -6
- package/dist/native/atom/slider.js +3 -3
- package/dist/native/atom/spinner.d.ts +4 -4
- package/dist/native/atom/spinner.js +2 -2
- package/dist/native/atom/switch.d.ts +4 -4
- package/dist/native/atom/switch.js +3 -3
- package/dist/native/atom/symbol.d.ts +7 -7
- package/dist/native/atom/symbol.js +7 -7
- package/dist/native/atom/symbol.types.d.ts +8 -8
- package/dist/native/atom/symbol.types.js +7 -7
- package/dist/native/atom/text-field.d.ts +15 -15
- package/dist/native/atom/text-field.js +5 -5
- package/dist/native/atom/theme-toggle.d.ts +7 -7
- package/dist/native/atom/theme-toggle.js +4 -4
- package/dist/native/atom/timezone-select.d.ts +5 -5
- package/dist/native/atom/timezone-select.js +4 -4
- package/dist/native/atom/typography.d.ts +2 -2
- package/dist/native/atom/typography.js +2 -2
- package/dist/native/base/button.d.ts +13 -13
- package/dist/native/base/button.js +4 -4
- package/dist/native/base/form.d.ts +15 -15
- package/dist/native/base/form.js +11 -11
- package/dist/native/base/glass-card.d.ts +3 -3
- package/dist/native/base/glass-card.js +3 -3
- package/dist/native/base/input.d.ts +8 -8
- package/dist/native/base/input.js +7 -7
- package/dist/native/base/sheet.d.ts +27 -27
- package/dist/native/base/sheet.js +15 -15
- package/dist/native/form/checkbox.d.ts +3 -3
- package/dist/native/form/checkbox.js +2 -2
- package/dist/native/form/date-picker.d.ts +9 -9
- package/dist/native/form/date-picker.js +9 -9
- package/dist/native/form/form.d.ts +5 -6
- package/dist/native/form/form.js +4 -5
- package/dist/native/form/radio-group.d.ts +5 -5
- package/dist/native/form/radio-group.js +4 -4
- package/dist/native/form/select.d.ts +2 -2
- package/dist/native/form/select.js +2 -2
- package/dist/native/form/slider.d.ts +2 -2
- package/dist/native/form/slider.js +2 -2
- package/dist/native/form/switch.d.ts +2 -2
- package/dist/native/form/switch.js +2 -2
- package/dist/native/form/text-area.d.ts +2 -2
- package/dist/native/form/text-area.js +1 -1
- package/dist/native/form/text-input.d.ts +5 -5
- package/dist/native/form/text-input.js +8 -8
- package/dist/native/layout/accordion.d.ts +5 -5
- package/dist/native/layout/accordion.js +2 -2
- package/dist/native/layout/card.d.ts +8 -8
- package/dist/native/layout/card.js +3 -3
- package/dist/native/layout/description.d.ts +2 -2
- package/dist/native/layout/description.js +2 -2
- package/dist/native/layout/error.d.ts +5 -5
- package/dist/native/layout/error.js +2 -2
- package/dist/native/layout/information.d.ts +4 -4
- package/dist/native/layout/information.js +3 -3
- package/dist/native/layout/locked.d.ts +15 -15
- package/dist/native/layout/locked.js +7 -7
- package/dist/native/layout/modal.d.ts +8 -8
- package/dist/native/layout/modal.js +5 -5
- package/dist/native/layout/not-found.d.ts +4 -4
- package/dist/native/layout/not-found.js +3 -3
- package/dist/native/layout/page-frame.d.ts +8 -8
- package/dist/native/layout/page-frame.js +3 -3
- package/dist/native/layout/panel.d.ts +5 -5
- package/dist/native/layout/panel.js +5 -5
- package/dist/native/layout/reorderable-list.d.ts +14 -14
- package/dist/native/layout/reorderable-list.js +10 -10
- package/dist/native/layout/sheet.d.ts +10 -10
- package/dist/native/layout/sheet.js +4 -4
- package/dist/native/layout/simple-dialog.d.ts +3 -3
- package/dist/native/layout/simple-dialog.js +2 -2
- package/dist/native/layout/simple-table.d.ts +18 -18
- package/dist/native/layout/simple-table.js +1 -1
- package/dist/native/layout/tab-bar.d.ts +10 -10
- package/dist/native/layout/tab-bar.js +4 -4
- package/dist/native/layout/tabs.d.ts +6 -6
- package/dist/native/layout/tabs.js +4 -4
- package/dist/native/layout/tuning-panel.d.ts +10 -10
- package/dist/native/layout/tuning-panel.js +15 -15
- package/dist/native/lib/autocomplete.d.ts +1 -1
- package/dist/native/lib/autocomplete.js +1 -1
- package/dist/native/lib/breakpoints.d.ts +3 -3
- package/dist/native/lib/breakpoints.js +3 -3
- package/dist/native/lib/chart-palette.d.ts +2 -2
- package/dist/native/lib/chart-palette.js +2 -2
- package/dist/native/lib/confirm.d.ts +15 -16
- package/dist/native/lib/confirm.js +9 -10
- package/dist/native/lib/control.d.ts +9 -9
- package/dist/native/lib/external-store.d.ts +4 -5
- package/dist/native/lib/keyboard.d.ts +7 -7
- package/dist/native/lib/keyboard.js +7 -7
- package/dist/native/lib/labels.d.ts +6 -6
- package/dist/native/lib/labels.js +6 -6
- package/dist/native/lib/loading.d.ts +3 -3
- package/dist/native/lib/loading.js +3 -3
- package/dist/native/lib/network.d.ts +5 -6
- package/dist/native/lib/network.js +5 -6
- package/dist/native/lib/scheme.d.ts +7 -7
- package/dist/native/lib/scheme.js +3 -3
- package/dist/native/lib/snackbar.d.ts +12 -13
- package/dist/native/lib/snackbar.js +7 -8
- package/dist/native/lib/theme.d.ts +15 -15
- package/dist/native/lib/theme.js +15 -15
- package/dist/native/lib/timezone.d.ts +13 -13
- package/dist/native/lib/timezone.js +13 -13
- package/dist/native/lib/token-color.d.ts +1 -1
- package/dist/native/lib/token-color.js +1 -1
- package/dist/native/lib/tuning-context.d.ts +2 -2
- package/dist/native/lib/tuning.d.ts +10 -10
- package/dist/native/lib/tuning.js +8 -8
- package/dist/native/lib/typography.d.ts +3 -3
- package/dist/native/lib/typography.js +3 -3
- package/dist/native/lib/utils.d.ts +3 -3
- package/dist/native/lib/utils.js +3 -3
- package/dist/native/once/confirm.d.ts +2 -2
- package/dist/native/once/confirm.js +2 -2
- package/dist/native/once/error-boundary.d.ts +3 -3
- package/dist/native/once/error-boundary.js +2 -2
- package/dist/native/once/loading-lock.d.ts +3 -3
- package/dist/native/once/loading-lock.js +3 -3
- package/dist/native/once/offline-banner.d.ts +6 -6
- package/dist/native/once/offline-banner.js +5 -5
- package/dist/native/once/snackbar.d.ts +7 -7
- package/dist/native/once/snackbar.js +5 -5
- package/dist/native/styles.css +21 -21
- package/dist/shared/analytics.d.ts +23 -23
- package/dist/shared/button.d.ts +1 -1
- package/dist/shared/form.d.ts +7 -7
- package/dist/shared/form.js +2 -2
- package/dist/tokens/contrast-pairs.d.ts +9 -9
- package/dist/tokens/contrast-pairs.js +10 -10
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/styles.gen.css +87 -87
- package/dist/tokens/tokens.gen.d.ts +2 -2
- package/dist/tokens/tokens.gen.js +2 -2
- package/dist/tuning/catalog.d.ts +8 -8
- package/dist/tuning/catalog.js +9 -9
- package/dist/tuning/color.d.ts +4 -4
- package/dist/tuning/color.js +5 -5
- package/dist/tuning/css.d.ts +13 -13
- package/dist/tuning/css.js +17 -17
- package/dist/tuning/model.d.ts +11 -11
- package/dist/tuning/model.js +11 -11
- package/dist/tuning/native.d.ts +18 -18
- package/dist/tuning/native.js +18 -18
- package/dist/tuning/schema.d.ts +15 -15
- package/dist/tuning/schema.js +22 -22
- package/dist/tuning/types.d.ts +25 -25
- package/dist/tuning/types.js +6 -6
- package/dist/web/analytics/line-chart.d.ts +6 -6
- package/dist/web/analytics/line-chart.js +3 -3
- package/dist/web/analytics/metric-card.d.ts +6 -6
- package/dist/web/analytics/metric-card.js +5 -5
- package/dist/web/analytics/multi-line-chart.d.ts +23 -23
- package/dist/web/analytics/multi-line-chart.js +33 -33
- package/dist/web/atom/avatar.d.ts +1 -1
- package/dist/web/atom/checkbox.d.ts +6 -6
- package/dist/web/atom/checkbox.js +2 -2
- package/dist/web/atom/colored-value.d.ts +4 -4
- package/dist/web/atom/colored-value.js +4 -4
- package/dist/web/atom/help.d.ts +1 -1
- package/dist/web/atom/segmented-control.d.ts +13 -14
- package/dist/web/atom/segmented-control.js +6 -7
- package/dist/web/atom/select.d.ts +7 -7
- package/dist/web/atom/select.js +5 -5
- package/dist/web/atom/slider.d.ts +3 -3
- package/dist/web/atom/slider.js +2 -2
- package/dist/web/atom/switch.d.ts +3 -3
- package/dist/web/atom/text-area.d.ts +9 -8
- package/dist/web/atom/text-area.js +9 -8
- package/dist/web/atom/text-field.d.ts +5 -4
- package/dist/web/atom/text-field.js +5 -4
- package/dist/web/atom/toggle-chip.d.ts +6 -6
- package/dist/web/atom/toggle-chip.js +4 -4
- package/dist/web/atom/tooltip.d.ts +6 -6
- package/dist/web/atom/tooltip.js +2 -2
- package/dist/web/base/accordion.js +1 -1
- package/dist/web/base/breadcrumb.d.ts +1 -1
- package/dist/web/base/breadcrumb.js +1 -1
- package/dist/web/base/card.d.ts +3 -3
- package/dist/web/base/card.js +2 -2
- package/dist/web/base/dialog.d.ts +1 -1
- package/dist/web/base/dialog.js +1 -1
- package/dist/web/base/form.d.ts +7 -7
- package/dist/web/base/form.js +5 -5
- package/dist/web/base/pagination.d.ts +5 -5
- package/dist/web/base/pagination.js +1 -1
- package/dist/web/base/sheet.d.ts +1 -1
- package/dist/web/base/sheet.js +1 -1
- package/dist/web/base/slider.d.ts +1 -1
- package/dist/web/base/sonner.d.ts +2 -2
- package/dist/web/base/sonner.js +2 -2
- package/dist/web/base/spinner.js +1 -1
- package/dist/web/form/checkbox.d.ts +8 -8
- package/dist/web/form/checkbox.js +3 -3
- package/dist/web/form/radio-group.js +3 -3
- package/dist/web/form/select.js +1 -1
- package/dist/web/form/slider.d.ts +3 -3
- package/dist/web/form/slider.js +3 -3
- package/dist/web/form/switch.d.ts +3 -3
- package/dist/web/form/switch.js +4 -4
- package/dist/web/form/text-area.js +1 -1
- package/dist/web/form/text-input.d.ts +1 -1
- package/dist/web/form/text-input.js +1 -1
- package/dist/web/layout/accordion.d.ts +5 -5
- package/dist/web/layout/accordion.js +2 -2
- package/dist/web/layout/alert-modal.d.ts +11 -11
- package/dist/web/layout/alert-modal.js +7 -7
- package/dist/web/layout/card.d.ts +1 -1
- package/dist/web/layout/information.d.ts +9 -9
- package/dist/web/layout/information.js +7 -7
- package/dist/web/layout/modal.d.ts +1 -1
- package/dist/web/layout/page-frame.d.ts +14 -14
- package/dist/web/layout/page-frame.js +7 -7
- package/dist/web/layout/scroll-area.d.ts +1 -1
- package/dist/web/layout/sheet.d.ts +4 -4
- package/dist/web/layout/simple-table.d.ts +18 -18
- package/dist/web/layout/simple-table.js +2 -2
- package/dist/web/layout/tabs.d.ts +4 -4
- package/dist/web/layout/titled-modal.d.ts +10 -11
- package/dist/web/layout/titled-modal.js +7 -8
- package/dist/web/lib/css-vars.d.ts +6 -6
- package/dist/web/lib/css-vars.js +5 -5
- package/dist/web/lib/dialog.d.ts +4 -4
- package/dist/web/lib/labels.d.ts +8 -8
- package/dist/web/lib/labels.js +8 -8
- package/dist/web/lib/modal-open-focus.d.ts +7 -7
- package/dist/web/lib/modal-open-focus.js +9 -9
- package/dist/web/lib/restore-focus.d.ts +4 -4
- package/dist/web/lib/restore-focus.js +4 -4
- package/dist/web/styles.css +33 -33
- 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
|
-
/**
|
|
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
|
-
*
|
|
15
|
-
* RN
|
|
16
|
-
* web
|
|
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`
|
|
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
|
-
/**
|
|
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
|
|
31
|
+
* An identifier for targeting the field uniquely from E2E (becomes accessibilityIdentifier on iOS).
|
|
32
32
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
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
|
-
*
|
|
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`
|
|
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
|
-
*
|
|
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`
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
15
|
-
*
|
|
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
|
-
*
|
|
18
|
-
* `preference`
|
|
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
|
-
*
|
|
11
|
-
*
|
|
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
|
-
*
|
|
14
|
-
* `preference`
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
9
|
+
* A Select for choosing a time zone (IANA string). Same name and props as the web atom/timezone-select.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* Hermes
|
|
13
|
-
*
|
|
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
|
-
*
|
|
8
|
+
* A Select for choosing a time zone (IANA string). Same name and props as the web atom/timezone-select.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* Hermes
|
|
12
|
-
*
|
|
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
|
-
*
|
|
10
|
-
*
|
|
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
|
-
*
|
|
9
|
-
*
|
|
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
|
-
*
|
|
7
|
-
* iOS 26
|
|
8
|
-
* - `glass`: iOS 26
|
|
9
|
-
* -
|
|
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
|
-
*
|
|
41
|
-
*
|
|
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
|
-
*
|
|
46
|
-
*
|
|
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
|
|
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
|
-
*
|
|
54
|
-
* `Button`
|
|
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
|
|
57
|
-
*
|
|
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
|
-
*
|
|
32
|
-
* `Button`
|
|
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
|
|
35
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
7
|
-
* `FormControl`
|
|
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
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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`
|
|
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
|
-
*
|
|
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`
|
|
50
|
-
*
|
|
51
|
-
* - `described`: `FormDescription`
|
|
52
|
-
* - `id`:
|
|
53
|
-
*
|
|
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
|
-
*
|
|
67
|
-
* web
|
|
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;
|
package/dist/native/base/form.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
14
|
-
* `FormControl`
|
|
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
|
-
*
|
|
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`
|
|
73
|
-
*
|
|
74
|
-
* - `described`: `FormDescription`
|
|
75
|
-
* - `id`:
|
|
76
|
-
*
|
|
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
|
-
*
|
|
99
|
-
* web
|
|
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
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
18
|
-
*
|
|
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
|
|
21
|
-
*
|
|
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
|
|
24
|
-
* `defaultValue
|
|
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
|
-
*
|
|
7
|
-
*
|
|
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
|
|
10
|
-
*
|
|
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
|
|
13
|
-
* `defaultValue
|
|
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
|
-
/**
|
|
6
|
+
/** Whether tapping the backdrop closes it (default true). */
|
|
7
7
|
dismissOnBackdropPress?: boolean;
|
|
8
|
-
/**
|
|
8
|
+
/** The maximum height as a ratio of the screen height (default 0.85). */
|
|
9
9
|
maxHeightRatio?: number;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `open`
|
|
14
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
/**
|
|
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`
|
|
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
|
-
*
|
|
37
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
54
|
+
/** Whether to pad the content (default true). Use false for a row list that fills edge to edge. */
|
|
55
55
|
padded?: boolean;
|
|
56
|
-
/**
|
|
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`
|
|
64
|
-
*
|
|
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
|
-
/**
|
|
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;
|