@hjmds/react-native 1.29.0 → 1.31.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 (88) hide show
  1. package/dist/auth-screen.d.ts +10 -1
  2. package/dist/auth-screen.d.ts.map +1 -1
  3. package/dist/auth-screen.js +39 -24
  4. package/dist/auth-screen.js.map +1 -1
  5. package/dist/carousel.d.ts +25 -1
  6. package/dist/carousel.d.ts.map +1 -1
  7. package/dist/carousel.js +18 -4
  8. package/dist/carousel.js.map +1 -1
  9. package/dist/data-display.d.ts +5 -1
  10. package/dist/data-display.d.ts.map +1 -1
  11. package/dist/data-display.js +28 -14
  12. package/dist/data-display.js.map +1 -1
  13. package/dist/data-table.d.ts.map +1 -1
  14. package/dist/data-table.js +13 -8
  15. package/dist/data-table.js.map +1 -1
  16. package/dist/evidence.d.ts +3 -1562
  17. package/dist/evidence.d.ts.map +1 -1
  18. package/dist/evidence.js +93 -255
  19. package/dist/evidence.js.map +1 -1
  20. package/dist/forms.js +3 -3
  21. package/dist/forms.js.map +1 -1
  22. package/dist/icon-svg.d.ts +8 -0
  23. package/dist/icon-svg.d.ts.map +1 -0
  24. package/dist/icon-svg.js +22 -0
  25. package/dist/icon-svg.js.map +1 -0
  26. package/dist/image-choice.d.ts +5 -0
  27. package/dist/image-choice.d.ts.map +1 -1
  28. package/dist/image-choice.js +5 -2
  29. package/dist/image-choice.js.map +1 -1
  30. package/dist/index.d.ts +4 -4
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/inputs.d.ts.map +1 -1
  35. package/dist/inputs.js +2 -1
  36. package/dist/inputs.js.map +1 -1
  37. package/dist/internal/bottom-navigation-inset.d.ts +21 -0
  38. package/dist/internal/bottom-navigation-inset.d.ts.map +1 -0
  39. package/dist/internal/bottom-navigation-inset.js +28 -0
  40. package/dist/internal/bottom-navigation-inset.js.map +1 -0
  41. package/dist/internal/field-frame.d.ts +11 -1
  42. package/dist/internal/field-frame.d.ts.map +1 -1
  43. package/dist/internal/field-frame.js +17 -1
  44. package/dist/internal/field-frame.js.map +1 -1
  45. package/dist/internal/initial-focus.d.ts +2 -1
  46. package/dist/internal/initial-focus.d.ts.map +1 -1
  47. package/dist/internal/initial-focus.js +11 -3
  48. package/dist/internal/initial-focus.js.map +1 -1
  49. package/dist/internal/media-album.d.ts +48 -0
  50. package/dist/internal/media-album.d.ts.map +1 -0
  51. package/dist/internal/media-album.js +36 -0
  52. package/dist/internal/media-album.js.map +1 -0
  53. package/dist/internal/message-reactions.d.ts +28 -2
  54. package/dist/internal/message-reactions.d.ts.map +1 -1
  55. package/dist/internal/message-reactions.js +25 -6
  56. package/dist/internal/message-reactions.js.map +1 -1
  57. package/dist/navigation.d.ts +12 -2
  58. package/dist/navigation.d.ts.map +1 -1
  59. package/dist/navigation.js +75 -19
  60. package/dist/navigation.js.map +1 -1
  61. package/dist/number-field.d.ts.map +1 -1
  62. package/dist/number-field.js +2 -0
  63. package/dist/number-field.js.map +1 -1
  64. package/dist/overlays.d.ts +39 -1
  65. package/dist/overlays.d.ts.map +1 -1
  66. package/dist/overlays.js +254 -205
  67. package/dist/overlays.js.map +1 -1
  68. package/dist/primitives.d.ts +29 -1
  69. package/dist/primitives.d.ts.map +1 -1
  70. package/dist/primitives.js +18 -3
  71. package/dist/primitives.js.map +1 -1
  72. package/dist/public-exports.generated.d.ts +209 -0
  73. package/dist/public-exports.generated.d.ts.map +1 -0
  74. package/dist/public-exports.generated.js +642 -0
  75. package/dist/public-exports.generated.js.map +1 -0
  76. package/dist/screen-flows.d.ts +104 -12
  77. package/dist/screen-flows.d.ts.map +1 -1
  78. package/dist/screen-flows.js +87 -17
  79. package/dist/screen-flows.js.map +1 -1
  80. package/dist/screens.d.ts +59 -7
  81. package/dist/screens.d.ts.map +1 -1
  82. package/dist/screens.js +89 -19
  83. package/dist/screens.js.map +1 -1
  84. package/dist/steps.d.ts +7 -2
  85. package/dist/steps.d.ts.map +1 -1
  86. package/dist/steps.js +12 -5
  87. package/dist/steps.js.map +1 -1
  88. package/package.json +9 -3
