@iris-ui-kit/vue 0.2.20 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin.cjs +23 -2
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.js +3 -3
- package/dist/{chunk-I6D5VXQK.js → chunk-3V46HGRC.js} +4 -3
- package/dist/chunk-3V46HGRC.js.map +1 -0
- package/dist/{chunk-MMQKSFME.js → chunk-4WQOZ2OV.js} +6 -4
- package/dist/chunk-4WQOZ2OV.js.map +1 -0
- package/dist/{chunk-QLUIKEMJ.js → chunk-ENKE2BPC.js} +3 -3
- package/dist/{chunk-QLUIKEMJ.js.map → chunk-ENKE2BPC.js.map} +1 -1
- package/dist/{chunk-W2JVHGFR.js → chunk-MO7AAXA6.js} +33 -13
- package/dist/chunk-MO7AAXA6.js.map +1 -0
- package/dist/{chunk-H7HVVPYR.js → chunk-UPC4GN3F.js} +8 -2
- package/dist/chunk-UPC4GN3F.js.map +1 -0
- package/dist/{chunk-72PZMU6R.js → chunk-ZTPIXL7Q.js} +21 -3
- package/dist/chunk-ZTPIXL7Q.js.map +1 -0
- package/dist/index.cjs +81 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +31 -10
- package/dist/index.js.map +1 -1
- package/dist/layouts.cjs +2 -1
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.js +1 -1
- package/dist/provider.cjs +53 -9
- package/dist/provider.cjs.map +1 -1
- package/dist/provider.js +3 -3
- package/dist/skeletons.cjs +2 -1
- package/dist/skeletons.cjs.map +1 -1
- package/dist/skeletons.js +2 -2
- package/dist/skins.cjs +6 -0
- package/dist/skins.cjs.map +1 -1
- package/dist/skins.js +1 -1
- package/dist/theme.cjs +19 -1
- package/dist/theme.cjs.map +1 -1
- package/dist/theme.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-72PZMU6R.js.map +0 -1
- package/dist/chunk-H7HVVPYR.js.map +0 -1
- package/dist/chunk-I6D5VXQK.js.map +0 -1
- package/dist/chunk-MMQKSFME.js.map +0 -1
- package/dist/chunk-W2JVHGFR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
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"],"mappings":"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","file":"chunk-QLUIKEMJ.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 { defineComponent, h, ref, 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 emits: {\n 'update:activeId': (_id: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { attrs, slots, emit }) {\n const collapsed = ref(props.defaultCollapsed)\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 collapsed.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
|
+
{"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"],"mappings":"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","file":"chunk-ENKE2BPC.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 { defineComponent, h, ref, 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 emits: {\n 'update:activeId': (_id: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { attrs, slots, emit }) {\n const collapsed = ref(props.defaultCollapsed)\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 collapsed.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,7 +1,7 @@
|
|
|
1
|
-
import { SkinProvider } from './chunk-
|
|
2
|
-
import { ThemeProvider } from './chunk-
|
|
1
|
+
import { SkinProvider } from './chunk-UPC4GN3F.js';
|
|
2
|
+
import { ThemeProvider } from './chunk-ZTPIXL7Q.js';
|
|
3
3
|
import { IrisI18nProvider } from './chunk-TCAXRWT6.js';
|
|
4
|
-
import { defineComponent,
|
|
4
|
+
import { defineComponent, shallowRef, shallowReactive, provide, onMounted, watch, onBeforeUnmount, h, inject } from 'vue';
|
|
5
5
|
import { runPlugins } from '@iris-ui-kit/core';
|
|
6
6
|
import { applyCssVars } from '@iris-ui-kit/theme';
|
|
7
7
|
|
|
@@ -22,25 +22,45 @@ var IrisProvider = defineComponent({
|
|
|
22
22
|
target: { type: Object, default: null }
|
|
23
23
|
},
|
|
24
24
|
setup(props, { slots }) {
|
|
25
|
-
const collected = runPlugins(props.plugins ?? []);
|
|
25
|
+
const collected = shallowRef(runPlugins(props.plugins ?? []));
|
|
26
|
+
const ctx = shallowReactive({
|
|
27
|
+
stores: collected.value.stores,
|
|
28
|
+
installed: new Set((props.plugins ?? []).map((p) => p.name))
|
|
29
|
+
});
|
|
30
|
+
provide(PluginStoreContextKey, ctx);
|
|
26
31
|
let applied = null;
|
|
32
|
+
let mounted = false;
|
|
27
33
|
onMounted(() => {
|
|
34
|
+
mounted = true;
|
|
28
35
|
if (typeof document === "undefined") return;
|
|
29
36
|
const el = props.target ?? document.documentElement;
|
|
30
|
-
applied = applyCssVars(Object.entries(collected.tokens), el);
|
|
37
|
+
applied = applyCssVars(Object.entries(collected.value.tokens), el);
|
|
31
38
|
});
|
|
39
|
+
watch(
|
|
40
|
+
() => props.plugins,
|
|
41
|
+
(next) => {
|
|
42
|
+
const prev = collected.value;
|
|
43
|
+
const nextCollected = runPlugins(next ?? []);
|
|
44
|
+
applied?.revert();
|
|
45
|
+
applied = null;
|
|
46
|
+
prev.teardown();
|
|
47
|
+
collected.value = nextCollected;
|
|
48
|
+
ctx.stores = nextCollected.stores;
|
|
49
|
+
ctx.installed = new Set((next ?? []).map((p) => p.name));
|
|
50
|
+
if (mounted && typeof document !== "undefined") {
|
|
51
|
+
const el = props.target ?? document.documentElement;
|
|
52
|
+
applied = applyCssVars(Object.entries(nextCollected.tokens), el);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
);
|
|
32
56
|
onBeforeUnmount(() => {
|
|
33
57
|
applied?.revert();
|
|
34
58
|
applied = null;
|
|
35
|
-
collected.teardown();
|
|
36
|
-
});
|
|
37
|
-
provide(PluginStoreContextKey, {
|
|
38
|
-
stores: collected.stores,
|
|
39
|
-
installed: new Set((props.plugins ?? []).map((p) => p.name))
|
|
59
|
+
collected.value.teardown();
|
|
40
60
|
});
|
|
41
61
|
return () => {
|
|
42
62
|
const locale = props.locale ?? DEFAULT_LOCALE;
|
|
43
|
-
const messages = { ...collected.messages[locale], ...props.messages ?? {} };
|
|
63
|
+
const messages = { ...collected.value.messages[locale], ...props.messages ?? {} };
|
|
44
64
|
let tree = h(
|
|
45
65
|
IrisI18nProvider,
|
|
46
66
|
{ locale: props.locale, messages },
|
|
@@ -99,5 +119,5 @@ function usePluginStore(nsOrKey, key) {
|
|
|
99
119
|
}
|
|
100
120
|
|
|
101
121
|
export { IrisProvider, PluginStoreContextKey, usePlugin, usePluginStore };
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-MO7AAXA6.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-MO7AAXA6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/context.ts","../src/provider/IrisProvider.ts","../src/provider/hooks.ts"],"names":[],"mappings":"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","file":"chunk-MO7AAXA6.js","sourcesContent":["import { type InjectionKey } from 'vue'\n\n/**\n * Shape carried by the plugin-store context: the live store instances collected\n * from every installed plugin, plus the set of installed plugin names. Surfaced\n * to descendants through `usePluginStore` / `usePlugin`.\n */\nexport interface PluginStoreContext {\n stores: Map<string, unknown>\n installed: Set<string>\n}\n\n/**\n * Injection key for the {@link PluginStoreContext}. The name ends in `Key` (and\n * the type in `Context`) so the manifest's discover step never mistakes it for a\n * component export.\n */\nexport const PluginStoreContextKey: InjectionKey<PluginStoreContext> = Symbol('IrisPluginStore')\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n provide,\n shallowReactive,\n shallowRef,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { runPlugins, type CollectedRegistrations, type IrisPlugin } from '@iris-ui-kit/core'\nimport { applyCssVars, type ApplyCssVarsResult, type ThemeStore } from '@iris-ui-kit/theme'\nimport type { SkinEngine } from '@iris-ui-kit/skins'\nimport { ThemeProvider } from '../theme'\nimport { SkinProvider } from '../skins'\nimport { IrisI18nProvider } from '../i18n'\nimport { PluginStoreContextKey, type PluginStoreContext } from './context'\n\nconst DEFAULT_LOCALE = 'en-US'\n\n/** Public prop surface of {@link IrisProvider}. */\nexport interface IrisProviderProps {\n /** Theme store; when present the inner `ThemeProvider` wraps the subtree. */\n theme?: ThemeStore\n /** Skin engine; when present the inner `SkinProvider` wraps the subtree. */\n skin?: SkinEngine\n /** Writing direction, forwarded to `ThemeProvider` when a theme is given. */\n dir?: 'ltr' | 'rtl'\n /** Active BCP-47 locale; defaults to `'en-US'`. */\n locale?: string\n /** User messages — merged OVER plugin-registered messages (user wins). */\n messages?: Record<string, string>\n /** Plugins to install; their tokens / messages / stores are collected once. */\n plugins?: IrisPlugin[]\n /** Element receiving the plugin token layer; defaults to `documentElement`. */\n target?: HTMLElement | null\n}\n\n/**\n * The single unified Iris entry point. Runs `plugins` through the core\n * `runPlugins` collector and wires the result into the theme (tokens), i18n\n * (messages) and a plugin-store context, composing the existing per-framework\n * providers. A thin bridge — the real logic lives in `@iris-ui-kit/core`.\n *\n * Render order when present: Theme → Skin → I18n → PluginContext → children.\n */\nexport const IrisProvider = defineComponent({\n name: 'IrisProvider',\n props: {\n theme: { type: Object as PropType<ThemeStore>, default: undefined },\n skin: { type: Object as PropType<SkinEngine>, default: undefined },\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n locale: { type: String, default: undefined },\n messages: { type: Object as PropType<Record<string, string>>, default: undefined },\n plugins: { type: Array as PropType<IrisPlugin[]>, default: undefined },\n target: { type: Object as PropType<HTMLElement | null>, default: null },\n },\n setup(props, { slots }) {\n // R1: `collected` is reactive so a `plugins` swap re-derives everything\n // downstream (tokens, messages, stores, installed set). Shallow: the stores\n // Map and store instances stay raw — never proxied — so `instanceof` /\n // private fields on class-based stores keep working.\n const collected = shallowRef<CollectedRegistrations>(runPlugins(props.plugins ?? []))\n\n // R4: one reactive context created once in setup (`provide()` cannot run\n // from a watcher — it requires the setup instance context) and mutated in\n // place on swap so `usePlugin` / `usePluginStore` consumers observe the new\n // stores and installed set after a re-render. Shallow for the same reason.\n const ctx = shallowReactive<PluginStoreContext>({\n stores: collected.value.stores,\n installed: new Set((props.plugins ?? []).map((p) => p.name)),\n })\n provide(PluginStoreContextKey, ctx)\n\n // tokens → additive CSS-var layer over the active theme; reverted on unmount.\n let applied: ApplyCssVarsResult | null = null\n // Pre-mount swaps must not create a token layer whose revert handle gets\n // shadowed by onMounted — `onMounted` applies the (already current) set.\n let mounted = false\n onMounted(() => {\n mounted = true\n if (typeof document === 'undefined') return\n const el = props.target ?? document.documentElement\n applied = applyCssVars(Object.entries(collected.value.tokens), el)\n })\n\n // R1–R4: re-collect when the `plugins` prop identity changes (array ref,\n // `Object.is` — same semantics as React `useMemo([plugins])` / Solid\n // `createMemo` / Svelte `$derived`). Non-immediate: the initial collection\n // happens in setup above, so an immediate watch would re-run `runPlugins`\n // (double eager store factories + spurious install→teardown→install).\n // Compute-then-commit: `runPlugins` is the only fallible step; a throwing\n // install aborts before any revert/teardown/replacement is committed.\n watch(\n () => props.plugins,\n (next) => {\n const prev = collected.value\n const nextCollected = runPlugins(next ?? [])\n applied?.revert()\n applied = null\n // R3: the removed set is torn exactly once at the swap (idempotent in\n // core); the current set is still torn exactly once in onBeforeUnmount.\n prev.teardown()\n collected.value = nextCollected\n ctx.stores = nextCollected.stores\n ctx.installed = new Set((next ?? []).map((p) => p.name))\n // R2 + R5: re-apply the new layer (guard `document` for SSR). Pre-mount\n // swaps are applied by onMounted — exactly one layer, no orphaned handle.\n if (mounted && typeof document !== 'undefined') {\n const el = props.target ?? document.documentElement\n applied = applyCssVars(Object.entries(nextCollected.tokens), el)\n }\n },\n )\n\n onBeforeUnmount(() => {\n applied?.revert()\n applied = null\n // Run plugin teardowns on unmount so eager stores / subscriptions /\n // timers don't leak. Idempotent and safe with no plugins.\n collected.value.teardown()\n })\n\n return () => {\n const locale = props.locale ?? DEFAULT_LOCALE\n // Plugin messages as BASE, user messages WIN.\n const messages = { ...collected.value.messages[locale], ...(props.messages ?? {}) }\n\n // I18n always renders, wrapping children.\n let tree: VNode = h(\n IrisI18nProvider,\n { locale: props.locale, messages },\n { default: () => slots.default?.() },\n )\n // Skin wraps only when a `skin` engine is supplied.\n if (props.skin) {\n tree = h(\n SkinProvider,\n { engine: props.skin, target: props.target },\n { default: () => tree },\n )\n }\n // Theme wraps only when a `theme` store is supplied.\n if (props.theme) {\n tree = h(\n ThemeProvider,\n { store: props.theme, target: props.target, dir: props.dir ?? 'ltr' },\n { default: () => tree },\n )\n }\n return tree\n }\n },\n})\n","import { inject } from 'vue'\nimport { PluginStoreContextKey } from './context'\n\n/** Whether the named plugin is installed by the nearest `<IrisProvider>`. */\nexport function usePlugin(name: string): boolean {\n const ctx = inject(PluginStoreContextKey, null)\n return ctx ? ctx.installed.has(name) : false\n}\n\n// Tracks ambiguous store key warnings to avoid spamming the console.\nconst warnedKeys = new Map<string, boolean>()\n\n/**\n * Read a plugin-registered store by `key` (backward-compatible single-arg form).\n * Throws a clear error when used outside an `<IrisProvider>`.\n */\nexport function usePluginStore<T>(key: string): T\n\n/**\n * Read a plugin-registered store by `namespace` + `key`.\n */\nexport function usePluginStore<T>(namespace: string, key: string): T\n\nexport function usePluginStore<T>(nsOrKey: string, key?: string): T {\n const ctx = inject(PluginStoreContextKey, null)\n if (!ctx) {\n const displayKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n throw new Error(`[iris-ui] usePluginStore(\"${displayKey}\"): no <IrisProvider> ancestor found`)\n }\n\n const fullKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n\n // 1. Direct lookup\n let store = ctx.stores.get(fullKey) as T | undefined\n if (store !== undefined) return store\n\n // 2. Single-arg fallback\n if (key === undefined) {\n store = ctx.stores.get(nsOrKey) as T | undefined\n if (store !== undefined) return store\n\n for (const k of ctx.stores.keys()) {\n if (typeof k === 'string' && k.endsWith(`::${nsOrKey}`)) {\n // Warn at most once per ambiguous key.\n if (!warnedKeys.has(nsOrKey)) {\n warnedKeys.set(nsOrKey, true)\n console.warn(\n `[iris-ui] Ambiguous plugin store key \"${nsOrKey}\". ` +\n `Found \"${k}\". Use the namespaced form: usePluginStore(\"${k}\").`,\n )\n }\n return ctx.stores.get(k) as T\n }\n }\n }\n\n throw new Error(\n `[iris-ui] Plugin store \"${fullKey}\" not found. ` +\n `Ensure the plugin is installed in IrisProvider and the key is correct.`,\n )\n}\n"]}
|
|
@@ -30,6 +30,12 @@ var SkinProvider = defineComponent({
|
|
|
30
30
|
watch(current, () => {
|
|
31
31
|
if (applied) apply();
|
|
32
32
|
});
|
|
33
|
+
watch(
|
|
34
|
+
() => props.target,
|
|
35
|
+
() => {
|
|
36
|
+
if (applied) apply();
|
|
37
|
+
}
|
|
38
|
+
);
|
|
33
39
|
onBeforeUnmount(() => {
|
|
34
40
|
unsubscribe();
|
|
35
41
|
applied?.revert();
|
|
@@ -62,5 +68,5 @@ function useSkin() {
|
|
|
62
68
|
}
|
|
63
69
|
|
|
64
70
|
export { IrisSkinKey, SkinProvider, useSkin, useSkinContext };
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-UPC4GN3F.js.map
|
|
72
|
+
//# sourceMappingURL=chunk-UPC4GN3F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/skins/SkinProvider.ts","../src/skins/useSkin.ts"],"names":[],"mappings":";;;;;;AAyBO,IAAM,WAAA,0BAAoD,UAAU;AAOpE,IAAM,eAAe,eAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,kBAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAgC,UAAU,IAAA,EAAK;AAAA,IAC/D,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,IAAA,EAAK;AAAA,IACtE,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA;AAAU,GAC/C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AACtB,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,SAAA,CAAU,CAAC,IAAA,KAAS;AACnD,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,IAClB,CAAC,CAAA;AAED,IAAA,IAAI,OAAA,GAAkC,IAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,IAAU,QAAA,CAAS,eAAA;AAChD,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AACjC,MAAA,KAAA,EAAM;AAAA,IACR,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,SAAS,MAAM;AACnB,MAAA,IAAI,SAAS,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AACD,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,MAAA;AAAA,MACZ,MAAM;AACJ,QAAA,IAAI,SAAS,KAAA,EAAM;AAAA,MACrB;AAAA,KACF;AACA,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,WAAA,EAAY;AACZ,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,aAAa,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA;AACtD,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC;AAEM,SAAS,cAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,uDAAuD,CAAA;AACjF,EAAA,OAAO,GAAA;AACT;AC3DO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,cAAA,EAAe;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA,CAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAClC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF","file":"chunk-UPC4GN3F.js","sourcesContent":["import {\n defineComponent,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n watch,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport { injectGlobalStyles } from '@iris-ui-kit/theme'\nimport {\n applySkin,\n type ApplySkinResult,\n type ResolvedSkin,\n type SkinEngine,\n} from '@iris-ui-kit/skins'\n\nexport interface IrisSkinContext {\n engine: SkinEngine\n current: Ref<ResolvedSkin>\n}\n\nexport const IrisSkinKey: InjectionKey<IrisSkinContext> = Symbol('IrisSkin')\n\n/**\n * Renderless provider mirroring `<IrisThemeProvider>` for skins: subscribes to\n * the engine store, applies/reverts the resolved skin on the target element,\n * and provides the engine + current skin to descendants. Zero skin logic.\n */\nexport const SkinProvider = defineComponent({\n name: 'IrisSkinProvider',\n props: {\n engine: { type: Object as PropType<SkinEngine>, required: true },\n target: { type: Object as PropType<HTMLElement | null>, default: null },\n cspNonce: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const current = ref(props.engine.current()) as Ref<ResolvedSkin>\n const unsubscribe = props.engine.subscribe((next) => {\n current.value = next\n })\n\n let applied: ApplySkinResult | null = null\n const targetEl = () => props.target ?? document.documentElement\n const apply = () => {\n applied?.revert()\n applied = applySkin(current.value, targetEl())\n }\n\n onMounted(() => {\n injectGlobalStyles(props.cspNonce)\n apply()\n })\n watch(current, () => {\n if (applied) apply()\n })\n watch(\n () => props.target,\n () => {\n if (applied) apply()\n },\n )\n onBeforeUnmount(() => {\n unsubscribe()\n applied?.revert()\n applied = null\n })\n\n provide(IrisSkinKey, { engine: props.engine, current })\n return () => slots.default?.()\n },\n})\n\nexport function useSkinContext(): IrisSkinContext {\n const ctx = inject(IrisSkinKey)\n if (!ctx) throw new Error('[iris-ui] useSkin(): no <SkinProvider> ancestor found')\n return ctx\n}\n","import type { ComputedRef } from 'vue'\nimport { computed } from 'vue'\nimport type { ResolvedSkin, Skin, SkinMode, SkinPatch, SkinError } from '@iris-ui-kit/skins'\nimport { useSkinContext } from './SkinProvider'\n\nexport interface UseSkinReturn {\n skin: ComputedRef<ResolvedSkin>\n setSkin: (id: string) => void\n loadSkin: (source: string | Skin) => Promise<ResolvedSkin>\n useFromCatalog: (id: string) => Promise<ResolvedSkin>\n patch: (overrides: SkinPatch) => void\n resetPatch: () => void\n setMode: (mode: SkinMode) => void\n getMode: () => SkinMode\n /** Logical selected id (pre system-variant remap) — e.g. 'auto' while following the system. */\n getActiveId: () => string\n availableSkins: () => Skin[]\n errors: () => SkinError[]\n}\n\n/** Read + control the active skin from anywhere inside a `<SkinProvider>`. */\nexport function useSkin(): UseSkinReturn {\n const { engine, current } = useSkinContext()\n return {\n skin: computed(() => current.value),\n setSkin: engine.setSkin,\n loadSkin: engine.loadSkin,\n useFromCatalog: engine.useFromCatalog,\n patch: engine.patch,\n resetPatch: engine.resetPatch,\n setMode: engine.setMode,\n getMode: engine.getMode,\n getActiveId: engine.getActiveId,\n availableSkins: engine.availableSkins,\n errors: engine.errors,\n }\n}\n"]}
|