@iris-ui-kit/vue 0.2.19 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/admin.cjs +24 -6
  2. package/dist/admin.cjs.map +1 -1
  3. package/dist/admin.js +3 -3
  4. package/dist/{chunk-I6D5VXQK.js → chunk-3V46HGRC.js} +4 -3
  5. package/dist/chunk-3V46HGRC.js.map +1 -0
  6. package/dist/{chunk-2ETVCAVL.js → chunk-4WQOZ2OV.js} +7 -8
  7. package/dist/chunk-4WQOZ2OV.js.map +1 -0
  8. package/dist/{chunk-QLUIKEMJ.js → chunk-ENKE2BPC.js} +3 -3
  9. package/dist/{chunk-QLUIKEMJ.js.map → chunk-ENKE2BPC.js.map} +1 -1
  10. package/dist/chunk-FG5USQSY.js +55 -0
  11. package/dist/chunk-FG5USQSY.js.map +1 -0
  12. package/dist/{chunk-W2JVHGFR.js → chunk-MO7AAXA6.js} +33 -13
  13. package/dist/chunk-MO7AAXA6.js.map +1 -0
  14. package/dist/{chunk-H7HVVPYR.js → chunk-UPC4GN3F.js} +8 -2
  15. package/dist/chunk-UPC4GN3F.js.map +1 -0
  16. package/dist/{chunk-72PZMU6R.js → chunk-ZTPIXL7Q.js} +21 -3
  17. package/dist/chunk-ZTPIXL7Q.js.map +1 -0
  18. package/dist/index.cjs +119 -45
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.js +32 -11
  21. package/dist/index.js.map +1 -1
  22. package/dist/layouts.cjs +2 -1
  23. package/dist/layouts.cjs.map +1 -1
  24. package/dist/layouts.js +1 -1
  25. package/dist/provider.cjs +53 -9
  26. package/dist/provider.cjs.map +1 -1
  27. package/dist/provider.js +3 -3
  28. package/dist/skeletons.cjs +2 -1
  29. package/dist/skeletons.cjs.map +1 -1
  30. package/dist/skeletons.js +2 -2
  31. package/dist/skins.cjs +6 -0
  32. package/dist/skins.cjs.map +1 -1
  33. package/dist/skins.js +1 -1
  34. package/dist/theme.cjs +19 -1
  35. package/dist/theme.cjs.map +1 -1
  36. package/dist/theme.js +1 -1
  37. package/dist/undo.cjs +37 -28
  38. package/dist/undo.cjs.map +1 -1
  39. package/dist/undo.d.cts +8 -2
  40. package/dist/undo.d.ts +8 -2
  41. package/dist/undo.js +1 -1
  42. package/package.json +1 -1
  43. package/dist/chunk-2ETVCAVL.js.map +0 -1
  44. package/dist/chunk-72PZMU6R.js.map +0 -1
  45. package/dist/chunk-H7HVVPYR.js.map +0 -1
  46. package/dist/chunk-I6D5VXQK.js.map +0 -1
  47. package/dist/chunk-RLVG5JQH.js +0 -46
  48. package/dist/chunk-RLVG5JQH.js.map +0 -1
  49. package/dist/chunk-W2JVHGFR.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/primitives/icon/Icon.ts","../src/admin/styles.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":["defineComponent","h","ref","onBeforeUnmount","computed","watch","inject","nextTick","findNavPath"],"mappings":"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","file":"chunk-2ETVCAVL.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: 10px;\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: 2px;\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, var(--iris-color-text, var(--iris-foreground)));\n font: inherit;\n font-size: 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: 10px;\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: 10px;\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:where(.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: 6px;\n font-size: 11px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 999px;\n background: var(--iris-danger, #e5484d);\n color: #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:where(.iris-nav-menu-group--depth-0 > .iris-nav-menu-children) {\n display: none;\n}\n\n:where(.iris-nav-menu-group--depth-1 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-2 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-3 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-4 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-5 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-6 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-7 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-8 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group--depth-9 > .iris-nav-menu-children),\n:where(.iris-nav-menu-group > .iris-nav-menu-children) {\n display: none;\n}\n\n:where(.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 > .iris-nav-menu-children) {\n position: absolute;\n min-width: 220px;\n padding: 6px;\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-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 100%;\n inset-inline-start: 0;\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 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@media (prefers-reduced-motion: reduce) {\n :where(.iris-nav-menu-arrow) {\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 {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport {\n branchTrail,\n createExpansion,\n findNavNode,\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'\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); a branch\n * click then 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 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 (uncontrolled).\n watch(\n () => props.activeKey,\n (key) => {\n if (!isControlled.value) model.merge(key ? branchTrail(props.items, key) : [])\n },\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 const hovered = ref<string | null>(null)\n const hoveredBranches = ref<string[]>([])\n const focusedBranches = ref<string[]>([])\n\n const closeHorizontalMenus = (): void => {\n if (props.orientation !== 'horizontal') return\n hovered.value = null\n hoveredBranches.value = []\n focusedBranches.value = []\n }\n\n const select = (node: NavNode): void => {\n if (node.disabled) return\n closeHorizontalMenus()\n emit('select', node.key, node)\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(props.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 return interactionKeyAtDepth(focusedBranches.value, depth) === key\n }\n\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 // Collapsed rail: top-level items only, icon + native tooltip; branch → first leaf.\n const renderCollapsed = (): VNode[] =>\n tree.value.map((node) => {\n const branch = isBranch(node)\n const active = branch ? activePath.value.includes(node.key) : node.key === props.activeKey\n return h(\n 'button',\n {\n key: node.key,\n type: 'button',\n class: [\n ...itemClass({\n depth: 0,\n active,\n trail: false,\n hovered: hovered.value === node.key,\n open: false,\n disabled: !!node.disabled,\n branch,\n }),\n 'is-collapsed',\n ],\n 'data-iris-nav-item': '',\n 'data-key': node.key,\n 'data-active': active ? 'true' : undefined,\n 'data-branch': branch ? 'true' : undefined,\n 'data-hovered': hovered.value === node.key ? 'true' : undefined,\n disabled: node.disabled,\n title: node.title,\n 'aria-label': branch ? `${node.title} (section)` : node.title,\n 'aria-current': active && !branch ? 'page' : undefined,\n onMouseenter: () => {\n if (!node.disabled) hovered.value = node.key\n },\n onMouseleave: (event: MouseEvent) => {\n if (\n hovered.value === node.key &&\n !keepsPointerInside(event.currentTarget, event)\n ) {\n hovered.value = null\n }\n },\n onClick: () => select(branch ? firstLeaf(node) : node),\n },\n [\n iconNode(node, 20) ??\n h('span', { class: 'iris-nav-menu-fallback-icon' }, node.title.charAt(0)),\n ],\n )\n })\n\n const renderItem = (node: NavNode, depth: number): VNode => {\n const branch = isBranch(node)\n const open = expanded.value.includes(node.key)\n const horizontal = props.orientation === 'horizontal'\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 const arrowReversed =\n branch && !node.disabled && (active || trail || shown || hovered.value === node.key)\n\n const row = h(\n 'button',\n {\n type: 'button',\n class: itemClass({\n depth,\n active,\n trail,\n hovered: hovered.value === node.key,\n open: branch ? shown : false,\n disabled: !!node.disabled,\n branch,\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': hovered.value === node.key ? 'true' : undefined,\n 'data-depth': String(depth),\n 'data-orientation': props.orientation,\n disabled: node.disabled,\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 (\n hovered.value === node.key &&\n !keepsPointerInside(event.currentTarget, event)\n ) {\n hovered.value = null\n }\n },\n onClick: () => (branch ? toggle(node.key) : select(node)),\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\n ? h(IrisIcon, {\n name: horizontal && depth === 0 ? '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 if (!branch || (!horizontal && !open))\n return h(\n 'div',\n {\n key: node.key,\n 'data-iris-nav-group': branch ? '' : undefined,\n class: ['iris-nav-menu-group', `iris-nav-menu-group--depth-${Math.min(9, depth)}`],\n },\n [row],\n )\n\n return h(\n 'div',\n {\n key: node.key,\n 'data-iris-nav-group': '',\n 'data-open': shown ? 'true' : undefined,\n 'data-depth': String(depth),\n class: [\n 'iris-nav-menu-group',\n `iris-nav-menu-group--depth-${Math.min(9, depth)}`,\n ],\n ...(horizontal\n ? {\n onMouseenter: (event: MouseEvent) => {\n if (!keepsPointerInside(event.currentTarget, event)) {\n setBranchInteraction(hoveredBranches, node.key, true)\n }\n },\n onMouseover: (event: MouseEvent) => {\n if (!keepsPointerInside(event.currentTarget, event)) {\n setBranchInteraction(hoveredBranches, node.key, true)\n }\n },\n onMouseout: (event: MouseEvent) => {\n if (!keepsPointerInside(event.currentTarget, event)) {\n setBranchInteraction(hoveredBranches, node.key, false)\n }\n },\n onMouseleave: (event: MouseEvent) => {\n if (!keepsPointerInside(event.currentTarget, event)) {\n setBranchInteraction(hoveredBranches, node.key, false)\n }\n },\n onFocusin: () => setBranchInteraction(focusedBranches, node.key, true),\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 h(\n 'div',\n {\n class: 'iris-nav-menu-children',\n 'data-iris-nav-children': '',\n role: 'group',\n 'aria-hidden': horizontal && !shown ? 'true' : undefined,\n },\n (node.children ?? []).map((child) => renderItem(child, depth + 1)),\n ),\n ],\n )\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.\n const onKeydown = (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\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n focusAt(idx < 0 ? 0 : idx + 1)\n return\n case 'ArrowUp':\n e.preventDefault()\n focusAt(idx < 0 ? buttons.length - 1 : idx - 1)\n return\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 }\n\n if (props.collapsed || idx < 0) return\n const key = buttons[idx]?.getAttribute('data-key')\n if (!key) return\n const node = findNavNode(props.items, key)\n\n if (e.key === 'ArrowRight' && node && isBranch(node)) {\n e.preventDefault()\n if (!expanded.value.includes(key)) toggle(key)\n else focusAt(idx + 1)\n } else if (e.key === 'ArrowLeft') {\n if (node && isBranch(node) && expanded.value.includes(key)) {\n e.preventDefault()\n toggle(key)\n } else {\n const parentKey = findNavPath(props.items, key).at(-2)?.key\n if (parentKey) {\n e.preventDefault()\n buttons.find((b) => b.getAttribute('data-key') === parentKey)?.focus()\n }\n }\n }\n }\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\n return () =>\n h(\n 'nav',\n {\n ...attrs,\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 props.collapsed ? renderCollapsed() : 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: '6px',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fontSize: '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)',\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: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\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: '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: '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: '6px',\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n fontSize: '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 },\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: '5px 8px 5px 10px',\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 { 'aria-label': tr('admin.tabActions') },\n {\n default: () =>\n h(\n 'span',\n {\n 'data-iris-tab-actions': '',\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 [h(IrisIcon, { name: 'more-horizontal', size: 16 })],\n ),\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: '6px',\n padding: '6px 10px',\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: '6px',\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: '10px',\n height: '52px',\n padding: '0 16px',\n color: 'var(--iris-foreground)',\n fontWeight: '700',\n fontSize: '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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/theme/ThemeProvider.ts","../src/theme/useTheme.ts","../src/theme/useColorScheme.ts"],"names":["computed","ref","onBeforeUnmount"],"mappings":"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","file":"chunk-72PZMU6R.js","sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n watch,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport {\n applyDirection,\n applyTheme,\n injectGlobalStyles,\n type ApplyDirectionResult,\n type ApplyThemeResult,\n type Direction,\n type ThemeStore,\n} from '@iris-ui-kit/theme'\nimport type { IrisTheme } from '@iris-ui-kit/tokens'\n\nexport interface IrisThemeContext {\n store: ThemeStore\n current: Ref<IrisTheme>\n dir: ComputedRef<Direction>\n}\n\nexport const IrisThemeKey: InjectionKey<IrisThemeContext> = Symbol('IrisTheme')\n\n/**\n * Renderless provider that:\n * 1. exposes the theme store to descendants via `provide`,\n * 2. applies the current theme to a target element on mount and on change,\n * 3. reverts the inline custom properties on unmount.\n *\n * `target` defaults to `document.documentElement`. Pass an element ref to\n * scope a theme to a subtree.\n */\nexport const ThemeProvider = defineComponent({\n name: 'IrisThemeProvider',\n props: {\n store: {\n type: Object as PropType<ThemeStore>,\n required: true,\n },\n target: {\n type: Object as PropType<HTMLElement | null>,\n default: null,\n },\n /** Writing direction; sets `dir` on the target for RTL. Default `'ltr'`. */\n dir: {\n type: String as PropType<Direction>,\n default: 'ltr',\n },\n /** CSP nonce for injected inline stylesheets. */\n cspNonce: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const current = ref(props.store.store.getState()) as Ref<IrisTheme>\n const unsubscribe = props.store.store.subscribe((next) => {\n current.value = next\n })\n\n let applied: ApplyThemeResult | null = null\n let dirApplied: ApplyDirectionResult | null = null\n\n const targetEl = () => props.target ?? document.documentElement\n\n const applyCurrent = () => {\n applied?.revert()\n applied = applyTheme(current.value, targetEl())\n }\n\n const applyDir = () => {\n dirApplied?.revert()\n dirApplied = applyDirection(props.dir, targetEl())\n }\n\n onMounted(() => {\n injectGlobalStyles(props.cspNonce)\n applyCurrent()\n applyDir()\n })\n\n watch(current, () => {\n if (applied) applyCurrent()\n })\n\n watch(\n () => props.dir,\n () => {\n if (dirApplied) applyDir()\n },\n )\n\n onBeforeUnmount(() => {\n unsubscribe()\n applied?.revert()\n applied = null\n dirApplied?.revert()\n dirApplied = null\n })\n\n provide(IrisThemeKey, { store: props.store, current, dir: computed(() => props.dir) })\n\n return () => slots.default?.()\n },\n})\n\nexport function useThemeContext(): IrisThemeContext {\n const ctx = inject(IrisThemeKey)\n if (!ctx) {\n throw new Error('[iris-ui] useTheme(): no <ThemeProvider> ancestor found')\n }\n return ctx\n}\n\n/**\n * Current writing direction (`'ltr'` / `'rtl'`) from the nearest\n * `<ThemeProvider>`, or a static `'ltr'` ref when there is none.\n */\nexport function useDirection(): ComputedRef<Direction> {\n const ctx = inject(IrisThemeKey, null)\n return ctx ? ctx.dir : computed(() => 'ltr' as Direction)\n}\n","import { computed, type ComputedRef } from 'vue'\nimport type { IrisTheme } from '@iris-ui-kit/tokens'\nimport { useThemeContext } from './ThemeProvider'\n\nexport interface UseThemeReturn {\n /** Reactive ref to the active theme. */\n theme: ComputedRef<IrisTheme>\n /** Switch by name or by passing a theme directly. */\n setTheme: (target: string | IrisTheme) => void\n /** Map of all themes registered with the store. */\n availableThemes: Record<string, IrisTheme>\n}\n\n/**\n * Read and write the current theme from anywhere inside a <ThemeProvider>.\n *\n * @example\n * const { theme, setTheme } = useTheme()\n * theme.value.colors['iris.primary']\n * setTheme('dark')\n */\nexport function useTheme(): UseThemeReturn {\n const ctx = useThemeContext()\n return {\n theme: computed(() => ctx.current.value),\n setTheme: ctx.store.setTheme,\n availableThemes: ctx.store.availableThemes,\n }\n}\n","import { onBeforeUnmount, ref, type Ref } from 'vue'\nimport { getColorScheme, watchColorScheme, type ColorScheme } from '@iris-ui-kit/theme'\n\n/**\n * Reactive system color scheme (`'light'` / `'dark'`) from\n * `prefers-color-scheme`. SSR-safe (reports `'light'` until matchMedia is\n * available). Wire it to a theme store to auto-follow the system:\n *\n * ```ts\n * const scheme = useColorScheme()\n * watch(scheme, (s) => store.setTheme(s === 'dark' ? 'dark' : 'light'), { immediate: true })\n * ```\n */\nexport function useColorScheme(): Ref<ColorScheme> {\n const scheme = ref<ColorScheme>(getColorScheme())\n const stop = watchColorScheme((s) => {\n scheme.value = s\n })\n onBeforeUnmount(stop)\n return scheme\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/skins/SkinProvider.ts","../src/skins/useSkin.ts"],"names":[],"mappings":";;;;;;AAyBO,IAAM,WAAA,0BAAoD,UAAU;AAOpE,IAAM,eAAe,eAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,kBAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAgC,UAAU,IAAA,EAAK;AAAA,IAC/D,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,IAAA,EAAK;AAAA,IACtE,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA;AAAU,GAC/C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AACtB,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,SAAA,CAAU,CAAC,IAAA,KAAS;AACnD,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,IAClB,CAAC,CAAA;AAED,IAAA,IAAI,OAAA,GAAkC,IAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,IAAU,QAAA,CAAS,eAAA;AAChD,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AACjC,MAAA,KAAA,EAAM;AAAA,IACR,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,SAAS,MAAM;AACnB,MAAA,IAAI,SAAS,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AACD,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,WAAA,EAAY;AACZ,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,aAAa,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA;AACtD,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC;AAEM,SAAS,cAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,uDAAuD,CAAA;AACjF,EAAA,OAAO,GAAA;AACT;ACrDO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,cAAA,EAAe;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA,CAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAClC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF","file":"chunk-H7HVVPYR.js","sourcesContent":["import {\n defineComponent,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n watch,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport { injectGlobalStyles } from '@iris-ui-kit/theme'\nimport {\n applySkin,\n type ApplySkinResult,\n type ResolvedSkin,\n type SkinEngine,\n} from '@iris-ui-kit/skins'\n\nexport interface IrisSkinContext {\n engine: SkinEngine\n current: Ref<ResolvedSkin>\n}\n\nexport const IrisSkinKey: InjectionKey<IrisSkinContext> = Symbol('IrisSkin')\n\n/**\n * Renderless provider mirroring `<IrisThemeProvider>` for skins: subscribes to\n * the engine store, applies/reverts the resolved skin on the target element,\n * and provides the engine + current skin to descendants. Zero skin logic.\n */\nexport const SkinProvider = defineComponent({\n name: 'IrisSkinProvider',\n props: {\n engine: { type: Object as PropType<SkinEngine>, required: true },\n target: { type: Object as PropType<HTMLElement | null>, default: null },\n cspNonce: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const current = ref(props.engine.current()) as Ref<ResolvedSkin>\n const unsubscribe = props.engine.subscribe((next) => {\n current.value = next\n })\n\n let applied: ApplySkinResult | null = null\n const targetEl = () => props.target ?? document.documentElement\n const apply = () => {\n applied?.revert()\n applied = applySkin(current.value, targetEl())\n }\n\n onMounted(() => {\n injectGlobalStyles(props.cspNonce)\n apply()\n })\n watch(current, () => {\n if (applied) apply()\n })\n onBeforeUnmount(() => {\n unsubscribe()\n applied?.revert()\n applied = null\n })\n\n provide(IrisSkinKey, { engine: props.engine, current })\n return () => slots.default?.()\n },\n})\n\nexport function useSkinContext(): IrisSkinContext {\n const ctx = inject(IrisSkinKey)\n if (!ctx) throw new Error('[iris-ui] useSkin(): no <SkinProvider> ancestor found')\n return ctx\n}\n","import type { ComputedRef } from 'vue'\nimport { computed } from 'vue'\nimport type { ResolvedSkin, Skin, SkinMode, SkinPatch, SkinError } from '@iris-ui-kit/skins'\nimport { useSkinContext } from './SkinProvider'\n\nexport interface UseSkinReturn {\n skin: ComputedRef<ResolvedSkin>\n setSkin: (id: string) => void\n loadSkin: (source: string | Skin) => Promise<ResolvedSkin>\n useFromCatalog: (id: string) => Promise<ResolvedSkin>\n patch: (overrides: SkinPatch) => void\n resetPatch: () => void\n setMode: (mode: SkinMode) => void\n getMode: () => SkinMode\n /** Logical selected id (pre system-variant remap) — e.g. 'auto' while following the system. */\n getActiveId: () => string\n availableSkins: () => Skin[]\n errors: () => SkinError[]\n}\n\n/** Read + control the active skin from anywhere inside a `<SkinProvider>`. */\nexport function useSkin(): UseSkinReturn {\n const { engine, current } = useSkinContext()\n return {\n skin: computed(() => current.value),\n setSkin: engine.setSkin,\n loadSkin: engine.loadSkin,\n useFromCatalog: engine.useFromCatalog,\n patch: engine.patch,\n resetPatch: engine.resetPatch,\n setMode: engine.setMode,\n getMode: engine.getMode,\n getActiveId: engine.getActiveId,\n availableSkins: engine.availableSkins,\n errors: engine.errors,\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/layouts/SidebarLayout.ts","../src/layouts/HeaderLayout.ts"],"names":["defineComponent","h"],"mappings":"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","file":"chunk-I6D5VXQK.js","sourcesContent":["import { computed, defineComponent, h, ref, watch } from 'vue'\n\n/**\n * Two-column layout with a collapsible sidebar.\n *\n * Slots:\n * - `sidebar` — content rendered in the sidebar (kept mounted across collapses).\n * - `default` — the main content area.\n *\n * Use `:collapsed` for controlled mode or `:default-collapsed` for the\n * uncontrolled initial state. When collapsed, the sidebar shrinks to\n * `:collapsed-width` so icon-only navigation still fits.\n */\nexport const IrisSidebarLayout = defineComponent({\n name: 'IrisSidebarLayout',\n inheritAttrs: false,\n props: {\n collapsed: { type: Boolean, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n /** Sidebar width when expanded (px or CSS length). */\n width: { type: [Number, String], default: 240 },\n /** Sidebar width when collapsed. */\n collapsedWidth: { type: [Number, String], default: 60 },\n /** Sidebar position. */\n side: { type: String as () => 'left' | 'right', default: 'left' },\n },\n emits: {\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n isControlled.value ? Boolean(props.collapsed) : internalCollapsed.value,\n )\n\n // Sync controlled prop changes into internal state on first run so a later\n // detach to uncontrolled mode preserves the last-known value.\n watch(\n () => props.collapsed,\n (value) => {\n if (value !== undefined) internalCollapsed.value = value\n },\n )\n\n const setCollapsed = (value: boolean) => {\n if (!isControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n\n return () => {\n const sidebarStyle: Record<string, string> = {\n width: collapsed.value ? asLen(props.collapsedWidth) : asLen(props.width),\n flexShrink: '0',\n background: 'var(--iris-surface)',\n borderRight: props.side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: props.side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n const mainStyle: Record<string, string> = {\n flex: '1',\n minWidth: '0',\n overflow: 'auto',\n background: 'var(--iris-background)',\n }\n const direction = props.side === 'right' ? 'row-reverse' : 'row'\n\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-sidebar-layout': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n 'data-side': props.side,\n style: {\n display: 'flex',\n flexDirection: direction,\n width: '100%',\n height: '100%',\n minHeight: '0',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'aside',\n {\n role: 'complementary',\n 'data-iris-sidebar': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n style: sidebarStyle,\n },\n slots.sidebar?.({ collapsed: collapsed.value, setCollapsed }),\n ),\n h('div', { 'data-iris-sidebar-main': '', style: mainStyle }, slots.default?.()),\n ],\n )\n }\n },\n})\n","import { defineComponent, h, type PropType } from 'vue'\n\n/**\n * Two-region vertical layout: a sticky header on top, scrollable main below.\n *\n * Slots:\n * - `header` — fixed at top.\n * - `footer` — optional fixed at bottom.\n * - `default` — scrollable main region.\n */\nexport const IrisHeaderLayout = defineComponent({\n name: 'IrisHeaderLayout',\n inheritAttrs: false,\n props: {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** When true, header sticks via `position: sticky` instead of static. */\n sticky: { type: Boolean, default: true },\n },\n setup(props, { slots, attrs }) {\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-header-layout': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '0',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n slots.header\n ? h(\n 'header',\n {\n role: 'banner',\n 'data-iris-header': '',\n style: {\n flexShrink: '0',\n height: asLen(props.headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: props.sticky ? 'sticky' : 'static',\n top: '0',\n zIndex: '50',\n },\n },\n slots.header(),\n )\n : null,\n h(\n 'main',\n {\n role: 'main',\n 'data-iris-header-main': '',\n style: { flex: '1', minHeight: '0', overflow: 'auto' },\n },\n slots.default?.(),\n ),\n slots.footer\n ? h(\n 'footer',\n {\n role: 'contentinfo',\n 'data-iris-footer': '',\n style: {\n flexShrink: '0',\n height: asLen(props.footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n slots.footer(),\n )\n : null,\n ],\n )\n },\n})\n"]}
@@ -1,46 +0,0 @@
1
- import { shallowRef } from 'vue';
2
- import { createUndoStack } from '@iris-ui-kit/core/undo';
3
- export { createUndoStack } from '@iris-ui-kit/core/undo';
4
-
5
- // src/undo/useUndoStack.ts
6
- function useUndoStack(options) {
7
- const stack = createUndoStack(options);
8
- const state = shallowRef({
9
- canUndo: stack.canUndo(),
10
- canRedo: stack.canRedo(),
11
- depth: stack.depth,
12
- index: stack.index
13
- });
14
- const sync = () => {
15
- state.value = {
16
- canUndo: stack.canUndo(),
17
- canRedo: stack.canRedo(),
18
- depth: stack.depth,
19
- index: stack.index
20
- };
21
- };
22
- const push = (snapshot) => {
23
- const result = stack.push(snapshot);
24
- sync();
25
- return result;
26
- };
27
- const undo = () => {
28
- const result = stack.undo();
29
- sync();
30
- return result;
31
- };
32
- const redo = () => {
33
- const result = stack.redo();
34
- sync();
35
- return result;
36
- };
37
- const clear = () => {
38
- stack.clear();
39
- sync();
40
- };
41
- return { push, undo, redo, clear, stack, state };
42
- }
43
-
44
- export { useUndoStack };
45
- //# sourceMappingURL=chunk-RLVG5JQH.js.map
46
- //# sourceMappingURL=chunk-RLVG5JQH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/undo/useUndoStack.ts"],"names":[],"mappings":";;;;;AAgCO,SAAS,aAAgB,OAAA,EAa9B;AACA,EAAA,MAAM,KAAA,GAAQ,gBAAmB,OAAO,CAAA;AAExC,EAAA,MAAM,QAAQ,UAAA,CAAmC;AAAA,IAC/C,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,IACvB,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,IACvB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM;AAAA,GACd,CAAA;AAED,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,MACZ,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,MACvB,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,MACvB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,QAAA,KAAmB;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAClC,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAO,MAAqB;AAChC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAK;AAK1B,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAO,MAAqB;AAChC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAK;AAC1B,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,OAAO,KAAA,EAAM;AACjD","file":"chunk-RLVG5JQH.js","sourcesContent":["import { shallowRef, type ShallowRef } from 'vue'\nimport { createUndoStack, type UndoStack, type UndoStackOptions } from '@iris-ui-kit/core/undo'\n\n/**\n * Reactive snapshot metadata for the UndoStack: convenience booleans that\n * update on every push/undo/redo/clear for use in UI bindings (enable/disable\n * undo/redo buttons).\n */\nexport interface UndoStackReactiveState {\n canUndo: boolean\n canRedo: boolean\n depth: number\n index: number\n}\n\n/**\n * Vue bridge over the framework-agnostic {@link createUndoStack}.\n * Creates the stack once in `setup()` and returns a stable controller\n * plus a reactive `state` that tracks `canUndo`/`canRedo`/`depth`/`index` for\n * easy UI binding.\n *\n * The returned `push`/`undo`/`redo`/`clear` automatically update the reactive\n * state — no manual `.value = ...` needed.\n *\n * @example\n * const { push, undo, redo, state } = useUndoStack({ initial: formValues })\n * // After mutation:\n * push(currentValues)\n * // In template:\n * <button :disabled=\"!state.canUndo\" @click=\"undo\">Undo</button>\n * <button :disabled=\"!state.canRedo\" @click=\"redo\">Redo</button>\n */\nexport function useUndoStack<T>(options?: UndoStackOptions<T>): {\n /** Push a new snapshot onto the stack. Returns the stored value. */\n push: (snapshot: T) => T\n /** Undo: returns the previous snapshot, or undefined if nothing to undo. */\n undo: () => T | undefined\n /** Redo: returns the next snapshot, or undefined if nothing to redo. */\n redo: () => T | undefined\n /** Clear all history. */\n clear: () => void\n /** The raw undo stack (stable reference, same across renders). */\n stack: UndoStack<T>\n /** Reactive metadata: canUndo, canRedo, depth, index. */\n state: ShallowRef<UndoStackReactiveState>\n} {\n const stack = createUndoStack<T>(options)\n\n const state = shallowRef<UndoStackReactiveState>({\n canUndo: stack.canUndo(),\n canRedo: stack.canRedo(),\n depth: stack.depth,\n index: stack.index,\n })\n\n const sync = () => {\n state.value = {\n canUndo: stack.canUndo(),\n canRedo: stack.canRedo(),\n depth: stack.depth,\n index: stack.index,\n }\n }\n\n const push = (snapshot: T): T => {\n const result = stack.push(snapshot)\n sync()\n return result\n }\n\n const undo = (): T | undefined => {\n const result = stack.undo()\n // Always sync: `undefined` is a legal snapshot value for a generic T, so\n // the return value cannot distinguish \"no-op\" from \"moved onto an\n // undefined snapshot\". A true no-op writes identical values, which is\n // harmless (same as push/clear).\n sync()\n return result\n }\n\n const redo = (): T | undefined => {\n const result = stack.redo()\n sync()\n return result\n }\n\n const clear = () => {\n stack.clear()\n sync()\n }\n\n return { push, undo, redo, clear, stack, state }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/provider/context.ts","../src/provider/IrisProvider.ts","../src/provider/hooks.ts"],"names":[],"mappings":";;;;;;;;AAiBO,IAAM,qBAAA,0BAAiE,iBAAiB;;;ACA/F,IAAM,cAAA,GAAiB,OAAA;AA4BhB,IAAM,eAAe,eAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAgC,SAAS,MAAA,EAAU;AAAA,IAClE,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAgC,SAAS,MAAA,EAAU;AAAA,IACjE,GAAA,EAAK,EAAE,IAAA,EAAM,MAAA,EAAmC,SAAS,MAAA,EAAU;AAAA,IACnE,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA,IAC3C,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAA4C,SAAS,MAAA,EAAU;AAAA,IACjF,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAiC,SAAS,MAAA,EAAU;AAAA,IACrE,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,IAAA;AAAK,GACxE;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AAEtB,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAGhD,IAAA,IAAI,OAAA,GAAqC,IAAA;AACzC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,MAAA,MAAM,EAAA,GAAK,KAAA,CAAM,MAAA,IAAU,QAAA,CAAS,eAAA;AACpC,MAAA,OAAA,GAAU,aAAa,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,MAAM,GAAG,EAAE,CAAA;AAAA,IAC7D,CAAC,CAAA;AACD,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,IAAA;AAGV,MAAA,SAAA,CAAU,QAAA,EAAS;AAAA,IACrB,CAAC,CAAA;AAGD,IAAA,OAAA,CAAQ,qBAAA,EAAuB;AAAA,MAC7B,QAAQ,SAAA,CAAU,MAAA;AAAA,MAClB,SAAA,EAAW,IAAI,GAAA,CAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC;AAAA,KAC5D,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,cAAA;AAE/B,MAAA,MAAM,QAAA,GAAW,EAAE,GAAG,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,GAAI,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG;AAG5E,MAAA,IAAI,IAAA,GAAc,CAAA;AAAA,QAChB,gBAAA;AAAA,QACA,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAS;AAAA,QACjC,EAAE,OAAA,EAAS,MAAM,KAAA,CAAM,WAAU;AAAE,OACrC;AAEA,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,IAAA,GAAO,CAAA;AAAA,UACL,YAAA;AAAA,UACA,EAAE,MAAA,EAAQ,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,UAC3C,EAAE,OAAA,EAAS,MAAM,IAAA;AAAK,SACxB;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,IAAA,GAAO,CAAA;AAAA,UACL,aAAA;AAAA,UACA,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,EAAM;AAAA,UACpE,EAAE,OAAA,EAAS,MAAM,IAAA;AAAK,SACxB;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,EACF;AACF,CAAC;AC3GM,SAAS,UAAU,IAAA,EAAuB;AAC/C,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,qBAAA,EAAuB,IAAI,CAAA;AAC9C,EAAA,OAAO,GAAA,GAAM,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,GAAI,KAAA;AACzC;AAGA,IAAM,UAAA,uBAAiB,GAAA,EAAqB;AAarC,SAAS,cAAA,CAAkB,SAAiB,GAAA,EAAiB;AAClE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,qBAAA,EAAuB,IAAI,CAAA;AAC9C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,aAAa,GAAA,KAAQ,MAAA,GAAY,GAAG,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,GAAK,OAAA;AAC9D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,UAAU,CAAA,oCAAA,CAAsC,CAAA;AAAA,EAC/F;AAEA,EAAA,MAAM,UAAU,GAAA,KAAQ,MAAA,GAAY,GAAG,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,GAAK,OAAA;AAG3D,EAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAGhC,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AAC9B,IAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAEhC,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,MAAA,CAAO,IAAA,EAAK,EAAG;AACjC,MAAA,IAAI,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,SAAS,CAAA,EAAA,EAAK,OAAO,EAAE,CAAA,EAAG;AAEvD,QAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AAC5B,UAAA,UAAA,CAAW,GAAA,CAAI,SAAS,IAAI,CAAA;AAC5B,UAAA,OAAA,CAAQ,IAAA;AAAA,YACN,CAAA,sCAAA,EAAyC,OAAO,CAAA,UAAA,EACpC,CAAC,+CAA+C,CAAC,CAAA,GAAA;AAAA,WAC/D;AAAA,QACF;AACA,QAAA,OAAO,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,2BAA2B,OAAO,CAAA,mFAAA;AAAA,GAEpC;AACF","file":"chunk-W2JVHGFR.js","sourcesContent":["import { type InjectionKey } from 'vue'\n\n/**\n * Shape carried by the plugin-store context: the live store instances collected\n * from every installed plugin, plus the set of installed plugin names. Surfaced\n * to descendants through `usePluginStore` / `usePlugin`.\n */\nexport interface PluginStoreContext {\n stores: Map<string, unknown>\n installed: Set<string>\n}\n\n/**\n * Injection key for the {@link PluginStoreContext}. The name ends in `Key` (and\n * the type in `Context`) so the manifest's discover step never mistakes it for a\n * component export.\n */\nexport const PluginStoreContextKey: InjectionKey<PluginStoreContext> = Symbol('IrisPluginStore')\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n provide,\n type PropType,\n type VNode,\n} from 'vue'\nimport { runPlugins, type IrisPlugin } from '@iris-ui-kit/core'\nimport { applyCssVars, type ApplyCssVarsResult, type ThemeStore } from '@iris-ui-kit/theme'\nimport type { SkinEngine } from '@iris-ui-kit/skins'\nimport { ThemeProvider } from '../theme'\nimport { SkinProvider } from '../skins'\nimport { IrisI18nProvider } from '../i18n'\nimport { PluginStoreContextKey } from './context'\n\nconst DEFAULT_LOCALE = 'en-US'\n\n/** Public prop surface of {@link IrisProvider}. */\nexport interface IrisProviderProps {\n /** Theme store; when present the inner `ThemeProvider` wraps the subtree. */\n theme?: ThemeStore\n /** Skin engine; when present the inner `SkinProvider` wraps the subtree. */\n skin?: SkinEngine\n /** Writing direction, forwarded to `ThemeProvider` when a theme is given. */\n dir?: 'ltr' | 'rtl'\n /** Active BCP-47 locale; defaults to `'en-US'`. */\n locale?: string\n /** User messages — merged OVER plugin-registered messages (user wins). */\n messages?: Record<string, string>\n /** Plugins to install; their tokens / messages / stores are collected once. */\n plugins?: IrisPlugin[]\n /** Element receiving the plugin token layer; defaults to `documentElement`. */\n target?: HTMLElement | null\n}\n\n/**\n * The single unified Iris entry point. Runs `plugins` through the core\n * `runPlugins` collector and wires the result into the theme (tokens), i18n\n * (messages) and a plugin-store context, composing the existing per-framework\n * providers. A thin bridge — the real logic lives in `@iris-ui-kit/core`.\n *\n * Render order when present: Theme → Skin → I18n → PluginContext → children.\n */\nexport const IrisProvider = defineComponent({\n name: 'IrisProvider',\n props: {\n theme: { type: Object as PropType<ThemeStore>, default: undefined },\n skin: { type: Object as PropType<SkinEngine>, default: undefined },\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n locale: { type: String, default: undefined },\n messages: { type: Object as PropType<Record<string, string>>, default: undefined },\n plugins: { type: Array as PropType<IrisPlugin[]>, default: undefined },\n target: { type: Object as PropType<HTMLElement | null>, default: null },\n },\n setup(props, { slots }) {\n // Sync, pure, deterministic — computed once per setup over `plugins`.\n const collected = runPlugins(props.plugins ?? [])\n\n // tokens → additive CSS-var layer over the active theme; reverted on unmount.\n let applied: ApplyCssVarsResult | null = null\n onMounted(() => {\n if (typeof document === 'undefined') return\n const el = props.target ?? document.documentElement\n applied = applyCssVars(Object.entries(collected.tokens), el)\n })\n onBeforeUnmount(() => {\n applied?.revert()\n applied = null\n // Run plugin teardowns on unmount so eager stores / subscriptions /\n // timers don't leak. Idempotent and safe with no plugins.\n collected.teardown()\n })\n\n // stores + installed names → PluginStoreContext.\n provide(PluginStoreContextKey, {\n stores: collected.stores,\n installed: new Set((props.plugins ?? []).map((p) => p.name)),\n })\n\n return () => {\n const locale = props.locale ?? DEFAULT_LOCALE\n // Plugin messages as BASE, user messages WIN.\n const messages = { ...collected.messages[locale], ...(props.messages ?? {}) }\n\n // I18n always renders, wrapping children.\n let tree: VNode = h(\n IrisI18nProvider,\n { locale: props.locale, messages },\n { default: () => slots.default?.() },\n )\n // Skin wraps only when a `skin` engine is supplied.\n if (props.skin) {\n tree = h(\n SkinProvider,\n { engine: props.skin, target: props.target },\n { default: () => tree },\n )\n }\n // Theme wraps only when a `theme` store is supplied.\n if (props.theme) {\n tree = h(\n ThemeProvider,\n { store: props.theme, target: props.target, dir: props.dir ?? 'ltr' },\n { default: () => tree },\n )\n }\n return tree\n }\n },\n})\n","import { inject } from 'vue'\nimport { PluginStoreContextKey } from './context'\n\n/** Whether the named plugin is installed by the nearest `<IrisProvider>`. */\nexport function usePlugin(name: string): boolean {\n const ctx = inject(PluginStoreContextKey, null)\n return ctx ? ctx.installed.has(name) : false\n}\n\n// Tracks ambiguous store key warnings to avoid spamming the console.\nconst warnedKeys = new Map<string, boolean>()\n\n/**\n * Read a plugin-registered store by `key` (backward-compatible single-arg form).\n * Throws a clear error when used outside an `<IrisProvider>`.\n */\nexport function usePluginStore<T>(key: string): T\n\n/**\n * Read a plugin-registered store by `namespace` + `key`.\n */\nexport function usePluginStore<T>(namespace: string, key: string): T\n\nexport function usePluginStore<T>(nsOrKey: string, key?: string): T {\n const ctx = inject(PluginStoreContextKey, null)\n if (!ctx) {\n const displayKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n throw new Error(`[iris-ui] usePluginStore(\"${displayKey}\"): no <IrisProvider> ancestor found`)\n }\n\n const fullKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n\n // 1. Direct lookup\n let store = ctx.stores.get(fullKey) as T | undefined\n if (store !== undefined) return store\n\n // 2. Single-arg fallback\n if (key === undefined) {\n store = ctx.stores.get(nsOrKey) as T | undefined\n if (store !== undefined) return store\n\n for (const k of ctx.stores.keys()) {\n if (typeof k === 'string' && k.endsWith(`::${nsOrKey}`)) {\n // Warn at most once per ambiguous key.\n if (!warnedKeys.has(nsOrKey)) {\n warnedKeys.set(nsOrKey, true)\n console.warn(\n `[iris-ui] Ambiguous plugin store key \"${nsOrKey}\". ` +\n `Found \"${k}\". Use the namespaced form: usePluginStore(\"${k}\").`,\n )\n }\n return ctx.stores.get(k) as T\n }\n }\n }\n\n throw new Error(\n `[iris-ui] Plugin store \"${fullKey}\" not found. ` +\n `Ensure the plugin is installed in IrisProvider and the key is correct.`,\n )\n}\n"]}