@hjmds/react-native 1.12.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +15 -0
  2. package/dist/actions.d.ts +30 -2
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +28 -5
  5. package/dist/actions.js.map +1 -1
  6. package/dist/agreement.d.ts +8 -1
  7. package/dist/agreement.d.ts.map +1 -1
  8. package/dist/agreement.js +16 -3
  9. package/dist/agreement.js.map +1 -1
  10. package/dist/asset.d.ts +15 -2
  11. package/dist/asset.d.ts.map +1 -1
  12. package/dist/asset.js +7 -4
  13. package/dist/asset.js.map +1 -1
  14. package/dist/bottom-info.d.ts +8 -1
  15. package/dist/bottom-info.d.ts.map +1 -1
  16. package/dist/bottom-info.js +4 -2
  17. package/dist/bottom-info.js.map +1 -1
  18. package/dist/calendar.d.ts +3 -1
  19. package/dist/calendar.d.ts.map +1 -1
  20. package/dist/calendar.js +2 -2
  21. package/dist/calendar.js.map +1 -1
  22. package/dist/carousel.d.ts +8 -1
  23. package/dist/carousel.d.ts.map +1 -1
  24. package/dist/carousel.js +4 -2
  25. package/dist/carousel.js.map +1 -1
  26. package/dist/collapsible.d.ts +8 -1
  27. package/dist/collapsible.d.ts.map +1 -1
  28. package/dist/collapsible.js +9 -3
  29. package/dist/collapsible.js.map +1 -1
  30. package/dist/data-display.d.ts +146 -13
  31. package/dist/data-display.d.ts.map +1 -1
  32. package/dist/data-display.js +58 -29
  33. package/dist/data-display.js.map +1 -1
  34. package/dist/date-picker.d.ts +8 -1
  35. package/dist/date-picker.d.ts.map +1 -1
  36. package/dist/date-picker.js +10 -3
  37. package/dist/date-picker.js.map +1 -1
  38. package/dist/duration-field.d.ts +4 -1
  39. package/dist/duration-field.d.ts.map +1 -1
  40. package/dist/duration-field.js +2 -2
  41. package/dist/duration-field.js.map +1 -1
  42. package/dist/evidence.d.ts +1 -1
  43. package/dist/evidence.js +1 -1
  44. package/dist/feedback.d.ts +89 -14
  45. package/dist/feedback.d.ts.map +1 -1
  46. package/dist/feedback.js +25 -16
  47. package/dist/feedback.js.map +1 -1
  48. package/dist/file-picker.d.ts +8 -1
  49. package/dist/file-picker.d.ts.map +1 -1
  50. package/dist/file-picker.js +4 -2
  51. package/dist/file-picker.js.map +1 -1
  52. package/dist/forms.d.ts +28 -4
  53. package/dist/forms.d.ts.map +1 -1
  54. package/dist/forms.js +19 -8
  55. package/dist/forms.js.map +1 -1
  56. package/dist/heading.d.ts +8 -1
  57. package/dist/heading.d.ts.map +1 -1
  58. package/dist/heading.js +4 -2
  59. package/dist/heading.js.map +1 -1
  60. package/dist/image-viewer.d.ts.map +1 -1
  61. package/dist/image-viewer.js +11 -3
  62. package/dist/image-viewer.js.map +1 -1
  63. package/dist/index.d.ts +1 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/inputs.d.ts +66 -3
  67. package/dist/inputs.d.ts.map +1 -1
  68. package/dist/inputs.js +135 -49
  69. package/dist/inputs.js.map +1 -1
  70. package/dist/internal/deprecated-style.d.ts +8 -0
  71. package/dist/internal/deprecated-style.d.ts.map +1 -0
  72. package/dist/internal/deprecated-style.js +34 -0
  73. package/dist/internal/deprecated-style.js.map +1 -0
  74. package/dist/internal/field-frame.d.ts +2 -1
  75. package/dist/internal/field-frame.d.ts.map +1 -1
  76. package/dist/internal/field-frame.js +4 -2
  77. package/dist/internal/field-frame.js.map +1 -1
  78. package/dist/internal/field-private.d.ts +11 -0
  79. package/dist/internal/field-private.d.ts.map +1 -0
  80. package/dist/internal/field-private.js +2 -0
  81. package/dist/internal/field-private.js.map +1 -0
  82. package/dist/internal/list-row-private.d.ts +10 -0
  83. package/dist/internal/list-row-private.d.ts.map +1 -0
  84. package/dist/internal/list-row-private.js +2 -0
  85. package/dist/internal/list-row-private.js.map +1 -0
  86. package/dist/internal/message-reactions.d.ts +21 -0
  87. package/dist/internal/message-reactions.d.ts.map +1 -0
  88. package/dist/internal/message-reactions.js +49 -0
  89. package/dist/internal/message-reactions.js.map +1 -0
  90. package/dist/internal/recipe-button.d.ts +6 -5
  91. package/dist/internal/recipe-button.d.ts.map +1 -1
  92. package/dist/internal/recipe-button.js +22 -7
  93. package/dist/internal/recipe-button.js.map +1 -1
  94. package/dist/internal/spinner.d.ts +15 -0
  95. package/dist/internal/spinner.d.ts.map +1 -0
  96. package/dist/internal/spinner.js +12 -0
  97. package/dist/internal/spinner.js.map +1 -0
  98. package/dist/masonry.d.ts +3 -1
  99. package/dist/masonry.d.ts.map +1 -1
  100. package/dist/masonry.js +3 -3
  101. package/dist/masonry.js.map +1 -1
  102. package/dist/mentions.d.ts +4 -0
  103. package/dist/mentions.d.ts.map +1 -1
  104. package/dist/mentions.js +8 -2
  105. package/dist/mentions.js.map +1 -1
  106. package/dist/navigation.d.ts +72 -4
  107. package/dist/navigation.d.ts.map +1 -1
  108. package/dist/navigation.js +39 -21
  109. package/dist/navigation.js.map +1 -1
  110. package/dist/number-field.d.ts +21 -0
  111. package/dist/number-field.d.ts.map +1 -1
  112. package/dist/number-field.js +7 -2
  113. package/dist/number-field.js.map +1 -1
  114. package/dist/overlays.d.ts +30 -2
  115. package/dist/overlays.d.ts.map +1 -1
  116. package/dist/overlays.js +100 -18
  117. package/dist/overlays.js.map +1 -1
  118. package/dist/primitives.d.ts +19 -3
  119. package/dist/primitives.d.ts.map +1 -1
  120. package/dist/primitives.js +12 -6
  121. package/dist/primitives.js.map +1 -1
  122. package/dist/provider-button.d.ts +8 -1
  123. package/dist/provider-button.d.ts.map +1 -1
  124. package/dist/provider-button.js +4 -1
  125. package/dist/provider-button.js.map +1 -1
  126. package/dist/qr-code.d.ts +4 -1
  127. package/dist/qr-code.d.ts.map +1 -1
  128. package/dist/qr-code.js +2 -2
  129. package/dist/qr-code.js.map +1 -1
  130. package/dist/reaction-picker.d.ts +4 -2
  131. package/dist/reaction-picker.d.ts.map +1 -1
  132. package/dist/reaction-picker.js +18 -6
  133. package/dist/reaction-picker.js.map +1 -1
  134. package/dist/saved-items.d.ts +21 -0
  135. package/dist/saved-items.d.ts.map +1 -0
  136. package/dist/saved-items.js +16 -0
  137. package/dist/saved-items.js.map +1 -0
  138. package/dist/screen-flows.d.ts +300 -0
  139. package/dist/screen-flows.d.ts.map +1 -0
  140. package/dist/screen-flows.js +164 -0
  141. package/dist/screen-flows.js.map +1 -0
  142. package/dist/screens.d.ts +114 -0
  143. package/dist/screens.d.ts.map +1 -0
  144. package/dist/screens.js +80 -0
  145. package/dist/screens.js.map +1 -0
  146. package/dist/slider.d.ts +21 -0
  147. package/dist/slider.d.ts.map +1 -1
  148. package/dist/slider.js +6 -2
  149. package/dist/slider.js.map +1 -1
  150. package/dist/steps.d.ts +8 -1
  151. package/dist/steps.d.ts.map +1 -1
  152. package/dist/steps.js +4 -2
  153. package/dist/steps.js.map +1 -1
  154. package/dist/tags-input.d.ts +8 -1
  155. package/dist/tags-input.d.ts.map +1 -1
  156. package/dist/tags-input.js +11 -5
  157. package/dist/tags-input.js.map +1 -1
  158. package/dist/toggle-group.d.ts +8 -1
  159. package/dist/toggle-group.d.ts.map +1 -1
  160. package/dist/toggle-group.js +4 -2
  161. package/dist/toggle-group.js.map +1 -1
  162. package/dist/top.d.ts +8 -1
  163. package/dist/top.d.ts.map +1 -1
  164. package/dist/top.js +4 -1
  165. package/dist/top.js.map +1 -1
  166. package/dist/transfer-list.d.ts +8 -1
  167. package/dist/transfer-list.d.ts.map +1 -1
  168. package/dist/transfer-list.js +4 -2
  169. package/dist/transfer-list.js.map +1 -1
  170. package/dist/upload-item.d.ts +8 -1
  171. package/dist/upload-item.d.ts.map +1 -1
  172. package/dist/upload-item.js +4 -2
  173. package/dist/upload-item.js.map +1 -1
  174. package/package.json +21 -3