@@ -4,6 +4,8 @@ import { type SheetProps } from "./overlays.js";
4
4
  import { type UploadItemDescriptor, type UploadItemLabels } from "@hjmds/design-contracts/components/upload-item";
5
5
  import { type AlertDialogRequest } from "@hjmds/design-contracts/components/alert-dialog";
6
6
  import { type CommentMenuItemDescriptor, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from "@hjmds/design-contracts/screen-patterns";
7
+ import { type MediaAlbum } from "./internal/media-album.js";
8
+ export type { MediaAlbum } from "./internal/media-album.js";
7
9
  import { type ContainerGutter } from "@hjmds/design-contracts/components/container";
8
10
  import { type MessageMenuAction } from "./internal/message-reactions.js";
9
11
  import type { ReactionPickerProps } from "./reaction-picker.js";
@@ -46,16 +48,44 @@ export type EditorScreenProps = Omit<Base, "leading" | "exit"> & {
46
48
  fallbackErrorMessage: string;
47
49
  };
48
50
  draftStatus?: ReactNode;
51
+ /** Multi-step editor: while supplied, the header exit is a back chevron that returns to the previous step instead of
52
+ * the cancel ×, and never opens the discard prompt (stepping back keeps the draft). Omit it on the first step so the
53
+ * exit leaves through `cancel` again (2026-10-18: spint compose replaced the header with its own TopBar for this). */
54
+ stepBack?: ScreenFlowAction;
49
55
  };
50
- export declare function EditorScreen({ children, dirty, submitPlacement, submit, cancel, discard, draftStatus, initialFocus, ...screen }: EditorScreenProps): import("react").JSX.Element;
56
+ export declare function EditorScreen({ children, dirty, submitPlacement, submit, cancel, discard, draftStatus, stepBack, initialFocus, ...screen }: EditorScreenProps): import("react").JSX.Element;
51
57
  export type ProfileScreenProps = Base & {
52
58
  summary: ReactNode;
53
59
  edit: ScreenFlowAction;
54
60
  children?: ReactNode;
55
61
  accountActions?: ReactNode;
62
+ /** `below-summary` (default): ghost button under the summary. `summary`: the edit action goes first in the action row
63
+ * of the ProfileSummary inside `summary` (2026-10-15 utilverse account decision: the edit action belongs inside the
64
+ * profile card). With `summary`, the slot must contain a ProfileSummary, or the edit action is not drawn. */
65
+ editPlacement?: "below-summary" | "summary";
56
66
  };
