@hjmds/react 1.33.2 → 1.35.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 (137) hide show
  1. package/dist/actions.d.ts +23 -2
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +61 -6
  4. package/dist/actions.js.map +1 -1
  5. package/dist/advanced-display.d.ts +35 -2
  6. package/dist/advanced-display.d.ts.map +1 -1
  7. package/dist/advanced-display.js +28 -9
  8. package/dist/advanced-display.js.map +1 -1
  9. package/dist/anchor.d.ts +3 -1
  10. package/dist/anchor.d.ts.map +1 -1
  11. package/dist/anchor.js +5 -5
  12. package/dist/anchor.js.map +1 -1
  13. package/dist/auth-screen.d.ts.map +1 -1
  14. package/dist/auth-screen.js +5 -2
  15. package/dist/auth-screen.js.map +1 -1
  16. package/dist/avatar-blobatar-motion.d.ts.map +1 -1
  17. package/dist/avatar-blobatar-motion.js +2 -1
  18. package/dist/avatar-blobatar-motion.js.map +1 -1
  19. package/dist/avatar-blobatar.d.ts.map +1 -1
  20. package/dist/avatar-blobatar.js +2 -1
  21. package/dist/avatar-blobatar.js.map +1 -1
  22. package/dist/bottom-cta.d.ts +8 -1
  23. package/dist/bottom-cta.d.ts.map +1 -1
  24. package/dist/bottom-cta.js +6 -2
  25. package/dist/bottom-cta.js.map +1 -1
  26. package/dist/carousel-motion.d.ts.map +1 -1
  27. package/dist/carousel-motion.js +11 -2
  28. package/dist/carousel-motion.js.map +1 -1
  29. package/dist/carousel.d.ts +10 -0
  30. package/dist/carousel.d.ts.map +1 -1
  31. package/dist/carousel.js +23 -7
  32. package/dist/carousel.js.map +1 -1
  33. package/dist/collapsible.d.ts +6 -0
  34. package/dist/collapsible.d.ts.map +1 -1
  35. package/dist/collapsible.js +22 -20
  36. package/dist/collapsible.js.map +1 -1
  37. package/dist/collection-rail.d.ts +4 -4
  38. package/dist/collection-rail.d.ts.map +1 -1
  39. package/dist/collection-rail.js.map +1 -1
  40. package/dist/conversation-row.d.ts.map +1 -1
  41. package/dist/conversation-row.js +4 -1
  42. package/dist/conversation-row.js.map +1 -1
  43. package/dist/data-table.d.ts +2 -0
  44. package/dist/data-table.d.ts.map +1 -1
  45. package/dist/data-table.js +2 -2
  46. package/dist/data-table.js.map +1 -1
  47. package/dist/display.d.ts +60 -3
  48. package/dist/display.d.ts.map +1 -1
  49. package/dist/display.js +33 -10
  50. package/dist/display.js.map +1 -1
  51. package/dist/evidence.d.ts +1 -1
  52. package/dist/evidence.d.ts.map +1 -1
  53. package/dist/evidence.js +2 -1
  54. package/dist/evidence.js.map +1 -1
  55. package/dist/feedback.d.ts +5 -0
  56. package/dist/feedback.d.ts.map +1 -1
  57. package/dist/feedback.js +7 -5
  58. package/dist/feedback.js.map +1 -1
  59. package/dist/floating-action-button.js +1 -1
  60. package/dist/floating-action-button.js.map +1 -1
  61. package/dist/forms.d.ts.map +1 -1
  62. package/dist/forms.js +4 -4
  63. package/dist/forms.js.map +1 -1
  64. package/dist/image-choice.js +3 -3
  65. package/dist/image-choice.js.map +1 -1
  66. package/dist/index.d.ts +5 -4
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +5 -4
  69. package/dist/index.js.map +1 -1
  70. package/dist/internal/initial-focus.d.ts +6 -0
  71. package/dist/internal/initial-focus.d.ts.map +1 -1
  72. package/dist/internal/initial-focus.js +6 -0
  73. package/dist/internal/initial-focus.js.map +1 -1
  74. package/dist/internal/pending-content.d.ts +19 -0
  75. package/dist/internal/pending-content.d.ts.map +1 -0
  76. package/dist/internal/pending-content.js +34 -0
  77. package/dist/internal/pending-content.js.map +1 -0
  78. package/dist/internal/screen-footer.d.ts +4 -2
  79. package/dist/internal/screen-footer.d.ts.map +1 -1
  80. package/dist/internal/screen-footer.js +2 -2
  81. package/dist/internal/screen-footer.js.map +1 -1
  82. package/dist/internal.d.ts +9 -1
  83. package/dist/internal.d.ts.map +1 -1
  84. package/dist/internal.js +4 -0
  85. package/dist/internal.js.map +1 -1
  86. package/dist/navigation.d.ts.map +1 -1
  87. package/dist/navigation.js +58 -4
  88. package/dist/navigation.js.map +1 -1
  89. package/dist/number-field.d.ts.map +1 -1
  90. package/dist/number-field.js +4 -3
  91. package/dist/number-field.js.map +1 -1
  92. package/dist/overlays.d.ts +4 -0
  93. package/dist/overlays.d.ts.map +1 -1
  94. package/dist/overlays.js +46 -18
  95. package/dist/overlays.js.map +1 -1
  96. package/dist/public-exports.generated.d.ts +6 -0
  97. package/dist/public-exports.generated.d.ts.map +1 -1
  98. package/dist/public-exports.generated.js +18 -0
  99. package/dist/public-exports.generated.js.map +1 -1
  100. package/dist/screen-flows.d.ts +13 -6
  101. package/dist/screen-flows.d.ts.map +1 -1
  102. package/dist/screen-flows.js +26 -15
  103. package/dist/screen-flows.js.map +1 -1
  104. package/dist/screens.d.ts +19 -6
  105. package/dist/screens.d.ts.map +1 -1
  106. package/dist/screens.js +22 -11
  107. package/dist/screens.js.map +1 -1
  108. package/dist/selection.d.ts +22 -0
  109. package/dist/selection.d.ts.map +1 -1
  110. package/dist/selection.js +32 -9
  111. package/dist/selection.js.map +1 -1
  112. package/dist/shortcut-rail.d.ts +27 -0
  113. package/dist/shortcut-rail.d.ts.map +1 -0
  114. package/dist/shortcut-rail.js +37 -0
  115. package/dist/shortcut-rail.js.map +1 -0
  116. package/dist/steps.d.ts +5 -2
  117. package/dist/steps.d.ts.map +1 -1
  118. package/dist/steps.js +3 -3
  119. package/dist/steps.js.map +1 -1
  120. package/dist/styles.css +242 -61
  121. package/dist/styles.layered.css +242 -61
  122. package/dist/task-list.d.ts +3 -1
  123. package/dist/task-list.d.ts.map +1 -1
  124. package/dist/task-list.js +2 -2
  125. package/dist/task-list.js.map +1 -1
  126. package/dist/theme.d.ts.map +1 -1
  127. package/dist/theme.js +1 -0
  128. package/dist/theme.js.map +1 -1
  129. package/dist/time-picker.d.ts +9 -0
  130. package/dist/time-picker.d.ts.map +1 -0
  131. package/dist/time-picker.js +74 -0
  132. package/dist/time-picker.js.map +1 -0
  133. package/dist/top-bar.d.ts +4 -0
  134. package/dist/top-bar.d.ts.map +1 -1
  135. package/dist/top-bar.js +2 -2
  136. package/dist/top-bar.js.map +1 -1
  137. package/package.json +26 -15