@@ -0,0 +1,164 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { ScreenLayout } from "./screens.js";
4
+ import { Button, IconButton } from "./actions.js";
5
+ import { Stack, Text, Grid } from "./primitives.js";
6
+ import { SearchField } from "./inputs.js";
7
+ import { Chip, RadioGroup } from "./inputs.js";
8
+ import { AlertDialog, Sheet } from "./overlays.js";
9
+ import { UploadItem } from "./upload-item.js";
10
+ import {} from "@hjmds/design-contracts/components/upload-item";
11
+ import {} from "@hjmds/design-contracts/components/alert-dialog";
12
+ import { validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchEmptyCause, resolveSearchScreenPhase, screenPatternRecipe, searchScreenRecipe } from "@hjmds/design-contracts/screen-patterns";
13
+ import { AccessibilityInfo, ScrollView, View } from "react-native";
14
+ import { ListRow } from "./data-display.js";
15
+ import { Heading } from "./heading.js";
16
+ import { Menu } from "./navigation.js";
17
+ import { EmptyState, Skeleton } from "./feedback.js";
18
+ function Pane({ hidden = false, children }) { return _jsx(View, { style: { flex: 1, display: hidden ? "none" : "flex" }, children: children }); }
19
+ function Action({ action, secondary = false }) { return _jsx(Button, { tone: secondary ? "ghost" : "primary", disabled: !!(action.disabled || action.pending), loading: action.pending ?? false, onPress: action.onAction, children: action.label }); }
20
+ /** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */
21
+ // layoutStyle places the outer host that owns both panes, as on Web, so the screen keeps the same
22
+ // placement while list and detail swap. Passing it to the list ScreenLayout dropped it on detail.
23
+ export function ListDetailScreen({ list, detail, back, refresh, loadMore, layoutStyle, ...screen }) { return _jsxs(View, { style: [{ flex: 1 }, layoutStyle], children: [_jsx(Pane, { hidden: !!detail, children: _jsx(ScreenLayout, { ...screen, actions: refresh ? _jsx(Action, { action: refresh, secondary: true }) : screen.actions, footer: loadMore ? _jsx(Action, { action: loadMore, secondary: true }) : null, children: list }) }), detail ? _jsx(Pane, { children: _jsx(ScreenLayout, { title: detail.title, leading: _jsx(Action, { action: back, secondary: true }), children: detail.content }) }) : null] }); }
24
+ export function EditorScreen({ children, dirty, submitPlacement = "footer", submit, cancel, discard, draftStatus, ...screen }) {
25
+ const [confirm, setConfirm] = useState(false);
26
+ return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, leading: _jsx(Action, { action: { ...cancel, disabled: !!(cancel.disabled || submit.pending), onAction: () => { if (dirty)
27
+ setConfirm(true);
28
+ else
29
+ cancel.onAction(); } }, secondary: true }), actions: submitPlacement === "header" ? _jsx(Action, { action: submit }) : screen.actions, footer: submitPlacement === "header" ? draftStatus : _jsxs(Stack, { gap: "sm", children: [draftStatus, _jsx(Action, { action: submit })] }), children: children }), _jsx(AlertDialog, { open: confirm, onOpenChange: setConfirm, request: { ...discard, mode: "confirm", onConfirm: () => cancel.onAction() } })] });
30
+ }
31
+ export function ProfileScreen({ summary, edit, children, accountActions, ...screen }) { return _jsx(ScreenLayout, { ...screen, children: _jsxs(Stack, { gap: "xl", children: [_jsxs(Stack, { gap: "md", children: [summary, _jsx(Action, { action: edit, secondary: true })] }), children, accountActions] }) }); }
32
+ export function ModerationScreen({ reasonPicker, reasons, reason, onReasonChange, reasonLabel, children, submit, block, ...screen }) { const [confirm, setConfirm] = useState(false); return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, footer: _jsxs(Stack, { gap: "sm", children: [_jsx(Action, { action: { ...submit, disabled: submit.disabled || !!screen.state && screen.state.kind !== "ready" || !reasons.some(item => item.value === reason) } }), block ? _jsx(Action, { action: { ...block.action, onAction: () => setConfirm(true) }, secondary: true }) : null] }), children: _jsxs(Stack, { gap: "lg", children: [reasonPicker ?? (reasons.length ? _jsx(RadioGroup, { accessibilityLabel: reasonLabel, orientation: "vertical", items: reasons, value: reason, onValueChange: value => { if (value)
33
+ onReasonChange(value); } }) : null), children] }) }), block ? _jsx(AlertDialog, { open: confirm, onOpenChange: setConfirm, request: block.confirmation }) : null] }); }
34
+ export function PhotoSourceSheet({ open, onOpenChange, onSelect, labels, disabled = false, cameraAvailable = true }) {
35
+ const queued = useRef(null);
36
+ useEffect(() => () => { queued.current = null; }, []);
37
+ // iOS cannot present a camera/picker over a dismissing Modal. Sheet owns the real
38
+ // dismissal completion (including Android fallback), so a timer is not a safe substitute.
39
+ const select = (source) => { if (disabled || queued.current)
40
+ return; queued.current = source; onOpenChange(false); };
41
+ const complete = () => { const source = queued.current; queued.current = null; if (source && !disabled)
42
+ onSelect(source); };
43
+ return _jsx(Sheet, { open: open, onOpenChange: onOpenChange, title: labels.title, closeLabel: labels.cancel, onDismissComplete: complete, children: _jsxs(Stack, { gap: "sm", children: [_jsx(Button, { tone: "secondary", disabled: disabled, onPress: () => select("library"), children: labels.library }), cameraAvailable ? _jsx(Button, { tone: "secondary", disabled: disabled, onPress: () => select("camera"), children: labels.camera }) : null] }) });
44
+ }
45
+ /** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */
46
+ export function MediaSelectionScreen({ library, selectionSummary, items, add, done, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, ...screen }) { return _jsx(ScreenLayout, { ...screen, actions: _jsx(Action, { action: add, secondary: true }), footer: _jsxs(Stack, { gap: "sm", children: [selectionSummary, _jsx(Action, { action: done })] }), children: library ?? _jsx(Grid, { columns: { compact: 2, expanded: 3 }, gap: { compact: "md" }, children: items.map((item, index) => _jsxs(Stack, { gap: "xs", children: [item.preview, _jsx(UploadItem, { descriptor: item.descriptor, labels: labels, onRetry: onRetry, onCancel: onCancel }), _jsxs(Stack, { axis: "inline", gap: "xxs", layoutStyle: { flexWrap: "wrap" }, children: [_jsx(Button, { accessibilityLabel: moveUpLabel(item), size: "small", tone: "ghost", disabled: index === 0, onPress: () => onMove(item.descriptor.id, -1), children: actionLabels.moveUp }), _jsx(Button, { accessibilityLabel: moveDownLabel(item), size: "small", tone: "ghost", disabled: index === items.length - 1, onPress: () => onMove(item.descriptor.id, 1), children: actionLabels.moveDown }), _jsx(Button, { accessibilityLabel: removeLabel(item), size: "small", tone: "ghost", onPress: () => onRemove(item.descriptor.id), children: actionLabels.remove })] })] }, item.descriptor.id)) }) }); }
47
+ /** Announce only when the text changes; iOS queues it behind the current utterance instead of cutting it off. */
48
+ function useSearchAnnouncement(text) {
49
+ useEffect(() => {
50
+ if (!text)
51
+ return;
52
+ if (AccessibilityInfo.announceForAccessibilityWithOptions)
53
+ AccessibilityInfo.announceForAccessibilityWithOptions(text, { queue: true });
54
+ else
55
+ AccessibilityInfo.announceForAccessibility(text);
56
+ }, [text]);
57
+ }
58
+ function SearchIdleSections({ recent, suggested, legacy, onCommit }) {
59
+ const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];
60
+ // Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.
61
+ if (!visible.length && !suggested?.items.length)
62
+ return _jsx(_Fragment, { children: legacy });
63
+ return _jsxs(Stack, { gap: "xl", children: [legacy, recent && visible.length ? _jsxs(Stack, { gap: "sm", children: [_jsxs(Stack, { axis: "inline", justify: "between", align: "center", gap: "sm", children: [_jsx(Heading, { level: "level5", children: recent.title }), _jsx(Button, { tone: "ghost", size: "small", onPress: recent.onClearAll, children: recent.clearAllLabel })] }), _jsx(Stack, { gap: "xxs", children: visible.map(item => _jsx(ListRow, { density: "compact", leading: recent.icon, title: item, onPress: () => onCommit(item), trailingAction: _jsx(IconButton, { label: recent.removeLabel(item), tone: "ghost", onPress: () => recent.onRemove(item), children: recent.removeIcon ?? _jsx(Text, { tone: "muted", children: "\u00D7" }) }) }, item)) })] }) : null, suggested?.items.length ? _jsx(SearchSuggestedChips, { suggested: suggested, onCommit: onCommit }) : null] });
64
+ }
65
+ function SearchSuggestedChips({ suggested, onCommit }) {
66
+ return _jsxs(Stack, { gap: "sm", children: [_jsx(Heading, { level: "level5", children: suggested.title }), _jsx(Stack, { axis: "inline", wrap: true, gap: "xs", children: suggested.items.map(item => _jsx(Chip, { label: item, onPress: () => onCommit(item) }, item)) })] });
67
+ }
68
+ function SearchSuggestionList({ query, suggestions, onCommit }) {
69
+ const typed = query.trim();
70
+ const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));
71
+ return _jsxs(Stack, { gap: "xxs", children: [_jsx(ListRow, { density: "compact", leading: suggestions.icon, title: suggestions.commitLabel(typed), onPress: () => onCommit(typed) }), items.map(item => _jsx(ListRow, { density: "compact", leading: suggestions.icon, title: item.query, onPress: () => onCommit(item.query) }, item.query))] });
72
+ }
73
+ function SearchResultsHeader({ summary, applied, cause, onSortChange }) {
74
+ const sort = summary?.sort;
75
+ const showCount = summary && cause === "none";
76
+ if (!summary?.notice && !showCount && !applied?.items.length)
77
+ return null;
78
+ return _jsxs(Stack, { gap: "sm", children: [summary?.notice, showCount ? _jsxs(Stack, { axis: "inline", justify: "between", align: "center", gap: "sm", wrap: true, children: [summary.count === null ? _jsx(Skeleton, { shape: "text", width: "30%", accessibilityLabel: summary.loadingLabel }) : _jsx(Text, { tone: "muted", children: summary.countLabel(summary.count) }), sort ? _jsx(Menu, { triggerLabel: sort.triggerLabel, title: sort.label, dismissLabel: sort.dismissLabel, items: sort.options.map(option => ({ id: option.id, label: option.label })), selection: { mode: "single", selectedKey: sort.value, onSelectionChange: next => { if (next)
79
+ onSortChange(next); } }, renderTrigger: trigger => _jsx(Button, { size: "small", tone: "ghost", accessibilityState: trigger.accessibilityState, onPress: trigger.onPress, ...(sort.icon === undefined ? {} : { trailing: sort.icon }), children: sort.triggerLabel }) }) : null] }) : null, applied?.items.length ? _jsxs(Stack, { axis: "inline", wrap: true, gap: "xs", align: "center", children: [applied.items.map(item => _jsx(Chip, { label: item.label, accessibilityLabel: applied.removeLabel(item.label), trailing: applied.removeIcon ?? _jsx(Text, { tone: "muted", children: "\u00D7" }), onPress: () => applied.onRemove(item.key) }, item.key)), _jsx(Button, { tone: "ghost", size: "small", onPress: applied.onClearAll, children: applied.clearAllLabel })] }) : null] });
80
+ }
81
+ function SearchResultsBody({ summary, applied, suggested, cause, onCommit, children }) {
82
+ // Two text lines per row approximate ListRow's two-line height so results do not jump when they land.
83
+ if (summary?.count === null)
84
+ return _jsx(Stack, { gap: "md", children: Array.from({ length: searchScreenRecipe.loadingRows }, (_, index) => _jsxs(Stack, { gap: "xs", children: [_jsx(Skeleton, { shape: "text", width: "70%" }), _jsx(Skeleton, { shape: "text", width: "40%" })] }, index)) });
85
+ if (cause === "none" || !summary?.empty)
86
+ return _jsx(_Fragment, { children: children });
87
+ return _jsxs(Stack, { gap: "lg", children: [_jsx(EmptyState, { density: "compact", announcement: "polite", title: summary.empty.title, ...(summary.empty.description === undefined ? {} : { description: summary.empty.description }), ...(cause === "filters" && applied ? { action: _jsx(Button, { tone: "secondary", onPress: applied.onClearAll, children: applied.clearAllLabel }) } : {}) }), cause === "query" && suggested?.items.length ? _jsx(SearchSuggestedChips, { suggested: suggested, onCommit: onCommit }) : null, children] });
88
+ }
89
+ function SearchFilterTrigger({ sheet, appliedCount }) {
90
+ const trigger = sheet.trigger;
91
+ return _jsx(Chip, { label: trigger.label(appliedCount), accessibilityLabel: trigger.accessibilityLabel(appliedCount), ...(trigger.icon === undefined ? {} : { leading: trigger.icon }), onPress: () => sheet.onOpenChange(true) });
92
+ }
93
+ function SearchFilterSheetView({ sheet }) {
94
+ // The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close.
95
+ const [session, setSession] = useState(null);
96
+ if (sheet.open && !session)
97
+ setSession({ draft: sheet.value });
98
+ if (!sheet.open && session)
99
+ setSession(null);
100
+ const draft = session ? session.draft : sheet.value;
101
+ const setDraft = (next) => setSession(current => current ? { draft: next } : current);
102
+ const count = sheet.count(draft);
103
+ // Native sheet footers stack full-width buttons with the primary action first (sheet.md).
104
+ const footer = _jsxs(Stack, { gap: "sm", children: [_jsx(Button, { fullWidth: true, disabled: count === 0, onPress: () => { sheet.onApply(draft); sheet.onOpenChange(false); }, children: sheet.labels.apply(count) }), _jsx(Button, { fullWidth: true, tone: "secondary", disabled: sheet.isDefault(draft), onPress: () => setDraft(sheet.reset(draft)), children: sheet.labels.reset })] });
105
+ return _jsx(Sheet, { open: sheet.open, onOpenChange: open => sheet.onOpenChange(open), title: sheet.title, closeLabel: sheet.labels.close, size: sheet.size ?? "large", scrollable: true, footer: footer, children: sheet.renderContent(draft, setDraft) });
106
+ }
107
+ /** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */
108
+ export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs = 300, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow = "wrap", queryLabelVisibility = "visible", searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }) {
109
+ // The host owns localized copy. A custom queryField owns its own clear affordance.
110
+ if (queryField == null && !queryClearLabel?.trim())
111
+ throw new TypeError("SearchScreen requires a localized queryClearLabel for its default search field");
112
+ const callback = useRef(onSearch);
113
+ callback.current = onSearch;
114
+ useEffect(() => { const controller = new AbortController(); const timer = setTimeout(() => callback.current(query, { signal: controller.signal }), Math.max(0, debounceMs)); return () => { clearTimeout(timer); controller.abort(); }; }, [query, debounceMs]);
115
+ // Every commit path funnels through here so "only committed searches are recorded" holds at the API:
116
+ // onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.
117
+ const commit = (value) => { const next = resolveSearchCommit(value); if (next === null)
118
+ return; if (next !== query)
119
+ onQueryChange(next); onSubmit?.(next); };
120
+ // onSubmit separates "typing" from "committed" without making products rebuild the default field through
121
+ // queryField (2026-10-06 search redesign, usage/components/search-screen.md). The single-line TextInput keeps
122
+ // its default blur-on-submit, so the keyboard closes and results get the screen. The debounce is left alone.
123
+ const submitProps = onSubmit ? { returnKeyType: "search", onSubmitEditing: (event) => commit(event.nativeEvent.text) } : {};
124
+ // Hidden label: the placeholder names the search target and accessibilityLabel keeps the field named.
125
+ const labelProps = queryLabelVisibility === "hidden" ? { accessibilityLabel: queryLabel, placeholder: queryLabel } : { label: queryLabel };
126
+ const phase = resolveSearchScreenPhase(query, committedQuery);
127
+ const appliedCount = appliedFilters?.items.length ?? 0;
128
+ const cause = phase === "results" && resultSummary ? resolveSearchEmptyCause(resultSummary.count, appliedCount) : "none";
129
+ // Two-step search shows the rail only beside results, and a query-caused zero hides it (no filter can fix it).
130
+ const showRail = (committedQuery === undefined || phase === "results") && cause !== "query";
131
+ const trigger = filterSheet?.trigger ? _jsx(SearchFilterTrigger, { sheet: filterSheet, appliedCount: appliedCount }) : null;
132
+ const rail = !showRail ? null : trigger && filters != null ? _jsxs(Stack, { axis: "inline", gap: "xs", wrap: filtersOverflow === "wrap", children: [trigger, filters] }) : trigger ?? filters;
133
+ // Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.
134
+ // It bleeds over ScreenLayout's notice padding so chips scroll to the screen edge instead of clipping mid-chip.
135
+ const inset = screen.contentInset === "none" ? 0 : screenPatternRecipe.padding;
136
+ const filterSlot = rail != null && filtersOverflow === "scroll" ? _jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, keyboardShouldPersistTaps: "handled", style: { marginHorizontal: -inset, flexGrow: 0 }, contentContainerStyle: { paddingHorizontal: inset }, children: rail }) : rail;
137
+ const visibleSuggestions = suggestions?.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible)).length ?? 0;
138
+ const countAnnouncement = phase === "typing" && suggestions ? suggestions.countLabel(visibleSuggestions) : phase === "results" && resultSummary && resultSummary.count !== null ? resultSummary.countLabel(resultSummary.count) : "";
139
+ // Same text as the Web status region: the busy indicator's label is only read when focused, so progress is announced too.
140
+ useSearchAnnouncement(searching && searchingLabel ? searchingLabel : countAnnouncement);
141
+ const scrollView = useRef(null);
142
+ const scrollRef = (node) => { scrollView.current = node; const own = screen.scrollRef; if (typeof own === "function")
143
+ own(node);
144
+ else if (own)
145
+ own.current = node; };
146
+ // A new order starts at the top; the previous offset would land mid-list in unrelated results.
147
+ const changeSort = (id) => { resultSummary?.sort?.onChange(id); scrollView.current?.scrollTo?.({ y: 0, animated: false }); };
148
+ const idle = _jsx(SearchIdleSections, { recent: recentQueries, suggested: suggestedQueries, legacy: recentSearches, onCommit: commit });
149
+ const body = phase === "idle" ? _jsxs(_Fragment, { children: [idle, committedQuery === undefined ? children : null] })
150
+ : phase === "typing" ? (suggestions ? _jsx(SearchSuggestionList, { query: query, suggestions: suggestions, onCommit: commit }) : null)
151
+ : _jsxs(_Fragment, { children: [_jsx(SearchResultsHeader, { summary: resultSummary, applied: appliedFilters, cause: cause, onSortChange: changeSort }), _jsx(SearchResultsBody, { summary: resultSummary, applied: appliedFilters, suggested: suggestedQueries, cause: cause, onCommit: commit, children: children })] });
152
+ return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, scrollRef: scrollRef, notice: _jsxs(Stack, { gap: "sm", children: [queryField ?? _jsx(SearchField, { ...labelProps, clearLabel: queryClearLabel, value: query, onValueChange: onQueryChange, busy: searching ?? false, busyLabel: searchingLabel ?? queryLabel, ...submitProps }), filterSlot, screen.notice] }), children: _jsx(Stack, { gap: "lg", children: body }) }), filterSheet ? _jsx(SearchFilterSheetView, { sheet: filterSheet }) : null] });
153
+ }
154
+ export function PermissionScreen({ status, illustration, explanation, request, settings, continueAction, skip, ...screen }) { const kind = resolvePermissionAction(status); const primary = kind === "request" ? request : kind === "settings" ? settings : kind === "continue" ? continueAction : null; return _jsx(ScreenLayout, { ...screen, footer: _jsxs(Stack, { gap: "sm", children: [primary ? _jsx(Action, { action: primary }) : null, skip ? _jsx(Action, { action: skip, secondary: true }) : null] }), children: _jsxs(Stack, { gap: "xl", align: "center", children: [illustration, explanation] }) }); }
155
+ export function OnboardingScreen({ steps, index, onIndexChange, nextLabel, backLabel, complete, skip, progressLabel, layoutStyle }) { const position = resolveOnboardingStep(steps.length, index); const step = steps[index]; return _jsx(ScreenLayout, { ...(layoutStyle === undefined ? {} : { layoutStyle }), title: step.title, description: step.description, actions: skip ? _jsx(Action, { action: skip, secondary: true }) : null, notice: _jsx(Text, { variant: "caption", tone: "muted", children: progressLabel(index + 1, steps.length) }), footer: _jsxs(Stack, { gap: "sm", children: [_jsx(Action, { action: position.last ? complete : { label: nextLabel, onAction: () => onIndexChange(index + 1) } }), !position.first ? _jsx(Action, { action: { label: backLabel, onAction: () => onIndexChange(index - 1) }, secondary: true }) : null] }), children: step.content }); }
156
+ /** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
157
+ export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadFooter, ...screen }) {
158
+ validateCommentThread(items);
159
+ // The supplied reference joins the author to the first body line and reserves the right edge
160
+ // for one reaction target. Keep legacy rich bodies intact; bodyText opts into that compact flow.
161
+ const row = (item) => _jsxs(Stack, { axis: "inline", align: "start", gap: "sm", children: [item.avatar, _jsxs(Stack, { gap: "xxs", layoutStyle: { flex: 1, minWidth: 0 }, children: [item.bodyText !== undefined ? _jsxs(Text, { children: [_jsx(Text, { emphasis: "strong", children: item.author }), " ", item.bodyText] }) : _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [_jsx(Text, { emphasis: "strong", children: item.author }), _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel })] }), item.body, _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.bodyText !== undefined && item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null, item.likeCountLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.likeCountLabel }) : null, (item.canReply ?? item.parentId === null) ? _jsx(Button, { size: "small", tone: "ghost", disabled: item.replyDisabled ?? false, onPress: () => onReply(item.id), children: replyLabel }) : null] }), item.actions] }), item.likeAction !== undefined ? item.likeAction : _jsx(IconButton, { label: item.likeLabel, tone: "ghost", onPress: () => onLike(item.id), children: item.likeIcon })] }, item.id);
162
+ return _jsx(ScreenLayout, { ...screen, footer: !screen.state || screen.state.kind === "ready" || screen.state.kind === "empty" ? composer : null, children: _jsxs(Stack, { gap: "lg", children: [items.filter(item => item.parentId === null).map(item => { const replies = items.filter(reply => reply.parentId === item.id); return _jsxs(Stack, { gap: "xs", children: [row(item), replies.length ? _jsxs(Stack, { gap: "md", layoutStyle: { marginStart: screenPatternRecipe.sectionGap }, children: [_jsx(Button, { layoutStyle: { alignSelf: "flex-start" }, tone: "ghost", size: "small", accessibilityState: { expanded: expandedIds.includes(item.id) }, onPress: () => onExpandedChange(item.id), children: repliesLabel(replies.length, expandedIds.includes(item.id)) }), expandedIds.includes(item.id) ? replies.map(row) : null] }) : null] }, item.id); }), threadFooter] }) });
163
+ }
164
+ //# sourceMappingURL=screen-flows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,KAAK,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAoD,MAAM,gDAAgD,CAAC;AAClH,OAAO,EAA2B,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,kBAAkB,EAAgG,MAAM,yCAAyC,CAAC;AAC/U,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAmE,MAAM,cAAc,CAAC;AACpI,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,SAAS,IAAI,CAAC,EAAC,MAAM,GAAC,KAAK,EAAC,QAAQ,EAAsC,IAAE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,OAAO,EAAC,MAAM,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,MAAM,EAAC,YAAG,QAAQ,GAAQ,CAAC,CAAA,CAAC;AAI1J,SAAS,MAAM,CAAC,EAAC,MAAM,EAAC,SAAS,GAAC,KAAK,EAA8C,IAAE,OAAO,KAAC,MAAM,IAAC,IAAI,EAAE,SAAS,CAAA,CAAC,CAAA,OAAO,CAAA,CAAC,CAAA,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAE,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,YAAG,MAAM,CAAC,KAAK,GAAU,CAAC,CAAA,CAAC;AAI3Q,uHAAuH;AACvH,kGAAkG;AAClG,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAC,WAAW,EAAC,GAAG,MAAM,EAAuB,IAAE,OAAO,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,EAAC,WAAW,CAAC,aAAE,KAAC,IAAI,IAAC,MAAM,EAAE,CAAC,CAAC,MAAM,YAAE,KAAC,YAAY,OAAK,MAAM,EAAE,OAAO,EAAE,OAAO,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,OAAO,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,IAAI,YAAG,IAAI,GAAgB,GAAO,EAAC,MAAM,CAAA,CAAC,CAAA,KAAC,IAAI,cAAC,KAAC,YAAY,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAE,YAAG,MAAM,CAAC,OAAO,GAAgB,GAAO,CAAA,CAAC,CAAA,IAAI,IAAQ,CAAC,CAAA,CAAC;AAGjgB,MAAM,UAAU,YAAY,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAC,eAAe,GAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,GAAG,MAAM,EAAmB;IACnI,MAAM,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,8BAAE,KAAC,YAAY,OAAK,MAAM,EAAE,OAAO,EAAE,KAAC,MAAM,IAAC,MAAM,EAAE,EAAC,GAAG,MAAM,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAE,MAAM,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAC,GAAE,EAAE,GAAC,IAAG,KAAK;4BAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;4BAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAC,EAAC,EAAE,SAAS,SAAE,EAAE,OAAO,EAAE,eAAe,KAAG,QAAQ,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,MAAM,GAAG,CAAA,CAAC,CAAA,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,KAAG,QAAQ,CAAA,CAAC,CAAA,WAAW,CAAA,CAAC,CAAA,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,WAAW,EAAC,KAAC,MAAM,IAAC,MAAM,EAAE,MAAM,GAAG,IAAQ,YAAG,QAAQ,GAAgB,EAAA,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,EAAC,GAAG,OAAO,EAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,GAAE,EAAE,CAAA,MAAM,CAAC,QAAQ,EAAE,EAAC,GAAG,IAAG,CAAC;AAC5hB,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,EAAC,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,cAAc,EAAC,GAAG,MAAM,EAAoB,IAAE,OAAO,KAAC,YAAY,OAAK,MAAM,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAC,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,OAAO,EAAC,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAE,IAAQ,EAAC,QAAQ,EAAE,cAAc,IAAS,GAAe,CAAC,CAAA,CAAC;AAGzQ,MAAM,UAAU,gBAAgB,CAAC,EAAC,YAAY,EAAC,OAAO,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,QAAQ,EAAC,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,EAAuB,IAAE,MAAM,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,OAAO,8BAAE,KAAC,YAAY,OAAK,MAAM,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAC,KAAC,MAAM,IAAC,MAAM,EAAE,EAAC,GAAG,MAAM,EAAC,QAAQ,EAAC,MAAM,CAAC,QAAQ,IAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAE,MAAM,CAAC,KAAK,CAAC,IAAI,KAAG,OAAO,IAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,EAAE,CAAA,IAAI,CAAC,KAAK,KAAG,MAAM,CAAC,EAAC,GAAG,EAAC,KAAK,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAC,QAAQ,EAAC,GAAE,EAAE,CAAA,UAAU,CAAC,IAAI,CAAC,EAAC,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,IAAI,IAAS,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,YAAY,IAAE,CAAC,OAAO,CAAC,MAAM,CAAA,CAAC,CAAA,KAAC,UAAU,IAAC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAC,UAAU,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,CAAA,EAAE,GAAC,IAAG,KAAK;4BAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,GAAG,CAAA,CAAC,CAAA,IAAI,CAAC,EAAE,QAAQ,IAAS,GAAe,EAAC,KAAK,CAAA,CAAC,CAAA,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,CAAA,CAAC,CAAA,IAAI,IAAI,CAAC,CAAA,CAAC;AAQl0B,MAAM,UAAU,gBAAgB,CAAC,EAAC,IAAI,EAAC,YAAY,EAAC,QAAQ,EAAC,MAAM,EAAC,QAAQ,GAAC,KAAK,EAAC,eAAe,GAAC,IAAI,EAAuB;IAC7H,MAAM,MAAM,GAAC,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAE,EAAE,CAAA,GAAE,EAAE,GAAC,MAAM,CAAC,OAAO,GAAC,IAAI,CAAC,CAAA,CAAC,EAAC,EAAE,CAAC,CAAC;IAC7C,kFAAkF;IAClF,0FAA0F;IAC1F,MAAM,MAAM,GAAC,CAAC,MAAkB,EAAC,EAAE,GAAC,IAAG,QAAQ,IAAE,MAAM,CAAC,OAAO;QAAC,OAAO,CAAA,MAAM,CAAC,OAAO,GAAC,MAAM,CAAC,CAAA,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,CAAC;IACnH,MAAM,QAAQ,GAAC,GAAE,EAAE,GAAC,MAAM,MAAM,GAAC,MAAM,CAAC,OAAO,CAAC,CAAA,MAAM,CAAC,OAAO,GAAC,IAAI,CAAC,CAAA,IAAG,MAAM,IAAE,CAAC,QAAQ;QAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA,CAAC,CAAC;IAC5G,OAAO,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAClJ,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,MAAM,CAAC,SAAS,CAAC,YAAG,MAAM,CAAC,OAAO,GAAU,EACrG,eAAe,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,MAAM,CAAC,QAAQ,CAAC,YAAG,MAAM,CAAC,MAAM,GAAU,CAAA,CAAC,CAAA,IAAI,IAClH,GAAQ,CAAC;AAClB,CAAC;AAID,uGAAuG;AACvG,MAAM,UAAU,oBAAoB,CAAC,EAAC,OAAO,EAAC,gBAAgB,EAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,YAAY,EAAC,WAAW,EAAC,WAAW,EAAC,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,GAAG,MAAM,EAA2B,IAAE,OAAO,KAAC,YAAY,OAAK,MAAM,EAAE,OAAO,EAAE,KAAC,MAAM,IAAC,MAAM,EAAE,GAAG,EAAE,SAAS,SAAE,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,gBAAgB,EAAC,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,GAAG,IAAQ,YAAG,OAAO,IAAE,KAAC,IAAI,IAAC,OAAO,EAAE,EAAC,OAAO,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAE,GAAG,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,YAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAC,KAAK,EAAC,EAAE,CAAA,MAAC,KAAK,IAA0B,GAAG,EAAC,IAAI,aAAE,IAAI,CAAC,OAAO,EAAC,KAAC,UAAU,IAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAA,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,KAAK,EAAC,WAAW,EAAE,EAAC,QAAQ,EAAC,MAAM,EAAC,aAAE,KAAC,MAAM,IAAC,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,KAAK,KAAG,CAAC,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,YAAG,YAAY,CAAC,MAAM,GAAU,EAAA,KAAC,MAAM,IAAC,kBAAkB,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,KAAK,KAAG,KAAK,CAAC,MAAM,GAAC,CAAC,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAC,CAAC,CAAC,YAAG,YAAY,CAAC,QAAQ,GAAU,EAAA,KAAC,MAAM,IAAC,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,GAAE,EAAE,CAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,YAAG,YAAY,CAAC,MAAM,GAAU,IAAQ,KAApsB,IAAI,CAAC,UAAU,CAAC,EAAE,CAA0rB,CAAC,GAAQ,GAAgB,CAAC,CAAA,CAAC;AAgFxrC,iHAAiH;AACjH,SAAS,qBAAqB,CAAC,IAAY;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,iBAAiB,CAAC,mCAAmC;YAAE,iBAAiB,CAAC,mCAAmC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;YACnI,iBAAiB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAEhE;IACC,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;IACjH,yGAAyG;IACzG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM;QAAE,OAAO,4BAAG,MAAM,GAAI,CAAC;IACtE,OAAO,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACnB,MAAM,EACN,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACzC,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,aAC5D,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,YAAE,MAAM,CAAC,KAAK,GAAW,EAChD,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,YAAG,MAAM,CAAC,aAAa,GAAU,IACvF,EACR,KAAC,KAAK,IAAC,GAAG,EAAC,KAAK,YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,OAAO,IAAY,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1I,cAAc,EAAE,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAG,MAAM,CAAC,UAAU,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,uBAAS,GAAc,IAD7H,IAAI,CAC6H,CAAC,GAAS,IACzL,CAAC,CAAC,CAAC,IAAI,EACd,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAC,oBAAoB,IAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,IAC9F,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAwE;IACzH,OAAO,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACpB,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,YAAE,SAAS,CAAC,KAAK,GAAW,EACnD,KAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,QAAC,GAAG,EAAC,IAAI,YAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,IAAI,IAAY,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAhD,IAAI,CAAgD,CAAC,GAAS,IACnI,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAoF;IAC9I,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtH,OAAO,MAAC,KAAK,IAAC,GAAG,EAAC,KAAK,aACrB,KAAC,OAAO,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAI,EAC9H,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,OAAO,IAAkB,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAA/G,IAAI,CAAC,KAAK,CAAyG,CAAC,IAC/I,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAEnE;IACC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACnB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,CAAC,CAAC,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,mBAC7E,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,kBAAkB,EAAE,OAAO,CAAC,YAAY,GAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,YAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAQ,EACxK,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/F,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAC3E,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI;gCAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EACpH,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,KAC9H,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,YAAG,IAAI,CAAC,YAAY,GAAU,GAAI,CAAC,CAAC,CAAC,IAAI,IACnG,CAAC,CAAC,CAAC,IAAI,EACd,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,QAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,aACvE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAC,IAAI,IAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EACpH,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,uBAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IADlE,IAAI,CAAC,GAAG,CAC8D,CAAC,EAC7G,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,OAAO,CAAC,UAAU,YAAG,OAAO,CAAC,aAAa,GAAU,IACzF,CAAC,CAAC,CAAC,IAAI,IACT,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAGlF;IACC,sGAAsG;IACtG,IAAI,OAAO,EAAE,KAAK,KAAK,IAAI;QAAE,OAAO,KAAC,KAAK,IAAC,GAAG,EAAC,IAAI,YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACvH,MAAC,KAAK,IAAa,GAAG,EAAC,IAAI,aAAC,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,GAAG,EAAA,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,GAAG,KAA1F,KAAK,CAA6F,CAAC,GAAS,CAAC;IAC3H,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IAChE,OAAO,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACpB,KAAC,UAAU,IAAC,OAAO,EAAC,SAAS,EAAC,YAAY,EAAC,QAAQ,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KACzK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAC,MAAM,IAAC,IAAI,EAAC,WAAW,EAAC,OAAO,EAAE,OAAO,CAAC,UAAU,YAAG,OAAO,CAAC,aAAa,GAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,EACnJ,KAAK,KAAK,OAAO,IAAI,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAC,oBAAoB,IAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,EACxH,QAAQ,IACH,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAI,EAAE,KAAK,EAAE,YAAY,EAAyD;IAC5G,MAAM,OAAO,GAAG,KAAK,CAAC,OAAQ,CAAC;IAC/B,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,KACvG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAI,CAAC;AACnH,CAAC;AAED,SAAS,qBAAqB,CAAI,EAAE,KAAK,EAAmC;IAC1E,qGAAqG;IACrG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,IAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,0FAA0F;IAC1F,MAAM,MAAM,GAAG,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAC5B,KAAC,MAAM,IAAC,SAAS,QAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAU,EAClJ,KAAC,MAAM,IAAC,SAAS,QAAC,IAAI,EAAC,WAAW,EAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,YAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAU,IACzI,CAAC;IACT,OAAO,KAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAChI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,UAAU,QAAC,MAAM,EAAE,MAAM,YACrD,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,GAC/B,CAAC;AACX,CAAC;AAcD,+GAA+G;AAC/G,MAAM,UAAU,YAAY,CAAc,EAAC,KAAK,EAAC,UAAU,EAAC,UAAU,EAAC,eAAe,EAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,GAAC,GAAG,EAAC,OAAO,EAAC,cAAc,EAAC,QAAQ,EAAC,QAAQ,EAAC,cAAc,EAAC,eAAe,GAAC,MAAM,EAAC,oBAAoB,GAAC,SAAS,EAAC,SAAS,EAAC,cAAc,EAAC,aAAa,EAAC,gBAAgB,EAAC,WAAW,EAAC,aAAa,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,MAAM,EAAsB;IACtX,mFAAmF;IACnF,IAAI,UAAU,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;IAC1J,MAAM,QAAQ,GAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAAA,QAAQ,CAAC,OAAO,GAAC,QAAQ,CAAC;IAC1D,SAAS,CAAC,GAAE,EAAE,GAAC,MAAM,UAAU,GAAC,IAAI,eAAe,EAAE,CAAC,CAAA,MAAM,KAAK,GAAC,UAAU,CAAC,GAAE,EAAE,CAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAC,EAAC,MAAM,EAAC,UAAU,CAAC,MAAM,EAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,UAAU,CAAC,CAAC,CAAC,CAAA,OAAM,GAAE,EAAE,GAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA,CAAC,EAAC,CAAC,KAAK,EAAC,UAAU,CAAC,CAAC,CAAC;IACtO,qGAAqG;IACrG,sHAAsH;IACtH,MAAM,MAAM,GAAC,CAAC,KAAY,EAAC,EAAE,GAAC,MAAM,IAAI,GAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA,IAAG,IAAI,KAAG,IAAI;QAAC,OAAO,CAAA,IAAG,IAAI,KAAG,KAAK;QAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC;IACjJ,yGAAyG;IACzG,8GAA8G;IAC9G,6GAA6G;IAC7G,MAAM,WAAW,GAAC,QAAQ,CAAA,CAAC,CAAA,EAAC,aAAa,EAAC,QAAiB,EAAC,eAAe,EAAC,CAAC,KAA2D,EAAC,EAAE,CAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;IAC9K,sGAAsG;IACtG,MAAM,UAAU,GAAC,oBAAoB,KAAG,QAAQ,CAAA,CAAC,CAAA,EAAC,kBAAkB,EAAC,UAAU,EAAC,WAAW,EAAC,UAAU,EAAC,CAAA,CAAC,CAAA,EAAC,KAAK,EAAC,UAAU,EAAC,CAAC;IAC3H,MAAM,KAAK,GAAC,wBAAwB,CAAC,KAAK,EAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAC,cAAc,EAAE,KAAK,CAAC,MAAM,IAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAC,KAAK,KAAG,SAAS,IAAE,aAAa,CAAA,CAAC,CAAA,uBAAuB,CAAC,aAAa,CAAC,KAAK,EAAC,YAAY,CAAC,CAAA,CAAC,CAAA,MAAM,CAAC;IAC9G,+GAA+G;IAC/G,MAAM,QAAQ,GAAC,CAAC,cAAc,KAAG,SAAS,IAAE,KAAK,KAAG,SAAS,CAAC,IAAE,KAAK,KAAG,OAAO,CAAC;IAChF,MAAM,OAAO,GAAC,WAAW,EAAE,OAAO,CAAA,CAAC,CAAA,KAAC,mBAAmB,IAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,CAAA,CAAC,CAAA,IAAI,CAAC;IAC/G,MAAM,IAAI,GAAC,CAAC,QAAQ,CAAA,CAAC,CAAA,IAAI,CAAA,CAAC,CAAA,OAAO,IAAE,OAAO,IAAE,IAAI,CAAA,CAAC,CAAA,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAE,eAAe,KAAG,MAAM,aAAG,OAAO,EAAE,OAAO,IAAS,CAAA,CAAC,CAAA,OAAO,IAAE,OAAO,CAAC;IAC3J,sGAAsG;IACtG,gHAAgH;IAChH,MAAM,KAAK,GAAC,MAAM,CAAC,YAAY,KAAG,MAAM,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,mBAAmB,CAAC,OAAO,CAAC;IACvE,MAAM,UAAU,GAAC,IAAI,IAAE,IAAI,IAAE,eAAe,KAAG,QAAQ,CAAA,CAAC,CAAA,KAAC,UAAU,IAAC,UAAU,QAAC,8BAA8B,EAAE,KAAK,EAAE,yBAAyB,EAAC,SAAS,EAAC,KAAK,EAAE,EAAC,gBAAgB,EAAC,CAAC,KAAK,EAAC,QAAQ,EAAC,CAAC,EAAC,EAAE,qBAAqB,EAAE,EAAC,iBAAiB,EAAC,KAAK,EAAC,YAAG,IAAI,GAAc,CAAA,CAAC,CAAA,IAAI,CAAC;IAClR,MAAM,kBAAkB,GAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,WAAW,CAAC,UAAU,IAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC;IACxI,MAAM,iBAAiB,GAAC,KAAK,KAAG,QAAQ,IAAE,WAAW,CAAA,CAAC,CAAA,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA,CAAC,CAAA,KAAK,KAAG,SAAS,IAAE,aAAa,IAAE,aAAa,CAAC,KAAK,KAAG,IAAI,CAAA,CAAC,CAAA,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,CAAC,CAAA,EAAE,CAAC;IAC/M,0HAA0H;IAC1H,qBAAqB,CAAC,SAAS,IAAE,cAAc,CAAA,CAAC,CAAA,cAAc,CAAA,CAAC,CAAA,iBAAiB,CAAC,CAAC;IAClF,MAAM,UAAU,GAAC,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAC,CAAC,IAAoB,EAAC,EAAE,GAAC,UAAU,CAAC,OAAO,GAAC,IAAI,CAAC,CAAA,MAAM,GAAG,GAAC,MAAM,CAAC,SAAS,CAAC,CAAA,IAAG,OAAO,GAAG,KAAG,UAAU;QAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAAK,IAAG,GAAG;QAAE,GAAiC,CAAC,OAAO,GAAC,IAAI,CAAC,CAAA,CAAC,CAAC;IAC/L,+FAA+F;IAC/F,MAAM,UAAU,GAAC,CAAC,EAAS,EAAC,EAAE,GAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAC,CAAC,CAAC,CAAA,CAAC,CAAC;IACxH,MAAM,IAAI,GAAC,KAAC,kBAAkB,IAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;IAC/H,MAAM,IAAI,GAAC,KAAK,KAAG,MAAM,CAAA,CAAC,CAAA,8BAAG,IAAI,EAAE,cAAc,KAAG,SAAS,CAAA,CAAC,CAAA,QAAQ,CAAA,CAAC,CAAA,IAAI,IAAI;QAC9E,CAAC,CAAA,KAAK,KAAG,QAAQ,CAAA,CAAC,CAAA,CAAC,WAAW,CAAA,CAAC,CAAA,KAAC,oBAAoB,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAA,CAAC,CAAA,IAAI,CAAC;YACtH,CAAC,CAAA,8BAAE,KAAC,mBAAmB,IAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,GAAG,EACjH,KAAC,iBAAiB,IAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAG,QAAQ,GAAqB,IAAG,CAAC;IACrK,OAAO,8BAAE,KAAC,YAAY,OAAK,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,UAAU,IAAE,KAAC,WAAW,OAAK,UAAU,EAAE,UAAU,EAAE,eAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,IAAE,KAAK,EAAE,SAAS,EAAE,cAAc,IAAE,UAAU,KAAM,WAAW,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,IAAS,YAAE,KAAC,KAAK,IAAC,GAAG,EAAC,IAAI,YAAE,IAAI,GAAS,GAAe,EACvW,WAAW,CAAA,CAAC,CAAA,KAAC,qBAAqB,IAAC,KAAK,EAAE,WAAW,GAAG,CAAA,CAAC,CAAA,IAAI,IAAI,CAAC;AACrE,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,EAAC,MAAM,EAAC,YAAY,EAAC,WAAW,EAAC,OAAO,EAAC,QAAQ,EAAC,cAAc,EAAC,IAAI,EAAC,GAAG,MAAM,EAAuB,IAAE,MAAM,IAAI,GAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAA,MAAM,OAAO,GAAC,IAAI,KAAG,SAAS,CAAA,CAAC,CAAA,OAAO,CAAA,CAAC,CAAA,IAAI,KAAG,UAAU,CAAA,CAAC,CAAA,QAAQ,CAAA,CAAC,CAAA,IAAI,KAAG,UAAU,CAAA,CAAC,CAAA,cAAc,CAAA,CAAC,CAAA,IAAI,CAAC,CAAA,OAAO,KAAC,YAAY,OAAK,MAAM,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,OAAO,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,OAAO,GAAG,CAAA,CAAC,CAAA,IAAI,EAAE,IAAI,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,IAAI,IAAS,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,aAAE,YAAY,EAAE,WAAW,IAAS,GAAe,CAAC,CAAA,CAAC;AAIxgB,MAAM,UAAU,gBAAgB,CAAC,EAAC,KAAK,EAAC,KAAK,EAAC,aAAa,EAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAC,aAAa,EAAC,WAAW,EAAuB,IAAE,MAAM,QAAQ,GAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAC,KAAK,CAAC,CAAC,CAAA,MAAM,IAAI,GAAC,KAAK,CAAC,KAAK,CAAE,CAAC,CAAA,OAAO,KAAC,YAAY,OAAK,CAAC,WAAW,KAAG,SAAS,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,EAAC,WAAW,EAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,IAAI,EAAE,MAAM,EAAE,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,aAAa,CAAC,KAAK,GAAC,CAAC,EAAC,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAC,KAAC,MAAM,IAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAA,CAAC,CAAA,QAAQ,CAAA,CAAC,CAAA,EAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,GAAE,EAAE,CAAA,aAAa,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,GAAG,EAAC,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,MAAM,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,GAAE,EAAE,CAAA,aAAa,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,EAAE,SAAS,SAAE,CAAA,CAAC,CAAA,IAAI,IAAS,YAAG,IAAI,CAAC,OAAO,GAAgB,CAAC,CAAA,CAAC;AAInvB,oHAAoH;AACpH,MAAM,UAAU,mBAAmB,CAAC,EAAC,KAAK,EAAC,WAAW,EAAC,gBAAgB,EAAC,MAAM,EAAC,OAAO,EAAC,UAAU,EAAC,YAAY,EAAC,QAAQ,EAAC,YAAY,EAAC,GAAG,MAAM,EAA0B;IACvK,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7B,6FAA6F;IAC7F,iGAAiG;IACjG,MAAM,GAAG,GAAC,CAAC,IAAsB,EAAC,EAAE,CAAA,MAAC,KAAK,IAAe,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,EAAC,GAAG,EAAC,IAAI,aAAE,IAAI,CAAC,MAAM,EAAC,MAAC,KAAK,IAAC,GAAG,EAAC,KAAK,EAAC,WAAW,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,aAC3J,IAAI,CAAC,QAAQ,KAAG,SAAS,CAAA,CAAC,CAAA,MAAC,IAAI,eAAC,KAAC,IAAI,IAAC,QAAQ,EAAC,QAAQ,YAAE,IAAI,CAAC,MAAM,GAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAQ,CAAA,CAAC,CAAA,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAE,EAAC,QAAQ,EAAC,MAAM,EAAC,aAAE,KAAC,IAAI,IAAC,QAAQ,EAAC,QAAQ,YAAE,IAAI,CAAC,MAAM,GAAQ,EAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,IAAI,CAAC,SAAS,GAAQ,IAAQ,EACrS,IAAI,CAAC,IAAI,EAAC,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAE,EAAC,QAAQ,EAAC,MAAM,EAAC,aAAG,IAAI,CAAC,QAAQ,KAAG,SAAS,IAAE,IAAI,CAAC,SAAS,CAAA,CAAC,CAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,IAAI,CAAC,SAAS,GAAQ,CAAA,CAAC,CAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAA,CAAC,CAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,IAAI,CAAC,cAAc,GAAQ,CAAA,CAAC,CAAA,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,KAAG,IAAI,CAAC,CAAA,CAAC,CAAA,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAE,KAAK,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,YAAG,UAAU,GAAU,CAAA,CAAC,CAAA,IAAI,IAAS,EAAC,IAAI,CAAC,OAAO,IAAS,EAAC,IAAI,CAAC,UAAU,KAAG,SAAS,CAAA,CAAC,CAAA,IAAI,CAAC,UAAU,CAAA,CAAC,CAAA,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,GAAE,EAAE,CAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAG,IAAI,CAAC,QAAQ,GAAc,KAF9kB,IAAI,CAAC,EAAE,CAEglB,CAAC;IACxoB,OAAO,KAAC,YAAY,OAAK,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,IAAE,MAAM,CAAC,KAAK,CAAC,IAAI,KAAG,OAAO,IAAE,MAAM,CAAC,KAAK,CAAC,IAAI,KAAG,OAAO,CAAA,CAAC,CAAA,QAAQ,CAAA,CAAC,CAAA,IAAI,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA,EAAE,CAAA,IAAI,CAAC,QAAQ,KAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,GAAC,MAAM,OAAO,GAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAA,EAAE,CAAA,KAAK,CAAC,QAAQ,KAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA,OAAO,MAAC,KAAK,IAAe,GAAG,EAAC,IAAI,aAAE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAA,CAAC,CAAA,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,EAAC,WAAW,EAAE,EAAC,WAAW,EAAC,mBAAmB,CAAC,UAAU,EAAC,aAAE,KAAC,MAAM,IAAC,WAAW,EAAE,EAAC,SAAS,EAAC,YAAY,EAAC,EAAE,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,kBAAkB,EAAE,EAAC,QAAQ,EAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,YAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAU,EAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,CAAC,CAAA,IAAI,IAAS,CAAA,CAAC,CAAA,IAAI,KAA9a,IAAI,CAAC,EAAE,CAAgb,CAAC,CAAA,CAAC,CAAC,EAAE,YAAY,IAAS,GAAe,CAAC;AACtvB,CAAC"}
@@ -0,0 +1,114 @@
1
+ import type { ReactionPickerProps } from "./reaction-picker.js";
2
+ import { type Ref, type ReactNode } from "react";
3
+ import { ScrollView, type TextInput, type ScrollViewProps } from "react-native";
4
+ import { type MessageAttachmentDescriptor, type ChatMessageDescriptor, type MessageComposerDescriptor, type ScreenContentState } from "@hjmds/design-contracts/screen-patterns";
5
+ import { type ListRowProps } from "./data-display.js";
6
+ import type { HjmCompositionStyleProp } from "./composition-style.js";
7
+ export type ScreenLayoutProps = Readonly<{
8
+ title: string;
9
+ /** Host navigation can supply its existing header while the shared shell owns scrolling and state. */
10
+ header?: ReactNode;
11
+ /** Hosts that already inset routes avoid applying the shared gutter twice. */
12
+ contentInset?: "default" | "none";
13
+ description?: string;
14
+ leading?: ReactNode;
15
+ actions?: ReactNode;
16
+ notice?: ReactNode;
17
+ footer?: ReactNode;
18
+ state?: ScreenContentState;
19
+ stateAction?: ReactNode;
20
+ children?: ReactNode;
21
+ /** Use content when the child is a FlatList/virtualized timeline. */
22
+ scroll?: "screen" | "content";
23
+ /** Host owns safe areas and navigation bars, avoiding double insets inside nested routes. */
24
+ layoutStyle?: HjmCompositionStyleProp;
25
+ testID?: string;
26
+ scrollRef?: Ref<ScrollView>;
27
+ scrollProps?: Pick<ScrollViewProps, "refreshControl" | "keyboardDismissMode" | "showsVerticalScrollIndicator" | "showsHorizontalScrollIndicator">;
28
+ }>;
29
+ export declare function ScreenLayout({ title, header, contentInset, description, leading, actions, notice, footer, state, stateAction, children, scroll, layoutStyle, testID, scrollRef, scrollProps }: ScreenLayoutProps): import("react").JSX.Element;
30
+ export type SettingsScreenSection = Readonly<{
31
+ id: string;
32
+ title: string;
33
+ description?: string;
34
+ children: ReactNode;
35
+ }>;
36
+ export type SettingsScreenProps = Omit<ScreenLayoutProps, "children" | "scroll"> & Readonly<{
37
+ profile?: ReactNode;
38
+ sections: readonly SettingsScreenSection[];
39
+ }>;
40
+ export declare function SettingsScreen({ profile, sections, ...props }: SettingsScreenProps): import("react").JSX.Element;
41
+ export type NotificationInboxScreenProps = Omit<ScreenLayoutProps, "children"> & Readonly<{
42
+ filters?: ReactNode;
43
+ children: ReactNode;
44
+ }>;
45
+ export declare function NotificationInboxScreen({ filters, children, notice, ...props }: NotificationInboxScreenProps): import("react").JSX.Element;
46
+ export type NotificationItemProps = Omit<ListRowProps, "description" | "selected" | "titleStyle"> & Readonly<{
47
+ read: boolean;
48
+ statusLabel: string;
49
+ timestamp: string;
50
+ description?: string;
51
+ }>;
52
+ export declare function NotificationItem({ read, statusLabel, timestamp, description, ...props }: NotificationItemProps): import("react").JSX.Element;
53
+ export type ChatScreenProps = Omit<ScreenLayoutProps, "footer"> & Readonly<{
54
+ composer: ReactNode;
55
+ }>;
56
+ /** Wrap with existing KeyboardAvoiding (or the host's keyboard adapter), never both. */
57
+ export declare function ChatScreen({ composer, scroll, ...props }: ChatScreenProps): import("react").JSX.Element;
58
+ export type MessageComposerProps = Omit<MessageComposerDescriptor, "attachmentCount"> & Readonly<{
59
+ maxLength?: number;
60
+ sendDisabled?: boolean;
61
+ additionalContent?: boolean;
62
+ leadingAction?: ReactNode;
63
+ inputRef?: Ref<TextInput>;
64
+ onValueChange(value: string): void;
65
+ onSend(value: string): void;
66
+ context?: ReactNode;
67
+ replyTo?: Readonly<{
68
+ author: string;
69
+ excerpt: string;
70
+ cancelLabel: string;
71
+ onCancel(): void;
72
+ }>;
73
+ /** Icon mode puts the send/attachment action inside the growing field. */
74
+ sendIcon?: ReactNode;
75
+ /** Reference comment layout: a filled circular send action inside the field. */
76
+ sendPresentation?: "inline" | "circle";
77
+ attachmentAction?: Readonly<{
78
+ label: string;
79
+ icon: ReactNode;
80
+ onPress(): void;
81
+ disabled?: boolean;
82
+ }>;
83
+ attachments?: readonly (MessageAttachmentDescriptor & Readonly<{
84
+ preview: ReactNode;
85
+ }>)[];
86
+ onRemoveAttachment?: (id: string) => void;
87
+ }>;
88
+ export declare function MessageComposer({ value, label, sendLabel, disabled, pending, onValueChange, onSend, maxLength, sendDisabled, additionalContent, leadingAction, inputRef, context, replyTo, sendIcon, sendPresentation, attachmentAction, attachments, onRemoveAttachment }: MessageComposerProps): import("react").JSX.Element;
89
+ export type ChatMessageProps = ChatMessageDescriptor & Readonly<{
90
+ children: ReactNode;
91
+ interactiveContent?: boolean;
92
+ avatar?: ReactNode;
93
+ reply?: ReactNode;
94
+ actions?: ReactNode;
95
+ replyAction?: Readonly<{
96
+ label: string;
97
+ onPress(): void;
98
+ disabled?: boolean;
99
+ }>;
100
+ replyLink?: Readonly<{
101
+ label: string;
102
+ onPress(): void;
103
+ }>;
104
+ reactions?: ReactionPickerProps & Readonly<{
105
+ closeLabel: string;
106
+ menuAction?: Readonly<{
107
+ label: string;
108
+ onPress(): void;
109
+ disabled?: boolean;
110
+ }>;
111
+ }>;
112
+ }>;
113
+ export declare function ChatMessage({ direction, author, timestamp, deliveryLabel, avatar, reply, actions, replyAction, replyLink, reactions, children, interactiveContent }: ChatMessageProps): import("react").JSX.Element;
114
+ //# sourceMappingURL=screens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { MessageReactions } from "./internal/message-reactions.js";
3
+ import { Button, IconButton } from "./actions.js";
4
+ import { TextArea } from "./inputs.js";
5
+ import { useMemo, useState } from "react";
6
+ import { PanResponder, ScrollView, View } from "react-native";
7
+ import { Spinner } from "./internal/spinner.js";
8
+ import { isReplySwipe, canSubmitMessage, validateMessageAttachments, resolveScreenContentState, screenPatternRecipe } from "@hjmds/design-contracts/screen-patterns";
9
+ import { Section, Stack, Text } from "./primitives.js";
10
+ import { ListRow } from "./data-display.js";
11
+ import { useHjmNativeTheme } from "./provider.js";
12
+ export function ScreenLayout({ title, header, contentInset = "default", description, leading, actions, notice, footer, state = { kind: "ready" }, stateAction, children, scroll = "screen", layoutStyle, testID, scrollRef, scrollProps }) {
13
+ const resolved = resolveScreenContentState(state);
14
+ const { colors, environment } = useHjmNativeTheme();
15
+ const recipe = screenPatternRecipe;
16
+ const padding = contentInset === "none" ? 0 : recipe.padding;
17
+ const body = state.kind === "ready" ? children : _jsxs(View, { style: { marginVertical: "auto", flexShrink: 0, alignItems: "center", gap: recipe.stateGap, paddingVertical: recipe.sectionGap }, children: [resolved.busy ? _jsx(Spinner, { label: [state.title, state.description].filter(Boolean).join(". ") }) : _jsxs(View, { accessibilityLiveRegion: resolved.announcement, style: { alignItems: "center", gap: recipe.itemGap }, children: [_jsx(Text, { variant: "title", align: "center", children: state.title }), state.description ? _jsx(Text, { tone: "muted", align: "center", children: state.description }) : null] }), stateAction] });
18
+ return _jsxs(View, { testID: testID, style: [{ flex: 1, minHeight: 0, width: "100%", maxWidth: recipe.maxWidth, alignSelf: "center", backgroundColor: colors.bg }, layoutStyle], children: [header ?? _jsxs(View, { style: { flexDirection: "row", flexWrap: "wrap", alignItems: "center", padding, gap: recipe.itemGap }, children: [leading, _jsxs(View, { style: { flexGrow: 1, flexShrink: 1, flexBasis: recipe.headerMinWidth * environment.textScale }, children: [_jsx(Text, { variant: "titleLarge", accessibilityRole: "header", children: title }), description ? _jsx(Text, { tone: "muted", children: description }) : null] }), actions] }), notice ? _jsx(View, { style: { paddingHorizontal: padding }, children: notice }) : null, scroll === "screen" || resolved.replacesContent ? _jsx(ScrollView, { ...scrollProps, ref: scrollRef, style: { flex: 1 }, keyboardShouldPersistTaps: "handled", contentContainerStyle: { flexGrow: 1, padding }, accessibilityState: { busy: resolved.busy }, children: body })
19
+ : _jsx(View, { style: { flex: 1, minHeight: 0, padding }, children: body }), footer ? _jsx(View, { style: { padding, borderTopWidth: contentInset === "none" ? 0 : 1, borderColor: colors.border }, children: footer }) : null] });
20
+ }
21
+ export function SettingsScreen({ profile, sections, ...props }) {
22
+ const { colors } = useHjmNativeTheme();
23
+ // Match the unshaded settings groups on Web; separators preserve hierarchy without gray cards.
24
+ return _jsx(ScreenLayout, { ...props, children: _jsxs(Stack, { gap: "xl", children: [profile, sections.map(section => _jsx(Section, { title: section.title, ...(section.description === undefined ? {} : { description: section.description }), children: _jsx(View, { style: { borderTopWidth: 1, borderColor: colors.border }, children: section.children }) }, section.id))] }) });
25
+ }
26
+ export function NotificationInboxScreen({ filters, children, notice, ...props }) {
27
+ return _jsx(ScreenLayout, { ...props, notice: _jsxs(Stack, { gap: "sm", children: [notice, filters] }), children: children });
28
+ }
29
+ export function NotificationItem({ read, statusLabel, timestamp, description, ...props }) {
30
+ const emphasis = { hjmTitleEmphasis: read ? "regular" : "strong" };
31
+ return _jsx(ListRow, { ...props, ...emphasis, description: [description, `${statusLabel} · ${timestamp}`].filter(Boolean).join("\n") });
32
+ }
33
+ /** Wrap with existing KeyboardAvoiding (or the host's keyboard adapter), never both. */
34
+ export function ChatScreen({ composer, scroll = "content", ...props }) {
35
+ return _jsx(ScreenLayout, { ...props, scroll: scroll, footer: !props.state || props.state.kind === "ready" ? composer : null });
36
+ }
37
+ export function MessageComposer({ value, label, sendLabel, disabled = false, pending = false, onValueChange, onSend, maxLength, sendDisabled = false, additionalContent = false, leadingAction, inputRef, context, replyTo, sendIcon, sendPresentation = "inline", attachmentAction, attachments = [], onRemoveAttachment }) {
38
+ validateMessageAttachments(attachments);
39
+ if (attachments.length && !onRemoveAttachment)
40
+ throw new TypeError("Attachments require a removal callback");
41
+ const canSend = !sendDisabled && canSubmitMessage({ value, label, sendLabel, disabled, pending, attachmentCount: attachments.length + (additionalContent ? 1 : 0) });
42
+ const locked = disabled || pending;
43
+ // A bounded corner radius keeps multiline/large-text content inside the field instead of a tall pill.
44
+ const hasContent = !!value.trim() || attachments.length > 0 || additionalContent;
45
+ const { colors, tokens } = useHjmNativeTheme();
46
+ const compactField = { hjmCompactMultiline: true };
47
+ const attach = attachmentAction ? _jsx(IconButton, { label: attachmentAction.label, tone: "ghost", disabled: locked || (attachmentAction.disabled ?? false), onPress: attachmentAction.onPress, children: attachmentAction.icon }) : null;
48
+ const send = sendIcon ? _jsx(IconButton, { label: sendLabel, size: sendPresentation === "circle" ? "small" : "medium", shape: "circle", tone: sendPresentation === "circle" ? "primary" : "ghost", disabled: !canSend, loading: pending, onPress: () => { if (canSend)
49
+ onSend(value); }, children: sendIcon }) : _jsx(Button, { disabled: !canSend, loading: pending, onPress: () => { if (canSend)
50
+ onSend(value); }, children: sendLabel });
51
+ return _jsxs(Stack, { gap: "sm", children: [context, replyTo ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", children: [_jsxs(Stack, { gap: "xxs", children: [_jsx(Text, { variant: "caption", emphasis: "strong", children: replyTo.author }), _jsx(Text, { variant: "caption", tone: "muted", children: replyTo.excerpt })] }), _jsx(IconButton, { label: replyTo.cancelLabel, tone: "ghost", disabled: locked, onPress: replyTo.onCancel, children: _jsx(Text, { children: "\u00D7" }) })] }) : null, attachments.length ? _jsxs(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, keyboardShouldPersistTaps: "handled", contentContainerStyle: { gap: tokens.spacing.sm, alignItems: "center" }, children: [attachments.map(item => _jsxs(View, { style: { width: screenPatternRecipe.attachmentSize, height: screenPatternRecipe.attachmentSize }, children: [_jsx(View, { style: { width: "100%", height: "100%", overflow: "hidden", borderRadius: tokens.radius.md }, children: item.preview }), _jsx(View, { style: { position: "absolute", top: 0, right: 0 }, children: _jsx(IconButton, { label: item.removeLabel, tone: "ghost", size: "small", disabled: locked, onPress: () => onRemoveAttachment?.(item.id), children: _jsx(View, { style: { backgroundColor: colors.bg, borderRadius: tokens.radius.full, width: screenPatternRecipe.attachmentRemoveSize, height: screenPatternRecipe.attachmentRemoveSize, alignItems: "center", justifyContent: "center" }, children: _jsx(Text, { allowFontScaling: false, style: { fontSize: 18, lineHeight: 24 }, children: "\u00D7" }) }) }) })] }, item.id)), attach] }) : null, _jsxs(View, { style: { flexDirection: "row", alignItems: "flex-end", gap: screenPatternRecipe.itemGap }, children: [_jsx(TextArea, { ...compactField, ref: inputRef, maxLength: maxLength, leadingAction: leadingAction, shape: "large", accessibilityLabel: label, placeholder: label, value: value, disabled: locked, layoutStyle: { flex: 1 }, onValueChange: onValueChange, minVisibleLines: screenPatternRecipe.composerMinLines, maxVisibleLines: screenPatternRecipe.composerMaxLines, ...(sendIcon ? { trailing: _jsx(View, { style: { alignSelf: "center", marginStart: tokens.spacing.sm, marginEnd: sendPresentation === "circle" ? tokens.spacing.xs - tokens.spacing.md : 0 }, children: hasContent || pending ? send : attach }) } : {}) }), sendIcon ? null : send] })] });
52
+ }
53
+ export function ChatMessage({ direction, author, timestamp, deliveryLabel, avatar, reply, actions, replyAction, replyLink, reactions, children, interactiveContent = false }) {
54
+ const { colors, tokens } = useHjmNativeTheme();
55
+ const outgoing = direction === "outgoing";
56
+ const [offset, setOffset] = useState(0);
57
+ // SwipeActions reveals row controls and requires an optional gesture peer; reply commits
58
+ // on release and stays in the core timeline without capturing vertical scrolling.
59
+ const gesture = useMemo(() => PanResponder.create({
60
+ onMoveShouldSetPanResponder: (_, state) => !!replyAction && !replyAction.disabled && Math.abs(state.dx) > 12 && Math.abs(state.dx) > Math.abs(state.dy) * 2,
61
+ onPanResponderMove: (_, state) => setOffset(Math.max(-72, Math.min(72, state.dx))),
62
+ onPanResponderRelease: (_, state) => { setOffset(0); if (replyAction && !replyAction.disabled && isReplySwipe(state.dx, state.dy))
63
+ replyAction.onPress(); },
64
+ onPanResponderTerminate: () => setOffset(0),
65
+ onPanResponderTerminationRequest: () => true,
66
+ }), [replyAction]);
67
+ const canReply = !!replyAction && !replyAction.disabled;
68
+ const replyAccessibility = canReply ? {
69
+ accessible: true,
70
+ accessibilityActions: [{ name: "reply", label: replyAction.label }],
71
+ onAccessibilityAction: (event) => { if (event.nativeEvent.actionName === "reply")
72
+ replyAction.onPress(); },
73
+ } : {};
74
+ const captionCarriesReply = interactiveContent && !reactions;
75
+ const meta = timestamp || deliveryLabel ? `${timestamp}${deliveryLabel ? ` · ${deliveryLabel}` : ""}` : "";
76
+ const bubbleStyle = { backgroundColor: outgoing ? colors.surfaceAccent : colors.bg, borderWidth: outgoing ? 0 : 1, borderColor: colors.border, borderRadius: tokens.radius.lg, padding: tokens.spacing.sm, gap: tokens.spacing.xs };
77
+ const bubbleContent = _jsxs(_Fragment, { children: [reply && !replyLink ? _jsx(View, { style: { borderStartWidth: 2, borderColor: colors.contentBrand, paddingStart: tokens.spacing.xs }, children: reply }) : null, children] });
78
+ return _jsxs(View, { ...gesture.panHandlers, style: { transform: [{ translateX: offset }], flexDirection: "row", justifyContent: outgoing ? "flex-end" : "flex-start", gap: tokens.spacing.xs }, children: [!outgoing ? avatar : null, _jsxs(View, { style: { maxWidth: screenPatternRecipe.messageMaxWidth, flexShrink: 1, gap: tokens.spacing.xxs, alignItems: outgoing ? "flex-end" : "flex-start" }, children: [author ? _jsx(Text, { variant: "caption", tone: "muted", ...(captionCarriesReply && !meta ? replyAccessibility : {}), children: author }) : null, reply && replyLink ? _jsx(Button, { tone: "ghost", accessibilityLabel: replyLink.label, onPress: replyLink.onPress, children: reply }) : null, reactions ? _jsx(MessageReactions, { ...reactions, interactiveContent: interactiveContent, ...(replyAction ? { replyAction } : {}), children: _jsx(View, { style: bubbleStyle, children: bubbleContent }) }) : _jsx(View, { style: bubbleStyle, accessible: !interactiveContent, ...(interactiveContent ? {} : replyAccessibility), children: bubbleContent }), meta || actions ? _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", children: [meta ? _jsx(Text, { variant: "caption", tone: "muted", ...(captionCarriesReply ? replyAccessibility : {}), children: meta }) : null, actions] }) : null] }), outgoing ? avatar : null] });
79
+ }
80
+ //# sourceMappingURL=screens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screens.js","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":"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"}
package/dist/slider.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { View, type LayoutChangeEvent, type StyleProp, type ViewProps, type ViewStyle } from "react-native";
2
+ import type { HjmCompositionStyleProp } from "./composition-style.js";
2
3
  type NativeSliderViewProps = Omit<ViewProps, "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityValue" | "accessible" | "children" | "onAccessibilityAction" | "onLayout" | "style">;
3
4
  export type SliderProps = NativeSliderViewProps & Readonly<{
4
5
  label: string;
@@ -17,7 +18,17 @@ export type SliderProps = NativeSliderViewProps & Readonly<{
17
18
  /** Product-owned visible and accessible value formatting. */
18
19
  getValueText?: (value: number) => string;
19
20
  onLayout?: (event: LayoutChangeEvent) => void;
21
+ /** Canonical layout-only placement for the complete slider. Controlled visual keys are excluded. */
22
+ layoutStyle?: HjmCompositionStyleProp;
23
+ /**
24
+ * @deprecated Raw container style bypasses `sliderRecipe`. Use `layoutStyle` for placement.
25
+ * Removed in the next major (consumer-policy.md §3.1).
26
+ */
20
27
  containerStyle?: StyleProp<ViewStyle>;
28
+ /**
29
+ * @deprecated Raw control style bypasses `sliderRecipe` (track, thumb and hit target).
30
+ * Removed in the next major (consumer-policy.md §3.1).
31
+ */
21
32
  controlStyle?: StyleProp<ViewStyle>;
22
33
  }>;
23
34
  /** Dependency-free horizontal Slider using the Native responder system. */
@@ -38,7 +49,17 @@ export declare const Slider: import("react").ForwardRefExoticComponent<NativeSli
38
49
  /** Product-owned visible and accessible value formatting. */
39
50
  getValueText?: (value: number) => string;
40
51
  onLayout?: (event: LayoutChangeEvent) => void;
52
+ /** Canonical layout-only placement for the complete slider. Controlled visual keys are excluded. */
53
+ layoutStyle?: HjmCompositionStyleProp;
54
+ /**
55
+ * @deprecated Raw container style bypasses `sliderRecipe`. Use `layoutStyle` for placement.
56
+ * Removed in the next major (consumer-policy.md §3.1).
57
+ */
41
58
  containerStyle?: StyleProp<ViewStyle>;
59
+ /**
60
+ * @deprecated Raw control style bypasses `sliderRecipe` (track, thumb and hit target).
61
+ * Removed in the next major (consumer-policy.md §3.1).
62
+ */
42
63
  controlStyle?: StyleProp<ViewStyle>;
43
64
  }> & import("react").RefAttributes<View>>;
44
65
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../src/slider.tsx"],"names":[],"mappings":"AAcA,OAAO,EAGL,IAAI,EACJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAMtB,KAAK,qBAAqB,GAAG,IAAI,CAC/B,SAAS,EACP,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,YAAY,GACZ,UAAU,GACV,uBAAuB,GACvB,UAAU,GACV,OAAO,CACV,CAAC;AAKF,MAAM,MAAM,WAAW,GAAG,qBAAqB,GAC7C,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC,CAAC;AAEL,2EAA2E;AAC3E,eAAO,MAAM,MAAM;WArBR,MAAM;SACR,MAAM;SACN,MAAM;WACJ,MAAM;YACL,MAAM;mBACC,MAAM;oBACL,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;uBACpB,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;eAC/B,OAAO;IAClB,4EAA4E;oBAC5D,MAAM;IACtB,4EAA4E;oBAC5D,MAAM;IACtB,6DAA6D;mBAC9C,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;eAC7B,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;qBAC5B,SAAS,CAAC,SAAS,CAAC;mBACtB,SAAS,CAAC,SAAS,CAAC;yCA6TrC,CAAC"}
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../src/slider.tsx"],"names":[],"mappings":"AAcA,OAAO,EAGL,IAAI,EACJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAMtE,KAAK,qBAAqB,GAAG,IAAI,CAC/B,SAAS,EACP,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,YAAY,GACZ,UAAU,GACV,uBAAuB,GACvB,UAAU,GACV,OAAO,CACV,CAAC;AAKF,MAAM,MAAM,WAAW,GAAG,qBAAqB,GAC7C,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,oGAAoG;IACpG,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC,CAAC;AAEL,2EAA2E;AAC3E,eAAO,MAAM,MAAM;WA/BR,MAAM;SACR,MAAM;SACN,MAAM;WACJ,MAAM;YACL,MAAM;mBACC,MAAM;oBACL,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;uBACpB,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;eAC/B,OAAO;IAClB,4EAA4E;oBAC5D,MAAM;IACtB,4EAA4E;oBAC5D,MAAM;IACtB,6DAA6D;mBAC9C,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;eAC7B,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;IAC7C,oGAAoG;kBACtF,uBAAuB;IACrC;;;OAGG;qBACc,SAAS,CAAC,SAAS,CAAC;IACrC;;;OAGG;mBACY,SAAS,CAAC,SAAS,CAAC;yCAqUrC,CAAC"}
package/dist/slider.js CHANGED
@@ -2,14 +2,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getSliderStepTarget, resolveSliderDescriptor, resolveSliderFillFraction, resolveSliderValueFromOffset, sliderRecipe, } from "@hjmds/design-contracts/components/slider";
3
3
  import { forwardRef, useEffect, useMemo, useRef, useState, } from "react";
4
4
  import { PanResponder, Text as NativeText, View, } from "react-native";
5
+ import { warnDeprecatedStyleProps } from "./internal/deprecated-style.js";
5
6
  import { useControllableState } from "./internal/state.js";
6
7
  import { logicalTextAlign, resolveNativeTextScaleProps } from "./internal/styles.js";
7
8
  import { useHjmNativeTheme } from "./provider.js";
8
9
  /** Points of travel before a drag counts as horizontal or vertical intent. */
9
10
  const sliderIntentSlop = 6;
10
11
  /** Dependency-free horizontal Slider using the Native responder system. */
11
- export const Slider = forwardRef(function Slider({ label, min, max, step, value, defaultValue, onValueChange, onValueChangeEnd, decrementLabel, incrementLabel, getValueText, disabled = false, onFocus, onBlur, onLayout, containerStyle, controlStyle, ...viewProps }, forwardedRef) {
12
+ export const Slider = forwardRef(function Slider({ label, min, max, step, value, defaultValue, onValueChange, onValueChangeEnd, decrementLabel, incrementLabel, getValueText, disabled = false, onFocus, onBlur, onLayout, containerStyle, controlStyle, layoutStyle, ...viewProps }, forwardedRef) {
12
13
  const { colors, environment, textScaling, tokens } = useHjmNativeTheme();
14
+ warnDeprecatedStyleProps("Slider", { containerStyle, controlStyle }, "layoutStyle for placement; sliderRecipe owns the track and thumb");
13
15
  const [currentValue, setCurrentValue] = useControllableState({
14
16
  ...(value === undefined ? {} : { value }),
15
17
  defaultValue: defaultValue ?? min,
@@ -174,14 +176,16 @@ export const Slider = forwardRef(function Slider({ label, min, max, step, value,
174
176
  ]);
175
177
  return (_jsxs(View, { style: [
176
178
  {
177
- gap: tokens.spacing.xs,
179
+ gap: sliderRecipe.header.trackGap,
178
180
  opacity: disabled ? sliderRecipe.states.disabledOpacity : 1,
179
181
  },
180
182
  containerStyle,
183
+ layoutStyle,
181
184
  ], children: [_jsxs(View, { accessible: false, accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: {
182
185
  alignItems: "baseline",
183
186
  direction: environment.direction,
184
187
  flexDirection: "row",
188
+ gap: sliderRecipe.header.gap,
185
189
  justifyContent: "space-between",
186
190
  }, children: [_jsx(NativeText, { ...labelTextScaleProps, children: label }), _jsx(NativeText, { ...valueTextScaleProps, children: visibleValue })] }), _jsxs(View, { ...viewProps, ...panResponder.panHandlers, ...actionProps, ref: forwardedRef, accessible: true, accessibilityLabel: label, accessibilityRole: "adjustable", accessibilityState: { disabled }, accessibilityValue: {
187
191
  min,