57
- export declare function ProfileScreen({ summary, edit, children, accountActions, ...screen }: ProfileScreenProps): import("react").JSX.Element;
58
- export type ModerationScreenProps = Base & {
67
+ export declare function ProfileScreen({ summary, edit, children, accountActions, editPlacement, ...screen }: ProfileScreenProps): import("react").JSX.Element;
68
+ /** Operator decision on a report (dismiss, hide, uphold, overturn…). Labels are product copy; ids are product keys.
69
+ * With `confirmation`, pressing opens that AlertDialog and only its `onConfirm` acts (same rule as `block`). */
70
+ export type ModerationDecision = ScreenFlowAction & Readonly<{
71
+ id: string;
72
+ tone?: "primary" | "secondary" | "danger";
73
+ confirmation?: Extract<AlertDialogRequest, {
74
+ mode: "confirm";
75
+ }>;
76
+ }>;
77
+ /** Free-text decision reason. `required` (default true) keeps every decision locked until it has non-blank text. */
78
+ export type ModerationDecisionReason = Readonly<{
79
+ label: string;
80
+ value: string;
81
+ onValueChange(value: string): void;
82
+ description?: string;
83
+ maxLength?: number;
84
+ required?: boolean;
85
+ disabled?: boolean;
86
+ }>;
87
+ type ModerationReportFields = {
88
+ variant?: "report";
59
89
  reasonPicker?: ReactNode;
60
90
  reasons: readonly {
61
91
  value: string;
@@ -73,7 +103,29 @@ export type ModerationScreenProps = Base & {
73
103
  }>;
74
104
  };
75
105
  };
76
- export declare function ModerationScreen({ reasonPicker, reasons, reason, onReasonChange, reasonLabel, children, submit, block, ...screen }: ModerationScreenProps): import("react").JSX.Element;
106
+ /** Operator review (2026-10-18: utilverse review and appeal queues hand-built this with TextArea, buttons and Alert):
107
+ * `children` shows the reported content, then the reason field and the decisions; `resolution` replaces both once decided. */
108
+ type ModerationReviewFields = {
109
+ variant: "review";
110
+ children?: ReactNode;
111
+ decisionReason: ModerationDecisionReason;
112
+ decisions: readonly ModerationDecision[];
113
+ resolution?: ReactNode;
114
+ };
115
+ export type ModerationFields = ModerationReportFields | ModerationReviewFields;
116
+ export type ModerationScreenProps = Base & ModerationFields;
117
+ export declare function ModerationScreen(props: ModerationScreenProps): import("react").JSX.Element;
118
+ /** The moderation fields and actions without screen chrome, for a report opened inside a letter, card or Sheet
119
+ * (2026-10-18: diairy turned ModerationScreen's header and padding off to place it in a letter). The host owns the
120
+ * surrounding surface and placement; `title` is an optional section heading (omit it inside a titled Sheet) and
121
+ * `cancel` adds a ghost "collapse" action after the others. */
122
+ export type ModerationFormProps = ModerationFields & Readonly<{
123
+ title?: string;
124
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
125
+ cancel?: ScreenFlowAction;
126
+ layoutStyle?: ScreenLayoutProps["layoutStyle"];
127
+ }>;
128
+ export declare function ModerationForm(props: ModerationFormProps): import("react").JSX.Element;
77
129
  /** Source choice only: permission, capture, decoding and draft persistence belong to the host. */
78
130
  export type PhotoSourceSheetProps = Readonly<{
79
131
  open: boolean;
@@ -88,12 +140,17 @@ export type MediaSelectionItem = {
88
140
  descriptor: UploadItemDescriptor;
89
141
  preview?: ReactNode;
90
142
  };
91
- export type MediaSelectionScreenProps = Base & {
92
- library?: ReactNode;
93
- selectionSummary?: ReactNode;
94
- items: readonly MediaSelectionItem[];
95
- add?: ScreenFlowIconAction;
96
- done: ScreenFlowAction;
143
+ /**
144
+ * Quarter-turn action for a picked photo (2026-10-18, Utilverse photo-to-PDF). The product stores the rotation and
145
+ * applies it to `preview` and its output; HJM only places the button with the other item actions.
146
+ */
147
+ export type MediaSelectionRotate = Readonly<{
148
+ label: string;
149
+ itemLabel(item: MediaSelectionItem): string;
150
+ onRotate(id: string): void;
151
+ }>;
152
+ /** Copy and callbacks of one item's actions, shared by the screen grid and MediaSelectionCell. */
153
+ export type MediaSelectionItemActions = {
97
154
  labels: UploadItemLabels;
98
155
  actionLabels: {
99
156
  remove: string;
@@ -107,9 +164,28 @@ export type MediaSelectionScreenProps = Base & {
107
164
  onMove(id: string, direction: -1 | 1): void;
108
165
  onRetry(id: string): void;
109
166
  onCancel(id: string): void;
167
+ rotate?: MediaSelectionRotate;
110
168
  };
169
+ export type MediaSelectionScreenProps = Base & {
170
+ library?: ReactNode;
171
+ selectionSummary?: ReactNode;
172
+ items: readonly MediaSelectionItem[];
173
+ add?: ScreenFlowIconAction;
174
+ done: ScreenFlowAction;
175
+ } & MediaSelectionItemActions;
176
+ /** `index`/`count` place the item in the product's full list so the first/last move buttons disable correctly. */
177
+ export type MediaSelectionCellProps = MediaSelectionItemActions & Readonly<{
178
+ item: MediaSelectionItem;
179
+ index: number;
180
+ count: number;
181
+ }>;
182
+ /**
183
+ * One picked item: preview, upload status, then move/rotate/remove. Exported (2026-10-18, Utilverse photo tools) so a
184
+ * virtualized host (FlatList renderItem) renders the same cell as the screen grid instead of a copy.
185
+ */
186
+ export declare function MediaSelectionCell({ item, index, count, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, rotate }: MediaSelectionCellProps): import("react").JSX.Element;
111
187
  /** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */
112
- export declare function MediaSelectionScreen({ library, selectionSummary, items, add, done, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, ...screen }: MediaSelectionScreenProps): import("react").JSX.Element;
188
+ export declare function MediaSelectionScreen({ library, selectionSummary, items, add, done, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, rotate, ...screen }: MediaSelectionScreenProps): import("react").JSX.Element;
113
189
  export type SearchRecentQueries = Readonly<{
114
190
  items: readonly string[];
115
191
  title: string;
@@ -306,6 +382,23 @@ export type CommentThreadItem = Readonly<{
306
382
  reactionSummary?: ReactNode;
307
383
  /** Optional photo or sticker under the body; HJM bounds its width and corners, the product sizes the image. */
308
384
  media?: ReactNode;
385
+ /**
386
+ * Where the time label sits. "auto" keeps it beside the author unless `bodyText` inlines the author; "actions" moves it
387
+ * into the line under the body with reactions and Reply, for rich (non-text) bodies such as Spint's flower stamp
388
+ * (2026-10-18). Default "auto".
389
+ */
390
+ timePlacement?: "auto" | "actions";
391
+ /**
392
+ * Inline per-comment panel (edit, report or block form) under the Reply line, outside the long-press target
393
+ * (2026-10-18, Utilverse). The product owns its open state, focus, submit and close; HJM owns its place in the row.
394
+ */
395
+ panel?: ReactNode;
396
+ /**
397
+ * Paged photo set under the body (2026-10-18, Utilverse): HJM mounts only the shown page so the product can fetch one
398
+ * authorized image at a time. Exclusive with `media` (validated at render); it sits outside the long-press target because it has its own buttons, and the
399
+ * hold menu's preview (a second render) would otherwise mount a second page.
400
+ */
401
+ mediaAlbum?: MediaAlbum;
309
402
  }>;
310
403
  export type CommentReactions = ReactionPickerProps & Readonly<{
311
404
  closeLabel: string;
@@ -382,5 +475,4 @@ export type ProfileSummaryProps = Readonly<{
382
475
  }>;
383
476
  /** Profile identity and counts are common; routing and mutations stay controlled by the product. */
384
477
  export declare function ProfileSummary({ name, headingLevel, avatar, badge, nameActions, stats, actions, children }: ProfileSummaryProps): import("react").JSX.Element;
385
- export {};
386
478
  //# sourceMappingURL=screen-flows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from "react";
3
+ import { createContext, useContext } from "react";
4
+ import { TextArea } from "./inputs.js";
3
5
  import { CompositionLayout, ScreenLayout } from "./screens.js";
4
6
  import { ScreenExitButton } from "./internal/screen-exit.js";
5
7
  import { Button, IconButton } from "./actions.js";
@@ -14,6 +16,8 @@ import { initialFocusDefaults, validateCommentThread, resolvePermissionAction, r
14
16
  import { iconButtonRecipe, resolveIconButtonEdgeOverhang, resolveIconButtonPresentation } from "@hjmds/design-contracts/recipes";
15
17
  import { visibleControlHeight } from "@hjmds/design-contracts/components/design-system-provider";
16
18
  import { DrawnMoreVertical } from "./internal/drawn-glyphs.js";
19
+ import { MediaAlbumView, useMediaAlbumIndex } from "./internal/media-album.js";
20
+ import { validateMediaSetChoice } from "@hjmds/design-contracts/screen-patterns";
17
21
  import { useHjmNativeTheme } from "./provider.js";
18
22
  import { AccessibilityInfo, Keyboard, Pressable, ScrollView, View } from "react-native";
19
23
  import { containerRecipe } from "@hjmds/design-contracts/components/container";
@@ -33,34 +37,82 @@ function Action({ action, secondary = false, edge }) { if (action.icon)
33
37
  // placement while list and detail swap. Passing it to the list ScreenLayout dropped it on detail.
34
38
  // "Load more" ends the list inside the scroll body, centered like LoadMore; the fixed footer is the bottom CTA slot (2026-10-17 review).
35
39
  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, ...(refresh || screen.actions ? { actions: _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", children: [screen.actions, refresh ? _jsx(Action, { action: refresh, secondary: true, edge: "end" }) : null] }) } : {}), children: loadMore ? _jsxs(View, { style: { flexGrow: 1, flexShrink: 1, minHeight: 0, gap: screenPatternRecipe.itemGap }, children: [list, _jsx(View, { style: { alignItems: "center" }, children: _jsx(Action, { action: loadMore, secondary: true }) })] }) : list }) }), detail ? _jsx(Pane, { children: _jsx(ScreenLayout, { title: detail.title, ...(detail.titleVisibility === undefined ? {} : { titleVisibility: detail.titleVisibility }), ...(detail.headerAlignment === undefined ? {} : { headerAlignment: detail.headerAlignment }), ...(detail.state === undefined ? {} : { state: detail.state }), stateAction: detail.stateAction, notice: detail.notice, ...(screen.safeAreaBottom === undefined ? {} : { safeAreaBottom: screen.safeAreaBottom }), exit: { kind: "back", label: back.label, onPress: back.onAction, disabled: !!(back.disabled || back.pending) }, children: detail.content }) }) : null] }); }
36
- export function EditorScreen({ children, dirty, submitPlacement = "footer", submit, cancel, discard, draftStatus, initialFocus = initialFocusDefaults.editor, ...screen }) {
40
+ export function EditorScreen({ children, dirty, submitPlacement = "footer", submit, cancel, discard, draftStatus, stepBack, initialFocus = initialFocusDefaults.editor, ...screen }) {
37
41
  const [confirm, setConfirm] = useState(false);
38
42
  const cancelLocked = !!(cancel.disabled || cancel.pending || submit.pending);
39
43
  const submitAction = { ...submit, disabled: !!(submit.disabled || screen.state && screen.state.kind !== "ready") };
40
44
  // A prompt opened before an external save must not bypass the current leave lock
41
45
  // or reappear once the save finishes. Keep the draft mounted throughout.
42
- useEffect(() => { if (cancelLocked)
43
- setConfirm(false); }, [cancelLocked]);
46
+ const stepping = !!stepBack, stepLocked = !!(stepBack?.disabled || stepBack?.pending || submit.pending);
47
+ // A step-back exit replaces the cancel exit, so a discard prompt opened from the cancel exit cannot outlive it.
48
+ useEffect(() => { if (cancelLocked || stepping)
49
+ setConfirm(false); }, [cancelLocked, stepping]);
44
50
  // Preserve an async host result so AlertDialog can retain failure and retry.
45
51
  const leave = () => { if (!cancelLocked)
46
52
  return cancel.onAction(); };
47
53
  // Writing is the screen's purpose: focus the first field on entry unless the host opts out (2026-10-18).
48
- return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, initialFocus: initialFocus, exit: { kind: "close", label: cancel.label, disabled: cancelLocked, onPress: () => { if (cancelLocked)
49
- return; if (dirty)
50
- setConfirm(true);
51
- else
52
- leave(); } }, actions: submitPlacement === "header" ? _jsx(Action, { action: submitAction }) : screen.actions, footer: submitPlacement === "header" ? draftStatus : _jsxs(Stack, { gap: "sm", children: [draftStatus, _jsx(Action, { action: submitAction })] }), children: children }), _jsx(AlertDialog, { open: confirm && !cancelLocked, onOpenChange: setConfirm, request: { ...discard, mode: "confirm", onConfirm: leave } })] });
54
+ return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, initialFocus: initialFocus, exit: stepBack ? { kind: "back", label: stepBack.label, disabled: stepLocked, onPress: () => { if (!stepLocked)
55
+ stepBack.onAction(); } }
56
+ : { kind: "close", label: cancel.label, disabled: cancelLocked, onPress: () => { if (cancelLocked)
57
+ return; if (dirty)
58
+ setConfirm(true);
59
+ else
60
+ leave(); } }, actions: submitPlacement === "header" ? _jsx(Action, { action: submitAction }) : screen.actions, footer: submitPlacement === "header" ? draftStatus : _jsxs(Stack, { gap: "sm", children: [draftStatus, _jsx(Action, { action: submitAction })] }), children: children }), _jsx(AlertDialog, { open: confirm && !cancelLocked && !stepping, onOpenChange: setConfirm, request: { ...discard, mode: "confirm", onConfirm: leave } })] });
53
61
  }
54
- export function ProfileScreen({ summary, edit, children, accountActions, ...screen }) { return _jsx(ScreenLayout, { ...screen, children: _jsxs(Stack, { gap: "xl", children: [_jsx(CompositionLayout, { footer: _jsx(Action, { action: edit, secondary: true }), children: summary }), children, accountActions] }) }); }
55
- export function ModerationScreen({ reasonPicker, reasons, reason, onReasonChange, reasonLabel, children, submit, block, ...screen }) {
62
+ // Hands ProfileScreen's edit action to the ProfileSummary inside its summary slot, wherever the product nests it.
63
+ const ProfileEditContext = createContext(undefined);
64
+ export function ProfileScreen({ summary, edit, children, accountActions, editPlacement = "below-summary", ...screen }) { return _jsx(ScreenLayout, { ...screen, children: _jsxs(Stack, { gap: "xl", children: [editPlacement === "summary" ? _jsx(ProfileEditContext.Provider, { value: edit, children: summary }) : _jsx(CompositionLayout, { footer: _jsx(Action, { action: edit, secondary: true }), children: summary }), children, accountActions] }) }); }
65
+ /** Body, stacked actions and confirmations shared by ModerationScreen (screen chrome) and ModerationForm (none). */
66
+ function useModeration(fields, ready, cancel) {
56
67
  const [confirm, setConfirm] = useState(false);
57
- const hasBlock = !!block;
68
+ const [confirmId, setConfirmId] = useState(null);
69
+ const review = fields.variant === "review" ? fields : null, report = fields.variant === "review" ? null : fields;
70
+ const hasBlock = !!report?.block;
58
71
  // Withdrawing the action ends that confirmation session; a later action needs
59
72
  // a new explicit press even if the screen itself stays mounted.
60
73
  useEffect(() => { if (!hasBlock)
61
74
  setConfirm(false); }, [hasBlock]);
62
- return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, footer: _jsxs(Stack, { gap: "xs", 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)
63
- onReasonChange(value); } }) : null), children] }) }), block ? _jsx(AlertDialog, { open: confirm, onOpenChange: setConfirm, request: block.confirmation }) : null] });
75
+ const confirming = review && !review.resolution ? review.decisions.find(decision => decision.id === confirmId && decision.confirmation) : undefined;
76
+ // Same rule for a decision: its confirmation closes when the decision or its confirmation is withdrawn or resolved.
77
+ useEffect(() => { if (confirmId !== null && !confirming)
78
+ setConfirmId(null); }, [confirmId, confirming]);
79
+ const cancelAction = cancel ? _jsx(Action, { action: cancel, secondary: true }) : null;
80
+ if (review) {
81
+ const busy = review.decisions.some(decision => decision.pending);
82
+ const reasonMissing = (review.decisionReason.required ?? true) && !review.decisionReason.value.trim();
83
+ const field = review.resolution ?? _jsx(TextArea, { label: review.decisionReason.label, value: review.decisionReason.value, onValueChange: review.decisionReason.onValueChange, ...(review.decisionReason.description === undefined ? {} : { description: review.decisionReason.description }), ...(review.decisionReason.maxLength === undefined ? {} : { maxLength: review.decisionReason.maxLength }), required: review.decisionReason.required ?? true, disabled: !!review.decisionReason.disabled || busy });
84
+ // One decision at a time: a pending decision locks the others and the reason it was taken with.
85
+ const decisions = review.resolution ? [] : review.decisions.map(decision => {
86
+ const locked = !!decision.disabled || busy || !ready || reasonMissing;
87
+ return _jsx(Button, { tone: decision.tone ?? "secondary", disabled: locked, loading: decision.pending ?? false, onPress: () => { if (locked)
88
+ return; if (decision.confirmation)
89
+ setConfirmId(decision.id);
90
+ else
91
+ decision.onAction(); }, children: decision.label }, decision.id);
92
+ });
93
+ return { body: _jsxs(Stack, { gap: "lg", children: [review.children, field] }),
94
+ actions: decisions.length || cancelAction ? _jsxs(Stack, { gap: "xs", children: [decisions, cancelAction] }) : null,
95
+ dialogs: confirming?.confirmation ? _jsx(AlertDialog, { open: true, onOpenChange: open => { if (!open)
96
+ setConfirmId(null); }, request: confirming.confirmation }) : null };
97
+ }
98
+ const r = report;
99
+ return { body: _jsxs(Stack, { gap: "lg", children: [r.reasonPicker ?? (r.reasons.length ? _jsx(RadioGroup, { accessibilityLabel: r.reasonLabel, orientation: "vertical", items: r.reasons, value: r.reason, onValueChange: value => { if (value)
100
+ r.onReasonChange(value); } }) : null), r.children] }),
101
+ actions: _jsxs(Stack, { gap: "xs", children: [_jsx(Action, { action: { ...r.submit, disabled: r.submit.disabled || !ready || !r.reasons.some(item => item.value === r.reason) } }), r.block ? _jsx(Action, { action: { ...r.block.action, onAction: () => setConfirm(true) }, secondary: true }) : null, cancelAction] }),
102
+ dialogs: r.block ? _jsx(AlertDialog, { open: confirm, onOpenChange: setConfirm, request: r.block.confirmation }) : null };
103
+ }
104
+ // Every key of either variant, so the rest of the props reach ScreenLayout unchanged whichever variant is used.
105
+ const moderationFieldKeys = ["variant", "reasonPicker", "reasons", "reason", "onReasonChange", "reasonLabel", "children", "submit", "block", "decisionReason", "decisions", "resolution"];
106
+ export function ModerationScreen(props) {
107
+ const screen = { ...props };
108
+ for (const key of moderationFieldKeys)
109
+ delete screen[key];
110
+ const { body, actions, dialogs } = useModeration(props, !props.state || props.state.kind === "ready");
111
+ return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, footer: actions, children: body }), dialogs] });
112
+ }
113
+ export function ModerationForm(props) {
114
+ const { body, actions, dialogs } = useModeration(props, true, props.cancel);
115
+ return _jsxs(_Fragment, { children: [_jsx(CompositionLayout, { ...(props.title === undefined ? {} : { title: props.title }), ...(props.headingLevel === undefined ? {} : { headingLevel: props.headingLevel }), ...(props.layoutStyle === undefined ? {} : { layoutStyle: props.layoutStyle }), footer: actions, children: body }), dialogs] });
64
116
  }
