@hjmds/react 1.17.2 → 1.19.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.
- package/dist/activity-chip.d.ts +33 -0
- package/dist/activity-chip.d.ts.map +1 -0
- package/dist/activity-chip.js +24 -0
- package/dist/activity-chip.js.map +1 -0
- package/dist/advanced-display.d.ts.map +1 -1
- package/dist/advanced-display.js +41 -9
- package/dist/advanced-display.js.map +1 -1
- package/dist/advanced-forms.d.ts.map +1 -1
- package/dist/advanced-forms.js +22 -9
- package/dist/advanced-forms.js.map +1 -1
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +17 -11
- package/dist/agreement.js.map +1 -1
- package/dist/auth-screen.d.ts.map +1 -1
- package/dist/auth-screen.js +15 -2
- package/dist/auth-screen.js.map +1 -1
- package/dist/avatar-blobatar-motion.d.ts.map +1 -1
- package/dist/avatar-blobatar-motion.js +10 -2
- package/dist/avatar-blobatar-motion.js.map +1 -1
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +2 -2
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +10 -2
- package/dist/calendar.js.map +1 -1
- package/dist/carousel-motion.d.ts +1 -0
- package/dist/carousel-motion.d.ts.map +1 -1
- package/dist/carousel-motion.js +4 -3
- package/dist/carousel-motion.js.map +1 -1
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +22 -4
- package/dist/carousel.js.map +1 -1
- package/dist/collapsible.d.ts.map +1 -1
- package/dist/collapsible.js +28 -4
- package/dist/collapsible.js.map +1 -1
- package/dist/collection-rail.d.ts.map +1 -1
- package/dist/collection-rail.js +19 -1
- package/dist/collection-rail.js.map +1 -1
- package/dist/color-picker.d.ts.map +1 -1
- package/dist/color-picker.js +12 -4
- package/dist/color-picker.js.map +1 -1
- package/dist/command-palette.d.ts.map +1 -1
- package/dist/command-palette.js +14 -2
- package/dist/command-palette.js.map +1 -1
- package/dist/content-transition.d.ts +2 -1
- package/dist/content-transition.d.ts.map +1 -1
- package/dist/content-transition.js +2 -2
- package/dist/content-transition.js.map +1 -1
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +31 -10
- package/dist/context-menu.js.map +1 -1
- package/dist/date-entry.d.ts +1 -1
- package/dist/date-entry.d.ts.map +1 -1
- package/dist/date-entry.js +20 -7
- package/dist/date-entry.js.map +1 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +22 -6
- package/dist/date-picker.js.map +1 -1
- package/dist/display.d.ts +11 -1
- package/dist/display.d.ts.map +1 -1
- package/dist/display.js +13 -4
- package/dist/display.js.map +1 -1
- package/dist/duration-field.d.ts +2 -2
- package/dist/duration-field.d.ts.map +1 -1
- package/dist/duration-field.js +11 -3
- package/dist/duration-field.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/feedback.d.ts +1 -0
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +7 -2
- package/dist/feedback.js.map +1 -1
- package/dist/field-group.d.ts +4 -2
- package/dist/field-group.d.ts.map +1 -1
- package/dist/field-group.js +4 -3
- package/dist/field-group.js.map +1 -1
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +15 -5
- package/dist/file-picker.js.map +1 -1
- package/dist/forms.d.ts +2 -2
- package/dist/forms.js +1 -1
- package/dist/forms.js.map +1 -1
- package/dist/gravity-letters.d.ts.map +1 -1
- package/dist/gravity-letters.js +9 -1
- package/dist/gravity-letters.js.map +1 -1
- package/dist/grid-reveal.d.ts.map +1 -1
- package/dist/grid-reveal.js +9 -1
- package/dist/grid-reveal.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inline-confirm.d.ts.map +1 -1
- package/dist/inline-confirm.js +25 -4
- package/dist/inline-confirm.js.map +1 -1
- package/dist/internal/document-resource.d.ts.map +1 -1
- package/dist/internal/document-resource.js +2 -2
- package/dist/internal/document-resource.js.map +1 -1
- package/dist/layout.d.ts +8 -2
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +2 -1
- package/dist/masonry.js.map +1 -1
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +12 -4
- package/dist/mentions.js.map +1 -1
- package/dist/menu-morph.js +1 -1
- package/dist/menu-morph.js.map +1 -1
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +43 -19
- package/dist/menubar.js.map +1 -1
- package/dist/modal.d.ts.map +1 -1
- package/dist/modal.js +15 -4
- package/dist/modal.js.map +1 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +8 -2
- package/dist/navigation.js.map +1 -1
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +3 -1
- package/dist/number-field.js.map +1 -1
- package/dist/overlay-stack.d.ts.map +1 -1
- package/dist/overlay-stack.js +23 -6
- package/dist/overlay-stack.js.map +1 -1
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +8 -0
- package/dist/overlays.js.map +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +16 -4
- package/dist/pagination.js.map +1 -1
- package/dist/saved-items.d.ts.map +1 -1
- package/dist/saved-items.js +6 -1
- package/dist/saved-items.js.map +1 -1
- package/dist/screen-flows.d.ts +1 -2
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +120 -16
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +1 -1
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +38 -10
- package/dist/screens.js.map +1 -1
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +6 -1
- package/dist/select.js.map +1 -1
- package/dist/side-panel.d.ts.map +1 -1
- package/dist/side-panel.js +11 -2
- package/dist/side-panel.js.map +1 -1
- package/dist/sidebar.d.ts.map +1 -1
- package/dist/sidebar.js +8 -1
- package/dist/sidebar.js.map +1 -1
- package/dist/skip-nav.d.ts.map +1 -1
- package/dist/skip-nav.js +16 -3
- package/dist/skip-nav.js.map +1 -1
- package/dist/sortable.d.ts.map +1 -1
- package/dist/sortable.js +2 -1
- package/dist/sortable.js.map +1 -1
- package/dist/splitter.d.ts.map +1 -1
- package/dist/splitter.js +23 -11
- package/dist/splitter.js.map +1 -1
- package/dist/statistic-motion.d.ts.map +1 -1
- package/dist/statistic-motion.js +30 -2
- package/dist/statistic-motion.js.map +1 -1
- package/dist/status-text.d.ts +11 -0
- package/dist/status-text.d.ts.map +1 -0
- package/dist/status-text.js +7 -0
- package/dist/status-text.js.map +1 -0
- package/dist/styles.css +53 -7
- package/dist/styles.layered.css +53 -7
- package/dist/supplemental-display.d.ts.map +1 -1
- package/dist/supplemental-display.js +19 -8
- package/dist/supplemental-display.js.map +1 -1
- package/dist/supplemental-navigation.d.ts.map +1 -1
- package/dist/supplemental-navigation.js +10 -1
- package/dist/supplemental-navigation.js.map +1 -1
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +18 -8
- package/dist/tags-input.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +11 -0
- package/dist/theme.js.map +1 -1
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +41 -16
- package/dist/toast.js.map +1 -1
- package/dist/toggle-group.d.ts.map +1 -1
- package/dist/toggle-group.js +6 -1
- package/dist/toggle-group.js.map +1 -1
- package/dist/tour.d.ts.map +1 -1
- package/dist/tour.js +15 -2
- package/dist/tour.js.map +1 -1
- package/dist/transfer-list.d.ts +1 -1
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +52 -7
- package/dist/transfer-list.js.map +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +41 -8
- package/dist/tree.js.map +1 -1
- package/dist/virtual-list.d.ts.map +1 -1
- package/dist/virtual-list.js +44 -7
- package/dist/virtual-list.js.map +1 -1
- package/package.json +13 -3
package/dist/overlays.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { TransitionRect } from \"@hjmds/design-contracts/content-transition\";\nimport { useOverlayOriginMotion } from \"./internal/overlay-origin-motion.js\";\nimport { layer } from \"@hjmds/design-contracts/foundations\";\nimport { resolveMenuTypeahead } from \"./menu-typeahead.js\";\nimport {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n tooltipRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator, useOptionalHjmTheme } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n /** Optional measured trigger bounds in viewport coordinates; keeps canonical modal behavior. */\n motionOrigin?: TransitionRect;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n motionOrigin,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const theme = useOptionalHjmTheme();\n const { visible, setNode: setMotionNode } = useOverlayOriginMotion(open, motionOrigin, theme?.environment.reducedMotion);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef, setMotionNode);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(visible);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(visible);\n openRef.current = visible;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (visible) { wasOpenRef.current = true; if (open) dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open, visible]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: visible,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {visible ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Diairy QA W16: Chrome's default backdrop blur can run after focus\n // cleanup and undo its return target. Cancel that default, not the modal's dismissal.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n inert={!open}\n aria-hidden={!open || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\n// No `layoutStyle`: an edge-attached modal portal; its geometry is the recipe's.\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n // Mirrors the content's detent so a `full` sheet can drop the positioner's top gutter (sheetRecipe.sizes.full).\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Match Dialog: a real backdrop click must not undo return focus or\n // move focus to body when busy/outside-dismiss policy keeps the sheet open.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const touchTapRef = useRef<{ wasVisible: boolean } | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerDown: (event) => {\n triggerProps.onPointerDown?.(event);\n touchTapRef.current = event.pointerType === \"touch\" ? { wasVisible: visible } : null;\n },\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n const touchTap = touchTapRef.current;\n touchTapRef.current = null;\n if (event.defaultPrevented) return;\n // Touch has no hover, so a tap is the only way to show the hint. The tap's\n // own focus already opened it; closing here (the mouse/keyboard path) made it\n // flash for 1ms (2026-09-30 audit WR-0930-1). A second tap closes instead.\n if (touchTap !== null && !touchTap.wasVisible) {\n if (!visible) schedule(true, 0, { reason: \"pointer\" });\n return;\n }\n if (visible) changeOpen(false, { reason: \"trigger-activation\" });\n },\n });\n useEffect(() => {\n if (!visible) return;\n // Tap-opened tooltips have no pointer-leave; an outside press dismisses them.\n // Mobile Safari does not focus buttons on tap, so blur alone is not enough.\n const onOutsidePress = (event: PointerEvent) => {\n if (\n containsEventTarget(triggerRef.current, event.target) ||\n containsEventTarget(tooltipNode, event.target)\n ) return;\n clearTimer();\n changeOpen(false, { reason: \"blur\" });\n };\n document.addEventListener(\"pointerdown\", onOutsidePress, true);\n return () => document.removeEventListener(\"pointerdown\", onOutsidePress, true);\n }, [changeOpen, tooltipNode, visible]);\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n // tooltipRecipe.positioning (2026-10-06 follow-up): 4 from the trigger and 12 from the edge;\n // the helper defaults 8/16 had made Web tooltips float further away than Native.\n gap: tooltipRecipe.positioning.sideOffset,\n viewportPadding: tooltipRecipe.positioning.collisionPadding,\n zIndex: layer.tooltip,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n style={layoutStyle}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n // The positioner's inline maxWidth (space left in the viewport) would override the stylesheet cap,\n // so tooltipRecipe.content.maxWidth (280) is applied here too (2026-10-06; Web had grown to 320).\n style={{\n ...popupPosition.style,\n maxWidth: typeof popupPosition.style.maxWidth === \"number\"\n ? Math.min(popupPosition.style.maxWidth, tooltipRecipe.content.maxWidth)\n : tooltipRecipe.content.maxWidth,\n }}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the in-flow wrapper around the trigger; the popup stays anchored. */\n layoutStyle?: HjmCompositionStyleProp;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n // menuRecipe offset/edge padding (2026-10-06 follow-up; helper default edge padding was 16).\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, {\n align, gap: menuRecipe.sideOffset, viewportPadding: menuRecipe.collisionPadding, zIndex: layer.dropdown,\n });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const result = resolveMenuTypeahead(\n items.map((item) => ({ textValue: menuTextValue(item), disabled: itemIsDisabled(item) })),\n focusIndex, key, typeaheadRef.current, Date.now(),\n );\n typeaheadRef.current = result.state;\n if (result.index !== undefined) focusAt(result.index);\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" style={layoutStyle} data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { TransitionRect } from \"@hjmds/design-contracts/content-transition\";\nimport { useOverlayOriginMotion } from \"./internal/overlay-origin-motion.js\";\nimport { layer } from \"@hjmds/design-contracts/foundations\";\nimport { resolveMenuTypeahead } from \"./menu-typeahead.js\";\nimport {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n tooltipRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator, useOptionalHjmTheme } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n /** Optional measured trigger bounds in viewport coordinates; keeps canonical modal behavior. */\n motionOrigin?: TransitionRect;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n motionOrigin,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const theme = useOptionalHjmTheme();\n const { visible, setNode: setMotionNode } = useOverlayOriginMotion(open, motionOrigin, theme?.environment.reducedMotion);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef, setMotionNode);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(visible);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(visible);\n openRef.current = visible;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (visible) { wasOpenRef.current = true; if (open) dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open, visible]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: visible,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {visible ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Diairy QA W16: Chrome's default backdrop blur can run after focus\n // cleanup and undo its return target. Cancel that default, not the modal's dismissal.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n inert={!open}\n aria-hidden={!open || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\n// No `layoutStyle`: an edge-attached modal portal; its geometry is the recipe's.\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n if (openProp !== undefined) queueMicrotask(() => {\n // Controlled owners may reject a request. Deduplicate this interaction,\n // then allow a later attempt instead of permanently latching the sheet.\n if (currentOpenRef.current) {\n lifecycleRef.current = createSheetLifecycle(true);\n }\n });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n // Mirrors the content's detent so a `full` sheet can drop the positioner's top gutter (sheetRecipe.sizes.full).\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Match Dialog: a real backdrop click must not undo return focus or\n // move focus to body when busy/outside-dismiss policy keeps the sheet open.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const touchTapRef = useRef<{ wasVisible: boolean } | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerDown: (event) => {\n triggerProps.onPointerDown?.(event);\n touchTapRef.current = event.pointerType === \"touch\" ? { wasVisible: visible } : null;\n },\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n const touchTap = touchTapRef.current;\n touchTapRef.current = null;\n if (event.defaultPrevented) return;\n // Touch has no hover, so a tap is the only way to show the hint. The tap's\n // own focus already opened it; closing here (the mouse/keyboard path) made it\n // flash for 1ms (2026-09-30 audit WR-0930-1). A second tap closes instead.\n if (touchTap !== null && !touchTap.wasVisible) {\n if (!visible) schedule(true, 0, { reason: \"pointer\" });\n return;\n }\n if (visible) changeOpen(false, { reason: \"trigger-activation\" });\n },\n });\n useEffect(() => {\n if (!visible) return;\n // Tap-opened tooltips have no pointer-leave; an outside press dismisses them.\n // Mobile Safari does not focus buttons on tap, so blur alone is not enough.\n const onOutsidePress = (event: PointerEvent) => {\n if (\n containsEventTarget(triggerRef.current, event.target) ||\n containsEventTarget(tooltipNode, event.target)\n ) return;\n clearTimer();\n changeOpen(false, { reason: \"blur\" });\n };\n document.addEventListener(\"pointerdown\", onOutsidePress, true);\n return () => document.removeEventListener(\"pointerdown\", onOutsidePress, true);\n }, [changeOpen, tooltipNode, visible]);\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n // tooltipRecipe.positioning (2026-10-06 follow-up): 4 from the trigger and 12 from the edge;\n // the helper defaults 8/16 had made Web tooltips float further away than Native.\n gap: tooltipRecipe.positioning.sideOffset,\n viewportPadding: tooltipRecipe.positioning.collisionPadding,\n zIndex: layer.tooltip,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n style={layoutStyle}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n // The positioner's inline maxWidth (space left in the viewport) would override the stylesheet cap,\n // so tooltipRecipe.content.maxWidth (280) is applied here too (2026-10-06; Web had grown to 320).\n style={{\n ...popupPosition.style,\n maxWidth: typeof popupPosition.style.maxWidth === \"number\"\n ? Math.min(popupPosition.style.maxWidth, tooltipRecipe.content.maxWidth)\n : tooltipRecipe.content.maxWidth,\n }}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the in-flow wrapper around the trigger; the popup stays anchored. */\n layoutStyle?: HjmCompositionStyleProp;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n // menuRecipe offset/edge padding (2026-10-06 follow-up; helper default edge padding was 16).\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, {\n align, gap: menuRecipe.sideOffset, viewportPadding: menuRecipe.collisionPadding, zIndex: layer.dropdown,\n });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const result = resolveMenuTypeahead(\n items.map((item) => ({ textValue: menuTextValue(item), disabled: itemIsDisabled(item) })),\n focusIndex, key, typeaheadRef.current, Date.now(),\n );\n typeaheadRef.current = result.state;\n if (result.index !== undefined) focusAt(result.index);\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" style={layoutStyle} data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}
|
package/dist/pagination.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,+BAA+B,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAClN,OAAO,
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,+BAA+B,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAClN,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GACzE,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,qBAAqB,EAAE,+BAA+B,CAAC;IACvD,YAAY,EAAE,uBAAuB,CAAC;IACtC,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEL,eAAO,MAAM,UAAU;WATZ,MAAM;gBACD,oBAAoB;YACxB,gBAAgB;2BACD,+BAA+B;kBACxC,uBAAuB;IACrC,gGAAgG;kBAClF,uBAAuB;gDAiGxC,CAAC"}
|
package/dist/pagination.js
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { resolvePaginationDescriptor } from "@hjmds/design-contracts/components/pagination";
|
|
3
|
-
import { forwardRef } from "react";
|
|
3
|
+
import { forwardRef, useLayoutEffect, useRef } from "react";
|
|
4
4
|
import { classNames } from "./internal.js";
|
|
5
|
-
export const Pagination = forwardRef(function Pagination({ label, descriptor, labels, composeAccessibleName, onPageChange, className, layoutStyle, ...props }, ref) {
|
|
5
|
+
export const Pagination = forwardRef(function Pagination({ label, descriptor, labels, composeAccessibleName, onPageChange, className, layoutStyle, onFocusCapture, onBlurCapture, ...props }, ref) {
|
|
6
6
|
if (label.trim().length === 0)
|
|
7
7
|
throw new TypeError("Pagination label must not be empty");
|
|
8
8
|
const resolved = resolvePaginationDescriptor(descriptor, {
|
|
9
9
|
labels,
|
|
10
10
|
composeAccessibleName,
|
|
11
11
|
});
|
|
12
|
+
const focusedButton = useRef(null);
|
|
13
|
+
const currentButton = useRef(null);
|
|
14
|
+
useLayoutEffect(() => {
|
|
15
|
+
// A smaller result set or moved page window can remove the focused numbered button.
|
|
16
|
+
if (focusedButton.current && !focusedButton.current.isConnected && document.activeElement === document.body) {
|
|
17
|
+
currentButton.current?.focus();
|
|
18
|
+
}
|
|
19
|
+
});
|
|
12
20
|
// Preserve focus when a page change reaches a boundary; aria-disabled buttons
|
|
13
21
|
// remain reachable but their activation is guarded below.
|
|
14
|
-
return (_jsx("nav", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, className: classNames("hjm-pagination", className), "aria-label": label,
|
|
15
|
-
|
|
22
|
+
return (_jsx("nav", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, className: classNames("hjm-pagination", className), "aria-label": label, onFocusCapture: (event) => { focusedButton.current = event.target; onFocusCapture?.(event); }, onBlurCapture: (event) => {
|
|
23
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
24
|
+
focusedButton.current = null;
|
|
25
|
+
onBlurCapture?.(event);
|
|
26
|
+
}, children: _jsxs("ul", { className: "hjm-pagination__list", children: [_jsx("li", { children: _jsx("button", { type: "button", className: "hjm-pagination__item hjm-pagination__previous", "aria-label": resolved.labels.previous, "aria-disabled": !resolved.hasPrevious || undefined, onClick: () => { if (resolved.hasPrevious)
|
|
27
|
+
onPageChange(resolved.currentPage - 1, "previous"); }, children: _jsx("span", { "aria-hidden": "true", children: "\u2039" }) }) }), resolved.items.map((item, index) => item.type === "ellipsis" ? (_jsx("li", { children: _jsx("span", { className: "hjm-pagination__ellipsis", "aria-hidden": "true", children: "\u2026" }) }, `ellipsis-${index}`)) : (_jsx("li", { children: _jsx("button", { type: "button", className: "hjm-pagination__item", ref: item.current ? currentButton : undefined, "data-state": item.current ? "current" : "idle", "aria-current": item.current ? "page" : undefined, "aria-label": item.accessibleName, onClick: () => {
|
|
16
28
|
if (!item.current)
|
|
17
29
|
onPageChange(item.page, "page");
|
|
18
30
|
}, children: item.page }) }, item.page))), _jsx("li", { children: _jsx("button", { type: "button", className: "hjm-pagination__item hjm-pagination__next", "aria-label": resolved.labels.next, "aria-disabled": !resolved.hasNext || undefined, onClick: () => { if (resolved.hasNext)
|
package/dist/pagination.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,2BAA2B,EAAwH,MAAM,+CAA+C,CAAC;AAClN,OAAO,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.tsx"],"names":[],"mappings":"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","sourcesContent":["import { resolvePaginationDescriptor, type ComposePaginationAccessibleName, type PaginationChangeHandler, type PaginationDescriptor, type PaginationLabels } from \"@hjmds/design-contracts/components/pagination\";\nimport { forwardRef, useLayoutEffect, useRef, type HTMLAttributes } from \"react\";\nimport { classNames } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type PaginationProps = Omit<HTMLAttributes<HTMLElement>, \"children\"> &\n Readonly<{\n label: string;\n descriptor: PaginationDescriptor;\n labels: PaginationLabels;\n composeAccessibleName: ComposePaginationAccessibleName;\n onPageChange: PaginationChangeHandler;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination(\n {\n label,\n descriptor,\n labels,\n composeAccessibleName,\n onPageChange,\n className,\n layoutStyle,\n onFocusCapture,\n onBlurCapture,\n ...props\n },\n ref,\n ) {\n if (label.trim().length === 0) throw new TypeError(\"Pagination label must not be empty\");\n const resolved = resolvePaginationDescriptor(descriptor, {\n labels,\n composeAccessibleName,\n });\n const focusedButton = useRef<HTMLElement | null>(null);\n const currentButton = useRef<HTMLButtonElement>(null);\n useLayoutEffect(() => {\n // A smaller result set or moved page window can remove the focused numbered button.\n if (focusedButton.current && !focusedButton.current.isConnected && document.activeElement === document.body) {\n currentButton.current?.focus();\n }\n });\n // Preserve focus when a page change reaches a boundary; aria-disabled buttons\n // remain reachable but their activation is guarded below.\n return (\n <nav\n {...props}\n style={{ ...props.style, ...layoutStyle }}\n ref={ref}\n className={classNames(\"hjm-pagination\", className)}\n aria-label={label}\n onFocusCapture={(event) => { focusedButton.current = event.target; onFocusCapture?.(event); }}\n onBlurCapture={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget)) focusedButton.current = null;\n onBlurCapture?.(event);\n }}\n >\n <ul className=\"hjm-pagination__list\">\n <li>\n <button\n type=\"button\"\n className=\"hjm-pagination__item hjm-pagination__previous\"\n aria-label={resolved.labels.previous}\n aria-disabled={!resolved.hasPrevious || undefined}\n onClick={() => { if (resolved.hasPrevious) onPageChange(resolved.currentPage - 1, \"previous\"); }}\n >\n <span aria-hidden=\"true\">‹</span>\n </button>\n </li>\n {resolved.items.map((item, index) =>\n item.type === \"ellipsis\" ? (\n <li key={`ellipsis-${index}`}>\n <span className=\"hjm-pagination__ellipsis\" aria-hidden=\"true\">…</span>\n </li>\n ) : (\n <li key={item.page}>\n <button\n type=\"button\"\n className=\"hjm-pagination__item\"\n ref={item.current ? currentButton : undefined}\n data-state={item.current ? \"current\" : \"idle\"}\n aria-current={item.current ? \"page\" : undefined}\n aria-label={item.accessibleName}\n onClick={() => {\n if (!item.current) onPageChange(item.page, \"page\");\n }}\n >\n {item.page}\n </button>\n </li>\n ),\n )}\n <li>\n <button\n type=\"button\"\n className=\"hjm-pagination__item hjm-pagination__next\"\n aria-label={resolved.labels.next}\n aria-disabled={!resolved.hasNext || undefined}\n onClick={() => { if (resolved.hasNext) onPageChange(resolved.currentPage + 1, \"next\"); }}\n >\n <span aria-hidden=\"true\">›</span>\n </button>\n </li>\n </ul>\n </nav>\n );\n },\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-items.d.ts","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACzI,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC5G,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,IAAI,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAC1I,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;IACf,kBAAkB,IAAI,IAAI,CAAC;IAC3B,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EAAC,KAAK,EAAC,WAAW,EAAC,YAAY,EAAC,cAAc,EAAC,MAAM,EAAC,gBAAgB,EAAC,UAAU,EAAC,MAAM,EAAC,kBAAkB,EAAC,eAAe,EAAC,YAAY,EAAC,GAAG,MAAM,EAAC,EAAC,qBAAqB,CAAC,CAAC,CAAC,+
|
|
1
|
+
{"version":3,"file":"saved-items.d.ts","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACzI,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC5G,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,IAAI,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAC1I,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;IACf,kBAAkB,IAAI,IAAI,CAAC;IAC3B,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EAAC,KAAK,EAAC,WAAW,EAAC,YAAY,EAAC,cAAc,EAAC,MAAM,EAAC,gBAAgB,EAAC,UAAU,EAAC,MAAM,EAAC,kBAAkB,EAAC,eAAe,EAAC,YAAY,EAAC,GAAG,MAAM,EAAC,EAAC,qBAAqB,CAAC,CAAC,CAAC,+BAqBjO"}
|
package/dist/saved-items.js
CHANGED
|
@@ -14,6 +14,11 @@ import { resolveSavedItems } from "@hjmds/design-contracts/screen-patterns";
|
|
|
14
14
|
export function SavedItemsScreen({ items, collections, collectionId, selectedItemId, labels, onOpenCollection, onOpenItem, onBack, onCreateCollection, renderThumbnail, renderDetail, ...screen }) {
|
|
15
15
|
const { home, collection, visible, selected } = resolveSavedItems(items, collections, collectionId, selectedItemId);
|
|
16
16
|
const groups = [{ id: null, title: labels.allItems, itemIds: items.map(item => item.id) }, ...collections];
|
|
17
|
-
|
|
17
|
+
// Empty is a full body state, not a short text row at the top of the grid.
|
|
18
|
+
const state = (screen.state?.kind ?? "ready") === "ready" && !home && !visible.length
|
|
19
|
+
? { kind: "empty", title: labels.empty } : screen.state ?? { kind: "ready" };
|
|
20
|
+
// Resolve each cover once; four thumbnails must not each rescan membership.
|
|
21
|
+
const covers = new Map(groups.map(group => { const ids = new Set(group.itemIds); return [group.id, items.filter(item => ids.has(item.id)).slice(0, 4)]; }));
|
|
22
|
+
return _jsx(ListDetailScreen, { ...screen, state: state, title: home ? screen.title : collection?.title ?? labels.allItems, leading: home ? screen.leading : _jsx(Button, { tone: "ghost", onClick: onBack, children: labels.back }), actions: home ? _jsx(Button, { tone: "ghost", onClick: onCreateCollection, children: labels.createCollection }) : screen.actions, back: { label: labels.back, onAction: onBack }, ...(selected ? { detail: { title: selected.title, content: renderDetail(selected) } } : {}), list: _jsx(Stack, { gap: "md", children: home ? _jsxs(_Fragment, { children: [_jsx(Text, { variant: "caption", tone: "muted", children: labels.privateNotice }), _jsx(Grid, { columns: { compact: 2 }, gap: { compact: "md" }, minColumnWidth: { compact: 80 }, children: groups.map(group => _jsxs("button", { type: "button", className: "hjm-saved-collection", onClick: () => onOpenCollection(group.id), "aria-label": group.title, children: [_jsx("span", { className: "hjm-saved-collection__cover", "aria-hidden": "true", children: Array.from({ length: 4 }, (_, index) => { const item = covers.get(group.id)?.[index]; return _jsx("span", { children: item ? renderThumbnail(item) : null }, index); }) }), _jsx(Text, { emphasis: "strong", children: group.title })] }, group.id === null ? "all" : `collection:${group.id}`)) })] }) : visible.length ? _jsx(Grid, { columns: { compact: 3 }, gap: { compact: "xxs" }, minColumnWidth: { compact: 44 }, children: visible.map(item => _jsx("button", { type: "button", className: "hjm-saved-post", "aria-label": item.title, onClick: () => onOpenItem(item.id), children: renderThumbnail(item) }, item.id)) }) : null }) });
|
|
18
23
|
}
|
|
19
24
|
//# sourceMappingURL=saved-items.js.map
|