@iris-ui-kit/vue 0.2.25 → 0.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin.cjs +390 -170
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.d.cts +3 -2
- package/dist/admin.d.ts +3 -2
- package/dist/admin.js +2 -2
- package/dist/behaviors.cjs +49 -0
- package/dist/behaviors.cjs.map +1 -1
- package/dist/behaviors.d.cts +57 -1
- package/dist/behaviors.d.ts +57 -1
- package/dist/behaviors.js +1 -1
- package/dist/{chunk-WL67XCH5.js → chunk-IN3DQ55U.js} +2 -2
- package/dist/chunk-IN3DQ55U.js.map +1 -0
- package/dist/{chunk-7L6UB6MD.js → chunk-IOMKC5OI.js} +53 -5
- package/dist/chunk-IOMKC5OI.js.map +1 -0
- package/dist/{chunk-3FJUCHCC.js → chunk-IPR5JAVF.js} +11 -3
- package/dist/chunk-IPR5JAVF.js.map +1 -0
- package/dist/{chunk-BEPH6PPL.js → chunk-LWABTQCB.js} +57 -37
- package/dist/chunk-LWABTQCB.js.map +1 -0
- package/dist/{chunk-DNRQVM3Q.js → chunk-QBFYIDY7.js} +3 -2
- package/dist/chunk-QBFYIDY7.js.map +1 -0
- package/dist/{chunk-QQ25RKOO.js → chunk-ZWFSGMOB.js} +385 -173
- package/dist/chunk-ZWFSGMOB.js.map +1 -0
- package/dist/data.cjs +1 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.cts +4 -2
- package/dist/data.d.ts +4 -2
- package/dist/data.js +1 -1
- package/dist/floating.cjs +9 -1
- package/dist/floating.cjs.map +1 -1
- package/dist/floating.d.cts +6 -0
- package/dist/floating.d.ts +6 -0
- package/dist/floating.js +1 -1
- package/dist/index.cjs +1908 -681
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +171 -7
- package/dist/index.d.ts +171 -7
- package/dist/index.js +1412 -475
- package/dist/index.js.map +1 -1
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.d.cts +1 -1
- package/dist/layouts.d.ts +1 -1
- package/dist/layouts.js +1 -1
- package/dist/skeletons.cjs +55 -35
- package/dist/skeletons.cjs.map +1 -1
- package/dist/skeletons.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3FJUCHCC.js.map +0 -1
- package/dist/chunk-7L6UB6MD.js.map +0 -1
- package/dist/chunk-BEPH6PPL.js.map +0 -1
- package/dist/chunk-DNRQVM3Q.js.map +0 -1
- package/dist/chunk-QQ25RKOO.js.map +0 -1
- package/dist/chunk-WL67XCH5.js.map +0 -1
package/dist/skeletons.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/floating/useFloating.ts","../src/primitives/floating/useDismiss.ts"],"names":["offsetMiddleware","flipMiddleware","shiftMiddleware","sizeMiddleware","arrowMiddleware","watch","onScopeDispose"],"mappings":"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","file":"chunk-3FJUCHCC.js","sourcesContent":["import { computed, onScopeDispose, ref, shallowRef, watch, type ComputedRef, type Ref } from 'vue'\nimport {\n autoUpdate,\n computePosition,\n arrow as arrowMiddleware,\n flip as flipMiddleware,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n size as sizeMiddleware,\n type Middleware,\n type Placement,\n type Strategy,\n} from '@floating-ui/dom'\n\nexport interface UseFloatingOptions {\n /** Element the floating panel is positioned relative to. */\n anchor: Ref<HTMLElement | null | undefined>\n /** The floating element itself. */\n floating: Ref<HTMLElement | null | undefined>\n /** Whether the floating element is visible. Controls `autoUpdate` lifecycle. */\n open: Ref<boolean>\n /** Default placement. Floating UI may flip it if `flip` is true. */\n placement?: Placement\n /** CSS position strategy. */\n strategy?: Strategy\n /** Pixel offset between anchor and floating element. */\n offset?: number\n /** Flip to the opposite side when the requested side overflows. Default `true`. */\n flip?: boolean\n /** Shift along the cross-axis to stay in view. Default `true`. */\n shift?: boolean\n /**\n * Constrain the floating element to the available viewport space — sets\n * `maxWidth`/`maxHeight` (minus 8px padding) on it so a long dropdown/popover\n * never overflows the screen (pair with `overflow:auto` for scroll). Off by\n * default. Pass a number to override the viewport padding.\n */\n size?: boolean | number\n /** Extra Floating UI middleware to append. */\n middleware?: Middleware[]\n /**\n * Optional ref to an arrow element inside the floating panel. When provided,\n * `arrowX`, `arrowY`, and `arrowSide` in the return value are populated.\n */\n arrow?: Ref<HTMLElement | null | undefined>\n}\n\nexport interface UseFloatingReturn {\n /** Computed x coordinate (px). */\n x: Ref<number>\n /** Computed y coordinate (px). */\n y: Ref<number>\n /** Final strategy (echo of input). */\n strategy: Ref<Strategy>\n /** Final placement, possibly flipped from the input placement. */\n finalPlacement: Ref<Placement>\n /** Ready-to-bind inline style object for the floating element. */\n floatingStyles: ComputedRef<Record<string, string>>\n /** Trigger a manual recompute. Usually not needed — `autoUpdate` handles scrolling/resizing. */\n update: () => Promise<void>\n /** Arrow x offset (px). Present when `arrow` option is set. */\n arrowX: Ref<number | undefined>\n /** Arrow y offset (px). Present when `arrow` option is set. */\n arrowY: Ref<number | undefined>\n /**\n * Side of the floating element the arrow is on.\n * E.g. `'bottom'` placement → `'top'` (arrow at top pointing up).\n */\n arrowSide: ComputedRef<'top' | 'right' | 'bottom' | 'left' | undefined>\n}\n\n/**\n * Reactive Floating UI integration. Subscribes `autoUpdate` whenever\n * `open === true` and both refs are populated; tears it down on close,\n * unmount, or ref clearing. Returns `floatingStyles` ready to be spread onto\n * the floating element.\n *\n * Pure positioning — does NOT render anything, does NOT manage focus,\n * does NOT handle dismiss behavior. Those concerns live in the consuming\n * primitive (Popover, Tooltip, Dialog, Menu, ...).\n *\n * @example\n * const triggerEl = ref<HTMLElement | null>(null)\n * const contentEl = ref<HTMLElement | null>(null)\n * const open = ref(false)\n * const { floatingStyles } = useFloating({\n * anchor: triggerEl,\n * floating: contentEl,\n * open,\n * placement: 'bottom-start',\n * offset: 8,\n * })\n */\nexport function useFloating(options: UseFloatingOptions): UseFloatingReturn {\n const x = ref(0)\n const y = ref(0)\n const strategy = ref<Strategy>(options.strategy ?? 'absolute')\n const finalPlacement = ref<Placement>(options.placement ?? 'bottom')\n const arrowX = ref<number | undefined>()\n const arrowY = ref<number | undefined>()\n\n const middleware = shallowRef<Middleware[]>([])\n rebuildMiddleware()\n\n function rebuildMiddleware() {\n const mw: Middleware[] = []\n if (options.offset !== undefined) mw.push(offsetMiddleware(options.offset))\n if (options.flip !== false) mw.push(flipMiddleware())\n if (options.shift !== false) mw.push(shiftMiddleware({ padding: 8 }))\n if (options.size) {\n const padding = typeof options.size === 'number' ? options.size : 8\n mw.push(\n sizeMiddleware({\n padding,\n apply({ availableWidth, availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxWidth: `${Math.max(0, Math.floor(availableWidth))}px`,\n maxHeight: `${Math.max(0, Math.floor(availableHeight))}px`,\n })\n },\n }),\n )\n }\n if (options.arrow?.value) mw.push(arrowMiddleware({ element: options.arrow.value }))\n if (options.middleware) mw.push(...options.middleware)\n middleware.value = mw\n }\n\n let cleanupAutoUpdate: (() => void) | null = null\n // Monotonic token bumped on every new positioning cycle and on teardown, so a\n // computePosition() that resolves after the panel closed/re-opened (or after a\n // newer update started) drops its result instead of applying stale coords.\n let epoch = 0\n\n async function update() {\n const a = options.anchor.value\n const f = options.floating.value\n if (!a || !f) return\n rebuildMiddleware()\n const token = ++epoch\n const result = await computePosition(a, f, {\n placement: options.placement ?? 'bottom',\n strategy: strategy.value,\n middleware: middleware.value,\n })\n if (token !== epoch) return\n x.value = result.x\n y.value = result.y\n finalPlacement.value = result.placement\n const arrowData = result.middlewareData.arrow as { x?: number; y?: number } | undefined\n arrowX.value = arrowData?.x\n arrowY.value = arrowData?.y\n }\n\n watch(\n [options.open, options.anchor, options.floating],\n ([isOpen, anchorEl, floatingEl]) => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n if (isOpen && anchorEl && floatingEl) {\n cleanupAutoUpdate = autoUpdate(anchorEl, floatingEl, () => {\n void update()\n })\n }\n },\n { flush: 'post', immediate: true },\n )\n\n onScopeDispose(() => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n })\n\n const OPPOSITE: Record<string, 'top' | 'right' | 'bottom' | 'left'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n }\n const arrowSide = computed(\n () =>\n OPPOSITE[finalPlacement.value.split('-')[0]] as\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | undefined,\n )\n\n const floatingStyles = computed<Record<string, string>>(() => ({\n position: strategy.value,\n top: '0',\n left: '0',\n transform: `translate3d(${Math.round(x.value)}px, ${Math.round(y.value)}px, 0)`,\n width: 'max-content',\n }))\n\n return { x, y, strategy, finalPlacement, floatingStyles, update, arrowX, arrowY, arrowSide }\n}\n","import { onScopeDispose, watch, type Ref } from 'vue'\n\nexport interface UseDismissOptions {\n /** While true, the dismiss listeners are active. */\n enabled: Ref<boolean>\n /** Elements that, if clicked, should NOT trigger dismiss (typically trigger + content). */\n exclude: Array<Ref<HTMLElement | null | undefined>>\n /** Called when the user attempts to dismiss the surface. */\n onDismiss: () => void\n /** Close on Escape key. Default `true`. */\n escape?: boolean\n /** Close on pointerdown outside the excluded elements. Default `true`. */\n outsidePointerDown?: boolean\n}\n\n/**\n * Listen for the universal \"dismiss\" gestures: Escape key and outside\n * pointer-down. Used by Popover / Dialog / Menu / Combobox. Tooltip does\n * NOT use this — it dismisses on mouseleave/blur instead.\n *\n * Listeners are attached to `document` only while `enabled` is true, and\n * removed on disable / unmount. SSR-safe (no-op without `document`).\n */\nexport function useDismiss(options: UseDismissOptions): void {\n const escape = options.escape !== false\n const outsidePointerDown = options.outsidePointerDown !== false\n\n const isExcluded = (target: EventTarget | null): boolean => {\n if (!target || !(target instanceof Node)) return false\n for (const r of options.exclude) {\n const el = r.value\n if (!el) continue\n if (el === target || el.contains(target)) return true\n }\n return false\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!options.enabled.value) return\n if (isExcluded(event.target)) return\n options.onDismiss()\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!options.enabled.value) return\n if (event.key === 'Escape') {\n event.stopPropagation()\n options.onDismiss()\n }\n }\n\n const attach = () => {\n if (typeof document === 'undefined') return\n if (outsidePointerDown) {\n document.addEventListener('pointerdown', onPointerDown, true)\n }\n if (escape) {\n document.addEventListener('keydown', onKeyDown)\n }\n }\n\n const detach = () => {\n if (typeof document === 'undefined') return\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKeyDown)\n }\n\n watch(\n options.enabled,\n (enabled) => {\n detach()\n if (enabled) attach()\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(detach)\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/drag/useDrag.ts","../src/behaviors/Resizable.ts","../src/behaviors/Movable.ts","../src/behaviors/Hotkey.ts","../src/behaviors/ClickOutside.ts","../src/behaviors/LongPress.ts"],"names":["defineComponent","computed","ref","h","watchEffect","onBeforeUnmount","watch"],"mappings":"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","file":"chunk-7L6UB6MD.js","sourcesContent":["import { onScopeDispose, watch, type Ref } from 'vue'\n\nexport interface DragState {\n /** Pointer x in client coordinates. */\n x: number\n /** Pointer y in client coordinates. */\n y: number\n /** Cumulative delta from pointerdown. */\n dx: number\n /** Cumulative delta from pointerdown. */\n dy: number\n /** The active pointer event. */\n event: PointerEvent\n}\n\nexport interface UseDragOptions {\n /** The element the drag handle is bound to. */\n handle: Ref<HTMLElement | null | undefined>\n /** Drag is only initiated for these pointer button(s). Default `[0]` (primary). */\n buttons?: number[]\n /** Called on pointerdown that starts a drag. Return `false` to cancel. */\n onStart?: (state: DragState) => boolean | void\n /** Called on every pointermove while dragging. */\n onDrag?: (state: DragState) => void\n /** Called on pointerup or pointercancel. */\n onEnd?: (state: DragState) => void\n /** Disable the drag. */\n disabled?: Ref<boolean | undefined>\n}\n\n/**\n * Bind pointer-driven drag handlers to an element. Uses `setPointerCapture`\n * so the drag continues even if the pointer leaves the element. Cancels on\n * `pointercancel` (e.g. browser interruption).\n *\n * Pure pointer events — works for mouse, touch, and pen. The handle element\n * gets `touchAction: 'none'` automatically while a drag is in progress to\n * prevent scrolling interference on touch devices.\n *\n * @example\n * const handleRef = ref<HTMLElement | null>(null)\n * useDrag({\n * handle: handleRef,\n * onDrag: ({ dx }) => (offsetX.value = startOffset + dx),\n * })\n */\nexport function useDrag(options: UseDragOptions): void {\n const buttons = options.buttons ?? [0]\n let startX = 0\n let startY = 0\n let active: PointerEvent | null = null\n\n const onPointerDown = (event: PointerEvent) => {\n if (options.disabled?.value) return\n if (!buttons.includes(event.button)) return\n const handle = options.handle.value\n if (!handle) return\n\n startX = event.clientX\n startY = event.clientY\n const state: DragState = {\n x: event.clientX,\n y: event.clientY,\n dx: 0,\n dy: 0,\n event,\n }\n const result = options.onStart?.(state)\n if (result === false) return\n active = event\n handle.setPointerCapture?.(event.pointerId)\n handle.style.touchAction = 'none'\n event.preventDefault()\n }\n\n const onPointerMove = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n options.onDrag?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n }\n\n const onPointerEnd = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n const handle = options.handle.value\n handle?.releasePointerCapture?.(event.pointerId)\n if (handle) handle.style.touchAction = ''\n options.onEnd?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n active = null\n }\n\n const attach = (el: HTMLElement) => {\n el.addEventListener('pointerdown', onPointerDown)\n el.addEventListener('pointermove', onPointerMove)\n el.addEventListener('pointerup', onPointerEnd)\n el.addEventListener('pointercancel', onPointerEnd)\n }\n\n const detach = (el: HTMLElement) => {\n el.removeEventListener('pointerdown', onPointerDown)\n el.removeEventListener('pointermove', onPointerMove)\n el.removeEventListener('pointerup', onPointerEnd)\n el.removeEventListener('pointercancel', onPointerEnd)\n }\n\n watch(\n options.handle,\n (el, prev) => {\n if (prev) detach(prev)\n if (el) attach(el)\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(() => {\n const el = options.handle.value\n if (el) detach(el)\n })\n}\n","import { computed, defineComponent, h, ref, type PropType, type Ref } from 'vue'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport type IrisResizableHandle =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport interface IrisResizableSize {\n width: number\n height: number\n}\n\nconst ALL_HANDLES: IrisResizableHandle[] = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n]\n\nconst HANDLE_CURSORS: Record<IrisResizableHandle, string> = {\n top: 'ns-resize',\n right: 'ew-resize',\n bottom: 'ns-resize',\n left: 'ew-resize',\n 'top-left': 'nwse-resize',\n 'top-right': 'nesw-resize',\n 'bottom-left': 'nesw-resize',\n 'bottom-right': 'nwse-resize',\n}\n\nfunction handlePosition(handle: IrisResizableHandle): Record<string, string> {\n const s: Record<string, string> = { position: 'absolute' }\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n if (t) s.top = '-4px'\n if (b) s.bottom = '-4px'\n if (l) s.left = '-4px'\n if (r) s.right = '-4px'\n const isCorner = (t || b) && (l || r)\n if (isCorner) {\n s.width = '12px'\n s.height = '12px'\n } else if (t || b) {\n s.left = '0'\n s.right = '0'\n s.height = '8px'\n } else {\n s.top = '0'\n s.bottom = '0'\n s.width = '8px'\n }\n s.cursor = HANDLE_CURSORS[handle]\n return s\n}\n\n/**\n * Internal per-handle sub-component (NOT exported). Declared at module level\n * so its type identity is stable across parent re-renders: each handle\n * instance's `setup()` — and therefore its single `useDrag` call — runs\n * exactly once. The previous implementation invoked `useDrag` from a\n * per-render `renderHandle()` helper with a fresh ref each time; because Vue\n * never re-invokes old *function* refs on patch, those listener sets were\n * never detached and emitted duplicates from the second drag onward.\n */\nconst ResizableHandle = defineComponent({\n name: 'ResizableHandle',\n props: {\n handle: { type: String as PropType<IrisResizableHandle>, required: true },\n disabled: { type: Boolean, default: false },\n keepAspect: { type: Boolean, default: false },\n minWidth: { type: Number, default: 40 },\n minHeight: { type: Number, default: 40 },\n maxWidth: { type: Number, default: Infinity },\n maxHeight: { type: Number, default: Infinity },\n /** Stable computed ref from the parent; read only (never mutated). */\n sizeRef: { type: Object as PropType<Ref<IrisResizableSize>>, required: true },\n /** Stable setup-level callbacks from the parent. */\n onUpdate: { type: Function as PropType<(next: IrisResizableSize) => void>, required: true },\n onResizeStart: {\n type: Function as PropType<(s: IrisResizableSize) => void>,\n default: undefined,\n },\n onResizeEnd: { type: Function as PropType<() => void>, default: undefined },\n },\n setup(props) {\n // Created ONCE per handle instance (not per render):\n const handleRef = ref<HTMLElement | null>(null)\n let startSize: IrisResizableSize = { width: 0, height: 0 }\n let aspect = 1\n\n useDrag({\n handle: handleRef,\n disabled: computed(() => props.disabled),\n onStart: () => {\n startSize = { ...props.sizeRef.value }\n aspect = startSize.width / Math.max(1, startSize.height)\n props.onResizeStart?.(startSize)\n },\n onDrag: ({ dx, dy }) => {\n const t = props.handle.includes('top')\n const b = props.handle.includes('bottom')\n const l = props.handle.includes('left')\n const r = props.handle.includes('right')\n let nextW = startSize.width\n let nextH = startSize.height\n if (r) nextW = startSize.width + dx\n if (l) nextW = startSize.width - dx\n if (b) nextH = startSize.height + dy\n if (t) nextH = startSize.height - dy\n if (props.keepAspect && (t || b) && (l || r)) {\n nextH = nextW / aspect\n }\n nextW = Math.max(props.minWidth, Math.min(props.maxWidth, nextW))\n nextH = Math.max(props.minHeight, Math.min(props.maxHeight, nextH))\n props.onUpdate({ width: nextW, height: nextH })\n },\n onEnd: () => props.onResizeEnd?.(),\n })\n\n return () =>\n h('div', {\n ref: (el: unknown) => {\n handleRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-resizable-handle': props.handle,\n style: {\n ...handlePosition(props.handle),\n touchAction: 'none',\n background: 'transparent',\n zIndex: '1',\n },\n })\n },\n})\n\n/**\n * Behavior wrapper: makes its child resizable via 8-direction handles. The\n * wrapper itself is `display: inline-block; position: relative` so the child\n * can be ANY element. Handles overlay the wrapper's edges.\n *\n * Composable with `IrisMovable`, `IrisHotkey`, `IrisClickOutside`.\n *\n * @example\n * <IrisResizable :defaultSize=\"{ width: 400, height: 300 }\">\n * <IrisList :items=\"rows\" />\n * </IrisResizable>\n */\nexport const IrisResizable = defineComponent({\n name: 'IrisResizable',\n inheritAttrs: false,\n props: {\n size: { type: Object as PropType<IrisResizableSize>, default: undefined },\n defaultSize: {\n type: Object as PropType<IrisResizableSize>,\n default: () => ({ width: 200, height: 200 }),\n },\n handles: { type: Array as PropType<IrisResizableHandle[]>, default: () => ALL_HANDLES },\n minWidth: { type: Number, default: 40 },\n minHeight: { type: Number, default: 40 },\n maxWidth: { type: Number, default: Infinity },\n maxHeight: { type: Number, default: Infinity },\n keepAspect: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n },\n emits: {\n 'update:size': (_v: IrisResizableSize) => true,\n resizeStart: (_v: IrisResizableSize) => true,\n resizeEnd: (_v: IrisResizableSize) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.size !== undefined)\n const internal = ref<IrisResizableSize>({ ...props.defaultSize })\n const size = computed<IrisResizableSize>(() =>\n isControlled.value ? (props.size as IrisResizableSize) : internal.value,\n )\n\n const setSize = (next: IrisResizableSize) => {\n if (!isControlled.value) internal.value = next\n emit('update:size', next)\n }\n\n // Stable setup-level bindings: passed as props to the keyed handle\n // instances so they never trigger re-invocation of the child setup.\n const emitResizeStart = (s: IrisResizableSize) => emit('resizeStart', s)\n const emitResizeEnd = () => emit('resizeEnd', size.value)\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-resizable': '',\n 'data-state': props.disabled ? 'disabled' : 'idle',\n style: {\n position: 'relative',\n display: 'inline-block',\n width: `${size.value.width}px`,\n height: `${size.value.height}px`,\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n slots.default?.(),\n ...props.handles.map((handle) =>\n h(ResizableHandle, {\n key: handle,\n handle,\n disabled: props.disabled,\n keepAspect: props.keepAspect,\n minWidth: props.minWidth,\n minHeight: props.minHeight,\n maxWidth: props.maxWidth,\n maxHeight: props.maxHeight,\n sizeRef: size,\n onUpdate: setSize,\n onResizeStart: emitResizeStart,\n onResizeEnd: emitResizeEnd,\n }),\n ),\n ],\n )\n },\n})\n","import { computed, defineComponent, h, onMounted, onUpdated, ref, type PropType } from 'vue'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport interface IrisMovablePosition {\n x: number\n y: number\n}\n\nexport interface IrisMovableBounds {\n minX?: number\n maxX?: number\n minY?: number\n maxY?: number\n}\n\n/**\n * Behavior wrapper: makes its child draggable via `transform`. The whole\n * wrapper drags by default; pass `byHandle` + put `data-iris-movable-handle`\n * on a descendant to restrict the drag origin.\n *\n * Renders `position: absolute` — wrap inside a `position: relative`\n * container for predictable layout.\n */\nexport const IrisMovable = defineComponent({\n name: 'IrisMovable',\n inheritAttrs: false,\n props: {\n position: { type: Object as PropType<IrisMovablePosition>, default: undefined },\n defaultPosition: {\n type: Object as PropType<IrisMovablePosition>,\n default: () => ({ x: 0, y: 0 }),\n },\n bounds: { type: Object as PropType<IrisMovableBounds>, default: () => ({}) },\n byHandle: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n },\n emits: {\n 'update:position': (_v: IrisMovablePosition) => true,\n dragStart: (_v: IrisMovablePosition) => true,\n dragEnd: (_v: IrisMovablePosition) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.position !== undefined)\n const internal = ref<IrisMovablePosition>({ ...props.defaultPosition })\n const position = computed<IrisMovablePosition>(() =>\n isControlled.value ? (props.position as IrisMovablePosition) : internal.value,\n )\n\n const rootRef = ref<HTMLElement | null>(null)\n const handleRef = ref<HTMLElement | null>(null)\n const dragging = ref(false)\n let startPos: IrisMovablePosition = { x: 0, y: 0 }\n\n // Find handle inside the wrapper when byHandle is set.\n const refreshHandle = () => {\n if (!props.byHandle) return\n handleRef.value =\n rootRef.value?.querySelector<HTMLElement>('[data-iris-movable-handle]') ?? null\n }\n onMounted(refreshHandle)\n onUpdated(refreshHandle)\n\n const dragTarget = computed(() => (props.byHandle ? handleRef : rootRef))\n\n const clamp = (p: IrisMovablePosition): IrisMovablePosition => ({\n x: Math.max(props.bounds.minX ?? -Infinity, Math.min(props.bounds.maxX ?? Infinity, p.x)),\n y: Math.max(props.bounds.minY ?? -Infinity, Math.min(props.bounds.maxY ?? Infinity, p.y)),\n })\n\n const setPosition = (next: IrisMovablePosition) => {\n if (!isControlled.value) internal.value = next\n emit('update:position', next)\n }\n\n useDrag({\n handle: computed(() => dragTarget.value.value),\n disabled: computed(() => props.disabled),\n onStart: () => {\n startPos = position.value\n dragging.value = true\n emit('dragStart', position.value)\n },\n onDrag: ({ dx, dy }) => {\n setPosition(clamp({ x: startPos.x + dx, y: startPos.y + dy }))\n },\n onEnd: () => {\n dragging.value = false\n emit('dragEnd', position.value)\n },\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n rootRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-movable': '',\n 'data-state': dragging.value ? 'dragging' : 'idle',\n style: {\n position: 'absolute',\n left: '0',\n top: '0',\n transform: `translate3d(${position.value.x}px, ${position.value.y}px, 0)`,\n cursor: props.byHandle ? 'default' : props.disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n },\n})\n","import { defineComponent, onBeforeUnmount, watchEffect, type PropType } from 'vue'\n\nfunction parseShortcut(spec: string): {\n key: string\n shift: boolean\n alt: boolean\n ctrl: boolean\n meta: boolean\n ctrlOrMeta: boolean\n} {\n const parts = spec.split('+').map((p) => p.trim())\n const key = parts[parts.length - 1]!.toLowerCase()\n const mods = new Set(parts.slice(0, -1).map((p) => p.toLowerCase()))\n return {\n key,\n shift: mods.has('shift'),\n alt: mods.has('alt') || mods.has('option'),\n ctrl: mods.has('ctrl') || mods.has('control'),\n meta: mods.has('meta') || mods.has('cmd') || mods.has('command'),\n ctrlOrMeta: mods.has('mod'),\n }\n}\n\nfunction isInputTarget(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n if (!el) return false\n const tag = el.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (el.isContentEditable) return true\n return false\n}\n\nfunction matches(event: KeyboardEvent, parsed: ReturnType<typeof parseShortcut>): boolean {\n if (event.key.toLowerCase() !== parsed.key) return false\n if (parsed.shift !== event.shiftKey) return false\n if (parsed.alt !== event.altKey) return false\n if (parsed.ctrlOrMeta) {\n if (!event.ctrlKey && !event.metaKey) return false\n } else {\n if (parsed.ctrl !== event.ctrlKey) return false\n if (parsed.meta !== event.metaKey) return false\n }\n return true\n}\n\n/**\n * Behavior wrapper: binds a global keyboard shortcut while children are\n * mounted. Renderless — returns children verbatim via a Fragment.\n *\n * `shortcut` format: `'Escape'`, `'Mod+s'` (Mod = Ctrl on Win/Linux, Cmd on\n * macOS), `'Shift+/'`. Accepts a single string or array of strings.\n *\n * @example\n * <IrisHotkey shortcut=\"Escape\" @trigger=\"close\">\n * <IrisDialog>…</IrisDialog>\n * </IrisHotkey>\n */\nexport const IrisHotkey = defineComponent({\n name: 'IrisHotkey',\n inheritAttrs: false,\n props: {\n shortcut: { type: [String, Array] as PropType<string | string[]>, required: true },\n disabled: { type: Boolean, default: false },\n allowInInputs: { type: Boolean, default: false },\n scope: { type: String as PropType<'document' | 'window'>, default: 'document' },\n },\n emits: {\n trigger: (_event: KeyboardEvent) => true,\n },\n setup(props, { slots, emit }) {\n let detach: (() => void) | null = null\n\n watchEffect((onCleanup) => {\n detach?.()\n detach = null\n if (props.disabled) return\n const specs = Array.isArray(props.shortcut) ? props.shortcut : [props.shortcut]\n const parsed = specs.map(parseShortcut)\n const target: EventTarget = props.scope === 'window' ? window : document\n const onKey = (event: Event) => {\n const e = event as KeyboardEvent\n if (!props.allowInInputs && isInputTarget(e.target)) return\n for (const p of parsed) {\n if (matches(e, p)) {\n emit('trigger', e)\n return\n }\n }\n }\n target.addEventListener('keydown', onKey)\n detach = () => target.removeEventListener('keydown', onKey)\n onCleanup(() => detach?.())\n })\n\n onBeforeUnmount(() => detach?.())\n\n return () => slots.default?.()\n },\n})\n","import { defineComponent, h, onBeforeUnmount, ref, watchEffect, type PropType, type Ref } from 'vue'\n\n/**\n * Behavior wrapper: fires `outside` when a `pointerdown` happens outside the\n * wrapped child tree. Wraps children in a `<span style=\"display:contents\">`\n * to capture the bounding box without affecting layout.\n *\n * Pass `ignore` (refs to additional \"inside\" elements) for trigger buttons\n * that live outside the wrapper but should still count as inside.\n */\nexport const IrisClickOutside = defineComponent({\n name: 'IrisClickOutside',\n inheritAttrs: false,\n props: {\n disabled: { type: Boolean, default: false },\n ignore: {\n type: Array as PropType<Ref<HTMLElement | null | undefined>[]>,\n default: () => [],\n },\n },\n emits: {\n outside: (_event: PointerEvent) => true,\n },\n setup(props, { slots, emit }) {\n const wrapperRef = ref<HTMLElement | null>(null)\n let detach: (() => void) | null = null\n\n watchEffect((onCleanup) => {\n detach?.()\n detach = null\n if (props.disabled) return\n if (typeof document === 'undefined') return\n const handler = (event: PointerEvent) => {\n const target = event.target as Node | null\n if (!target) return\n const wrapper = wrapperRef.value\n if (wrapper) {\n let node: Node | null = target\n while (node) {\n if (node === wrapper) return\n if ((node as HTMLElement).parentNode === wrapper) return\n node = node.parentNode\n }\n }\n for (const r of props.ignore) {\n const el = r.value\n if (el && el.contains(target)) return\n }\n emit('outside', event)\n }\n document.addEventListener('pointerdown', handler)\n detach = () => document.removeEventListener('pointerdown', handler)\n onCleanup(() => detach?.())\n })\n\n onBeforeUnmount(() => detach?.())\n\n return () =>\n h(\n 'span',\n {\n ref: (el: unknown) => {\n wrapperRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-click-outside': '',\n style: { display: 'contents' },\n },\n slots.default?.(),\n )\n },\n})\n","import { defineComponent, h, onBeforeUnmount, watch, type PropType } from 'vue'\nimport { createLongPress } from '@iris-ui-kit/core'\n\n/**\n * Behavior wrapper: fires `onLongPress` once the pointer has been held down\n * for `holdDelay` ms without an intervening pointerup/pointerleave. Wraps\n * children in a `<span data-iris-long-press style=\"display:contents\">` so it\n * doesn't affect layout. Backed by `createLongPress`'s statechart timer.\n *\n * @example\n * <IrisLongPress :hold-delay=\"500\" @longpress=\"onLongPress\">\n * <IrisButton>Hold me</IrisButton>\n * </IrisLongPress>\n */\nexport const IrisLongPress = defineComponent({\n name: 'IrisLongPress',\n inheritAttrs: false,\n props: {\n /** Time the pointer must be held before `onLongPress` fires, in ms. */\n holdDelay: {\n type: Number,\n default: 500,\n },\n /** Called once when the hold reaches `holdDelay` without an intervening release. */\n onLongPress: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: {\n longpress: () => true,\n },\n setup(props, { slots, emit }) {\n const fire = () => {\n props.onLongPress?.()\n emit('longpress')\n }\n // `let`, not `const`: reassigned on holdDelay change; closures (handlers,\n // unmount hook) read the CURRENT binding.\n let ctrl = createLongPress({ holdDelay: props.holdDelay, onLongPress: fire })\n\n const onPointerDown = () => {\n if (props.disabled) return\n ctrl.press()\n }\n const onPointerUp = () => {\n ctrl.release()\n }\n const onPointerLeave = () => {\n ctrl.cancel()\n }\n // Touch scroll / system gesture: the pointer is removed from the active\n // set without pointerup — send CANCEL so the pending hold never fires.\n const onPointerCancel = () => {\n ctrl.cancel()\n }\n\n // holdDelay prop changes re-arm the timer with the new value.\n watch(\n () => props.holdDelay,\n (holdDelay) => {\n const wasPressing = ctrl.state() === 'pressing'\n ctrl.cancel() // clears the pending after-timer (machine exit cancels pending)\n ctrl = createLongPress({ holdDelay, onLongPress: fire })\n if (wasPressing) ctrl.press() // re-arm with the new delay\n },\n )\n\n // disabled flipping true mid-hold aborts the pending gesture.\n watch(\n () => props.disabled,\n (disabled) => {\n if (disabled) ctrl.cancel()\n },\n )\n\n onBeforeUnmount(() => ctrl.cancel())\n\n return () =>\n h(\n 'span',\n {\n 'data-iris-long-press': '',\n style: { display: 'contents' },\n onPointerdown: onPointerDown,\n onPointerup: onPointerUp,\n onPointerleave: onPointerLeave,\n onPointercancel: onPointerCancel,\n },\n slots.default?.(),\n )\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/input/Input.ts","../src/primitives/password-input/PasswordInput.ts","../src/primitives/checkbox/Checkbox.ts","../src/primitives/button/styles.ts","../src/primitives/button/Button.ts","../src/primitives/form-field/FormField.ts","../src/primitives/alert/Alert.ts","../src/primitives/divider/Divider.ts","../src/skeletons/LoginTemplate.ts","../src/skeletons/DashboardTemplate.ts"],"names":["defineComponent","ref","h","computed","watch"],"mappings":"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","file":"chunk-BEPH6PPL.js","sourcesContent":["import { computed, defineComponent, h, ref, type PropType } from 'vue'\nimport type { Size } from '@iris-ui-kit/core'\n\nexport type IrisInputSize = Size\nexport type IrisInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url'\n\n/**\n * Text input primitive. Wraps a native `<input>` with token-driven styling\n * plus optional `prefix` / `suffix` slots for icons or text adornments. The\n * value is two-way bound via `v-model`.\n *\n * Focus styling is handled with `:focus-within` on the wrapping `<label>`,\n * which doubles as the click target so the entire pill is clickable.\n */\nexport const IrisInput = defineComponent({\n name: 'IrisInput',\n inheritAttrs: false,\n props: {\n modelValue: { type: [String, Number] as PropType<string | number>, default: '' },\n type: { type: String as PropType<IrisInputType>, default: 'text' },\n size: { type: String as PropType<IrisInputSize>, default: 'md' },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n readonly: { type: Boolean, default: false },\n /** Visual error state — does NOT enforce validation. */\n invalid: { type: Boolean, default: false },\n id: { type: String, default: undefined },\n /** Forwarded as `aria-describedby` on the inner <input>. Set by IrisFormField. */\n ariaDescribedby: { type: String, default: undefined },\n },\n emits: {\n 'update:modelValue': (_value: string) => true,\n focus: (_event: FocusEvent) => true,\n blur: (_event: FocusEvent) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const focused = ref(false)\n\n const sizeStyles = computed<Record<string, string>>(() => {\n const map: Record<IrisInputSize, { padding: string; fontSize: string; minHeight: string }> = {\n sm: {\n padding: '4px var(--iris-padding-sm)',\n fontSize: '12px',\n minHeight: '28px',\n },\n md: {\n padding: '6px var(--iris-padding-md)',\n fontSize: '14px',\n minHeight: '34px',\n },\n lg: {\n padding: '8px var(--iris-padding-md)',\n fontSize: '16px',\n minHeight: '40px',\n },\n }\n return map[props.size]\n })\n\n const wrapperStyle = computed<Record<string, string>>(() => {\n const borderColor = props.invalid\n ? 'var(--iris-danger)'\n : focused.value\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const boxShadow = focused.value\n ? `0 0 0 3px ${props.invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none'\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md)',\n cursor: props.disabled ? 'not-allowed' : 'text',\n opacity: props.disabled ? '0.6' : '1',\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n boxShadow,\n ...sizeStyles.value,\n padding: sizeStyles.value.padding,\n minHeight: sizeStyles.value.minHeight,\n }\n })\n\n const inputStyle: Record<string, string> = {\n flex: '1',\n minWidth: '0',\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n padding: '0',\n }\n\n const onInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value)\n }\n const onFocus = (event: FocusEvent) => {\n focused.value = true\n emit('focus', event)\n }\n const onBlur = (event: FocusEvent) => {\n focused.value = false\n emit('blur', event)\n }\n\n return () => {\n const prefix = slots.prefix?.()\n const suffix = slots.suffix?.()\n return h(\n 'label',\n {\n ...attrs,\n 'data-iris-input': '',\n 'data-iris-input-size': props.size,\n 'data-state': props.invalid ? 'invalid' : focused.value ? 'focused' : 'idle',\n style: {\n ...wrapperStyle.value,\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n prefix &&\n h(\n 'span',\n {\n 'data-iris-input-prefix': '',\n style: { display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' },\n },\n prefix,\n ),\n h('input', {\n id: props.id,\n type: props.type,\n value: props.modelValue,\n placeholder: props.placeholder,\n disabled: props.disabled || undefined,\n readonly: props.readonly || undefined,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n 'aria-describedby': props.ariaDescribedby,\n style: inputStyle,\n onInput,\n onFocus,\n onBlur,\n }),\n suffix &&\n h(\n 'span',\n {\n 'data-iris-input-suffix': '',\n style: { display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' },\n },\n suffix,\n ),\n ],\n )\n }\n },\n})\n","import { defineComponent, h, ref, type PropType } from 'vue'\nimport { IrisInput } from '../input/Input'\nimport { useI18n } from '../../i18n'\nimport type { Size } from '@iris-ui-kit/core'\n\nexport type IrisPasswordInputSize = Size\n\n/**\n * Password field wrapping {@link IrisInput}. Adds a visibility toggle as\n * the input's suffix slot — clicking it flips the input type between\n * `password` and `text`.\n */\nexport const IrisPasswordInput = defineComponent({\n name: 'IrisPasswordInput',\n inheritAttrs: false,\n props: {\n modelValue: { type: String, default: '' },\n size: { type: String as PropType<IrisPasswordInputSize>, default: 'md' },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n readonly: { type: Boolean, default: false },\n invalid: { type: Boolean, default: false },\n id: { type: String, default: undefined },\n /** Allow the user to toggle visibility. Default `true`. */\n showToggle: { type: Boolean, default: true },\n },\n emits: {\n 'update:modelValue': (_value: string) => true,\n focus: (_event: FocusEvent) => true,\n blur: (_event: FocusEvent) => true,\n },\n setup(props, { attrs, emit, slots }) {\n const { t } = useI18n()\n const visible = ref(false)\n\n const onUpdate = (value: string) => emit('update:modelValue', value)\n const onFocus = (e: FocusEvent) => emit('focus', e)\n const onBlur = (e: FocusEvent) => emit('blur', e)\n\n const toggle = () => {\n if (props.disabled || props.readonly) return\n visible.value = !visible.value\n }\n\n return () =>\n h(\n IrisInput,\n {\n ...attrs,\n modelValue: props.modelValue,\n type: visible.value ? 'text' : 'password',\n size: props.size,\n placeholder: props.placeholder,\n disabled: props.disabled,\n readonly: props.readonly,\n invalid: props.invalid,\n id: props.id,\n 'data-iris-password-input': '',\n 'onUpdate:modelValue': onUpdate,\n onFocus,\n onBlur,\n },\n {\n prefix: slots.prefix,\n suffix: () => [\n slots.suffix?.(),\n props.showToggle\n ? h(\n 'button',\n {\n type: 'button',\n 'data-iris-password-input-toggle': '',\n 'aria-label': visible.value ? t('passwordInput.hide') : t('passwordInput.show'),\n 'aria-pressed': visible.value ? 'true' : 'false',\n onClick: toggle,\n style: {\n background: 'transparent',\n border: 'none',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n color: 'var(--iris-muted)',\n padding: '0 2px',\n fontSize: '13px',\n lineHeight: '1',\n },\n },\n visible.value ? '🙈' : '👁',\n )\n : null,\n ],\n },\n )\n },\n})\n","import { computed, defineComponent, h, type PropType } from 'vue'\nimport type { Size } from '@iris-ui-kit/core'\n\nexport type IrisCheckboxSize = Size\nexport type IrisCheckboxValue = boolean | 'indeterminate'\n\n/**\n * Tri-state checkbox: `false` (unchecked), `true` (checked), or\n * `'indeterminate'`. The native checkbox is hidden but focusable; the\n * visible box is purely visual and mirrors the state via `data-state`.\n *\n * `v-model` emits `boolean` only — switching FROM indeterminate emits the\n * boolean the user chose by clicking (becomes `true`).\n */\nexport const IrisCheckbox = defineComponent({\n name: 'IrisCheckbox',\n inheritAttrs: false,\n props: {\n modelValue: {\n type: [Boolean, String] as PropType<IrisCheckboxValue>,\n default: false,\n },\n size: { type: String as PropType<IrisCheckboxSize>, default: 'md' },\n disabled: { type: Boolean, default: false },\n id: { type: String, default: undefined },\n name: { type: String, default: undefined },\n value: { type: [String, Number] as PropType<string | number>, default: undefined },\n /** Forwarded as `aria-describedby` on the native checkbox input. Set by IrisFormField. */\n ariaDescribedby: { type: String, default: undefined },\n /**\n * Accessible name for the native checkbox input. Bound as `aria-label` on\n * the `<input>` itself (the element with the checkbox role), NOT the label\n * wrapper. Use when there is no visible label text.\n */\n ariaLabel: { type: String, default: undefined },\n /** Invalid state — sets aria-invalid. Set by IrisFormField. */\n invalid: { type: Boolean, default: false },\n },\n emits: {\n 'update:modelValue': (_value: boolean) => true,\n change: (_value: boolean) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const state = computed<'checked' | 'unchecked' | 'indeterminate'>(() => {\n if (props.modelValue === 'indeterminate') return 'indeterminate'\n return props.modelValue ? 'checked' : 'unchecked'\n })\n\n const dim = computed(() => {\n const map: Record<IrisCheckboxSize, string> = { sm: '14px', md: '18px', lg: '22px' }\n return map[props.size]\n })\n\n const boxStyle = computed<Record<string, string>>(() => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: dim.value,\n height: dim.value,\n borderRadius: 'var(--iris-radius-sm)',\n border: '1px solid var(--iris-border)',\n background: state.value === 'unchecked' ? 'var(--iris-background)' : 'var(--iris-primary)',\n borderColor: state.value === 'unchecked' ? 'var(--iris-border)' : 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground)',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n opacity: props.disabled ? '0.6' : '1',\n transition: 'background-color 120ms ease, border-color 120ms ease',\n verticalAlign: 'middle',\n }))\n\n const onChange = (event: Event) => {\n const next = (event.target as HTMLInputElement).checked\n emit('update:modelValue', next)\n emit('change', next)\n }\n\n const renderIndicator = () => {\n if (state.value === 'unchecked') return null\n if (state.value === 'indeterminate') {\n return h('span', {\n 'aria-hidden': 'true',\n style: { width: '60%', height: '2px', background: 'currentColor', borderRadius: '1px' },\n })\n }\n return h(\n 'svg',\n {\n 'aria-hidden': 'true',\n viewBox: '0 0 16 16',\n width: '80%',\n height: '80%',\n fill: 'none',\n },\n [\n h('path', {\n d: 'M3 8.5 L6.5 12 L13 4.5',\n stroke: 'currentColor',\n 'stroke-width': '2.4',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n )\n }\n\n return () =>\n h(\n 'label',\n {\n ...attrs,\n 'data-iris-checkbox': '',\n 'data-iris-checkbox-size': props.size,\n 'data-state': state.value,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm)',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h('input', {\n type: 'checkbox',\n id: props.id,\n name: props.name,\n value: props.value,\n checked: props.modelValue === true,\n indeterminate: props.modelValue === 'indeterminate',\n disabled: props.disabled || undefined,\n 'aria-checked':\n state.value === 'indeterminate'\n ? 'mixed'\n : state.value === 'checked'\n ? 'true'\n : 'false',\n 'aria-describedby': props.ariaDescribedby,\n 'aria-label': props.ariaLabel,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n style: {\n position: 'absolute',\n opacity: '0',\n width: '0',\n height: '0',\n pointerEvents: 'none',\n },\n onChange,\n }),\n h('span', { 'aria-hidden': 'true', style: boxStyle.value }, [renderIndicator()]),\n slots.default && h('span', null, slots.default()),\n ],\n )\n },\n})\n","/**\n * Singleton stylesheet for `IrisButton`. Lives in a single injected\n * `<style id=\"iris-button-styles\">` block. Holds only what cannot be inline:\n *\n * - `:hover` / `:focus-visible` pseudo-states\n * - `:disabled` / `[aria-busy=\"true\"]` attribute selectors\n * - The spinner keyframe\n *\n * Everything else (variant colors, size paddings) ships as inline `style`\n * bindings on each button instance, which keeps theme switching instant\n * because the values are CSS variables.\n *\n * Injection is **lazy** (first `IrisButton` mount triggers it) and\n * **idempotent** (subsequent mounts are no-ops). Safe under SSR — the\n * function short-circuits when `document` is undefined.\n */\n\nconst STYLE_ID = 'iris-button-styles'\n\nconst CSS = `\n.iris-button {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--iris-gap-sm, 4px);\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n border-radius: var(--iris-radius-md, 6px);\n white-space: nowrap;\n user-select: none;\n position: relative;\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n filter 120ms ease;\n}\n.iris-button:focus-visible {\n outline: 2px solid var(--iris-primary);\n outline-offset: 2px;\n}\n.iris-button[disabled],\n.iris-button[aria-busy=\"true\"] {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.iris-button[data-iris-button-variant=\"solid\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n filter: brightness(1.08);\n}\n.iris-button[data-iris-button-variant=\"outline\"]:not([disabled]):not([aria-busy=\"true\"]):hover,\n.iris-button[data-iris-button-variant=\"ghost\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n background-color: var(--iris-surface-hover);\n}\n.iris-button[data-iris-button-variant=\"link\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n text-decoration: underline;\n}\n.iris-button-leading {\n display: inline-flex;\n align-items: center;\n}\n.iris-button-spinner {\n width: 1em;\n height: 1em;\n display: inline-block;\n animation: iris-button-spin 0.7s linear infinite;\n}\n@keyframes iris-button-spin {\n to { transform: rotate(360deg); }\n}\n`\n\nlet installed = false\n\nexport function installButtonStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only reset. Removes the injected `<style>` and clears the flag. */\nexport function __resetButtonStyles(): void {\n installed = false\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n}\n\n/** Test-only inspection of the cached install flag. */\nexport const __BUTTON_STYLE_ID = STYLE_ID\n","import { computed, defineComponent, h, type PropType, type VNode } from 'vue'\nimport type { IrisButtonSize, IrisButtonType, IrisButtonVariant } from './types'\nimport { installButtonStyles } from './styles'\nimport { findFirstElement, mergeSlotProps } from '../slot/Slot'\n\ntype StyleMap = Record<string, string>\n\nconst SIZE_STYLES: Record<IrisButtonSize, StyleMap> = {\n sm: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-md)',\n fontSize: '12px',\n },\n md: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-lg)',\n fontSize: '14px',\n },\n lg: {\n padding: 'var(--iris-padding-md) var(--iris-padding-lg)',\n fontSize: '16px',\n },\n}\n\nconst VARIANT_STYLES: Record<IrisButtonVariant, StyleMap> = {\n solid: {\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground)',\n border: '1px solid var(--iris-primary)',\n },\n outline: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid var(--iris-border)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--iris-foreground)',\n border: '1px solid transparent',\n },\n link: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid transparent',\n textDecoration: 'none',\n },\n}\n\nfunction buildInlineStyle(variant: IrisButtonVariant, size: IrisButtonSize): StyleMap {\n const base: StyleMap = { ...SIZE_STYLES[size], ...VARIANT_STYLES[variant] }\n if (variant === 'link') {\n base.padding = '0'\n }\n return base\n}\n\nfunction renderSpinner(): VNode {\n return h(\n 'svg',\n {\n class: 'iris-button-spinner',\n viewBox: '0 0 24 24',\n fill: 'none',\n 'aria-hidden': 'true',\n },\n [\n h('circle', {\n cx: '12',\n cy: '12',\n r: '10',\n stroke: 'currentColor',\n 'stroke-opacity': '0.25',\n 'stroke-width': '3',\n }),\n h('path', {\n d: 'M22 12a10 10 0 0 1-10 10',\n stroke: 'currentColor',\n 'stroke-width': '3',\n 'stroke-linecap': 'round',\n }),\n ],\n )\n}\n\n/**\n * Foundational button primitive. Props-driven, no internal state machine —\n * Button's behavior is fully derived from `variant`, `size`, `disabled`, and\n * `loading`. Composite primitives (Popover, Tooltip, Dialog, Select) **do**\n * need state machines; Button does not, and forcing one on it would violate\n * the project's \"use a machine only when there is observable state to model\"\n * rule.\n *\n * Styling: variant colors and size paddings ship as inline `style` referencing\n * `var(--iris-*)` so theme switching is instant. A small singleton stylesheet\n * (auto-installed on first mount, removable in tests) covers `:hover`,\n * `:focus-visible`, and the spinner keyframe — things inline `style` cannot\n * express.\n *\n * Accessibility:\n * - native `<button>` (focusable, keyboard-activatable by default)\n * - `disabled` → HTML `disabled` + `aria-disabled=\"true\"`\n * - `loading` → `aria-busy=\"true\"` + click swallowed\n * - default `type=\"button\"` to prevent accidental form submission\n *\n * @example\n * <IrisButton variant=\"solid\" size=\"md\" @click=\"save\">Save</IrisButton>\n *\n * @example\n * <IrisButton variant=\"outline\" :loading=\"isSaving\" @click=\"save\">\n * <template #leading><CheckIcon /></template>\n * Save\n * </IrisButton>\n */\nexport const IrisButton = defineComponent({\n name: 'IrisButton',\n props: {\n variant: { type: String as PropType<IrisButtonVariant>, default: 'solid' },\n size: { type: String as PropType<IrisButtonSize>, default: 'md' },\n disabled: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n type: { type: String as PropType<IrisButtonType>, default: 'button' },\n asChild: { type: Boolean, default: false },\n },\n emits: {\n click: (_event: MouseEvent) => true,\n },\n setup(props, { slots, emit }) {\n installButtonStyles()\n\n const isInteractive = computed(() => !props.disabled && !props.loading)\n const inlineStyle = computed(() => buildInlineStyle(props.variant, props.size))\n\n const onClick = (event: MouseEvent) => {\n if (!isInteractive.value) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n emit('click', event)\n }\n\n return () => {\n const baseProps: Record<string, unknown> = {\n class: 'iris-button',\n 'data-iris-button-variant': props.variant,\n 'data-iris-button-size': props.size,\n 'aria-disabled': props.disabled ? 'true' : undefined,\n 'aria-busy': props.loading ? 'true' : undefined,\n style: inlineStyle.value,\n onClick,\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] IrisButton: as-child requires a single child element')\n }\n return null\n }\n // For non-<button> roots, the `disabled` HTML attribute may be a no-op.\n // We still set `aria-disabled` (above) and intercept clicks via\n // `composeEventHandlers` inside `mergeSlotProps`, which bails out if\n // the parent handler calls `event.preventDefault()`.\n const parentProps: Record<string, unknown> = {\n ...baseProps,\n disabled: isInteractive.value ? undefined : true,\n }\n const merged = mergeSlotProps(parentProps, (root.props ?? {}) as Record<string, unknown>)\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n\n const leadingContent: VNode | VNode[] | undefined = props.loading\n ? renderSpinner()\n : slots.leading?.()\n\n const children: Array<VNode | VNode[] | undefined> = []\n if (leadingContent) {\n children.push(h('span', { class: 'iris-button-leading' }, leadingContent))\n }\n const defaultSlot = slots.default?.()\n if (defaultSlot) children.push(defaultSlot)\n\n return h(\n 'button',\n {\n ...baseProps,\n type: props.type,\n disabled: isInteractive.value ? undefined : true,\n },\n children,\n )\n }\n },\n})\n","import { Fragment, cloneVNode, computed, defineComponent, h, useId, type VNode } from 'vue'\n\n/**\n * Form-field wrapper that handles the label / hint / error trio with the\n * right a11y plumbing. Works as a non-invasive wrapper around any input-like\n * primitive (`IrisInput`, `IrisTextarea`, `IrisSelect`, `IrisNumberInput`,\n * `IrisSwitch`, `IrisCheckbox`, …): it locates the first VNode in the\n * default slot and clones it with the generated `id`, `aria-describedby`,\n * and `aria-invalid` attributes.\n *\n * Composition:\n *\n * ```html\n * <IrisFormField label=\"Email\" :error=\"errors.email\" hint=\"We never share it.\">\n * <IrisInput v-model=\"email\" />\n * </IrisFormField>\n * ```\n *\n * Pass `labelFor` if you want to pin the rendered `<label for>` to a\n * specific id (e.g. when the wrapped control is a custom non-`<input>`\n * widget).\n */\nexport const IrisFormField = defineComponent({\n name: 'IrisFormField',\n inheritAttrs: false,\n props: {\n label: { type: String, default: '' },\n hint: { type: String, default: '' },\n error: { type: String, default: '' },\n required: { type: Boolean, default: false },\n /** Override the auto-generated control id. */\n labelFor: { type: String, default: '' },\n /** Visual size of the label. */\n size: { type: String as () => 'sm' | 'md', default: 'md' },\n },\n setup(props, { slots, attrs }) {\n const baseId = useId()\n const controlId = computed(() => props.labelFor || `${baseId}-control`)\n const hintId = `${baseId}-hint`\n const errorId = `${baseId}-error`\n\n const describedBy = computed(() => {\n const ids: string[] = []\n if (props.hint) ids.push(hintId)\n if (props.error) ids.push(errorId)\n return ids.length > 0 ? ids.join(' ') : undefined\n })\n\n const labelStyle = computed<Record<string, string>>(() => ({\n fontSize: props.size === 'sm' ? '12px' : '14px',\n fontWeight: '500',\n color: props.error ? 'var(--iris-danger)' : 'var(--iris-foreground)',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }))\n\n return () => {\n const children = (slots.default?.() ?? []) as VNode[]\n // Find the first non-text VNode and inject id + aria-*.\n let injected: VNode | null = null\n const restChildren: (VNode | null)[] = []\n let foundFirst = false\n children.forEach((child) => {\n if (!foundFirst && typeof child.type !== 'symbol' && typeof child.type !== 'string') {\n // Pass props that ALL Iris field primitives understand:\n // - id → forwarded to the native control\n // - invalid → flips aria-invalid + invalid styling\n // - ariaDescribedby → forwarded as aria-describedby on the native control\n injected = cloneVNode(child, {\n id: controlId.value,\n invalid: props.error ? true : undefined,\n ariaDescribedby: describedBy.value,\n })\n foundFirst = true\n } else {\n restChildren.push(child)\n }\n })\n\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-form-field': '',\n 'data-iris-form-field-state': props.error ? 'invalid' : 'valid',\n style: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n props.label\n ? h(\n 'label',\n {\n for: controlId.value,\n 'data-iris-form-field-label': '',\n style: labelStyle.value,\n },\n [\n props.label,\n props.required\n ? h(\n 'span',\n {\n 'aria-hidden': 'true',\n 'data-iris-form-field-required': '',\n style: { color: 'var(--iris-danger)' },\n },\n '*',\n )\n : null,\n ],\n )\n : null,\n // The wrapped control + any trailing siblings.\n h(Fragment, null, [injected, ...restChildren]),\n props.hint && !props.error\n ? h(\n 'div',\n {\n id: hintId,\n 'data-iris-form-field-hint': '',\n style: { fontSize: '12px', color: 'var(--iris-muted)' },\n },\n props.hint,\n )\n : null,\n props.error\n ? h(\n 'div',\n {\n id: errorId,\n 'data-iris-form-field-error': '',\n role: 'alert',\n style: { fontSize: '12px', color: 'var(--iris-danger)' },\n },\n props.error,\n )\n : null,\n ],\n )\n }\n },\n})\n","import { computed, defineComponent, h, ref, watch, type PropType } from 'vue'\nimport { useI18n } from '../../i18n'\n\nexport type IrisAlertTone = 'info' | 'success' | 'warning' | 'danger'\n\nconst TONE_TO_VAR: Record<IrisAlertTone, string> = {\n info: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n}\n\n/**\n * Inline status / feedback callout. Use for page- or section-level messages\n * that are part of the document flow (NOT transient — those use Toast).\n *\n * Composition:\n *\n * ```html\n * <IrisAlert tone=\"warning\" closable @close=\"...\">\n * <template #title>Heads up</template>\n * Storage is at 85 % of quota.\n * </IrisAlert>\n * ```\n *\n * Controlled (`v-model:open`) or uncontrolled (default visible). When closed\n * (uncontrolled), the component returns `null` from render rather than\n * leaving an empty wrapper in the tree.\n */\nexport const IrisAlert = defineComponent({\n name: 'IrisAlert',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<IrisAlertTone>, default: 'info' },\n title: { type: String, default: '' },\n /** When true, a close button is rendered. */\n closable: { type: Boolean, default: false },\n /** Controlled visibility. Omit for uncontrolled (defaults to visible). */\n open: { type: Boolean, default: undefined },\n },\n emits: {\n 'update:open': (_value: boolean) => true,\n close: () => true,\n },\n setup(props, { slots, attrs, emit }) {\n const { t } = useI18n()\n const internalOpen = ref(true)\n\n watch(\n () => props.open,\n (value) => {\n if (value !== undefined) internalOpen.value = value\n },\n )\n\n const isOpen = computed(() => (props.open !== undefined ? props.open : internalOpen.value))\n\n const onClose = () => {\n if (props.open === undefined) internalOpen.value = false\n emit('update:open', false)\n emit('close')\n }\n\n const tonalVar = computed(() => `var(${TONE_TO_VAR[props.tone]})`)\n\n const containerStyle = computed<Record<string, string>>(() => ({\n display: 'flex',\n gap: 'var(--iris-gap-md, 12px)',\n padding: 'var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${tonalVar.value}`,\n // `backgroundColor` is the precomputed fallback under color-mix (engines\n // without it); the `background` shorthand overrides with the exact mix.\n backgroundColor: `var(${TONE_TO_VAR[props.tone]}-subtle)`,\n background: `color-mix(in srgb, ${tonalVar.value} 10%, var(--iris-background))`,\n color: 'var(--iris-foreground)',\n alignItems: 'flex-start',\n }))\n\n return () => {\n if (!isOpen.value) return null\n return h(\n 'div',\n {\n ...attrs,\n role: props.tone === 'danger' || props.tone === 'warning' ? 'alert' : 'status',\n 'data-iris-alert': '',\n 'data-iris-alert-tone': props.tone,\n style: { ...containerStyle.value, ...((attrs.style as Record<string, string>) ?? {}) },\n },\n [\n slots.icon\n ? h(\n 'span',\n {\n 'data-iris-alert-icon': '',\n style: { color: tonalVar.value, flexShrink: '0', display: 'inline-flex' },\n },\n slots.icon(),\n )\n : null,\n h('div', { 'data-iris-alert-body': '', style: { flex: '1', minWidth: '0' } }, [\n props.title || slots.title\n ? h(\n 'div',\n {\n 'data-iris-alert-title': '',\n style: { fontWeight: '600', marginBottom: '4px', color: tonalVar.value },\n },\n slots.title?.() ?? props.title,\n )\n : null,\n h('div', { 'data-iris-alert-content': '' }, slots.default?.()),\n ]),\n props.closable\n ? h(\n 'button',\n {\n type: 'button',\n 'data-iris-alert-close': '',\n 'aria-label': t('alert.close'),\n onClick: onClose,\n style: {\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n fontSize: '16px',\n padding: '0',\n lineHeight: '1',\n flexShrink: '0',\n },\n },\n '✕',\n )\n : null,\n ],\n )\n }\n },\n})\n","import { computed, defineComponent, h, type PropType } from 'vue'\n\nexport type IrisDividerOrientation = 'horizontal' | 'vertical'\nexport type IrisDividerSpacing = 'sm' | 'md' | 'lg'\n\nconst SPACING_MAP: Record<IrisDividerSpacing, string> = {\n sm: '8px',\n md: '16px',\n lg: '24px',\n}\n\n/**\n * Visual separator. Horizontal renders an `<hr>` for semantic correctness\n * (or a labelled `<div role=\"separator\">` when a label slot is supplied).\n * Vertical always renders a `<div role=\"separator\">`.\n *\n * Pass a `label` (or label slot) to render text in the middle — \"OR\"\n * separators, section dividers, etc.\n */\nexport const IrisDivider = defineComponent({\n name: 'IrisDivider',\n inheritAttrs: false,\n props: {\n orientation: { type: String as PropType<IrisDividerOrientation>, default: 'horizontal' },\n label: { type: String, default: '' },\n spacing: { type: String as PropType<IrisDividerSpacing>, default: 'md' },\n },\n setup(props, { slots, attrs }) {\n const isHorizontal = computed(() => props.orientation === 'horizontal')\n const hasLabel = computed(() => Boolean(props.label || slots.default))\n\n return () => {\n if (isHorizontal.value && !hasLabel.value) {\n return h('hr', {\n ...attrs,\n 'data-iris-divider': '',\n 'data-iris-divider-orientation': 'horizontal',\n style: {\n border: 'none',\n borderTop: '1px solid var(--iris-border)',\n margin: `${SPACING_MAP[props.spacing]} 0`,\n width: '100%',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n })\n }\n\n if (!isHorizontal.value) {\n return h('div', {\n ...attrs,\n role: 'separator',\n 'aria-orientation': 'vertical',\n 'data-iris-divider': '',\n 'data-iris-divider-orientation': 'vertical',\n style: {\n display: 'inline-block',\n width: '1px',\n alignSelf: 'stretch',\n background: 'var(--iris-border)',\n margin: `0 ${SPACING_MAP[props.spacing]}`,\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n })\n }\n\n // Horizontal + label → 3-column flex with text in the middle.\n return h(\n 'div',\n {\n ...attrs,\n role: 'separator',\n 'aria-orientation': 'horizontal',\n 'data-iris-divider': '',\n 'data-iris-divider-orientation': 'horizontal',\n 'data-iris-divider-has-label': 'true',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n margin: `${SPACING_MAP[props.spacing]} 0`,\n color: 'var(--iris-muted)',\n fontSize: '12px',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h('span', { 'data-iris-divider-line': 'before', style: lineStyle() }),\n h('span', { 'data-iris-divider-label': '' }, slots.default?.() ?? props.label),\n h('span', { 'data-iris-divider-line': 'after', style: lineStyle() }),\n ],\n )\n }\n },\n})\n\nfunction lineStyle(): Record<string, string> {\n return {\n flex: '1',\n height: '1px',\n background: 'var(--iris-border)',\n }\n}\n","import { defineComponent, h, ref } from 'vue'\nimport { IrisStack } from '../layouts/Stack'\nimport { IrisContainer } from '../layouts/Container'\nimport { IrisInput } from '../primitives/input/Input'\nimport { IrisPasswordInput } from '../primitives/password-input/PasswordInput'\nimport { IrisCheckbox } from '../primitives/checkbox/Checkbox'\nimport { IrisButton } from '../primitives/button/Button'\nimport { IrisFormField } from '../primitives/form-field/FormField'\nimport { IrisAlert } from '../primitives/alert/Alert'\nimport { IrisDivider } from '../primitives/divider/Divider'\n\nexport interface IrisLoginSubmitPayload {\n email: string\n password: string\n remember: boolean\n}\n\n/**\n * Layer 4 system skeleton: a centered login page using only Iris primitives.\n * Demonstrates the recommended composition pattern (Container + Stack +\n * FormField wrappers) for forms.\n *\n * The template is opinionated about layout and a11y; data binding is left to\n * the consumer via the `submit` event + slot props.\n */\nexport const IrisLoginTemplate = defineComponent({\n name: 'IrisLoginTemplate',\n inheritAttrs: false,\n props: {\n title: { type: String, default: 'Sign in' },\n description: { type: String, default: '' },\n /** Show \"Remember me\" checkbox. */\n showRemember: { type: Boolean, default: true },\n /** Error message shown above the form. */\n error: { type: String, default: '' },\n submitLabel: { type: String, default: 'Sign in' },\n /** Disable the entire form (e.g. while a request is pending). */\n loading: { type: Boolean, default: false },\n },\n emits: {\n submit: (_payload: IrisLoginSubmitPayload) => true,\n },\n setup(props, { attrs, slots, emit }) {\n const email = ref('')\n const password = ref('')\n const remember = ref(false)\n\n const onSubmit = (event: Event) => {\n event.preventDefault()\n emit('submit', {\n email: email.value,\n password: password.value,\n remember: remember.value,\n })\n }\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-login-template': '',\n style: {\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n padding: '24px',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n h(IrisContainer, { maxWidth: '420px', padding: 0 }, () => [\n h(\n 'form',\n {\n onSubmit,\n 'data-iris-login-form': '',\n style: {\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-lg, 8px)',\n padding: '32px',\n boxShadow: '0 6px 20px -8px rgba(0, 0, 0, 0.16)',\n },\n },\n [\n h(IrisStack, { spacing: 'lg' }, () => [\n slots.header\n ? slots.header()\n : h('div', { style: { textAlign: 'center' } }, [\n h(\n 'h1',\n {\n style: {\n margin: '0 0 4px 0',\n fontSize: '22px',\n fontWeight: '700',\n },\n },\n props.title,\n ),\n props.description\n ? h(\n 'p',\n {\n style: {\n margin: '0',\n color: 'var(--iris-muted)',\n fontSize: '14px',\n },\n },\n props.description,\n )\n : null,\n ]),\n props.error ? h(IrisAlert, { tone: 'danger', title: props.error }) : null,\n h(IrisFormField, { label: 'Email', required: true }, () =>\n h(IrisInput, {\n type: 'email',\n modelValue: email.value,\n 'onUpdate:modelValue': (v: string) => (email.value = v),\n placeholder: 'you@example.com',\n disabled: props.loading,\n autocomplete: 'email',\n } as Record<string, unknown>),\n ),\n h(IrisFormField, { label: 'Password', required: true }, () =>\n h(IrisPasswordInput, {\n modelValue: password.value,\n 'onUpdate:modelValue': (v: string) => (password.value = v),\n placeholder: 'Enter your password',\n disabled: props.loading,\n autocomplete: 'current-password',\n } as Record<string, unknown>),\n ),\n props.showRemember\n ? h(\n 'div',\n {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n },\n [\n h(\n IrisCheckbox,\n {\n modelValue: remember.value,\n 'onUpdate:modelValue': (v: boolean | 'indeterminate') => {\n remember.value = v === true\n },\n disabled: props.loading,\n } as Record<string, unknown>,\n () => 'Remember me',\n ),\n slots.forgot ? slots.forgot() : null,\n ],\n )\n : null,\n h(\n IrisButton,\n {\n type: 'submit',\n variant: 'solid',\n loading: props.loading,\n style: { width: '100%' },\n } as Record<string, unknown>,\n () => props.submitLabel,\n ),\n slots.footer\n ? h('div', null, [h(IrisDivider, { spacing: 'md', label: 'or' }), slots.footer()])\n : null,\n ]),\n ],\n ),\n ]),\n )\n },\n})\n","import { computed, defineComponent, h, ref, watch, type PropType } from 'vue'\nimport { IrisSidebarLayout } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisDashboardGrid, IrisDashboardCard } from '../layouts/DashboardGrid'\nimport { IrisStack } from '../layouts/Stack'\n\nexport interface IrisDashboardNavItem {\n id: string\n label: string\n /** Optional icon (any ReactNode-like; ignored if `slots.icon` is used). */\n icon?: string\n}\n\nexport interface IrisDashboardCardSpec {\n id: string\n title: string\n colSpan?: number | 'full'\n rowSpan?: number\n /** Plain text or HTML — replace via `#card.<id>` slot for full control. */\n body?: string\n}\n\n/**\n * Layer 4 system skeleton: a 3-region dashboard shell — sidebar + header +\n * main grid. Built from `IrisSidebarLayout` + `IrisHeaderLayout` +\n * `IrisDashboardGrid` so it inherits collapsing, sticky header, and responsive\n * column layout out of the box.\n */\nexport const IrisDashboardTemplate = defineComponent({\n name: 'IrisDashboardTemplate',\n inheritAttrs: false,\n props: {\n title: { type: String, default: 'Dashboard' },\n sidebarTitle: { type: String, default: '' },\n nav: { type: Array as PropType<IrisDashboardNavItem[]>, default: () => [] },\n /** Currently active nav item id. */\n activeId: { type: String, default: '' },\n /** Cards to render in the main grid. Skip to use the `default` slot only. */\n cards: { type: Array as PropType<IrisDashboardCardSpec[]>, default: () => [] },\n defaultCollapsed: { type: Boolean, default: false },\n /**\n * Controlled collapsed state. When unset (`undefined`), the component\n * manages its own state seeded from `defaultCollapsed`; when set, this\n * value takes precedence and changes are re-emitted via\n * `update:collapsed` (`v-model:collapsed`).\n */\n collapsed: { type: Boolean, default: undefined },\n },\n emits: {\n 'update:activeId': (_id: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { attrs, slots, 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 (mirrors\n // IrisSidebarLayout). `immediate` fires the watcher on mount; the\n // `value !== undefined` guard keeps the first run a no-op for\n // pure-uncontrolled mounts so `defaultCollapsed` stays untouched.\n watch(\n () => props.collapsed,\n (value) => {\n if (value !== undefined) internalCollapsed.value = value\n },\n { immediate: true },\n )\n\n const onSelectNav = (id: string) => {\n emit('update:activeId', id)\n }\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-dashboard-template': '',\n style: {\n width: '100%',\n height: '100vh',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n h(\n IrisSidebarLayout,\n {\n collapsed: collapsed.value,\n 'onUpdate:collapsed': (v: boolean) => {\n if (!isControlled.value) internalCollapsed.value = v\n emit('update:collapsed', v)\n },\n width: 240,\n collapsedWidth: 64,\n } as Record<string, unknown>,\n {\n sidebar: (state: { collapsed: boolean; setCollapsed: (v: boolean) => void }) =>\n h(IrisStack, { spacing: 'sm', style: { padding: '12px' } }, () => [\n slots['sidebar-header']\n ? slots['sidebar-header'](state)\n : props.sidebarTitle\n ? h(\n 'div',\n {\n style: {\n padding: '8px 12px',\n fontSize: '14px',\n fontWeight: '600',\n color: 'var(--iris-foreground)',\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n },\n props.sidebarTitle,\n )\n : null,\n h(\n 'nav',\n {\n 'aria-label': 'Primary',\n style: { display: 'flex', flexDirection: 'column', gap: '2px' },\n },\n props.nav.map((item) => {\n const isActive = item.id === props.activeId\n return h(\n 'button',\n {\n key: item.id,\n type: 'button',\n 'data-iris-dashboard-nav-item': item.id,\n 'data-iris-dashboard-nav-active': isActive ? 'true' : undefined,\n onClick: () => onSelectNav(item.id),\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '8px 12px',\n background: isActive ? 'var(--iris-primary)' : 'transparent',\n color: isActive\n ? 'var(--iris-primary-foreground, #fff)'\n : 'var(--iris-foreground)',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n fontSize: '14px',\n fontFamily: 'inherit',\n textAlign: 'start',\n outline: 'none',\n },\n },\n [\n item.icon\n ? h(\n 'span',\n {\n 'aria-hidden': 'true',\n style: {\n width: '16px',\n display: 'inline-flex',\n justifyContent: 'center',\n },\n },\n item.icon,\n )\n : null,\n h(\n 'span',\n {\n style: {\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n },\n },\n item.label,\n ),\n ],\n )\n }),\n ),\n ]),\n default: () =>\n h(IrisHeaderLayout, {} as Record<string, unknown>, {\n header: () =>\n slots.header\n ? slots.header()\n : h(\n 'div',\n {\n style: {\n padding: '12px 20px',\n fontSize: '16px',\n fontWeight: '600',\n },\n },\n props.title,\n ),\n default: () =>\n slots.default\n ? slots.default()\n : h(\n 'div',\n { style: { padding: '20px' } },\n h(IrisDashboardGrid, { columns: 12, gap: 16 }, () =>\n props.cards.map((card) =>\n h(\n IrisDashboardCard,\n {\n key: card.id,\n colSpan: card.colSpan ?? 4,\n rowSpan: card.rowSpan ?? 1,\n 'data-iris-dashboard-card-id': card.id,\n } as Record<string, unknown>,\n () => [\n h(\n 'h3',\n {\n style: {\n margin: '0 0 8px 0',\n fontSize: '14px',\n fontWeight: '600',\n color: 'var(--iris-foreground)',\n },\n },\n card.title,\n ),\n slots[`card.${card.id}`]\n ? slots[`card.${card.id}`]!()\n : card.body\n ? h(\n 'div',\n { style: { fontSize: '13px', color: 'var(--iris-muted)' } },\n card.body,\n )\n : null,\n ],\n ),\n ),\n ),\n ),\n }),\n },\n ),\n )\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/useDataSource.ts","../src/data/useGroupedView.ts"],"names":[],"mappings":";;;;;AAkCO,SAAS,cAAiB,MAAA,EAA+C;AAC9E,EAAA,MAAM,aAAa,gBAAA,CAAiB,EAAE,GAAG,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AACnE,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,KAAc,KAAA;AAEvC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,SAAA,CAAU,MAAM,KAAK,UAAA,CAAW,IAAA,EAAM,CAAA;AAAA,EACxC;AAGA,EAAA,cAAA,CAAe,MAAM,UAAA,CAAW,OAAA,EAAS,CAAA;AAEzC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA;AACvC,EAAA,OAAO,EAAE,GAAG,UAAA,EAAY,KAAA,EAAM;AAChC;ACnBO,SAAS,eACd,MAAA,EACwB;AACxB,EAAA,MAAM,UAAA,GAAa,kBAA0B,MAAM,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,SAAS,MAAM;AAC3B,IAAA,MAAM,IAAI,QAAA,CAAS,KAAA;AACnB,IAAA,OAAO,CAAA,CAAE,KAAA;AAAA,EACX,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,SAAS,CAAC,IAAA,EAAM,YAAY,UAAA,CAAW,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,IAC5D,WAAA,EAAa,CAAC,GAAA,KAAQ,UAAA,CAAW,YAAY,GAAG,CAAA;AAAA,IAChD,WAAA,EAAa,CAAC,GAAA,KAAQ,UAAA,CAAW,YAAY,GAAG,CAAA;AAAA,IAChD,aAAA,EAAe,CAAC,GAAA,KAAQ,UAAA,CAAW,cAAc,GAAG,CAAA;AAAA,IACpD,SAAA,EAAW,MAAM,UAAA,CAAW,SAAA,EAAU;AAAA,IACtC,WAAA,EAAa,MAAM,UAAA,CAAW,WAAA,EAAY;AAAA,IAC1C,KAAA;AAAA,IACA,SAAA,EAAW,CAAC,OAAA,KAAY,UAAA,CAAW,UAAU,OAAO;AAAA,GACtD;AACF","file":"chunk-DNRQVM3Q.js","sourcesContent":["import { onMounted, onScopeDispose, type ShallowRef } from 'vue'\nimport {\n createDataSource,\n type DataSourceController,\n type DataSourceConfig,\n type DataSourceState,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseDataSource<T> extends DataSourceController<T> {\n /**\n * The live data-source state as a reactive ref: rows, total, page/pageSize,\n * sort/multiSort, filters/filterRules, loading/loadingMore, hasMore,\n * selectedKeys, and the per-row pendingRows/rowErrors.\n */\n state: ShallowRef<DataSourceState<T>>\n}\n\n/**\n * Vue bridge over the framework-agnostic {@link createDataSource} — the unified\n * data engine (paged/infinite + multi-sort + typed filters + selection +\n * per-row + optimistic mutate). Creates the controller once in `setup()`,\n * mirrors its store into a reactive ref, and returns the controller plus its\n * live `state`. A thin bridge — all logic lives in `@iris-ui-kit/core`.\n *\n * Constructed with `immediate: false` so no fetch fires during `setup()`\n * (SSR-safe: server rendering never runs `onMounted`); the initial load is\n * kicked from `onMounted` when the caller's config says `immediate !== false`.\n * The `onMounted` registration is conditional on that flag — inside a bare\n * `effectScope` there is no component instance and Vue would warn on an\n * unconditional registration. The controller is torn down on scope dispose\n * (aborting any in-flight fetch), so a late response never writes back to a\n * torn-down instance.\n */\nexport function useDataSource<T>(config: DataSourceConfig<T>): UseDataSource<T> {\n const controller = createDataSource({ ...config, immediate: false })\n const immediate = config.immediate !== false\n\n if (immediate) {\n onMounted(() => void controller.load())\n }\n // Abort any in-flight fetch + detach the controller's internal subscriptions\n // on unmount (a late response must not write back to a torn-down instance).\n onScopeDispose(() => controller.destroy())\n\n const state = useStore(controller.store)\n return { ...controller, state }\n}\n","import { computed, type ComputedRef } from 'vue'\nimport {\n createGroupedView,\n type GroupedViewConfig,\n type GroupedViewState,\n type GroupedViewStore,\n} from '@iris-ui-kit/core'\nimport type { DataViewColumn } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseGroupedView<Row, K = string> {\n store: ReturnType<typeof createGroupedView<Row, K>>['store']\n setRows: (rows: readonly Row[], columns?: readonly DataViewColumn<Row>[]) => void\n toggleGroup: (key: K) => void\n expandGroup: (key: K) => void\n collapseGroup: (key: K) => void\n expandAll: () => void\n collapseAll: () => void\n /** Reactive live grouped-view state. */\n state: ComputedRef<GroupedViewState<Row, K>>\n setConfig: (partial: Partial<GroupedViewConfig<Row, K>>) => void\n}\n\n/**\n * Vue bridge over the framework-agnostic {@link createGroupedView}.\n * Creates the controller once, subscribes its store to a reactive ref,\n * and returns the controller plus a computed `state`.\n */\nexport function useGroupedView<Row, K = string>(\n config: GroupedViewConfig<Row, K>,\n): UseGroupedView<Row, K> {\n const controller = createGroupedView<Row, K>(config)\n const storeRef = useStore(controller.store)\n const state = computed(() => {\n const s = storeRef.value as GroupedViewStore<Row, K>\n return s.state\n })\n\n return {\n store: controller.store,\n setRows: (rows, columns) => controller.setRows(rows, columns),\n toggleGroup: (key) => controller.toggleGroup(key),\n expandGroup: (key) => controller.expandGroup(key),\n collapseGroup: (key) => controller.collapseGroup(key),\n expandAll: () => controller.expandAll(),\n collapseAll: () => controller.collapseAll(),\n state,\n setConfig: (partial) => controller.setConfig(partial),\n }\n}\n"]}
|