65
117
  export function PhotoSourceSheet({ open, onOpenChange, onSelect, labels, disabled = false, cameraAvailable = true }) {
66
118
  const queued = useRef(null);
@@ -77,8 +129,19 @@ export function PhotoSourceSheet({ open, onOpenChange, onSelect, labels, disable
77
129
  queued.current = null; onOpenChange(next); };
78
130
  return _jsx(Sheet, { open: open, onOpenChange: dismiss, title: labels.title, closeLabel: labels.cancel, onDismissComplete: complete, children: _jsxs(Stack, { gap: "xs", 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] }) });
79
131
  }
132
+ /**
133
+ * One picked item: preview, upload status, then move/rotate/remove. Exported (2026-10-18, Utilverse photo tools) so a
134
+ * virtualized host (FlatList renderItem) renders the same cell as the screen grid instead of a copy.
135
+ */
136
+ export function MediaSelectionCell({ item, index, count, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, rotate }) {
137
+ const id = item.descriptor.id;
138
+ return _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(id, -1), children: actionLabels.moveUp }), _jsx(Button, { accessibilityLabel: moveDownLabel(item), size: "small", tone: "ghost", disabled: index === count - 1, onPress: () => onMove(id, 1), children: actionLabels.moveDown }), rotate ? _jsx(Button, { accessibilityLabel: rotate.itemLabel(item), size: "small", tone: "ghost", onPress: () => rotate.onRotate(id), children: rotate.label }) : null, _jsx(Button, { accessibilityLabel: removeLabel(item), size: "small", tone: "ghost", onPress: () => onRemove(id), children: actionLabels.remove })] })] });
139
+ }
80
140
  /** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */
