@hjmds/react 1.4.0 → 1.6.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/evidence.d.ts +4 -3
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +62 -17
- package/dist/evidence.js.map +1 -1
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +1 -1
- package/dist/file-picker.js.map +1 -1
- package/dist/forms.d.ts +17 -1
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +5 -2
- package/dist/forms.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/overlays.d.ts +9 -1
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +2 -2
- package/dist/overlays.js.map +1 -1
- package/dist/provider.d.ts +10 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +12 -2
- package/dist/provider.js.map +1 -1
- package/dist/styles.css +47 -30
- package/dist/styles.layered.css +2597 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +47 -3
- package/dist/theme.js.map +1 -1
- package/package.json +8 -6
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 {\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 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 } 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\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\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 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 triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\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(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\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 (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\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: 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\"\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) requestClose(\"outside\");\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 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\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 SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\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 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 data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\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}\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 }>;\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 },\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 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 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 if (visible && !event.defaultPrevented) {\n changeOpen(false, { reason: \"trigger-activation\" });\n }\n },\n });\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n zIndex: 1100,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\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 style={popupPosition.style}\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 /** Backward-compatible item-local action; Menu onAction receives every activation. */\n onSelect?: () => void;\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}> & 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 } = 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 const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });\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 item.onSelect?.();\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 currentTime = Date.now();\n const previous = currentTime - typeaheadRef.current.time < 500\n ? typeaheadRef.current.value\n : \"\";\n const combined = `${previous}${key}`.toLocaleLowerCase();\n const search = new Set(combined).size === 1 ? key.toLocaleLowerCase() : combined;\n typeaheadRef.current = { value: combined, time: currentTime };\n for (let offset = 1; offset <= items.length; offset += 1) {\n const index = (focusIndex + offset + items.length) % items.length;\n const item = items[index];\n if (\n item &&\n !itemIsDisabled(item) &&\n menuTextValue(item).toLocaleLowerCase().startsWith(search)\n ) {\n focusAt(index);\n return;\n }\n }\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\" 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 {\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 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 } 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\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\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 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 triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\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(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\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 (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\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: 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\"\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) requestClose(\"outside\");\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 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\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\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 data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\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 }>;\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 },\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 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 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 if (visible && !event.defaultPrevented) {\n changeOpen(false, { reason: \"trigger-activation\" });\n }\n },\n });\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n zIndex: 1100,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\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 style={popupPosition.style}\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 /** Backward-compatible item-local action; Menu onAction receives every activation. */\n onSelect?: () => void;\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}> & 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 } = 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 const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });\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 item.onSelect?.();\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 currentTime = Date.now();\n const previous = currentTime - typeaheadRef.current.time < 500\n ? typeaheadRef.current.value\n : \"\";\n const combined = `${previous}${key}`.toLocaleLowerCase();\n const search = new Set(combined).size === 1 ? key.toLocaleLowerCase() : combined;\n typeaheadRef.current = { value: combined, time: currentTime };\n for (let offset = 1; offset <= items.length; offset += 1) {\n const index = (focusIndex + offset + items.length) % items.length;\n const item = items[index];\n if (\n item &&\n !itemIsDisabled(item) &&\n menuTextValue(item).toLocaleLowerCase().startsWith(search)\n ) {\n focusAt(index);\n return;\n }\n }\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\" 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/provider.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { type DesignSystemDensity, type DesignSystemDirection, type DesignSystemProviderValue, type DesignSystemTextScale } from "@hjmds/design-contracts/components/design-system-provider";
|
|
1
|
+
import { type DesignSystemDensity, type DesignSystemDirection, type DesignSystemProviderValue, type DesignSystemTextScale, type ResolveDesignSystemEnvironmentOptions } from "@hjmds/design-contracts/components/design-system-provider";
|
|
2
2
|
import type { ResolvedTheme, ThemePreference } from "@hjmds/design-contracts/colors";
|
|
3
3
|
import { type HTMLAttributes, type ReactNode } from "react";
|
|
4
|
+
/** Per-theme partial palette merged over the HJM defaults; see docs/brand-boundary.md. */
|
|
5
|
+
export type HjmBrandPalette = NonNullable<ResolveDesignSystemEnvironmentOptions["brandPalette"]>;
|
|
4
6
|
export type TooltipCoordinator = Readonly<{
|
|
5
7
|
activeId: string | null;
|
|
6
8
|
activate(id: string): void;
|
|
@@ -18,6 +20,12 @@ type HjmProviderEnvironmentProps = Readonly<{
|
|
|
18
20
|
density?: DesignSystemDensity;
|
|
19
21
|
/** Deterministic SSR/test override; otherwise prefers-color-scheme is observed. */
|
|
20
22
|
systemTheme?: ResolvedTheme;
|
|
23
|
+
/**
|
|
24
|
+
* The supported brand route (docs/brand-boundary.md). Before 1.5.0 the only way
|
|
25
|
+
* to brand was a hand-built `value`, which also stopped the provider from
|
|
26
|
+
* following the OS theme and reduced-motion settings.
|
|
27
|
+
*/
|
|
28
|
+
brandPalette?: HjmBrandPalette;
|
|
21
29
|
}>;
|
|
22
30
|
type HjmProviderValueProps = Readonly<{
|
|
23
31
|
/** Complete, validated environment and semantic product palette. */
|
|
@@ -29,6 +37,7 @@ type HjmProviderValueProps = Readonly<{
|
|
|
29
37
|
minimumVisualTarget?: never;
|
|
30
38
|
density?: never;
|
|
31
39
|
systemTheme?: never;
|
|
40
|
+
brandPalette?: never;
|
|
32
41
|
}>;
|
|
33
42
|
/**
|
|
34
43
|
* How the provider's own host element participates in layout and painting.
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,qCAAqC,EAC3C,MAAM,2DAA2D,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAQL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,qCAAqC,CAAC,cAAc,CAAC,CAAC,CAAC;AAUjG,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,IAAI,OAAO,CAAC;CAC5B,CAAC,CAAC;AAkBH,KAAK,2BAA2B,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,mFAAmF;IACnF,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,CAAC;IACpC,oEAAoE;IACpE,KAAK,EAAE,yBAAyB,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,mBAAmB,CAAC,EAAE,KAAK,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,GAAG,KAAK,CACnB,GACC,QAAQ,CAAC;IACP,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC,GAAG,CAAC,2BAA2B,GAAG,qBAAqB,CAAC,CAAC;AAE7D,eAAO,MAAM,WAAW,6GAiHvB,CAAC;AAEF,wBAAgB,WAAW,IAAI,yBAAyB,CAMvD;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,IAAI,yBAAyB,GAAG,IAAI,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EACrF,UAAU,EAAE,QAAQ,CAAC;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,GACnE,WAAW,GAAG,OAAO,CAMvB;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE"}
|
package/dist/provider.js
CHANGED
|
@@ -5,6 +5,13 @@ import { createContext, forwardRef, useCallback, useContext, useRef, useState, u
|
|
|
5
5
|
import { classNames } from "./internal.js";
|
|
6
6
|
import { createHjmThemeStyle } from "./theme.js";
|
|
7
7
|
const HjmThemeContext = createContext(null);
|
|
8
|
+
/**
|
|
9
|
+
* The nearest ancestor's brand palette. A nested provider (for example one that
|
|
10
|
+
* only changes density) keeps the product brand instead of falling back to the
|
|
11
|
+
* HJM defaults, because the resolved palette alone cannot be split back into
|
|
12
|
+
* defaults and overrides.
|
|
13
|
+
*/
|
|
14
|
+
const HjmBrandPaletteContext = createContext(undefined);
|
|
8
15
|
const TooltipCoordinatorContext = createContext(null);
|
|
9
16
|
function subscribeMedia(query, callback) {
|
|
10
17
|
const media = window.matchMedia(query);
|
|
@@ -14,8 +21,10 @@ function subscribeMedia(query, callback) {
|
|
|
14
21
|
function useMediaQuery(query, observe = true) {
|
|
15
22
|
return useSyncExternalStore((callback) => observe ? subscribeMedia(query, callback) : () => undefined, () => observe && window.matchMedia(query).matches, () => false);
|
|
16
23
|
}
|
|
17
|
-
export const HjmProvider = forwardRef(function HjmProvider({ children, theme, direction, textScale, reducedMotion, minimumVisualTarget, density, systemTheme, host = "surface", value: suppliedValue, className, style, ...rest }, ref) {
|
|
24
|
+
export const HjmProvider = forwardRef(function HjmProvider({ children, theme, direction, textScale, reducedMotion, minimumVisualTarget, density, systemTheme, brandPalette: suppliedBrandPalette, host = "surface", value: suppliedValue, className, style, ...rest }, ref) {
|
|
18
25
|
const parent = useContext(HjmThemeContext);
|
|
26
|
+
const inheritedBrandPalette = useContext(HjmBrandPaletteContext);
|
|
27
|
+
const brandPalette = suppliedBrandPalette ?? inheritedBrandPalette;
|
|
19
28
|
const observesSystem = suppliedValue === undefined;
|
|
20
29
|
const prefersDark = useMediaQuery("(prefers-color-scheme: dark)", observesSystem);
|
|
21
30
|
const prefersReducedMotion = useMediaQuery("(prefers-reduced-motion: reduce)", observesSystem);
|
|
@@ -30,6 +39,7 @@ export const HjmProvider = forwardRef(function HjmProvider({ children, theme, di
|
|
|
30
39
|
};
|
|
31
40
|
const value = suppliedValue ?? resolveDesignSystemProviderValue(input, {
|
|
32
41
|
systemTheme: resolvedSystemTheme,
|
|
42
|
+
...(brandPalette === undefined ? {} : { brandPalette }),
|
|
33
43
|
...(parent === null ? {} : { parent: parent.environment }),
|
|
34
44
|
...(reducedMotion === undefined && parent === null
|
|
35
45
|
? { systemReducedMotion: prefersReducedMotion }
|
|
@@ -75,7 +85,7 @@ export const HjmProvider = forwardRef(function HjmProvider({ children, theme, di
|
|
|
75
85
|
// module into granular entries like ./selection and blow their gzip budgets.
|
|
76
86
|
// See issue #20.
|
|
77
87
|
const largeText = isLargeTextScale(environment.textScale) ? "true" : undefined;
|
|
78
|
-
return (_jsx(HjmThemeContext.Provider, { value: value, children: _jsx(TooltipCoordinatorContext.Provider, { value: tooltipCoordinator, children: _jsx("div", { ...rest, ref: ref, className: classNames("hjm-root", className), "data-hjm-provider": "", "data-host": host, "data-motion": environment.reducedMotion ? "reduced" : "full", "data-theme": environment.theme, "data-text-scale": environment.textScale, "data-large-text": largeText, dir: environment.direction, style: { ...createHjmThemeStyle(value), ...style }, children: children }) }) }));
|
|
88
|
+
return (_jsx(HjmThemeContext.Provider, { value: value, children: _jsx(HjmBrandPaletteContext.Provider, { value: suppliedValue === undefined ? brandPalette : undefined, children: _jsx(TooltipCoordinatorContext.Provider, { value: tooltipCoordinator, children: _jsx("div", { ...rest, ref: ref, className: classNames("hjm-root", className), "data-hjm-provider": "", "data-host": host, "data-motion": environment.reducedMotion ? "reduced" : "full", "data-theme": environment.theme, "data-text-scale": environment.textScale, "data-large-text": largeText, dir: environment.direction, style: { ...createHjmThemeStyle(value), ...style }, children: children }) }) }) }));
|
|
79
89
|
});
|
|
80
90
|
export function useHjmTheme() {
|
|
81
91
|
const value = useContext(HjmThemeContext);
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n designSystemEnvironmentDefaults,\n isLargeTextScale,\n resolveDensityDefault,\n resolveDesignSystemProviderValue,\n validateDesignSystemProviderValue,\n type DesignSystemDensity,\n type DesignSystemDirection,\n type DesignSystemProviderValue,\n type DesignSystemTextScale,\n} from \"@hjmds/design-contracts/components/design-system-provider\";\nimport type { ResolvedTheme, ThemePreference } from \"@hjmds/design-contracts/colors\";\nimport { tooltipBehaviorDefaults } from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useRef,\n useState,\n useSyncExternalStore,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { classNames } from \"./internal.js\";\nimport { createHjmThemeStyle } from \"./theme.js\";\n\nconst HjmThemeContext = createContext<DesignSystemProviderValue | null>(null);\n\nexport type TooltipCoordinator = Readonly<{\n activeId: string | null;\n activate(id: string): void;\n deactivate(id: string): void;\n shouldSkipDelay(): boolean;\n}>;\n\nconst TooltipCoordinatorContext = createContext<TooltipCoordinator | null>(null);\n\nfunction subscribeMedia(query: string, callback: () => void): () => void {\n const media = window.matchMedia(query);\n media.addEventListener(\"change\", callback);\n return () => media.removeEventListener(\"change\", callback);\n}\n\nfunction useMediaQuery(query: string, observe = true): boolean {\n return useSyncExternalStore(\n (callback) => observe ? subscribeMedia(query, callback) : () => undefined,\n () => observe && window.matchMedia(query).matches,\n () => false,\n );\n}\n\ntype HjmProviderEnvironmentProps = Readonly<{\n value?: never;\n theme?: ThemePreference;\n direction?: DesignSystemDirection;\n textScale?: DesignSystemTextScale;\n reducedMotion?: boolean;\n minimumVisualTarget?: boolean;\n /** Default row/menu/table density below this provider; each component's prop wins. */\n density?: DesignSystemDensity;\n /** Deterministic SSR/test override; otherwise prefers-color-scheme is observed. */\n systemTheme?: ResolvedTheme;\n}>;\n\ntype HjmProviderValueProps = Readonly<{\n /** Complete, validated environment and semantic product palette. */\n value: DesignSystemProviderValue;\n theme?: never;\n direction?: never;\n textScale?: never;\n reducedMotion?: never;\n minimumVisualTarget?: never;\n density?: never;\n systemTheme?: never;\n}>;\n\n/**\n * How the provider's own host element participates in layout and painting.\n *\n * `surface` (default) paints the HJM background, text color and UI typography,\n * which is what a page whose root *is* the provider needs. A product whose\n * document root already paints its surface previously had to neutralise the\n * host with an inline `display: contents` style, re-entering product code into\n * the renderer boundary; `contents` is that intent as a supported axis — the\n * element still carries the CSS variables, `dir` and data attributes.\n */\nexport type HjmProviderHost = \"surface\" | \"contents\";\n\nexport type HjmProviderProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n \"children\" | \"dir\"\n> &\n Readonly<{\n children: ReactNode;\n host?: HjmProviderHost;\n }> & (HjmProviderEnvironmentProps | HjmProviderValueProps);\n\nexport const HjmProvider = forwardRef<HTMLDivElement, HjmProviderProps>(\n function HjmProvider(\n {\n children,\n theme,\n direction,\n textScale,\n reducedMotion,\n minimumVisualTarget,\n density,\n systemTheme,\n host = \"surface\",\n value: suppliedValue,\n className,\n style,\n ...rest\n },\n ref,\n ) {\n const parent = useContext(HjmThemeContext);\n const observesSystem = suppliedValue === undefined;\n const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\", observesSystem);\n const prefersReducedMotion = useMediaQuery(\n \"(prefers-reduced-motion: reduce)\",\n observesSystem,\n );\n const resolvedSystemTheme = systemTheme ?? (prefersDark ? \"dark\" : \"light\");\n const input = {\n ...(theme === undefined ? {} : { theme }),\n ...(direction === undefined ? {} : { direction }),\n ...(textScale === undefined ? {} : { textScale }),\n ...(reducedMotion === undefined ? {} : { reducedMotion }),\n ...(minimumVisualTarget === undefined ? {} : { minimumVisualTarget }),\n ...(density === undefined ? {} : { density }),\n };\n const value = suppliedValue ?? resolveDesignSystemProviderValue(input, {\n systemTheme: resolvedSystemTheme,\n ...(parent === null ? {} : { parent: parent.environment }),\n ...(reducedMotion === undefined && parent === null\n ? { systemReducedMotion: prefersReducedMotion }\n : {}),\n });\n validateDesignSystemProviderValue(value);\n const environment = value.environment;\n const [activeTooltipId, setActiveTooltipId] = useState<string | null>(null);\n const activeTooltipIdRef = useRef<string | null>(null);\n const lastTooltipTransitionAtRef = useRef(Number.NEGATIVE_INFINITY);\n activeTooltipIdRef.current = activeTooltipId;\n const activateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current === id) return current;\n if (current !== null) lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = id;\n return id;\n });\n }, []);\n const deactivateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current !== id) return current;\n lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = null;\n return null;\n });\n }, []);\n const shouldSkipTooltipDelay = useCallback(\n () =>\n activeTooltipIdRef.current !== null ||\n Date.now() - lastTooltipTransitionAtRef.current <\n tooltipBehaviorDefaults.skipDelayMs,\n [],\n );\n const tooltipCoordinator: TooltipCoordinator = {\n activeId: activeTooltipId,\n activate: activateTooltip,\n deactivate: deactivateTooltip,\n shouldSkipDelay: shouldSkipTooltipDelay,\n };\n\n // `data-text-scale` is a number, so a stylesheet cannot ask whether it crossed\n // `largeTextThreshold`. The provider resolves that comparison once and publishes\n // the answer; letting each renderer read the environment instead would pull this\n // module into granular entries like ./selection and blow their gzip budgets.\n // See issue #20.\n const largeText = isLargeTextScale(environment.textScale) ? \"true\" : undefined;\n\n return (\n <HjmThemeContext.Provider value={value}>\n <TooltipCoordinatorContext.Provider value={tooltipCoordinator}>\n <div\n {...rest}\n ref={ref}\n className={classNames(\"hjm-root\", className)}\n data-hjm-provider=\"\"\n data-host={host}\n data-motion={environment.reducedMotion ? \"reduced\" : \"full\"}\n data-theme={environment.theme}\n data-text-scale={environment.textScale}\n data-large-text={largeText}\n dir={environment.direction}\n style={{ ...createHjmThemeStyle(value), ...style }}\n >\n {children}\n </div>\n </TooltipCoordinatorContext.Provider>\n </HjmThemeContext.Provider>\n );\n },\n);\n\nexport function useHjmTheme(): DesignSystemProviderValue {\n const value = useContext(HjmThemeContext);\n if (value === null) {\n throw new Error(\"useHjmTheme must be used inside HjmProvider\");\n }\n return value;\n}\n\n/** Renderer components use the browser default direction when no provider is present. */\nexport function useOptionalHjmTheme(): DesignSystemProviderValue | null {\n return useContext(HjmThemeContext);\n}\n\n/**\n * Resolves the provider's density onto one component's own density vocabulary.\n * Outside a provider the component's recipe default stands — a global axis must\n * not make an unwrapped renderer behave differently from a wrapped one at rest.\n */\nexport function useHjmDensityDefault<Comfortable extends string, Compact extends string>(\n vocabulary: Readonly<{ comfortable: Comfortable; compact: Compact }>,\n): Comfortable | Compact {\n const theme = useContext(HjmThemeContext);\n return resolveDensityDefault(\n theme?.environment.density ?? designSystemEnvironmentDefaults.density,\n vocabulary,\n );\n}\n\n/** Internal provider-scoped coordination used by Tooltip renderers. */\nexport function useTooltipCoordinator(): TooltipCoordinator | null {\n return useContext(TooltipCoordinatorContext);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,qBAAqB,EACrB,gCAAgC,EAChC,iCAAiC,GAMlC,MAAM,2DAA2D,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,GAGrB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,eAAe,GAAG,aAAa,CAAmC,IAAI,CAAC,CAAC;AAK9E;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,aAAa,CAA8B,SAAS,CAAC,CAAC;AASrF,MAAM,yBAAyB,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAEjF,SAAS,cAAc,CAAC,KAAa,EAAE,QAAoB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,OAAO,GAAG,IAAI;IAClD,OAAO,oBAAoB,CACzB,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,EACzE,GAAG,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,EACjD,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;AACJ,CAAC;AAuDD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,SAAS,WAAW,CAClB,EACE,QAAQ,EACR,KAAK,EACL,SAAS,EACT,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,YAAY,EAAE,oBAAoB,EAClC,IAAI,GAAG,SAAS,EAChB,KAAK,EAAE,aAAa,EACpB,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC3C,MAAM,qBAAqB,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,oBAAoB,IAAI,qBAAqB,CAAC;IACnE,MAAM,cAAc,GAAG,aAAa,KAAK,SAAS,CAAC;IACnD,MAAM,WAAW,GAAG,aAAa,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;IAClF,MAAM,oBAAoB,GAAG,aAAa,CACxC,kCAAkC,EAClC,cAAc,CACf,CAAC;IACF,MAAM,mBAAmB,GAAG,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;QACzD,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC;QACrE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC;IACF,MAAM,KAAK,GAAG,aAAa,IAAI,gCAAgC,CAAC,KAAK,EAAE;QACrE,WAAW,EAAE,mBAAmB;QAChC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1D,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAChD,CAAC,CAAC,EAAE,mBAAmB,EAAE,oBAAoB,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,iCAAiC,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACvD,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpE,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;IAC7C,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QACjD,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,OAAO,KAAK,EAAE;gBAAE,OAAO,OAAO,CAAC;YACnC,IAAI,OAAO,KAAK,IAAI;gBAAE,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtE,kBAAkB,CAAC,OAAO,GAAG,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QACnD,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,OAAO,KAAK,EAAE;gBAAE,OAAO,OAAO,CAAC;YACnC,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChD,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,sBAAsB,GAAG,WAAW,CACxC,GAAG,EAAE,CACH,kBAAkB,CAAC,OAAO,KAAK,IAAI;QACnC,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC,OAAO;YAC7C,uBAAuB,CAAC,WAAW,EACvC,EAAE,CACH,CAAC;IACF,MAAM,kBAAkB,GAAuB;QAC7C,QAAQ,EAAE,eAAe;QACzB,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,iBAAiB;QAC7B,eAAe,EAAE,sBAAsB;KACxC,CAAC;IAEF,+EAA+E;IAC/E,iFAAiF;IACjF,iFAAiF;IACjF,6EAA6E;IAC7E,iBAAiB;IACjB,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACpC,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,YAC5F,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,kBAAkB,YAC3D,iBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,uBAC1B,EAAE,eACT,IAAI,iBACF,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBAC/C,WAAW,CAAC,KAAK,qBACZ,WAAW,CAAC,SAAS,qBACrB,SAAS,EAC1B,GAAG,EAAE,WAAW,CAAC,SAAS,EAC1B,KAAK,EAAE,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,YAEjD,QAAQ,GACL,GAC6B,GACL,GACT,CAC5B,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAoE;IAEpE,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC1C,OAAO,qBAAqB,CAC1B,KAAK,EAAE,WAAW,CAAC,OAAO,IAAI,+BAA+B,CAAC,OAAO,EACrE,UAAU,CACX,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import {\n designSystemEnvironmentDefaults,\n isLargeTextScale,\n resolveDensityDefault,\n resolveDesignSystemProviderValue,\n validateDesignSystemProviderValue,\n type DesignSystemDensity,\n type DesignSystemDirection,\n type DesignSystemProviderValue,\n type DesignSystemTextScale,\n type ResolveDesignSystemEnvironmentOptions,\n} from \"@hjmds/design-contracts/components/design-system-provider\";\nimport type { ResolvedTheme, ThemePreference } from \"@hjmds/design-contracts/colors\";\nimport { tooltipBehaviorDefaults } from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useRef,\n useState,\n useSyncExternalStore,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { classNames } from \"./internal.js\";\nimport { createHjmThemeStyle } from \"./theme.js\";\n\nconst HjmThemeContext = createContext<DesignSystemProviderValue | null>(null);\n\n/** Per-theme partial palette merged over the HJM defaults; see docs/brand-boundary.md. */\nexport type HjmBrandPalette = NonNullable<ResolveDesignSystemEnvironmentOptions[\"brandPalette\"]>;\n\n/**\n * The nearest ancestor's brand palette. A nested provider (for example one that\n * only changes density) keeps the product brand instead of falling back to the\n * HJM defaults, because the resolved palette alone cannot be split back into\n * defaults and overrides.\n */\nconst HjmBrandPaletteContext = createContext<HjmBrandPalette | undefined>(undefined);\n\nexport type TooltipCoordinator = Readonly<{\n activeId: string | null;\n activate(id: string): void;\n deactivate(id: string): void;\n shouldSkipDelay(): boolean;\n}>;\n\nconst TooltipCoordinatorContext = createContext<TooltipCoordinator | null>(null);\n\nfunction subscribeMedia(query: string, callback: () => void): () => void {\n const media = window.matchMedia(query);\n media.addEventListener(\"change\", callback);\n return () => media.removeEventListener(\"change\", callback);\n}\n\nfunction useMediaQuery(query: string, observe = true): boolean {\n return useSyncExternalStore(\n (callback) => observe ? subscribeMedia(query, callback) : () => undefined,\n () => observe && window.matchMedia(query).matches,\n () => false,\n );\n}\n\ntype HjmProviderEnvironmentProps = Readonly<{\n value?: never;\n theme?: ThemePreference;\n direction?: DesignSystemDirection;\n textScale?: DesignSystemTextScale;\n reducedMotion?: boolean;\n minimumVisualTarget?: boolean;\n /** Default row/menu/table density below this provider; each component's prop wins. */\n density?: DesignSystemDensity;\n /** Deterministic SSR/test override; otherwise prefers-color-scheme is observed. */\n systemTheme?: ResolvedTheme;\n /**\n * The supported brand route (docs/brand-boundary.md). Before 1.5.0 the only way\n * to brand was a hand-built `value`, which also stopped the provider from\n * following the OS theme and reduced-motion settings.\n */\n brandPalette?: HjmBrandPalette;\n}>;\n\ntype HjmProviderValueProps = Readonly<{\n /** Complete, validated environment and semantic product palette. */\n value: DesignSystemProviderValue;\n theme?: never;\n direction?: never;\n textScale?: never;\n reducedMotion?: never;\n minimumVisualTarget?: never;\n density?: never;\n systemTheme?: never;\n brandPalette?: never;\n}>;\n\n/**\n * How the provider's own host element participates in layout and painting.\n *\n * `surface` (default) paints the HJM background, text color and UI typography,\n * which is what a page whose root *is* the provider needs. A product whose\n * document root already paints its surface previously had to neutralise the\n * host with an inline `display: contents` style, re-entering product code into\n * the renderer boundary; `contents` is that intent as a supported axis — the\n * element still carries the CSS variables, `dir` and data attributes.\n */\nexport type HjmProviderHost = \"surface\" | \"contents\";\n\nexport type HjmProviderProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n \"children\" | \"dir\"\n> &\n Readonly<{\n children: ReactNode;\n host?: HjmProviderHost;\n }> & (HjmProviderEnvironmentProps | HjmProviderValueProps);\n\nexport const HjmProvider = forwardRef<HTMLDivElement, HjmProviderProps>(\n function HjmProvider(\n {\n children,\n theme,\n direction,\n textScale,\n reducedMotion,\n minimumVisualTarget,\n density,\n systemTheme,\n brandPalette: suppliedBrandPalette,\n host = \"surface\",\n value: suppliedValue,\n className,\n style,\n ...rest\n },\n ref,\n ) {\n const parent = useContext(HjmThemeContext);\n const inheritedBrandPalette = useContext(HjmBrandPaletteContext);\n const brandPalette = suppliedBrandPalette ?? inheritedBrandPalette;\n const observesSystem = suppliedValue === undefined;\n const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\", observesSystem);\n const prefersReducedMotion = useMediaQuery(\n \"(prefers-reduced-motion: reduce)\",\n observesSystem,\n );\n const resolvedSystemTheme = systemTheme ?? (prefersDark ? \"dark\" : \"light\");\n const input = {\n ...(theme === undefined ? {} : { theme }),\n ...(direction === undefined ? {} : { direction }),\n ...(textScale === undefined ? {} : { textScale }),\n ...(reducedMotion === undefined ? {} : { reducedMotion }),\n ...(minimumVisualTarget === undefined ? {} : { minimumVisualTarget }),\n ...(density === undefined ? {} : { density }),\n };\n const value = suppliedValue ?? resolveDesignSystemProviderValue(input, {\n systemTheme: resolvedSystemTheme,\n ...(brandPalette === undefined ? {} : { brandPalette }),\n ...(parent === null ? {} : { parent: parent.environment }),\n ...(reducedMotion === undefined && parent === null\n ? { systemReducedMotion: prefersReducedMotion }\n : {}),\n });\n validateDesignSystemProviderValue(value);\n const environment = value.environment;\n const [activeTooltipId, setActiveTooltipId] = useState<string | null>(null);\n const activeTooltipIdRef = useRef<string | null>(null);\n const lastTooltipTransitionAtRef = useRef(Number.NEGATIVE_INFINITY);\n activeTooltipIdRef.current = activeTooltipId;\n const activateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current === id) return current;\n if (current !== null) lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = id;\n return id;\n });\n }, []);\n const deactivateTooltip = useCallback((id: string) => {\n setActiveTooltipId((current) => {\n if (current !== id) return current;\n lastTooltipTransitionAtRef.current = Date.now();\n activeTooltipIdRef.current = null;\n return null;\n });\n }, []);\n const shouldSkipTooltipDelay = useCallback(\n () =>\n activeTooltipIdRef.current !== null ||\n Date.now() - lastTooltipTransitionAtRef.current <\n tooltipBehaviorDefaults.skipDelayMs,\n [],\n );\n const tooltipCoordinator: TooltipCoordinator = {\n activeId: activeTooltipId,\n activate: activateTooltip,\n deactivate: deactivateTooltip,\n shouldSkipDelay: shouldSkipTooltipDelay,\n };\n\n // `data-text-scale` is a number, so a stylesheet cannot ask whether it crossed\n // `largeTextThreshold`. The provider resolves that comparison once and publishes\n // the answer; letting each renderer read the environment instead would pull this\n // module into granular entries like ./selection and blow their gzip budgets.\n // See issue #20.\n const largeText = isLargeTextScale(environment.textScale) ? \"true\" : undefined;\n\n return (\n <HjmThemeContext.Provider value={value}>\n <HjmBrandPaletteContext.Provider value={suppliedValue === undefined ? brandPalette : undefined}>\n <TooltipCoordinatorContext.Provider value={tooltipCoordinator}>\n <div\n {...rest}\n ref={ref}\n className={classNames(\"hjm-root\", className)}\n data-hjm-provider=\"\"\n data-host={host}\n data-motion={environment.reducedMotion ? \"reduced\" : \"full\"}\n data-theme={environment.theme}\n data-text-scale={environment.textScale}\n data-large-text={largeText}\n dir={environment.direction}\n style={{ ...createHjmThemeStyle(value), ...style }}\n >\n {children}\n </div>\n </TooltipCoordinatorContext.Provider>\n </HjmBrandPaletteContext.Provider>\n </HjmThemeContext.Provider>\n );\n },\n);\n\nexport function useHjmTheme(): DesignSystemProviderValue {\n const value = useContext(HjmThemeContext);\n if (value === null) {\n throw new Error(\"useHjmTheme must be used inside HjmProvider\");\n }\n return value;\n}\n\n/** Renderer components use the browser default direction when no provider is present. */\nexport function useOptionalHjmTheme(): DesignSystemProviderValue | null {\n return useContext(HjmThemeContext);\n}\n\n/**\n * Resolves the provider's density onto one component's own density vocabulary.\n * Outside a provider the component's recipe default stands — a global axis must\n * not make an unwrapped renderer behave differently from a wrapped one at rest.\n */\nexport function useHjmDensityDefault<Comfortable extends string, Compact extends string>(\n vocabulary: Readonly<{ comfortable: Comfortable; compact: Compact }>,\n): Comfortable | Compact {\n const theme = useContext(HjmThemeContext);\n return resolveDensityDefault(\n theme?.environment.density ?? designSystemEnvironmentDefaults.density,\n vocabulary,\n );\n}\n\n/** Internal provider-scoped coordination used by Tooltip renderers. */\nexport function useTooltipCoordinator(): TooltipCoordinator | null {\n return useContext(TooltipCoordinatorContext);\n}\n"]}
|