@logicplanes/kaeso-ui 0.3.6 → 0.3.7

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.
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component guides
2
2
 
3
- Version 0.3.6. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
3
+ Version 0.3.7. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
4
4
 
5
5
  ## AlertDialog
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@logicplanes/kaeso-ui",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "components": [
5
5
  {
6
6
  "entry": "app-frame",
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component registry
2
2
 
3
- Version 0.3.6. Generated from the component types, their descriptions and variants; do not edit.
3
+ Version 0.3.7. Generated from the component types, their descriptions and variants; do not edit.
4
4
 
5
5
  ## app-frame
6
6
 
package/ai/icons.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Icon vocabulary
2
2
 
3
- Version 0.3.6. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
3
+ Version 0.3.7. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
4
4
 
5
5
  ## Kaeso objects
6
6
 
package/ai/tokens.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui tokens
2
2
 
3
- Version 0.3.6. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
3
+ Version 0.3.7. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
4
4
 
5
5
  ## Neutrals
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { t } from "../chunks/dialog-truWH0qe.js";
3
+ import { t } from "../chunks/dialog-B2RzuBu6.js";
4
4
  import { jsx as n } from "react/jsx-runtime";
5
5
  //#region src/blocks/delete-resource/delete-resource.tsx
6
6
  var r = { confirm: {
@@ -6,7 +6,7 @@ import { i } from "./context-BELWW79w.js";
6
6
  import { i as a, n as o } from "./button-CAPyW-v8.js";
7
7
  import { t as s } from "./icon-button-D4O4puwH.js";
8
8
  import { t as c } from "./input-B0wtkcNh.js";
9
- import { a as l, i as u, t as d } from "./resize-motion-BWGMchyP.js";
9
+ import { a as l, i as u, t as d } from "./resize-motion-DS3rIIqy.js";
10
10
  import { t as f } from "./over-sheet-B8vzr_zU.js";
11
11
  import { cloneElement as p, createContext as m, forwardRef as h, use as g, useCallback as _, useEffect as v, useLayoutEffect as y, useRef as b, useState as x } from "react";
12
12
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
@@ -350,4 +350,4 @@ process.env.NODE_ENV !== "production" && ($.displayName = "LayerDialog");
350
350
  //#endregion
351
351
  export { I as a, re as c, te as i, $ as l, Y as n, F as o, ne as r, ie as s, Z as t, P as u };
352
352
 
353
- //# sourceMappingURL=dialog-truWH0qe.js.map
353
+ //# sourceMappingURL=dialog-B2RzuBu6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-truWH0qe.js","names":["BaseDialog","__icon_Cancel01Icon","_Fragment","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","Fragment$1","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","useScrolledUnder","ref","useRef","under","setUnder","useState","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","boxRef","t","useUiText","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","anchor","size","className","onSubmit","headerStart","title","description","children","focusFirstControl","open","Root","props","focus","container","overSheet","use","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (el && !el.closest(\"[data-resizing]\")) setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n if (e.key !== \"Enter\" || e.altKey || e.nativeEvent.isComposing || e.keyCode === 229) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n footer,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n}: DialogProps) {\n const { ref, under, check } = useScrolledUnder<HTMLDivElement>();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={boxRef}\n data-dialog-frame=\"\"\n className={cn(\n \"flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n {headerStart !== undefined ? (\n <>\n <div className=\"flex h-32 items-center justify-between px-24 pt-16 box-content\">\n <span className=\"flex items-center\">{headerStart}</span>\n {close}\n </div>\n <div className=\"flex flex-col gap-4 px-24 pt-8 pb-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n </>\n ) : (\n <div className=\"flex items-start gap-12 px-24 pt-20 pb-4\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4 pt-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n {close && <span className=\"flex\">{close}</span>}\n </div>\n )}\n {children && (\n <div ref={ref} data-dialog-body=\"\" className={cn(\"min-h-0 flex-1 overflow-y-auto px-24 pt-16 scrollbar-quiet\", footer ? \"pb-8\" : \"pb-24\")}>\n <GutterContent>{children}</GutterContent>\n </div>\n )}\n {footer && (\n <div\n data-dialog-footer=\"\"\n className={cn(\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-20 transition-control\", under && \"hairline-t\")}\n >\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"bg-danger-tint text-danger-text\" },\n warning: { classes: \"bg-warning-tint text-warning-text\" },\n info: { classes: \"bg-info-tint text-info-text\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n}: AlertDialogProps & { close: () => void; busy: boolean; setBusy: (busy: boolean) => void }) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div ref={boxRef} className={cn(\"flex w-440 flex-col gap-20 p-24\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}>\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => e.key === \"Enter\" && confirm()}\n />\n )}\n <div className=\"flex flex-wrap justify-end gap-8\">\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function AlertDialog(props: AlertDialogProps) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const focus = useRestoreFocus(isOpen);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)}>\n <BaseAlertDialog.Popup initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = KAESO_DIALOG_DEFAULT_VARIANTS;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"footer\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function LayerDialog({ layers, layer, onLayerChange, ...props }: LayerDialogProps) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <Dialog\n {...props}\n title={current.title}\n description={current.description}\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog-B2RzuBu6.js","names":["BaseDialog","__icon_Cancel01Icon","_Fragment","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","Fragment$1","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","useScrolledUnder","ref","useRef","under","setUnder","useState","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","boxRef","t","useUiText","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","anchor","size","className","onSubmit","headerStart","title","description","children","focusFirstControl","open","Root","props","focus","container","overSheet","use","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (el && !el.closest(\"[data-resizing]\")) setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n if (e.key !== \"Enter\" || e.altKey || e.nativeEvent.isComposing || e.keyCode === 229) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n footer,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n}: DialogProps) {\n const { ref, under, check } = useScrolledUnder<HTMLDivElement>();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={boxRef}\n data-dialog-frame=\"\"\n className={cn(\n \"flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n {headerStart !== undefined ? (\n <>\n <div className=\"flex h-32 items-center justify-between px-24 pt-16 box-content\">\n <span className=\"flex items-center\">{headerStart}</span>\n {close}\n </div>\n <div className=\"flex flex-col gap-4 px-24 pt-8 pb-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n </>\n ) : (\n <div className=\"flex items-start gap-12 px-24 pt-20 pb-4\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4 pt-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n {close && <span className=\"flex\">{close}</span>}\n </div>\n )}\n {children && (\n <div ref={ref} data-dialog-body=\"\" className={cn(\"min-h-0 flex-1 overflow-y-auto px-24 pt-16 scrollbar-quiet\", footer ? \"pb-8\" : \"pb-24\")}>\n <GutterContent>{children}</GutterContent>\n </div>\n )}\n {footer && (\n <div\n data-dialog-footer=\"\"\n className={cn(\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-20 transition-control\", under && \"hairline-t\")}\n >\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"bg-danger-tint text-danger-text\" },\n warning: { classes: \"bg-warning-tint text-warning-text\" },\n info: { classes: \"bg-info-tint text-info-text\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n}: AlertDialogProps & { close: () => void; busy: boolean; setBusy: (busy: boolean) => void }) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div ref={boxRef} className={cn(\"flex w-440 flex-col gap-20 p-24\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}>\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => e.key === \"Enter\" && confirm()}\n />\n )}\n <div className=\"flex flex-wrap justify-end gap-8\">\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function AlertDialog(props: AlertDialogProps) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const focus = useRestoreFocus(isOpen);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)}>\n <BaseAlertDialog.Popup initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = KAESO_DIALOG_DEFAULT_VARIANTS;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"footer\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function LayerDialog({ layers, layer, onLayerChange, ...props }: LayerDialogProps) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <Dialog\n {...props}\n title={current.title}\n description={current.description}\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
@@ -14,7 +14,7 @@ function l(e, t = () => !0) {
14
14
  let n = a(null), r = a(!1);
15
15
  return e && !r.current && (n.current = s()), e !== void 0 && (r.current = e), {
16
16
  initialFocus: () => t(),
17
- finalFocus: () => e !== void 0 && n.current?.isConnected ? n.current : !c()
17
+ finalFocus: () => c() ? !1 : e !== void 0 && n.current?.isConnected ? n.current : !0
18
18
  };
19
19
  }
20
20
  //#endregion
@@ -102,4 +102,4 @@ function S(e, t) {
102
102
  //#endregion
103
103
  export { l as a, d as i, u as n, f as r, S as t };
104
104
 
105
- //# sourceMappingURL=resize-motion-BWGMchyP.js.map
105
+ //# sourceMappingURL=resize-motion-DS3rIIqy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-motion-DS3rIIqy.js","names":["focused","a","focusedElsewhere","layer","useRestoreFocus","opener","useRef","wasOpen","open","first","DialogScopeContext","useScopedDialog","scope","use","id","useId","useEffect","settled","useOpenSession","seen","setSeen","useState","px","v","ms","sizeOf","s","box","near","b","viewport","reducedMotion","anchoredList","p","isBody","el","resizeSources","kids","only","c","useResizeMotion","onSettle","sync","useLayoutEffect","size","view","motion","origin","watched","stop","body","play","run","from","to","at","change","running","style","duration","easing","resized","observer","now","gone"],"sources":["../../src/utils/restore-focus.ts","../../src/utils/dialog-scope.ts","../../src/utils/resize-motion.ts"],"sourcesContent":["import { useRef } from \"react\";\n\nfunction focused(): HTMLElement | null {\n if (typeof document === \"undefined\") return null;\n const a = document.activeElement;\n return a instanceof HTMLElement && a !== document.body ? a : null;\n}\n\nfunction focusedElsewhere(): boolean {\n const layer = focused()?.closest(\"[role=dialog], [role=alertdialog]\");\n return layer === null || !!layer?.hasAttribute(\"data-open\");\n}\n\nexport function useRestoreFocus(open: boolean | undefined, first: () => HTMLElement | boolean = () => true) {\n const opener = useRef<HTMLElement | null>(null);\n const wasOpen = useRef(false);\n if (open && !wasOpen.current) opener.current = focused();\n if (open !== undefined) wasOpen.current = open;\n return {\n initialFocus: () => first(),\n finalFocus: () => {\n // Base UI focuses a returned element even after the focus moved on; its moved-focus check covers only `true` (floating-ui/floating-ui#2607).\n if (focusedElsewhere()) return false;\n return open !== undefined && opener.current?.isConnected ? opener.current : true;\n },\n };\n}\n","import { createContext, use, useEffect, useId, useState } from \"react\";\n\nexport interface DialogScopeTracker {\n showing: (id: string) => void;\n hidden: (id: string) => void;\n}\n\nexport const DialogScopeContext = /* @__PURE__ */ createContext<DialogScopeTracker | null>(null);\n\nexport function useScopedDialog(open: boolean | undefined): (open: boolean) => void {\n const scope = use(DialogScopeContext);\n const id = useId();\n useEffect(() => {\n if (open) scope?.showing(id);\n }, [scope, id, open]);\n useEffect(() => () => scope?.hidden(id), [scope, id]);\n return (settled: boolean) => {\n if (!settled) scope?.hidden(id);\n };\n}\n\nexport function useOpenSession(open: boolean): number {\n const [seen, setSeen] = useState({ open, session: 0 });\n if (seen.open !== open) setSeen({ open, session: open ? seen.session + 1 : seen.session });\n return seen.session;\n}\n","import { useLayoutEffect, useRef } from \"react\";\n\ninterface Size {\n w: number;\n h: number;\n}\n\nconst px = (v: string) => parseFloat(v) || 0;\nconst ms = (v: string) => px(v) * (/\\ds\\s*$/.test(v) ? 1000 : 1);\nconst sizeOf = (box: HTMLElement): Size => {\n const s = getComputedStyle(box);\n return { w: px(s.width), h: px(s.height) };\n};\nconst near = (a: Size, b: Size) => Math.abs(a.h - b.h) < 0.5 && Math.abs(a.w - b.w) < 0.5;\nconst viewport = () => `${window.innerWidth}x${window.innerHeight}`;\nconst reducedMotion = () => !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\nconst anchoredList = (box: HTMLElement) =>\n [...document.querySelectorAll(\"[data-side][data-align]\")].some(\n (p) => !box.contains(p) && p.getClientRects().length > 0 && p.querySelector(\"[role=listbox], [role=menu]\"),\n );\nconst isBody = (el: Element) => el.hasAttribute(\"data-dialog-body\");\n\nexport function resizeSources(box: Element): Element[] {\n const kids = [...box.children];\n const only = kids.length === 1 ? kids[0] : undefined;\n if (only && !isBody(only)) return resizeSources(only);\n return kids.flatMap((c) => (isBody(c) ? [...c.children] : [c]));\n}\n\nexport function useResizeMotion(box: HTMLElement | null, onSettle?: (() => void) | undefined) {\n const settled = useRef(onSettle);\n const sync = useRef<(() => void) | null>(null);\n useLayoutEffect(() => {\n settled.current = onSettle;\n sync.current?.();\n });\n useLayoutEffect(() => {\n if (!box || typeof ResizeObserver === \"undefined\") return;\n let size: Size | null = null;\n let view = viewport();\n let motion: Animation | null = null;\n let origin: Size | null = null;\n const watched = new Set<Element>();\n const stop = () => {\n motion?.cancel();\n motion = null;\n box.removeAttribute(\"data-resizing\");\n for (const body of box.querySelectorAll(\"[data-resize-clip]\")) body.removeAttribute(\"data-resize-clip\");\n };\n const play = (from: Size, to: Size, duration: number, easing: string, at: number) => {\n for (const body of box.querySelectorAll<HTMLElement>(\"[data-dialog-body]\"))\n if (body.scrollHeight <= body.clientHeight) body.setAttribute(\"data-resize-clip\", \"\");\n box.setAttribute(\"data-resizing\", \"\");\n const run = box.animate(\n [\n { width: `${from.w}px`, height: `${from.h}px` },\n { width: `${to.w}px`, height: `${to.h}px` },\n ],\n { duration, easing },\n );\n run.currentTime = at;\n motion = run;\n origin = from;\n run.onfinish = () => {\n if (motion !== run) return;\n stop();\n settled.current?.();\n };\n };\n const change = () => {\n const running = motion;\n const at = Number(running?.currentTime ?? 0);\n const from = running ? sizeOf(box) : size;\n stop();\n const to = sizeOf(box);\n const style = getComputedStyle(box);\n const duration = ms(style.getPropertyValue(\"--k-duration-dialog\"));\n const easing = style.getPropertyValue(\"--k-ease-standard\").trim() || \"ease-out\";\n if (running && origin && size && near(to, size)) return play(origin, to, duration, easing, at);\n size = to;\n const resized = view !== (view = viewport());\n if (\n !from ||\n near(from, to) ||\n resized ||\n !duration ||\n reducedMotion() ||\n anchoredList(box) ||\n typeof box.animate !== \"function\" ||\n box.matches(\"[data-ending-style], [data-closed]\")\n ) {\n settled.current?.();\n return;\n }\n play(from, to, duration, easing, 0);\n };\n const observer = new ResizeObserver(change);\n sync.current = () => {\n const now = new Set(resizeSources(box));\n let gone = false;\n for (const el of watched) {\n if (now.has(el)) continue;\n observer.unobserve(el);\n watched.delete(el);\n gone = true;\n }\n for (const el of now) {\n if (watched.has(el)) continue;\n observer.observe(el);\n watched.add(el);\n }\n if (gone || (!motion && size && !near(sizeOf(box), size))) change();\n };\n sync.current();\n return () => {\n sync.current = null;\n observer.disconnect();\n stop();\n };\n }, [box]);\n}\n"],"mappings":";;;AAEA,SAASA,IAA8B;CACrC,IAAI,OAAO,WAAa,KAAa,OAAO;CAC5C,IAAMC,IAAI,SAAS;CACnB,OAAOA,aAAa,eAAeA,MAAM,SAAS,OAAOA,IAAI;AAC/D;AAEA,SAASC,IAA4B;CACnC,IAAMC,IAAQH,EAAQ,CAAC,EAAE,QAAQ,mCAAmC;CACpE,OAAOG,MAAU,QAAQ,CAAC,CAACA,GAAO,aAAa,WAAW;AAC5D;AAEA,SAAgBC,EAAgB,GAA2B,UAA2C,IAAM;CAC1G,IAAMC,IAASC,EAA2B,IAAI,GACxCC,IAAUD,EAAO,EAAK;CAG5B,OAFIE,KAAQ,CAACD,EAAQ,YAAS,EAAO,UAAUP,EAAQ,IACnDQ,MAAS,KAAA,MAAW,EAAQ,UAAUA,IACnC;EACL,oBAAoBC,EAAM;EAC1B,kBAEMP,EAAiB,IAAU,KACxBM,MAAS,KAAA,KAAaH,EAAO,SAAS,cAAcA,EAAO,UAAU;CAEhF;AACF;;;ACnBA,IAAaK,IAAqC,kBAAyC,IAAI;AAE/F,SAAgBC,EAAgB,GAAoD;CAClF,IAAMC,IAAQC,EAAIH,CAAkB,GAC9BI,IAAKC,EAAM;CAKjB,OAJAC,QAAgB;EACd,AAAIR,KAAMI,GAAO,QAAQE,CAAE;CAC7B,GAAG;EAACF;EAAOE;EAAIN;CAAI,CAAC,GACpBQ,cAAsBJ,GAAO,OAAOE,CAAE,GAAG,CAACF,GAAOE,CAAE,CAAC,IAC5C,MAAqB;EAC3B,AAAKG,KAASL,GAAO,OAAOE,CAAE;CAChC;AACF;AAEA,SAAgBI,EAAe,GAAuB;CACpD,IAAM,CAACC,GAAMC,KAAWC,EAAS;EAAE;EAAM,SAAS;CAAE,CAAC;CAErD,OADIF,EAAK,SAASX,KAAMY,EAAQ;EAAE;EAAM,SAASZ,IAAOW,EAAK,UAAU,IAAIA,EAAK;CAAQ,CAAC,GAClFA,EAAK;AACd;;;AClBA,IAAMG,KAAM,MAAc,WAAWC,CAAC,KAAK,GACrCC,KAAM,MAAcF,EAAGC,CAAC,KAAK,UAAU,KAAKA,CAAC,IAAI,MAAO,IACxDE,KAAU,MAA2B;CACzC,IAAMC,IAAI,iBAAiBC,CAAG;CAC9B,OAAO;EAAE,GAAGL,EAAGI,EAAE,KAAK;EAAG,GAAGJ,EAAGI,EAAE,MAAM;CAAE;AAC3C,GACME,KAAQ,GAAS,MAAY,KAAK,IAAI3B,EAAE,IAAI4B,EAAE,CAAC,IAAI,MAAO,KAAK,IAAI5B,EAAE,IAAI4B,EAAE,CAAC,IAAI,IAChFC,UAAiB,GAAG,OAAO,WAAW,GAAG,OAAO,eAChDC,UAAsB,CAAC,CAAC,OAAO,aAAa,kCAAkC,CAAC,CAAC,SAChFC,KAAgB,MACpB,CAAC,GAAG,SAAS,iBAAiB,yBAAyB,CAAC,CAAC,CAAC,MACvD,MAAM,CAACL,EAAI,SAASM,CAAC,KAAKA,EAAE,eAAe,CAAC,CAAC,SAAS,KAAKA,EAAE,cAAc,6BAA6B,CAC3G,GACIC,KAAU,MAAgBC,EAAG,aAAa,kBAAkB;AAElE,SAAgBC,EAAc,GAAyB;CACrD,IAAMC,IAAO,CAAC,GAAGV,EAAI,QAAQ,GACvBW,IAAOD,EAAK,WAAW,IAAIA,EAAK,KAAK,KAAA;CAE3C,OADIC,KAAQ,CAACJ,EAAOI,CAAI,IAAUF,EAAcE,CAAI,IAC7CD,EAAK,SAAS,MAAOH,EAAOK,CAAC,IAAI,CAAC,GAAGA,EAAE,QAAQ,IAAI,CAACA,CAAC,CAAE;AAChE;AAEA,SAAgBC,EAAgB,GAAyB,GAAqC;CAC5F,IAAMvB,IAAUX,EAAOmC,CAAQ,GACzBC,IAAOpC,EAA4B,IAAI;CAK7C,AAJAqC,QAAsB;EAEpB,AADA,EAAQ,UAAUF,GAClBC,EAAK,UAAU;CACjB,CAAC,GACDC,QAAsB;EACpB,IAAI,CAAChB,KAAO,OAAO,iBAAmB,KAAa;EACnD,IAAIiB,IAAoB,MACpBC,IAAOf,EAAS,GAChBgB,IAA2B,MAC3BC,IAAsB,MACpBC,oBAAU,IAAI,IAAa,GAC3BC,UAAa;GAGjB,AAFAH,GAAQ,OAAO,GACf,IAAS,MACTnB,EAAI,gBAAgB,eAAe;GACnC,KAAK,IAAMuB,KAAQvB,EAAI,iBAAiB,oBAAoB,GAAG,EAAK,gBAAgB,kBAAkB;EACxG,GACMwB,KAAQ,GAAY,GAAU,GAAkB,GAAgB,MAAe;GACnF,KAAK,IAAMD,KAAQvB,EAAI,iBAA8B,oBAAoB,GACvE,AAAIuB,EAAK,gBAAgBA,EAAK,gBAAcA,EAAK,aAAa,oBAAoB,EAAE;GACtF,EAAI,aAAa,iBAAiB,EAAE;GACpC,IAAME,IAAMzB,EAAI,QACd,CACE;IAAE,OAAO,GAAG0B,EAAK,EAAE;IAAK,QAAQ,GAAGA,EAAK,EAAE;GAAI,GAC9C;IAAE,OAAO,GAAGC,EAAG,EAAE;IAAK,QAAQ,GAAGA,EAAG,EAAE;GAAI,CAC5C,GACA;IAAE;IAAU;GAAO,CACrB;GAIA,AAHA,EAAI,cAAcC,GAClB,IAASH,GACT,IAASC,GACT,EAAI,iBAAiB;IACnB,AAAIP,MAAWM,MACfH,EAAK,GACLhC,EAAQ,UAAU;GACpB;EACF,GACMuC,UAAe;GACnB,IAAMC,IAAUX,GACVS,IAAK,OAAOE,GAAS,eAAe,CAAC,GACrCJ,IAAOI,IAAUhC,EAAOE,CAAG,IAAIiB;GACrC,EAAK;GACL,IAAMU,IAAK7B,EAAOE,CAAG,GACf+B,IAAQ,iBAAiB/B,CAAG,GAC5BgC,IAAWnC,EAAGkC,EAAM,iBAAiB,qBAAqB,CAAC,GAC3DE,IAASF,EAAM,iBAAiB,mBAAmB,CAAC,CAAC,KAAK,KAAK;GACrE,IAAID,KAAWV,KAAUH,KAAQhB,EAAK0B,GAAIV,CAAI,GAAG,OAAOO,EAAKJ,GAAQO,GAAIK,GAAUC,GAAQL,CAAE;GAC7F,IAAOD;GACP,IAAMO,IAAUhB,OAAU,IAAOf,EAAS;GAC1C,AACE,CAACuB,KACDzB,EAAKyB,GAAMC,CAAE,KACbO,KACA,CAACF,KACD5B,EAAc,KACdC,EAAaL,CAAG,KAChB,OAAOA,EAAI,WAAY,cACvBA,EAAI,QAAQ,oCAAoC,IAEhDV,EAAQ,UAAU,IAGpBkC,EAAKE,GAAMC,GAAIK,GAAUC,GAAQ,CAAC;EACpC,GACME,IAAW,IAAI,eAAeN,CAAM;EAkB1C,OAjBA,EAAK,gBAAgB;GACnB,IAAMO,IAAM,IAAI,IAAI3B,EAAcT,CAAG,CAAC,GAClCqC,IAAO;GACX,KAAK,IAAM7B,KAAMa,GACf,AAAIe,EAAI,IAAI5B,CAAE,MACd2B,EAAS,UAAU3B,CAAE,GACrBa,EAAQ,OAAOb,CAAE,GACjB,IAAO;GAET,KAAK,IAAMA,KAAM4B,GACf,AAAIf,EAAQ,IAAIb,CAAE,MAClB2B,EAAS,QAAQ3B,CAAE,GACnBa,EAAQ,IAAIb,CAAE;GAEhB,CAAI6B,KAAS,CAAClB,KAAUF,KAAQ,CAAChB,EAAKH,EAAOE,CAAG,GAAGiB,CAAI,MAAIY,EAAO;EACpE,GACAd,EAAK,QAAQ,SACA;GAGX,AAFA,EAAK,UAAU,MACfoB,EAAS,WAAW,GACpBb,EAAK;EACP;CACF,GAAG,CAACtB,CAAG,CAAC;AACV"}
@@ -5,7 +5,7 @@ import { i as n } from "../chunks/context-BELWW79w.js";
5
5
  import { t as r } from "../chunks/icon-BqujXDUc.js";
6
6
  import { i, r as a } from "../chunks/kbd-DqWmbr_e.js";
7
7
  import { t as o } from "../chunks/command-list-D5k0uvkR.js";
8
- import { a as s, i as c, r as l, t as u } from "../chunks/resize-motion-BWGMchyP.js";
8
+ import { a as s, i as c, r as l, t as u } from "../chunks/resize-motion-DS3rIIqy.js";
9
9
  import { useCallback as d, useEffect as f, useMemo as p, useRef as m, useState as h } from "react";
10
10
  import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
11
  import { ArrowRight01Icon as y } from "@hugeicons/core-free-icons";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
3
  import { n as t } from "../chunks/button-CAPyW-v8.js";
4
- import { n } from "../chunks/resize-motion-BWGMchyP.js";
5
- import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-truWH0qe.js";
4
+ import { n } from "../chunks/resize-motion-DS3rIIqy.js";
5
+ import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-B2RzuBu6.js";
6
6
  import { Fragment as p, useEffect as m, useId as h, useLayoutEffect as g, useMemo as _, useRef as v, useState as y } from "react";
7
7
  import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
8
8
  //#region src/components/dialog/step-dialog.tsx
@@ -4,7 +4,7 @@ import { r as t } from "../chunks/portal-context-BBbzDKmY.js";
4
4
  import { n, t as r } from "../chunks/inset-BnBj8NJV.js";
5
5
  import { i } from "../chunks/context-BELWW79w.js";
6
6
  import { t as a } from "../chunks/icon-button-D4O4puwH.js";
7
- import { a as o, i as s, t as c } from "../chunks/resize-motion-BWGMchyP.js";
7
+ import { a as o, i as s, t as c } from "../chunks/resize-motion-DS3rIIqy.js";
8
8
  import { t as l } from "../chunks/over-sheet-B8vzr_zU.js";
9
9
  import { forwardRef as u, useCallback as d, useState as f } from "react";
10
10
  import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
package/dist/index.js CHANGED
@@ -93,7 +93,7 @@ import { a as Cr, i as wr, n as Tr, r as Er, t as Dr } from "./chunks/command-li
93
93
  import { i as Or, n as kr, r as Ar, t as jr } from "./chunks/picker-popover-C4ElNk7t.js";
94
94
  import { FilterChip as Mr, KAESO_FILTER_CHIP_DEFAULT_VARIANTS as Nr, KAESO_FILTER_CHIP_VARIANTS as Pr } from "./components/filter-chip.js";
95
95
  import { DisplayOptions as Fr, KAESO_DISPLAY_OPTIONS_DEFAULT_VARIANTS as Ir, KAESO_DISPLAY_OPTIONS_VARIANTS as Lr } from "./components/display-options.js";
96
- import { a as Rr, c as zr, i as Br, l as Vr, n as Hr, o as Ur, r as Wr, s as Gr, t as Kr } from "./chunks/dialog-truWH0qe.js";
96
+ import { a as Rr, c as zr, i as Br, l as Vr, n as Hr, o as Ur, r as Wr, s as Gr, t as Kr } from "./chunks/dialog-B2RzuBu6.js";
97
97
  import { DialogScope as qr, StepDialog as Jr } from "./components/dialog.js";
98
98
  import { KAESO_SHEET_DEFAULT_VARIANTS as Yr, KAESO_SHEET_VARIANTS as Xr, Sheet as Zr } from "./components/sheet.js";
99
99
  import { CommandPalette as Qr, KAESO_COMMAND_PALETTE_DEFAULT_VARIANTS as $r, KAESO_COMMAND_PALETTE_VARIANTS as ei } from "./components/command-palette.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicplanes/kaeso-ui",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Kaeso's UI library: React components on Base UI, Tailwind CSS v4 and the Kaeso tokens.",
5
5
  "license": "MIT",
6
6
  "author": "Devin Oldenburg",
@@ -102,7 +102,7 @@
102
102
  "shiki": "4.4.3",
103
103
  "tailwind-merge": "3.7.0",
104
104
  "uqr": "0.1.3",
105
- "@logicplanes/kaeso-tokens": "0.3.6"
105
+ "@logicplanes/kaeso-tokens": "0.3.7"
106
106
  },
107
107
  "devDependencies": {
108
108
  "@hugeicons/core-free-icons": "4.3.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"resize-motion-BWGMchyP.js","names":["focused","a","focusedElsewhere","layer","useRestoreFocus","opener","useRef","wasOpen","open","first","DialogScopeContext","useScopedDialog","scope","use","id","useId","useEffect","settled","useOpenSession","seen","setSeen","useState","px","v","ms","sizeOf","s","box","near","b","viewport","reducedMotion","anchoredList","p","isBody","el","resizeSources","kids","only","c","useResizeMotion","onSettle","sync","useLayoutEffect","size","view","motion","origin","watched","stop","body","play","run","from","to","at","change","running","style","duration","easing","resized","observer","now","gone"],"sources":["../../src/utils/restore-focus.ts","../../src/utils/dialog-scope.ts","../../src/utils/resize-motion.ts"],"sourcesContent":["import { useRef } from \"react\";\n\nfunction focused(): HTMLElement | null {\n if (typeof document === \"undefined\") return null;\n const a = document.activeElement;\n return a instanceof HTMLElement && a !== document.body ? a : null;\n}\n\nfunction focusedElsewhere(): boolean {\n const layer = focused()?.closest(\"[role=dialog], [role=alertdialog]\");\n return layer === null || !!layer?.hasAttribute(\"data-open\");\n}\n\nexport function useRestoreFocus(open: boolean | undefined, first: () => HTMLElement | boolean = () => true) {\n const opener = useRef<HTMLElement | null>(null);\n const wasOpen = useRef(false);\n if (open && !wasOpen.current) opener.current = focused();\n if (open !== undefined) wasOpen.current = open;\n return {\n initialFocus: () => first(),\n finalFocus: () => {\n if (open !== undefined && opener.current?.isConnected) return opener.current;\n return !focusedElsewhere();\n },\n };\n}\n","import { createContext, use, useEffect, useId, useState } from \"react\";\n\nexport interface DialogScopeTracker {\n showing: (id: string) => void;\n hidden: (id: string) => void;\n}\n\nexport const DialogScopeContext = /* @__PURE__ */ createContext<DialogScopeTracker | null>(null);\n\nexport function useScopedDialog(open: boolean | undefined): (open: boolean) => void {\n const scope = use(DialogScopeContext);\n const id = useId();\n useEffect(() => {\n if (open) scope?.showing(id);\n }, [scope, id, open]);\n useEffect(() => () => scope?.hidden(id), [scope, id]);\n return (settled: boolean) => {\n if (!settled) scope?.hidden(id);\n };\n}\n\nexport function useOpenSession(open: boolean): number {\n const [seen, setSeen] = useState({ open, session: 0 });\n if (seen.open !== open) setSeen({ open, session: open ? seen.session + 1 : seen.session });\n return seen.session;\n}\n","import { useLayoutEffect, useRef } from \"react\";\n\ninterface Size {\n w: number;\n h: number;\n}\n\nconst px = (v: string) => parseFloat(v) || 0;\nconst ms = (v: string) => px(v) * (/\\ds\\s*$/.test(v) ? 1000 : 1);\nconst sizeOf = (box: HTMLElement): Size => {\n const s = getComputedStyle(box);\n return { w: px(s.width), h: px(s.height) };\n};\nconst near = (a: Size, b: Size) => Math.abs(a.h - b.h) < 0.5 && Math.abs(a.w - b.w) < 0.5;\nconst viewport = () => `${window.innerWidth}x${window.innerHeight}`;\nconst reducedMotion = () => !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\nconst anchoredList = (box: HTMLElement) =>\n [...document.querySelectorAll(\"[data-side][data-align]\")].some(\n (p) => !box.contains(p) && p.getClientRects().length > 0 && p.querySelector(\"[role=listbox], [role=menu]\"),\n );\nconst isBody = (el: Element) => el.hasAttribute(\"data-dialog-body\");\n\nexport function resizeSources(box: Element): Element[] {\n const kids = [...box.children];\n const only = kids.length === 1 ? kids[0] : undefined;\n if (only && !isBody(only)) return resizeSources(only);\n return kids.flatMap((c) => (isBody(c) ? [...c.children] : [c]));\n}\n\nexport function useResizeMotion(box: HTMLElement | null, onSettle?: (() => void) | undefined) {\n const settled = useRef(onSettle);\n const sync = useRef<(() => void) | null>(null);\n useLayoutEffect(() => {\n settled.current = onSettle;\n sync.current?.();\n });\n useLayoutEffect(() => {\n if (!box || typeof ResizeObserver === \"undefined\") return;\n let size: Size | null = null;\n let view = viewport();\n let motion: Animation | null = null;\n let origin: Size | null = null;\n const watched = new Set<Element>();\n const stop = () => {\n motion?.cancel();\n motion = null;\n box.removeAttribute(\"data-resizing\");\n for (const body of box.querySelectorAll(\"[data-resize-clip]\")) body.removeAttribute(\"data-resize-clip\");\n };\n const play = (from: Size, to: Size, duration: number, easing: string, at: number) => {\n for (const body of box.querySelectorAll<HTMLElement>(\"[data-dialog-body]\"))\n if (body.scrollHeight <= body.clientHeight) body.setAttribute(\"data-resize-clip\", \"\");\n box.setAttribute(\"data-resizing\", \"\");\n const run = box.animate(\n [\n { width: `${from.w}px`, height: `${from.h}px` },\n { width: `${to.w}px`, height: `${to.h}px` },\n ],\n { duration, easing },\n );\n run.currentTime = at;\n motion = run;\n origin = from;\n run.onfinish = () => {\n if (motion !== run) return;\n stop();\n settled.current?.();\n };\n };\n const change = () => {\n const running = motion;\n const at = Number(running?.currentTime ?? 0);\n const from = running ? sizeOf(box) : size;\n stop();\n const to = sizeOf(box);\n const style = getComputedStyle(box);\n const duration = ms(style.getPropertyValue(\"--k-duration-dialog\"));\n const easing = style.getPropertyValue(\"--k-ease-standard\").trim() || \"ease-out\";\n if (running && origin && size && near(to, size)) return play(origin, to, duration, easing, at);\n size = to;\n const resized = view !== (view = viewport());\n if (\n !from ||\n near(from, to) ||\n resized ||\n !duration ||\n reducedMotion() ||\n anchoredList(box) ||\n typeof box.animate !== \"function\" ||\n box.matches(\"[data-ending-style], [data-closed]\")\n ) {\n settled.current?.();\n return;\n }\n play(from, to, duration, easing, 0);\n };\n const observer = new ResizeObserver(change);\n sync.current = () => {\n const now = new Set(resizeSources(box));\n let gone = false;\n for (const el of watched) {\n if (now.has(el)) continue;\n observer.unobserve(el);\n watched.delete(el);\n gone = true;\n }\n for (const el of now) {\n if (watched.has(el)) continue;\n observer.observe(el);\n watched.add(el);\n }\n if (gone || (!motion && size && !near(sizeOf(box), size))) change();\n };\n sync.current();\n return () => {\n sync.current = null;\n observer.disconnect();\n stop();\n };\n }, [box]);\n}\n"],"mappings":"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"}