81
- export function MediaSelectionScreen({ library, selectionSummary, items, add, done, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, ...screen }) { return _jsx(ScreenLayout, { ...screen, ...(add || screen.actions ? { actions: _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", children: [screen.actions, add ? _jsx(Action, { action: add, edge: "end" }) : null] }) } : {}), 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)) }) }); }
141
+ export function MediaSelectionScreen({ library, selectionSummary, items, add, done, labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, rotate, ...screen }) {
142
+ const itemActions = { labels, actionLabels, removeLabel, moveUpLabel, moveDownLabel, onRemove, onMove, onRetry, onCancel, ...(rotate === undefined ? {} : { rotate }) };
143
+ return _jsx(ScreenLayout, { ...screen, ...(add || screen.actions ? { actions: _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", children: [screen.actions, add ? _jsx(Action, { action: add, edge: "end" }) : null] }) } : {}), 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) => _jsx(MediaSelectionCell, { item: item, index: index, count: items.length, ...itemActions }, item.descriptor.id)) }) });
144
+ }
82
145
  /** Announce only when the text changes; iOS queues it behind the current utterance instead of cutting it off. */
83
146
  function useSearchAnnouncement(text) {
84
147
  useEffect(() => {
@@ -226,6 +289,10 @@ function CommentMenuButton({ item, menu, items }) {
226
289
  }
227
290
  /** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */
228
291
  export function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle, commentMenu }) {
292
+ validateMediaSetChoice(item.media != null, item.mediaAlbum !== undefined);
293
+ const [albumIndex, setAlbumIndex] = useMediaAlbumIndex(item.mediaAlbum);
294
+ // bodyText inlines the author, so its time always moves under the body; rich bodies opt in with timePlacement.
295
+ const timeInActions = item.bodyText !== undefined || item.timePlacement === "actions";
229
296
  const avatarSize = item.parentId === null ? commentThreadRecipe.avatarSize : commentThreadRecipe.replyAvatarSize;
230
297
  const theme = useHjmNativeTheme();
231
298
  const menuItems = commentMenu ? resolveCommentMenuItems(commentMenu.items(item)) : [];
@@ -239,9 +306,9 @@ export function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyl
239
306
  const edgeOverhang = menuItems.length || item.actions == null && item.likeAction === undefined ? resolveIconButtonEdgeOverhang("ghost", "medium", visibleTarget) : 0;
240
307
  // The like count sits under the heart so the text column carries only identity, body and reply.
241
308
  return _jsxs(Stack, { axis: "inline", align: "start", gap: "xs", ...(layoutStyle === undefined ? {} : { layoutStyle }), children: [item.avatar ? _jsx(View, { style: { width: avatarSize, alignItems: "center" }, children: item.avatar }) : null, _jsxs(View, { style: { flex: 1, minWidth: 0, gap: commentThreadRecipe.lineGap }, children: [(() => {
242
- const identity = _jsxs(_Fragment, { children: [item.bodyText !== undefined ? _jsxs(Text, { children: [_jsx(Text, { emphasis: "strong", children: item.author }), " ", item.bodyText] }) : (item.author || item.timeLabel) ? _jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.author ? _jsx(Text, { variant: "caption", emphasis: "strong", children: item.author }) : null, item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null] }) : null, item.body, item.media ? _jsx(View, { style: { maxWidth: commentThreadRecipe.mediaMaxWidth, borderRadius: commentThreadRecipe.mediaRadius, overflow: "hidden", marginTop: commentThreadRecipe.avatarGap / 2, alignSelf: "flex-start" }, children: item.media }) : null] });
309
+ const identity = _jsxs(_Fragment, { children: [item.bodyText !== undefined ? _jsxs(Text, { children: [_jsx(Text, { emphasis: "strong", children: item.author }), " ", item.bodyText] }) : (item.author || (item.timeLabel && !timeInActions)) ? _jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.author ? _jsx(Text, { variant: "caption", emphasis: "strong", children: item.author }) : null, item.timeLabel && !timeInActions ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null] }) : null, item.body, item.media ? _jsx(View, { style: { maxWidth: commentThreadRecipe.mediaMaxWidth, borderRadius: commentThreadRecipe.mediaRadius, overflow: "hidden", marginTop: commentThreadRecipe.avatarGap / 2, alignSelf: "flex-start" }, children: item.media }) : null] });
243
310
  return item.reactions ? _jsx(MessageReactions, { previewSurface: true, ...item.reactions, ...((item.canReply ?? item.parentId === null) && !item.replyDisabled ? { replyAction: { label: replyLabel, onPress: () => onReply(item.id), ...(item.reactions.replyIcon === undefined ? {} : { icon: item.reactions.replyIcon }) } } : {}), children: _jsx(View, { style: { gap: commentThreadRecipe.lineGap }, children: identity }) }) : identity;
244
- })(), (item.bodyText !== undefined && item.timeLabel) || (item.canReply ?? item.parentId === null) || item.reactionSummary ? _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.reactionSummary, (item.canReply ?? item.parentId === null) ? _jsx(CommentTextAction, { label: replyLabel, disabled: item.replyDisabled ?? false, onPress: () => onReply(item.id) }) : null] }) : null] }), _jsxs(View, { style: { flexShrink: 0, marginTop: anchorOffset, ...(edgeOverhang ? { marginEnd: -edgeOverhang } : {}) }, children: [_jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexShrink: 0 }, children: [item.likeAction !== undefined ? item.likeAction : _jsx(IconButton, { label: item.likeLabel, tone: "ghost", onPress: () => onLike(item.id), children: item.likeIcon }), item.actions, commentMenu && menuItems.length ? _jsx(CommentMenuButton, { item: item, menu: commentMenu, items: menuItems }) : null] }), item.likeCountLabel ? _jsx(View, { style: { width: commentThreadRecipe.likeColumnWidth }, children: _jsx(Text, { variant: "caption", tone: "muted", align: "center", children: item.likeCountLabel }) }) : null] })] }, item.id);
311
+ })(), item.mediaAlbum ? _jsx(View, { style: { marginTop: commentThreadRecipe.avatarGap / 2, alignSelf: "flex-start" }, children: _jsx(MediaAlbumView, { album: item.mediaAlbum, index: albumIndex, onIndexChange: setAlbumIndex, width: commentThreadRecipe.mediaMaxWidth, radius: commentThreadRecipe.mediaRadius }) }) : null, (timeInActions && item.timeLabel) || (item.canReply ?? item.parentId === null) || item.reactionSummary ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [timeInActions && item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null, item.reactionSummary, (item.canReply ?? item.parentId === null) ? _jsx(CommentTextAction, { label: replyLabel, disabled: item.replyDisabled ?? false, onPress: () => onReply(item.id) }) : null] }) : null, item.panel != null ? _jsx(View, { style: { marginTop: commentThreadRecipe.panelGap - commentThreadRecipe.lineGap }, children: item.panel }) : null] }), _jsxs(View, { style: { flexShrink: 0, marginTop: anchorOffset, ...(edgeOverhang ? { marginEnd: -edgeOverhang } : {}) }, children: [_jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexShrink: 0 }, children: [item.likeAction !== undefined ? item.likeAction : _jsx(IconButton, { label: item.likeLabel, tone: "ghost", onPress: () => onLike(item.id), children: item.likeIcon }), item.actions, commentMenu && menuItems.length ? _jsx(CommentMenuButton, { item: item, menu: commentMenu, items: menuItems }) : null] }), item.likeCountLabel ? _jsx(View, { style: { width: commentThreadRecipe.likeColumnWidth }, children: _jsx(Text, { variant: "caption", tone: "muted", align: "center", children: item.likeCountLabel }) }) : null] })] }, item.id);
245
312
  }
