@iris-ui-kit/vue 0.2.25 → 0.2.27
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/admin.cjs +547 -236
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.d.cts +4 -2
- package/dist/admin.d.ts +4 -2
- package/dist/admin.js +2 -2
- package/dist/behaviors.cjs +49 -0
- package/dist/behaviors.cjs.map +1 -1
- package/dist/behaviors.d.cts +57 -1
- package/dist/behaviors.d.ts +57 -1
- package/dist/behaviors.js +1 -1
- package/dist/{chunk-QQ25RKOO.js → chunk-ASFDGYIR.js} +543 -240
- package/dist/chunk-ASFDGYIR.js.map +1 -0
- package/dist/{chunk-WL67XCH5.js → chunk-IN3DQ55U.js} +2 -2
- package/dist/chunk-IN3DQ55U.js.map +1 -0
- package/dist/{chunk-7L6UB6MD.js → chunk-IOMKC5OI.js} +53 -5
- package/dist/chunk-IOMKC5OI.js.map +1 -0
- package/dist/{chunk-3FJUCHCC.js → chunk-IPR5JAVF.js} +11 -3
- package/dist/chunk-IPR5JAVF.js.map +1 -0
- package/dist/{chunk-BEPH6PPL.js → chunk-LWABTQCB.js} +57 -37
- package/dist/chunk-LWABTQCB.js.map +1 -0
- package/dist/{chunk-DNRQVM3Q.js → chunk-QBFYIDY7.js} +3 -2
- package/dist/chunk-QBFYIDY7.js.map +1 -0
- package/dist/data.cjs +1 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.cts +4 -2
- package/dist/data.d.ts +4 -2
- package/dist/data.js +1 -1
- package/dist/floating.cjs +9 -1
- package/dist/floating.cjs.map +1 -1
- package/dist/floating.d.cts +6 -0
- package/dist/floating.d.ts +6 -0
- package/dist/floating.js +1 -1
- package/dist/index.cjs +2063 -745
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +172 -8
- package/dist/index.d.ts +172 -8
- package/dist/index.js +1412 -475
- package/dist/index.js.map +1 -1
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.d.cts +1 -1
- package/dist/layouts.d.ts +1 -1
- package/dist/layouts.js +1 -1
- package/dist/skeletons.cjs +55 -35
- package/dist/skeletons.cjs.map +1 -1
- package/dist/skeletons.js +1 -1
- package/package.json +5 -5
- package/dist/chunk-3FJUCHCC.js.map +0 -1
- package/dist/chunk-7L6UB6MD.js.map +0 -1
- package/dist/chunk-BEPH6PPL.js.map +0 -1
- package/dist/chunk-DNRQVM3Q.js.map +0 -1
- package/dist/chunk-QQ25RKOO.js.map +0 -1
- package/dist/chunk-WL67XCH5.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/icon/Icon.ts","../src/admin/styles.ts","../src/admin/NavMenuFlyout.ts","../src/admin/NavMenuKeyboard.ts","../src/admin/NavMenu.ts","../src/primitives/breadcrumb/Breadcrumb.ts","../src/primitives/breadcrumb/BreadcrumbItem.ts","../src/admin/AdminBreadcrumb.ts","../src/admin/useTabsNav.ts","../src/primitives/dropdown/context.ts","../src/primitives/dropdown/Dropdown.ts","../src/primitives/dropdown/DropdownTrigger.ts","../src/primitives/dropdown/DropdownMenu.ts","../src/primitives/dropdown/DropdownItem.ts","../src/admin/AdminTabs.ts","../src/admin/useAdminShell.ts","../src/admin/AdminLayout.ts","../src/admin/useAdminPreferences.ts"],"names":["isBranch","findNavPath","defineComponent","computed","onBeforeUnmount","watch","h","ref","inject","nextTick"],"mappings":"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","file":"chunk-ASFDGYIR.js","sourcesContent":["import { defineComponent, h, inject, type PropType, type VNode } from 'vue'\nimport { defaultIconRegistry, resolveThemedIcon, type IrisIconRegistry } from '@iris-ui-kit/icons'\nimport { IrisThemeKey } from '../../theme'\n\n/**\n * Renders a registered icon as inline SVG. Resolves `name` through an\n * `@iris-ui-kit/icons` registry and renders the icon's structured nodes as real\n * SVG child elements (no raw-HTML injection). Colors follow `currentColor`, so\n * the surrounding CSS `color` themes it. Renders nothing for an unresolved name.\n */\nexport const IrisIcon = defineComponent({\n name: 'IrisIcon',\n inheritAttrs: false,\n props: {\n /** Semantic icon name resolved via the registry (e.g. 'check'). */\n name: { type: String, required: true },\n /** Width & height (number → px). */\n size: { type: [Number, String] as PropType<number | string>, default: 24 },\n /** Stroke width for line icons. */\n strokeWidth: { type: Number, default: 2 },\n /** Render as a filled glyph instead of a stroked line icon. */\n fill: { type: Boolean, default: false },\n /** Accessible title; sets role=\"img\" + aria-label. Omit for decorative icons. */\n title: { type: String, default: undefined },\n /** Registry to resolve `name` against. Defaults to the built-in set. */\n registry: { type: Object as PropType<IrisIconRegistry>, default: () => defaultIconRegistry },\n },\n setup(props, { attrs }) {\n const themeCtx = inject(IrisThemeKey, undefined)\n return () => {\n const icon = resolveThemedIcon(props.registry, props.name, themeCtx?.current.value)\n if (!icon) return null\n\n const paint = props.fill\n ? { fill: 'currentColor' }\n : {\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': props.strokeWidth,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }\n\n const children: VNode[] = icon.nodes.map((node, i) => h(node.tag, { key: i, ...node.attrs }))\n if (props.title) children.unshift(h('title', props.title))\n\n return h(\n 'svg',\n {\n ...attrs,\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: icon.viewBox ?? '0 0 24 24',\n width: props.size,\n height: props.size,\n ...paint,\n role: props.title ? 'img' : undefined,\n 'aria-label': props.title || undefined,\n 'aria-hidden': props.title ? undefined : 'true',\n 'data-iris-icon': props.name,\n style: {\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: 0,\n ...((attrs.style as Record<string, string>) ?? {}),\n },\n },\n children,\n )\n }\n },\n})\n","export const __NAV_MENU_STYLE_ID = 'iris-nav-menu-styles'\n\nconst CSS = `\n:where(.iris-nav-menu) {\n --iris-nav-indent-step: 16px;\n --iris-nav-item-padding-inline: 12px;\n --iris-nav-item-padding-block: 8px;\n --iris-nav-item-border-radius: var(--iris-radius-md, 6px);\n --iris-nav-item-hover: var(--iris-surface-hover, var(--iris-surface));\n --iris-nav-item-height: 34px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--iris-space-xxs, 4px);\n width: 100%;\n}\n\n:where(.iris-nav-menu--horizontal) {\n flex-direction: row;\n align-items: center;\n width: auto;\n}\n\n:where(.iris-nav-menu-group) {\n position: relative;\n}\n\n:where(.iris-nav-menu-item) {\n appearance: none;\n box-sizing: border-box;\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n width: 100%;\n min-height: var(--iris-nav-item-height);\n border: none;\n border-radius: var(--iris-nav-item-border-radius);\n background: transparent;\n color: var(--iris-foreground);\n font: inherit;\n font-size: var(--iris-font-size-md, 14px);\n line-height: 1.2;\n font-weight: 400;\n text-align: start;\n cursor: pointer;\n opacity: 1;\n margin: 0;\n gap: var(--iris-space-sm, 12px);\n padding-block: var(--iris-nav-item-padding-block);\n padding-inline: var(--iris-nav-item-padding-inline);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:where(.iris-nav-menu--horizontal > .iris-nav-menu-group > .iris-nav-menu-item) {\n width: auto;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item[data-depth='0']) {\n --iris-nav-item-padding-inline-start: 12px;\n}\n\n:where(.iris-nav-menu-item[data-depth='1']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step));\n}\n\n:where(.iris-nav-menu-item[data-depth='2']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 2);\n}\n\n:where(.iris-nav-menu-item[data-depth='3']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 3);\n}\n\n:where(.iris-nav-menu-item[data-depth='4']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 4);\n}\n\n:where(.iris-nav-menu-item[data-depth='5']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 5);\n}\n\n:where(.iris-nav-menu-item[data-depth='6']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 6);\n}\n\n:where(.iris-nav-menu-item[data-depth='7']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 7);\n}\n\n:where(.iris-nav-menu-item[data-depth='8']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 8);\n}\n\n:where(.iris-nav-menu-item[data-depth='9']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 9);\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-item[data-depth]) {\n padding-inline-start: var(--iris-nav-item-padding-inline-start);\n}\n\n:where(.iris-nav-menu-item:hover),\n:where(.iris-nav-menu-item.is-hovered):not([disabled], .is-disabled) {\n background: var(--iris-nav-item-hover);\n}\n\n.iris-nav-menu-item[data-active='true'] {\n background: var(--iris-primary);\n color: var(--iris-primary-foreground, #fff);\n font-weight: 600;\n}\n\n:where(.iris-nav-menu-item[data-active-trail='true']) {\n color: var(--iris-primary);\n font-weight: 600;\n}\n\n:where(.iris-nav-menu-item[disabled], .iris-nav-menu-item.is-disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n:where(.iris-nav-menu-item:focus-visible) {\n outline: 2px solid var(--iris-ring, var(--iris-primary));\n outline-offset: 1px;\n}\n\n:where(.iris-nav-menu-label) {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n:where(.iris-nav-menu-badge) {\n margin-inline-start: var(--iris-space-xs, 8px);\n font-size: var(--iris-font-size-xs, 12px);\n line-height: 1;\n padding: var(--iris-space-xxs, 4px) var(--iris-space-xs, 8px);\n border-radius: 999px;\n background: var(--iris-danger, #ef4444);\n color: var(--iris-primary-foreground, #fff);\n flex: 0 0 auto;\n}\n\n:where(.iris-nav-menu-arrow) {\n flex: 0 0 auto;\n opacity: 0.6;\n transform: rotate(0deg);\n transform-origin: center;\n transition: transform 160ms ease;\n margin-inline-start: auto;\n}\n\n:where(.iris-nav-menu-arrow[data-reversed='true']) {\n transform: rotate(180deg);\n}\n\n:where(.iris-nav-menu-fallback-icon) {\n display: inline-flex;\n width: 20px;\n height: 20px;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n}\n\n:where(.iris-nav-menu-item.is-disabled) .iris-nav-menu-label {\n opacity: 0.75;\n}\n\n/* Vertical branches stay in the DOM and animate height via the grid-rows\n trick (0fr → 1fr); the inner wrapper provides the overflow clipping so the\n transition is a smooth accordion without a max-height cap. */\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease,\n visibility 0s linear 200ms;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children > .iris-nav-menu-children-inner) {\n overflow: hidden;\n min-height: 0;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease;\n}\n\n/* Flyout popups (horizontal mode + the collapsed rail) share the popup chrome\n and are hard-hidden when closed (no height animation needed). */\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group > .iris-nav-menu-children) {\n display: none;\n position: absolute;\n min-width: 220px;\n padding: var(--iris-space-xs, 8px);\n border: 1px solid var(--iris-border);\n border-radius: var(--iris-radius-md, 6px);\n background: var(--iris-surface);\n box-shadow: var(--iris-shadow-md);\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n display: block;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: 60;\n}\n\n/* A9: the collapsed rail popup opens to the right of the icon. */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 60;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 61;\n}\n\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item) {\n justify-content: center;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item.is-collapsed) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n/* A9: the collapsed rail stays centered even though rows carry data-depth\n (the vertical indent rules would otherwise win the specificity tie). */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item[data-depth]) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.iris-nav-menu-arrow) {\n transition: none;\n }\n :where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n transition: none;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installNavMenuStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__NAV_MENU_STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = __NAV_MENU_STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only: remove the singleton stylesheet and reset installation state. */\nexport function __resetNavMenuStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__NAV_MENU_STYLE_ID)?.remove()\n }\n}\n","import { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { findNavPath, isBranch, type NavNode } from '@iris-ui-kit/core'\n\n/**\n * Flyout interaction controller for IrisNavMenu (horizontal + collapsed\n * rail): hover open/close latencies, click pinning, pointer containment,\n * viewport pinning, and the keyboard-focus visibility model. Aligned with\n * ant-design-vue Menu menubar semantics (A2/A3/A6/A9/A10).\n */\nexport interface NavMenuFlyoutCtx {\n items: NavNode[]\n tree: { value: NavNode[] }\n expanded: { value: string[] }\n flyoutMode: { value: boolean }\n collapsed: boolean\n toggle: (key: string) => void\n emitSelect: (key: string, node: NavNode) => void\n}\n\nconst HOVER_OPEN_DELAY_VAL = 60\nconst HOVER_CLOSE_DELAY_VAL = 150\n\nexport function createNavMenuFlyout(ctx: NavMenuFlyoutCtx) {\n const hovered = ref<string | null>(null)\n const hoveredBranches = ref<string[]>([])\n const focusedBranches = ref<string[]>([])\n /** Branches pinned open by a click (horizontal mode) — sticky across hover. */\n const clickedBranches = ref<string[]>([])\n /** Set while Escape is returning focus to a trigger: the group focusin\n * handler must not re-open the flyout it just closed. */\n let suppressFocusOpen = false\n\n // Hover open/close latencies: a single open timer plus per-branch close\n // timers so fast pointer travel across branches never flickers a popup.\n let openTimer: ReturnType<typeof setTimeout> | null = null\n const closeTimers = new Map<string, ReturnType<typeof setTimeout>>()\n\n const clearOpenTimer = (): void => {\n if (openTimer) {\n clearTimeout(openTimer)\n openTimer = null\n }\n }\n const cancelClose = (key: string): void => {\n const timer = closeTimers.get(key)\n if (timer) {\n clearTimeout(timer)\n closeTimers.delete(key)\n }\n }\n const cancelAllTimers = (): void => {\n clearOpenTimer()\n for (const timer of closeTimers.values()) clearTimeout(timer)\n closeTimers.clear()\n }\n onBeforeUnmount(cancelAllTimers)\n\n // --- Flyout viewport pinning ----------------------------------------\n // Top-level flyout popups (horizontal + collapsed rail) are rendered\n // in-flow, but the admin shell hosts the rail inside scroll containers\n // (sidebar overflow) — plain `position: absolute` popups get clipped.\n // Pin each top-level popup to the viewport with `position: fixed` from\n // the trigger's rect and keep it glued while open via scroll/resize\n // listeners. Nested popups stay absolute: their containing block is the\n // already-pinned top-level popup.\n const flyoutTriggers = new Map<string, HTMLElement>()\n const flyoutPanels = new Map<string, HTMLElement>()\n\n const setFlyoutRef = (map: Map<string, HTMLElement>, key: string, el: unknown): void => {\n if (el instanceof HTMLElement) map.set(key, el)\n else map.delete(key)\n }\n\n const positionFlyout = (key: string): void => {\n const trigger = flyoutTriggers.get(key)\n const panel = flyoutPanels.get(key)\n if (!trigger || !panel || typeof document === 'undefined') return\n const rect = trigger.getBoundingClientRect()\n const dir = getComputedStyle(trigger).direction\n panel.style.position = 'fixed'\n panel.style.top = `${ctx.collapsed ? rect.top : rect.bottom}px`\n if (dir === 'rtl') {\n // Rail: popup opens on the inline-start side (left in RTL).\n panel.style.left = ''\n panel.style.right = `${window.innerWidth - (ctx.collapsed ? rect.left : rect.right)}px`\n } else {\n panel.style.right = ''\n panel.style.left = `${ctx.collapsed ? rect.right : rect.left}px`\n }\n }\n\n onBeforeUnmount(() => {\n detachViewportListeners()\n flyoutTriggers.clear()\n flyoutPanels.clear()\n })\n\n /** Menubar semantics: at most one flyout per depth. Opening (hover / click\n * / keyboard) a branch closes any other branch's popup at the same depth,\n * so a pinned popup never coexists with a sibling hover popup and clicking\n * a sibling branch visibly switches the open popup. */\n const isolateAtDepth = (key: string): void => {\n const depth = findNavPath(ctx.items, key).length - 1\n const isSameDepthOther = (k: string): boolean =>\n k !== key && findNavPath(ctx.items, k).length - 1 === depth\n for (const state of [hoveredBranches, clickedBranches, focusedBranches]) {\n if (state.value.some(isSameDepthOther)) {\n state.value = state.value.filter((k) => !isSameDepthOther(k))\n }\n }\n }\n\n const scheduleOpen = (key: string): void => {\n clearOpenTimer()\n openTimer = setTimeout(() => {\n openTimer = null\n isolateAtDepth(key)\n setBranchInteraction(hoveredBranches, key, true)\n }, HOVER_OPEN_DELAY_VAL)\n }\n const scheduleClose = (key: string): void => {\n cancelClose(key)\n closeTimers.set(\n key,\n setTimeout(() => {\n closeTimers.delete(key)\n setBranchInteraction(hoveredBranches, key, false)\n }, HOVER_CLOSE_DELAY_VAL),\n )\n }\n\n const closeHorizontalMenus = (): void => {\n if (!ctx.flyoutMode.value) return\n cancelAllTimers()\n hovered.value = null\n hoveredBranches.value = []\n focusedBranches.value = []\n clickedBranches.value = []\n }\n\n const select = (node: NavNode): void => {\n if (node.disabled) return\n closeHorizontalMenus()\n ctx.emitSelect(node.key, node)\n }\n\n /** Horizontal branch click: toggle the flyout without touching expandedKeys. */\n const toggleFlyout = (key: string): void => {\n cancelAllTimers()\n const current = clickedBranches.value\n if (current.includes(key)) {\n clickedBranches.value = current.filter((k) => k !== key)\n setBranchInteraction(hoveredBranches, key, false)\n setBranchInteraction(focusedBranches, key, false)\n } else {\n // Clicking a sibling branch switches the pinned popup (antd behavior).\n isolateAtDepth(key)\n clickedBranches.value = [...clickedBranches.value, key]\n }\n }\n\n /** Keyboard open: mark the branch as focused (instant, menubar pattern). */\n const openFlyout = (key: string): void => {\n cancelAllTimers()\n isolateAtDepth(key)\n setBranchInteraction(focusedBranches, key, true)\n }\n\n const setBranchInteraction = (\n state: typeof hoveredBranches,\n key: string,\n enabled: boolean,\n ): void => {\n const current = state.value\n if (enabled) {\n if (!current.includes(key)) state.value = [...current, key]\n } else if (current.includes(key)) {\n state.value = current.filter((item) => item !== key)\n }\n }\n\n const keepsPointerInside = (\n container: EventTarget | null,\n event: { relatedTarget?: EventTarget | null },\n ): boolean => {\n if (!container || !(container instanceof HTMLElement)) return false\n const next = event.relatedTarget\n return !!(next && next instanceof Node && container.contains(next))\n }\n\n const interactionKeyAtDepth = (keys: string[], depth: number): string | undefined =>\n keys.find((key) => findNavPath(ctx.items, key).length === depth + 1)\n\n const horizontalBranchVisible = (key: string, depth: number): boolean => {\n const hoveredAtDepth = interactionKeyAtDepth(hoveredBranches.value, depth)\n if (hoveredAtDepth) return hoveredAtDepth === key\n const clickedAtDepth = interactionKeyAtDepth(clickedBranches.value, depth)\n if (clickedAtDepth) return clickedAtDepth === key\n return interactionKeyAtDepth(focusedBranches.value, depth) === key\n }\n\n // Watch the set of currently-visible top-level flyouts: pin each to the\n // viewport as it opens and keep them glued via scroll/resize listeners.\n const shownFlyoutKeys = computed(() => {\n if (!ctx.flyoutMode.value) return []\n const keys: string[] = []\n for (const node of ctx.tree.value) {\n if (isBranch(node) && horizontalBranchVisible(node.key, 0)) keys.push(node.key)\n }\n return keys\n })\n\n const repositionOpenFlyouts = (): void => {\n for (const key of shownFlyoutKeys.value) positionFlyout(key)\n }\n\n let viewportListenersActive = false\n const attachViewportListeners = (): void => {\n if (viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = true\n // Capture phase: sidebar/header scroll containers don't bubble scroll.\n document.addEventListener('scroll', repositionOpenFlyouts, true)\n window.addEventListener('resize', repositionOpenFlyouts)\n }\n const detachViewportListeners = (): void => {\n if (!viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = false\n document.removeEventListener('scroll', repositionOpenFlyouts, true)\n window.removeEventListener('resize', repositionOpenFlyouts)\n }\n\n watch(\n shownFlyoutKeys,\n (keys, prev) => {\n if (keys.length > 0 && prev.length === 0) attachViewportListeners()\n else if (keys.length === 0 && prev.length > 0) detachViewportListeners()\n for (const key of keys) positionFlyout(key)\n },\n { flush: 'post' },\n )\n\n return {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n interactionKeyAtDepth,\n horizontalBranchVisible,\n shownFlyoutKeys,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen: { get: () => suppressFocusOpen },\n setSuppressFocusOpen: (value: boolean) => {\n suppressFocusOpen = value\n },\n cancelClose,\n scheduleOpen,\n scheduleClose,\n cancelAllTimers,\n }\n}\n","import type { NavNode } from '@iris-ui-kit/core'\nimport { findNavNode, findNavPath, isBranch } from '@iris-ui-kit/core'\nimport { nextTick, type Ref } from 'vue'\n\n/**\n * Keyboard navigation for IrisNavMenu (WAI-ARIA menu pattern, aligned with\n * ant-design-vue Menu): ArrowUp/Down/Home/End move focus, ArrowRight opens a\n * flyout branch and steps in, ArrowLeft/Up close, Escape closes flyouts and\n * returns focus to the trigger (A3/A4/A5).\n */\nexport interface NavMenuKeydownDeps {\n items: NavNode[]\n flyoutMode: () => boolean\n expanded: () => string[]\n toggle: (key: string) => void\n openFlyout: (key: string) => void\n closeHorizontalMenus: () => void\n horizontalBranchVisible: (key: string, depth: number) => boolean\n setBranchInteraction: (state: Ref<string[]>, key: string, enabled: boolean) => void\n focusedBranches: Ref<string[]>\n collapsed: boolean\n hoveredBranches: Ref<string[]>\n clickedBranches: Ref<string[]>\n suppressFocusOpen: () => boolean\n setSuppressFocusOpen: (value: boolean) => void\n}\n\nexport function createNavMenuKeydownHandler(deps: NavMenuKeydownDeps) {\n const {\n items,\n flyoutMode,\n expanded,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n collapsed,\n hoveredBranches,\n clickedBranches,\n setSuppressFocusOpen,\n } = deps\n\n return (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const buttons = Array.from(root.querySelectorAll<HTMLElement>('[data-iris-nav-item]')).filter(\n (button) => !button.closest('[data-iris-nav-children][aria-hidden=\"true\"]'),\n )\n if (buttons.length === 0) return\n const idx = buttons.indexOf(document.activeElement as HTMLElement)\n const focusAt = (i: number): void => buttons[(i + buttons.length) % buttons.length]?.focus()\n const key = idx >= 0 ? buttons[idx]?.getAttribute('data-key') : undefined\n const node = key ? findNavNode(items, key) : undefined\n const depth = idx >= 0 ? Number(buttons[idx]?.getAttribute('data-depth') ?? 0) : 0\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n // A4: flyout mode — Down on a branch opens its popup and steps in.\n if (flyoutMode() && node && isBranch(node)) {\n openFlyout(key!)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n return\n }\n focusAt(idx < 0 ? 0 : idx + 1)\n return\n }\n case 'ArrowUp': {\n e.preventDefault()\n // A4: Up on an open flyout trigger closes it and keeps focus there\n // (clears the click-pinned state too, so ArrowUp closes pinned popups\n // exactly like ArrowLeft).\n if (flyoutMode() && node && isBranch(node) && horizontalBranchVisible(key!, depth)) {\n setBranchInteraction(focusedBranches, key!, false)\n setBranchInteraction(clickedBranches, key!, false)\n return\n }\n focusAt(idx < 0 ? buttons.length - 1 : idx - 1)\n return\n }\n case 'Home':\n e.preventDefault()\n buttons[0]?.focus()\n return\n case 'End':\n e.preventDefault()\n buttons[buttons.length - 1]?.focus()\n return\n case 'Escape': {\n // A3: Escape closes open flyouts and returns focus to the trigger.\n if (flyoutMode()) {\n const openKeys = [\n ...hoveredBranches.value,\n ...clickedBranches.value,\n ...focusedBranches.value,\n ]\n if (openKeys.length > 0) {\n e.preventDefault()\n const openTop = openKeys.find((k) => findNavPath(items, k).length === 1)\n closeHorizontalMenus()\n if (openTop) {\n setSuppressFocusOpen(true)\n buttons.find((b) => b.getAttribute('data-key') === openTop)?.focus()\n void nextTick(() => {\n setSuppressFocusOpen(false)\n })\n }\n }\n }\n return\n }\n }\n\n if (collapsed || idx < 0 || !key || !node) return\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (isBranch(node)) {\n if (flyoutMode() || !expanded().includes(key)) {\n // A4 (flyout) / A5 (vertical): open and step into the first child.\n if (flyoutMode()) openFlyout(key)\n else toggle(key)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n } else {\n focusAt(idx + 1)\n }\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n if (flyoutMode() && isBranch(node)) {\n setBranchInteraction(focusedBranches, key, false)\n setBranchInteraction(clickedBranches, key, false)\n return\n }\n if (isBranch(node) && expanded().includes(key)) {\n toggle(key)\n } else {\n const parentKey = findNavPath(items, key).at(-2)?.key\n if (parentKey) {\n buttons.find((b) => b.getAttribute('data-key') === parentKey)?.focus()\n }\n }\n }\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n shallowRef,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport {\n branchTrail,\n createExpansion,\n findNavPath,\n isBranch,\n visibleNav,\n firstLeaf,\n type NavNode,\n} from '@iris-ui-kit/core'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { installNavMenuStyles } from './styles'\nimport { createNavMenuFlyout } from './NavMenuFlyout'\nimport { createNavMenuKeydownHandler } from './NavMenuKeyboard'\n\n/** Hover open/close latencies for flyouts (horizontal mode + collapsed rail). */\n\n/**\n * Data-driven nested navigation menu — the sidebar nav of the admin shell.\n * Renders a normalized `NavNode[]` tree as an accordion of expandable branches\n * and selectable leaves; the active leaf and its ancestor branches are\n * highlighted, and the active branch trail auto-expands. Router-agnostic: it\n * takes `activeKey` + emits `select(key, node)`; the host owns navigation.\n *\n * `collapsed` switches to an icon-only rail (top-level items only); hovering a\n * branch pops the full submenu flyout out to the right and a branch click\n * jumps to its first leaf.\n */\nexport const IrisNavMenu = defineComponent({\n name: 'IrisNavMenu',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree. */\n items: { type: Array as PropType<NavNode[]>, required: true },\n /** Key of the active leaf. */\n activeKey: { type: String, default: undefined },\n /** Controlled expanded branch keys (v-model:expandedKeys). */\n expandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Initial expanded keys when uncontrolled (else the active trail expands). */\n defaultExpandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Icon-only rail (top-level items only). */\n collapsed: { type: Boolean, default: false },\n orientation: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n },\n ariaLabel: { type: String, default: undefined },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n 'update:expandedKeys': (_keys: string[]) => true,\n },\n setup(props, { emit, attrs }) {\n installNavMenuStyles()\n const { t } = useI18n()\n const tree = computed(() => visibleNav(props.items))\n const activePath = computed(() =>\n props.activeKey ? findNavPath(props.items, props.activeKey).map((n) => n.key) : [],\n )\n\n // Branches with flyouts (horizontal popups + the collapsed rail popup) use\n // the hover/focus/click state instead of the vertical expansion model.\n const flyoutMode = computed(() => props.orientation === 'horizontal' || props.collapsed)\n\n const isControlled = computed(() => props.expandedKeys !== undefined)\n\n // The expand/collapse set — toggle, dedup and the active-trail union — lives in\n // the core expansion model; this component only layers on the controlled /\n // uncontrolled split. v-model here is *strict*: while controlled, rendering\n // reads the `expandedKeys` prop (not the store) so a toggle stays closed until\n // the parent updates it. The model therefore backs the uncontrolled state, and\n // `branchTrail` feeds the auto-open union through `merge`.\n const model = createExpansion({\n mode: 'multiple',\n defaultExpanded:\n props.defaultExpandedKeys ??\n (props.activeKey ? branchTrail(props.items, props.activeKey) : []),\n })\n const internalExpanded = shallowRef<string[]>(model.get())\n onBeforeUnmount(\n model.store.subscribe((keys) => {\n internalExpanded.value = keys\n }),\n )\n const expanded = computed(() =>\n isControlled.value ? (props.expandedKeys as string[]) : internalExpanded.value,\n )\n\n // Auto-open the active branch trail as the active leaf changes *or as the\n // tree arrives late* (async navigation data: the mount-time seed may have\n // seen `items = []`). `merge` is a union, so manual collapses survive and\n // repeated pushes are idempotent.\n watch([() => props.activeKey, () => props.items], ([key]) => {\n if (!isControlled.value) model.merge(key ? branchTrail(props.items, key) : [])\n })\n\n const toggle = (key: string): void => {\n if (isControlled.value) {\n const cur = props.expandedKeys as string[]\n emit(\n 'update:expandedKeys',\n cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key],\n )\n } else {\n model.toggle(key)\n emit('update:expandedKeys', model.get())\n }\n }\n\n // Flyout 状态机(hover/click 钉住/视口定位/键盘可见性)——NavMenuFlyout.ts\n const flyout = createNavMenuFlyout({\n items: props.items,\n tree,\n expanded,\n flyoutMode: { value: flyoutMode.value },\n collapsed: props.collapsed,\n toggle,\n emitSelect: (key: string, node: NavNode) => emit('select', key, node),\n })\n const {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n horizontalBranchVisible,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen,\n cancelClose,\n scheduleOpen,\n scheduleClose,\n } = flyout\n const itemClass = (opts: {\n depth: number\n active: boolean\n trail: boolean\n hovered: boolean\n open: boolean\n disabled: boolean\n branch: boolean\n }): string[] => {\n const depth = Math.min(9, opts.depth)\n return [\n 'iris-nav-menu-item',\n `iris-nav-menu-item--depth-${depth}`,\n `iris-nav-menu-item--${opts.branch ? 'branch' : 'leaf'}`,\n opts.active ? 'is-active' : undefined,\n opts.trail ? 'is-trail' : undefined,\n opts.hovered ? 'is-hovered' : undefined,\n opts.open ? 'is-open' : undefined,\n opts.disabled ? 'is-disabled' : undefined,\n ].filter(Boolean) as string[]\n }\n\n const iconNode = (node: NavNode, size = 18): VNode | null =>\n node.icon ? h(IrisIcon, { name: node.icon, size }) : null\n\n const badgeNode = (node: NavNode): VNode | null =>\n node.badge !== undefined && node.badge !== '' && !props.collapsed\n ? h(\n 'span',\n {\n class: 'iris-nav-menu-badge',\n 'data-iris-nav-badge': '',\n },\n String(node.badge),\n )\n : null\n\n const renderItem = (node: NavNode, depth: number): VNode => {\n const branch = isBranch(node)\n const horizontal = flyoutMode.value\n const open = expanded.value.includes(node.key)\n const shown = horizontal ? horizontalBranchVisible(node.key, depth) : open\n const active = node.key === props.activeKey\n const trail = branch && !active && activePath.value.includes(node.key)\n // A6: keep the row highlighted while its flyout stays open (pointer has\n // moved from the trigger into the popup).\n const rowHovered = hovered.value === node.key || (horizontal && shown)\n const arrowReversed = branch && !node.disabled && (active || trail || shown || rowHovered)\n\n // Top-level flyout popups are pinned to the viewport (fixed) so they\n // escape ancestor overflow; their trigger + panel refs feed that.\n const isFlyoutRoot = horizontal && branch && depth === 0\n\n const row = h(\n 'button',\n {\n type: 'button',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutTriggers, node.key, el)\n },\n class: [\n ...itemClass({\n depth,\n active,\n trail,\n hovered: rowHovered,\n open: branch ? shown : false,\n disabled: !!node.disabled,\n branch,\n }),\n ...(props.collapsed && depth === 0 ? ['is-collapsed'] : []),\n ],\n 'data-iris-nav-item': '',\n 'data-key': node.key,\n 'data-branch': branch ? 'true' : undefined,\n 'data-active': active ? 'true' : undefined,\n 'data-active-trail': trail ? 'true' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-hovered': rowHovered ? 'true' : undefined,\n 'data-depth': String(depth),\n 'data-orientation': props.orientation,\n disabled: node.disabled,\n title: props.collapsed ? node.title : undefined,\n 'aria-label': props.collapsed\n ? branch\n ? `${node.title} (section)`\n : node.title\n : undefined,\n 'aria-expanded': branch ? (shown ? 'true' : 'false') : undefined,\n 'aria-current': active ? 'page' : undefined,\n onMouseenter: () => {\n if (!node.disabled) hovered.value = node.key\n },\n onMouseleave: (event: MouseEvent) => {\n if (hovered.value === node.key && !keepsPointerInside(event.currentTarget, event)) {\n hovered.value = null\n }\n },\n onClick: () => {\n if (props.collapsed && branch) {\n select(firstLeaf(node))\n } else if (horizontal && branch) {\n // A2: horizontal clicks drive the flyout, not the expansion set.\n toggleFlyout(node.key)\n } else if (branch) {\n toggle(node.key)\n } else {\n select(node)\n }\n },\n },\n [\n iconNode(node),\n h(\n 'span',\n {\n class: 'iris-nav-menu-label',\n },\n node.title,\n ),\n badgeNode(node),\n branch && !(props.collapsed && depth === 0)\n ? h(IrisIcon, {\n name:\n horizontal && depth === 0 && !props.collapsed ? 'chevron-down' : 'chevron-right',\n size: 16,\n class: 'iris-nav-menu-arrow',\n 'data-reversed': arrowReversed ? 'true' : undefined,\n })\n : null,\n ],\n )\n\n // Children are always in the DOM (vertical: animated height via CSS;\n // horizontal/collapsed: flyout popups); `aria-hidden` keeps hidden items\n // out of the a11y tree and out of arrow-key navigation.\n return h(\n 'div',\n {\n key: node.key,\n 'data-iris-nav-group': branch ? '' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-depth': String(depth),\n class: ['iris-nav-menu-group', `iris-nav-menu-group--depth-${Math.min(9, depth)}`],\n ...(horizontal && branch\n ? {\n onMouseenter: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseover: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseout: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onMouseleave: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onFocusin: () => {\n if (suppressFocusOpen.get()) return\n setBranchInteraction(focusedBranches, node.key, true)\n },\n onFocusout: (event: FocusEvent) => {\n const group = event.currentTarget as HTMLElement\n const next = event.relatedTarget as Node | null\n if (!next || !group.contains(next)) {\n setBranchInteraction(focusedBranches, node.key, false)\n }\n },\n }\n : {}),\n },\n [\n row,\n branch\n ? h(\n 'div',\n {\n class: 'iris-nav-menu-children',\n 'data-iris-nav-children': '',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutPanels, node.key, el)\n },\n role: 'group',\n 'aria-hidden': shown ? undefined : 'true',\n },\n [\n h(\n 'div',\n { class: 'iris-nav-menu-children-inner' },\n (node.children ?? []).map((child) => renderItem(child, depth + 1)),\n ),\n ],\n )\n : null,\n ],\n )\n }\n\n // Keep the active item in view when the tree or active key changes (deep\n // links into long menus). jsdom-safe: no scrollIntoView / matchMedia there.\n const rootRef = shallowRef<HTMLElement | null>(null)\n watch(\n [() => props.activeKey, () => props.items],\n () => {\n if (!props.activeKey) return\n const root = rootRef.value\n if (!root) return\n const el = root.querySelector<HTMLElement>('[data-iris-nav-item][data-active=\"true\"]')\n if (!el || typeof el.scrollIntoView !== 'function') return\n let behavior: ScrollBehavior = 'auto'\n if (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches\n ) {\n behavior = 'smooth'\n }\n el.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior })\n },\n { flush: 'post' },\n )\n\n // Arrow-key navigation over the visible items (Tab still works as a fallback).\n // Up/Down/Home/End move focus; Right expands a branch then steps into it;\n // Left collapses an open branch else moves to the parent. In flyout mode\n // (horizontal / collapsed) Down/Right open the popup and step into it,\n // Up/Left close it, and Escape closes everything (focus returns to the\n // owning top-level trigger).\n // 键盘导航(A3/A4/A5 + Up/Down/Home/End)——见 NavMenuKeyboard.ts\n const onKeydown = createNavMenuKeydownHandler({\n items: props.items,\n flyoutMode: () => flyoutMode.value,\n expanded: () => expanded.value,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n hoveredBranches,\n clickedBranches,\n suppressFocusOpen: () => suppressFocusOpen.get(),\n setSuppressFocusOpen: (v: boolean) => {\n flyout.setSuppressFocusOpen(v)\n },\n collapsed: props.collapsed,\n })\n const menuClass = [\n 'iris-nav-menu',\n `iris-nav-menu--${props.orientation}`,\n props.collapsed ? 'iris-nav-menu--collapsed' : 'iris-nav-menu--expanded',\n ]\n return () =>\n h(\n 'nav',\n {\n ...attrs,\n ref: (el: unknown) => {\n rootRef.value = (el ?? null) as HTMLElement | null\n },\n class: [...menuClass, attrs.class as unknown as string | string[] | undefined],\n 'data-iris-nav-menu': '',\n 'data-collapsed': props.collapsed ? 'true' : undefined,\n 'data-orientation': props.orientation,\n 'aria-label': props.ariaLabel ?? t('admin.nav'),\n onKeydown,\n style: attrs.style as Record<string, string> | undefined,\n },\n tree.value.map((node) => renderItem(node, 0)),\n )\n },\n})\n","import { Fragment, defineComponent, h, type VNode } from 'vue'\nimport { useI18n } from '../../i18n'\n\n/**\n * Container for breadcrumb navigation. Renders a `<nav>` with `<ol>` per\n * WAI-ARIA. The `separator` slot (or prop) is inserted between items;\n * defaults to `/`.\n *\n * Children should be `IrisBreadcrumbItem`s.\n */\nexport const IrisBreadcrumb = defineComponent({\n name: 'IrisBreadcrumb',\n inheritAttrs: false,\n props: {\n /** String separator. Ignored if the `separator` slot is provided. */\n separator: { type: String, default: '/' },\n },\n setup(props, { slots, attrs }) {\n const { t } = useI18n()\n return () => {\n const children = slots.default?.() ?? []\n // Flatten Fragment / array children to a flat list of VNodes.\n const flat: VNode[] = []\n const walk = (nodes: VNode[] | undefined) => {\n if (!nodes) return\n nodes.forEach((n) => {\n if (n.type === Fragment) walk(n.children as VNode[])\n else flat.push(n)\n })\n }\n walk(children as VNode[])\n\n const total = flat.length\n const slotsSep = slots.separator\n const sep = (key: number) =>\n h(\n 'li',\n {\n key: `sep-${key}`,\n 'data-iris-breadcrumb-separator': '',\n 'aria-hidden': 'true',\n style: { color: 'var(--iris-muted)', display: 'inline-flex', alignItems: 'center' },\n },\n slotsSep ? slotsSep() : props.separator,\n )\n\n const items: VNode[] = []\n flat.forEach((child, i) => {\n // Inject is-last hint so the item can self-mark as `aria-current=page`.\n const isLast = i === total - 1\n const wrapped = h(\n 'li',\n {\n key: `item-${i}`,\n 'data-iris-breadcrumb-item': '',\n 'data-iris-breadcrumb-last': isLast ? 'true' : undefined,\n style: { display: 'inline-flex', alignItems: 'center' },\n },\n // Pass isCurrent=true to the last child so it self-marks aria-current.\n h(\n child.type as never,\n { ...(child.props ?? {}), isCurrent: isLast } as Record<string, unknown>,\n child.children as never,\n ),\n )\n items.push(wrapped)\n if (!isLast) items.push(sep(i))\n })\n\n return h(\n 'nav',\n {\n ...attrs,\n 'aria-label': t('breadcrumb.label'),\n 'data-iris-breadcrumb': '',\n },\n h(\n 'ol',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n },\n },\n items,\n ),\n )\n }\n },\n})\n","import { defineComponent, h } from 'vue'\n\n/**\n * A single breadcrumb crumb. Renders an `<a>` when `href` is given and the\n * crumb is not the last one; otherwise a `<span>`.\n *\n * The `isCurrent` flag (set by the parent IrisBreadcrumb based on position)\n * adds `aria-current=\"page\"` and switches to the non-link rendering.\n */\nexport const IrisBreadcrumbItem = defineComponent({\n name: 'IrisBreadcrumbItem',\n inheritAttrs: false,\n props: {\n href: { type: String, default: '' },\n /** Internal: set by parent IrisBreadcrumb when this is the last item. */\n isCurrent: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const last = props.isCurrent\n const baseStyle: Record<string, string> = {\n color: last ? 'var(--iris-muted)' : 'var(--iris-primary)',\n textDecoration: 'none',\n cursor: last ? 'default' : props.href ? 'pointer' : 'default',\n }\n\n const baseAttrs = {\n ...attrs,\n 'aria-current': last ? 'page' : undefined,\n 'data-iris-breadcrumb-crumb': '',\n style: { ...baseStyle, ...((attrs.style as Record<string, string> | undefined) ?? {}) },\n }\n\n if (props.href && !last) {\n return h('a', { ...baseAttrs, href: props.href }, slots.default?.())\n }\n return h('span', baseAttrs, slots.default?.())\n }\n },\n})\n","import { defineComponent, h, type PropType, type VNode } from 'vue'\nimport type { NavNode } from '@iris-ui-kit/core'\nimport { IrisBreadcrumb } from '../primitives/breadcrumb/Breadcrumb'\nimport { IrisBreadcrumbItem } from '../primitives/breadcrumb/BreadcrumbItem'\nimport { IrisIcon } from '../primitives/icon/Icon'\n\n/**\n * Breadcrumb trail for the admin header, driven by a `NavNode[]` ancestor chain\n * (typically `findNavPath(menus, activeKey)`). The last crumb is the current\n * page (auto-marked `aria-current` by IrisBreadcrumb); earlier crumbs are\n * clickable and emit `select(key, node)` so the host can navigate.\n */\nexport const IrisAdminBreadcrumb = defineComponent({\n name: 'IrisAdminBreadcrumb',\n inheritAttrs: false,\n props: {\n /** Root→current ancestor chain. */\n trail: { type: Array as PropType<NavNode[]>, required: true },\n /** Show each node's icon before its title. */\n showIcon: { type: Boolean, default: true },\n /** Hide the breadcrumb when the trail has a single crumb. */\n hideSingle: { type: Boolean, default: false },\n separator: { type: String, default: '/' },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, attrs }) {\n return () => {\n const trail = props.trail\n if (trail.length === 0 || (props.hideSingle && trail.length === 1)) return null\n\n return h(\n IrisBreadcrumb,\n { ...attrs, separator: props.separator },\n {\n default: () =>\n trail.map((node, i) => {\n const last = i === trail.length - 1\n const content: VNode[] = []\n if (props.showIcon && node.icon) {\n content.push(\n h(IrisIcon, { name: node.icon, size: 14, style: { marginInlineEnd: '4px' } }),\n )\n }\n content.push(h('span', node.title))\n return h(\n IrisBreadcrumbItem,\n {\n key: node.key,\n 'data-iris-admin-crumb': '',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n cursor: last ? 'default' : 'pointer',\n },\n onClick: last ? undefined : () => emit('select', node.key, node),\n },\n { default: () => content },\n )\n }),\n },\n )\n }\n },\n})\n","import { computed, onBeforeUnmount, ref, type ComputedRef, type Ref } from 'vue'\nimport type { TabsNav, TabsNavState, TabItem } from '@iris-ui-kit/core'\n\nexport interface UseTabsNavReturn {\n tabs: ComputedRef<TabItem[]>\n activeKey: ComputedRef<string | undefined>\n /** Keep-alive include-set (composite cache keys of all open tabs). */\n cacheKeys: ComputedRef<string[]>\n open: TabsNav['open']\n activate: TabsNav['activate']\n close: TabsNav['close']\n closeOthers: TabsNav['closeOthers']\n closeAll: TabsNav['closeAll']\n closeLeft: TabsNav['closeLeft']\n closeRight: TabsNav['closeRight']\n refresh: TabsNav['refresh']\n setPinned: TabsNav['setPinned']\n move: TabsNav['move']\n cacheKey: TabsNav['cacheKey']\n}\n\n/**\n * Vue binding for a framework-agnostic {@link TabsNav} store. Pass a shared\n * `createTabsNav()` instance (the host owns it so the tab bar and the keep-alive\n * content can read the same state) and get reactive `tabs` / `activeKey` /\n * `cacheKeys` plus the store's mutators.\n *\n * ```ts\n * const nav = createTabsNav({ tabs: [{ key: 'home', title: 'Home', pinned: true }] })\n * const { tabs, activeKey, open, close } = useTabsNav(nav)\n * ```\n */\nexport function useTabsNav(nav: TabsNav): UseTabsNavReturn {\n const state = ref(nav.getState()) as Ref<TabsNavState>\n const unsubscribe = nav.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n return {\n tabs: computed(() => state.value.tabs),\n activeKey: computed(() => state.value.activeKey),\n cacheKeys: computed(() => state.value.tabs.map((t) => nav.cacheKey(t.key))),\n open: nav.open,\n activate: nav.activate,\n close: nav.close,\n closeOthers: nav.closeOthers,\n closeAll: nav.closeAll,\n closeLeft: nav.closeLeft,\n closeRight: nav.closeRight,\n refresh: nav.refresh,\n setPinned: nav.setPinned,\n move: nav.move,\n cacheKey: nav.cacheKey,\n }\n}\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface DropdownContext {\n open: ComputedRef<boolean>\n setOpen: (value: boolean) => void\n triggerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n}\n\nexport const DropdownContextKey: InjectionKey<DropdownContext> = Symbol('IrisDropdown')\n","import { computed, defineComponent, provide, ref, useId, watch, type PropType } from 'vue'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../machine/useMachine'\nimport { DropdownContextKey } from './context'\n\n/**\n * Dropdown menu root. Composes `createFloatingMachine` (state) with\n * `useFloating` (positioning) and `useDismiss` (close-on-outside / Escape) —\n * all delegated to the standard hooks used by `IrisPopover`. The dropdown\n * panel's semantics differ from a popover: it uses `role=\"menu\"`, supports\n * arrow-key navigation among items, and items auto-close the menu when\n * selected.\n *\n * @example\n * <IrisDropdown placement=\"bottom-end\">\n * <IrisDropdownTrigger as-child>\n * <IrisButton>Actions</IrisButton>\n * </IrisDropdownTrigger>\n * <IrisDropdownMenu>\n * <IrisDropdownItem @select=\"onCopy\">Copy</IrisDropdownItem>\n * <IrisDropdownItem @select=\"onDelete\">Delete</IrisDropdownItem>\n * </IrisDropdownMenu>\n * </IrisDropdown>\n */\nexport const IrisDropdown = defineComponent({\n name: 'IrisDropdown',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n placement: { type: String as PropType<Placement>, default: 'bottom-start' },\n offset: { type: Number, default: 6 },\n },\n emits: {\n 'update:open': (_value: boolean) => true,\n },\n setup(props, { slots, emit }) {\n const isControlled = computed(() => props.open !== undefined)\n const machine = createFloatingMachine(props.defaultOpen ? 'open' : 'closed')\n const { state, send } = useMachine(machine)\n\n watch(\n () => props.open,\n (value) => {\n if (value === undefined) return\n const currentlyOpen = state.value.value === 'open'\n if (value && !currentlyOpen) send({ type: 'OPEN' })\n if (!value && currentlyOpen) send({ type: 'CLOSE' })\n },\n { immediate: true },\n )\n\n const open = computed(() =>\n isControlled.value ? Boolean(props.open) : state.value.value === 'open',\n )\n\n const setOpen = (value: boolean) => {\n if (!isControlled.value) send({ type: value ? 'OPEN' : 'CLOSE' })\n emit('update:open', value)\n }\n\n provide(DropdownContextKey, {\n open,\n setOpen,\n triggerRef: ref(null),\n contentRef: ref(null),\n contentId: useId(),\n placement: props.placement,\n offset: props.offset,\n })\n\n return () => slots.default?.()\n },\n})\n","import { defineComponent, h, inject, type VNode } from 'vue'\nimport { findFirstElement, mergeSlotProps } from '../slot/Slot'\nimport { DropdownContextKey } from './context'\n\nexport const IrisDropdownTrigger = defineComponent({\n name: 'IrisDropdownTrigger',\n inheritAttrs: false,\n props: {\n asChild: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownTrigger must be a descendant of IrisDropdown')\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n ctx.setOpen(!ctx.open.value)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n // Pressing ArrowDown / Enter / Space on the trigger opens AND focuses the menu.\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n ctx.setOpen(true)\n }\n }\n\n const captureRef = (el: unknown) => {\n ctx.triggerRef.value = (el ?? null) as HTMLElement | null\n }\n\n return () => {\n const triggerProps: Record<string, unknown> = {\n 'aria-haspopup': 'menu',\n 'aria-expanded': ctx.open.value ? 'true' : 'false',\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open.value ? 'open' : 'closed',\n onClick,\n onKeydown: onKeyDown,\n ref: captureRef,\n }\n\n if (props.asChild) {\n const root = findFirstElement(slots.default?.())\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDropdownTrigger: as-child requires a single child element')\n }\n return null\n }\n const merged = mergeSlotProps(\n { ...triggerProps, ...attrs },\n (root.props ?? {}) as Record<string, unknown>,\n )\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n\n return h('button', { type: 'button', ...attrs, ...triggerProps }, slots.default?.())\n }\n },\n})\n","import { Teleport, defineComponent, h, inject, nextTick, ref, watch, type PropType } from 'vue'\nimport { matchTypeahead, nextEnabledIndex } from '@iris-ui-kit/core'\nimport { useFloating } from '../floating/useFloating'\nimport { useDismiss } from '../floating/useDismiss'\nimport { DropdownContextKey } from './context'\n\n/**\n * The menu surface. Renders `role=\"menu\"` and handles ArrowUp/Down navigation\n * across child `IrisDropdownItem`s. Closes on Escape and outside pointerdown.\n * Teleports to body by default.\n */\nexport const IrisDropdownMenu = defineComponent({\n name: 'IrisDropdownMenu',\n inheritAttrs: false,\n props: {\n teleport: {\n type: [String, Object, Boolean] as PropType<string | HTMLElement | false>,\n default: 'body',\n },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownMenu must be a descendant of IrisDropdown')\n }\n\n const innerRef = ref<HTMLElement | null>(null)\n watch(innerRef, (el) => {\n ctx.contentRef.value = el\n })\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, innerRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus first menu item on open.\n watch(ctx.open, async (open) => {\n if (open) {\n await nextTick()\n const items = innerRef.value?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')\n items?.[0]?.focus()\n } else {\n // Restore focus to trigger.\n ctx.triggerRef.value?.focus?.()\n }\n })\n\n // Typeahead buffer: accumulated printable chars, reset after a ~500ms pause.\n // Plain closure state — does not need to be reactive.\n const typeahead: { buffer: string; timer: ReturnType<typeof setTimeout> | null } = {\n buffer: '',\n timer: null,\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!ctx.open.value) return\n const items = Array.from(\n innerRef.value?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n const current = document.activeElement as HTMLElement | null\n const index = current ? items.indexOf(current) : -1\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault()\n items[nextEnabledIndex(index, 1, items.length)]?.focus()\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n items[nextEnabledIndex(index, -1, items.length)]?.focus()\n break\n }\n case 'Home':\n event.preventDefault()\n items[0]?.focus()\n break\n case 'End':\n event.preventDefault()\n items[items.length - 1]?.focus()\n break\n case 'Tab':\n // Tab closes the menu and lets focus continue.\n ctx.setOpen(false)\n break\n default: {\n // Typeahead: a single printable char jumps to (and repeated chars\n // cycle through) items whose label matches the accumulated buffer.\n if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n typeahead.buffer += event.key\n if (typeahead.timer) clearTimeout(typeahead.timer)\n typeahead.timer = setTimeout(() => {\n typeahead.buffer = ''\n }, 500)\n const match = matchTypeahead(\n items.map((it) => it.textContent ?? ''),\n typeahead.buffer,\n index,\n )\n if (match >= 0) {\n event.preventDefault()\n items[match]?.focus()\n }\n }\n }\n }\n }\n\n return () => {\n if (!ctx.open.value) return null\n const menuNode = h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n innerRef.value = (el ?? null) as HTMLElement | null\n },\n id: ctx.contentId,\n role: 'menu',\n tabindex: -1,\n 'data-iris-dropdown-menu': '',\n 'data-state': 'open',\n onKeydown: onKeyDown,\n style: {\n ...floatingStyles.value,\n background: 'var(--iris-surface-floating)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md)',\n padding: 'var(--iris-padding-sm)',\n boxShadow: 'var(--iris-shadow-lg)',\n minWidth: '160px',\n outline: 'none',\n zIndex: '1000',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n if (props.teleport === false) return menuNode\n return h(Teleport, { to: props.teleport as string | HTMLElement }, [menuNode])\n }\n },\n})\n","import { defineComponent, h, inject, ref } from 'vue'\nimport { DropdownContextKey } from './context'\n\n/**\n * A single selectable menu item. Emits `select` (with the underlying event)\n * and auto-closes the parent dropdown after selection. Disabled items are\n * skipped by arrow-key navigation in the parent menu.\n */\nexport const IrisDropdownItem = defineComponent({\n name: 'IrisDropdownItem',\n inheritAttrs: false,\n props: {\n disabled: { type: Boolean, default: false },\n /** When true, selecting does NOT close the dropdown. Useful for sub-actions. */\n keepOpen: { type: Boolean, default: false },\n },\n emits: {\n select: (_event: Event) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownItem must be a descendant of IrisDropdownMenu')\n }\n\n const hovered = ref(false)\n\n const fire = (event: Event) => {\n if (props.disabled) return\n emit('select', event)\n if (!props.keepOpen) ctx.setOpen(false)\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n fire(event)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n fire(event)\n }\n }\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n role: 'menuitem',\n tabindex: props.disabled ? -1 : 0,\n 'aria-disabled': props.disabled ? 'true' : undefined,\n 'data-iris-dropdown-item': '',\n 'data-disabled': props.disabled ? '' : undefined,\n onClick,\n onKeydown: onKeyDown,\n onPointerenter: () => (hovered.value = true),\n onPointerleave: () => (hovered.value = false),\n onFocus: () => (hovered.value = true),\n onBlur: () => (hovered.value = false),\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm)',\n padding: 'var(--iris-padding-sm, 6px) var(--iris-padding-md)',\n borderRadius: 'var(--iris-radius-sm)',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n opacity: props.disabled ? '0.5' : '1',\n background:\n hovered.value && !props.disabled ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n outline: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n transition: 'background-color 80ms ease',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n },\n})\n\n/** Visual divider between groups of items. */\nexport const IrisDropdownSeparator = defineComponent({\n name: 'IrisDropdownSeparator',\n inheritAttrs: false,\n setup(_, { attrs }) {\n return () =>\n h('div', {\n ...attrs,\n role: 'separator',\n 'data-iris-dropdown-separator': '',\n style: {\n height: '1px',\n background: 'var(--iris-border)',\n margin: '4px 0',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n })\n },\n})\n","import { defineComponent, h, nextTick, type PropType, type VNode } from 'vue'\nimport { isClosable, type TabsNav, type TabItem } from '@iris-ui-kit/core'\nimport { useTabsNav } from './useTabsNav'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { IrisDropdown } from '../primitives/dropdown/Dropdown'\nimport { IrisDropdownTrigger } from '../primitives/dropdown/DropdownTrigger'\nimport { IrisDropdownMenu } from '../primitives/dropdown/DropdownMenu'\nimport { IrisDropdownItem, IrisDropdownSeparator } from '../primitives/dropdown/DropdownItem'\nimport { IrisSortable } from '../behaviors/Sortable'\nimport { useI18n } from '../i18n'\n\n/**\n * Vben-style multi-tab bar over a shared {@link TabsNav} store. Each open page\n * is a closable chip; clicking activates (`@change`), the × closes, and a\n * trailing actions dropdown runs Refresh / Close / Close-others / Close-all on\n * the active tab. The store owns the tab list + active key; the host watches it\n * to sync routing + keep-alive.\n *\n * Keyboard (WAI-ARIA tablist, automatic activation): ←/→ move + activate the\n * adjacent tab, Home/End jump to the first/last, Delete/Backspace closes the\n * focused tab. Roving tabindex keeps a single tab stop.\n */\nexport const IrisAdminTabs = defineComponent({\n name: 'IrisAdminTabs',\n inheritAttrs: false,\n props: {\n /** Shared tabs store (from `createTabsNav`). */\n nav: { type: Object as PropType<TabsNav>, required: true },\n reorderable: { type: Boolean, default: true },\n },\n emits: {\n change: (_key: string) => true,\n close: (_key: string) => true,\n refresh: (_key: string) => true,\n reorder: (_tabs: TabItem[]) => true,\n },\n setup(props, { emit, attrs }) {\n const { t: tr } = useI18n()\n const t = useTabsNav(props.nav)\n\n const activate = (key: string): void => {\n props.nav.activate(key)\n emit('change', key)\n }\n const close = (key: string): void => {\n props.nav.close(key)\n emit('close', key)\n }\n const refresh = (key: string): void => {\n props.nav.refresh(key)\n emit('refresh', key)\n }\n const reorder = (tabs: TabItem[]): void => {\n tabs.forEach((tab, index) => props.nav.move(tab.key, index))\n emit('reorder', tabs)\n }\n\n const focusTab = (root: HTMLElement | null, key: string | undefined): void => {\n if (!root || !key) return\n const labels = root.querySelectorAll<HTMLElement>('[data-iris-tab-label]')\n labels.forEach((el) => {\n if (el.getAttribute('data-key') === key) el.focus()\n })\n }\n\n const onTablistKeydown = (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const tabs = t.tabs.value\n const idx = tabs.findIndex((x) => x.key === t.activeKey.value)\n if (idx < 0 || tabs.length === 0) return\n\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const cur = tabs[idx]\n if (cur && isClosable(cur)) {\n e.preventDefault()\n close(cur.key)\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n }\n return\n }\n\n let target = -1\n if (e.key === 'ArrowRight') target = (idx + 1) % tabs.length\n else if (e.key === 'ArrowLeft') target = (idx - 1 + tabs.length) % tabs.length\n else if (e.key === 'Home') target = 0\n else if (e.key === 'End') target = tabs.length - 1\n else return\n\n e.preventDefault()\n const key = tabs[target]?.key\n if (!key) return\n activate(key)\n void nextTick(() => focusTab(root, key))\n }\n\n const chip = (tab: TabItem): VNode => {\n const active = tab.key === t.activeKey.value\n const closable = isClosable(tab)\n const labelChildren: VNode[] = []\n if (tab.icon) labelChildren.push(h(IrisIcon, { name: tab.icon, size: 14 }))\n labelChildren.push(h('span', { style: { whiteSpace: 'nowrap' } }, tab.title))\n\n const label = h(\n 'button',\n {\n type: 'button',\n role: 'tab',\n 'data-iris-tab-label': '',\n 'data-key': tab.key,\n 'aria-selected': active ? 'true' : 'false',\n 'aria-current': active ? 'page' : undefined,\n tabindex: active ? 0 : -1,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n fontSize: 'var(--iris-font-size-sm, 13px)',\n cursor: 'pointer',\n padding: '0',\n },\n onClick: () => activate(tab.key),\n },\n labelChildren,\n )\n\n const closeBtn = closable\n ? h(\n 'button',\n {\n type: 'button',\n tabindex: -1,\n 'data-iris-tab-close': '',\n 'aria-label': tr('admin.closeTab', { title: tab.title }),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n border: 'none',\n borderRadius: '4px',\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: '0',\n opacity: '0.6',\n },\n onClick: (e: Event) => {\n e.stopPropagation()\n close(tab.key)\n const root = (e.currentTarget as HTMLElement).closest(\n '[role=\"tablist\"]',\n ) as HTMLElement | null\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n },\n },\n [h(IrisIcon, { name: 'x', size: 12 })],\n )\n : tab.pinned\n ? h(IrisIcon, { name: 'check-circle', size: 12, style: { opacity: '0.5' } })\n : null\n\n return h(\n 'div',\n {\n key: tab.key,\n 'data-iris-tab': '',\n 'data-active': active ? 'true' : undefined,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding:\n 'var(--iris-padding-sm, 6px) var(--iris-space-xs, 8px) var(--iris-padding-sm, 6px) var(--iris-space-sm, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${active ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n background: active ? 'var(--iris-primary)' : 'var(--iris-surface)',\n color: active ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n flex: '0 0 auto',\n },\n },\n [label, closeBtn],\n )\n }\n\n const action = (label: string, run: () => void, disabled = false): VNode =>\n h(IrisDropdownItem, { disabled, onSelect: run }, { default: () => label })\n\n const actionsMenu = (): VNode =>\n h(IrisDropdown, null, {\n default: () => [\n h(\n IrisDropdownTrigger,\n {\n 'aria-label': tr('admin.tabActions'),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n },\n },\n {\n default: () => h(IrisIcon, { name: 'more-horizontal', size: 16 }),\n },\n ),\n h(IrisDropdownMenu, null, {\n default: () => {\n const key = t.activeKey.value\n if (!key) return [action('No active tab', () => {}, true)]\n return [\n action(tr('admin.refresh'), () => refresh(key)),\n action(tr('admin.close'), () => close(key)),\n h(IrisDropdownSeparator),\n action(tr('admin.closeLeft'), () => props.nav.closeLeft(key)),\n action(tr('admin.closeRight'), () => props.nav.closeRight(key)),\n action(tr('admin.closeOthers'), () => props.nav.closeOthers(key)),\n action(tr('admin.closeAll'), () => props.nav.closeAll()),\n ]\n },\n }),\n ],\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-tabs': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n padding: 'var(--iris-space-xs, 8px) var(--iris-space-sm, 12px)',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'div',\n {\n 'data-iris-tabs-scroll': '',\n role: 'tablist',\n 'aria-label': tr('admin.openPages'),\n onKeydown: onTablistKeydown,\n style: {\n overflowX: 'auto',\n flex: '1',\n },\n },\n [\n h(\n IrisSortable,\n {\n items: t.tabs.value,\n getKey: (item: unknown) => (item as TabItem).key,\n onReorder: (items: unknown[]) => reorder(items as TabItem[]),\n disabled: !props.reorderable,\n orientation: 'horizontal',\n style: {\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n width: 'max-content',\n },\n },\n { default: () => t.tabs.value.map((tab) => chip(tab)) },\n ),\n ],\n ),\n actionsMenu(),\n ],\n )\n },\n})\n","import { computed, watch, watchEffect, type ComputedRef, type MaybeRefOrGetter, toValue } from 'vue'\nimport {\n createAdminShell,\n findNavPath,\n type AdminShell,\n type NavNode,\n type TabsNav,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseAdminShellConfig {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: MaybeRefOrGetter<NavNode[]>\n /** Active page key (controlled); undefined = uncontrolled. */\n activeKey?: MaybeRefOrGetter<string | undefined>\n defaultActiveKey?: string\n onActiveKeyChange?: (key: string) => void\n /** Fired whenever a nav node / tab becomes active, with the resolved leaf node. */\n onSelect?: (key: string, node: NavNode) => void\n /** Optional shared tabs store; the shell opens/reconciles tabs through it. */\n tabs?: TabsNav\n}\n\nexport interface UseAdminShellReturn {\n /** Current active leaf key ('' when none). */\n activeKey: ComputedRef<string>\n /** Select a nav node: a branch redirects to its first leaf, opens its tab. */\n navigate: (node: NavNode) => void\n /** Reconcile when the active TAB changed (e.g. a close picked a neighbor). */\n syncFromTab: (key: string) => void\n /** Ancestor→node breadcrumb trail of the active key. */\n breadcrumb: ComputedRef<NavNode[]>\n}\n\n/**\n * Vue binding for the framework-agnostic {@link createAdminShell} controller —\n * the menu→tab→active-key wiring that every AdminLayout used to re-implement\n * byte-for-byte. The composable owns the controlled/uncontrolled `activeKey`\n * reconciliation (idiomatic to Vue) and delegates navigate / syncFromTab /\n * branch-resolution / breadcrumb to the shared core shell.\n *\n * Controlled mode renders from the prop directly (no flicker); a watcher keeps\n * the shell's guard-base synced to the prop so the active-change callback fires\n * with the same semantics as before.\n */\nexport function useAdminShell(config: UseAdminShellConfig): UseAdminShellReturn {\n const { defaultActiveKey, onActiveKeyChange, onSelect, tabs } = config\n\n const menus = (): NavNode[] => toValue(config.menus)\n const activeKeyProp = (): string | undefined => toValue(config.activeKey)\n const activeControlled = (): boolean => activeKeyProp() !== undefined\n\n // The shell instance is stable for the composable's lifetime; it reads the\n // latest callbacks via the closure-captured config.\n const shell: AdminShell = createAdminShell({\n menus: menus(),\n defaultActiveKey: activeKeyProp() ?? defaultActiveKey,\n tabs,\n onActiveChange: (key, node) => {\n onActiveKeyChange?.(key)\n if (node) onSelect?.(key, node)\n },\n })\n const state = useStore(shell.store)\n\n // Keep the shell reconciling against the live menu tree.\n watch(menus, (next) => shell.setMenus(next), { flush: 'sync' })\n\n // Controlled: keep the shell's guard-base aligned with the prop (silent — no\n // callback), so navigate fires the active-change callback exactly as before\n // even when a controlled parent does not write the new key back.\n watchEffect(() => {\n const prop = activeKeyProp()\n if (prop !== undefined && shell.getActiveKey() !== prop) {\n shell.store.setState({ activeKey: prop })\n }\n })\n\n const activeKey = computed(() =>\n activeControlled() ? (activeKeyProp() ?? '') : (state.value.activeKey ?? ''),\n )\n\n return {\n activeKey,\n navigate: shell.navigate,\n syncFromTab: shell.syncFromTab,\n breadcrumb: computed(() => (activeKey.value ? findNavPath(menus(), activeKey.value) : [])),\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { type NavNode, type TabsNav } from '@iris-ui-kit/core'\nimport { IrisSidebarLayout } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisNavMenu } from './NavMenu'\nimport { IrisAdminBreadcrumb } from './AdminBreadcrumb'\nimport { IrisAdminTabs } from './AdminTabs'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { useAdminShell } from './useAdminShell'\n\nexport type IrisAdminLayoutMode = 'sidebar' | 'horizontal' | 'full-content'\nexport type IrisAdminMenuAlign = 'start' | 'center' | 'end'\nexport type IrisAdminContentWidth = 'fluid' | 'centered'\nexport type IrisAdminContentHeight = 'auto' | 'viewport'\n\n/**\n * The CMS / admin shell — a Vben-style, router-agnostic, data-driven layout that\n * composes IrisSidebarLayout + IrisHeaderLayout with the admin nav pieces. One\n * `menus` tree drives the collapsible sidebar nav, the header breadcrumb, and\n * (when a `tabs` store is passed) the multi-tab bar; `activeKey` is the current\n * page (v-model). The host owns routing: react to `@select` / `update:activeKey`\n * and render the page in the default slot (wrap it in `<KeepAlive>` keyed by\n * `tabs.cacheKey` for Vben-style tab caching).\n *\n * Slots: `logo({ collapsed })`, `toolbar` (header end), default `({ activeKey })`,\n * `footer`. Modes: `sidebar` (default) and `full-content` (chrome hidden).\n */\nexport const IrisAdminLayout = defineComponent({\n name: 'IrisAdminLayout',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: { type: Array as PropType<NavNode[]>, required: true },\n /** Active page key (v-model:activeKey). */\n activeKey: { type: String, default: undefined },\n /** Initial active page key when `activeKey` is uncontrolled. */\n defaultActiveKey: { type: String, default: undefined },\n /** Sidebar collapsed (v-model:collapsed); undefined = uncontrolled. */\n collapsed: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n mode: { type: String as PropType<IrisAdminLayoutMode>, default: 'sidebar' },\n /** Brand text shown next to the logo when expanded. */\n appTitle: { type: String, default: 'Iris Admin' },\n /** Optional shared tabs store; when present the tab bar is rendered. */\n tabs: { type: Object as PropType<TabsNav>, default: undefined },\n showTabs: { type: Boolean, default: true },\n showBreadcrumb: { type: Boolean, default: true },\n stickyHeader: { type: Boolean, default: true },\n stickyTabs: { type: Boolean, default: true },\n menuAlign: { type: String as PropType<IrisAdminMenuAlign>, default: 'start' },\n contentWidth: { type: String as PropType<IrisAdminContentWidth>, default: 'fluid' },\n contentHeight: {\n type: String as PropType<IrisAdminContentHeight>,\n default: 'viewport',\n },\n sidebarWidth: { type: [Number, String] as PropType<number | string>, default: 240 },\n collapsedWidth: { type: [Number, String] as PropType<number | string>, default: 64 },\n },\n emits: {\n 'update:activeKey': (_key: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, slots, attrs }) {\n const { t } = useI18n()\n\n const {\n activeKey,\n navigate,\n syncFromTab,\n breadcrumb: trail,\n } = useAdminShell({\n menus: () => props.menus,\n activeKey: () => props.activeKey,\n defaultActiveKey: props.defaultActiveKey,\n tabs: props.tabs,\n onActiveKeyChange: (key) => emit('update:activeKey', key),\n onSelect: (key, node) => emit('select', key, node),\n })\n\n const collapseControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n collapseControlled.value ? (props.collapsed as boolean) : internalCollapsed.value,\n )\n const setCollapsed = (value: boolean): void => {\n if (!collapseControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n // NavMenu / Breadcrumb emit (key, node); route the node through navigate.\n const onSelect = (_key: string, node: NavNode): void => navigate(node)\n\n // Tab activation (incl. close → neighbor) is the store's job; mirror it into\n // the layout's active key so the breadcrumb + content stay in sync.\n if (props.tabs) {\n const tabsActive = ref(props.tabs.getState().activeKey)\n const unsubscribe = props.tabs.subscribe((s) => {\n tabsActive.value = s.activeKey\n })\n onBeforeUnmount(unsubscribe)\n watch(tabsActive, (key) => {\n if (key) syncFromTab(key)\n })\n }\n\n const renderLogo = (state: { collapsed: boolean }): VNode | VNode[] => {\n if (slots.logo) return slots.logo(state) as VNode[]\n return h(\n 'div',\n {\n 'data-iris-admin-logo': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-sm, 12px)',\n height: '52px',\n padding: '0 var(--iris-space-md, 16px)',\n color: 'var(--iris-foreground)',\n fontWeight: '700',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flexShrink: 0,\n },\n },\n [\n h(\n 'span',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n flexShrink: 0,\n },\n },\n [h(IrisIcon, { name: 'menu', size: 18 })],\n ),\n state.collapsed ? null : h('span', props.appTitle),\n ],\n )\n }\n\n const collapseToggle = (): VNode =>\n h(\n 'button',\n {\n type: 'button',\n 'data-iris-admin-collapse': '',\n 'aria-label': collapsed.value ? t('admin.expandSidebar') : t('admin.collapseSidebar'),\n 'aria-pressed': collapsed.value ? 'true' : 'false',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n flexShrink: 0,\n },\n onClick: () => setCollapsed(!collapsed.value),\n },\n [h(IrisIcon, { name: collapsed.value ? 'chevron-right' : 'menu', size: 18 })],\n )\n\n const renderHeaderBar = (): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n height: '52px',\n padding: '0 16px',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n },\n },\n [\n collapseToggle(),\n props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n h('div', { style: { flex: '1' } }),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n )\n\n const renderContent = (horizontal = false): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-content': '',\n 'data-width': props.contentWidth,\n style: {\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: props.contentWidth === 'centered' ? '72rem' : undefined,\n marginInline: props.contentWidth === 'centered' ? 'auto' : undefined,\n padding: '16px',\n },\n },\n [\n horizontal && props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n ...(slots.default?.({ activeKey: activeKey.value }) ?? []),\n ],\n )\n\n const renderTabs = (): VNode | null =>\n props.tabs && props.showTabs\n ? h(\n 'div',\n {\n 'data-iris-admin-tabs-region': '',\n 'data-sticky': props.stickyTabs ? 'true' : undefined,\n style: {\n position: props.stickyTabs && !props.stickyHeader ? 'sticky' : 'relative',\n top: '0',\n zIndex: '49',\n },\n },\n [h(IrisAdminTabs, { nav: props.tabs })],\n )\n : null\n\n return () => {\n if (props.mode === 'full-content') {\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'full-content',\n style: {\n height: '100%',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.({ activeKey: activeKey.value }) ?? [],\n )\n }\n\n if (props.mode === 'horizontal') {\n const justifyContent =\n props.menuAlign === 'center'\n ? 'center'\n : props.menuAlign === 'end'\n ? 'flex-end'\n : 'flex-start'\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'horizontal',\n style: {\n height: props.contentHeight === 'viewport' ? '100vh' : 'auto',\n minHeight: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n minHeight: '52px',\n padding: '0 16px',\n background: 'var(--iris-background)',\n },\n },\n [\n renderLogo({ collapsed: false }),\n h(\n 'div',\n {\n 'data-iris-admin-topnav': '',\n style: {\n display: 'flex',\n flex: '1',\n minWidth: '0',\n justifyContent,\n },\n },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n orientation: 'horizontal',\n onSelect,\n }),\n ],\n ),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n ),\n renderTabs(),\n ]),\n default: () => renderContent(true),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n ],\n )\n }\n\n return h(\n IrisSidebarLayout,\n {\n ...attrs,\n collapsed: collapsed.value,\n width: props.sidebarWidth,\n collapsedWidth: props.collapsedWidth,\n 'onUpdate:collapsed': setCollapsed,\n 'data-iris-admin-layout': '',\n 'data-mode': 'sidebar',\n style: {\n height: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n {\n sidebar: (state: { collapsed: boolean }) =>\n h(\n 'div',\n {\n 'data-iris-admin-sidebar': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n borderInlineEnd: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n [\n renderLogo(state),\n h(\n 'div',\n { style: { flex: '1', overflowY: 'auto', overflowX: 'hidden', padding: '8px' } },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n collapsed: state.collapsed,\n onSelect,\n }),\n ],\n ),\n ],\n ),\n default: () =>\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [renderHeaderBar(), renderTabs()]),\n default: () => renderContent(),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n },\n )\n }\n },\n})\n\n/** Public input/event surface inferred from the runtime Vue component. */\nexport type IrisAdminLayoutProps = InstanceType<typeof IrisAdminLayout>['$props']\n","import { computed, onBeforeUnmount, onMounted, ref, type ComputedRef, type Ref } from 'vue'\nimport type { AdminPreferences, AdminPreferencesState } from '@iris-ui-kit/core'\n\nexport interface UseAdminPreferencesReturn {\n state: ComputedRef<AdminPreferencesState>\n set: AdminPreferences['set']\n patch: AdminPreferences['patch']\n reset: AdminPreferences['reset']\n hydrate: AdminPreferences['hydrate']\n flush: AdminPreferences['flush']\n}\n\n/** Thin Vue bridge for the framework-agnostic admin preferences controller. */\nexport function useAdminPreferences(\n preferences: AdminPreferences,\n hydrate = true,\n): UseAdminPreferencesReturn {\n const state = ref(preferences.getState()) as Ref<AdminPreferencesState>\n const unsubscribe = preferences.subscribe((next) => {\n state.value = next\n })\n onMounted(() => {\n if (hydrate) void preferences.hydrate()\n })\n onBeforeUnmount(unsubscribe)\n return {\n state: computed(() => state.value),\n set: preferences.set,\n patch: preferences.patch,\n reset: preferences.reset,\n hydrate: preferences.hydrate,\n flush: preferences.flush,\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/layouts/Grid.ts"],"names":[],"mappings":";;;AAKA,SAAS,cAAA,CAAe,SAA0B,WAAA,EAA6B;AAC7E,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,UAAU,OAAO,CAAA,iBAAA,CAAA;AACzD,EAAA,IAAI,OAAA,KAAY,UAAA,EAAY,OAAO,CAAA,wBAAA,EAA2B,WAAW,CAAA,OAAA,CAAA;AACzE,EAAA,IAAI,OAAA,KAAY,WAAA,EAAa,OAAO,CAAA,yBAAA,EAA4B,WAAW,CAAA,OAAA,CAAA;AAC3E,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,aAAa,OAAA,EAAkC;AACtD,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,GAAG,OAAO,CAAA,EAAA,CAAA;AAClD,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,IAAA,IAAQ,YAAY,IAAA,EAAM;AAC5D,IAAA,OAAO,kBAAkB,OAAO,CAAA,CAAA,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,OAAA;AACT;AAaO,IAAM,WAAW,eAAA,CAAgB;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,UAAA,EAAW;AAAA;AAAA,IAEpF,WAAA,EAAa,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAA,EAAQ;AAAA;AAAA,IAE9C,MAAA,EAAQ,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAG,SAAS,MAAA,EAAU;AAAA;AAAA,IAErD,SAAA,EAAW,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAG,SAAS,MAAA,EAAU;AAAA;AAAA,IAExD,GAAA,EAAK,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAG,SAAS,IAAA,EAAK;AAAA,IAC7C,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC1C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAQ,SAAiC,MAAM;AACnD,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,CAAM,OAAA,EAAS,MAAM,WAAW,CAAA;AACnE,MAAA,MAAM,MAAA,GACJ,KAAA,CAAM,MAAA,KAAW,MAAA,GAAY,YAAA,CAAa,MAAM,MAAM,CAAA,GAAI,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AAClF,MAAA,MAAM,MAAA,GACJ,KAAA,CAAM,SAAA,KAAc,MAAA,GAAY,YAAA,CAAa,MAAM,SAAS,CAAA,GAAI,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AACxF,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA,CAAM,MAAA,GAAS,aAAA,GAAgB,MAAA;AAAA,QACxC,mBAAA,EAAqB,WAAA;AAAA,QACrB,MAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACb;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MACL,CAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,gBAAA,EAAkB,EAAA;AAAA,QAClB,wBAAA,EAA0B,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AAAA,QAC9C,KAAA,EAAO,EAAE,GAAG,KAAA,CAAM,OAAO,GAAK,KAAA,CAAM,KAAA,IAAgD,EAAC;AAAG,OAC1F;AAAA,MACA,MAAM,OAAA;AAAU,KAClB;AAAA,EACJ;AACF,CAAC","file":"chunk-IN3DQ55U.js","sourcesContent":["import { computed, defineComponent, h, type PropType } from 'vue'\n\nexport type IrisGridColumns =\n number | 'auto-fit' | 'auto-fill' | string /* raw grid-template-columns value */\n\nfunction resolveColumns(columns: IrisGridColumns, minColWidth: string): string {\n if (typeof columns === 'number') return `repeat(${columns}, minmax(0, 1fr))`\n if (columns === 'auto-fit') return `repeat(auto-fit, minmax(${minColWidth}, 1fr))`\n if (columns === 'auto-fill') return `repeat(auto-fill, minmax(${minColWidth}, 1fr))`\n return columns\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\n/**\n * Two-dimensional grid layout primitive. Three column modes:\n *\n * - **Fixed integer** — `columns={3}` → three equal-width columns.\n * - **Responsive auto-fit** — `columns=\"auto-fit\"` + `minColWidth` → fluid\n * grid where columns add/remove with container width. Most common.\n * - **Raw CSS** — pass any `grid-template-columns` string.\n *\n * Spacing accepts token shorthand (`sm` / `md` / `lg`), numeric px, or any\n * CSS length string. `gap` is a shortcut for both row + column gap.\n */\nexport const IrisGrid = defineComponent({\n name: 'IrisGrid',\n inheritAttrs: false,\n props: {\n columns: { type: [Number, String] as PropType<IrisGridColumns>, default: 'auto-fit' },\n /** Min width per column for `auto-fit` / `auto-fill`. */\n minColWidth: { type: String, default: '200px' },\n /** Row gap (token / px / CSS). */\n rowGap: { type: [String, Number], default: undefined },\n /** Column gap (token / px / CSS). */\n columnGap: { type: [String, Number], default: undefined },\n /** Shorthand for both row + column gap. Overridden if rowGap/columnGap given. */\n gap: { type: [String, Number], default: 'md' },\n inline: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n const style = computed<Record<string, string>>(() => {\n const colTemplate = resolveColumns(props.columns, props.minColWidth)\n const rowGap =\n props.rowGap !== undefined ? toCssSpacing(props.rowGap) : toCssSpacing(props.gap)\n const colGap =\n props.columnGap !== undefined ? toCssSpacing(props.columnGap) : toCssSpacing(props.gap)\n return {\n display: props.inline ? 'inline-grid' : 'grid',\n gridTemplateColumns: colTemplate,\n rowGap,\n columnGap: colGap,\n }\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-grid': '',\n 'data-iris-grid-columns': String(props.columns),\n style: { ...style.value, ...((attrs.style as Record<string, string> | undefined) ?? {}) },\n },\n slots.default?.(),\n )\n },\n})\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { IrisSortable } from './chunk-W3B6E5GN.js';
|
|
1
2
|
import { defineComponent, ref, computed, h, onMounted, onUpdated, watchEffect, onBeforeUnmount, watch, onScopeDispose } from 'vue';
|
|
2
|
-
import { createLongPress } from '@iris-ui-kit/core';
|
|
3
|
+
import { createLongPress, hasComposableFeatures, composeFeatures } from '@iris-ui-kit/core';
|
|
3
4
|
|
|
4
|
-
// src/behaviors/Resizable.ts
|
|
5
5
|
function useDrag(options) {
|
|
6
6
|
const buttons = options.buttons ?? [0];
|
|
7
7
|
let startX = 0;
|
|
@@ -543,7 +543,55 @@ var IrisLongPress = defineComponent({
|
|
|
543
543
|
);
|
|
544
544
|
}
|
|
545
545
|
});
|
|
546
|
+
var IrisCompose = defineComponent({
|
|
547
|
+
name: "IrisCompose",
|
|
548
|
+
props: {
|
|
549
|
+
resizable: { type: Object, default: void 0 },
|
|
550
|
+
movable: { type: Object, default: void 0 },
|
|
551
|
+
sortable: { type: Object, default: void 0 },
|
|
552
|
+
clickOutside: { type: Object, default: void 0 },
|
|
553
|
+
hotkey: { type: Object, default: void 0 }
|
|
554
|
+
},
|
|
555
|
+
setup(props, { slots }) {
|
|
556
|
+
return () => {
|
|
557
|
+
const features = {
|
|
558
|
+
resizable: props.resizable,
|
|
559
|
+
movable: props.movable,
|
|
560
|
+
sortable: props.sortable,
|
|
561
|
+
clickOutside: props.clickOutside,
|
|
562
|
+
hotkey: props.hotkey
|
|
563
|
+
};
|
|
564
|
+
if (!hasComposableFeatures(features)) return slots.default?.();
|
|
565
|
+
const active = composeFeatures(features);
|
|
566
|
+
let node = slots.default?.() ?? [];
|
|
567
|
+
for (const feature of active) {
|
|
568
|
+
switch (feature) {
|
|
569
|
+
case "hotkey":
|
|
570
|
+
if (props.hotkey) node = [h(IrisHotkey, props.hotkey, { default: () => node })];
|
|
571
|
+
break;
|
|
572
|
+
case "clickOutside":
|
|
573
|
+
if (props.clickOutside)
|
|
574
|
+
node = [h(IrisClickOutside, props.clickOutside, { default: () => node })];
|
|
575
|
+
break;
|
|
576
|
+
case "sortable":
|
|
577
|
+
if (props.sortable)
|
|
578
|
+
node = [h(IrisSortable, props.sortable, { default: () => node })];
|
|
579
|
+
break;
|
|
580
|
+
case "movable":
|
|
581
|
+
if (props.movable)
|
|
582
|
+
node = [h(IrisMovable, props.movable, { default: () => node })];
|
|
583
|
+
break;
|
|
584
|
+
case "resizable":
|
|
585
|
+
if (props.resizable)
|
|
586
|
+
node = [h(IrisResizable, props.resizable, { default: () => node })];
|
|
587
|
+
break;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
return node;
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
});
|
|
546
594
|
|
|
547
|
-
export { IrisClickOutside, IrisHotkey, IrisLongPress, IrisMovable, IrisResizable, useDrag };
|
|
548
|
-
//# sourceMappingURL=chunk-
|
|
549
|
-
//# sourceMappingURL=chunk-
|
|
595
|
+
export { IrisClickOutside, IrisCompose, IrisHotkey, IrisLongPress, IrisMovable, IrisResizable, useDrag };
|
|
596
|
+
//# sourceMappingURL=chunk-IOMKC5OI.js.map
|
|
597
|
+
//# sourceMappingURL=chunk-IOMKC5OI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/drag/useDrag.ts","../src/behaviors/Resizable.ts","../src/behaviors/Movable.ts","../src/behaviors/Hotkey.ts","../src/behaviors/ClickOutside.ts","../src/behaviors/LongPress.ts","../src/behaviors/Compose.ts"],"names":["defineComponent","computed","ref","h","watchEffect","onBeforeUnmount","watch"],"mappings":"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","file":"chunk-IOMKC5OI.js","sourcesContent":["import { onScopeDispose, watch, type Ref } from 'vue'\n\nexport interface DragState {\n /** Pointer x in client coordinates. */\n x: number\n /** Pointer y in client coordinates. */\n y: number\n /** Cumulative delta from pointerdown. */\n dx: number\n /** Cumulative delta from pointerdown. */\n dy: number\n /** The active pointer event. */\n event: PointerEvent\n}\n\nexport interface UseDragOptions {\n /** The element the drag handle is bound to. */\n handle: Ref<HTMLElement | null | undefined>\n /** Drag is only initiated for these pointer button(s). Default `[0]` (primary). */\n buttons?: number[]\n /** Called on pointerdown that starts a drag. Return `false` to cancel. */\n onStart?: (state: DragState) => boolean | void\n /** Called on every pointermove while dragging. */\n onDrag?: (state: DragState) => void\n /** Called on pointerup or pointercancel. */\n onEnd?: (state: DragState) => void\n /** Disable the drag. */\n disabled?: Ref<boolean | undefined>\n}\n\n/**\n * Bind pointer-driven drag handlers to an element. Uses `setPointerCapture`\n * so the drag continues even if the pointer leaves the element. Cancels on\n * `pointercancel` (e.g. browser interruption).\n *\n * Pure pointer events — works for mouse, touch, and pen. The handle element\n * gets `touchAction: 'none'` automatically while a drag is in progress to\n * prevent scrolling interference on touch devices.\n *\n * @example\n * const handleRef = ref<HTMLElement | null>(null)\n * useDrag({\n * handle: handleRef,\n * onDrag: ({ dx }) => (offsetX.value = startOffset + dx),\n * })\n */\nexport function useDrag(options: UseDragOptions): void {\n const buttons = options.buttons ?? [0]\n let startX = 0\n let startY = 0\n let active: PointerEvent | null = null\n\n const onPointerDown = (event: PointerEvent) => {\n if (options.disabled?.value) return\n if (!buttons.includes(event.button)) return\n const handle = options.handle.value\n if (!handle) return\n\n startX = event.clientX\n startY = event.clientY\n const state: DragState = {\n x: event.clientX,\n y: event.clientY,\n dx: 0,\n dy: 0,\n event,\n }\n const result = options.onStart?.(state)\n if (result === false) return\n active = event\n handle.setPointerCapture?.(event.pointerId)\n handle.style.touchAction = 'none'\n event.preventDefault()\n }\n\n const onPointerMove = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n options.onDrag?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n }\n\n const onPointerEnd = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n const handle = options.handle.value\n handle?.releasePointerCapture?.(event.pointerId)\n if (handle) handle.style.touchAction = ''\n options.onEnd?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n active = null\n }\n\n const attach = (el: HTMLElement) => {\n el.addEventListener('pointerdown', onPointerDown)\n el.addEventListener('pointermove', onPointerMove)\n el.addEventListener('pointerup', onPointerEnd)\n el.addEventListener('pointercancel', onPointerEnd)\n }\n\n const detach = (el: HTMLElement) => {\n el.removeEventListener('pointerdown', onPointerDown)\n el.removeEventListener('pointermove', onPointerMove)\n el.removeEventListener('pointerup', onPointerEnd)\n el.removeEventListener('pointercancel', onPointerEnd)\n }\n\n watch(\n options.handle,\n (el, prev) => {\n if (prev) detach(prev)\n if (el) attach(el)\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(() => {\n const el = options.handle.value\n if (el) detach(el)\n })\n}\n","import { computed, defineComponent, h, ref, type PropType, type Ref } from 'vue'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport type IrisResizableHandle =\n 'top' | 'right' | 'bottom' | 'left' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\nexport interface IrisResizableSize {\n width: number\n height: number\n}\n\nconst ALL_HANDLES: IrisResizableHandle[] = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n]\n\nconst HANDLE_CURSORS: Record<IrisResizableHandle, string> = {\n top: 'ns-resize',\n right: 'ew-resize',\n bottom: 'ns-resize',\n left: 'ew-resize',\n 'top-left': 'nwse-resize',\n 'top-right': 'nesw-resize',\n 'bottom-left': 'nesw-resize',\n 'bottom-right': 'nwse-resize',\n}\n\nfunction handlePosition(handle: IrisResizableHandle): Record<string, string> {\n const s: Record<string, string> = { position: 'absolute' }\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n if (t) s.top = '-4px'\n if (b) s.bottom = '-4px'\n if (l) s.left = '-4px'\n if (r) s.right = '-4px'\n const isCorner = (t || b) && (l || r)\n if (isCorner) {\n s.width = '12px'\n s.height = '12px'\n } else if (t || b) {\n s.left = '0'\n s.right = '0'\n s.height = '8px'\n } else {\n s.top = '0'\n s.bottom = '0'\n s.width = '8px'\n }\n s.cursor = HANDLE_CURSORS[handle]\n return s\n}\n\n/**\n * Internal per-handle sub-component (NOT exported). Declared at module level\n * so its type identity is stable across parent re-renders: each handle\n * instance's `setup()` — and therefore its single `useDrag` call — runs\n * exactly once. The previous implementation invoked `useDrag` from a\n * per-render `renderHandle()` helper with a fresh ref each time; because Vue\n * never re-invokes old *function* refs on patch, those listener sets were\n * never detached and emitted duplicates from the second drag onward.\n */\nconst ResizableHandle = defineComponent({\n name: 'ResizableHandle',\n props: {\n handle: { type: String as PropType<IrisResizableHandle>, required: true },\n disabled: { type: Boolean, default: false },\n keepAspect: { type: Boolean, default: false },\n minWidth: { type: Number, default: 40 },\n minHeight: { type: Number, default: 40 },\n maxWidth: { type: Number, default: Infinity },\n maxHeight: { type: Number, default: Infinity },\n /** Stable computed ref from the parent; read only (never mutated). */\n sizeRef: { type: Object as PropType<Ref<IrisResizableSize>>, required: true },\n /** Stable setup-level callbacks from the parent. */\n onUpdate: { type: Function as PropType<(next: IrisResizableSize) => void>, required: true },\n onResizeStart: {\n type: Function as PropType<(s: IrisResizableSize) => void>,\n default: undefined,\n },\n onResizeEnd: { type: Function as PropType<() => void>, default: undefined },\n },\n setup(props) {\n // Created ONCE per handle instance (not per render):\n const handleRef = ref<HTMLElement | null>(null)\n let startSize: IrisResizableSize = { width: 0, height: 0 }\n let aspect = 1\n\n useDrag({\n handle: handleRef,\n disabled: computed(() => props.disabled),\n onStart: () => {\n startSize = { ...props.sizeRef.value }\n aspect = startSize.width / Math.max(1, startSize.height)\n props.onResizeStart?.(startSize)\n },\n onDrag: ({ dx, dy }) => {\n const t = props.handle.includes('top')\n const b = props.handle.includes('bottom')\n const l = props.handle.includes('left')\n const r = props.handle.includes('right')\n let nextW = startSize.width\n let nextH = startSize.height\n if (r) nextW = startSize.width + dx\n if (l) nextW = startSize.width - dx\n if (b) nextH = startSize.height + dy\n if (t) nextH = startSize.height - dy\n if (props.keepAspect && (t || b) && (l || r)) {\n nextH = nextW / aspect\n }\n nextW = Math.max(props.minWidth, Math.min(props.maxWidth, nextW))\n nextH = Math.max(props.minHeight, Math.min(props.maxHeight, nextH))\n props.onUpdate({ width: nextW, height: nextH })\n },\n onEnd: () => props.onResizeEnd?.(),\n })\n\n return () =>\n h('div', {\n ref: (el: unknown) => {\n handleRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-resizable-handle': props.handle,\n style: {\n ...handlePosition(props.handle),\n touchAction: 'none',\n background: 'transparent',\n zIndex: '1',\n },\n })\n },\n})\n\n/**\n * Behavior wrapper: makes its child resizable via 8-direction handles. The\n * wrapper itself is `display: inline-block; position: relative` so the child\n * can be ANY element. Handles overlay the wrapper's edges.\n *\n * Composable with `IrisMovable`, `IrisHotkey`, `IrisClickOutside`.\n *\n * @example\n * <IrisResizable :defaultSize=\"{ width: 400, height: 300 }\">\n * <IrisList :items=\"rows\" />\n * </IrisResizable>\n */\nexport const IrisResizable = defineComponent({\n name: 'IrisResizable',\n inheritAttrs: false,\n props: {\n size: { type: Object as PropType<IrisResizableSize>, default: undefined },\n defaultSize: {\n type: Object as PropType<IrisResizableSize>,\n default: () => ({ width: 200, height: 200 }),\n },\n handles: { type: Array as PropType<IrisResizableHandle[]>, default: () => ALL_HANDLES },\n minWidth: { type: Number, default: 40 },\n minHeight: { type: Number, default: 40 },\n maxWidth: { type: Number, default: Infinity },\n maxHeight: { type: Number, default: Infinity },\n keepAspect: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n },\n emits: {\n 'update:size': (_v: IrisResizableSize) => true,\n resizeStart: (_v: IrisResizableSize) => true,\n resizeEnd: (_v: IrisResizableSize) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.size !== undefined)\n const internal = ref<IrisResizableSize>({ ...props.defaultSize })\n const size = computed<IrisResizableSize>(() =>\n isControlled.value ? (props.size as IrisResizableSize) : internal.value,\n )\n\n const setSize = (next: IrisResizableSize) => {\n if (!isControlled.value) internal.value = next\n emit('update:size', next)\n }\n\n // Stable setup-level bindings: passed as props to the keyed handle\n // instances so they never trigger re-invocation of the child setup.\n const emitResizeStart = (s: IrisResizableSize) => emit('resizeStart', s)\n const emitResizeEnd = () => emit('resizeEnd', size.value)\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-resizable': '',\n 'data-state': props.disabled ? 'disabled' : 'idle',\n style: {\n position: 'relative',\n display: 'inline-block',\n width: `${size.value.width}px`,\n height: `${size.value.height}px`,\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n slots.default?.(),\n ...props.handles.map((handle) =>\n h(ResizableHandle, {\n key: handle,\n handle,\n disabled: props.disabled,\n keepAspect: props.keepAspect,\n minWidth: props.minWidth,\n minHeight: props.minHeight,\n maxWidth: props.maxWidth,\n maxHeight: props.maxHeight,\n sizeRef: size,\n onUpdate: setSize,\n onResizeStart: emitResizeStart,\n onResizeEnd: emitResizeEnd,\n }),\n ),\n ],\n )\n },\n})\n","import { computed, defineComponent, h, onMounted, onUpdated, ref, type PropType } from 'vue'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport interface IrisMovablePosition {\n x: number\n y: number\n}\n\nexport interface IrisMovableBounds {\n minX?: number\n maxX?: number\n minY?: number\n maxY?: number\n}\n\n/**\n * Behavior wrapper: makes its child draggable via `transform`. The whole\n * wrapper drags by default; pass `byHandle` + put `data-iris-movable-handle`\n * on a descendant to restrict the drag origin.\n *\n * Renders `position: absolute` — wrap inside a `position: relative`\n * container for predictable layout.\n */\nexport const IrisMovable = defineComponent({\n name: 'IrisMovable',\n inheritAttrs: false,\n props: {\n position: { type: Object as PropType<IrisMovablePosition>, default: undefined },\n defaultPosition: {\n type: Object as PropType<IrisMovablePosition>,\n default: () => ({ x: 0, y: 0 }),\n },\n bounds: { type: Object as PropType<IrisMovableBounds>, default: () => ({}) },\n byHandle: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n },\n emits: {\n 'update:position': (_v: IrisMovablePosition) => true,\n dragStart: (_v: IrisMovablePosition) => true,\n dragEnd: (_v: IrisMovablePosition) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.position !== undefined)\n const internal = ref<IrisMovablePosition>({ ...props.defaultPosition })\n const position = computed<IrisMovablePosition>(() =>\n isControlled.value ? (props.position as IrisMovablePosition) : internal.value,\n )\n\n const rootRef = ref<HTMLElement | null>(null)\n const handleRef = ref<HTMLElement | null>(null)\n const dragging = ref(false)\n let startPos: IrisMovablePosition = { x: 0, y: 0 }\n\n // Find handle inside the wrapper when byHandle is set.\n const refreshHandle = () => {\n if (!props.byHandle) return\n handleRef.value =\n rootRef.value?.querySelector<HTMLElement>('[data-iris-movable-handle]') ?? null\n }\n onMounted(refreshHandle)\n onUpdated(refreshHandle)\n\n const dragTarget = computed(() => (props.byHandle ? handleRef : rootRef))\n\n const clamp = (p: IrisMovablePosition): IrisMovablePosition => ({\n x: Math.max(props.bounds.minX ?? -Infinity, Math.min(props.bounds.maxX ?? Infinity, p.x)),\n y: Math.max(props.bounds.minY ?? -Infinity, Math.min(props.bounds.maxY ?? Infinity, p.y)),\n })\n\n const setPosition = (next: IrisMovablePosition) => {\n if (!isControlled.value) internal.value = next\n emit('update:position', next)\n }\n\n useDrag({\n handle: computed(() => dragTarget.value.value),\n disabled: computed(() => props.disabled),\n onStart: () => {\n startPos = position.value\n dragging.value = true\n emit('dragStart', position.value)\n },\n onDrag: ({ dx, dy }) => {\n setPosition(clamp({ x: startPos.x + dx, y: startPos.y + dy }))\n },\n onEnd: () => {\n dragging.value = false\n emit('dragEnd', position.value)\n },\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n rootRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-movable': '',\n 'data-state': dragging.value ? 'dragging' : 'idle',\n style: {\n position: 'absolute',\n left: '0',\n top: '0',\n transform: `translate3d(${position.value.x}px, ${position.value.y}px, 0)`,\n cursor: props.byHandle ? 'default' : props.disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n },\n})\n","import { defineComponent, onBeforeUnmount, watchEffect, type PropType } from 'vue'\n\nfunction parseShortcut(spec: string): {\n key: string\n shift: boolean\n alt: boolean\n ctrl: boolean\n meta: boolean\n ctrlOrMeta: boolean\n} {\n const parts = spec.split('+').map((p) => p.trim())\n const key = parts[parts.length - 1]!.toLowerCase()\n const mods = new Set(parts.slice(0, -1).map((p) => p.toLowerCase()))\n return {\n key,\n shift: mods.has('shift'),\n alt: mods.has('alt') || mods.has('option'),\n ctrl: mods.has('ctrl') || mods.has('control'),\n meta: mods.has('meta') || mods.has('cmd') || mods.has('command'),\n ctrlOrMeta: mods.has('mod'),\n }\n}\n\nfunction isInputTarget(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n if (!el) return false\n const tag = el.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (el.isContentEditable) return true\n return false\n}\n\nfunction matches(event: KeyboardEvent, parsed: ReturnType<typeof parseShortcut>): boolean {\n if (event.key.toLowerCase() !== parsed.key) return false\n if (parsed.shift !== event.shiftKey) return false\n if (parsed.alt !== event.altKey) return false\n if (parsed.ctrlOrMeta) {\n if (!event.ctrlKey && !event.metaKey) return false\n } else {\n if (parsed.ctrl !== event.ctrlKey) return false\n if (parsed.meta !== event.metaKey) return false\n }\n return true\n}\n\n/**\n * Behavior wrapper: binds a global keyboard shortcut while children are\n * mounted. Renderless — returns children verbatim via a Fragment.\n *\n * `shortcut` format: `'Escape'`, `'Mod+s'` (Mod = Ctrl on Win/Linux, Cmd on\n * macOS), `'Shift+/'`. Accepts a single string or array of strings.\n *\n * @example\n * <IrisHotkey shortcut=\"Escape\" @trigger=\"close\">\n * <IrisDialog>…</IrisDialog>\n * </IrisHotkey>\n */\nexport const IrisHotkey = defineComponent({\n name: 'IrisHotkey',\n inheritAttrs: false,\n props: {\n shortcut: { type: [String, Array] as PropType<string | string[]>, required: true },\n disabled: { type: Boolean, default: false },\n allowInInputs: { type: Boolean, default: false },\n scope: { type: String as PropType<'document' | 'window'>, default: 'document' },\n },\n emits: {\n trigger: (_event: KeyboardEvent) => true,\n },\n setup(props, { slots, emit }) {\n let detach: (() => void) | null = null\n\n watchEffect((onCleanup) => {\n detach?.()\n detach = null\n if (props.disabled) return\n const specs = Array.isArray(props.shortcut) ? props.shortcut : [props.shortcut]\n const parsed = specs.map(parseShortcut)\n const target: EventTarget = props.scope === 'window' ? window : document\n const onKey = (event: Event) => {\n const e = event as KeyboardEvent\n if (!props.allowInInputs && isInputTarget(e.target)) return\n for (const p of parsed) {\n if (matches(e, p)) {\n emit('trigger', e)\n return\n }\n }\n }\n target.addEventListener('keydown', onKey)\n detach = () => target.removeEventListener('keydown', onKey)\n onCleanup(() => detach?.())\n })\n\n onBeforeUnmount(() => detach?.())\n\n return () => slots.default?.()\n },\n})\n","import { defineComponent, h, onBeforeUnmount, ref, watchEffect, type PropType, type Ref } from 'vue'\n\n/**\n * Behavior wrapper: fires `outside` when a `pointerdown` happens outside the\n * wrapped child tree. Wraps children in a `<span style=\"display:contents\">`\n * to capture the bounding box without affecting layout.\n *\n * Pass `ignore` (refs to additional \"inside\" elements) for trigger buttons\n * that live outside the wrapper but should still count as inside.\n */\nexport const IrisClickOutside = defineComponent({\n name: 'IrisClickOutside',\n inheritAttrs: false,\n props: {\n disabled: { type: Boolean, default: false },\n ignore: {\n type: Array as PropType<Ref<HTMLElement | null | undefined>[]>,\n default: () => [],\n },\n },\n emits: {\n outside: (_event: PointerEvent) => true,\n },\n setup(props, { slots, emit }) {\n const wrapperRef = ref<HTMLElement | null>(null)\n let detach: (() => void) | null = null\n\n watchEffect((onCleanup) => {\n detach?.()\n detach = null\n if (props.disabled) return\n if (typeof document === 'undefined') return\n const handler = (event: PointerEvent) => {\n const target = event.target as Node | null\n if (!target) return\n const wrapper = wrapperRef.value\n if (wrapper) {\n let node: Node | null = target\n while (node) {\n if (node === wrapper) return\n if ((node as HTMLElement).parentNode === wrapper) return\n node = node.parentNode\n }\n }\n for (const r of props.ignore) {\n const el = r.value\n if (el && el.contains(target)) return\n }\n emit('outside', event)\n }\n document.addEventListener('pointerdown', handler)\n detach = () => document.removeEventListener('pointerdown', handler)\n onCleanup(() => detach?.())\n })\n\n onBeforeUnmount(() => detach?.())\n\n return () =>\n h(\n 'span',\n {\n ref: (el: unknown) => {\n wrapperRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-click-outside': '',\n style: { display: 'contents' },\n },\n slots.default?.(),\n )\n },\n})\n","import { defineComponent, h, onBeforeUnmount, watch, type PropType } from 'vue'\nimport { createLongPress } from '@iris-ui-kit/core'\n\n/**\n * Behavior wrapper: fires `onLongPress` once the pointer has been held down\n * for `holdDelay` ms without an intervening pointerup/pointerleave. Wraps\n * children in a `<span data-iris-long-press style=\"display:contents\">` so it\n * doesn't affect layout. Backed by `createLongPress`'s statechart timer.\n *\n * @example\n * <IrisLongPress :hold-delay=\"500\" @longpress=\"onLongPress\">\n * <IrisButton>Hold me</IrisButton>\n * </IrisLongPress>\n */\nexport const IrisLongPress = defineComponent({\n name: 'IrisLongPress',\n inheritAttrs: false,\n props: {\n /** Time the pointer must be held before `onLongPress` fires, in ms. */\n holdDelay: {\n type: Number,\n default: 500,\n },\n /** Called once when the hold reaches `holdDelay` without an intervening release. */\n onLongPress: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: {\n longpress: () => true,\n },\n setup(props, { slots, emit }) {\n const fire = () => {\n props.onLongPress?.()\n emit('longpress')\n }\n // `let`, not `const`: reassigned on holdDelay change; closures (handlers,\n // unmount hook) read the CURRENT binding.\n let ctrl = createLongPress({ holdDelay: props.holdDelay, onLongPress: fire })\n\n const onPointerDown = () => {\n if (props.disabled) return\n ctrl.press()\n }\n const onPointerUp = () => {\n ctrl.release()\n }\n const onPointerLeave = () => {\n ctrl.cancel()\n }\n // Touch scroll / system gesture: the pointer is removed from the active\n // set without pointerup — send CANCEL so the pending hold never fires.\n const onPointerCancel = () => {\n ctrl.cancel()\n }\n\n // holdDelay prop changes re-arm the timer with the new value.\n watch(\n () => props.holdDelay,\n (holdDelay) => {\n const wasPressing = ctrl.state() === 'pressing'\n ctrl.cancel() // clears the pending after-timer (machine exit cancels pending)\n ctrl = createLongPress({ holdDelay, onLongPress: fire })\n if (wasPressing) ctrl.press() // re-arm with the new delay\n },\n )\n\n // disabled flipping true mid-hold aborts the pending gesture.\n watch(\n () => props.disabled,\n (disabled) => {\n if (disabled) ctrl.cancel()\n },\n )\n\n onBeforeUnmount(() => ctrl.cancel())\n\n return () =>\n h(\n 'span',\n {\n 'data-iris-long-press': '',\n style: { display: 'contents' },\n onPointerdown: onPointerDown,\n onPointerup: onPointerUp,\n onPointerleave: onPointerLeave,\n onPointercancel: onPointerCancel,\n },\n slots.default?.(),\n )\n },\n})\n","import { defineComponent, h, type PropType } from 'vue'\nimport { composeFeatures, hasComposableFeatures, type ComposableFeature } from '@iris-ui-kit/core'\nimport { IrisResizable } from './Resizable'\nimport { IrisMovable } from './Movable'\nimport { IrisSortable } from './Sortable'\nimport { IrisClickOutside } from './ClickOutside'\nimport { IrisHotkey } from './Hotkey'\n\n/**\n * Capability composition interface — one declarative surface for composing\n * orthogonal capabilities onto any primitive (see core compose.ts).\n */\nexport const IrisCompose = defineComponent({\n name: 'IrisCompose',\n props: {\n resizable: { type: Object as PropType<Record<string, unknown>>, default: undefined },\n movable: { type: Object as PropType<Record<string, unknown>>, default: undefined },\n sortable: { type: Object as PropType<Record<string, unknown>>, default: undefined },\n clickOutside: { type: Object as PropType<Record<string, unknown>>, default: undefined },\n hotkey: { type: Object as PropType<Record<string, unknown>>, default: undefined },\n },\n setup(props, { slots }) {\n return () => {\n const features: Partial<Record<ComposableFeature, unknown>> = {\n resizable: props.resizable,\n movable: props.movable,\n sortable: props.sortable,\n clickOutside: props.clickOutside,\n hotkey: props.hotkey,\n }\n if (!hasComposableFeatures(features)) return slots.default?.()\n const active = composeFeatures(features)\n let node = slots.default?.() ?? []\n for (const feature of active) {\n switch (feature) {\n case 'hotkey':\n if (props.hotkey) node = [h(IrisHotkey, props.hotkey as never, { default: () => node })]\n break\n case 'clickOutside':\n if (props.clickOutside)\n node = [h(IrisClickOutside, props.clickOutside as never, { default: () => node })]\n break\n case 'sortable':\n if (props.sortable)\n node = [h(IrisSortable, props.sortable as never, { default: () => node })]\n break\n case 'movable':\n if (props.movable)\n node = [h(IrisMovable, props.movable as never, { default: () => node })]\n break\n case 'resizable':\n if (props.resizable)\n node = [h(IrisResizable, props.resizable as never, { default: () => node })]\n break\n }\n }\n return node\n }\n },\n})\n"]}
|