@iris-ui-kit/vue 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/admin.cjs +1869 -0
- package/dist/admin.cjs.map +1 -0
- package/dist/admin.d.cts +376 -0
- package/dist/admin.d.ts +376 -0
- package/dist/admin.js +10 -0
- package/dist/admin.js.map +1 -0
- package/dist/async.cjs +76 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.d.cts +59 -0
- package/dist/async.d.ts +59 -0
- package/dist/async.js +3 -0
- package/dist/async.js.map +1 -0
- package/dist/behaviors.cjs +659 -0
- package/dist/behaviors.cjs.map +1 -0
- package/dist/behaviors.d.cts +441 -0
- package/dist/behaviors.d.ts +441 -0
- package/dist/behaviors.js +3 -0
- package/dist/behaviors.js.map +1 -0
- package/dist/chunk-3FJUCHCC.js +146 -0
- package/dist/chunk-3FJUCHCC.js.map +1 -0
- package/dist/chunk-3R3QDLJC.js +172 -0
- package/dist/chunk-3R3QDLJC.js.map +1 -0
- package/dist/chunk-4FLIW67H.js +137 -0
- package/dist/chunk-4FLIW67H.js.map +1 -0
- package/dist/chunk-4FQ7XF52.js +3 -0
- package/dist/chunk-4FQ7XF52.js.map +1 -0
- package/dist/chunk-72PZMU6R.js +99 -0
- package/dist/chunk-72PZMU6R.js.map +1 -0
- package/dist/chunk-75GSYEJS.js +17 -0
- package/dist/chunk-75GSYEJS.js.map +1 -0
- package/dist/chunk-7IOJADZC.js +38 -0
- package/dist/chunk-7IOJADZC.js.map +1 -0
- package/dist/chunk-CIZGSGXN.js +651 -0
- package/dist/chunk-CIZGSGXN.js.map +1 -0
- package/dist/chunk-F77KIPOH.js +103 -0
- package/dist/chunk-F77KIPOH.js.map +1 -0
- package/dist/chunk-FJBYAIL4.js +1318 -0
- package/dist/chunk-FJBYAIL4.js.map +1 -0
- package/dist/chunk-H7HVVPYR.js +66 -0
- package/dist/chunk-H7HVVPYR.js.map +1 -0
- package/dist/chunk-I6D5VXQK.js +167 -0
- package/dist/chunk-I6D5VXQK.js.map +1 -0
- package/dist/chunk-PPYNXNGZ.js +73 -0
- package/dist/chunk-PPYNXNGZ.js.map +1 -0
- package/dist/chunk-QLUIKEMJ.js +1197 -0
- package/dist/chunk-QLUIKEMJ.js.map +1 -0
- package/dist/chunk-ROJV6RON.js +3 -0
- package/dist/chunk-ROJV6RON.js.map +1 -0
- package/dist/chunk-S43IHHBU.js +82 -0
- package/dist/chunk-S43IHHBU.js.map +1 -0
- package/dist/chunk-TCAXRWT6.js +108 -0
- package/dist/chunk-TCAXRWT6.js.map +1 -0
- package/dist/chunk-TQB5LVOH.js +17 -0
- package/dist/chunk-TQB5LVOH.js.map +1 -0
- package/dist/chunk-VM2CXEUA.js +46 -0
- package/dist/chunk-VM2CXEUA.js.map +1 -0
- package/dist/chunk-W2JVHGFR.js +103 -0
- package/dist/chunk-W2JVHGFR.js.map +1 -0
- package/dist/chunk-WL67XCH5.js +59 -0
- package/dist/chunk-WL67XCH5.js.map +1 -0
- package/dist/chunk-XCNCIG2I.js +165 -0
- package/dist/chunk-XCNCIG2I.js.map +1 -0
- package/dist/chunk-XSLBANUV.js +16 -0
- package/dist/chunk-XSLBANUV.js.map +1 -0
- package/dist/chunk-ZY4NLITM.js +73 -0
- package/dist/chunk-ZY4NLITM.js.map +1 -0
- package/dist/data.cjs +59 -0
- package/dist/data.cjs.map +1 -0
- package/dist/data.d.cts +46 -0
- package/dist/data.d.ts +46 -0
- package/dist/data.js +4 -0
- package/dist/data.js.map +1 -0
- package/dist/error-boundary.cjs +115 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +60 -0
- package/dist/error-boundary.d.ts +60 -0
- package/dist/error-boundary.js +4 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/floating.cjs +149 -0
- package/dist/floating.cjs.map +1 -0
- package/dist/floating.d.cts +106 -0
- package/dist/floating.d.ts +106 -0
- package/dist/floating.js +4 -0
- package/dist/floating.js.map +1 -0
- package/dist/form.cjs +144 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +128 -0
- package/dist/form.d.ts +128 -0
- package/dist/form.js +3 -0
- package/dist/form.js.map +1 -0
- package/dist/i18n.cjs +112 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +99 -0
- package/dist/i18n.d.ts +99 -0
- package/dist/i18n.js +3 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.cjs +18673 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8087 -0
- package/dist/index.d.ts +8087 -0
- package/dist/index.js +13525 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts.cjs +392 -0
- package/dist/layouts.cjs.map +1 -0
- package/dist/layouts.d.cts +406 -0
- package/dist/layouts.d.ts +406 -0
- package/dist/layouts.js +5 -0
- package/dist/layouts.js.map +1 -0
- package/dist/machine.cjs +19 -0
- package/dist/machine.cjs.map +1 -0
- package/dist/machine.d.cts +18 -0
- package/dist/machine.d.ts +18 -0
- package/dist/machine.js +4 -0
- package/dist/machine.js.map +1 -0
- package/dist/modal-utils.cjs +170 -0
- package/dist/modal-utils.cjs.map +1 -0
- package/dist/modal-utils.d.cts +43 -0
- package/dist/modal-utils.d.ts +43 -0
- package/dist/modal-utils.js +3 -0
- package/dist/modal-utils.js.map +1 -0
- package/dist/motion.cjs +88 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +43 -0
- package/dist/motion.d.ts +43 -0
- package/dist/motion.js +3 -0
- package/dist/motion.js.map +1 -0
- package/dist/provider.cjs +272 -0
- package/dist/provider.cjs.map +1 -0
- package/dist/provider.d.cts +130 -0
- package/dist/provider.d.ts +130 -0
- package/dist/provider.js +6 -0
- package/dist/provider.js.map +1 -0
- package/dist/resource.cjs +25 -0
- package/dist/resource.cjs.map +1 -0
- package/dist/resource.d.cts +17 -0
- package/dist/resource.d.ts +17 -0
- package/dist/resource.js +3 -0
- package/dist/resource.js.map +1 -0
- package/dist/skeletons.cjs +1659 -0
- package/dist/skeletons.cjs.map +1 -0
- package/dist/skeletons.d.cts +179 -0
- package/dist/skeletons.d.ts +179 -0
- package/dist/skeletons.js +7 -0
- package/dist/skeletons.js.map +1 -0
- package/dist/skins.cjs +138 -0
- package/dist/skins.cjs.map +1 -0
- package/dist/skins.d.cts +67 -0
- package/dist/skins.d.ts +67 -0
- package/dist/skins.js +3 -0
- package/dist/skins.js.map +1 -0
- package/dist/theme.cjs +106 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +103 -0
- package/dist/theme.d.ts +103 -0
- package/dist/theme.js +3 -0
- package/dist/theme.js.map +1 -0
- package/dist/undo.cjs +51 -0
- package/dist/undo.cjs.map +1 -0
- package/dist/undo.d.cts +48 -0
- package/dist/undo.d.ts +48 -0
- package/dist/undo.js +3 -0
- package/dist/undo.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/drag/useDrag.ts","../src/behaviors/Resizable.ts","../src/behaviors/Movable.ts","../src/behaviors/Hotkey.ts","../src/behaviors/ClickOutside.ts","../src/behaviors/Sortable.ts","../src/behaviors/LongPress.ts"],"names":["defineComponent","computed","ref","h","watchEffect","onBeforeUnmount"],"mappings":"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","file":"chunk-CIZGSGXN.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 VNode } 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 * 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 const renderHandle = (handle: IrisResizableHandle): VNode => {\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 = { ...size.value }\n aspect = startSize.width / Math.max(1, startSize.height)\n emit('resizeStart', startSize)\n },\n onDrag: ({ dx, dy }) => {\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 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 setSize({ width: nextW, height: nextH })\n },\n onEnd: () => {\n emit('resizeEnd', size.value)\n },\n })\n\n return h('div', {\n ref: (el: unknown) => {\n handleRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-resizable-handle': handle,\n style: {\n ...handlePosition(handle),\n touchAction: 'none',\n background: 'transparent',\n zIndex: '1',\n },\n })\n }\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 [slots.default?.(), ...props.handles.map(renderHandle)],\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, ref, type PropType, type VNode } from 'vue'\nimport { createSortable, type SortableRect } from '@iris-ui-kit/core'\n\n/** The data attribute on each sortable item for the collision system. */\nexport const SORTABLE_ITEM_ATTR = 'data-iris-sortable-item'\n\n/**\n * Behavior wrapper: makes a list of items sortable via drag-and-drop. Wraps\n * each direct child in a sortable item context. The consumer supplies the\n * `items` array and an `onReorder` callback. Items render through the default\n * slot; each item is wrapped with drag detection from `createSortable`.\n *\n * Composable: stack with `IrisResizable` / `IrisMovable` / `IrisHotkey` for\n * richer interactions on the same wrapped UI.\n *\n * @example\n * <IrisSortable :items=\"items\" @reorder=\"items = $event\">\n * <div v-for=\"(label, i) in items\" :key=\"i\">{{ label }}</div>\n * </IrisSortable>\n */\nexport const IrisSortable = defineComponent({\n name: 'IrisSortable',\n inheritAttrs: false,\n props: {\n /** The ordered items. Used to detect which item is at which position. */\n items: {\n type: Array as PropType<readonly unknown[]>,\n required: true,\n },\n /** Called when the user drops an item in a new position. */\n onReorder: {\n type: Function as PropType<(next: unknown[]) => void>,\n default: undefined,\n },\n /** Optional item key getter. Defaults to `String(index)`. */\n getKey: {\n type: Function as PropType<(item: unknown, index: number) => string>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n class: {\n type: String,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string | number>>,\n default: undefined,\n },\n },\n emits: {\n reorder: (_next: unknown[]) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const containerRef = ref<HTMLElement | null>(null)\n const sortable = createSortable()\n const activeKey = ref<string | null>(null)\n\n // Subscribe to sortable state changes to track the active drag key\n const unsub = sortable.subscribe((state) => {\n activeKey.value = state.activeId\n })\n onBeforeUnmount(unsub)\n\n // Find the DOM order index of a child by its data-iris-sortable-item value.\n const indexOf = (key: string): number => {\n const container = containerRef.value\n if (!container) return -1\n return Array.from(\n container.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`),\n ).findIndex((el) => el.getAttribute(SORTABLE_ITEM_ATTR) === key)\n }\n\n const onPointerDown = (e: PointerEvent) => {\n if (props.disabled) return\n const target = (e.target as HTMLElement).closest(`[${SORTABLE_ITEM_ATTR}]`)\n if (!target) return\n const container = containerRef.value\n if (!container) return\n const key = target.getAttribute(SORTABLE_ITEM_ATTR) ?? ''\n const index = indexOf(key)\n if (index < 0) return\n sortable.press(key, e.clientX, e.clientY)\n }\n\n const onPointerMove = (e: PointerEvent) => {\n if (!sortable.isPending() && sortable.getState().activeId === null) return\n const items = containerRef.value?.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`)\n const rects: SortableRect[] = Array.from(items ?? []).map((el) => {\n const rect = el.getBoundingClientRect()\n return {\n id: el.getAttribute(SORTABLE_ITEM_ATTR) ?? '',\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n })\n // Promote pending press to active drag once past the movement threshold\n sortable.tryStart(e.clientX, e.clientY)\n if (sortable.getState().activeId !== null) {\n sortable.moveOver({ x: e.clientX, y: e.clientY }, rects)\n }\n }\n\n const onPointerUp = () => {\n const state = sortable.getState()\n if (state.activeId === null) {\n sortable.cancel()\n return\n }\n const result = sortable.end()\n if (result.activeId && result.overId && result.activeId !== result.overId) {\n const from = indexOf(result.activeId)\n const to = indexOf(result.overId)\n if (from >= 0 && to >= 0) {\n const next = [...(props.items as unknown[])]\n const [moved] = next.splice(from, 1)\n next.splice(to, 0, moved!)\n if (props.onReorder) {\n props.onReorder(next)\n }\n emit('reorder', next)\n }\n }\n }\n\n const resolveKey = (item: unknown, index: number): string =>\n props.getKey ? props.getKey(item, index) : String(index)\n\n return () => {\n const children: VNode[] = []\n const defaultSlots = slots.default?.()\n if (defaultSlots) {\n const itemsArray = props.items as unknown[]\n defaultSlots.forEach((child, index) => {\n const item = itemsArray[index]\n const key = resolveKey(item, index)\n const isDragging = key === activeKey.value\n children.push(\n h(\n 'div',\n {\n key,\n [SORTABLE_ITEM_ATTR]: key,\n 'data-iris-sortable-dragging': isDragging ? '' : undefined,\n style: {\n transition: isDragging ? 'none' : 'transform 150ms ease',\n opacity: isDragging ? 0.4 : 1,\n position: 'relative',\n zIndex: isDragging ? 100 : undefined,\n },\n },\n [child],\n ),\n )\n })\n }\n\n return h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n containerRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-sortable': '',\n 'data-state': activeKey.value ? 'dragging' : 'idle',\n class: props.class,\n style: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--iris-gap-sm, 4px)',\n opacity: props.disabled ? 0.6 : 1,\n userSelect: activeKey.value ? 'none' : undefined,\n ...((props.style as Record<string, string | number> | undefined) ?? {}),\n },\n onPointerdown: onPointerDown,\n onPointermove: onPointerMove,\n onPointerup: onPointerUp,\n onPointerleave: onPointerUp,\n },\n children,\n )\n }\n },\n})\n","import { defineComponent, h, onBeforeUnmount, 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 ctrl = createLongPress({\n holdDelay: props.holdDelay,\n onLongPress: () => {\n props.onLongPress?.()\n emit('longpress')\n },\n })\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\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 },\n slots.default?.(),\n )\n },\n})\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { defineComponent, h, Fragment } from 'vue';
|
|
2
|
+
import { composeEventHandlers } from '@iris-ui-kit/core';
|
|
3
|
+
|
|
4
|
+
// src/primitives/slot/Slot.ts
|
|
5
|
+
function isEventListenerKey(key) {
|
|
6
|
+
return key.startsWith("on") && key.length > 2 && /[A-Z]/.test(key.charAt(2));
|
|
7
|
+
}
|
|
8
|
+
function composeRefs(...refs) {
|
|
9
|
+
return (el) => {
|
|
10
|
+
for (const r of refs) {
|
|
11
|
+
if (r == null) continue;
|
|
12
|
+
if (typeof r === "function") {
|
|
13
|
+
r(el);
|
|
14
|
+
} else if (typeof r === "object" && "value" in r) {
|
|
15
|
+
r.value = el;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function mergeSlotProps(parent, child) {
|
|
21
|
+
const out = { ...child };
|
|
22
|
+
for (const key in parent) {
|
|
23
|
+
const parentVal = parent[key];
|
|
24
|
+
const childVal = child[key];
|
|
25
|
+
if (isEventListenerKey(key)) {
|
|
26
|
+
if (typeof parentVal === "function" && typeof childVal === "function") {
|
|
27
|
+
out[key] = composeEventHandlers(
|
|
28
|
+
parentVal,
|
|
29
|
+
childVal
|
|
30
|
+
);
|
|
31
|
+
} else if (typeof parentVal === "function" && childVal == null) {
|
|
32
|
+
out[key] = parentVal;
|
|
33
|
+
}
|
|
34
|
+
} else if (key === "ref") {
|
|
35
|
+
if (parentVal != null && childVal != null) {
|
|
36
|
+
out[key] = composeRefs(parentVal, childVal);
|
|
37
|
+
} else if (parentVal != null) {
|
|
38
|
+
out[key] = parentVal;
|
|
39
|
+
}
|
|
40
|
+
} else if (key === "class") {
|
|
41
|
+
const merged = [parentVal, childVal].filter(Boolean).join(" ").trim();
|
|
42
|
+
if (merged) out[key] = merged;
|
|
43
|
+
} else if (key === "style") {
|
|
44
|
+
if (parentVal || childVal) {
|
|
45
|
+
out[key] = { ...parentVal, ...childVal };
|
|
46
|
+
}
|
|
47
|
+
} else if (!(key in child)) {
|
|
48
|
+
out[key] = parentVal;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
var IrisSlot = defineComponent({
|
|
54
|
+
name: "IrisSlot",
|
|
55
|
+
inheritAttrs: false,
|
|
56
|
+
setup(_, { slots, attrs }) {
|
|
57
|
+
return () => {
|
|
58
|
+
const children = slots.default?.();
|
|
59
|
+
const root = findFirstElement(children);
|
|
60
|
+
if (!root) {
|
|
61
|
+
if (typeof process === "undefined" || process.env?.NODE_ENV !== "production") {
|
|
62
|
+
console.warn("[iris-ui] IrisSlot expected exactly one child element; got none.");
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const merged = mergeSlotProps(
|
|
67
|
+
attrs,
|
|
68
|
+
root.props ?? {}
|
|
69
|
+
);
|
|
70
|
+
return h(root.type, merged, root.children);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
function findFirstElement(children) {
|
|
75
|
+
if (!children || children.length === 0) return null;
|
|
76
|
+
let found = null;
|
|
77
|
+
let extraCount = 0;
|
|
78
|
+
const walk = (nodes) => {
|
|
79
|
+
for (const node of nodes) {
|
|
80
|
+
if (node.type === Fragment) {
|
|
81
|
+
const fragChildren = Array.isArray(node.children) ? node.children : [];
|
|
82
|
+
walk(fragChildren);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (typeof node.type === "string" || typeof node.type === "object" || typeof node.type === "function") {
|
|
86
|
+
if (found) {
|
|
87
|
+
extraCount += 1;
|
|
88
|
+
} else {
|
|
89
|
+
found = node;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
walk(children);
|
|
95
|
+
if (extraCount > 0 && (typeof process === "undefined" || process.env?.NODE_ENV !== "production")) {
|
|
96
|
+
console.warn(`[iris-ui] IrisSlot got ${extraCount + 1} root elements; only the first is used.`);
|
|
97
|
+
}
|
|
98
|
+
return found;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { IrisSlot, composeRefs, findFirstElement, mergeSlotProps };
|
|
102
|
+
//# sourceMappingURL=chunk-F77KIPOH.js.map
|
|
103
|
+
//# sourceMappingURL=chunk-F77KIPOH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/slot/Slot.ts"],"names":[],"mappings":"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","file":"chunk-F77KIPOH.js","sourcesContent":["import { defineComponent, Fragment, h, type VNode } from 'vue'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\n\n/** Test whether a prop key looks like a Vue event listener: `onXxx`. */\nfunction isEventListenerKey(key: string): boolean {\n return key.startsWith('on') && key.length > 2 && /[A-Z]/.test(key.charAt(2))\n}\n\n/**\n * Compose multiple Vue template refs into a single function ref. Each input\n * may be a `Ref<HTMLElement | null>`, a function ref `(el) => void`, or null.\n * All non-null inputs are invoked / assigned with the same element.\n */\nexport function composeRefs(...refs: Array<unknown>): (el: unknown) => void {\n return (el: unknown) => {\n for (const r of refs) {\n if (r == null) continue\n if (typeof r === 'function') {\n ;(r as (el: unknown) => void)(el)\n } else if (typeof r === 'object' && 'value' in (r as object)) {\n ;(r as { value: unknown }).value = el\n }\n }\n }\n}\n\n/**\n * Merge parent (slot) props onto a child VNode's props with Radix-style\n * semantics:\n *\n * - **Event handlers (`on*`)**: composed via `composeEventHandlers` — the\n * parent's handler runs first; if it calls `event.preventDefault()`, the\n * child's handler is skipped. This lets the parent intercept (e.g. when\n * IrisButton is `disabled`).\n * - **`class`**: concatenated, parent first.\n * - **`style`**: shallow-merged, child wins on key conflicts.\n * - **Anything else**: child wins (the user's explicit prop is authoritative).\n */\nexport function mergeSlotProps(\n parent: Record<string, unknown>,\n child: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...child }\n\n for (const key in parent) {\n const parentVal = parent[key]\n const childVal = child[key]\n\n if (isEventListenerKey(key)) {\n if (typeof parentVal === 'function' && typeof childVal === 'function') {\n out[key] = composeEventHandlers(\n parentVal as (e: { defaultPrevented: boolean }) => void,\n childVal as (e: { defaultPrevented: boolean }) => void,\n )\n } else if (typeof parentVal === 'function' && childVal == null) {\n out[key] = parentVal\n }\n // If only child has it, child wins (already in `out`).\n } else if (key === 'ref') {\n if (parentVal != null && childVal != null) {\n out[key] = composeRefs(parentVal, childVal)\n } else if (parentVal != null) {\n out[key] = parentVal\n }\n // If only child has a ref, child wins (already in `out`).\n } else if (key === 'class') {\n const merged = [parentVal, childVal].filter(Boolean).join(' ').trim()\n if (merged) out[key] = merged\n } else if (key === 'style') {\n if (parentVal || childVal) {\n out[key] = { ...(parentVal as object | undefined), ...(childVal as object | undefined) }\n }\n } else if (!(key in child)) {\n out[key] = parentVal\n }\n // else: non-handler, present in both — child wins (already in `out`).\n }\n\n return out\n}\n\n/**\n * Polymorphic root helper. Renders the user's single child VNode with the\n * parent's attrs merged onto it via `mergeSlotProps`.\n *\n * Inspired by Radix UI's `<Slot>`. Used by primitives that need to render\n * \"as\" the user's child element instead of their own default element.\n *\n * **Limitation (intentional in this iteration)**: template `ref`s placed on\n * the slotted child are not forwarded. Use a wrapping element or wait for a\n * future iteration.\n *\n * @example\n * <IrisSlot class=\"iris-button\" data-iris-button-variant=\"solid\">\n * <RouterLink to=\"/save\">Save</RouterLink>\n * </IrisSlot>\n * // → <RouterLink class=\"iris-button\" data-iris-button-variant=\"solid\" to=\"/save\">Save</RouterLink>\n */\nexport const IrisSlot = defineComponent({\n name: 'IrisSlot',\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n return () => {\n const children = slots.default?.()\n const root = findFirstElement(children)\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisSlot expected exactly one child element; got none.')\n }\n return null\n }\n const merged = mergeSlotProps(\n attrs as Record<string, unknown>,\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})\n\n/**\n * Walk a VNode array (which may contain Fragments / Comments / Text) and\n * return the first usable element VNode. Warns in dev if there are multiple\n * sibling roots.\n */\nexport function findFirstElement(children: VNode[] | undefined): VNode | null {\n if (!children || children.length === 0) return null\n\n let found: VNode | null = null\n let extraCount = 0\n\n const walk = (nodes: VNode[]) => {\n for (const node of nodes) {\n if (node.type === Fragment) {\n const fragChildren = Array.isArray(node.children) ? (node.children as VNode[]) : []\n walk(fragChildren)\n continue\n }\n if (\n typeof node.type === 'string' ||\n typeof node.type === 'object' ||\n typeof node.type === 'function'\n ) {\n if (found) {\n extraCount += 1\n } else {\n found = node\n }\n }\n }\n }\n walk(children)\n\n if (\n extraCount > 0 &&\n (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production')\n ) {\n console.warn(`[iris-ui] IrisSlot got ${extraCount + 1} root elements; only the first is used.`)\n }\n\n return found\n}\n"]}
|