246
313
  /** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
247
314
  export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadHeader, threadFooter, commentMenu, ...screen }) {
@@ -267,7 +334,10 @@ export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLi
267
334
  }
268
335
  /** Profile identity and counts are common; routing and mutations stay controlled by the product. */
269
336
  export function ProfileSummary({ name, headingLevel = 2, avatar, badge, nameActions, stats = [], actions, children }) {
337
+ const edit = useContext(ProfileEditContext);
338
+ const { tone: editTone, size: editSize } = profileSummaryRecipe.editAction;
339
+ const editButton = edit ? _jsx(Button, { tone: editTone, size: editSize, disabled: !!(edit.disabled || edit.pending), loading: edit.pending ?? false, onPress: edit.onAction, children: edit.label }) : null;
270
340
  return _jsxs(CompositionLayout, { title: name, headingLevel: headingLevel, leading: _jsx(View, { style: { width: profileSummaryRecipe.avatarSize, height: profileSummaryRecipe.avatarSize, flexShrink: 0, borderRadius: profileSummaryRecipe.avatarSize / 2, overflow: "hidden" }, children: avatar }), badge: badge, actions: nameActions, footer: children, children: [stats.length ? _jsx(Stack, { axis: "inline", gap: "md", align: "stretch", layoutStyle: { width: "100%" }, children: stats.map(stat => _jsx(Stack, { gap: "xxs", align: "center", justify: "center", layoutStyle: { flex: 1, minWidth: 0 }, children: stat.onPress ? _jsx(Button, { tone: "ghost", accessibilityLabel: `${stat.value} ${stat.label}`, disabled: stat.disabled ?? false, onPress: stat.onPress, layoutStyle: { width: "100%" }, children: _jsxs(Stack, { gap: "xxs", align: "center", children: [_jsx(Text, { emphasis: "strong", children: stat.value }), _jsx(Text, { variant: "caption", tone: "muted", children: stat.label })] }) })
271
- : _jsxs(_Fragment, { children: [_jsx(Text, { emphasis: "strong", children: stat.value }), _jsx(Text, { variant: "caption", tone: "muted", children: stat.label })] }) }, stat.id)) }) : null, actions ? _jsx(Stack, { axis: "inline", gap: "sm", wrap: true, children: actions }) : null] });
341
+ : _jsxs(_Fragment, { children: [_jsx(Text, { emphasis: "strong", children: stat.value }), _jsx(Text, { variant: "caption", tone: "muted", children: stat.label })] }) }, stat.id)) }) : null, editButton || actions ? _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [editButton, actions] }) : null] });
272
342
  }
273
343
  //# sourceMappingURL=screen-flows.js.map