@hjmds/react-native 1.12.1 → 1.13.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 +15 -0
- package/dist/actions.d.ts +30 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +28 -5
- package/dist/actions.js.map +1 -1
- package/dist/agreement.d.ts +8 -1
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +16 -3
- package/dist/agreement.js.map +1 -1
- package/dist/asset.d.ts +15 -2
- package/dist/asset.d.ts.map +1 -1
- package/dist/asset.js +7 -4
- package/dist/asset.js.map +1 -1
- package/dist/bottom-info.d.ts +8 -1
- package/dist/bottom-info.d.ts.map +1 -1
- package/dist/bottom-info.js +4 -2
- package/dist/bottom-info.js.map +1 -1
- package/dist/calendar.d.ts +3 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +2 -2
- package/dist/calendar.js.map +1 -1
- package/dist/carousel.d.ts +8 -1
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +4 -2
- package/dist/carousel.js.map +1 -1
- package/dist/collapsible.d.ts +8 -1
- package/dist/collapsible.d.ts.map +1 -1
- package/dist/collapsible.js +9 -3
- package/dist/collapsible.js.map +1 -1
- package/dist/data-display.d.ts +146 -13
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +58 -29
- package/dist/data-display.js.map +1 -1
- package/dist/date-picker.d.ts +8 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +10 -3
- package/dist/date-picker.js.map +1 -1
- package/dist/duration-field.d.ts +4 -1
- package/dist/duration-field.d.ts.map +1 -1
- package/dist/duration-field.js +2 -2
- package/dist/duration-field.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/feedback.d.ts +89 -14
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +25 -16
- package/dist/feedback.js.map +1 -1
- package/dist/file-picker.d.ts +8 -1
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +4 -2
- package/dist/file-picker.js.map +1 -1
- package/dist/forms.d.ts +28 -4
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +19 -8
- package/dist/forms.js.map +1 -1
- package/dist/heading.d.ts +8 -1
- package/dist/heading.d.ts.map +1 -1
- package/dist/heading.js +4 -2
- package/dist/heading.js.map +1 -1
- package/dist/image-viewer.d.ts.map +1 -1
- package/dist/image-viewer.js +11 -3
- package/dist/image-viewer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inputs.d.ts +66 -3
- package/dist/inputs.d.ts.map +1 -1
- package/dist/inputs.js +142 -51
- package/dist/inputs.js.map +1 -1
- package/dist/internal/deprecated-style.d.ts +8 -0
- package/dist/internal/deprecated-style.d.ts.map +1 -0
- package/dist/internal/deprecated-style.js +34 -0
- package/dist/internal/deprecated-style.js.map +1 -0
- package/dist/internal/field-frame.d.ts +2 -1
- package/dist/internal/field-frame.d.ts.map +1 -1
- package/dist/internal/field-frame.js +4 -2
- package/dist/internal/field-frame.js.map +1 -1
- package/dist/internal/field-private.d.ts +11 -0
- package/dist/internal/field-private.d.ts.map +1 -0
- package/dist/internal/field-private.js +2 -0
- package/dist/internal/field-private.js.map +1 -0
- package/dist/internal/list-row-private.d.ts +10 -0
- package/dist/internal/list-row-private.d.ts.map +1 -0
- package/dist/internal/list-row-private.js +2 -0
- package/dist/internal/list-row-private.js.map +1 -0
- package/dist/internal/message-reactions.d.ts +21 -0
- package/dist/internal/message-reactions.d.ts.map +1 -0
- package/dist/internal/message-reactions.js +49 -0
- package/dist/internal/message-reactions.js.map +1 -0
- package/dist/internal/recipe-button.d.ts +6 -5
- package/dist/internal/recipe-button.d.ts.map +1 -1
- package/dist/internal/recipe-button.js +22 -7
- package/dist/internal/recipe-button.js.map +1 -1
- package/dist/internal/spinner.d.ts +15 -0
- package/dist/internal/spinner.d.ts.map +1 -0
- package/dist/internal/spinner.js +12 -0
- package/dist/internal/spinner.js.map +1 -0
- package/dist/masonry.d.ts +3 -1
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +3 -3
- package/dist/masonry.js.map +1 -1
- package/dist/mentions.d.ts +4 -0
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +8 -2
- package/dist/mentions.js.map +1 -1
- package/dist/navigation.d.ts +72 -4
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +39 -21
- package/dist/navigation.js.map +1 -1
- package/dist/number-field.d.ts +21 -0
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +7 -2
- package/dist/number-field.js.map +1 -1
- package/dist/overlays.d.ts +30 -2
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +108 -19
- package/dist/overlays.js.map +1 -1
- package/dist/primitives.d.ts +19 -3
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +12 -6
- package/dist/primitives.js.map +1 -1
- package/dist/provider-button.d.ts +8 -1
- package/dist/provider-button.d.ts.map +1 -1
- package/dist/provider-button.js +4 -1
- package/dist/provider-button.js.map +1 -1
- package/dist/qr-code.d.ts +4 -1
- package/dist/qr-code.d.ts.map +1 -1
- package/dist/qr-code.js +2 -2
- package/dist/qr-code.js.map +1 -1
- package/dist/reaction-picker.d.ts +4 -2
- package/dist/reaction-picker.d.ts.map +1 -1
- package/dist/reaction-picker.js +18 -6
- package/dist/reaction-picker.js.map +1 -1
- package/dist/saved-items.d.ts +21 -0
- package/dist/saved-items.d.ts.map +1 -0
- package/dist/saved-items.js +16 -0
- package/dist/saved-items.js.map +1 -0
- package/dist/screen-flows.d.ts +303 -0
- package/dist/screen-flows.d.ts.map +1 -0
- package/dist/screen-flows.js +172 -0
- package/dist/screen-flows.js.map +1 -0
- package/dist/screens.d.ts +114 -0
- package/dist/screens.d.ts.map +1 -0
- package/dist/screens.js +80 -0
- package/dist/screens.js.map +1 -0
- package/dist/slider.d.ts +21 -0
- package/dist/slider.d.ts.map +1 -1
- package/dist/slider.js +6 -2
- package/dist/slider.js.map +1 -1
- package/dist/steps.d.ts +8 -1
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +4 -2
- package/dist/steps.js.map +1 -1
- package/dist/tags-input.d.ts +8 -1
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +11 -5
- package/dist/tags-input.js.map +1 -1
- package/dist/toggle-group.d.ts +8 -1
- package/dist/toggle-group.d.ts.map +1 -1
- package/dist/toggle-group.js +4 -2
- package/dist/toggle-group.js.map +1 -1
- package/dist/top.d.ts +8 -1
- package/dist/top.d.ts.map +1 -1
- package/dist/top.js +4 -1
- package/dist/top.js.map +1 -1
- package/dist/transfer-list.d.ts +8 -1
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +4 -2
- package/dist/transfer-list.js.map +1 -1
- package/dist/upload-item.d.ts +8 -1
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +4 -2
- package/dist/upload-item.js.map +1 -1
- package/package.json +21 -3
|
@@ -0,0 +1,172 @@
|
|
|
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, Keyboard, ScrollView, View } from "react-native";
|
|
14
|
+
import { containerRecipe } from "@hjmds/design-contracts/components/container";
|
|
15
|
+
import { ListRow } from "./data-display.js";
|
|
16
|
+
import { Heading } from "./heading.js";
|
|
17
|
+
import { Menu } from "./navigation.js";
|
|
18
|
+
import { EmptyState, Skeleton } from "./feedback.js";
|
|
19
|
+
function Pane({ hidden = false, children }) { return _jsx(View, { style: { flex: 1, display: hidden ? "none" : "flex" }, children: children }); }
|
|
20
|
+
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 }); }
|
|
21
|
+
/** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */
|
|
22
|
+
// layoutStyle places the outer host that owns both panes, as on Web, so the screen keeps the same
|
|
23
|
+
// placement while list and detail swap. Passing it to the list ScreenLayout dropped it on detail.
|
|
24
|
+
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] }); }
|
|
25
|
+
export function EditorScreen({ children, dirty, submitPlacement = "footer", submit, cancel, discard, draftStatus, ...screen }) {
|
|
26
|
+
const [confirm, setConfirm] = useState(false);
|
|
27
|
+
return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, leading: _jsx(Action, { action: { ...cancel, disabled: !!(cancel.disabled || submit.pending), onAction: () => { if (dirty)
|
|
28
|
+
setConfirm(true);
|
|
29
|
+
else
|
|
30
|
+
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() } })] });
|
|
31
|
+
}
|
|
32
|
+
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] }) }); }
|
|
33
|
+
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)
|
|
34
|
+
onReasonChange(value); } }) : null), children] }) }), block ? _jsx(AlertDialog, { open: confirm, onOpenChange: setConfirm, request: block.confirmation }) : null] }); }
|
|
35
|
+
export function PhotoSourceSheet({ open, onOpenChange, onSelect, labels, disabled = false, cameraAvailable = true }) {
|
|
36
|
+
const queued = useRef(null);
|
|
37
|
+
useEffect(() => () => { queued.current = null; }, []);
|
|
38
|
+
// iOS cannot present a camera/picker over a dismissing Modal. Sheet owns the real
|
|
39
|
+
// dismissal completion (including Android fallback), so a timer is not a safe substitute.
|
|
40
|
+
const select = (source) => { if (disabled || queued.current)
|
|
41
|
+
return; queued.current = source; onOpenChange(false); };
|
|
42
|
+
const complete = () => { const source = queued.current; queued.current = null; if (source && !disabled)
|
|
43
|
+
onSelect(source); };
|
|
44
|
+
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] }) });
|
|
45
|
+
}
|
|
46
|
+
/** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */
|
|
47
|
+
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)) }) }); }
|
|
48
|
+
/** Announce only when the text changes; iOS queues it behind the current utterance instead of cutting it off. */
|
|
49
|
+
function useSearchAnnouncement(text) {
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (!text)
|
|
52
|
+
return;
|
|
53
|
+
if (AccessibilityInfo.announceForAccessibilityWithOptions)
|
|
54
|
+
AccessibilityInfo.announceForAccessibilityWithOptions(text, { queue: true });
|
|
55
|
+
else
|
|
56
|
+
AccessibilityInfo.announceForAccessibility(text);
|
|
57
|
+
}, [text]);
|
|
58
|
+
}
|
|
59
|
+
function SearchIdleSections({ recent, suggested, legacy, onCommit }) {
|
|
60
|
+
const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];
|
|
61
|
+
// Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.
|
|
62
|
+
if (!visible.length && !suggested?.items.length)
|
|
63
|
+
return _jsx(_Fragment, { children: legacy });
|
|
64
|
+
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] });
|
|
65
|
+
}
|
|
66
|
+
function SearchSuggestedChips({ suggested, onCommit }) {
|
|
67
|
+
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)) })] });
|
|
68
|
+
}
|
|
69
|
+
function SearchSuggestionList({ query, suggestions, onCommit }) {
|
|
70
|
+
const typed = query.trim();
|
|
71
|
+
const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));
|
|
72
|
+
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))] });
|
|
73
|
+
}
|
|
74
|
+
function SearchResultsHeader({ summary, applied, cause, onSortChange }) {
|
|
75
|
+
const sort = summary?.sort;
|
|
76
|
+
const showCount = summary && cause === "none";
|
|
77
|
+
if (!summary?.notice && !showCount && !applied?.items.length)
|
|
78
|
+
return null;
|
|
79
|
+
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)
|
|
80
|
+
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] });
|
|
81
|
+
}
|
|
82
|
+
function SearchResultsBody({ summary, applied, suggested, cause, onCommit, children }) {
|
|
83
|
+
// Two text lines per row approximate ListRow's two-line height so results do not jump when they land.
|
|
84
|
+
if (summary?.count === null)
|
|
85
|
+
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)) });
|
|
86
|
+
if (cause === "none" || !summary?.empty)
|
|
87
|
+
return _jsx(_Fragment, { children: children });
|
|
88
|
+
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] });
|
|
89
|
+
}
|
|
90
|
+
function SearchFilterTrigger({ sheet, appliedCount }) {
|
|
91
|
+
const trigger = sheet.trigger;
|
|
92
|
+
return _jsx(Chip, { label: trigger.label(appliedCount), accessibilityLabel: trigger.accessibilityLabel(appliedCount), ...(trigger.icon === undefined ? {} : { leading: trigger.icon }), onPress: () => sheet.onOpenChange(true) });
|
|
93
|
+
}
|
|
94
|
+
function SearchFilterSheetView({ sheet }) {
|
|
95
|
+
// The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close.
|
|
96
|
+
const [session, setSession] = useState(null);
|
|
97
|
+
if (sheet.open && !session)
|
|
98
|
+
setSession({ draft: sheet.value });
|
|
99
|
+
if (!sheet.open && session)
|
|
100
|
+
setSession(null);
|
|
101
|
+
const draft = session ? session.draft : sheet.value;
|
|
102
|
+
const setDraft = (next) => setSession(current => current ? { draft: next } : current);
|
|
103
|
+
const count = sheet.count(draft);
|
|
104
|
+
// Native sheet footers stack full-width buttons with the primary action first (sheet.md).
|
|
105
|
+
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 })] });
|
|
106
|
+
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) });
|
|
107
|
+
}
|
|
108
|
+
/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */
|
|
109
|
+
export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs = 300, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow = "wrap", hostGutter = "none", queryLabelVisibility = "visible", searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }) {
|
|
110
|
+
// The host owns localized copy. A custom queryField owns its own clear affordance.
|
|
111
|
+
if (queryField == null && !queryClearLabel?.trim())
|
|
112
|
+
throw new TypeError("SearchScreen requires a localized queryClearLabel for its default search field");
|
|
113
|
+
const callback = useRef(onSearch);
|
|
114
|
+
callback.current = onSearch;
|
|
115
|
+
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]);
|
|
116
|
+
// Every commit path funnels through here so "only committed searches are recorded" holds at the API:
|
|
117
|
+
// onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.
|
|
118
|
+
// Every commit closes the keyboard so results get the screen. The search key already blurs the field; a picked
|
|
119
|
+
// suggestion/recent/suggested query did not, and utilverse called Keyboard.dismiss() in onSubmit (1.13.0 adoption,
|
|
120
|
+
// 2026-10-06). Done here, not in onSubmit, so one-step search (no onSubmit) behaves the same.
|
|
121
|
+
const commit = (value) => { const next = resolveSearchCommit(value); if (next === null)
|
|
122
|
+
return; Keyboard.dismiss(); if (next !== query)
|
|
123
|
+
onQueryChange(next); onSubmit?.(next); };
|
|
124
|
+
// onSubmit separates "typing" from "committed" without making products rebuild the default field through
|
|
125
|
+
// queryField (2026-10-06 search redesign, usage/components/search-screen.md). The single-line TextInput keeps
|
|
126
|
+
// its default blur-on-submit, so the keyboard closes and results get the screen. The debounce is left alone.
|
|
127
|
+
const submitProps = onSubmit ? { returnKeyType: "search", onSubmitEditing: (event) => commit(event.nativeEvent.text) } : {};
|
|
128
|
+
// Hidden label: the placeholder names the search target and accessibilityLabel keeps the field named.
|
|
129
|
+
const labelProps = queryLabelVisibility === "hidden" ? { accessibilityLabel: queryLabel, placeholder: queryLabel } : { label: queryLabel };
|
|
130
|
+
const phase = resolveSearchScreenPhase(query, committedQuery);
|
|
131
|
+
const appliedCount = appliedFilters?.items.length ?? 0;
|
|
132
|
+
const cause = phase === "results" && resultSummary ? resolveSearchEmptyCause(resultSummary.count, appliedCount) : "none";
|
|
133
|
+
// Two-step search shows the rail only beside results, and a query-caused zero hides it (no filter can fix it).
|
|
134
|
+
const showRail = (committedQuery === undefined || phase === "results") && cause !== "query";
|
|
135
|
+
const trigger = filterSheet?.trigger ? _jsx(SearchFilterTrigger, { sheet: filterSheet, appliedCount: appliedCount }) : null;
|
|
136
|
+
const rail = !showRail ? null : trigger && filters != null ? _jsxs(Stack, { axis: "inline", gap: "xs", wrap: filtersOverflow === "wrap", children: [trigger, filters] }) : trigger ?? filters;
|
|
137
|
+
// Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.
|
|
138
|
+
// It bleeds over ScreenLayout's notice padding so chips scroll to the screen edge instead of clipping mid-chip.
|
|
139
|
+
// With contentInset="none" the host owns the gutter, which SearchScreen cannot measure; `hostGutter` names it so the
|
|
140
|
+
// rail still reaches the host edge (utilverse 1.13.0 adoption, 2026-10-06: the rail stopped at the Container/Sheet
|
|
141
|
+
// padding). A token name, not a number, keeps product code off raw spacing. Rejected: measuring the window offset
|
|
142
|
+
// (layout jump on the first frame, and wrong inside a centered max-width host).
|
|
143
|
+
const inset = (screen.contentInset === "none" ? 0 : screenPatternRecipe.padding) + containerRecipe.gutters[hostGutter];
|
|
144
|
+
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;
|
|
145
|
+
const visibleSuggestions = suggestions?.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible)).length ?? 0;
|
|
146
|
+
const countAnnouncement = phase === "typing" && suggestions ? suggestions.countLabel(visibleSuggestions) : phase === "results" && resultSummary && resultSummary.count !== null ? resultSummary.countLabel(resultSummary.count) : "";
|
|
147
|
+
// Same text as the Web status region: the busy indicator's label is only read when focused, so progress is announced too.
|
|
148
|
+
useSearchAnnouncement(searching && searchingLabel ? searchingLabel : countAnnouncement);
|
|
149
|
+
const scrollView = useRef(null);
|
|
150
|
+
const scrollRef = (node) => { scrollView.current = node; const own = screen.scrollRef; if (typeof own === "function")
|
|
151
|
+
own(node);
|
|
152
|
+
else if (own)
|
|
153
|
+
own.current = node; };
|
|
154
|
+
// A new order starts at the top; the previous offset would land mid-list in unrelated results.
|
|
155
|
+
const changeSort = (id) => { resultSummary?.sort?.onChange(id); scrollView.current?.scrollTo?.({ y: 0, animated: false }); };
|
|
156
|
+
const idle = _jsx(SearchIdleSections, { recent: recentQueries, suggested: suggestedQueries, legacy: recentSearches, onCommit: commit });
|
|
157
|
+
const body = phase === "idle" ? _jsxs(_Fragment, { children: [idle, committedQuery === undefined ? children : null] })
|
|
158
|
+
: phase === "typing" ? (suggestions ? _jsx(SearchSuggestionList, { query: query, suggestions: suggestions, onCommit: commit }) : null)
|
|
159
|
+
: _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 })] });
|
|
160
|
+
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] });
|
|
161
|
+
}
|
|
162
|
+
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] }) }); }
|
|
163
|
+
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 }); }
|
|
164
|
+
/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
|
|
165
|
+
export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadFooter, ...screen }) {
|
|
166
|
+
validateCommentThread(items);
|
|
167
|
+
// The supplied reference joins the author to the first body line and reserves the right edge
|
|
168
|
+
// for one reaction target. Keep legacy rich bodies intact; bodyText opts into that compact flow.
|
|
169
|
+
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);
|
|
170
|
+
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] }) });
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=screen-flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/dist/screens.js
ADDED
|
@@ -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 {};
|
package/dist/slider.d.ts.map
CHANGED
|
@@ -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;
|
|
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:
|
|
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,
|