@@ -1 +1 @@
1
- {"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode, type Ref, type RefObject } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { TextArea } from \"./forms.js\";\nimport { CompositionLayout, ScreenLayout, type ScreenLayoutProps } from \"./screens.js\";\nimport { ScreenExitButton } from \"./internal/screen-exit.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { MessageReactions, type MessageMenuAction } from \"./internal/message-reactions.js\";\nimport { MediaAlbumView, useMediaAlbumIndex, type MediaAlbum } from \"./internal/media-album.js\";\nimport { validateMediaSetChoice } from \"@hjmds/design-contracts/screen-patterns\";\nexport type { MediaAlbum } from \"./internal/media-album.js\";\nimport type { ReactionPickerProps } from \"./reaction-picker.js\";\nimport { Stack, Text, Grid, VisuallyHidden } from \"./layout.js\";\nimport { SearchField } from \"./forms.js\";\nimport { Chip, RadioGroup } from \"./selection.js\";\nimport { AlertDialog, Menu, Sheet, type SheetProps } from \"./overlays.js\";\nimport { UploadItem } from \"./upload-item.js\";\nimport { type UploadItemDescriptor, type UploadItemLabels } from \"@hjmds/design-contracts/components/upload-item\";\nimport { type AlertDialogRequest } from \"@hjmds/design-contracts/components/alert-dialog\";\nimport { initialFocusDefaults, validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchDebounceMs, resolveSearchEmptyCause, resolveSearchFilterRailVisible, resolveSearchScreenPhase, resolveFocusAfterRemoval, screenPatternRecipe, commentThreadRecipe, profileSummaryRecipe, searchScreenRecipe, resolveCommentMenuItems, type CommentMenuItemDescriptor, type SearchEmptyCause, type SearchFiltersRole, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from \"@hjmds/design-contracts/screen-patterns\";\nimport { resolveWindowClass } from \"@hjmds/design-contracts/responsive\";\nimport { containerRecipe, type ContainerGutter } from \"@hjmds/design-contracts/components/container\";\nimport { ListRow } from \"./display.js\";\nimport { Heading } from \"./heading.js\";\nimport { EmptyState, Skeleton } from \"./feedback.js\";\n\n/** Copy, pending state and mutations are controlled by the consuming product. */\n/** `icon` renders an icon-only button named by `label`; header actions (top-right) use it so a centered title keeps its width (2026-10-17). */\nexport type ScreenFlowAction = Readonly<{label:string; onAction():void; disabled?:boolean; pending?:boolean; icon?:ReactNode}>;\n/** Header tool action (refresh, add): icon-only so it never pushes the centered title. A required text `add` made\n * products route exits (a \"Cancel\" label) through it as a header text button (2026-10-17 screen review); exits use `exit`. */\nexport type ScreenFlowIconAction = ScreenFlowAction & Readonly<{icon:ReactNode}>;\n// `edge`: the action ends a header/row edge (IconButton/Button edge rule, 2026-10-17 audit); framed tones ignore it.\nfunction Action({action,secondary=false,buttonRef,edge}:{action:ScreenFlowAction;secondary?:boolean;buttonRef?:Ref<HTMLButtonElement>;edge?:\"start\"|\"end\"}){if(action.icon)return <IconButton ref={buttonRef} label={action.label} tone=\"ghost\" {...(edge?{edge}:{})} disabled={!!(action.disabled||action.pending)} onClick={action.onAction}>{action.icon}</IconButton>;return <Button ref={buttonRef} tone={secondary?\"ghost\":\"primary\"} {...(edge?{edge}:{})} disabled={!!(action.disabled||action.pending)} loading={action.pending??false} onClick={action.onAction}>{action.label}</Button>;}\ntype Base = Omit<ScreenLayoutProps,\"children\"|\"footer\">;\n// Stacked footer/sheet buttons use Stack gap \"xs\" (actionGroupRecipe.stackedGap 8); 12 read as split groups (button.md, 2026-10-17).\n\nexport type ListDetailScreenProps = Base & { list:ReactNode; detail?:Pick<ScreenLayoutProps,\"title\"|\"state\"|\"stateAction\"|\"notice\"|\"titleVisibility\"|\"headerAlignment\"> & {content:ReactNode}; back:ScreenFlowAction; refresh?:ScreenFlowIconAction; loadMore?:ScreenFlowAction };\n/** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */\nexport function ListDetailScreen({list,detail,back,refresh,loadMore,layoutStyle,...screen}:ListDetailScreenProps){\n const open=!!detail;\n // Seed with the first render: a deep link that mounts with detail open is not a user transition,\n // so it must not pull focus from wherever the host left it (address bar, router focus target).\n const listHost=useRef<HTMLDivElement>(null),detailHost=useRef<HTMLDivElement>(null),returnFocus=useRef<HTMLElement|null>(null),wasOpen=useRef(open);\n // The retained host is a fallback when a virtualized list removes its focused item.\n // Hidden lists preserve scroll but drop browser focus; retain the trigger and move into the\n // detail once, then restore it (or the list body if the item was removed). See usage/ListDetailScreen.\n useLayoutEffect(()=>{\n if(open&&!wasOpen.current)detailHost.current?.querySelector<HTMLElement>(\"button\")?.focus({preventScroll:true});\n if(!open&&wasOpen.current){\n const target=returnFocus.current;\n if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});\n // A retained trigger can also become disabled while detail is open.\n if(document.activeElement!==target)(listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')??listHost.current)?.focus({preventScroll:true});\n }\n wasOpen.current=open;\n },[open]);\n // layoutStyle places the outer host that owns both panes, not the inner list ScreenLayout.\n // \"Load more\" ends the list inside the scroll body, centered like LoadMore; the fixed footer is the bottom CTA slot (2026-10-17 review).\n return <div style={{height:\"100%\",...layoutStyle}}>\n <div ref={listHost} tabIndex={-1} hidden={open} style={{height:\"100%\"}} onFocusCapture={event=>{returnFocus.current=event.target as HTMLElement;}}><ScreenLayout {...screen} {...(refresh||screen.actions?{actions:<Stack axis=\"inline\" gap=\"xs\" align=\"center\">{/* Refresh no longer replaces the screen's own actions (2026-10-16 composition review). */}{screen.actions}{refresh?<Action action={refresh} secondary edge=\"end\"/>:null}</Stack>}:{})}>{loadMore?<div style={{display:\"flex\",flexDirection:\"column\",flex:\"1 1 auto\",minHeight:0,gap:screenPatternRecipe.itemGap}}>{list}<div style={{display:\"flex\",justifyContent:\"center\"}}><Action action={loadMore} secondary/></div></div>:list}</ScreenLayout></div>\n {detail?<div ref={detailHost} style={{height:\"100%\"}}><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} exit={{kind:\"back\",label:back.label,onClick:back.onAction,disabled:!!(back.disabled||back.pending)}}>{detail.content}</ScreenLayout></div>:null}\n </div>;\n}\n\nexport type EditorScreenProps = Omit<Base,\"leading\"|\"exit\"> & {children:ReactNode;submitPlacement?:\"header\"|\"footer\";dirty:boolean;submit:ScreenFlowAction;cancel:ScreenFlowAction;discard:Omit<Extract<AlertDialogRequest,{mode:\"confirm\"}>,\"onConfirm\"|\"fallbackErrorMessage\"> & {fallbackErrorMessage:string};draftStatus?:ReactNode;\n /** Multi-step editor: while supplied, the header exit is a back chevron that returns to the previous step instead of\n * the cancel ×, and never opens the discard prompt (stepping back keeps the draft). Omit it on the first step so the\n * exit leaves through `cancel` again (2026-10-18: spint compose replaced the header with its own TopBar for this). */\n stepBack?:ScreenFlowAction};\nexport function EditorScreen({children,dirty,submitPlacement=\"footer\",submit,cancel,discard,draftStatus,stepBack,initialFocus=initialFocusDefaults.editor,...screen}:EditorScreenProps){\n const [confirm,setConfirm]=useState(false);\n const cancelLocked=!!(cancel.disabled||cancel.pending||submit.pending);\n const submitAction={...submit,disabled:!!(submit.disabled||screen.state&&screen.state.kind!==\"ready\")};\n // A prompt opened before an external save must not bypass the current leave lock\n // or reappear once the save finishes. Keep the draft mounted throughout.\n const stepping=!!stepBack,stepLocked=!!(stepBack?.disabled||stepBack?.pending||submit.pending);\n // A step-back exit replaces the cancel exit, so a discard prompt opened from the cancel exit cannot outlive it.\n useEffect(()=>{if(cancelLocked||stepping)setConfirm(false);},[cancelLocked,stepping]);\n // Preserve an async host result so AlertDialog can retain failure and retry.\n const leave=()=>{if(!cancelLocked)return cancel.onAction();};\n // Writing is the screen's purpose: focus the first field on entry unless the host opts out (2026-10-18).\n return <><ScreenLayout {...screen} initialFocus={initialFocus}\n exit={stepBack?{kind:\"back\",label:stepBack.label,disabled:stepLocked,onClick:()=>{if(!stepLocked)stepBack.onAction();}}\n :{kind:\"close\",label:cancel.label,disabled:cancelLocked,onClick:()=>{if(cancelLocked)return;if(dirty)setConfirm(true);else leave();}}}\n actions={submitPlacement===\"header\"?<Action action={submitAction}/>:screen.actions}\n footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submitAction}/></Stack>}\n >{children}</ScreenLayout><AlertDialog open={confirm&&!cancelLocked&&!stepping} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:leave}}/></>;\n}\n\nexport type ProfileScreenProps = Base & {summary:ReactNode;edit:ScreenFlowAction;children?:ReactNode;accountActions?:ReactNode;\n /** `below-summary` (default): ghost button under the summary. `summary`: the edit action goes first in the action row\n * of the ProfileSummary inside `summary` (2026-10-15 utilverse account decision: the edit action belongs inside the\n * profile card). With `summary`, the slot must contain a ProfileSummary, or the edit action is not drawn. */\n editPlacement?:\"below-summary\"|\"summary\"};\n// Hands ProfileScreen's edit action to the ProfileSummary inside its summary slot, wherever the product nests it.\nconst ProfileEditContext=createContext<ScreenFlowAction|undefined>(undefined);\nexport function ProfileScreen({summary,edit,children,accountActions,editPlacement=\"below-summary\",...screen}:ProfileScreenProps){return <ScreenLayout {...screen}><Stack gap=\"xl\">{editPlacement===\"summary\"?<ProfileEditContext.Provider value={edit}>{summary}</ProfileEditContext.Provider>:<CompositionLayout footer={<Action action={edit} secondary/>}>{summary}</CompositionLayout>}{children}{accountActions}</Stack></ScreenLayout>;}\n\n/** Operator decision on a report (dismiss, hide, uphold, overturn…). Labels are product copy; ids are product keys.\n * With `confirmation`, pressing opens that AlertDialog and only its `onConfirm` acts (same rule as `block`). */\nexport type ModerationDecision = ScreenFlowAction & Readonly<{id:string;tone?:\"primary\"|\"secondary\"|\"danger\";confirmation?:Extract<AlertDialogRequest,{mode:\"confirm\"}>}>;\n/** Free-text decision reason. `required` (default true) keeps every decision locked until it has non-blank text. */\nexport type ModerationDecisionReason = Readonly<{label:string;value:string;onValueChange(value:string):void;description?:string;maxLength?:number;required?:boolean;disabled?:boolean}>;\ntype ModerationReportFields = {variant?:\"report\";reasonPicker?:ReactNode;reasons:readonly {value:string;label:string}[];reason:string|null;onReasonChange(value:string):void;reasonLabel:string;children?:ReactNode;submit:ScreenFlowAction;block?:{action:ScreenFlowAction;confirmation:Extract<AlertDialogRequest,{mode:\"confirm\"}>}};\n/** Operator review (2026-10-18: utilverse review and appeal queues hand-built this with TextArea, buttons and Alert):\n * `children` shows the reported content, then the reason field and the decisions; `resolution` replaces both once decided. */\ntype ModerationReviewFields = {variant:\"review\";children?:ReactNode;decisionReason:ModerationDecisionReason;decisions:readonly ModerationDecision[];resolution?:ReactNode};\nexport type ModerationFields = ModerationReportFields|ModerationReviewFields;\nexport type ModerationScreenProps = Base & ModerationFields;\n/** Body, stacked actions and confirmations shared by ModerationScreen (screen chrome) and ModerationForm (none). */\nfunction useModeration(fields:ModerationFields,ready:boolean,cancel?:ScreenFlowAction):{body:ReactNode;actions:ReactNode;dialogs:ReactNode}{\n const [confirm,setConfirm]=useState(false);\n const [confirmId,setConfirmId]=useState<string|null>(null);\n const review=fields.variant===\"review\"?fields:null,report=fields.variant===\"review\"?null:fields;\n const hasBlock=!!report?.block;\n // Withdrawing the action ends that confirmation session; a later action needs\n // a new explicit press even if the screen itself stays mounted.\n useEffect(()=>{if(!hasBlock)setConfirm(false);},[hasBlock]);\n const confirming=review&&!review.resolution?review.decisions.find(decision=>decision.id===confirmId&&decision.confirmation):undefined;\n // Same rule for a decision: its confirmation closes when the decision or its confirmation is withdrawn or resolved.\n useEffect(()=>{if(confirmId!==null&&!confirming)setConfirmId(null);},[confirmId,confirming]);\n const cancelAction=cancel?<Action action={cancel} secondary/>:null;\n if(review){\n const busy=review.decisions.some(decision=>decision.pending);\n const reasonMissing=(review.decisionReason.required??true)&&!review.decisionReason.value.trim();\n const field=review.resolution??<TextArea label={review.decisionReason.label} value={review.decisionReason.value} onChange={event=>review.decisionReason.onValueChange(event.currentTarget.value)}\n {...(review.decisionReason.description===undefined?{}:{description:review.decisionReason.description})} {...(review.decisionReason.maxLength===undefined?{}:{maxLength:review.decisionReason.maxLength})}\n required={review.decisionReason.required??true} disabled={!!review.decisionReason.disabled||busy}/>;\n // One decision at a time: a pending decision locks the others and the reason it was taken with.\n const decisions=review.resolution?[]:review.decisions.map(decision=>{const locked=!!decision.disabled||busy||!ready||reasonMissing;\n return <Button key={decision.id} tone={decision.tone??\"secondary\"} disabled={locked} loading={decision.pending??false} onClick={()=>{if(locked)return;if(decision.confirmation)setConfirmId(decision.id);else decision.onAction();}}>{decision.label}</Button>;});\n return {body:<Stack gap=\"lg\">{review.children}{field}</Stack>,\n actions:decisions.length||cancelAction?<Stack gap=\"xs\">{decisions}{cancelAction}</Stack>:null,\n dialogs:confirming?.confirmation?<AlertDialog open onOpenChange={open=>{if(!open)setConfirmId(null);}} request={confirming.confirmation}/>:null};\n }\n const r=report!;\n return {body:<Stack gap=\"lg\">{r.reasonPicker??(r.reasons.length?<RadioGroup accessibilityLabel={r.reasonLabel} orientation=\"vertical\" items={r.reasons} value={r.reason} onValueChange={value=>{if(value)r.onReasonChange(value);}}/>:null)}{r.children}</Stack>,\n actions:<Stack gap=\"xs\"><Action action={{...r.submit,disabled:r.submit.disabled||!ready||!r.reasons.some(item=>item.value===r.reason)}}/>{r.block?<Action action={{...r.block.action,onAction:()=>setConfirm(true)}} secondary/>:null}{cancelAction}</Stack>,\n dialogs:r.block?<AlertDialog open={confirm} onOpenChange={setConfirm} request={r.block.confirmation}/>:null};\n}\n// Every key of either variant, so the rest of the props reach ScreenLayout unchanged whichever variant is used.\nconst moderationFieldKeys=[\"variant\",\"reasonPicker\",\"reasons\",\"reason\",\"onReasonChange\",\"reasonLabel\",\"children\",\"submit\",\"block\",\"decisionReason\",\"decisions\",\"resolution\"] as const;\nexport function ModerationScreen(props:ModerationScreenProps){\n const screen:Record<string,unknown>={...props};for(const key of moderationFieldKeys)delete screen[key];\n const {body,actions,dialogs}=useModeration(props,!props.state||props.state.kind===\"ready\");\n return <><ScreenLayout {...screen as Base} footer={actions}>{body}</ScreenLayout>{dialogs}</>;\n}\n/** The moderation fields and actions without screen chrome, for a report opened inside a letter, card or Sheet\n * (2026-10-18: diairy turned ModerationScreen's header and padding off to place it in a letter). The host owns the\n * surrounding surface and placement; `title` is an optional section heading (omit it inside a titled Sheet) and\n * `cancel` adds a ghost \"collapse\" action after the others.\n * `description` and `actions` fill the same CompositionLayout header (2026-10-18: utilverse review queues wrapped the\n * form in a second CompositionLayout only to show the report time and a refresh button beside the title). */\nexport type ModerationFormProps = ModerationFields & Readonly<{title?:string;headingLevel?:1|2|3|4|5|6;description?:string;actions?:ReactNode;cancel?:ScreenFlowAction;layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]}>;\nexport function ModerationForm(props:ModerationFormProps){\n const {body,actions,dialogs}=useModeration(props,true,props.cancel);\n return <><CompositionLayout {...(props.title===undefined?{}:{title:props.title})} {...(props.headingLevel===undefined?{}:{headingLevel:props.headingLevel})} {...(props.description===undefined?{}:{description:props.description})} {...(props.actions===undefined?{}:{actions:props.actions})} {...(props.layoutStyle===undefined?{}:{layoutStyle:props.layoutStyle})} footer={actions}>{body}</CompositionLayout>{dialogs}</>;\n}\n\n\n/** Source choice only: permission, capture, decoding and draft persistence belong to the host. */\nexport type PhotoSourceSheetProps = Readonly<{\n open:boolean;onOpenChange(open:boolean):void;onSelect(source:PhotoSource):void;\n labels:PhotoSourceLabels;disabled?:boolean;cameraAvailable?:boolean;\n}>;\nexport function PhotoSourceSheet({open,onOpenChange,onSelect,labels,disabled=false,cameraAvailable=true}:PhotoSourceSheetProps){\n // File-input click must stay in the user's activation stack. Deferring until the\n // sheet animation ends can cause browsers to reject camera/album selection.\n const select=(source:PhotoSource)=>{if(disabled)return;onOpenChange(false);onSelect(source);};\n return <Sheet open={open} onOpenChange={onOpenChange} title={labels.title} closeLabel={labels.cancel}><Stack gap=\"xs\">\n <Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"library\")}>{labels.library}</Button>\n {cameraAvailable?<Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"camera\")}>{labels.camera}</Button>:null}\n </Stack></Sheet>;\n}\n\nexport type MediaSelectionItem = {descriptor:UploadItemDescriptor;preview?:ReactNode};\n/**\n * Quarter-turn action for a picked photo (2026-10-18, Utilverse photo-to-PDF). The product stores the rotation and\n * applies it to `preview` and its output; HJM only places the button with the other item actions.\n */\nexport type MediaSelectionRotate = Readonly<{label:string;itemLabel(item:MediaSelectionItem):string;onRotate(id:string):void}>;\n/**\n * Copy and callbacks of one item's actions, shared by the screen grid and MediaSelectionCell.\n * `disabled` locks move/rotate/remove while the host runs a job over the selection (2026-10-18: Utilverse photo-to-PDF\n * and photo strip kept their own cells so a reorder could not diverge from a running build). Upload retry/cancel stay\n * live: they act on one transfer, not on the order or content the job reads.\n */\nexport type MediaSelectionItemActions = {labels:UploadItemLabels;actionLabels:{remove:string;moveUp:string;moveDown:string};removeLabel(item:MediaSelectionItem):string;moveUpLabel(item:MediaSelectionItem):string;moveDownLabel(item:MediaSelectionItem):string;onRemove(id:string):void;onMove(id:string,direction:-1|1):void;onRetry(id:string):void;onCancel(id:string):void;rotate?:MediaSelectionRotate;disabled?:boolean};\nexport type MediaSelectionScreenProps = Base & {library?:ReactNode;selectionSummary?:ReactNode;items:readonly MediaSelectionItem[];add?:ScreenFlowIconAction;done:ScreenFlowAction} & MediaSelectionItemActions;\n/** `index`/`count` place the item in the product's full list so the first/last move buttons disable correctly. */\nexport type MediaSelectionCellProps = MediaSelectionItemActions & Readonly<{item:MediaSelectionItem;index:number;count:number}>;\n/**\n * One picked item: preview, upload status, then move/rotate/remove. Exported (2026-10-18, Utilverse photo tools) so a\n * virtualized host (VirtualList, FlatList renderItem) renders the same cell as the screen grid instead of a copy.\n * Web keyboard focus recovery after removal belongs to the screen grid; a virtualized host owns its own.\n */\nexport function MediaSelectionCell({item,index,count,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,rotate,disabled=false}:MediaSelectionCellProps){\n const id=item.descriptor.id;\n // The job lock is temporary, so it keeps the focused action focusable (aria-disabled; Button drops the click) instead\n // of throwing keyboard focus to <body> for the length of the job. The list boundaries stay natively disabled.\n const lock=disabled?{\"aria-disabled\":true as const}:{};\n return <Stack data-hjm-media-item={id} gap=\"xs\">\n {item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/>\n <Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}>\n <Button data-media-action=\"up\" aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} {...lock} onClick={()=>onMove(id,-1)}>{actionLabels.moveUp}</Button>\n <Button data-media-action=\"down\" aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===count-1} {...lock} onClick={()=>onMove(id,1)}>{actionLabels.moveDown}</Button>\n {/* Rotate edits the photo and stays before remove, so the destructive action keeps the trailing place. */}\n {rotate?<Button data-media-action=\"rotate\" aria-label={rotate.itemLabel(item)} size=\"small\" tone=\"ghost\" {...lock} onClick={()=>rotate.onRotate(id)}>{rotate.label}</Button>:null}\n <Button data-media-action=\"remove\" aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" {...lock} onClick={()=>onRemove(id)}>{actionLabels.remove}</Button>\n </Stack>\n </Stack>;\n}\n/** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */\nexport function MediaSelectionScreen({library,selectionSummary,items,add,done,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,rotate,disabled,...screen}:MediaSelectionScreenProps){\n const itemActions={labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,...(rotate===undefined?{}:{rotate}),...(disabled===undefined?{}:{disabled})};\n const grid = useRef<HTMLDivElement>(null), addButton = useRef<HTMLButtonElement>(null);\n const focusedItem = useRef<{node:HTMLElement;id:string;index:number;body:HTMLElement|null}|null>(null);\n useLayoutEffect(() => {\n const previous = focusedItem.current, host = grid.current;\n if (!previous) return;\n const active = document.activeElement;\n if (!host) {\n focusedItem.current = null;\n // Empty-state replacement unmounts the grid; the ordinary last-removal\n // destination still applies. Other state/library replacements own their focus.\n if (!previous.node.isConnected && !items.length && screen.state?.kind === \"empty\" && library == null\n && (active === document.body || active === previous.body) && !addButton.current?.disabled) addButton.current?.focus({preventScroll:true});\n return;\n }\n const index = items.findIndex(item => item.descriptor.id === previous.id), moved = index >= 0 && index !== previous.index;\n if (index >= 0) previous.index = index;\n const reveal = (node:HTMLElement) => {\n const body = previous.body;\n if (!body?.contains(node) || body.dataset.scroll !== \"screen\") return;\n const bounds = node.getBoundingClientRect(), clip = body.getBoundingClientRect();\n // Scroll only the owned body, by the minimum needed to keep the action visible.\n if (bounds.top < clip.top) body.scrollTop += Math.floor(bounds.top - clip.top);\n else if (bounds.bottom > clip.bottom) body.scrollTop += Math.ceil(bounds.bottom - clip.bottom);\n };\n const disabled = previous.node.matches(\":disabled\");\n if (active !== document.body && active !== previous.body && !(active === previous.node && disabled)) {\n if (active === previous.node && moved) reveal(previous.node);\n return;\n }\n // A keyed reorder may detach a focused node; a boundary move may disable it.\n // Recover only focus owned by this grid, after the product accepts the change.\n const id = index < 0 ? items[Math.min(previous.index, items.length - 1)]?.descriptor.id : previous.id;\n const row = Array.from(host.querySelectorAll<HTMLElement>(\"[data-hjm-media-item]\")).find(node => node.dataset.hjmMediaItem === id);\n const target = index >= 0 && previous.node.isConnected && !disabled ? previous.node\n : row?.querySelector<HTMLButtonElement>(index < 0 ? '[data-media-action=\"remove\"]' : 'button[data-media-action]:not(:disabled)')\n ?? (!addButton.current?.disabled ? addButton.current : null);\n focusedItem.current = null;\n if (target) { target.focus({preventScroll:true}); reveal(target); }\n });\n return <ScreenLayout {...screen} {...(add||screen.actions?{actions:<Stack axis=\"inline\" gap=\"xs\" align=\"center\">{screen.actions}{add?<Action action={add} buttonRef={addButton} edge=\"end\"/>:null}</Stack>}:{})} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>\n {library??<Grid ref={grid} columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}\n onFocusCapture={event => {\n const node = event.target as HTMLElement, row = node.closest<HTMLElement>(\"[data-hjm-media-item]\");\n const id = row?.dataset.hjmMediaItem;\n if (id !== undefined) focusedItem.current = {node,id,index:items.findIndex(item => item.descriptor.id === id),body:node.closest<HTMLElement>(\".hjm-screen__body\")};\n }}\n onBlurCapture={event => {\n const node = event.target as HTMLElement;\n // Explicit blur/outside focus relinquishes ownership; DOM removal and a newly\n // disabled move button retain it until the layout effect chooses a successor.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : node.isConnected && !node.matches(\":disabled\")) focusedItem.current = null;\n }}>\n {items.map((item,index)=><MediaSelectionCell key={item.descriptor.id} item={item} index={index} count={items.length} {...itemActions}/>)}\n </Grid>}\n </ScreenLayout>;\n}\n\n\n/*\n * SearchScreen phase sections (2026-10-06, user-delegated decision to lift the search preview logic into\n * the public API; design: packages/design-contracts/docs/screen-patterns.md, SearchScreen two-step section).\n * Products supply data, copy, icons and requests; HJM owns placement, commit routing, focus after removal\n * and count announcements. Before this, every product had to rebuild these from Showcase preview code,\n * which AGENTS.md rules out as an adoption path. Kept in this file, not an internal module: a new module\n * edge would push ./screen-flows past its reviewed module-count budget (scripts/check-renderer-budgets.mjs).\n */\n\n/** Recent searches before typing. Rows commit; the trailing button removes one. */\nexport type SearchRecentQueries = Readonly<{\n items: readonly string[];\n title: string;\n clearAllLabel: string;\n onClearAll(): void;\n removeLabel(query: string): string;\n onRemove(query: string): void;\n /** Decorative leading glyph (for example a history icon). */\n icon?: ReactNode;\n /** Glyph inside the remove button; defaults to \"×\". */\n removeIcon?: ReactNode;\n /** Rows shown; default `searchScreenRecipe.recentVisible` (5). */\n maxVisible?: number;\n}>;\n/** Product-chosen queries shown before typing and after a query-caused zero result. */\nexport type SearchSuggestedQueries = Readonly<{ title: string; items: readonly string[] }>;\n/** A typed-ahead completion. `match` bolds the matched range (weight, not color, so it survives dark mode). */\nexport type SearchSuggestion = Readonly<{ query: string; match?: Readonly<{ start: number; end: number }> }>;\nexport type SearchSuggestions = Readonly<{\n items: readonly SearchSuggestion[];\n /** First row that commits the typed text as is, e.g. \"Search ‘q’\". */\n commitLabel(query: string): string;\n /** Polite announcement of the suggestion count. */\n countLabel(count: number): string;\n icon?: ReactNode;\n /** Rows shown under the commit row; default `searchScreenRecipe.suggestionVisible` (6). */\n maxVisible?: number;\n}>;\nexport type SearchSortOption = Readonly<{ id: string; label: string }>;\nexport type SearchSort = Readonly<{\n /** Accessible name of the sort menu. */\n label: string;\n /** Visible trigger text, usually the current option (\"Sort: Newest\"). */\n triggerLabel: string;\n value: string;\n options: readonly SearchSortOption[];\n onChange(id: string): void;\n /** Trailing glyph of the trigger (for example a chevron). */\n icon?: ReactNode;\n}>;\nexport type SearchResultSummary = Readonly<{\n /** Result total for the committed query; `null` while it loads (skeleton rows replace `children`). */\n count: number | null;\n /** Hide the visual total without losing loading, empty-state or announcement behavior. */\n countVisibility?: \"visible\" | \"hidden\";\n countLabel(count: number): string;\n /** Announced while loading. */\n loadingLabel: string;\n sort?: SearchSort;\n /** Above the count, e.g. a retained-results error Notice with retry. */\n notice?: ReactNode;\n /** Zero-result copy. Filters as the cause add \"clear all\"; the query as the cause adds suggested queries. */\n empty?: Readonly<{ title: string; description?: string }>;\n}>;\nexport type SearchAppliedFilter = Readonly<{ key: string; label: string }>;\nexport type SearchAppliedFilters = Readonly<{\n items: readonly SearchAppliedFilter[];\n removeLabel(label: string): string;\n onRemove(key: string): void;\n clearAllLabel: string;\n onClearAll(): void;\n removeIcon?: ReactNode;\n}>;\nexport type SearchFilterSheetLabels = Readonly<{\n close: string;\n reset: string;\n /** Primary action text for a live draft count, e.g. \"Show 12 results\"; `null` while counting. */\n apply(count: number | null): string;\n}>;\n/**\n * Draft/applied filter sheet. HJM copies `value` into a draft when the sheet opens, discards the draft\n * on any dismissal, and calls `onApply(draft)` only from the primary action.\n */\nexport type SearchFilterSheet<F> = Readonly<{\n open: boolean;\n onOpenChange(open: boolean): void;\n /** Sheet title; products that open one section from a facet chip pass that section's name. */\n title: string;\n /** Applied filters. */\n value: F;\n onApply(next: F): void;\n /** Live count for a draft. Return `null` while an async count is pending; `0` disables apply. */\n count(draft: F): number | null;\n /** Draft after \"reset\" (the open section, or everything). */\n reset(draft: F): F;\n /** Disables \"reset\" when the draft already equals its reset value. */\n isDefault(draft: F): boolean;\n renderContent(draft: F, setDraft: (next: F) => void): ReactNode;\n labels: SearchFilterSheetLabels;\n /** Default `large`; section sheets usually pass `auto`. */\n size?: SheetProps[\"size\"];\n /** First item of the filter rail that opens the sheet, named with the applied count. */\n trigger?: Readonly<{ label(appliedCount: number): string; accessibilityLabel(appliedCount: number): string; icon?: ReactNode }>;\n}>;\n\ntype Removal = { list: \"recent\" | \"applied\" | \"clearRecent\" | \"clearApplied\"; index: number; from: number };\n\nfunction Highlighted({ text, match }: { text: string; match: SearchSuggestion[\"match\"] }): ReactNode {\n if (!match || match.start < 0 || match.end <= match.start || match.end > text.length) return text;\n return <>{text.slice(0, match.start)}<Text as=\"span\" emphasis=\"strong\">{text.slice(match.start, match.end)}</Text>{text.slice(match.end)}</>;\n}\n\n/** Focus targets after removing a chip or row; returns refs and a scheduler the screen calls from its handlers. */\nfunction useSearchRemovalFocus(recentCount: number, appliedCount: number, input: () => HTMLElement | null | undefined) {\n const pending = useRef<Removal | null>(null);\n const recentHost = useRef<HTMLDivElement>(null);\n const appliedHost = useRef<HTMLDivElement>(null);\n const filterTrigger = useRef<HTMLButtonElement>(null);\n // Wait for the product to actually shrink the list: an async onRemove would otherwise focus the\n // chip that is about to disappear.\n useLayoutEffect(() => {\n const removal = pending.current;\n if (!removal) return;\n const recent = removal.list === \"recent\" || removal.list === \"clearRecent\";\n const now = recent ? recentCount : appliedCount;\n if (now >= removal.from) return;\n pending.current = null;\n const host = recent ? recentHost.current : appliedHost.current;\n const selector = recent ? \"[data-search-recent-remove]\" : \"[data-search-applied-filter]\";\n const items = Array.from(host?.querySelectorAll<HTMLElement>(selector) ?? []);\n const index = removal.list.startsWith(\"clear\") ? -1 : resolveFocusAfterRemoval(removal.index, items.length);\n const fallback = recent ? input() : filterTrigger.current ?? input();\n (index >= 0 ? items[index] : fallback)?.focus();\n }, [recentCount, appliedCount, input]);\n return { recentHost, appliedHost, filterTrigger, schedule: (removal: Removal) => { pending.current = removal; } };\n}\n\nfunction SearchAnnouncement({ text }: { text: string }) {\n // Only the text changes the live region, so the same count is not re-read on every render.\n return <VisuallyHidden role=\"status\">{text}</VisuallyHidden>;\n}\n\nfunction SearchIdleSections({ recent, suggested, legacy, onCommit, hostRef, onRemove, onClearAll }: {\n recent: SearchRecentQueries | undefined; suggested: SearchSuggestedQueries | undefined; legacy: ReactNode;\n onCommit(query: string): void; hostRef: RefObject<HTMLDivElement | null>;\n onRemove(query: string, index: number): void; onClearAll(): void;\n}) {\n const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];\n // Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.\n if (!visible.length && !suggested?.items.length) return <>{legacy}</>;\n return <Stack gap=\"xl\">\n {legacy}\n {recent && visible.length ? <Stack gap=\"sm\" ref={hostRef}>\n <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{recent.title}</Heading>\n <Button tone=\"ghost\" size=\"small\" edge=\"end\" onClick={onClearAll}>{recent.clearAllLabel}</Button>\n </Stack>\n {/* The remove control is the row's trailingAction on both platforms: it sits outside the row command, the row text\n stays on the gutter and the edge-aligned × glyph ends on the gutter line (2026-10-17 alignment decision). */}\n <Stack gap=\"xxs\">{visible.map((item, index) => <ListRow key={item} density=\"compact\" leading={recent.icon} title={item} onClick={() => onCommit(item)}\n trailingAction={<IconButton data-search-recent-remove=\"\" label={recent.removeLabel(item)} tone=\"ghost\" edge=\"end\" onClick={() => onRemove(item, index)}>{recent.removeIcon ?? \"×\"}</IconButton>} />)}</Stack>\n </Stack> : null}\n {suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n </Stack>;\n}\n\nfunction SearchSuggestedChips({ suggested, onCommit }: { suggested: SearchSuggestedQueries; onCommit(query: string): void }) {\n return <Stack gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{suggested.title}</Heading>\n <Stack axis=\"inline\" wrap gap=\"xs\">{suggested.items.map(item => <Chip key={item} label={item} onPress={() => onCommit(item)} />)}</Stack>\n </Stack>;\n}\n\nfunction SearchSuggestionList({ query, suggestions, onCommit }: { query: string; suggestions: SearchSuggestions; onCommit(query: string): void }) {\n const typed = query.trim();\n const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));\n return <Stack gap=\"xxs\">\n <ListRow density=\"compact\" leading={suggestions.icon} title={suggestions.commitLabel(typed)} onClick={() => onCommit(typed)} />\n {items.map(item => <ListRow key={item.query} density=\"compact\" leading={suggestions.icon} title={<Highlighted text={item.query} match={item.match} />} onClick={() => onCommit(item.query)} />)}\n </Stack>;\n}\n\nfunction SearchResultsHeader({ summary, applied, cause, appliedHost, onRemove, onClearAll, onSortChange }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; cause: SearchEmptyCause;\n appliedHost: RefObject<HTMLDivElement | null>; onRemove(key: string, index: number): void; onClearAll(): void; onSortChange(id: string): void;\n}) {\n const sort = summary?.sort;\n const showCount = summary && cause === \"none\" && summary.countVisibility !== \"hidden\";\n // A count-free search still owns its sorting action; do not hide it with the total.\n const showSort = summary && cause === \"none\" && sort;\n if (!summary?.notice && !showCount && !showSort && !applied?.items.length) return null;\n // The sort trigger ends the count row: edge=\"end\" puts its chevron on the gutter like the count text starts on it\n // (2026-10-17 measured audit: chevron 29 from the edge against 16).\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount || showSort ? <Stack axis=\"inline\" justify={showCount ? \"between\" : \"end\"} align=\"center\" gap=\"sm\" wrap>\n {showCount ? (summary!.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary!.countLabel(summary!.count)}</Text>) : null}\n {sort ? <Menu label={sort.label} align=\"end\" selectionMode=\"single\" value={sort.value} onValueChange={onSortChange}\n items={sort.options.map(option => ({ id: option.id, label: option.label }))}\n trigger={<Button size=\"small\" tone=\"ghost\" edge=\"end\" {...(sort.icon === undefined ? {} : { trailing: sort.icon })}>{sort.triggerLabel}</Button>} /> : null}\n </Stack> : null}\n {applied?.items.length ? <Stack ref={appliedHost} axis=\"inline\" wrap gap=\"xs\" align=\"center\">\n {applied.items.map((item, index) => <Chip key={item.key} data-search-applied-filter=\"\" label={item.label} aria-label={applied.removeLabel(item.label)}\n trailing={applied.removeIcon ?? <span aria-hidden=\"true\">×</span>} onPress={() => onRemove(item.key, index)} />)}\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{applied.clearAllLabel}</Button>\n </Stack> : null}\n </Stack>;\n}\n\nfunction SearchResultsBody({ summary, applied, suggested, cause, onCommit, onClearAll, children }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; suggested: SearchSuggestedQueries | undefined;\n cause: SearchEmptyCause; onCommit(query: string): void; onClearAll(): void; children: ReactNode;\n}) {\n // Loading keeps each row's own height (ListRow `loading`), so the list does not jump when results land.\n if (summary?.count === null) return <Stack gap=\"xxs\">{Array.from({ length: searchScreenRecipe.loadingRows }, (_, index) =>\n <ListRow key={index} loading title=\"\" description={summary.loadingLabel} {...(index === 0 ? { loadingLabel: summary.loadingLabel } : {})} />)}</Stack>;\n if (cause === \"none\" || !summary?.empty) return <>{children}</>;\n return <Stack gap=\"lg\">\n <EmptyState density=\"compact\" title={summary.empty.title} {...(summary.empty.description === undefined ? {} : { description: summary.empty.description })}\n {...(cause === \"filters\" && applied ? { action: <Button tone=\"secondary\" onClick={onClearAll}>{applied.clearAllLabel}</Button> } : {})} />\n {cause === \"query\" && suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n {children}\n </Stack>;\n}\n\nfunction SearchFilterTrigger<F>({ sheet, appliedCount, triggerRef }: { sheet: SearchFilterSheet<F>; appliedCount: number; triggerRef: RefObject<HTMLButtonElement | null> }) {\n const trigger = sheet.trigger!;\n return <Chip ref={triggerRef} label={trigger.label(appliedCount)} aria-label={trigger.accessibilityLabel(appliedCount)} aria-haspopup=\"dialog\"\n {...(trigger.icon === undefined ? {} : { leading: trigger.icon })} onPress={() => sheet.onOpenChange(true)} />;\n}\n\n/** Wide windows get a side sheet so results stay visible beside the conditions (expanded = 960+). */\nfunction sidePlacement() {\n return typeof window !== \"undefined\" && [\"expanded\", \"wide\"].includes(resolveWindowClass(window.innerWidth));\n}\n\nfunction SearchFilterSheetView<F>({ sheet }: { sheet: SearchFilterSheet<F> }) {\n // The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close,\n // so closing (×, scrim, back, Escape) never leaks half-edited conditions into the next opening.\n const [session, setSession] = useState<{ draft: F; side: boolean } | null>(null);\n if (sheet.open && !session) setSession({ draft: sheet.value, side: sidePlacement() });\n if (!sheet.open && session) setSession(null);\n const draft = session ? session.draft : sheet.value;\n const setDraft = (next: F) => setSession(current => current ? { ...current, draft: next } : current);\n const count = sheet.count(draft);\n // Reset sits left of the primary action on Web (sheet.md [secondary][primary]) and is always present,\n // disabled at the default, so the primary action does not jump when the draft changes.\n const footer = <Stack axis=\"inline\" justify=\"end\" gap=\"sm\" wrap>\n <Button tone=\"secondary\" disabled={sheet.isDefault(draft)} onClick={() => setDraft(sheet.reset(draft))}>{sheet.labels.reset}</Button>\n <Button disabled={count === 0} onClick={() => { sheet.onApply(draft); sheet.onOpenChange(false); }}>{sheet.labels.apply(count)}</Button>\n </Stack>;\n return <Sheet open={sheet.open} onOpenChange={open => sheet.onOpenChange(open)} title={sheet.title} closeLabel={sheet.labels.close}\n placement={session?.side ? \"end\" : \"bottom\"} size={sheet.size ?? \"large\"} footer={footer}>\n {sheet.renderContent(draft, setDraft)}\n </Sheet>;\n}\n\ntype SearchInputSlot = {queryField: ReactNode; queryClearLabel?: string} | {queryField?: never; queryClearLabel: string};\n/** `committedQuery` turns on two-step search; every commit (Enter, suggestion, recent, suggested query) then goes through `onSubmit`. */\n/** One name for the default field's progress on both platforms (Web SearchField `loading`, Native `busy`+`busyLabel`). */\ntype SearchProgressSlot = {searching?: never; searchingLabel?: never} | {searching: boolean; searchingLabel: string};\ntype SearchCommitSlot = {committedQuery?: never; onSubmit?: (query:string)=>void} | {committedQuery: string; onSubmit:(query:string)=>void};\nexport type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchCommitSlot & SearchProgressSlot & {query:string;queryLabel:string;onQueryChange(value:string):void;onSearch(query:string,context:{signal:AbortSignal}):void;debounceMs?:number;filters?:ReactNode;recentSearches?:ReactNode;children:ReactNode;\n /** ScreenLayout footer (bottom action or ad bar) under the results; it owns the bottom inset, as on every screen (unairplane rendered it outside the screen, 2026-10-17). */\n footer?:ScreenLayoutProps[\"footer\"];\n /** `scroll` keeps `filters` on one horizontally scrolling line that bleeds to the screen edges. */\n filtersOverflow?:\"wrap\"|\"scroll\";\n /** `scope` marks filters that choose what is searched (kind, region, map area), so they stay on a query-caused zero as its recovery; `narrow` (default) hides them there. */\n filtersRole?:SearchFiltersRole;\n /** Gutter the host (Container `gutter`, Sheet = `regular`) already applies around this screen; the scroll rail bleeds over it too. */\n hostGutter?:ContainerGutter;\n /** `hidden` drops the visible label (the field keeps `queryLabel` as its accessible name and placeholder). */\n queryLabelVisibility?:\"visible\"|\"hidden\";\n recentQueries?:SearchRecentQueries;suggestedQueries?:SearchSuggestedQueries;suggestions?:SearchSuggestions;\n resultSummary?:SearchResultSummary;appliedFilters?:SearchAppliedFilters;filterSheet?:SearchFilterSheet<F>};\n/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */\nexport function SearchScreen<F = unknown>({query,queryLabel,queryField,queryClearLabel,onQueryChange,onSearch,debounceMs,filters,recentSearches,children,onSubmit,committedQuery,filtersOverflow=\"wrap\",filtersRole=\"narrow\",hostGutter=\"none\",queryLabelVisibility=\"visible\",searching,searchingLabel,recentQueries,suggestedQueries,suggestions,resultSummary,appliedFilters,filterSheet,initialFocus=initialFocusDefaults.search,...screen}:SearchScreenProps<F>){\n // The host owns localized copy. A custom queryField owns its own clear affordance.\n if (queryField == null && !queryClearLabel?.trim()) throw new TypeError(\"SearchScreen requires a localized queryClearLabel for its default search field\");\n const searchDelay=resolveSearchDebounceMs(debounceMs);\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),searchDelay);return()=>{clearTimeout(timer);controller.abort();};},[query,searchDelay]);\n const fieldHost=useRef<HTMLDivElement>(null),bodyHost=useRef<HTMLDivElement>(null);\n const input=useCallback(()=>fieldHost.current?.querySelector<HTMLElement>(\"input\"),[]);\n const focus=useSearchRemovalFocus(recentQueries?.items.length??0,appliedFilters?.items.length??0,input);\n // Every commit path funnels through here so \"only committed searches are recorded\" holds at the API:\n // onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.\n const commit=(value:string)=>{const next=resolveSearchCommit(value);if(next===null)return;if(next!==query)onQueryChange(next);onSubmit?.(next);};\n // A picked suggestion/recent/suggested query unmounts with its phase, which dropped focus to <body>; move it to the\n // results region first (1.13.1, utilverse adoption 2026-10-06, Native twin: Keyboard.dismiss on every commit).\n // Leaving the field also closes a mobile browser's keyboard. Enter keeps focus in the field instead: it is still on\n // screen with the committed text, and moving it would make keyboard users Shift+Tab back to refine. Rejected: blur()\n // without a target, which leaves focus on <body> and loses the reading position for screen readers.\n const pick=(value:string)=>{if(resolveSearchCommit(value)!==null)bodyHost.current?.focus({preventScroll:true});commit(value);};\n // onSubmit separates \"typing\" from \"committed\" (recent-search writes, suggestion → results) without making\n // products rebuild the default field through queryField (2026-10-06 search redesign, usage/components/search-screen.md).\n // Enter while an IME is composing (Korean/Japanese) only confirms the syllable, so it must not commit.\n // The pending debounce is left alone: products decide whether submit should also flush a request.\n const submitProps=onSubmit?{enterKeyHint:\"search\" as const,onKeyDown:(event:KeyboardEvent<HTMLInputElement>)=>{if(event.key!==\"Enter\"||event.nativeEvent.isComposing||event.keyCode===229)return;commit(event.currentTarget.value);}}:{};\n // Reference services hide the label behind a placeholder; the placeholder names the search target (Apple HIG\n // search fields) and aria-label keeps the accessible name, so hiding never leaves an unnamed field.\n const labelProps=queryLabelVisibility===\"hidden\"?{\"aria-label\":queryLabel,placeholder:queryLabel}:{label:queryLabel};\n const phase=resolveSearchScreenPhase(query,committedQuery);\n const appliedCount=appliedFilters?.items.length??0;\n const cause=phase===\"results\"&&resultSummary?resolveSearchEmptyCause(resultSummary.count,appliedCount):\"none\";\n // Two-step search shows the rail only beside results; a query-caused zero hides narrowing filters (none can fix it)\n // but keeps scope filters, which are that zero's recovery (resolveSearchFilterRailVisible, Native twin).\n const showRail=resolveSearchFilterRailVisible(phase,committedQuery!==undefined,cause,filtersRole);\n const trigger=filterSheet?.trigger?<SearchFilterTrigger sheet={filterSheet} appliedCount={appliedCount} triggerRef={focus.filterTrigger}/>:null;\n const rail=!showRail?null:trigger&&filters!=null?<Stack axis=\"inline\" gap=\"xs\" wrap={filtersOverflow===\"wrap\"}>{trigger}{filters}</Stack>:trigger??filters;\n // Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.\n // A product-owned CSS/ScrollView rail would re-derive bleed, scroll padding and RTL per app.\n // contentInset=\"none\" leaves the gutter to the host, which CSS cannot see; hostGutter names it (Native twin).\n const bleed=(screen.contentInset===\"none\"?0:screenPatternRecipe.padding)+containerRecipe.gutters[hostGutter];\n const filterSlot=rail!=null&&filtersOverflow===\"scroll\"?<div className=\"hjm-search-screen__filters\" data-overflow=\"scroll\" style={{\"--hjm-search-filters-bleed\":`${bleed}px`} as CSSProperties}>{rail}</div>:rail;\n const visibleSuggestions=suggestions?.items.slice(0,Math.max(0,suggestions.maxVisible??searchScreenRecipe.suggestionVisible)).length??0;\n const countAnnouncement=phase===\"typing\"&&suggestions?suggestions.countLabel(visibleSuggestions):phase===\"results\"&&resultSummary&&resultSummary.count!==null?resultSummary.countLabel(resultSummary.count):\"\";\n // 2026-10-06 utilverse adoption: products swapped the whole field just to show progress. The Web spinner is\n // aria-hidden, so the localized searching label goes through the same status region as the counts.\n const announcement=searching&&searchingLabel?searchingLabel:countAnnouncement;\n const removeRecent=(item:string,index:number)=>{focus.schedule({list:\"recent\",index,from:recentQueries!.items.length});recentQueries!.onRemove(item);};\n const clearRecent=()=>{focus.schedule({list:\"clearRecent\",index:-1,from:recentQueries!.items.length});recentQueries!.onClearAll();};\n const removeApplied=(key:string,index:number)=>{focus.schedule({list:\"applied\",index,from:appliedCount});appliedFilters!.onRemove(key);};\n const clearApplied=()=>{focus.schedule({list:\"clearApplied\",index:-1,from:appliedCount});appliedFilters!.onClearAll();};\n // A new order starts at the top; the previous offset would land mid-list in unrelated results.\n const changeSort=(id:string)=>{resultSummary?.sort?.onChange(id);bodyHost.current?.closest(\".hjm-screen__body\")?.scrollTo?.({top:0});};\n const idle=<SearchIdleSections recent={recentQueries} suggested={suggestedQueries} legacy={recentSearches} onCommit={pick} hostRef={focus.recentHost} onRemove={removeRecent} onClearAll={clearRecent}/>;\n const body=phase===\"idle\"?<>{idle}{committedQuery===undefined?children:null}</>\n :phase===\"typing\"?(suggestions?<SearchSuggestionList query={query} suggestions={suggestions} onCommit={pick}/>:null)\n :<><SearchResultsHeader summary={resultSummary} applied={appliedFilters} cause={cause} appliedHost={focus.appliedHost} onRemove={removeApplied} onClearAll={clearApplied} onSortChange={changeSort}/>\n <SearchResultsBody summary={resultSummary} applied={appliedFilters} suggested={suggestedQueries} cause={cause} onCommit={pick} onClearAll={clearApplied}>{children}</SearchResultsBody></>;\n // Search-first routes have no visible heading: navigation and input share one row.\n // Keep explicit host headers and described/titled screens in their existing layout.\n const inlineNavigation=screen.titleVisibility===\"hidden\"&&screen.header==null;\n const searchInput=queryField ?? <SearchField {...labelProps} clearLabel={queryClearLabel!} value={query} onValueChange={onQueryChange} loading={searching??false} {...submitProps}/>;\n const queryRow=inlineNavigation?<Stack axis=\"inline\" align=\"center\" gap=\"sm\">{screen.exit?<ScreenExitButton {...screen.exit}/>:null}<div style={{flex:1,minWidth:0}}>{searchInput}</div>{screen.actions}</Stack>:searchInput;\n // The query field is the search screen's primary input (2026-10-18 entry focus).\n return <><ScreenLayout {...screen} initialFocus={initialFocus} {...(inlineNavigation?{header:<></>}: {})} notice={<Stack gap=\"sm\" ref={fieldHost}>{queryRow}{filterSlot}{screen.notice}</Stack>}><Stack gap=\"lg\" ref={bodyHost} className=\"hjm-search-screen__results\" tabIndex={-1}>{suggestions||resultSummary||searchingLabel?<SearchAnnouncement text={announcement}/>:null}{body}</Stack></ScreenLayout>\n {filterSheet?<SearchFilterSheetView sheet={filterSheet}/>:null}</>;\n}\n\nexport type PermissionScreenProps = Base & {status:PermissionScreenStatus;illustration?:ReactNode;explanation:ReactNode;request:ScreenFlowAction;settings:ScreenFlowAction;continueAction:ScreenFlowAction;skip?:ScreenFlowAction};\nexport function PermissionScreen({status,illustration,explanation,request,settings,continueAction,skip,...screen}:PermissionScreenProps){const kind=resolvePermissionAction(status);const primary=kind===\"request\"?request:kind===\"settings\"?settings:kind===\"continue\"?continueAction:null;return <ScreenLayout {...screen} footer={<Stack gap=\"xs\">{primary?<Action action={primary}/>:null}{skip?<Action action={skip} secondary/>:null}</Stack>}><Stack gap=\"xl\" align=\"center\">{illustration}{explanation}</Stack></ScreenLayout>;}\n\nexport type OnboardingStep = {id:string;title:string;description:string;content:ReactNode};\nexport type OnboardingScreenProps = {steps:readonly OnboardingStep[];index:number;onIndexChange(index:number):void;nextLabel:string;backLabel:string;complete:ScreenFlowAction;skip?:ScreenFlowAction;progressLabel(index:number,total:number):string;layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]};\nexport function OnboardingScreen({steps,index,onIndexChange,nextLabel,backLabel,complete,skip,progressLabel,layoutStyle}:OnboardingScreenProps){const position=resolveOnboardingStep(steps.length,index);const step=steps[index]!;\n // Completion and skip persist the same flow: keep navigation stable until the receipt.\n const host=useRef<HTMLDivElement|null>(null);\n // ScreenLayout owns this scroll region; keep focus while resetting each new step.\n useLayoutEffect(()=>{const body=host.current?.querySelector<HTMLElement>(\".hjm-screen__body\");if(body)body.scrollTop=0;},[index]);\n const pending=!!(complete.pending||skip?.pending);\n return <div ref={host} style={{display:\"contents\"}}><ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} actions={skip?<Action action={{...skip,disabled:!!(skip.disabled||pending)}} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"xs\"><Action action={position.last?{...complete,disabled:!!(complete.disabled||pending)}:{label:nextLabel,disabled:pending,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,disabled:pending,onAction:()=>onIndexChange(index-1)}} secondary/>:null}</Stack>}>{step.content}</ScreenLayout></div>;}\n\nexport type CommentThreadItem = Readonly<{id:string;parentId:string|null;author:string;body:ReactNode;bodyText?:string;timeLabel:string;timeDateTime?:string;likeCountLabel:string;avatar?:ReactNode;likeIcon:ReactNode;likeLabel:string;likeAction?:ReactNode;actions?:ReactNode;canReply?:boolean;replyDisabled?:boolean;\n /** Long-press the comment (author and body) to react; the product owns the stored value and summary. */\n reactions?:CommentReactions;reactionSummary?:ReactNode;\n /** Optional photo or sticker under the body; HJM bounds its width and corners, the product sizes the image. */\n media?:ReactNode;\n /**\n * Where the time label sits. \"auto\" keeps it beside the author unless `bodyText` inlines the author; \"actions\" moves it\n * into the line under the body with reactions and Reply, for rich (non-text) bodies such as Spint's flower stamp\n * (2026-10-18). Default \"auto\".\n */\n timePlacement?:\"auto\"|\"actions\";\n /**\n * Inline per-comment panel (edit, report or block form) under the Reply line, outside the long-press target\n * (2026-10-18, Utilverse). The product owns its open state, focus, submit and close; HJM owns its place in the row.\n */\n panel?:ReactNode;\n /**\n * Paged photo set under the body (2026-10-18, Utilverse): HJM mounts only the shown page so the product can fetch one\n * authorized image at a time. Exclusive with `media` (validated at render); it sits outside the long-press target because it has its own buttons.\n */\n mediaAlbum?:MediaAlbum}>;\nexport type CommentReactions = ReactionPickerProps & Readonly<{closeLabel:string;menuAction?:Readonly<{label:string;onPress():void;disabled?:boolean}>;menuActions?:readonly MessageMenuAction[];reportAction?:Readonly<{label:string;onPress():void;disabled?:boolean;icon?:ReactNode}>;interactiveContent?:boolean;/** Icon for the automatic \"reply\" row of the hold menu. */replyIcon?:ReactNode}>;\n/**\n * HJM-owned \"more\" menu per comment (2026-10-17: common comment structure belongs to HJM, review S4#7). HJM draws the\n * vertical-dots button at the row's trailing edge and opens the shared Menu with danger items last; the product supplies\n * only the localized button name, the items allowed for that comment and the action callback.\n */\nexport type CommentMenu = Readonly<{\n /** Localized accessible name of the button, e.g. \"More options for seoyeon's comment\". */\n label(item: CommentThreadItem): string;\n /** Items allowed for this comment (permission is product-owned). An empty list omits the button for that row. */\n items(item: CommentThreadItem): readonly CommentMenuItemDescriptor[];\n /** Runs after the menu closes, so a confirmation dialog can open without competing with the menu for focus. */\n onAction(item: CommentThreadItem, id: string): void;\n}>;\nexport type CommentThreadScreenProps = Base & {items:readonly CommentThreadItem[];expandedIds:readonly string[];onExpandedChange(id:string):void;onLike(id:string):void;onReply(id:string):void;replyLabel:string;repliesLabel(count:number,expanded:boolean):string;composer?:ReactNode;threadHeader?:ReactNode;threadFooter?:ReactNode;commentMenu?:CommentMenu};\nexport type CommentThreadRowProps = Readonly<{ layoutStyle?: ScreenLayoutProps[\"layoutStyle\"]; item: CommentThreadItem; onLike(id: string): void; onReply(id: string): void; replyLabel: string; commentMenu?: CommentMenu }>;\n/** Quiet secondary actions (reply, expand) read as muted copy beside the body, not as filled buttons. */\nfunction CommentTextAction({label,onPress,disabled=false,expanded}:Readonly<{label:string;onPress():void;disabled?:boolean;expanded?:boolean}>){\n return <button type=\"button\" className=\"hjm-comment-row__action\" disabled={disabled} aria-expanded={expanded} onClick={onPress}>{label}</button>;\n}\n\n/** Vertical dots drawn in the icon grid, matching Native's drawn glyph (the semantic `more` icon is horizontal). */\nfunction CommentMenuGlyph(){const size=commentThreadRecipe.menuGlyphSize;return <svg aria-hidden=\"true\" focusable=\"false\" width={size} height={size} viewBox=\"0 0 24 24\" fill=\"currentColor\">{[5,12,19].map(y=><circle key={y} cx=\"12\" cy={y} r=\"1.75\"/>)}</svg>;}\nfunction CommentMenuButton({item,menu,items}:Readonly<{item:CommentThreadItem;menu:CommentMenu;items:readonly CommentMenuItemDescriptor[]}>){\n const label=menu.label(item);\n return <Menu label={label} align=\"end\" trigger={<IconButton label={label} tone=\"ghost\"><CommentMenuGlyph/></IconButton>} items={items.map(entry=>({id:entry.id,label:entry.label,textValue:entry.label,...(entry.tone===undefined?{}:{tone:entry.tone}),...(entry.disabled===undefined?{}:{disabled:entry.disabled})}))} onActionAfterDismiss={id=>menu.onAction(item,id)}/>;\n}\n\n/** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */\nexport function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle, commentMenu }: CommentThreadRowProps) {\n validateMediaSetChoice(item.media!=null,item.mediaAlbum!==undefined);\n const [albumIndex,setAlbumIndex]=useMediaAlbumIndex(item.mediaAlbum);\n // bodyText inlines the author, so its time always moves under the body; rich bodies opt in with timePlacement.\n const timeInActions=item.bodyText!==undefined||item.timePlacement===\"actions\";\n const avatarSize=item.parentId===null?commentThreadRecipe.avatarSize:commentThreadRecipe.replyAvatarSize;\n const canReply=item.canReply??item.parentId===null;\n const menuItems=commentMenu?resolveCommentMenuItems(commentMenu.items(item)):[];\n const time=item.timeLabel?<time className=\"hjm-comment-row__time\" dateTime={item.timeDateTime}><Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text></time>:null;\n // The like count sits under the heart so the text column carries only identity, body and reply.\n return <Stack key={item.id} axis=\"inline\" align=\"start\" gap=\"xs\" {...(layoutStyle === undefined ? {} : {layoutStyle})}>{item.avatar?<div className=\"hjm-comment-row__avatar\" style={{inlineSize:avatarSize}}>{item.avatar}</div>:null}<div className=\"hjm-comment-row__text\" style={{gap:commentThreadRecipe.lineGap}}>\n {/* Only identity and body are the hold target, so the reply action keeps its own button semantics. */}\n {(()=>{const identity=<>{item.bodyText!==undefined?<Text><Text emphasis=\"strong\">{item.author}</Text>{\" \"}{item.bodyText}</Text>:(item.author||(item.timeLabel&&!timeInActions))?<Stack axis=\"inline\" gap=\"xxs\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.author?<Text variant=\"caption\" emphasis=\"strong\">{item.author}</Text>:null}{timeInActions?null:time}</Stack>:null}\n {item.body}{item.media?<div className=\"hjm-comment-row__media\" style={{maxInlineSize:commentThreadRecipe.mediaMaxWidth,borderRadius:commentThreadRecipe.mediaRadius}}>{item.media}</div>:null}</>;return item.reactions?<MessageReactions {...item.reactions} {...((item.canReply??item.parentId===null)&&!item.replyDisabled ? {replyAction:{label:replyLabel,onPress:()=>onReply(item.id),...(item.reactions.replyIcon===undefined?{}:{icon:item.reactions.replyIcon})}} : {})} triggerClassName=\"hjm-comment-row__reactions\">{identity}</MessageReactions>:identity;})()}\n {item.mediaAlbum?<MediaAlbumView className=\"hjm-comment-row__album\" album={item.mediaAlbum} index={albumIndex} onIndexChange={setAlbumIndex} width={commentThreadRecipe.mediaMaxWidth} radius={commentThreadRecipe.mediaRadius}/>:null}\n {(timeInActions&&time)||canReply||item.reactionSummary?<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{timeInActions?time:null}{item.reactionSummary}{canReply?<CommentTextAction label={replyLabel} disabled={item.replyDisabled??false} onPress={()=>onReply(item.id)}/>:null}</Stack>:null}\n {/* The text column already spaces lines by lineGap; the panel adds the rest of panelGap. */}\n {item.panel!=null?<div className=\"hjm-comment-row__panel\" style={{marginBlockStart:commentThreadRecipe.panelGap-commentThreadRecipe.lineGap}}>{item.panel}</div>:null}</div>\n <div className=\"hjm-comment-row__like\" {...(menuItems.length||item.actions==null&&item.likeAction===undefined?{\"data-edge\":\"end\"}:{})} style={{\"--hjm-comment-anchor-line\":`var(--hjm-type-${item.bodyText!==undefined?commentThreadRecipe.actionAnchor.inlineTextVariant:commentThreadRecipe.actionAnchor.authorTextVariant}-line-height)`} as CSSProperties}><Stack axis=\"inline\" gap=\"xxs\" align=\"center\" layoutStyle={{flexShrink:0}}>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}{item.actions}{commentMenu&&menuItems.length?<CommentMenuButton item={item} menu={commentMenu} items={menuItems}/>:null}</Stack>{item.likeCountLabel?<div className=\"hjm-comment-row__like-count\" style={{inlineSize:commentThreadRecipe.likeColumnWidth}}><Text variant=\"caption\" tone=\"muted\">{item.likeCountLabel}</Text></div>:null}</div></Stack>;\n}\n\n/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */\nexport function CommentThreadScreen({items,expandedIds,onExpandedChange,onLike,onReply,replyLabel,repliesLabel,composer,threadHeader,threadFooter,commentMenu,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // Index replies once; rescanning every item for each root makes long threads quadratic.\n const roots:CommentThreadItem[]=[], repliesByParent=new Map<string,CommentThreadItem[]>();\n const expanded=new Set(expandedIds);\n for(const item of items){\n if(item.parentId===null)roots.push(item);\n else {const siblings=repliesByParent.get(item.parentId);if(siblings)siblings.push(item);else repliesByParent.set(item.parentId,[item]);}\n }\n const row=(item:CommentThreadItem)=><CommentThreadRow key={item.id} item={item} onLike={onLike} onReply={onReply} replyLabel={replyLabel} {...(commentMenu===undefined?{}:{commentMenu})}/>;\n // Product context belongs in the same scroll body as comments. Putting a tall\n // overview in the fixed header forced a second scroll region in Spint (2026-10-08).\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{threadHeader}<div className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap}}>{roots.map(item=>{const replies=repliesByParent.get(item.id)??[];return <div key={item.id} className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap}}>{row(item)}{replies.length?<div className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap,marginInlineStart:commentThreadRecipe.replyIndent}}><CommentTextAction label={repliesLabel(replies.length,expanded.has(item.id))} expanded={expanded.has(item.id)} onPress={()=>onExpandedChange(item.id)}/>{expanded.has(item.id)?replies.map(row):null}</div>:null}</div>;})}</div>{threadFooter}</Stack></ScreenLayout>;\n}\n\nexport type ProfileSummaryProps = Readonly<{\n name: string;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n avatar: ReactNode;\n badge?: ReactNode;\n nameActions?: ReactNode;\n stats?: readonly Readonly<{ id: string; value: string; label: string; onPress?(): void; disabled?: boolean }>[];\n actions?: ReactNode;\n children?: ReactNode;\n}>;\n\n/** Profile identity and counts are common; routing and mutations stay controlled by the product. */\nexport function ProfileSummary({ name, headingLevel = 2, avatar, badge, nameActions, stats = [], actions, children }: ProfileSummaryProps) {\n const edit = useContext(ProfileEditContext);\n const { tone: editTone, size: editSize } = profileSummaryRecipe.editAction;\n const editButton = edit ? <Button tone={editTone} size={editSize} disabled={!!(edit.disabled || edit.pending)} loading={edit.pending ?? false} onClick={edit.onAction}>{edit.label}</Button> : null;\n return <CompositionLayout title={name} headingLevel={headingLevel} leading={<span style={{ display: \"flex\", width: profileSummaryRecipe.avatarSize, height: profileSummaryRecipe.avatarSize, flexShrink: 0, borderRadius: \"50%\", overflow: \"hidden\" }}>{avatar}</span>} badge={badge} actions={nameActions} footer={children}>\n {/* Static and actionable counts occupy identical cells; button hit areas must not shift their baselines. */}\n {stats.length ? <Stack axis=\"inline\" gap=\"md\" align=\"stretch\" layoutStyle={{ width: \"100%\" }}>{stats.map(stat =>\n <Stack key={stat.id} gap=\"xxs\" align=\"center\" justify=\"center\" layoutStyle={{ flex: 1, minWidth: 0 }}>\n {stat.onPress ? <Button tone=\"ghost\" aria-label={`${stat.value} ${stat.label}`} disabled={stat.disabled ?? false} onClick={stat.onPress} layoutStyle={{ width: \"100%\" }}><Stack gap=\"xxs\" align=\"center\"><Text emphasis=\"strong\">{stat.value}</Text><Text variant=\"caption\" tone=\"muted\">{stat.label}</Text></Stack></Button>\n : <><Text emphasis=\"strong\">{stat.value}</Text><Text variant=\"caption\" tone=\"muted\">{stat.label}</Text></>}\n </Stack>)}</Stack> : null}\n {editButton || actions ? <Stack axis=\"inline\" gap=\"sm\" wrap>{editButton}{actions}</Stack> : null}\n </CompositionLayout>;\n}\n"]}
1
+ {"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode, type Ref, type RefObject } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { TextArea } from \"./forms.js\";\nimport { CompositionLayout, ScreenLayout, type ScreenLayoutProps } from \"./screens.js\";\nimport { ScreenExitButton } from \"./internal/screen-exit.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { MessageReactions, type MessageMenuAction } from \"./internal/message-reactions.js\";\nimport { MediaAlbumView, useMediaAlbumIndex, type MediaAlbum } from \"./internal/media-album.js\";\nimport { validateMediaSetChoice } from \"@hjmds/design-contracts/screen-patterns\";\nexport type { MediaAlbum } from \"./internal/media-album.js\";\nimport type { ReactionPickerProps } from \"./reaction-picker.js\";\nimport { Stack, Text, Grid, VisuallyHidden } from \"./layout.js\";\nimport { SearchField } from \"./forms.js\";\nimport { Chip, RadioGroup } from \"./selection.js\";\nimport { AlertDialog, Menu, Sheet, type SheetProps } from \"./overlays.js\";\nimport { UploadItem } from \"./upload-item.js\";\nimport { type UploadItemDescriptor, type UploadItemLabels } from \"@hjmds/design-contracts/components/upload-item\";\nimport { type AlertDialogRequest } from \"@hjmds/design-contracts/components/alert-dialog\";\nimport { initialFocusDefaults, validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchDebounceMs, resolveSearchEmptyCause, resolveSearchFilterRailVisible, resolveSearchScreenPhase, resolveFocusAfterRemoval, screenPatternRecipe, commentThreadRecipe, profileSummaryRecipe, searchScreenRecipe, resolveCommentMenuItems, type CommentMenuItemDescriptor, type SearchEmptyCause, type SearchFiltersRole, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from \"@hjmds/design-contracts/screen-patterns\";\nimport { resolveWindowClass } from \"@hjmds/design-contracts/responsive\";\nimport { containerRecipe, type ContainerGutter } from \"@hjmds/design-contracts/components/container\";\nimport { ListRow } from \"./display.js\";\nimport { Heading } from \"./heading.js\";\nimport { EmptyState, Skeleton } from \"./feedback.js\";\n\n/** Copy, pending state and mutations are controlled by the consuming product. */\n/** `icon` renders an icon-only button named by `label`; header actions (top-right) use it so a centered title keeps its width (2026-10-17). */\nexport type ScreenFlowAction = Readonly<{label:string; onAction():void; disabled?:boolean; pending?:boolean; icon?:ReactNode}>;\n/** Header tool action (refresh, add): icon-only so it never pushes the centered title. A required text `add` made\n * products route exits (a \"Cancel\" label) through it as a header text button (2026-10-17 screen review); exits use `exit`. */\nexport type ScreenFlowIconAction = ScreenFlowAction & Readonly<{icon:ReactNode}>;\n// `edge`: the action ends a header/row edge (IconButton/Button edge rule, 2026-10-17 audit); framed tones ignore it.\nfunction Action({action,secondary=false,buttonRef,edge}:{action:ScreenFlowAction;secondary?:boolean;buttonRef?:Ref<HTMLButtonElement>;edge?:\"start\"|\"end\"}){if(action.icon)return <IconButton ref={buttonRef} label={action.label} tone=\"ghost\" {...(edge?{edge}:{})} disabled={!!(action.disabled||action.pending)} onClick={action.onAction}>{action.icon}</IconButton>;return <Button ref={buttonRef} tone={secondary?\"ghost\":\"primary\"} {...(edge?{edge}:{})} disabled={!!(action.disabled||action.pending)} loading={action.pending??false} onClick={action.onAction}>{action.label}</Button>;}\ntype Base = Omit<ScreenLayoutProps,\"children\"|\"footer\">;\n// Stacked footer/sheet buttons use Stack gap \"xs\" (actionGroupRecipe.stackedGap 8); 12 read as split groups (button.md, 2026-10-17).\n\nexport type ListDetailScreenProps = Base & { list:ReactNode; detail?:Pick<ScreenLayoutProps,\"title\"|\"state\"|\"stateAction\"|\"notice\"|\"titleVisibility\"|\"headerAlignment\"|\"actions\"|\"footer\"> & {content:ReactNode}; back:ScreenFlowAction; refresh?:ScreenFlowIconAction; loadMore?:ScreenFlowAction };\n/** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */\nexport function ListDetailScreen({list,detail,back,refresh,loadMore,layoutStyle,...screen}:ListDetailScreenProps){\n const open=!!detail;\n // Seed with the first render: a deep link that mounts with detail open is not a user transition,\n // so it must not pull focus from wherever the host left it (address bar, router focus target).\n const listHost=useRef<HTMLDivElement>(null),detailHost=useRef<HTMLDivElement>(null),returnFocus=useRef<HTMLElement|null>(null),wasOpen=useRef(open);\n // The retained host is a fallback when a virtualized list removes its focused item.\n // Hidden lists preserve scroll but drop browser focus; retain the trigger and move into the\n // detail once, then restore it (or the list body if the item was removed). See usage/ListDetailScreen.\n useLayoutEffect(()=>{\n if(open&&!wasOpen.current)detailHost.current?.querySelector<HTMLElement>(\"button\")?.focus({preventScroll:true});\n if(!open&&wasOpen.current){\n const target=returnFocus.current;\n if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});\n // A retained trigger can also become disabled while detail is open.\n if(document.activeElement!==target)(listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')??listHost.current)?.focus({preventScroll:true});\n }\n wasOpen.current=open;\n },[open]);\n // layoutStyle places the outer host that owns both panes, not the inner list ScreenLayout.\n // \"Load more\" ends the list inside the scroll body, centered like LoadMore; the fixed footer is the bottom CTA slot (2026-10-17 review).\n return <div style={{height:\"100%\",...layoutStyle}}>\n <div ref={listHost} tabIndex={-1} hidden={open} style={{height:\"100%\"}} onFocusCapture={event=>{returnFocus.current=event.target as HTMLElement;}}><ScreenLayout {...screen} {...(refresh||screen.actions?{actions:<Stack axis=\"inline\" gap=\"xs\" align=\"center\">{/* Refresh no longer replaces the screen's own actions (2026-10-16 composition review). */}{screen.actions}{refresh?<Action action={refresh} secondary edge=\"end\"/>:null}</Stack>}:{})}>{loadMore?<div style={{display:\"flex\",flexDirection:\"column\",flex:\"1 1 auto\",minHeight:0,gap:screenPatternRecipe.itemGap}}>{list}<div style={{display:\"flex\",justifyContent:\"center\"}}><Action action={loadMore} secondary/></div></div>:list}</ScreenLayout></div>\n {detail?<div ref={detailHost} style={{height:\"100%\"}}><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} actions={detail.actions} footer={detail.footer} exit={{kind:\"back\",label:back.label,onClick:back.onAction,disabled:!!(back.disabled||back.pending)}}>{detail.content}</ScreenLayout></div>:null}\n </div>;\n}\n\nexport type EditorScreenProps = Omit<Base,\"leading\"|\"exit\"> & {children:ReactNode;submitPlacement?:\"header\"|\"footer\";dirty:boolean;submit:ScreenFlowAction;cancel:ScreenFlowAction;discard:Omit<Extract<AlertDialogRequest,{mode:\"confirm\"}>,\"onConfirm\"|\"fallbackErrorMessage\"> & {fallbackErrorMessage:string};draftStatus?:ReactNode;\n /** Multi-step editor: while supplied, the header exit is a back chevron that returns to the previous step instead of\n * the cancel ×, and never opens the discard prompt (stepping back keeps the draft). Omit it on the first step so the\n * exit leaves through `cancel` again (2026-10-18: spint compose replaced the header with its own TopBar for this). */\n stepBack?:ScreenFlowAction};\nexport function EditorScreen({children,dirty,submitPlacement=\"footer\",submit,cancel,discard,draftStatus,stepBack,initialFocus=initialFocusDefaults.editor,...screen}:EditorScreenProps){\n const [confirm,setConfirm]=useState(false);\n const cancelLocked=!!(cancel.disabled||cancel.pending||submit.pending);\n const submitAction={...submit,disabled:!!(submit.disabled||screen.state&&screen.state.kind!==\"ready\")};\n // A prompt opened before an external save must not bypass the current leave lock\n // or reappear once the save finishes. Keep the draft mounted throughout.\n const stepping=!!stepBack,stepLocked=!!(stepBack?.disabled||stepBack?.pending||submit.pending);\n // A step-back exit replaces the cancel exit, so a discard prompt opened from the cancel exit cannot outlive it.\n useEffect(()=>{if(cancelLocked||stepping)setConfirm(false);},[cancelLocked,stepping]);\n // Preserve an async host result so AlertDialog can retain failure and retry.\n const leave=()=>{if(!cancelLocked)return cancel.onAction();};\n // Writing is the screen's purpose: focus the first field on entry unless the host opts out (2026-10-18).\n return <><ScreenLayout {...screen} initialFocus={initialFocus}\n exit={stepBack?{kind:\"back\",label:stepBack.label,disabled:stepLocked,onClick:()=>{if(!stepLocked)stepBack.onAction();}}\n :{kind:\"close\",label:cancel.label,disabled:cancelLocked,onClick:()=>{if(cancelLocked)return;if(dirty)setConfirm(true);else leave();}}}\n actions={submitPlacement===\"header\"?<Action action={submitAction}/>:screen.actions}\n footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submitAction}/></Stack>}\n >{children}</ScreenLayout><AlertDialog open={confirm&&!cancelLocked&&!stepping} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:leave}}/></>;\n}\n\nexport type ProfileScreenProps = Base & {summary:ReactNode;edit:ScreenFlowAction;children?:ReactNode;accountActions?:ReactNode;\n /** `below-summary` (default): ghost button under the summary. `summary`: the edit action goes first in the action row\n * of the ProfileSummary inside `summary` (2026-10-15 utilverse account decision: the edit action belongs inside the\n * profile card). With `summary`, the slot must contain a ProfileSummary, or the edit action is not drawn. */\n editPlacement?:\"below-summary\"|\"summary\"};\n// Hands ProfileScreen's edit action to the ProfileSummary inside its summary slot, wherever the product nests it.\nconst ProfileEditContext=createContext<ScreenFlowAction|undefined>(undefined);\nexport function ProfileScreen({summary,edit,children,accountActions,editPlacement=\"below-summary\",...screen}:ProfileScreenProps){return <ScreenLayout {...screen}><Stack gap=\"xl\">{editPlacement===\"summary\"?<ProfileEditContext.Provider value={edit}>{summary}</ProfileEditContext.Provider>:<CompositionLayout footer={<Action action={edit} secondary/>}>{summary}</CompositionLayout>}{children}{accountActions}</Stack></ScreenLayout>;}\n\n/** Operator decision on a report (dismiss, hide, uphold, overturn…). Labels are product copy; ids are product keys.\n * With `confirmation`, pressing opens that AlertDialog and only its `onConfirm` acts (same rule as `block`). */\nexport type ModerationDecision = ScreenFlowAction & Readonly<{id:string;tone?:\"primary\"|\"secondary\"|\"danger\";confirmation?:Extract<AlertDialogRequest,{mode:\"confirm\"}>}>;\n/** Free-text decision reason. `required` (default true) keeps every decision locked until it has non-blank text. */\nexport type ModerationDecisionReason = Readonly<{label:string;value:string;onValueChange(value:string):void;description?:string;maxLength?:number;required?:boolean;disabled?:boolean}>;\ntype ModerationReportFields = {variant?:\"report\";reasonPicker?:ReactNode;reasons:readonly {value:string;label:string}[];reason:string|null;onReasonChange(value:string):void;reasonLabel:string;children?:ReactNode;submit:ScreenFlowAction;block?:{action:ScreenFlowAction;confirmation:Extract<AlertDialogRequest,{mode:\"confirm\"}>}};\n/** Operator review (2026-10-18: utilverse review and appeal queues hand-built this with TextArea, buttons and Alert):\n * `children` shows the reported content, then the reason field and the decisions; `resolution` replaces both once decided. */\ntype ModerationReviewFields = {variant:\"review\";children?:ReactNode;decisionReason:ModerationDecisionReason;decisions:readonly ModerationDecision[];resolution?:ReactNode};\nexport type ModerationFields = ModerationReportFields|ModerationReviewFields;\nexport type ModerationScreenProps = Base & ModerationFields;\n/** Body, stacked actions and confirmations shared by ModerationScreen (screen chrome) and ModerationForm (none). */\nfunction useModeration(fields:ModerationFields,ready:boolean,cancel?:ScreenFlowAction):{body:ReactNode;actions:ReactNode;dialogs:ReactNode}{\n const [confirm,setConfirm]=useState(false);\n const [confirmId,setConfirmId]=useState<string|null>(null);\n const review=fields.variant===\"review\"?fields:null,report=fields.variant===\"review\"?null:fields;\n const hasBlock=!!report?.block;\n // Withdrawing the action ends that confirmation session; a later action needs\n // a new explicit press even if the screen itself stays mounted.\n useEffect(()=>{if(!hasBlock)setConfirm(false);},[hasBlock]);\n const confirming=review&&!review.resolution?review.decisions.find(decision=>decision.id===confirmId&&decision.confirmation):undefined;\n // Same rule for a decision: its confirmation closes when the decision or its confirmation is withdrawn or resolved.\n useEffect(()=>{if(confirmId!==null&&!confirming)setConfirmId(null);},[confirmId,confirming]);\n const cancelAction=cancel?<Action action={cancel} secondary/>:null;\n if(review){\n const busy=review.decisions.some(decision=>decision.pending);\n const reasonMissing=(review.decisionReason.required??true)&&!review.decisionReason.value.trim();\n const field=review.resolution??<TextArea label={review.decisionReason.label} value={review.decisionReason.value} onChange={event=>review.decisionReason.onValueChange(event.currentTarget.value)}\n {...(review.decisionReason.description===undefined?{}:{description:review.decisionReason.description})} {...(review.decisionReason.maxLength===undefined?{}:{maxLength:review.decisionReason.maxLength})}\n required={review.decisionReason.required??true} disabled={!!review.decisionReason.disabled||busy}/>;\n // One decision at a time: a pending decision locks the others and the reason it was taken with.\n const decisions=review.resolution?[]:review.decisions.map(decision=>{const locked=!!decision.disabled||busy||!ready||reasonMissing;\n return <Button key={decision.id} tone={decision.tone??\"secondary\"} disabled={locked} loading={decision.pending??false} onClick={()=>{if(locked)return;if(decision.confirmation)setConfirmId(decision.id);else decision.onAction();}}>{decision.label}</Button>;});\n return {body:<Stack gap=\"lg\">{review.children}{field}</Stack>,\n actions:decisions.length||cancelAction?<Stack gap=\"xs\">{decisions}{cancelAction}</Stack>:null,\n dialogs:confirming?.confirmation?<AlertDialog open onOpenChange={open=>{if(!open)setConfirmId(null);}} request={confirming.confirmation}/>:null};\n }\n const r=report!;\n return {body:<Stack gap=\"lg\">{r.reasonPicker??(r.reasons.length?<RadioGroup accessibilityLabel={r.reasonLabel} orientation=\"vertical\" items={r.reasons} value={r.reason} onValueChange={value=>{if(value)r.onReasonChange(value);}}/>:null)}{r.children}</Stack>,\n actions:<Stack gap=\"xs\"><Action action={{...r.submit,disabled:r.submit.disabled||!ready||!r.reasons.some(item=>item.value===r.reason)}}/>{r.block?<Action action={{...r.block.action,onAction:()=>setConfirm(true)}} secondary/>:null}{cancelAction}</Stack>,\n dialogs:r.block?<AlertDialog open={confirm} onOpenChange={setConfirm} request={r.block.confirmation}/>:null};\n}\n// Every key of either variant, so the rest of the props reach ScreenLayout unchanged whichever variant is used.\nconst moderationFieldKeys=[\"variant\",\"reasonPicker\",\"reasons\",\"reason\",\"onReasonChange\",\"reasonLabel\",\"children\",\"submit\",\"block\",\"decisionReason\",\"decisions\",\"resolution\"] as const;\nexport function ModerationScreen(props:ModerationScreenProps){\n const screen:Record<string,unknown>={...props};for(const key of moderationFieldKeys)delete screen[key];\n const {body,actions,dialogs}=useModeration(props,!props.state||props.state.kind===\"ready\");\n return <><ScreenLayout {...screen as Base} footer={actions}>{body}</ScreenLayout>{dialogs}</>;\n}\n/** The moderation fields and actions without screen chrome, for a report opened inside a letter, card or Sheet\n * (2026-10-18: diairy turned ModerationScreen's header and padding off to place it in a letter). The host owns the\n * surrounding surface and placement; `title` is an optional section heading (omit it inside a titled Sheet) and\n * `cancel` adds a ghost \"collapse\" action after the others.\n * `description` and `actions` fill the same CompositionLayout header (2026-10-18: utilverse review queues wrapped the\n * form in a second CompositionLayout only to show the report time and a refresh button beside the title). */\nexport type ModerationFormProps = ModerationFields & Readonly<{title?:string;headingLevel?:1|2|3|4|5|6;description?:string;actions?:ReactNode;cancel?:ScreenFlowAction;layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]}>;\nexport function ModerationForm(props:ModerationFormProps){\n const {body,actions,dialogs}=useModeration(props,true,props.cancel);\n return <><CompositionLayout {...(props.title===undefined?{}:{title:props.title})} {...(props.headingLevel===undefined?{}:{headingLevel:props.headingLevel})} {...(props.description===undefined?{}:{description:props.description})} {...(props.actions===undefined?{}:{actions:props.actions})} {...(props.layoutStyle===undefined?{}:{layoutStyle:props.layoutStyle})} footer={actions}>{body}</CompositionLayout>{dialogs}</>;\n}\n\n\n/** Source choice only: permission, capture, decoding and draft persistence belong to the host. */\nexport type PhotoSourceSheetProps = Readonly<{\n open:boolean;onOpenChange(open:boolean):void;onSelect(source:PhotoSource):void;\n labels:PhotoSourceLabels;disabled?:boolean;cameraAvailable?:boolean;\n}>;\nexport function PhotoSourceSheet({open,onOpenChange,onSelect,labels,disabled=false,cameraAvailable=true}:PhotoSourceSheetProps){\n // File-input click must stay in the user's activation stack. Deferring until the\n // sheet animation ends can cause browsers to reject camera/album selection.\n const select=(source:PhotoSource)=>{if(disabled)return;onOpenChange(false);onSelect(source);};\n return <Sheet open={open} onOpenChange={onOpenChange} title={labels.title} closeLabel={labels.cancel}><Stack gap=\"xs\">\n <Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"library\")}>{labels.library}</Button>\n {cameraAvailable?<Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"camera\")}>{labels.camera}</Button>:null}\n </Stack></Sheet>;\n}\n\nexport type MediaSelectionItem = {descriptor:UploadItemDescriptor;preview?:ReactNode};\n/**\n * Quarter-turn action for a picked photo (2026-10-18, Utilverse photo-to-PDF). The product stores the rotation and\n * applies it to `preview` and its output; HJM only places the button with the other item actions.\n */\nexport type MediaSelectionRotate = Readonly<{label:string;itemLabel(item:MediaSelectionItem):string;onRotate(id:string):void}>;\n/**\n * Copy and callbacks of one item's actions, shared by the screen grid and MediaSelectionCell.\n * `disabled` locks move/rotate/remove while the host runs a job over the selection (2026-10-18: Utilverse photo-to-PDF\n * and photo strip kept their own cells so a reorder could not diverge from a running build). Upload retry/cancel stay\n * live: they act on one transfer, not on the order or content the job reads.\n */\nexport type MediaSelectionItemActions = {labels:UploadItemLabels;actionLabels:{remove:string;moveUp:string;moveDown:string};removeLabel(item:MediaSelectionItem):string;moveUpLabel(item:MediaSelectionItem):string;moveDownLabel(item:MediaSelectionItem):string;onRemove(id:string):void;onMove(id:string,direction:-1|1):void;onRetry(id:string):void;onCancel(id:string):void;rotate?:MediaSelectionRotate;disabled?:boolean};\nexport type MediaSelectionScreenProps = Base & {library?:ReactNode;selectionSummary?:ReactNode;items:readonly MediaSelectionItem[];add?:ScreenFlowIconAction;done:ScreenFlowAction} & MediaSelectionItemActions;\n/** `index`/`count` place the item in the product's full list so the first/last move buttons disable correctly. */\nexport type MediaSelectionCellProps = MediaSelectionItemActions & Readonly<{item:MediaSelectionItem;index:number;count:number}>;\n/**\n * One picked item: preview, upload status, then move/rotate/remove. Exported (2026-10-18, Utilverse photo tools) so a\n * virtualized host (VirtualList, FlatList renderItem) renders the same cell as the screen grid instead of a copy.\n * Web keyboard focus recovery after removal belongs to the screen grid; a virtualized host owns its own.\n */\nexport function MediaSelectionCell({item,index,count,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,rotate,disabled=false}:MediaSelectionCellProps){\n const id=item.descriptor.id;\n // The job lock is temporary, so it keeps the focused action focusable (aria-disabled; Button drops the click) instead\n // of throwing keyboard focus to <body> for the length of the job. The list boundaries stay natively disabled.\n const lock=disabled?{\"aria-disabled\":true as const}:{};\n return <Stack data-hjm-media-item={id} gap=\"xs\">\n {item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/>\n <Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}>\n <Button data-media-action=\"up\" aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} {...lock} onClick={()=>onMove(id,-1)}>{actionLabels.moveUp}</Button>\n <Button data-media-action=\"down\" aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===count-1} {...lock} onClick={()=>onMove(id,1)}>{actionLabels.moveDown}</Button>\n {/* Rotate edits the photo and stays before remove, so the destructive action keeps the trailing place. */}\n {rotate?<Button data-media-action=\"rotate\" aria-label={rotate.itemLabel(item)} size=\"small\" tone=\"ghost\" {...lock} onClick={()=>rotate.onRotate(id)}>{rotate.label}</Button>:null}\n <Button data-media-action=\"remove\" aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" {...lock} onClick={()=>onRemove(id)}>{actionLabels.remove}</Button>\n </Stack>\n </Stack>;\n}\n/** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */\nexport function MediaSelectionScreen({library,selectionSummary,items,add,done,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,rotate,disabled,...screen}:MediaSelectionScreenProps){\n const itemActions={labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,...(rotate===undefined?{}:{rotate}),...(disabled===undefined?{}:{disabled})};\n const grid = useRef<HTMLDivElement>(null), addButton = useRef<HTMLButtonElement>(null);\n const focusedItem = useRef<{node:HTMLElement;id:string;index:number;body:HTMLElement|null}|null>(null);\n useLayoutEffect(() => {\n const previous = focusedItem.current, host = grid.current;\n if (!previous) return;\n const active = document.activeElement;\n if (!host) {\n focusedItem.current = null;\n // Empty-state replacement unmounts the grid; the ordinary last-removal\n // destination still applies. Other state/library replacements own their focus.\n if (!previous.node.isConnected && !items.length && screen.state?.kind === \"empty\" && library == null\n && (active === document.body || active === previous.body) && !addButton.current?.disabled) addButton.current?.focus({preventScroll:true});\n return;\n }\n const index = items.findIndex(item => item.descriptor.id === previous.id), moved = index >= 0 && index !== previous.index;\n if (index >= 0) previous.index = index;\n const reveal = (node:HTMLElement) => {\n const body = previous.body;\n if (!body?.contains(node) || body.dataset.scroll !== \"screen\") return;\n const bounds = node.getBoundingClientRect(), clip = body.getBoundingClientRect();\n // Scroll only the owned body, by the minimum needed to keep the action visible.\n if (bounds.top < clip.top) body.scrollTop += Math.floor(bounds.top - clip.top);\n else if (bounds.bottom > clip.bottom) body.scrollTop += Math.ceil(bounds.bottom - clip.bottom);\n };\n const disabled = previous.node.matches(\":disabled\");\n if (active !== document.body && active !== previous.body && !(active === previous.node && disabled)) {\n if (active === previous.node && moved) reveal(previous.node);\n return;\n }\n // A keyed reorder may detach a focused node; a boundary move may disable it.\n // Recover only focus owned by this grid, after the product accepts the change.\n const id = index < 0 ? items[Math.min(previous.index, items.length - 1)]?.descriptor.id : previous.id;\n const row = Array.from(host.querySelectorAll<HTMLElement>(\"[data-hjm-media-item]\")).find(node => node.dataset.hjmMediaItem === id);\n const target = index >= 0 && previous.node.isConnected && !disabled ? previous.node\n : row?.querySelector<HTMLButtonElement>(index < 0 ? '[data-media-action=\"remove\"]' : 'button[data-media-action]:not(:disabled)')\n ?? (!addButton.current?.disabled ? addButton.current : null);\n focusedItem.current = null;\n if (target) { target.focus({preventScroll:true}); reveal(target); }\n });\n return <ScreenLayout {...screen} {...(add||screen.actions?{actions:<Stack axis=\"inline\" gap=\"xs\" align=\"center\">{screen.actions}{add?<Action action={add} buttonRef={addButton} edge=\"end\"/>:null}</Stack>}:{})} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>\n {library??<Grid ref={grid} columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}\n onFocusCapture={event => {\n const node = event.target as HTMLElement, row = node.closest<HTMLElement>(\"[data-hjm-media-item]\");\n const id = row?.dataset.hjmMediaItem;\n if (id !== undefined) focusedItem.current = {node,id,index:items.findIndex(item => item.descriptor.id === id),body:node.closest<HTMLElement>(\".hjm-screen__body\")};\n }}\n onBlurCapture={event => {\n const node = event.target as HTMLElement;\n // Explicit blur/outside focus relinquishes ownership; DOM removal and a newly\n // disabled move button retain it until the layout effect chooses a successor.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : node.isConnected && !node.matches(\":disabled\")) focusedItem.current = null;\n }}>\n {items.map((item,index)=><MediaSelectionCell key={item.descriptor.id} item={item} index={index} count={items.length} {...itemActions}/>)}\n </Grid>}\n </ScreenLayout>;\n}\n\n\n/*\n * SearchScreen phase sections (2026-10-06, user-delegated decision to lift the search preview logic into\n * the public API; design: packages/design-contracts/docs/screen-patterns.md, SearchScreen two-step section).\n * Products supply data, copy, icons and requests; HJM owns placement, commit routing, focus after removal\n * and count announcements. Before this, every product had to rebuild these from Showcase preview code,\n * which AGENTS.md rules out as an adoption path. Kept in this file, not an internal module: a new module\n * edge would push ./screen-flows past its reviewed module-count budget (scripts/check-renderer-budgets.mjs).\n */\n\n/** Recent searches before typing. Rows commit; the trailing button removes one. */\nexport type SearchRecentQueries = Readonly<{\n items: readonly string[];\n title: string;\n clearAllLabel: string;\n onClearAll(): void;\n removeLabel(query: string): string;\n onRemove(query: string): void;\n /** Decorative leading glyph (for example a history icon). */\n icon?: ReactNode;\n /** Glyph inside the remove button; defaults to \"×\". */\n removeIcon?: ReactNode;\n /** Rows shown; default `searchScreenRecipe.recentVisible` (5). */\n maxVisible?: number;\n}>;\n/** Product-chosen queries shown before typing and after a query-caused zero result. */\nexport type SearchSuggestedQueries = Readonly<{ title: string; items: readonly string[] }>;\n/** A typed-ahead completion. `match` bolds the matched range (weight, not color, so it survives dark mode). */\nexport type SearchSuggestion = Readonly<{ query: string; match?: Readonly<{ start: number; end: number }> }>;\nexport type SearchSuggestions = Readonly<{\n items: readonly SearchSuggestion[];\n /** First row that commits the typed text as is, e.g. \"Search ‘q’\". */\n commitLabel(query: string): string;\n /** Polite announcement of the suggestion count. */\n countLabel(count: number): string;\n icon?: ReactNode;\n /** Rows shown under the commit row; default `searchScreenRecipe.suggestionVisible` (6). */\n maxVisible?: number;\n}>;\nexport type SearchSortOption = Readonly<{ id: string; label: string }>;\nexport type SearchSort = Readonly<{\n /** Accessible name of the sort menu. */\n label: string;\n /** Visible trigger text, usually the current option (\"Sort: Newest\"). */\n triggerLabel: string;\n value: string;\n options: readonly SearchSortOption[];\n onChange(id: string): void;\n /** Trailing glyph of the trigger (for example a chevron). */\n icon?: ReactNode;\n}>;\nexport type SearchResultSummary = Readonly<{\n /** Result total for the committed query; `null` while it loads (skeleton rows replace `children`). */\n count: number | null;\n /** Hide the visual total without losing loading, empty-state or announcement behavior. */\n countVisibility?: \"visible\" | \"hidden\";\n countLabel(count: number): string;\n /** Announced while loading. */\n loadingLabel: string;\n sort?: SearchSort;\n /** Above the count, e.g. a retained-results error Notice with retry. */\n notice?: ReactNode;\n /** Zero-result copy. Filters as the cause add \"clear all\"; the query as the cause adds suggested queries. */\n empty?: Readonly<{ title: string; description?: string }>;\n}>;\nexport type SearchAppliedFilter = Readonly<{ key: string; label: string }>;\nexport type SearchAppliedFilters = Readonly<{\n items: readonly SearchAppliedFilter[];\n removeLabel(label: string): string;\n onRemove(key: string): void;\n clearAllLabel: string;\n onClearAll(): void;\n removeIcon?: ReactNode;\n}>;\nexport type SearchFilterSheetLabels = Readonly<{\n close: string;\n reset: string;\n /** Primary action text for a live draft count, e.g. \"Show 12 results\"; `null` while counting. */\n apply(count: number | null): string;\n}>;\n/**\n * Draft/applied filter sheet. HJM copies `value` into a draft when the sheet opens, discards the draft\n * on any dismissal, and calls `onApply(draft)` only from the primary action.\n */\nexport type SearchFilterSheet<F> = Readonly<{\n open: boolean;\n onOpenChange(open: boolean): void;\n /** Sheet title; products that open one section from a facet chip pass that section's name. */\n title: string;\n /** Applied filters. */\n value: F;\n onApply(next: F): void;\n /** Live count for a draft. Return `null` while an async count is pending; `0` disables apply. */\n count(draft: F): number | null;\n /** Draft after \"reset\" (the open section, or everything). */\n reset(draft: F): F;\n /** Disables \"reset\" when the draft already equals its reset value. */\n isDefault(draft: F): boolean;\n renderContent(draft: F, setDraft: (next: F) => void): ReactNode;\n labels: SearchFilterSheetLabels;\n /** Default `large`; section sheets usually pass `auto`. */\n size?: SheetProps[\"size\"];\n /** First item of the filter rail that opens the sheet, named with the applied count. */\n trigger?: Readonly<{ label(appliedCount: number): string; accessibilityLabel(appliedCount: number): string; icon?: ReactNode }>;\n}>;\n\ntype Removal = { list: \"recent\" | \"applied\" | \"clearRecent\" | \"clearApplied\"; index: number; from: number };\n\nfunction Highlighted({ text, match }: { text: string; match: SearchSuggestion[\"match\"] }): ReactNode {\n if (!match || match.start < 0 || match.end <= match.start || match.end > text.length) return text;\n return <>{text.slice(0, match.start)}<Text as=\"span\" emphasis=\"strong\">{text.slice(match.start, match.end)}</Text>{text.slice(match.end)}</>;\n}\n\n/** Focus targets after removing a chip or row; returns refs and a scheduler the screen calls from its handlers. */\nfunction useSearchRemovalFocus(recentCount: number, appliedCount: number, input: () => HTMLElement | null | undefined) {\n const pending = useRef<Removal | null>(null);\n const recentHost = useRef<HTMLDivElement>(null);\n const appliedHost = useRef<HTMLDivElement>(null);\n const filterTrigger = useRef<HTMLButtonElement>(null);\n // Wait for the product to actually shrink the list: an async onRemove would otherwise focus the\n // chip that is about to disappear.\n useLayoutEffect(() => {\n const removal = pending.current;\n if (!removal) return;\n const recent = removal.list === \"recent\" || removal.list === \"clearRecent\";\n const now = recent ? recentCount : appliedCount;\n if (now >= removal.from) return;\n pending.current = null;\n const host = recent ? recentHost.current : appliedHost.current;\n const selector = recent ? \"[data-search-recent-remove]\" : \"[data-search-applied-filter]\";\n const items = Array.from(host?.querySelectorAll<HTMLElement>(selector) ?? []);\n const index = removal.list.startsWith(\"clear\") ? -1 : resolveFocusAfterRemoval(removal.index, items.length);\n const fallback = recent ? input() : filterTrigger.current ?? input();\n (index >= 0 ? items[index] : fallback)?.focus();\n }, [recentCount, appliedCount, input]);\n return { recentHost, appliedHost, filterTrigger, schedule: (removal: Removal) => { pending.current = removal; } };\n}\n\nfunction SearchAnnouncement({ text }: { text: string }) {\n // Only the text changes the live region, so the same count is not re-read on every render.\n return <VisuallyHidden role=\"status\">{text}</VisuallyHidden>;\n}\n\nfunction SearchIdleSections({ recent, suggested, legacy, onCommit, hostRef, onRemove, onClearAll }: {\n recent: SearchRecentQueries | undefined; suggested: SearchSuggestedQueries | undefined; legacy: ReactNode;\n onCommit(query: string): void; hostRef: RefObject<HTMLDivElement | null>;\n onRemove(query: string, index: number): void; onClearAll(): void;\n}) {\n const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];\n // Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.\n if (!visible.length && !suggested?.items.length) return <>{legacy}</>;\n return <Stack gap=\"xl\">\n {legacy}\n {recent && visible.length ? <Stack gap=\"sm\" ref={hostRef}>\n <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{recent.title}</Heading>\n <Button tone=\"ghost\" size=\"small\" edge=\"end\" onClick={onClearAll}>{recent.clearAllLabel}</Button>\n </Stack>\n {/* The remove control is the row's trailingAction on both platforms: it sits outside the row command, the row text\n stays on the gutter and the edge-aligned × glyph ends on the gutter line (2026-10-17 alignment decision). */}\n <Stack gap=\"xxs\">{visible.map((item, index) => <ListRow key={item} density=\"compact\" leading={recent.icon} title={item} onClick={() => onCommit(item)}\n trailingAction={<IconButton data-search-recent-remove=\"\" label={recent.removeLabel(item)} tone=\"ghost\" edge=\"end\" onClick={() => onRemove(item, index)}>{recent.removeIcon ?? \"×\"}</IconButton>} />)}</Stack>\n </Stack> : null}\n {suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n </Stack>;\n}\n\nfunction SearchSuggestedChips({ suggested, onCommit }: { suggested: SearchSuggestedQueries; onCommit(query: string): void }) {\n return <Stack gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{suggested.title}</Heading>\n <Stack axis=\"inline\" wrap gap=\"xs\">{suggested.items.map(item => <Chip key={item} label={item} onPress={() => onCommit(item)} />)}</Stack>\n </Stack>;\n}\n\nfunction SearchSuggestionList({ query, suggestions, onCommit }: { query: string; suggestions: SearchSuggestions; onCommit(query: string): void }) {\n const typed = query.trim();\n const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));\n return <Stack gap=\"xxs\">\n <ListRow density=\"compact\" leading={suggestions.icon} title={suggestions.commitLabel(typed)} onClick={() => onCommit(typed)} />\n {items.map(item => <ListRow key={item.query} density=\"compact\" leading={suggestions.icon} title={<Highlighted text={item.query} match={item.match} />} onClick={() => onCommit(item.query)} />)}\n </Stack>;\n}\n\nfunction SearchResultsHeader({ summary, applied, cause, appliedHost, onRemove, onClearAll, onSortChange }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; cause: SearchEmptyCause;\n appliedHost: RefObject<HTMLDivElement | null>; onRemove(key: string, index: number): void; onClearAll(): void; onSortChange(id: string): void;\n}) {\n const sort = summary?.sort;\n const showCount = summary && cause === \"none\" && summary.countVisibility !== \"hidden\";\n // A count-free search still owns its sorting action; do not hide it with the total.\n const showSort = summary && cause === \"none\" && sort;\n if (!summary?.notice && !showCount && !showSort && !applied?.items.length) return null;\n // The sort trigger ends the count row: edge=\"end\" puts its chevron on the gutter like the count text starts on it\n // (2026-10-17 measured audit: chevron 29 from the edge against 16).\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount || showSort ? <Stack axis=\"inline\" justify={showCount ? \"between\" : \"end\"} align=\"center\" gap=\"sm\" wrap>\n {showCount ? (summary!.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary!.countLabel(summary!.count)}</Text>) : null}\n {sort ? <Menu label={sort.label} align=\"end\" selectionMode=\"single\" value={sort.value} onValueChange={onSortChange}\n items={sort.options.map(option => ({ id: option.id, label: option.label }))}\n trigger={<Button size=\"small\" tone=\"ghost\" edge=\"end\" {...(sort.icon === undefined ? {} : { trailing: sort.icon })}>{sort.triggerLabel}</Button>} /> : null}\n </Stack> : null}\n {applied?.items.length ? <Stack ref={appliedHost} axis=\"inline\" wrap gap=\"xs\" align=\"center\">\n {applied.items.map((item, index) => <Chip key={item.key} data-search-applied-filter=\"\" label={item.label} aria-label={applied.removeLabel(item.label)}\n trailing={applied.removeIcon ?? <span aria-hidden=\"true\">×</span>} onPress={() => onRemove(item.key, index)} />)}\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{applied.clearAllLabel}</Button>\n </Stack> : null}\n </Stack>;\n}\n\nfunction SearchResultsBody({ summary, applied, suggested, cause, onCommit, onClearAll, children }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; suggested: SearchSuggestedQueries | undefined;\n cause: SearchEmptyCause; onCommit(query: string): void; onClearAll(): void; children: ReactNode;\n}) {\n // Loading keeps each row's own height (ListRow `loading`), so the list does not jump when results land.\n if (summary?.count === null) return <Stack gap=\"xxs\">{Array.from({ length: searchScreenRecipe.loadingRows }, (_, index) =>\n <ListRow key={index} loading title=\"\" description={summary.loadingLabel} {...(index === 0 ? { loadingLabel: summary.loadingLabel } : {})} />)}</Stack>;\n if (cause === \"none\" || !summary?.empty) return <>{children}</>;\n return <Stack gap=\"lg\">\n <EmptyState density=\"compact\" title={summary.empty.title} {...(summary.empty.description === undefined ? {} : { description: summary.empty.description })}\n {...(cause === \"filters\" && applied ? { action: <Button tone=\"secondary\" onClick={onClearAll}>{applied.clearAllLabel}</Button> } : {})} />\n {cause === \"query\" && suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n {children}\n </Stack>;\n}\n\nfunction SearchFilterTrigger<F>({ sheet, appliedCount, triggerRef }: { sheet: SearchFilterSheet<F>; appliedCount: number; triggerRef: RefObject<HTMLButtonElement | null> }) {\n const trigger = sheet.trigger!;\n return <Chip ref={triggerRef} label={trigger.label(appliedCount)} aria-label={trigger.accessibilityLabel(appliedCount)} aria-haspopup=\"dialog\" layoutStyle={{alignSelf:\"center\"}}\n {...(trigger.icon === undefined ? {} : { leading: trigger.icon })} onPress={() => sheet.onOpenChange(true)} />;\n}\n\n/** Wide windows get a side sheet so results stay visible beside the conditions (expanded = 960+). */\nfunction sidePlacement() {\n return typeof window !== \"undefined\" && [\"expanded\", \"wide\"].includes(resolveWindowClass(window.innerWidth));\n}\n\nfunction SearchFilterSheetView<F>({ sheet }: { sheet: SearchFilterSheet<F> }) {\n // The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close,\n // so closing (×, scrim, back, Escape) never leaks half-edited conditions into the next opening.\n const [session, setSession] = useState<{ draft: F; side: boolean } | null>(null);\n if (sheet.open && !session) setSession({ draft: sheet.value, side: sidePlacement() });\n if (!sheet.open && session) setSession(null);\n const draft = session ? session.draft : sheet.value;\n const setDraft = (next: F) => setSession(current => current ? { ...current, draft: next } : current);\n const count = sheet.count(draft);\n // Reset sits left of the primary action on Web (sheet.md [secondary][primary]) and is always present,\n // disabled at the default, so the primary action does not jump when the draft changes.\n const footer = <Stack axis=\"inline\" justify=\"end\" gap=\"sm\" wrap>\n <Button tone=\"secondary\" disabled={sheet.isDefault(draft)} onClick={() => setDraft(sheet.reset(draft))}>{sheet.labels.reset}</Button>\n <Button disabled={count === 0} onClick={() => { sheet.onApply(draft); sheet.onOpenChange(false); }}>{sheet.labels.apply(count)}</Button>\n </Stack>;\n return <Sheet open={sheet.open} onOpenChange={open => sheet.onOpenChange(open)} title={sheet.title} closeLabel={sheet.labels.close}\n placement={session?.side ? \"end\" : \"bottom\"} size={sheet.size ?? \"large\"} footer={footer}>\n {sheet.renderContent(draft, setDraft)}\n </Sheet>;\n}\n\ntype SearchInputSlot = {queryField: ReactNode; queryClearLabel?: string} | {queryField?: never; queryClearLabel: string};\n/** `committedQuery` turns on two-step search; every commit (Enter, suggestion, recent, suggested query) then goes through `onSubmit`. */\n/** One name for the default field's progress on both platforms (Web SearchField `loading`, Native `busy`+`busyLabel`). */\ntype SearchProgressSlot = {searching?: never; searchingLabel?: never} | {searching: boolean; searchingLabel: string};\ntype SearchCommitSlot = {committedQuery?: never; onSubmit?: (query:string)=>void} | {committedQuery: string; onSubmit:(query:string)=>void};\nexport type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchCommitSlot & SearchProgressSlot & {embedded?:boolean;query:string;queryLabel:string;onQueryChange(value:string):void;onSearch(query:string,context:{signal:AbortSignal}):void;debounceMs?:number;filters?:ReactNode;recentSearches?:ReactNode;children:ReactNode;\n /** ScreenLayout footer (bottom action or ad bar) under the results; it owns the bottom inset, as on every screen (unairplane rendered it outside the screen, 2026-10-17). */\n footer?:ScreenLayoutProps[\"footer\"];\n /** `scroll` keeps `filters` on one horizontally scrolling line that bleeds to the screen edges. */\n filtersOverflow?:\"wrap\"|\"scroll\";\n /** `scope` marks filters that choose what is searched (kind, region, map area), so they stay on a query-caused zero as its recovery; `narrow` (default) hides them there. */\n filtersRole?:SearchFiltersRole;\n /** Gutter the host (Container `gutter`, Sheet = `regular`) already applies around this screen; the scroll rail bleeds over it too. */\n hostGutter?:ContainerGutter;\n /** Placeholder by default (2026-10-18 header-input rule); the accessible name remains queryLabel after typing. */\n queryLabelVisibility?:\"visible\"|\"hidden\";\n recentQueries?:SearchRecentQueries;suggestedQueries?:SearchSuggestedQueries;suggestions?:SearchSuggestions;\n resultSummary?:SearchResultSummary;appliedFilters?:SearchAppliedFilters;filterSheet?:SearchFilterSheet<F>};\n/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */\nexport function SearchScreen<F = unknown>({embedded=false,query,queryLabel,queryField,queryClearLabel,onQueryChange,onSearch,debounceMs,filters,recentSearches,children,onSubmit,committedQuery,filtersOverflow=\"wrap\",filtersRole=\"narrow\",hostGutter=\"none\",queryLabelVisibility=\"hidden\",searching,searchingLabel,recentQueries,suggestedQueries,suggestions,resultSummary,appliedFilters,filterSheet,initialFocus=initialFocusDefaults.search,...screen}:SearchScreenProps<F>){\n // The host owns localized copy. A custom queryField owns its own clear affordance.\n if (queryField == null && !queryClearLabel?.trim()) throw new TypeError(\"SearchScreen requires a localized queryClearLabel for its default search field\");\n const searchDelay=resolveSearchDebounceMs(debounceMs);\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),searchDelay);return()=>{clearTimeout(timer);controller.abort();};},[query,searchDelay]);\n const fieldHost=useRef<HTMLDivElement>(null),bodyHost=useRef<HTMLDivElement>(null);\n const input=useCallback(()=>fieldHost.current?.querySelector<HTMLElement>(\"input\"),[]);\n const focus=useSearchRemovalFocus(recentQueries?.items.length??0,appliedFilters?.items.length??0,input);\n // Every commit path funnels through here so \"only committed searches are recorded\" holds at the API:\n // onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.\n const commit=(value:string)=>{const next=resolveSearchCommit(value);if(next===null)return;if(next!==query)onQueryChange(next);onSubmit?.(next);};\n // A picked suggestion/recent/suggested query unmounts with its phase, which dropped focus to <body>; move it to the\n // results region first (1.13.1, utilverse adoption 2026-10-06, Native twin: Keyboard.dismiss on every commit).\n // Leaving the field also closes a mobile browser's keyboard. Enter keeps focus in the field instead: it is still on\n // screen with the committed text, and moving it would make keyboard users Shift+Tab back to refine. Rejected: blur()\n // without a target, which leaves focus on <body> and loses the reading position for screen readers.\n const pick=(value:string)=>{if(resolveSearchCommit(value)!==null)bodyHost.current?.focus({preventScroll:true});commit(value);};\n // onSubmit separates \"typing\" from \"committed\" (recent-search writes, suggestion → results) without making\n // products rebuild the default field through queryField (2026-10-06 search redesign, usage/components/search-screen.md).\n // Enter while an IME is composing (Korean/Japanese) only confirms the syllable, so it must not commit.\n // The pending debounce is left alone: products decide whether submit should also flush a request.\n const submitProps=onSubmit?{enterKeyHint:\"search\" as const,onKeyDown:(event:KeyboardEvent<HTMLInputElement>)=>{if(event.key!==\"Enter\"||event.nativeEvent.isComposing||event.keyCode===229)return;commit(event.currentTarget.value);}}:{};\n // Reference services hide the label behind a placeholder; the placeholder names the search target (Apple HIG\n // search fields) and aria-label keeps the accessible name, so hiding never leaves an unnamed field.\n const labelProps=queryLabelVisibility===\"hidden\"?{\"aria-label\":queryLabel,placeholder:queryLabel}:{label:queryLabel};\n const phase=resolveSearchScreenPhase(query,committedQuery);\n const appliedCount=appliedFilters?.items.length??0;\n const cause=phase===\"results\"&&resultSummary?resolveSearchEmptyCause(resultSummary.count,appliedCount):\"none\";\n // Two-step search shows the rail only beside results; a query-caused zero hides narrowing filters (none can fix it)\n // but keeps scope filters, which are that zero's recovery (resolveSearchFilterRailVisible, Native twin).\n const showRail=resolveSearchFilterRailVisible(phase,committedQuery!==undefined,cause,filtersRole);\n const trigger=filterSheet?.trigger?<SearchFilterTrigger sheet={filterSheet} appliedCount={appliedCount} triggerRef={focus.filterTrigger}/>:null;\n const rail=!showRail?null:trigger&&filters!=null?<Stack axis=\"inline\" align=\"center\" gap=\"xs\" wrap={filtersOverflow===\"wrap\"}>{trigger}{filters}</Stack>:trigger??filters;\n // Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.\n // A product-owned CSS/ScrollView rail would re-derive bleed, scroll padding and RTL per app.\n // contentInset=\"none\" leaves the gutter to the host, which CSS cannot see; hostGutter names it (Native twin).\n const bleed=(screen.contentInset===\"none\"?0:screenPatternRecipe.padding)+containerRecipe.gutters[hostGutter];\n const filterSlot=rail!=null&&filtersOverflow===\"scroll\"?<div className=\"hjm-search-screen__filters\" data-overflow=\"scroll\" style={{\"--hjm-search-filters-bleed\":`${bleed}px`} as CSSProperties}>{rail}</div>:rail;\n const visibleSuggestions=suggestions?.items.slice(0,Math.max(0,suggestions.maxVisible??searchScreenRecipe.suggestionVisible)).length??0;\n const countAnnouncement=phase===\"typing\"&&suggestions?suggestions.countLabel(visibleSuggestions):phase===\"results\"&&resultSummary&&resultSummary.count!==null?resultSummary.countLabel(resultSummary.count):\"\";\n // 2026-10-06 utilverse adoption: products swapped the whole field just to show progress. The Web spinner is\n // aria-hidden, so the localized searching label goes through the same status region as the counts.\n const announcement=searching&&searchingLabel?searchingLabel:countAnnouncement;\n const removeRecent=(item:string,index:number)=>{focus.schedule({list:\"recent\",index,from:recentQueries!.items.length});recentQueries!.onRemove(item);};\n const clearRecent=()=>{focus.schedule({list:\"clearRecent\",index:-1,from:recentQueries!.items.length});recentQueries!.onClearAll();};\n const removeApplied=(key:string,index:number)=>{focus.schedule({list:\"applied\",index,from:appliedCount});appliedFilters!.onRemove(key);};\n const clearApplied=()=>{focus.schedule({list:\"clearApplied\",index:-1,from:appliedCount});appliedFilters!.onClearAll();};\n // A new order starts at the top; the previous offset would land mid-list in unrelated results.\n const changeSort=(id:string)=>{resultSummary?.sort?.onChange(id);bodyHost.current?.closest(\".hjm-screen__body\")?.scrollTo?.({top:0});};\n const idle=<SearchIdleSections recent={recentQueries} suggested={suggestedQueries} legacy={recentSearches} onCommit={pick} hostRef={focus.recentHost} onRemove={removeRecent} onClearAll={clearRecent}/>;\n const body=phase===\"idle\"?<>{idle}{committedQuery===undefined?children:null}</>\n :phase===\"typing\"?(suggestions?<SearchSuggestionList query={query} suggestions={suggestions} onCommit={pick}/>:null)\n :<><SearchResultsHeader summary={resultSummary} applied={appliedFilters} cause={cause} appliedHost={focus.appliedHost} onRemove={removeApplied} onClearAll={clearApplied} onSortChange={changeSort}/>\n <SearchResultsBody summary={resultSummary} applied={appliedFilters} suggested={suggestedQueries} cause={cause} onCommit={pick} onClearAll={clearApplied}>{children}</SearchResultsBody></>;\n // Search-first routes have no visible heading: navigation and input share one row.\n // Keep explicit host headers and described/titled screens in their existing layout.\n const inlineNavigation=!embedded&&screen.titleVisibility===\"hidden\"&&screen.header==null;\n const searchInput=queryField ?? <SearchField {...labelProps} clearLabel={queryClearLabel!} value={query} onValueChange={onQueryChange} loading={searching??false} {...submitProps}/>;\n const queryRow=inlineNavigation?<Stack axis=\"inline\" align=\"center\" gap=\"sm\">{screen.exit?<ScreenExitButton {...screen.exit}/>:null}<div style={{flex:1,minWidth:0}}>{searchInput}</div>{screen.actions}</Stack>:searchInput;\n // The query field is the search screen's primary input (2026-10-18 entry focus).\n // Empty results belong to the visible body below the pinned query/filter/map region.\n // Reuse ScreenLayout's centering contract rather than giving EmptyState an arbitrary top inset.\n const centerResults=phase===\"results\"&&cause!==\"none\"&&resultSummary?.empty!==undefined;\n const notice=<Stack gap=\"sm\" ref={fieldHost}>{queryRow}{filterSlot}{screen.notice}</Stack>;\n const results=<Stack gap=\"lg\" ref={bodyHost} className=\"hjm-search-screen__results\" tabIndex={-1} justify={embedded&&centerResults?\"center\":\"start\"}\n style={{...(embedded||screen.scroll===\"content\"?{flex:1,minHeight:0}:{}),...(embedded?{overflowY:screen.scroll===\"content\"?\"hidden\":\"auto\"}: {})}}>\n {suggestions||resultSummary||searchingLabel?<SearchAnnouncement text={announcement}/>:null}{body}</Stack>;\n // A sheet already owns the title, exit, focus scope and outer scroll boundary. Reuse the same input/state/results\n // anatomy without adding a nested screen; the result host alone scrolls below the pinned query.\n return <>{embedded?<div className=\"hjm-search-screen--embedded\"><CompositionLayout notice={notice} {...(screen.state===undefined?{}:{state:screen.state})} stateAction={screen.stateAction}\n loadingIndicator={screen.loadingIndicator} footer={screen.footer} layoutStyle={{flex:1,...screen.layoutStyle}}>{results}</CompositionLayout></div>\n :<ScreenLayout {...screen} contentAlignment={phase===\"results\"&&cause!==\"none\"&&resultSummary?.empty?\"center\":screen.contentAlignment??\"start\"} initialFocus={initialFocus} {...(inlineNavigation?{header:<></>}: {})} notice={notice}>{results}</ScreenLayout>}\n {filterSheet?<SearchFilterSheetView sheet={filterSheet}/>:null}</>;\n}\n\nexport type PermissionScreenProps = Base & {status:PermissionScreenStatus;illustration?:ReactNode;explanation:ReactNode;request:ScreenFlowAction;settings:ScreenFlowAction;continueAction:ScreenFlowAction;skip?:ScreenFlowAction};\n// Permission guidance occupies the current screen body; keep its default centered on both platforms.\nexport function PermissionScreen({status,illustration,explanation,request,settings,continueAction,skip,...screen}:PermissionScreenProps){const kind=resolvePermissionAction(status);const primary=kind===\"request\"?request:kind===\"settings\"?settings:kind===\"continue\"?continueAction:null;return <ScreenLayout {...screen} contentAlignment={screen.contentAlignment ?? \"center\"} footer={<Stack gap=\"xs\">{primary?<Action action={primary}/>:null}{skip?<Action action={skip} secondary/>:null}</Stack>}><Stack gap=\"xl\" align=\"center\">{illustration}{explanation}</Stack></ScreenLayout>;}\n\nexport type OnboardingStep = {id:string;title:string;description:string;content:ReactNode};\nexport type OnboardingScreenProps = {steps:readonly OnboardingStep[];index:number;onIndexChange(index:number):void;nextLabel:string;backLabel:string;complete:ScreenFlowAction;skip?:ScreenFlowAction;progressLabel(index:number,total:number):string;exit?:ScreenLayoutProps[\"exit\"];layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]};\nexport function OnboardingScreen({steps,index,onIndexChange,nextLabel,backLabel,complete,skip,progressLabel,exit,layoutStyle}:OnboardingScreenProps){const position=resolveOnboardingStep(steps.length,index);const step=steps[index]!;\n // Completion and skip persist the same flow: keep navigation stable until the receipt.\n const host=useRef<HTMLDivElement|null>(null);\n // ScreenLayout owns this scroll region; keep focus while resetting each new step.\n useLayoutEffect(()=>{const body=host.current?.querySelector<HTMLElement>(\".hjm-screen__body\");if(body)body.scrollTop=0;},[index]);\n const pending=!!(complete.pending||skip?.pending);\n return <div ref={host} style={{display:\"contents\"}}><ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} {...(exit?{exit:{...exit,disabled:!!(exit.disabled||pending)}}:{})} actions={skip?<Action action={{...skip,disabled:!!(skip.disabled||pending)}} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"xs\"><Action action={position.last?{...complete,disabled:!!(complete.disabled||pending)}:{label:nextLabel,disabled:pending,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,disabled:pending,onAction:()=>onIndexChange(index-1)}} secondary/>:null}</Stack>}>{step.content}</ScreenLayout></div>;}\n\nexport type CommentThreadItem = Readonly<{\n /** Root-only reply branch. Total can exceed the loaded preview; HJM owns its indentation and expansion. */\n repliesCount?:number;repliesNotice?:ReactNode;repliesFooter?:ReactNode;\n id:string;parentId:string|null;author:string;body:ReactNode;bodyText?:string;timeLabel:string;timeDateTime?:string;likeCountLabel:string;avatar?:ReactNode;likeIcon:ReactNode;likeLabel:string;likeAction?:ReactNode;actions?:ReactNode;canReply?:boolean;replyDisabled?:boolean;\n /** Long-press the comment (author and body) to react; the product owns the stored value and summary. */\n reactions?:CommentReactions;reactionSummary?:ReactNode;\n /** Optional photo or sticker under the body; HJM bounds its width and corners, the product sizes the image. */\n media?:ReactNode;\n /**\n * Where the time label sits. \"auto\" keeps it beside the author unless `bodyText` inlines the author; \"actions\" moves it\n * into the line under the body with reactions and Reply, for rich (non-text) bodies such as Spint's flower stamp\n * (2026-10-18). Default \"auto\".\n */\n timePlacement?:\"auto\"|\"actions\";\n /**\n * Inline per-comment panel (edit, report or block form) under the Reply line, outside the long-press target\n * (2026-10-18, Utilverse). The product owns its open state, focus, submit and close; HJM owns its place in the row.\n */\n panel?:ReactNode;\n /**\n * Paged photo set under the body (2026-10-18, Utilverse): HJM mounts only the shown page so the product can fetch one\n * authorized image at a time. Exclusive with `media` (validated at render); it sits outside the long-press target because it has its own buttons.\n */\n mediaAlbum?:MediaAlbum}>;\nexport type CommentReactions = ReactionPickerProps & Readonly<{closeLabel:string;menuAction?:Readonly<{label:string;onPress():void;disabled?:boolean}>;menuActions?:readonly MessageMenuAction[];reportAction?:Readonly<{label:string;onPress():void;disabled?:boolean;icon?:ReactNode}>;interactiveContent?:boolean;/** Icon for the automatic \"reply\" row of the hold menu. */replyIcon?:ReactNode}>;\n/**\n * HJM-owned \"more\" menu per comment (2026-10-17: common comment structure belongs to HJM, review S4#7). HJM draws the\n * vertical-dots button at the row's trailing edge and opens the shared Menu with danger items last; the product supplies\n * only the localized button name, the items allowed for that comment and the action callback.\n */\nexport type CommentMenu = Readonly<{\n /** Localized accessible name of the button, e.g. \"More options for seoyeon's comment\". */\n label(item: CommentThreadItem): string;\n /** Items allowed for this comment (permission is product-owned). An empty list omits the button for that row. */\n items(item: CommentThreadItem): readonly CommentMenuItemDescriptor[];\n /** Runs after the menu closes, so a confirmation dialog can open without competing with the menu for focus. */\n onAction(item: CommentThreadItem, id: string): void;\n}>;\nexport type CommentThreadScreenProps = Base & {items:readonly CommentThreadItem[];expandedIds:readonly string[];onExpandedChange(id:string):void;onLike(id:string):void;onReply(id:string):void;replyLabel:string;repliesLabel(count:number,expanded:boolean):string;composer?:ReactNode;threadHeader?:ReactNode;threadFooter?:ReactNode;commentMenu?:CommentMenu};\nexport type CommentThreadRowProps = Readonly<{ layoutStyle?: ScreenLayoutProps[\"layoutStyle\"]; item: CommentThreadItem; onLike(id: string): void; onReply(id: string): void; replyLabel: string; commentMenu?: CommentMenu }>;\n/** Quiet secondary actions (reply, expand) read as muted copy beside the body, not as filled buttons. */\nfunction CommentTextAction({label,onPress,disabled=false,expanded}:Readonly<{label:string;onPress():void;disabled?:boolean;expanded?:boolean}>){\n return <button type=\"button\" className=\"hjm-comment-row__action\" disabled={disabled} aria-expanded={expanded} onClick={onPress}>{label}</button>;\n}\n\n/** Vertical dots drawn in the icon grid, matching Native's drawn glyph (the semantic `more` icon is horizontal). */\nfunction CommentMenuGlyph(){const size=commentThreadRecipe.menuGlyphSize;return <svg aria-hidden=\"true\" focusable=\"false\" width={size} height={size} viewBox=\"0 0 24 24\" fill=\"currentColor\">{[5,12,19].map(y=><circle key={y} cx=\"12\" cy={y} r=\"1.75\"/>)}</svg>;}\nfunction CommentMenuButton({item,menu,items}:Readonly<{item:CommentThreadItem;menu:CommentMenu;items:readonly CommentMenuItemDescriptor[]}>){\n const label=menu.label(item);\n return <Menu label={label} align=\"end\" trigger={<IconButton label={label} tone=\"ghost\"><CommentMenuGlyph/></IconButton>} items={items.map(entry=>({id:entry.id,label:entry.label,textValue:entry.label,...(entry.tone===undefined?{}:{tone:entry.tone}),...(entry.disabled===undefined?{}:{disabled:entry.disabled})}))} onActionAfterDismiss={id=>menu.onAction(item,id)}/>;\n}\n\n/** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */\nexport function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle, commentMenu }: CommentThreadRowProps) {\n validateMediaSetChoice(item.media!=null,item.mediaAlbum!==undefined);\n const [albumIndex,setAlbumIndex]=useMediaAlbumIndex(item.mediaAlbum);\n // bodyText inlines the author, so its time always moves under the body; rich bodies opt in with timePlacement.\n const timeInActions=item.bodyText!==undefined||item.timePlacement===\"actions\";\n const avatarSize=item.parentId===null?commentThreadRecipe.avatarSize:commentThreadRecipe.replyAvatarSize;\n const canReply=item.canReply??item.parentId===null;\n const menuItems=commentMenu?resolveCommentMenuItems(commentMenu.items(item)):[];\n const time=item.timeLabel?<time className=\"hjm-comment-row__time\" dateTime={item.timeDateTime}><Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text></time>:null;\n // The like count sits under the heart so the text column carries only identity, body and reply.\n return <Stack key={item.id} axis=\"inline\" align=\"start\" gap=\"xs\" {...(layoutStyle === undefined ? {} : {layoutStyle})}>{item.avatar?<div className=\"hjm-comment-row__avatar\" style={{inlineSize:avatarSize}}>{item.avatar}</div>:null}<div className=\"hjm-comment-row__text\" style={{gap:commentThreadRecipe.lineGap}}>\n {/* A definite media width resolves percentage-sized children; the parent cap preserves narrow comment columns (Spint photo adoption). */}\n {/* Only identity and body are the hold target, so the reply action keeps its own button semantics. */}\n {(()=>{const identity=<>{item.bodyText!==undefined?<Text><Text emphasis=\"strong\">{item.author}</Text>{\" \"}{item.bodyText}</Text>:(item.author||(item.timeLabel&&!timeInActions))?<Stack axis=\"inline\" gap=\"xxs\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.author?<Text variant=\"caption\" emphasis=\"strong\">{item.author}</Text>:null}{timeInActions?null:time}</Stack>:null}\n {item.body}{item.media?<div className=\"hjm-comment-row__media\" style={{inlineSize:commentThreadRecipe.mediaMaxWidth,maxInlineSize:\"100%\",borderRadius:commentThreadRecipe.mediaRadius}}>{item.media}</div>:null}</>;return item.reactions?<MessageReactions {...item.reactions} {...((item.canReply??item.parentId===null)&&!item.replyDisabled ? {replyAction:{label:replyLabel,onPress:()=>onReply(item.id),...(item.reactions.replyIcon===undefined?{}:{icon:item.reactions.replyIcon})}} : {})} triggerClassName=\"hjm-comment-row__reactions\">{identity}</MessageReactions>:identity;})()}\n {item.mediaAlbum?<MediaAlbumView className=\"hjm-comment-row__album\" album={item.mediaAlbum} index={albumIndex} onIndexChange={setAlbumIndex} width={commentThreadRecipe.mediaMaxWidth} radius={commentThreadRecipe.mediaRadius}/>:null}\n {(timeInActions&&time)||canReply||item.reactionSummary?<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{timeInActions?time:null}{item.reactionSummary}{canReply?<CommentTextAction label={replyLabel} disabled={item.replyDisabled??false} onPress={()=>onReply(item.id)}/>:null}</Stack>:null}\n {/* The text column already spaces lines by lineGap; the panel adds the rest of panelGap. */}\n {item.panel!=null?<div className=\"hjm-comment-row__panel\" style={{marginBlockStart:commentThreadRecipe.panelGap-commentThreadRecipe.lineGap}}>{item.panel}</div>:null}</div>\n <div className=\"hjm-comment-row__like\" {...(menuItems.length||item.actions==null&&item.likeAction===undefined?{\"data-edge\":\"end\"}:{})} style={{\"--hjm-comment-anchor-line\":`var(--hjm-type-${item.bodyText!==undefined?commentThreadRecipe.actionAnchor.inlineTextVariant:commentThreadRecipe.actionAnchor.authorTextVariant}-line-height)`} as CSSProperties}><Stack axis=\"inline\" style={{gap:0}} align=\"center\" layoutStyle={{flexShrink:0}}>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}{item.actions}{commentMenu&&menuItems.length?<CommentMenuButton item={item} menu={commentMenu} items={menuItems}/>:null}</Stack>{item.likeCountLabel?<div className=\"hjm-comment-row__like-count\" style={{inlineSize:commentThreadRecipe.likeColumnWidth}}><Text variant=\"caption\" tone=\"muted\">{item.likeCountLabel}</Text></div>:null}</div></Stack>;\n}\n\n/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */\nexport function CommentThreadScreen({items,expandedIds,onExpandedChange,onLike,onReply,replyLabel,repliesLabel,composer,threadHeader,threadFooter,commentMenu,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // Index replies once; rescanning every item for each root makes long threads quadratic.\n const roots:CommentThreadItem[]=[], repliesByParent=new Map<string,CommentThreadItem[]>();\n const expanded=new Set(expandedIds);\n for(const item of items){\n if(item.parentId===null)roots.push(item);\n else {const siblings=repliesByParent.get(item.parentId);if(siblings)siblings.push(item);else repliesByParent.set(item.parentId,[item]);}\n }\n const row=(item:CommentThreadItem)=><CommentThreadRow key={item.id} item={item} onLike={onLike} onReply={onReply} replyLabel={replyLabel} {...(commentMenu===undefined?{}:{commentMenu})}/>;\n // Product context belongs in the same scroll body as comments. Putting a tall\n // overview in the fixed header forced a second scroll region in Spint (2026-10-08).\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{threadHeader}<div className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap}}>{roots.map(item=>{const replies=repliesByParent.get(item.id)??[];const total=item.repliesCount;if(total!==undefined&&(!Number.isSafeInteger(total)||total<0))throw new RangeError(\"CommentThreadItem repliesCount must be nonnegative\");const count=Math.max(replies.length,total??0);return <div key={item.id} className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap}}>{row(item)}{count||item.repliesNotice||item.repliesFooter?<div className=\"hjm-comment-thread\" style={{gap:commentThreadRecipe.rowGap,marginInlineStart:commentThreadRecipe.replyIndent}}><CommentTextAction label={repliesLabel(count,expanded.has(item.id))} expanded={expanded.has(item.id)} onPress={()=>onExpandedChange(item.id)}/>{expanded.has(item.id)?<>{item.repliesNotice}{replies.map(row)}{item.repliesFooter}</>:null}</div>:null}</div>;})}</div>{threadFooter}</Stack></ScreenLayout>;\n}\n\nexport type ProfileSummaryProps = Readonly<{\n name: string;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n avatar: ReactNode;\n badge?: ReactNode;\n nameActions?: ReactNode;\n stats?: readonly Readonly<{ id: string; value: string; label: string; onPress?(): void; disabled?: boolean }>[];\n actions?: ReactNode;\n actionsLayout?: keyof typeof profileSummaryRecipe.actionsLayouts;\n children?: ReactNode;\n}>;\n\n/** Profile identity and counts are common; routing and mutations stay controlled by the product. */\nexport function ProfileSummary({ name, headingLevel = 2, avatar, badge, nameActions, stats = [], actions, actionsLayout = \"inline\", children }: ProfileSummaryProps) {\n const actionLayout = profileSummaryRecipe.actionsLayouts[actionsLayout];\n const edit = useContext(ProfileEditContext);\n const { tone: editTone, size: editSize } = profileSummaryRecipe.editAction;\n const editButton = edit ? <Button tone={editTone} size={editSize} disabled={!!(edit.disabled || edit.pending)} loading={edit.pending ?? false} onClick={edit.onAction}>{edit.label}</Button> : null;\n return <CompositionLayout title={name} headingLevel={headingLevel} leading={<span style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: profileSummaryRecipe.avatarGlyphSize, lineHeight: 1, width: profileSummaryRecipe.avatarSize, height: profileSummaryRecipe.avatarSize, flexShrink: 0, borderRadius: \"50%\", overflow: \"hidden\" }}>{avatar}</span>} badge={badge} actions={nameActions} footer={children}>\n {/* Static and actionable counts occupy identical cells; button hit areas must not shift their baselines. */}\n {stats.length ? <Stack axis=\"inline\" gap=\"md\" align=\"stretch\" layoutStyle={{ width: \"100%\" }}>{stats.map(stat =>\n <Stack key={stat.id} gap=\"xxs\" align=\"center\" justify=\"center\" layoutStyle={{ flex: 1, minWidth: 0 }}>\n {stat.onPress ? <Button tone=\"ghost\" aria-label={`${stat.value} ${stat.label}`} disabled={stat.disabled ?? false} onClick={stat.onPress} layoutStyle={{ width: \"100%\" }}><Stack gap=\"xxs\" align=\"center\"><Text emphasis=\"strong\">{stat.value}</Text><Text variant=\"caption\" tone=\"muted\">{stat.label}</Text></Stack></Button>\n : <><Text emphasis=\"strong\">{stat.value}</Text><Text variant=\"caption\" tone=\"muted\">{stat.label}</Text></>}\n </Stack>)}</Stack> : null}\n {editButton || actions ? <Stack axis={actionLayout.axis} gap={actionLayout.gap} wrap={actionsLayout === \"inline\"} layoutStyle={{ width: \"100%\" }}>{editButton}{actions}</Stack> : null}\n </CompositionLayout>;\n}\n"]}