@anguszhu/kroma-ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"kroma-vue.js","names":["$slots","$attrs","$slots","$slots"],"sources":["../src/vue/components/KrButton.vue","../src/vue/components/KrButton.vue","../src/vue/components/KrOverlay.vue","../src/vue/components/KrOverlay.vue","../src/vue/components/KrSection.vue","../src/vue/components/KrSection.vue","../src/vue/components/KrSelectItem.vue","../src/vue/components/KrSelectItem.vue","../src/vue/components/KrSelectGroup.vue","../src/vue/components/KrSelectGroup.vue","../src/vue/components/KrSwitch.vue","../src/vue/components/KrSwitch.vue","../src/vue/components/KrToggleRow.vue","../src/vue/components/KrToggleRow.vue","../src/vue/components/KrTextField.vue","../src/vue/components/KrTextField.vue","../src/vue/components/KrSearchInput.vue","../src/vue/components/KrSearchInput.vue","../src/core/toastTimer.ts","../src/vue/components/KrToast.vue","../src/vue/components/KrToast.vue","../src/vue/components/KrEmpty.vue","../src/vue/components/KrEmpty.vue","../src/vue/components/KrMenuItem.vue","../src/vue/components/KrMenuItem.vue","../src/core/focusTrap.ts","../src/vue/components/KrDialog.vue","../src/vue/components/KrDialog.vue","../src/vue/components/KrChevron.vue","../src/vue/components/KrChevron.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport '../../styles/components/KrButton.css'\nimport type { KrButtonType } from '../../core/types'\n\nexport type { KrButtonType }\n\nwithDefaults(defineProps<{\n type?: KrButtonType\n}>(), {\n type: 'primary',\n})\n</script>\n\n<template>\n <button class=\"kr-button\" :class=\"'kr-button--' + type\">\n <slot />\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrButton.css'\nimport type { KrButtonType } from '../../core/types'\n\nexport type { KrButtonType }\n\nwithDefaults(defineProps<{\n type?: KrButtonType\n}>(), {\n type: 'primary',\n})\n</script>\n\n<template>\n <button class=\"kr-button\" :class=\"'kr-button--' + type\">\n <slot />\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrOverlay.css'\nimport type { StyleValue } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue: boolean\n centered?: boolean\n background?: string\n contentStyle?: StyleValue\n contentTransition?: 'fade-in' | 'fade-in-up'\n}>(), {\n centered: false,\n contentTransition: 'fade-in',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n</script>\n\n<template>\n <Transition :name=\"`kr-${contentTransition}-content`\">\n <div\n v-if=\"modelValue\"\n class=\"kr-overlay\"\n :class=\"{ 'kr-overlay--centered': centered }\"\n :style=\"{ '--kr-overlay-background': background }\"\n role=\"application\"\n >\n <div class=\"kr-overlay__scrim\" @click=\"emit('update:modelValue', false)\"></div>\n <div class=\"kr-overlay__content\" :style=\"contentStyle\">\n <slot />\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrOverlay.css'\nimport type { StyleValue } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue: boolean\n centered?: boolean\n background?: string\n contentStyle?: StyleValue\n contentTransition?: 'fade-in' | 'fade-in-up'\n}>(), {\n centered: false,\n contentTransition: 'fade-in',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n</script>\n\n<template>\n <Transition :name=\"`kr-${contentTransition}-content`\">\n <div\n v-if=\"modelValue\"\n class=\"kr-overlay\"\n :class=\"{ 'kr-overlay--centered': centered }\"\n :style=\"{ '--kr-overlay-background': background }\"\n role=\"application\"\n >\n <div class=\"kr-overlay__scrim\" @click=\"emit('update:modelValue', false)\"></div>\n <div class=\"kr-overlay__content\" :style=\"contentStyle\">\n <slot />\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSection.css'\ndefineProps<{\n title?: string\n subtitle?: string\n}>()\n</script>\n\n<template>\n <section class=\"kr-section\">\n <header v-if=\"title || subtitle\" class=\"kr-section__header\">\n <h1 class=\"kr-section__title\" v-if=\"title\">{{ title }}</h1>\n <h2 class=\"kr-section__subtitle\" v-if=\"subtitle\">{{ subtitle }}</h2>\n </header>\n <div class=\"kr-section__content\">\n <slot />\n </div>\n </section>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSection.css'\ndefineProps<{\n title?: string\n subtitle?: string\n}>()\n</script>\n\n<template>\n <section class=\"kr-section\">\n <header v-if=\"title || subtitle\" class=\"kr-section__header\">\n <h1 class=\"kr-section__title\" v-if=\"title\">{{ title }}</h1>\n <h2 class=\"kr-section__subtitle\" v-if=\"subtitle\">{{ subtitle }}</h2>\n </header>\n <div class=\"kr-section__content\">\n <slot />\n </div>\n </section>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectItem.css'\nimport { computed, inject, type ComputedRef } from 'vue'\nimport type { KrSelectVariant, KrSelectShape, KrSelectItemProps } from '../../core/types'\n\nexport type { KrSelectVariant, KrSelectShape, KrSelectItemProps }\n\ninterface KrSelectGroupContext {\n modelValue: ComputedRef<string | number>\n variant: ComputedRef<KrSelectVariant | undefined>\n shape: ComputedRef<KrSelectShape | undefined>\n showItemLabel: ComputedRef<boolean>\n name: string\n onSelect: (value: string | number) => void\n}\n\nconst props = withDefaults(defineProps<KrSelectItemProps>(), {\n variant: 'default',\n shape: 'rounded',\n showItemLabel: true,\n})\n\nconst emit = defineEmits<{\n 'update:selected': [value: string | number]\n select: [value: string | number]\n}>()\n\n// Present when nested inside a <KrSelectGroup>; absent when used standalone.\nconst groupContext = inject<KrSelectGroupContext | null>('krSelectGroupContext', null)\n\nconst isSelected = computed(() => {\n const currentValue = groupContext?.modelValue?.value ?? props.selected\n return currentValue === props.value\n})\n\nconst finalVariant = computed(() => groupContext?.variant?.value ?? props.variant)\n\nconst finalShape = computed(() => {\n if (props.circle) return 'circle'\n return groupContext?.shape?.value ?? props.shape\n})\n\nconst displayLabel = computed(() => {\n const showLabel = groupContext?.showItemLabel?.value ?? props.showItemLabel\n return showLabel ? (props.label ?? props.title) : ''\n})\n\nfunction handleSelect() {\n if (props.disabled) return\n\n emit('update:selected', props.value)\n emit('select', props.value)\n groupContext?.onSelect?.(props.value)\n}\n\nconst itemClasses = computed(() => ({\n 'kr-select-item': true,\n 'kr-select-item--selected': isSelected.value,\n 'kr-select-item--disabled': props.disabled,\n 'kr-select-item--stretch': props.stretch,\n [`kr-select-item--${finalVariant.value}`]: true,\n [`kr-select-item--${finalShape.value}`]: true,\n}))\n</script>\n\n<template>\n <label class=\"kr-select-item\" :class=\"itemClasses\" :title=\"title\">\n <input\n class=\"kr-select-item__input\"\n type=\"radio\"\n :name=\"groupContext?.name\"\n :value=\"value\"\n :checked=\"isSelected\"\n :disabled=\"disabled\"\n :aria-label=\"label || title || String(value)\"\n @change=\"handleSelect\"\n />\n\n <div class=\"kr-select-item__content\">\n <slot />\n </div>\n\n <div v-if=\"displayLabel\" class=\"kr-select-item__label\">\n {{ displayLabel }}\n </div>\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectItem.css'\nimport { computed, inject, type ComputedRef } from 'vue'\nimport type { KrSelectVariant, KrSelectShape, KrSelectItemProps } from '../../core/types'\n\nexport type { KrSelectVariant, KrSelectShape, KrSelectItemProps }\n\ninterface KrSelectGroupContext {\n modelValue: ComputedRef<string | number>\n variant: ComputedRef<KrSelectVariant | undefined>\n shape: ComputedRef<KrSelectShape | undefined>\n showItemLabel: ComputedRef<boolean>\n name: string\n onSelect: (value: string | number) => void\n}\n\nconst props = withDefaults(defineProps<KrSelectItemProps>(), {\n variant: 'default',\n shape: 'rounded',\n showItemLabel: true,\n})\n\nconst emit = defineEmits<{\n 'update:selected': [value: string | number]\n select: [value: string | number]\n}>()\n\n// Present when nested inside a <KrSelectGroup>; absent when used standalone.\nconst groupContext = inject<KrSelectGroupContext | null>('krSelectGroupContext', null)\n\nconst isSelected = computed(() => {\n const currentValue = groupContext?.modelValue?.value ?? props.selected\n return currentValue === props.value\n})\n\nconst finalVariant = computed(() => groupContext?.variant?.value ?? props.variant)\n\nconst finalShape = computed(() => {\n if (props.circle) return 'circle'\n return groupContext?.shape?.value ?? props.shape\n})\n\nconst displayLabel = computed(() => {\n const showLabel = groupContext?.showItemLabel?.value ?? props.showItemLabel\n return showLabel ? (props.label ?? props.title) : ''\n})\n\nfunction handleSelect() {\n if (props.disabled) return\n\n emit('update:selected', props.value)\n emit('select', props.value)\n groupContext?.onSelect?.(props.value)\n}\n\nconst itemClasses = computed(() => ({\n 'kr-select-item': true,\n 'kr-select-item--selected': isSelected.value,\n 'kr-select-item--disabled': props.disabled,\n 'kr-select-item--stretch': props.stretch,\n [`kr-select-item--${finalVariant.value}`]: true,\n [`kr-select-item--${finalShape.value}`]: true,\n}))\n</script>\n\n<template>\n <label class=\"kr-select-item\" :class=\"itemClasses\" :title=\"title\">\n <input\n class=\"kr-select-item__input\"\n type=\"radio\"\n :name=\"groupContext?.name\"\n :value=\"value\"\n :checked=\"isSelected\"\n :disabled=\"disabled\"\n :aria-label=\"label || title || String(value)\"\n @change=\"handleSelect\"\n />\n\n <div class=\"kr-select-item__content\">\n <slot />\n </div>\n\n <div v-if=\"displayLabel\" class=\"kr-select-item__label\">\n {{ displayLabel }}\n </div>\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectGroup.css'\nimport { provide, computed } from 'vue'\nimport KrSelectItem from './KrSelectItem.vue'\nimport type { KrSelectShape, KrSelectVariant, KrSelectItemData } from '../../core/types'\n\nexport type { KrSelectItemData }\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n items: KrSelectItemData[]\n showItemLabel?: boolean\n showTooltip?: boolean\n modelValue: string | number\n hideSeparator?: boolean\n columns?: number | 'auto'\n gap?: string\n variant?: KrSelectVariant\n shape?: KrSelectShape\n}>(), {\n variant: 'default',\n shape: 'rounded',\n columns: 'auto',\n gap: '12px',\n showItemLabel: true,\n showTooltip: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number]\n}>()\n\nconst groupName = `kr-select-group-${Math.random().toString(36).slice(2)}`\n\nconst layoutStyle = computed(() => {\n if (props.columns === 'auto') {\n return {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: props.gap,\n }\n }\n return {\n display: 'grid',\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: props.gap,\n }\n})\n\nfunction handleSelect(value: string | number) {\n emit('update:modelValue', value)\n}\n\nprovide('krSelectGroupContext', {\n modelValue: computed(() => props.modelValue),\n variant: computed(() => props.variant),\n shape: computed(() => props.shape),\n showItemLabel: computed(() => props.showItemLabel),\n name: groupName,\n onSelect: handleSelect,\n})\n</script>\n\n<template>\n <div class=\"kr-select-group\" :class=\"{ 'kr-select-group--with-separator': !hideSeparator }\">\n <div v-if=\"title || subtitle\" class=\"kr-select-group__header\">\n <div v-if=\"title\" class=\"kr-select-group__header__title\">{{ title }}</div>\n <div v-if=\"subtitle\" class=\"kr-select-group__header__subtitle\">{{ subtitle }}</div>\n </div>\n\n <div class=\"kr-select-group__items\" :style=\"layoutStyle\">\n <template v-if=\"$slots.item\">\n <template v-for=\"item in items\" :key=\"item.value\">\n <slot name=\"item\" :item=\"item\" :selected=\"modelValue === item.value\" :set-selected=\"handleSelect\" />\n </template>\n </template>\n\n <template v-else>\n <KrSelectItem\n v-for=\"item in items\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n :selected=\"modelValue\"\n :disabled=\"item.disabled\"\n :variant=\"variant\"\n :shape=\"shape\"\n :show-item-label=\"showItemLabel\"\n :title=\"showTooltip ? item.label : undefined\"\n @select=\"handleSelect\"\n >\n <template v-if=\"variant === 'color'\">\n <div class=\"kr-color-swatch\" :style=\"{ background: item.hex }\" />\n </template>\n\n <template v-else-if=\"variant === 'icon' && item.icon\">\n <svg class=\"kr-select-item-icon\" viewBox=\"0 0 32 32\">\n <path :d=\"item.icon\" />\n </svg>\n </template>\n\n <template v-else>\n {{ item.label }}\n </template>\n </KrSelectItem>\n </template>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectGroup.css'\nimport { provide, computed } from 'vue'\nimport KrSelectItem from './KrSelectItem.vue'\nimport type { KrSelectShape, KrSelectVariant, KrSelectItemData } from '../../core/types'\n\nexport type { KrSelectItemData }\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n items: KrSelectItemData[]\n showItemLabel?: boolean\n showTooltip?: boolean\n modelValue: string | number\n hideSeparator?: boolean\n columns?: number | 'auto'\n gap?: string\n variant?: KrSelectVariant\n shape?: KrSelectShape\n}>(), {\n variant: 'default',\n shape: 'rounded',\n columns: 'auto',\n gap: '12px',\n showItemLabel: true,\n showTooltip: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number]\n}>()\n\nconst groupName = `kr-select-group-${Math.random().toString(36).slice(2)}`\n\nconst layoutStyle = computed(() => {\n if (props.columns === 'auto') {\n return {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: props.gap,\n }\n }\n return {\n display: 'grid',\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: props.gap,\n }\n})\n\nfunction handleSelect(value: string | number) {\n emit('update:modelValue', value)\n}\n\nprovide('krSelectGroupContext', {\n modelValue: computed(() => props.modelValue),\n variant: computed(() => props.variant),\n shape: computed(() => props.shape),\n showItemLabel: computed(() => props.showItemLabel),\n name: groupName,\n onSelect: handleSelect,\n})\n</script>\n\n<template>\n <div class=\"kr-select-group\" :class=\"{ 'kr-select-group--with-separator': !hideSeparator }\">\n <div v-if=\"title || subtitle\" class=\"kr-select-group__header\">\n <div v-if=\"title\" class=\"kr-select-group__header__title\">{{ title }}</div>\n <div v-if=\"subtitle\" class=\"kr-select-group__header__subtitle\">{{ subtitle }}</div>\n </div>\n\n <div class=\"kr-select-group__items\" :style=\"layoutStyle\">\n <template v-if=\"$slots.item\">\n <template v-for=\"item in items\" :key=\"item.value\">\n <slot name=\"item\" :item=\"item\" :selected=\"modelValue === item.value\" :set-selected=\"handleSelect\" />\n </template>\n </template>\n\n <template v-else>\n <KrSelectItem\n v-for=\"item in items\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n :selected=\"modelValue\"\n :disabled=\"item.disabled\"\n :variant=\"variant\"\n :shape=\"shape\"\n :show-item-label=\"showItemLabel\"\n :title=\"showTooltip ? item.label : undefined\"\n @select=\"handleSelect\"\n >\n <template v-if=\"variant === 'color'\">\n <div class=\"kr-color-swatch\" :style=\"{ background: item.hex }\" />\n </template>\n\n <template v-else-if=\"variant === 'icon' && item.icon\">\n <svg class=\"kr-select-item-icon\" viewBox=\"0 0 32 32\">\n <path :d=\"item.icon\" />\n </svg>\n </template>\n\n <template v-else>\n {{ item.label }}\n </template>\n </KrSelectItem>\n </template>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSwitch.css'\nwithDefaults(defineProps<{\n modelValue?: boolean\n disabled?: boolean\n inset?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n inset: false,\n})\n</script>\n\n<template>\n <div\n class=\"kr-switch\"\n :class=\"{ 'kr-switch--inset': inset }\"\n :data-checked=\"modelValue\"\n :data-disabled=\"disabled\"\n aria-hidden=\"true\"\n >\n <div class=\"kr-switch__track\"></div>\n <div class=\"kr-switch__thumb\"></div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSwitch.css'\nwithDefaults(defineProps<{\n modelValue?: boolean\n disabled?: boolean\n inset?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n inset: false,\n})\n</script>\n\n<template>\n <div\n class=\"kr-switch\"\n :class=\"{ 'kr-switch--inset': inset }\"\n :data-checked=\"modelValue\"\n :data-disabled=\"disabled\"\n aria-hidden=\"true\"\n >\n <div class=\"kr-switch__track\"></div>\n <div class=\"kr-switch__thumb\"></div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToggleRow.css'\nimport { computed } from 'vue'\nimport KrSwitch from './KrSwitch.vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: boolean\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst inputModelValue = computed({\n get() {\n return props.modelValue\n },\n set(val) {\n emit('update:modelValue', val)\n },\n})\n</script>\n\n<template>\n <label\n class=\"kr-toggle-row\"\n :class=\"{\n 'kr-toggle-row--with-separator': !hideSeparator,\n 'kr-toggle-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-toggle-row__native\"\n type=\"checkbox\"\n role=\"switch\"\n v-model=\"inputModelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n />\n <div class=\"kr-toggle-row__label\">\n <div class=\"kr-toggle-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-toggle-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrSwitch :model-value=\"inputModelValue\" :disabled=\"disabled\" />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToggleRow.css'\nimport { computed } from 'vue'\nimport KrSwitch from './KrSwitch.vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: boolean\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst inputModelValue = computed({\n get() {\n return props.modelValue\n },\n set(val) {\n emit('update:modelValue', val)\n },\n})\n</script>\n\n<template>\n <label\n class=\"kr-toggle-row\"\n :class=\"{\n 'kr-toggle-row--with-separator': !hideSeparator,\n 'kr-toggle-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-toggle-row__native\"\n type=\"checkbox\"\n role=\"switch\"\n v-model=\"inputModelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n />\n <div class=\"kr-toggle-row__label\">\n <div class=\"kr-toggle-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-toggle-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrSwitch :model-value=\"inputModelValue\" :disabled=\"disabled\" />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrTextField.css'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n modelValue?: string\n label?: string\n error?: boolean\n autofocus?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | undefined): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n },\n})\n\nconst vFocus = {\n mounted: (el: HTMLInputElement) => props.autofocus && el.focus(),\n}\n</script>\n\n<template>\n <label class=\"kr-textfield\">\n <span v-if=\"label\" class=\"kr-textfield__label-text\">{{ label }}</span>\n <input\n type=\"text\"\n class=\"kr-textfield__input\"\n :class=\"{ 'kr-textfield__input--error': error }\"\n v-model.trim=\"value\"\n v-bind=\"$attrs\"\n v-focus\n />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrTextField.css'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n modelValue?: string\n label?: string\n error?: boolean\n autofocus?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | undefined): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n },\n})\n\nconst vFocus = {\n mounted: (el: HTMLInputElement) => props.autofocus && el.focus(),\n}\n</script>\n\n<template>\n <label class=\"kr-textfield\">\n <span v-if=\"label\" class=\"kr-textfield__label-text\">{{ label }}</span>\n <input\n type=\"text\"\n class=\"kr-textfield__input\"\n :class=\"{ 'kr-textfield__input--error': error }\"\n v-model.trim=\"value\"\n v-bind=\"$attrs\"\n v-focus\n />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSearchInput.css'\nimport { ref, computed, type ComponentPublicInstance } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n autofocus?: boolean\n label?: string\n clearLabel?: string\n}>(), {\n modelValue: '',\n autofocus: true,\n label: 'Search',\n clearLabel: 'Clear',\n})\n\nconst inputRef = ref<ComponentPublicInstance | HTMLInputElement | null>(null)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst value = computed<string>({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n if (props.autofocus) {\n ;(inputRef.value as HTMLInputElement | null)?.focus()\n }\n },\n})\n\nfunction clear() {\n value.value = ''\n}\n</script>\n\n<template>\n <div class=\"kr-search-input\">\n <div class=\"kr-search-input__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M20 20L16.65 16.65\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <input\n ref=\"inputRef\"\n class=\"kr-search-input__input\"\n type=\"text\"\n v-model=\"value\"\n :autofocus=\"autofocus\"\n :aria-label=\"label\"\n />\n <div\n class=\"kr-search-input__icon kr-search-input__icon--clear\"\n v-show=\"value\"\n @click=\"clear\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"clearLabel\"\n @keydown.enter=\"clear\"\n >\n <slot name=\"clear-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSearchInput.css'\nimport { ref, computed, type ComponentPublicInstance } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n autofocus?: boolean\n label?: string\n clearLabel?: string\n}>(), {\n modelValue: '',\n autofocus: true,\n label: 'Search',\n clearLabel: 'Clear',\n})\n\nconst inputRef = ref<ComponentPublicInstance | HTMLInputElement | null>(null)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst value = computed<string>({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n if (props.autofocus) {\n ;(inputRef.value as HTMLInputElement | null)?.focus()\n }\n },\n})\n\nfunction clear() {\n value.value = ''\n}\n</script>\n\n<template>\n <div class=\"kr-search-input\">\n <div class=\"kr-search-input__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M20 20L16.65 16.65\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <input\n ref=\"inputRef\"\n class=\"kr-search-input__input\"\n type=\"text\"\n v-model=\"value\"\n :autofocus=\"autofocus\"\n :aria-label=\"label\"\n />\n <div\n class=\"kr-search-input__icon kr-search-input__icon--clear\"\n v-show=\"value\"\n @click=\"clear\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"clearLabel\"\n @keydown.enter=\"clear\"\n >\n <slot name=\"clear-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n </div>\n</template>\n\n","export interface DismissTimerCallbacks {\n onDismiss: () => void\n onTick?: (remainingSeconds: number) => void\n}\n\nexport interface DismissTimerStartOptions {\n timeoutSeconds: number\n showCountdown?: boolean\n}\n\nexport interface DismissTimer {\n start(options: DismissTimerStartOptions): void\n clear(): void\n}\n\nexport function createDismissTimer(callbacks: DismissTimerCallbacks): DismissTimer {\n let dismissTimer: ReturnType<typeof setTimeout> | undefined\n let countdownTimer: ReturnType<typeof setInterval> | undefined\n\n function clear(): void {\n if (dismissTimer !== undefined) {\n clearTimeout(dismissTimer)\n dismissTimer = undefined\n }\n if (countdownTimer !== undefined) {\n clearInterval(countdownTimer)\n countdownTimer = undefined\n }\n }\n\n function start({ timeoutSeconds, showCountdown }: DismissTimerStartOptions): void {\n clear()\n callbacks.onTick?.(Math.max(0, Math.ceil(timeoutSeconds)))\n\n if (timeoutSeconds <= 0) return\n\n const deadline = Date.now() + timeoutSeconds * 1000\n dismissTimer = setTimeout(() => {\n callbacks.onDismiss()\n }, timeoutSeconds * 1000)\n\n if (showCountdown) {\n countdownTimer = setInterval(() => {\n callbacks.onTick?.(Math.max(0, Math.ceil((deadline - Date.now()) / 1000)))\n }, 200)\n }\n }\n\n return { start, clear }\n}\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToast.css'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { KrToastIcon } from '../../core/types'\nimport { createDismissTimer } from '../../core/toastTimer'\n\nexport type { KrToastIcon }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n text?: string\n icon?: KrToastIcon\n timeout?: number\n actionText?: string\n showCountdown?: boolean\n}>(), {\n show: false,\n timeout: 3,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n (e: 'action'): void\n}>()\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nconst remainingSeconds = ref(props.timeout)\n\nconst dismissTimer = createDismissTimer({\n onTick: (seconds) => {\n remainingSeconds.value = seconds\n },\n onDismiss: () => {\n _show.value = false\n },\n})\n\nfunction runAction(): void {\n emit('action')\n _show.value = false\n}\n\nfunction dismissFromClick(): void {\n if (!props.actionText) {\n _show.value = false\n }\n}\n\nwatch(() => props.show, (show) => {\n if (show) {\n dismissTimer.start({ timeoutSeconds: props.timeout, showCountdown: props.showCountdown })\n } else {\n dismissTimer.clear()\n }\n}, { immediate: true })\n\nonBeforeUnmount(dismissTimer.clear)\n</script>\n\n<template>\n <Transition name=\"kr-fade-in-up\">\n <div v-if=\"_show\" class=\"kr-toast\" role=\"status\" aria-live=\"polite\" @click=\"dismissFromClick\">\n <div v-if=\"icon\" class=\"kr-toast__icon\">\n <slot name=\"icon\">\n <svg v-if=\"icon === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M20 6L9 17L4 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg v-else viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M12 8V13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </div>\n <div class=\"kr-toast__text\">{{ text }}</div>\n <div v-if=\"actionText\" class=\"kr-toast__actions\">\n <button class=\"kr-toast__action\" type=\"button\" @click.stop=\"runAction\">{{ actionText }}</button>\n <span v-if=\"showCountdown\" class=\"kr-toast__countdown\" aria-hidden=\"true\">{{ remainingSeconds }}s</span>\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToast.css'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { KrToastIcon } from '../../core/types'\nimport { createDismissTimer } from '../../core/toastTimer'\n\nexport type { KrToastIcon }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n text?: string\n icon?: KrToastIcon\n timeout?: number\n actionText?: string\n showCountdown?: boolean\n}>(), {\n show: false,\n timeout: 3,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n (e: 'action'): void\n}>()\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nconst remainingSeconds = ref(props.timeout)\n\nconst dismissTimer = createDismissTimer({\n onTick: (seconds) => {\n remainingSeconds.value = seconds\n },\n onDismiss: () => {\n _show.value = false\n },\n})\n\nfunction runAction(): void {\n emit('action')\n _show.value = false\n}\n\nfunction dismissFromClick(): void {\n if (!props.actionText) {\n _show.value = false\n }\n}\n\nwatch(() => props.show, (show) => {\n if (show) {\n dismissTimer.start({ timeoutSeconds: props.timeout, showCountdown: props.showCountdown })\n } else {\n dismissTimer.clear()\n }\n}, { immediate: true })\n\nonBeforeUnmount(dismissTimer.clear)\n</script>\n\n<template>\n <Transition name=\"kr-fade-in-up\">\n <div v-if=\"_show\" class=\"kr-toast\" role=\"status\" aria-live=\"polite\" @click=\"dismissFromClick\">\n <div v-if=\"icon\" class=\"kr-toast__icon\">\n <slot name=\"icon\">\n <svg v-if=\"icon === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M20 6L9 17L4 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg v-else viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M12 8V13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </div>\n <div class=\"kr-toast__text\">{{ text }}</div>\n <div v-if=\"actionText\" class=\"kr-toast__actions\">\n <button class=\"kr-toast__action\" type=\"button\" @click.stop=\"runAction\">{{ actionText }}</button>\n <span v-if=\"showCountdown\" class=\"kr-toast__countdown\" aria-hidden=\"true\">{{ remainingSeconds }}s</span>\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrEmpty.css'\ndefineProps<{\n title?: string\n description?: string\n}>()\n</script>\n\n<template>\n <div class=\"kr-empty\">\n <div class=\"kr-empty__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"10\" y=\"24\" width=\"44\" height=\"30\" rx=\"4\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" />\n <path d=\"M10 26L18 10H46L54 26\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M24 34H40\" stroke=\"var(--kr-theme)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <h1 class=\"kr-empty__title\">{{ title }}</h1>\n <p class=\"kr-empty__description\">{{ description }}</p>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrEmpty.css'\ndefineProps<{\n title?: string\n description?: string\n}>()\n</script>\n\n<template>\n <div class=\"kr-empty\">\n <div class=\"kr-empty__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"10\" y=\"24\" width=\"44\" height=\"30\" rx=\"4\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" />\n <path d=\"M10 26L18 10H46L54 26\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M24 34H40\" stroke=\"var(--kr-theme)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <h1 class=\"kr-empty__title\">{{ title }}</h1>\n <p class=\"kr-empty__description\">{{ description }}</p>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrMenuItem.css'\nimport type { KrMenuItemData } from '../../core/types'\n\nexport type { KrMenuItemData }\n\ndefineProps<KrMenuItemData>()\n</script>\n\n<template>\n <hr v-if=\"type === 'divider'\" class=\"kr-menu-item--divider\" />\n <button v-else class=\"kr-menu-item\" :disabled=\"disabled\" role=\"menuitem\">\n <div class=\"kr-menu-item__content\">{{ title }}</div>\n <div v-if=\"$slots.icon\" class=\"kr-menu-item__icon\" aria-hidden=\"true\">\n <slot name=\"icon\" />\n </div>\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrMenuItem.css'\nimport type { KrMenuItemData } from '../../core/types'\n\nexport type { KrMenuItemData }\n\ndefineProps<KrMenuItemData>()\n</script>\n\n<template>\n <hr v-if=\"type === 'divider'\" class=\"kr-menu-item--divider\" />\n <button v-else class=\"kr-menu-item\" :disabled=\"disabled\" role=\"menuitem\">\n <div class=\"kr-menu-item__content\">{{ title }}</div>\n <div v-if=\"$slots.icon\" class=\"kr-menu-item__icon\" aria-hidden=\"true\">\n <slot name=\"icon\" />\n </div>\n </button>\n</template>\n\n","export function focusableElements(container: HTMLElement | null): HTMLElement[] {\n return Array.from(container?.querySelectorAll<HTMLElement>('button:not([disabled]), input:not([disabled])') ?? [])\n}\n\nexport function focusNext(container: HTMLElement | null): void {\n const elements = focusableElements(container)\n const index = elements.findIndex((el) => el === document.activeElement)\n const next = index === elements.length - 1 ? elements[0] : elements[index + 1]\n next?.focus()\n}\n\nexport function focusPrev(container: HTMLElement | null): void {\n const elements = focusableElements(container)\n const index = elements.findIndex((el) => el === document.activeElement)\n const prev = index <= 0 ? elements[elements.length - 1] : elements[index - 1]\n prev?.focus()\n}\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrDialog.css'\nimport KrOverlay from './KrOverlay.vue'\nimport KrButton from './KrButton.vue'\nimport { ref, computed } from 'vue'\nimport type { KrDialogAction } from '../../core/types'\nimport { focusNext as coreFocusNext, focusPrev as coreFocusPrev } from '../../core/focusTrap'\n\nexport type { KrDialogAction }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n title?: string\n text?: string\n actions?: KrDialogAction[]\n cancelText?: string\n hideCancel?: boolean\n}>(), {\n show: false,\n title: '',\n text: '',\n actions: () => [],\n cancelText: 'Cancel',\n hideCancel: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n}>()\n\nconst submitting = ref(false)\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nfunction onCancel() {\n emit('update:show', false)\n}\n\nasync function onConfirm(action: () => void | Promise<void>) {\n if (submitting.value) return\n\n submitting.value = true\n try {\n await action()\n } finally {\n submitting.value = false\n }\n}\n\nconst dialogRef = ref<HTMLDialogElement | null>(null)\n\nfunction focusNext(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusNext(dialogRef.value)\n}\n\nfunction focusPrev(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusPrev(dialogRef.value)\n}\n</script>\n\n<template>\n <KrOverlay v-model=\"_show\" centered>\n <dialog\n ref=\"dialogRef\"\n class=\"kr-dialog\"\n :open=\"_show\"\n @keydown.esc.prevent=\"_show = false\"\n @keydown.tab.exact=\"focusNext\"\n @keydown.tab.shift=\"focusPrev\"\n >\n <h2 v-if=\"title\" class=\"kr-dialog__title\">{{ title }}</h2>\n <div class=\"kr-dialog__content\">\n <div v-if=\"text\" class=\"kr-dialog__content__text\">{{ text }}</div>\n <div v-if=\"$slots.default\" class=\"kr-dialog__content__form\">\n <slot />\n </div>\n </div>\n\n <div class=\"kr-dialog__actions\">\n <KrButton v-if=\"!hideCancel\" type=\"secondary\" :disabled=\"submitting\" @click=\"onCancel\">\n {{ cancelText }}\n </KrButton>\n <KrButton\n v-for=\"action in actions\"\n :key=\"action.text\"\n :disabled=\"submitting || action.disabled\"\n @click=\"onConfirm(action.action)\"\n >\n {{ action.text }}\n </KrButton>\n </div>\n </dialog>\n </KrOverlay>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrDialog.css'\nimport KrOverlay from './KrOverlay.vue'\nimport KrButton from './KrButton.vue'\nimport { ref, computed } from 'vue'\nimport type { KrDialogAction } from '../../core/types'\nimport { focusNext as coreFocusNext, focusPrev as coreFocusPrev } from '../../core/focusTrap'\n\nexport type { KrDialogAction }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n title?: string\n text?: string\n actions?: KrDialogAction[]\n cancelText?: string\n hideCancel?: boolean\n}>(), {\n show: false,\n title: '',\n text: '',\n actions: () => [],\n cancelText: 'Cancel',\n hideCancel: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n}>()\n\nconst submitting = ref(false)\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nfunction onCancel() {\n emit('update:show', false)\n}\n\nasync function onConfirm(action: () => void | Promise<void>) {\n if (submitting.value) return\n\n submitting.value = true\n try {\n await action()\n } finally {\n submitting.value = false\n }\n}\n\nconst dialogRef = ref<HTMLDialogElement | null>(null)\n\nfunction focusNext(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusNext(dialogRef.value)\n}\n\nfunction focusPrev(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusPrev(dialogRef.value)\n}\n</script>\n\n<template>\n <KrOverlay v-model=\"_show\" centered>\n <dialog\n ref=\"dialogRef\"\n class=\"kr-dialog\"\n :open=\"_show\"\n @keydown.esc.prevent=\"_show = false\"\n @keydown.tab.exact=\"focusNext\"\n @keydown.tab.shift=\"focusPrev\"\n >\n <h2 v-if=\"title\" class=\"kr-dialog__title\">{{ title }}</h2>\n <div class=\"kr-dialog__content\">\n <div v-if=\"text\" class=\"kr-dialog__content__text\">{{ text }}</div>\n <div v-if=\"$slots.default\" class=\"kr-dialog__content__form\">\n <slot />\n </div>\n </div>\n\n <div class=\"kr-dialog__actions\">\n <KrButton v-if=\"!hideCancel\" type=\"secondary\" :disabled=\"submitting\" @click=\"onCancel\">\n {{ cancelText }}\n </KrButton>\n <KrButton\n v-for=\"action in actions\"\n :key=\"action.text\"\n :disabled=\"submitting || action.disabled\"\n @click=\"onConfirm(action.action)\"\n >\n {{ action.text }}\n </KrButton>\n </div>\n </dialog>\n </KrOverlay>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrChevron.css'\n</script>\n\n<template>\n <div class=\"kr-chevron\"></div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrChevron.css'\n</script>\n\n<template>\n <div class=\"kr-chevron\"></div>\n</template>\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"kroma-vue.js","names":["$slots","$attrs","$slots","$slots"],"sources":["../src/vue/components/KrButton.vue","../src/vue/components/KrButton.vue","../src/vue/components/KrOverlay.vue","../src/vue/components/KrOverlay.vue","../src/vue/components/KrSection.vue","../src/vue/components/KrSection.vue","../src/vue/components/KrSelectItem.vue","../src/vue/components/KrSelectItem.vue","../src/vue/components/KrSelectGroup.vue","../src/vue/components/KrSelectGroup.vue","../src/vue/components/KrSwitch.vue","../src/vue/components/KrSwitch.vue","../src/vue/components/KrToggleRow.vue","../src/vue/components/KrToggleRow.vue","../src/vue/components/KrRadioRow.vue","../src/vue/components/KrRadioRow.vue","../src/vue/components/KrCheckboxRow.vue","../src/vue/components/KrCheckboxRow.vue","../src/vue/components/KrButtonRow.vue","../src/vue/components/KrButtonRow.vue","../src/vue/components/KrLinkRow.vue","../src/vue/components/KrLinkRow.vue","../src/vue/components/KrChevron.vue","../src/vue/components/KrChevron.vue","../src/vue/components/KrNavigationRow.vue","../src/vue/components/KrNavigationRow.vue","../src/vue/components/KrTextField.vue","../src/vue/components/KrTextField.vue","../src/vue/components/KrSearchInput.vue","../src/vue/components/KrSearchInput.vue","../src/core/toastTimer.ts","../src/vue/components/KrToast.vue","../src/vue/components/KrToast.vue","../src/vue/components/KrEmpty.vue","../src/vue/components/KrEmpty.vue","../src/vue/components/KrMenuItem.vue","../src/vue/components/KrMenuItem.vue","../src/core/focusTrap.ts","../src/vue/components/KrDialog.vue","../src/vue/components/KrDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport '../../styles/components/KrButton.css'\nimport type { KrButtonType } from '../../core/types'\n\nexport type { KrButtonType }\n\nwithDefaults(defineProps<{\n type?: KrButtonType\n}>(), {\n type: 'primary',\n})\n</script>\n\n<template>\n <button class=\"kr-button\" :class=\"'kr-button--' + type\">\n <slot />\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrButton.css'\nimport type { KrButtonType } from '../../core/types'\n\nexport type { KrButtonType }\n\nwithDefaults(defineProps<{\n type?: KrButtonType\n}>(), {\n type: 'primary',\n})\n</script>\n\n<template>\n <button class=\"kr-button\" :class=\"'kr-button--' + type\">\n <slot />\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrOverlay.css'\nimport type { StyleValue } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue: boolean\n centered?: boolean\n background?: string\n contentStyle?: StyleValue\n contentTransition?: 'fade-in' | 'fade-in-up'\n}>(), {\n centered: false,\n contentTransition: 'fade-in',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n</script>\n\n<template>\n <Transition :name=\"`kr-${contentTransition}-content`\">\n <div\n v-if=\"modelValue\"\n class=\"kr-overlay\"\n :class=\"{ 'kr-overlay--centered': centered }\"\n :style=\"{ '--kr-overlay-background': background }\"\n role=\"application\"\n >\n <div class=\"kr-overlay__scrim\" @click=\"emit('update:modelValue', false)\"></div>\n <div class=\"kr-overlay__content\" :style=\"contentStyle\">\n <slot />\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrOverlay.css'\nimport type { StyleValue } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue: boolean\n centered?: boolean\n background?: string\n contentStyle?: StyleValue\n contentTransition?: 'fade-in' | 'fade-in-up'\n}>(), {\n centered: false,\n contentTransition: 'fade-in',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n</script>\n\n<template>\n <Transition :name=\"`kr-${contentTransition}-content`\">\n <div\n v-if=\"modelValue\"\n class=\"kr-overlay\"\n :class=\"{ 'kr-overlay--centered': centered }\"\n :style=\"{ '--kr-overlay-background': background }\"\n role=\"application\"\n >\n <div class=\"kr-overlay__scrim\" @click=\"emit('update:modelValue', false)\"></div>\n <div class=\"kr-overlay__content\" :style=\"contentStyle\">\n <slot />\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSection.css'\ndefineProps<{\n title?: string\n subtitle?: string\n}>()\n</script>\n\n<template>\n <section class=\"kr-section\">\n <header v-if=\"title || subtitle\" class=\"kr-section__header\">\n <h1 class=\"kr-section__title\" v-if=\"title\">{{ title }}</h1>\n <h2 class=\"kr-section__subtitle\" v-if=\"subtitle\">{{ subtitle }}</h2>\n </header>\n <div class=\"kr-section__content\">\n <slot />\n </div>\n </section>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSection.css'\ndefineProps<{\n title?: string\n subtitle?: string\n}>()\n</script>\n\n<template>\n <section class=\"kr-section\">\n <header v-if=\"title || subtitle\" class=\"kr-section__header\">\n <h1 class=\"kr-section__title\" v-if=\"title\">{{ title }}</h1>\n <h2 class=\"kr-section__subtitle\" v-if=\"subtitle\">{{ subtitle }}</h2>\n </header>\n <div class=\"kr-section__content\">\n <slot />\n </div>\n </section>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectItem.css'\nimport { computed, inject, type ComputedRef } from 'vue'\nimport type { KrSelectVariant, KrSelectShape, KrSelectItemProps } from '../../core/types'\n\nexport type { KrSelectVariant, KrSelectShape, KrSelectItemProps }\n\ninterface KrSelectGroupContext {\n modelValue: ComputedRef<string | number>\n variant: ComputedRef<KrSelectVariant | undefined>\n shape: ComputedRef<KrSelectShape | undefined>\n showItemLabel: ComputedRef<boolean>\n name: string\n onSelect: (value: string | number) => void\n}\n\nconst props = withDefaults(defineProps<KrSelectItemProps>(), {\n variant: 'default',\n shape: 'rounded',\n showItemLabel: true,\n})\n\nconst emit = defineEmits<{\n 'update:selected': [value: string | number]\n select: [value: string | number]\n}>()\n\n// Present when nested inside a <KrSelectGroup>; absent when used standalone.\nconst groupContext = inject<KrSelectGroupContext | null>('krSelectGroupContext', null)\n\nconst isSelected = computed(() => {\n const currentValue = groupContext?.modelValue?.value ?? props.selected\n return currentValue === props.value\n})\n\nconst finalVariant = computed(() => groupContext?.variant?.value ?? props.variant)\n\nconst finalShape = computed(() => {\n if (props.circle) return 'circle'\n return groupContext?.shape?.value ?? props.shape\n})\n\nconst displayLabel = computed(() => {\n const showLabel = groupContext?.showItemLabel?.value ?? props.showItemLabel\n return showLabel ? (props.label ?? props.title) : ''\n})\n\nfunction handleSelect() {\n if (props.disabled) return\n\n emit('update:selected', props.value)\n emit('select', props.value)\n groupContext?.onSelect?.(props.value)\n}\n\nconst itemClasses = computed(() => ({\n 'kr-select-item': true,\n 'kr-select-item--selected': isSelected.value,\n 'kr-select-item--disabled': props.disabled,\n 'kr-select-item--stretch': props.stretch,\n [`kr-select-item--${finalVariant.value}`]: true,\n [`kr-select-item--${finalShape.value}`]: true,\n}))\n</script>\n\n<template>\n <label class=\"kr-select-item\" :class=\"itemClasses\" :title=\"title\">\n <input\n class=\"kr-select-item__input\"\n type=\"radio\"\n :name=\"groupContext?.name\"\n :value=\"value\"\n :checked=\"isSelected\"\n :disabled=\"disabled\"\n :aria-label=\"label || title || String(value)\"\n @change=\"handleSelect\"\n />\n\n <div class=\"kr-select-item__content\">\n <slot />\n </div>\n\n <div v-if=\"displayLabel\" class=\"kr-select-item__label\">\n {{ displayLabel }}\n </div>\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectItem.css'\nimport { computed, inject, type ComputedRef } from 'vue'\nimport type { KrSelectVariant, KrSelectShape, KrSelectItemProps } from '../../core/types'\n\nexport type { KrSelectVariant, KrSelectShape, KrSelectItemProps }\n\ninterface KrSelectGroupContext {\n modelValue: ComputedRef<string | number>\n variant: ComputedRef<KrSelectVariant | undefined>\n shape: ComputedRef<KrSelectShape | undefined>\n showItemLabel: ComputedRef<boolean>\n name: string\n onSelect: (value: string | number) => void\n}\n\nconst props = withDefaults(defineProps<KrSelectItemProps>(), {\n variant: 'default',\n shape: 'rounded',\n showItemLabel: true,\n})\n\nconst emit = defineEmits<{\n 'update:selected': [value: string | number]\n select: [value: string | number]\n}>()\n\n// Present when nested inside a <KrSelectGroup>; absent when used standalone.\nconst groupContext = inject<KrSelectGroupContext | null>('krSelectGroupContext', null)\n\nconst isSelected = computed(() => {\n const currentValue = groupContext?.modelValue?.value ?? props.selected\n return currentValue === props.value\n})\n\nconst finalVariant = computed(() => groupContext?.variant?.value ?? props.variant)\n\nconst finalShape = computed(() => {\n if (props.circle) return 'circle'\n return groupContext?.shape?.value ?? props.shape\n})\n\nconst displayLabel = computed(() => {\n const showLabel = groupContext?.showItemLabel?.value ?? props.showItemLabel\n return showLabel ? (props.label ?? props.title) : ''\n})\n\nfunction handleSelect() {\n if (props.disabled) return\n\n emit('update:selected', props.value)\n emit('select', props.value)\n groupContext?.onSelect?.(props.value)\n}\n\nconst itemClasses = computed(() => ({\n 'kr-select-item': true,\n 'kr-select-item--selected': isSelected.value,\n 'kr-select-item--disabled': props.disabled,\n 'kr-select-item--stretch': props.stretch,\n [`kr-select-item--${finalVariant.value}`]: true,\n [`kr-select-item--${finalShape.value}`]: true,\n}))\n</script>\n\n<template>\n <label class=\"kr-select-item\" :class=\"itemClasses\" :title=\"title\">\n <input\n class=\"kr-select-item__input\"\n type=\"radio\"\n :name=\"groupContext?.name\"\n :value=\"value\"\n :checked=\"isSelected\"\n :disabled=\"disabled\"\n :aria-label=\"label || title || String(value)\"\n @change=\"handleSelect\"\n />\n\n <div class=\"kr-select-item__content\">\n <slot />\n </div>\n\n <div v-if=\"displayLabel\" class=\"kr-select-item__label\">\n {{ displayLabel }}\n </div>\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectGroup.css'\nimport { provide, computed } from 'vue'\nimport KrSelectItem from './KrSelectItem.vue'\nimport type { KrSelectShape, KrSelectVariant, KrSelectItemData } from '../../core/types'\n\nexport type { KrSelectItemData }\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n items: KrSelectItemData[]\n showItemLabel?: boolean\n showTooltip?: boolean\n modelValue: string | number\n hideSeparator?: boolean\n columns?: number | 'auto'\n gap?: string\n variant?: KrSelectVariant\n shape?: KrSelectShape\n}>(), {\n variant: 'default',\n shape: 'rounded',\n columns: 'auto',\n gap: '12px',\n showItemLabel: true,\n showTooltip: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number]\n}>()\n\nconst groupName = `kr-select-group-${Math.random().toString(36).slice(2)}`\n\nconst layoutStyle = computed(() => {\n if (props.columns === 'auto') {\n return {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: props.gap,\n }\n }\n return {\n display: 'grid',\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: props.gap,\n }\n})\n\nfunction handleSelect(value: string | number) {\n emit('update:modelValue', value)\n}\n\nprovide('krSelectGroupContext', {\n modelValue: computed(() => props.modelValue),\n variant: computed(() => props.variant),\n shape: computed(() => props.shape),\n showItemLabel: computed(() => props.showItemLabel),\n name: groupName,\n onSelect: handleSelect,\n})\n</script>\n\n<template>\n <div class=\"kr-select-group\" :class=\"{ 'kr-select-group--with-separator': !hideSeparator }\">\n <div v-if=\"title || subtitle\" class=\"kr-select-group__header\">\n <div v-if=\"title\" class=\"kr-select-group__header__title\">{{ title }}</div>\n <div v-if=\"subtitle\" class=\"kr-select-group__header__subtitle\">{{ subtitle }}</div>\n </div>\n\n <div class=\"kr-select-group__items\" :style=\"layoutStyle\">\n <template v-if=\"$slots.item\">\n <template v-for=\"item in items\" :key=\"item.value\">\n <slot name=\"item\" :item=\"item\" :selected=\"modelValue === item.value\" :set-selected=\"handleSelect\" />\n </template>\n </template>\n\n <template v-else>\n <KrSelectItem\n v-for=\"item in items\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n :selected=\"modelValue\"\n :disabled=\"item.disabled\"\n :variant=\"variant\"\n :shape=\"shape\"\n :show-item-label=\"showItemLabel\"\n :title=\"showTooltip ? item.label : undefined\"\n @select=\"handleSelect\"\n >\n <template v-if=\"variant === 'color'\">\n <div class=\"kr-color-swatch\" :style=\"{ background: item.hex }\" />\n </template>\n\n <template v-else-if=\"variant === 'icon' && item.icon\">\n <svg class=\"kr-select-item-icon\" viewBox=\"0 0 32 32\">\n <path :d=\"item.icon\" />\n </svg>\n </template>\n\n <template v-else>\n {{ item.label }}\n </template>\n </KrSelectItem>\n </template>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSelectGroup.css'\nimport { provide, computed } from 'vue'\nimport KrSelectItem from './KrSelectItem.vue'\nimport type { KrSelectShape, KrSelectVariant, KrSelectItemData } from '../../core/types'\n\nexport type { KrSelectItemData }\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n items: KrSelectItemData[]\n showItemLabel?: boolean\n showTooltip?: boolean\n modelValue: string | number\n hideSeparator?: boolean\n columns?: number | 'auto'\n gap?: string\n variant?: KrSelectVariant\n shape?: KrSelectShape\n}>(), {\n variant: 'default',\n shape: 'rounded',\n columns: 'auto',\n gap: '12px',\n showItemLabel: true,\n showTooltip: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number]\n}>()\n\nconst groupName = `kr-select-group-${Math.random().toString(36).slice(2)}`\n\nconst layoutStyle = computed(() => {\n if (props.columns === 'auto') {\n return {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: props.gap,\n }\n }\n return {\n display: 'grid',\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: props.gap,\n }\n})\n\nfunction handleSelect(value: string | number) {\n emit('update:modelValue', value)\n}\n\nprovide('krSelectGroupContext', {\n modelValue: computed(() => props.modelValue),\n variant: computed(() => props.variant),\n shape: computed(() => props.shape),\n showItemLabel: computed(() => props.showItemLabel),\n name: groupName,\n onSelect: handleSelect,\n})\n</script>\n\n<template>\n <div class=\"kr-select-group\" :class=\"{ 'kr-select-group--with-separator': !hideSeparator }\">\n <div v-if=\"title || subtitle\" class=\"kr-select-group__header\">\n <div v-if=\"title\" class=\"kr-select-group__header__title\">{{ title }}</div>\n <div v-if=\"subtitle\" class=\"kr-select-group__header__subtitle\">{{ subtitle }}</div>\n </div>\n\n <div class=\"kr-select-group__items\" :style=\"layoutStyle\">\n <template v-if=\"$slots.item\">\n <template v-for=\"item in items\" :key=\"item.value\">\n <slot name=\"item\" :item=\"item\" :selected=\"modelValue === item.value\" :set-selected=\"handleSelect\" />\n </template>\n </template>\n\n <template v-else>\n <KrSelectItem\n v-for=\"item in items\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"\n :selected=\"modelValue\"\n :disabled=\"item.disabled\"\n :variant=\"variant\"\n :shape=\"shape\"\n :show-item-label=\"showItemLabel\"\n :title=\"showTooltip ? item.label : undefined\"\n @select=\"handleSelect\"\n >\n <template v-if=\"variant === 'color'\">\n <div class=\"kr-color-swatch\" :style=\"{ background: item.hex }\" />\n </template>\n\n <template v-else-if=\"variant === 'icon' && item.icon\">\n <svg class=\"kr-select-item-icon\" viewBox=\"0 0 32 32\">\n <path :d=\"item.icon\" />\n </svg>\n </template>\n\n <template v-else>\n {{ item.label }}\n </template>\n </KrSelectItem>\n </template>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSwitch.css'\nwithDefaults(defineProps<{\n modelValue?: boolean\n disabled?: boolean\n inset?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n inset: false,\n})\n</script>\n\n<template>\n <div\n class=\"kr-switch\"\n :class=\"{ 'kr-switch--inset': inset }\"\n :data-checked=\"modelValue\"\n :data-disabled=\"disabled\"\n aria-hidden=\"true\"\n >\n <div class=\"kr-switch__track\"></div>\n <div class=\"kr-switch__thumb\"></div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSwitch.css'\nwithDefaults(defineProps<{\n modelValue?: boolean\n disabled?: boolean\n inset?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n inset: false,\n})\n</script>\n\n<template>\n <div\n class=\"kr-switch\"\n :class=\"{ 'kr-switch--inset': inset }\"\n :data-checked=\"modelValue\"\n :data-disabled=\"disabled\"\n aria-hidden=\"true\"\n >\n <div class=\"kr-switch__track\"></div>\n <div class=\"kr-switch__thumb\"></div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToggleRow.css'\nimport { computed } from 'vue'\nimport KrSwitch from './KrSwitch.vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: boolean\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst inputModelValue = computed({\n get() {\n return props.modelValue\n },\n set(val) {\n emit('update:modelValue', val)\n },\n})\n</script>\n\n<template>\n <label\n class=\"kr-toggle-row\"\n :class=\"{\n 'kr-toggle-row--with-separator': !hideSeparator,\n 'kr-toggle-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-toggle-row__native\"\n type=\"checkbox\"\n role=\"switch\"\n v-model=\"inputModelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n />\n <div class=\"kr-toggle-row__label\">\n <div class=\"kr-toggle-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-toggle-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrSwitch :model-value=\"inputModelValue\" :disabled=\"disabled\" />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToggleRow.css'\nimport { computed } from 'vue'\nimport KrSwitch from './KrSwitch.vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: boolean\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst inputModelValue = computed({\n get() {\n return props.modelValue\n },\n set(val) {\n emit('update:modelValue', val)\n },\n})\n</script>\n\n<template>\n <label\n class=\"kr-toggle-row\"\n :class=\"{\n 'kr-toggle-row--with-separator': !hideSeparator,\n 'kr-toggle-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-toggle-row__native\"\n type=\"checkbox\"\n role=\"switch\"\n v-model=\"inputModelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n />\n <div class=\"kr-toggle-row__label\">\n <div class=\"kr-toggle-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-toggle-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrSwitch :model-value=\"inputModelValue\" :disabled=\"disabled\" />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrRadioRow.css'\n\nwithDefaults(defineProps<{\n modelValue?: boolean\n name?: string\n value?: string | number\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nfunction handleChange(event: Event) {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n}\n</script>\n\n<template>\n <label\n class=\"kr-radio-row\"\n :class=\"{\n 'kr-radio-row--with-separator': !hideSeparator,\n 'kr-radio-row--checked': modelValue,\n 'kr-radio-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-radio-row__native\"\n type=\"radio\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n @change=\"handleChange\"\n />\n <div class=\"kr-radio-row__radio\" aria-hidden=\"true\">\n <div class=\"kr-radio-row__radio-dot\" />\n </div>\n <div class=\"kr-radio-row__label\">\n <div class=\"kr-radio-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-radio-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrRadioRow.css'\n\nwithDefaults(defineProps<{\n modelValue?: boolean\n name?: string\n value?: string | number\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nfunction handleChange(event: Event) {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n}\n</script>\n\n<template>\n <label\n class=\"kr-radio-row\"\n :class=\"{\n 'kr-radio-row--with-separator': !hideSeparator,\n 'kr-radio-row--checked': modelValue,\n 'kr-radio-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-radio-row__native\"\n type=\"radio\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n @change=\"handleChange\"\n />\n <div class=\"kr-radio-row__radio\" aria-hidden=\"true\">\n <div class=\"kr-radio-row__radio-dot\" />\n </div>\n <div class=\"kr-radio-row__label\">\n <div class=\"kr-radio-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-radio-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrCheckboxRow.css'\n\nwithDefaults(defineProps<{\n modelValue?: boolean\n indeterminate?: boolean\n name?: string\n value?: string | number\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n indeterminate: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nfunction handleChange(event: Event) {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n}\n</script>\n\n<template>\n <label\n class=\"kr-checkbox-row\"\n :class=\"{\n 'kr-checkbox-row--with-separator': !hideSeparator,\n 'kr-checkbox-row--checked': modelValue,\n 'kr-checkbox-row--indeterminate': indeterminate,\n 'kr-checkbox-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-checkbox-row__native\"\n type=\"checkbox\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"modelValue\"\n :indeterminate.prop=\"indeterminate\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n @change=\"handleChange\"\n />\n <div class=\"kr-checkbox-row__checkbox\" aria-hidden=\"true\">\n <svg class=\"kr-checkbox-row__check\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path v-if=\"indeterminate\" d=\"M5 12h14\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" />\n <path v-else d=\"M20 6L9 17l-5-5\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"kr-checkbox-row__label\">\n <div class=\"kr-checkbox-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-checkbox-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrCheckboxRow.css'\n\nwithDefaults(defineProps<{\n modelValue?: boolean\n indeterminate?: boolean\n name?: string\n value?: string | number\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n modelValue: false,\n indeterminate: false,\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nfunction handleChange(event: Event) {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n}\n</script>\n\n<template>\n <label\n class=\"kr-checkbox-row\"\n :class=\"{\n 'kr-checkbox-row--with-separator': !hideSeparator,\n 'kr-checkbox-row--checked': modelValue,\n 'kr-checkbox-row--indeterminate': indeterminate,\n 'kr-checkbox-row--disabled': disabled,\n }\"\n >\n <input\n class=\"kr-checkbox-row__native\"\n type=\"checkbox\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"modelValue\"\n :indeterminate.prop=\"indeterminate\"\n :disabled=\"disabled\"\n :aria-label=\"title\"\n @change=\"handleChange\"\n />\n <div class=\"kr-checkbox-row__checkbox\" aria-hidden=\"true\">\n <svg class=\"kr-checkbox-row__check\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path v-if=\"indeterminate\" d=\"M5 12h14\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" />\n <path v-else d=\"M20 6L9 17l-5-5\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"kr-checkbox-row__label\">\n <div class=\"kr-checkbox-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-checkbox-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrButtonRow.css'\nimport type { KrButtonType } from '../../core/types'\nimport KrButton from './KrButton.vue'\n\nwithDefaults(defineProps<{\n title?: string\n subtitle?: string\n buttonLabel: string\n buttonType?: KrButtonType\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n buttonType: 'secondary',\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'buttonClick', event: MouseEvent): void\n}>()\n\nfunction handleButtonClick(event: MouseEvent) {\n emit('buttonClick', event)\n}\n</script>\n\n<template>\n <div\n class=\"kr-button-row\"\n :class=\"{\n 'kr-button-row--with-separator': !hideSeparator,\n 'kr-button-row--disabled': disabled,\n }\"\n >\n <div class=\"kr-button-row__label\">\n <div class=\"kr-button-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-button-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrButton class=\"kr-button-row__button\" :type=\"buttonType\" :disabled=\"disabled\" @click=\"handleButtonClick\">\n {{ buttonLabel }}\n </KrButton>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrButtonRow.css'\nimport type { KrButtonType } from '../../core/types'\nimport KrButton from './KrButton.vue'\n\nwithDefaults(defineProps<{\n title?: string\n subtitle?: string\n buttonLabel: string\n buttonType?: KrButtonType\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n buttonType: 'secondary',\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'buttonClick', event: MouseEvent): void\n}>()\n\nfunction handleButtonClick(event: MouseEvent) {\n emit('buttonClick', event)\n}\n</script>\n\n<template>\n <div\n class=\"kr-button-row\"\n :class=\"{\n 'kr-button-row--with-separator': !hideSeparator,\n 'kr-button-row--disabled': disabled,\n }\"\n >\n <div class=\"kr-button-row__label\">\n <div class=\"kr-button-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-button-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrButton class=\"kr-button-row__button\" :type=\"buttonType\" :disabled=\"disabled\" @click=\"handleButtonClick\">\n {{ buttonLabel }}\n </KrButton>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrLinkRow.css'\nimport { computed } from 'vue'\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n href?: string\n target?: string\n rel?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n target: '_blank',\n rel: 'noopener noreferrer',\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nconst tag = computed(() => (props.href ? 'a' : 'button'))\n\nfunction handleClick(event: MouseEvent) {\n emit('click', event)\n}\n</script>\n\n<template>\n <component\n :is=\"tag\"\n class=\"kr-link-row\"\n :class=\"{\n 'kr-link-row--with-separator': !hideSeparator,\n 'kr-link-row--disabled': disabled,\n }\"\n :type=\"href ? undefined : 'button'\"\n :href=\"href && !disabled ? href : undefined\"\n :target=\"href ? target : undefined\"\n :rel=\"href ? rel : undefined\"\n :disabled=\"href ? undefined : disabled\"\n :aria-disabled=\"href ? disabled : undefined\"\n @click=\"handleClick\"\n >\n <div class=\"kr-link-row__label\">\n <div class=\"kr-link-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-link-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <div class=\"kr-link-row__icon\" aria-hidden=\"true\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M15 3h6v6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10 14L21 3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </div>\n </component>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrLinkRow.css'\nimport { computed } from 'vue'\n\nconst props = withDefaults(defineProps<{\n title?: string\n subtitle?: string\n href?: string\n target?: string\n rel?: string\n disabled?: boolean\n hideSeparator?: boolean\n}>(), {\n target: '_blank',\n rel: 'noopener noreferrer',\n disabled: false,\n hideSeparator: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nconst tag = computed(() => (props.href ? 'a' : 'button'))\n\nfunction handleClick(event: MouseEvent) {\n emit('click', event)\n}\n</script>\n\n<template>\n <component\n :is=\"tag\"\n class=\"kr-link-row\"\n :class=\"{\n 'kr-link-row--with-separator': !hideSeparator,\n 'kr-link-row--disabled': disabled,\n }\"\n :type=\"href ? undefined : 'button'\"\n :href=\"href && !disabled ? href : undefined\"\n :target=\"href ? target : undefined\"\n :rel=\"href ? rel : undefined\"\n :disabled=\"href ? undefined : disabled\"\n :aria-disabled=\"href ? disabled : undefined\"\n @click=\"handleClick\"\n >\n <div class=\"kr-link-row__label\">\n <div class=\"kr-link-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-link-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <div class=\"kr-link-row__icon\" aria-hidden=\"true\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M15 3h6v6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10 14L21 3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>\n </div>\n </component>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrChevron.css'\n</script>\n\n<template>\n <div class=\"kr-chevron\"></div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrChevron.css'\n</script>\n\n<template>\n <div class=\"kr-chevron\"></div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrNavigationRow.css'\nimport KrChevron from './KrChevron.vue'\n\nwithDefaults(defineProps<{\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n destructive?: boolean\n}>(), {\n disabled: false,\n hideSeparator: false,\n destructive: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nfunction handleClick(event: MouseEvent) {\n emit('click', event)\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"kr-navigation-row\"\n :class=\"{\n 'kr-navigation-row--with-separator': !hideSeparator,\n 'kr-navigation-row--destructive': destructive,\n 'kr-navigation-row--disabled': disabled,\n }\"\n :disabled=\"disabled\"\n @click=\"handleClick\"\n >\n <div class=\"kr-navigation-row__label\">\n <div class=\"kr-navigation-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-navigation-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrChevron class=\"kr-navigation-row__chevron\" />\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrNavigationRow.css'\nimport KrChevron from './KrChevron.vue'\n\nwithDefaults(defineProps<{\n title?: string\n subtitle?: string\n disabled?: boolean\n hideSeparator?: boolean\n destructive?: boolean\n}>(), {\n disabled: false,\n hideSeparator: false,\n destructive: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nfunction handleClick(event: MouseEvent) {\n emit('click', event)\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"kr-navigation-row\"\n :class=\"{\n 'kr-navigation-row--with-separator': !hideSeparator,\n 'kr-navigation-row--destructive': destructive,\n 'kr-navigation-row--disabled': disabled,\n }\"\n :disabled=\"disabled\"\n @click=\"handleClick\"\n >\n <div class=\"kr-navigation-row__label\">\n <div class=\"kr-navigation-row__title\" v-if=\"title\">{{ title }}</div>\n <div class=\"kr-navigation-row__subtitle\" v-if=\"subtitle\">{{ subtitle }}</div>\n </div>\n <KrChevron class=\"kr-navigation-row__chevron\" />\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrTextField.css'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n modelValue?: string\n label?: string\n error?: boolean\n autofocus?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | undefined): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n },\n})\n\nconst vFocus = {\n mounted: (el: HTMLInputElement) => props.autofocus && el.focus(),\n}\n</script>\n\n<template>\n <label class=\"kr-textfield\">\n <span v-if=\"label\" class=\"kr-textfield__label-text\">{{ label }}</span>\n <input\n type=\"text\"\n class=\"kr-textfield__input\"\n :class=\"{ 'kr-textfield__input--error': error }\"\n v-model.trim=\"value\"\n v-bind=\"$attrs\"\n v-focus\n />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrTextField.css'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n modelValue?: string\n label?: string\n error?: boolean\n autofocus?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | undefined): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n },\n})\n\nconst vFocus = {\n mounted: (el: HTMLInputElement) => props.autofocus && el.focus(),\n}\n</script>\n\n<template>\n <label class=\"kr-textfield\">\n <span v-if=\"label\" class=\"kr-textfield__label-text\">{{ label }}</span>\n <input\n type=\"text\"\n class=\"kr-textfield__input\"\n :class=\"{ 'kr-textfield__input--error': error }\"\n v-model.trim=\"value\"\n v-bind=\"$attrs\"\n v-focus\n />\n </label>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSearchInput.css'\nimport { ref, computed, type ComponentPublicInstance } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n autofocus?: boolean\n label?: string\n clearLabel?: string\n}>(), {\n modelValue: '',\n autofocus: true,\n label: 'Search',\n clearLabel: 'Clear',\n})\n\nconst inputRef = ref<ComponentPublicInstance | HTMLInputElement | null>(null)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst value = computed<string>({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n if (props.autofocus) {\n ;(inputRef.value as HTMLInputElement | null)?.focus()\n }\n },\n})\n\nfunction clear() {\n value.value = ''\n}\n</script>\n\n<template>\n <div class=\"kr-search-input\">\n <div class=\"kr-search-input__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M20 20L16.65 16.65\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <input\n ref=\"inputRef\"\n class=\"kr-search-input__input\"\n type=\"text\"\n v-model=\"value\"\n :autofocus=\"autofocus\"\n :aria-label=\"label\"\n />\n <div\n class=\"kr-search-input__icon kr-search-input__icon--clear\"\n v-show=\"value\"\n @click=\"clear\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"clearLabel\"\n @keydown.enter=\"clear\"\n >\n <slot name=\"clear-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrSearchInput.css'\nimport { ref, computed, type ComponentPublicInstance } from 'vue'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n autofocus?: boolean\n label?: string\n clearLabel?: string\n}>(), {\n modelValue: '',\n autofocus: true,\n label: 'Search',\n clearLabel: 'Clear',\n})\n\nconst inputRef = ref<ComponentPublicInstance | HTMLInputElement | null>(null)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst value = computed<string>({\n get() {\n return props.modelValue\n },\n set(value) {\n emit('update:modelValue', value)\n if (props.autofocus) {\n ;(inputRef.value as HTMLInputElement | null)?.focus()\n }\n },\n})\n\nfunction clear() {\n value.value = ''\n}\n</script>\n\n<template>\n <div class=\"kr-search-input\">\n <div class=\"kr-search-input__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M20 20L16.65 16.65\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <input\n ref=\"inputRef\"\n class=\"kr-search-input__input\"\n type=\"text\"\n v-model=\"value\"\n :autofocus=\"autofocus\"\n :aria-label=\"label\"\n />\n <div\n class=\"kr-search-input__icon kr-search-input__icon--clear\"\n v-show=\"value\"\n @click=\"clear\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"clearLabel\"\n @keydown.enter=\"clear\"\n >\n <slot name=\"clear-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n </div>\n</template>\n\n","export interface DismissTimerCallbacks {\n onDismiss: () => void\n onTick?: (remainingSeconds: number) => void\n}\n\nexport interface DismissTimerStartOptions {\n timeoutSeconds: number\n showCountdown?: boolean\n}\n\nexport interface DismissTimer {\n start(options: DismissTimerStartOptions): void\n clear(): void\n}\n\nexport function createDismissTimer(callbacks: DismissTimerCallbacks): DismissTimer {\n let dismissTimer: ReturnType<typeof setTimeout> | undefined\n let countdownTimer: ReturnType<typeof setInterval> | undefined\n\n function clear(): void {\n if (dismissTimer !== undefined) {\n clearTimeout(dismissTimer)\n dismissTimer = undefined\n }\n if (countdownTimer !== undefined) {\n clearInterval(countdownTimer)\n countdownTimer = undefined\n }\n }\n\n function start({ timeoutSeconds, showCountdown }: DismissTimerStartOptions): void {\n clear()\n callbacks.onTick?.(Math.max(0, Math.ceil(timeoutSeconds)))\n\n if (timeoutSeconds <= 0) return\n\n const deadline = Date.now() + timeoutSeconds * 1000\n dismissTimer = setTimeout(() => {\n callbacks.onDismiss()\n }, timeoutSeconds * 1000)\n\n if (showCountdown) {\n countdownTimer = setInterval(() => {\n callbacks.onTick?.(Math.max(0, Math.ceil((deadline - Date.now()) / 1000)))\n }, 200)\n }\n }\n\n return { start, clear }\n}\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToast.css'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { KrToastIcon } from '../../core/types'\nimport { createDismissTimer } from '../../core/toastTimer'\n\nexport type { KrToastIcon }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n text?: string\n icon?: KrToastIcon\n timeout?: number\n actionText?: string\n showCountdown?: boolean\n}>(), {\n show: false,\n timeout: 3,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n (e: 'action'): void\n}>()\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nconst remainingSeconds = ref(props.timeout)\n\nconst dismissTimer = createDismissTimer({\n onTick: (seconds) => {\n remainingSeconds.value = seconds\n },\n onDismiss: () => {\n _show.value = false\n },\n})\n\nfunction runAction(): void {\n emit('action')\n _show.value = false\n}\n\nfunction dismissFromClick(): void {\n if (!props.actionText) {\n _show.value = false\n }\n}\n\nwatch(() => props.show, (show) => {\n if (show) {\n dismissTimer.start({ timeoutSeconds: props.timeout, showCountdown: props.showCountdown })\n } else {\n dismissTimer.clear()\n }\n}, { immediate: true })\n\nonBeforeUnmount(dismissTimer.clear)\n</script>\n\n<template>\n <Transition name=\"kr-fade-in-up\">\n <div v-if=\"_show\" class=\"kr-toast\" role=\"status\" aria-live=\"polite\" @click=\"dismissFromClick\">\n <div v-if=\"icon\" class=\"kr-toast__icon\">\n <slot name=\"icon\">\n <svg v-if=\"icon === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M20 6L9 17L4 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg v-else viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M12 8V13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </div>\n <div class=\"kr-toast__text\">{{ text }}</div>\n <div v-if=\"actionText\" class=\"kr-toast__actions\">\n <button class=\"kr-toast__action\" type=\"button\" @click.stop=\"runAction\">{{ actionText }}</button>\n <span v-if=\"showCountdown\" class=\"kr-toast__countdown\" aria-hidden=\"true\">{{ remainingSeconds }}s</span>\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrToast.css'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { KrToastIcon } from '../../core/types'\nimport { createDismissTimer } from '../../core/toastTimer'\n\nexport type { KrToastIcon }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n text?: string\n icon?: KrToastIcon\n timeout?: number\n actionText?: string\n showCountdown?: boolean\n}>(), {\n show: false,\n timeout: 3,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n (e: 'action'): void\n}>()\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nconst remainingSeconds = ref(props.timeout)\n\nconst dismissTimer = createDismissTimer({\n onTick: (seconds) => {\n remainingSeconds.value = seconds\n },\n onDismiss: () => {\n _show.value = false\n },\n})\n\nfunction runAction(): void {\n emit('action')\n _show.value = false\n}\n\nfunction dismissFromClick(): void {\n if (!props.actionText) {\n _show.value = false\n }\n}\n\nwatch(() => props.show, (show) => {\n if (show) {\n dismissTimer.start({ timeoutSeconds: props.timeout, showCountdown: props.showCountdown })\n } else {\n dismissTimer.clear()\n }\n}, { immediate: true })\n\nonBeforeUnmount(dismissTimer.clear)\n</script>\n\n<template>\n <Transition name=\"kr-fade-in-up\">\n <div v-if=\"_show\" class=\"kr-toast\" role=\"status\" aria-live=\"polite\" @click=\"dismissFromClick\">\n <div v-if=\"icon\" class=\"kr-toast__icon\">\n <slot name=\"icon\">\n <svg v-if=\"icon === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <path d=\"M20 6L9 17L4 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg v-else viewBox=\"0 0 24 24\" fill=\"none\" width=\"1em\" height=\"1em\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"2\" />\n <path d=\"M12 8V13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </div>\n <div class=\"kr-toast__text\">{{ text }}</div>\n <div v-if=\"actionText\" class=\"kr-toast__actions\">\n <button class=\"kr-toast__action\" type=\"button\" @click.stop=\"runAction\">{{ actionText }}</button>\n <span v-if=\"showCountdown\" class=\"kr-toast__countdown\" aria-hidden=\"true\">{{ remainingSeconds }}s</span>\n </div>\n </div>\n </Transition>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrEmpty.css'\ndefineProps<{\n title?: string\n description?: string\n}>()\n</script>\n\n<template>\n <div class=\"kr-empty\">\n <div class=\"kr-empty__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"10\" y=\"24\" width=\"44\" height=\"30\" rx=\"4\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" />\n <path d=\"M10 26L18 10H46L54 26\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M24 34H40\" stroke=\"var(--kr-theme)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <h1 class=\"kr-empty__title\">{{ title }}</h1>\n <p class=\"kr-empty__description\">{{ description }}</p>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrEmpty.css'\ndefineProps<{\n title?: string\n description?: string\n}>()\n</script>\n\n<template>\n <div class=\"kr-empty\">\n <div class=\"kr-empty__icon\">\n <slot name=\"icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"10\" y=\"24\" width=\"44\" height=\"30\" rx=\"4\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" />\n <path d=\"M10 26L18 10H46L54 26\" stroke=\"var(--kr-on-surface-tertiary)\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M24 34H40\" stroke=\"var(--kr-theme)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </slot>\n </div>\n <h1 class=\"kr-empty__title\">{{ title }}</h1>\n <p class=\"kr-empty__description\">{{ description }}</p>\n </div>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrMenuItem.css'\nimport type { KrMenuItemData } from '../../core/types'\n\nexport type { KrMenuItemData }\n\ndefineProps<KrMenuItemData>()\n</script>\n\n<template>\n <hr v-if=\"type === 'divider'\" class=\"kr-menu-item--divider\" />\n <button v-else class=\"kr-menu-item\" :disabled=\"disabled\" role=\"menuitem\">\n <div class=\"kr-menu-item__content\">{{ title }}</div>\n <div v-if=\"$slots.icon\" class=\"kr-menu-item__icon\" aria-hidden=\"true\">\n <slot name=\"icon\" />\n </div>\n </button>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrMenuItem.css'\nimport type { KrMenuItemData } from '../../core/types'\n\nexport type { KrMenuItemData }\n\ndefineProps<KrMenuItemData>()\n</script>\n\n<template>\n <hr v-if=\"type === 'divider'\" class=\"kr-menu-item--divider\" />\n <button v-else class=\"kr-menu-item\" :disabled=\"disabled\" role=\"menuitem\">\n <div class=\"kr-menu-item__content\">{{ title }}</div>\n <div v-if=\"$slots.icon\" class=\"kr-menu-item__icon\" aria-hidden=\"true\">\n <slot name=\"icon\" />\n </div>\n </button>\n</template>\n\n","export function focusableElements(container: HTMLElement | null): HTMLElement[] {\n return Array.from(container?.querySelectorAll<HTMLElement>('button:not([disabled]), input:not([disabled])') ?? [])\n}\n\nexport function focusNext(container: HTMLElement | null): void {\n const elements = focusableElements(container)\n const index = elements.findIndex((el) => el === document.activeElement)\n const next = index === elements.length - 1 ? elements[0] : elements[index + 1]\n next?.focus()\n}\n\nexport function focusPrev(container: HTMLElement | null): void {\n const elements = focusableElements(container)\n const index = elements.findIndex((el) => el === document.activeElement)\n const prev = index <= 0 ? elements[elements.length - 1] : elements[index - 1]\n prev?.focus()\n}\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrDialog.css'\nimport KrOverlay from './KrOverlay.vue'\nimport KrButton from './KrButton.vue'\nimport { ref, computed } from 'vue'\nimport type { KrDialogAction } from '../../core/types'\nimport { focusNext as coreFocusNext, focusPrev as coreFocusPrev } from '../../core/focusTrap'\n\nexport type { KrDialogAction }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n title?: string\n text?: string\n actions?: KrDialogAction[]\n cancelText?: string\n hideCancel?: boolean\n}>(), {\n show: false,\n title: '',\n text: '',\n actions: () => [],\n cancelText: 'Cancel',\n hideCancel: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n}>()\n\nconst submitting = ref(false)\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nfunction onCancel() {\n emit('update:show', false)\n}\n\nasync function onConfirm(action: () => void | Promise<void>) {\n if (submitting.value) return\n\n submitting.value = true\n try {\n await action()\n } finally {\n submitting.value = false\n }\n}\n\nconst dialogRef = ref<HTMLDialogElement | null>(null)\n\nfunction focusNext(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusNext(dialogRef.value)\n}\n\nfunction focusPrev(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusPrev(dialogRef.value)\n}\n</script>\n\n<template>\n <KrOverlay v-model=\"_show\" centered>\n <dialog\n ref=\"dialogRef\"\n class=\"kr-dialog\"\n :open=\"_show\"\n @keydown.esc.prevent=\"_show = false\"\n @keydown.tab.exact=\"focusNext\"\n @keydown.tab.shift=\"focusPrev\"\n >\n <h2 v-if=\"title\" class=\"kr-dialog__title\">{{ title }}</h2>\n <div class=\"kr-dialog__content\">\n <div v-if=\"text\" class=\"kr-dialog__content__text\">{{ text }}</div>\n <div v-if=\"$slots.default\" class=\"kr-dialog__content__form\">\n <slot />\n </div>\n </div>\n\n <div class=\"kr-dialog__actions\">\n <KrButton v-if=\"!hideCancel\" type=\"secondary\" :disabled=\"submitting\" @click=\"onCancel\">\n {{ cancelText }}\n </KrButton>\n <KrButton\n v-for=\"action in actions\"\n :key=\"action.text\"\n :disabled=\"submitting || action.disabled\"\n @click=\"onConfirm(action.action)\"\n >\n {{ action.text }}\n </KrButton>\n </div>\n </dialog>\n </KrOverlay>\n</template>\n\n","<script lang=\"ts\" setup>\nimport '../../styles/components/KrDialog.css'\nimport KrOverlay from './KrOverlay.vue'\nimport KrButton from './KrButton.vue'\nimport { ref, computed } from 'vue'\nimport type { KrDialogAction } from '../../core/types'\nimport { focusNext as coreFocusNext, focusPrev as coreFocusPrev } from '../../core/focusTrap'\n\nexport type { KrDialogAction }\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n title?: string\n text?: string\n actions?: KrDialogAction[]\n cancelText?: string\n hideCancel?: boolean\n}>(), {\n show: false,\n title: '',\n text: '',\n actions: () => [],\n cancelText: 'Cancel',\n hideCancel: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:show', value: boolean): void\n}>()\n\nconst submitting = ref(false)\n\nconst _show = computed<boolean>({\n get() {\n return props.show\n },\n set(val) {\n emit('update:show', val)\n },\n})\n\nfunction onCancel() {\n emit('update:show', false)\n}\n\nasync function onConfirm(action: () => void | Promise<void>) {\n if (submitting.value) return\n\n submitting.value = true\n try {\n await action()\n } finally {\n submitting.value = false\n }\n}\n\nconst dialogRef = ref<HTMLDialogElement | null>(null)\n\nfunction focusNext(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusNext(dialogRef.value)\n}\n\nfunction focusPrev(e: KeyboardEvent) {\n e.preventDefault()\n coreFocusPrev(dialogRef.value)\n}\n</script>\n\n<template>\n <KrOverlay v-model=\"_show\" centered>\n <dialog\n ref=\"dialogRef\"\n class=\"kr-dialog\"\n :open=\"_show\"\n @keydown.esc.prevent=\"_show = false\"\n @keydown.tab.exact=\"focusNext\"\n @keydown.tab.shift=\"focusPrev\"\n >\n <h2 v-if=\"title\" class=\"kr-dialog__title\">{{ title }}</h2>\n <div class=\"kr-dialog__content\">\n <div v-if=\"text\" class=\"kr-dialog__content__text\">{{ text }}</div>\n <div v-if=\"$slots.default\" class=\"kr-dialog__content__form\">\n <slot />\n </div>\n </div>\n\n <div class=\"kr-dialog__actions\">\n <KrButton v-if=\"!hideCancel\" type=\"secondary\" :disabled=\"submitting\" @click=\"onCancel\">\n {{ cancelText }}\n </KrButton>\n <KrButton\n v-for=\"action in actions\"\n :key=\"action.text\"\n :disabled=\"submitting || action.disabled\"\n @click=\"onConfirm(action.action)\"\n >\n {{ action.text }}\n </KrButton>\n </div>\n </dialog>\n </KrOverlay>\n</template>\n\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ComponentPropsWithoutRef, MouseEvent } from 'react';
2
+ import { KrButtonType } from '../../core/types';
3
+ export interface KrButtonRowProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title' | 'onClick'> {
4
+ title?: string;
5
+ subtitle?: string;
6
+ buttonLabel: string;
7
+ buttonType?: KrButtonType;
8
+ onButtonClick?: (event: MouseEvent<HTMLButtonElement>) => void;
9
+ disabled?: boolean;
10
+ hideSeparator?: boolean;
11
+ }
12
+ export declare function KrButtonRow({ title, subtitle, buttonLabel, buttonType, onButtonClick, disabled, hideSeparator, className, ...rest }: KrButtonRowProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ export interface KrCheckboxRowProps extends Omit<ComponentPropsWithoutRef<'label'>, 'title' | 'onChange'> {
3
+ checked?: boolean;
4
+ indeterminate?: boolean;
5
+ onCheckedChange?: (checked: boolean) => void;
6
+ name?: string;
7
+ value?: string | number;
8
+ title?: string;
9
+ subtitle?: string;
10
+ disabled?: boolean;
11
+ hideSeparator?: boolean;
12
+ }
13
+ export declare function KrCheckboxRow({ checked, indeterminate, onCheckedChange, name, value, title, subtitle, disabled, hideSeparator, className, ...rest }: KrCheckboxRowProps): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { MouseEvent, ReactNode } from 'react';
2
+ export interface KrLinkRowProps {
3
+ title?: string;
4
+ subtitle?: string;
5
+ href?: string;
6
+ target?: string;
7
+ rel?: string;
8
+ onClick?: (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
9
+ disabled?: boolean;
10
+ hideSeparator?: boolean;
11
+ icon?: ReactNode;
12
+ className?: string;
13
+ }
14
+ export declare function KrLinkRow({ title, subtitle, href, target, rel, onClick, disabled, hideSeparator, icon, className, }: KrLinkRowProps): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ export interface KrNavigationRowProps extends Omit<ComponentPropsWithoutRef<'button'>, 'title'> {
3
+ title?: string;
4
+ subtitle?: string;
5
+ disabled?: boolean;
6
+ hideSeparator?: boolean;
7
+ destructive?: boolean;
8
+ }
9
+ export declare function KrNavigationRow({ title, subtitle, disabled, hideSeparator, destructive, className, ...rest }: KrNavigationRowProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ export interface KrRadioRowProps extends Omit<ComponentPropsWithoutRef<'label'>, 'title' | 'onChange'> {
3
+ checked?: boolean;
4
+ onCheckedChange?: (checked: boolean) => void;
5
+ name?: string;
6
+ value?: string | number;
7
+ title?: string;
8
+ subtitle?: string;
9
+ disabled?: boolean;
10
+ hideSeparator?: boolean;
11
+ }
12
+ export declare function KrRadioRow({ checked, onCheckedChange, name, value, title, subtitle, disabled, hideSeparator, className, ...rest }: KrRadioRowProps): import("react").JSX.Element;
@@ -12,6 +12,16 @@ export { KrSwitch } from './components/KrSwitch';
12
12
  export type { KrSwitchProps } from './components/KrSwitch';
13
13
  export { KrToggleRow } from './components/KrToggleRow';
14
14
  export type { KrToggleRowProps } from './components/KrToggleRow';
15
+ export { KrRadioRow } from './components/KrRadioRow';
16
+ export type { KrRadioRowProps } from './components/KrRadioRow';
17
+ export { KrCheckboxRow } from './components/KrCheckboxRow';
18
+ export type { KrCheckboxRowProps } from './components/KrCheckboxRow';
19
+ export { KrButtonRow } from './components/KrButtonRow';
20
+ export type { KrButtonRowProps } from './components/KrButtonRow';
21
+ export { KrLinkRow } from './components/KrLinkRow';
22
+ export type { KrLinkRowProps } from './components/KrLinkRow';
23
+ export { KrNavigationRow } from './components/KrNavigationRow';
24
+ export type { KrNavigationRowProps } from './components/KrNavigationRow';
15
25
  export { KrTextField } from './components/KrTextField';
16
26
  export type { KrTextFieldProps } from './components/KrTextField';
17
27
  export { KrSearchInput } from './components/KrSearchInput';
@@ -0,0 +1,20 @@
1
+ import { KrButtonType } from '../../core/types';
2
+ type __VLS_Props = {
3
+ title?: string;
4
+ subtitle?: string;
5
+ buttonLabel: string;
6
+ buttonType?: KrButtonType;
7
+ disabled?: boolean;
8
+ hideSeparator?: boolean;
9
+ };
10
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
11
+ buttonClick: (event: MouseEvent) => any;
12
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
13
+ onButtonClick?: ((event: MouseEvent) => any) | undefined;
14
+ }>, {
15
+ disabled: boolean;
16
+ hideSeparator: boolean;
17
+ buttonType: KrButtonType;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
@@ -0,0 +1,22 @@
1
+ type __VLS_Props = {
2
+ modelValue?: boolean;
3
+ indeterminate?: boolean;
4
+ name?: string;
5
+ value?: string | number;
6
+ title?: string;
7
+ subtitle?: string;
8
+ disabled?: boolean;
9
+ hideSeparator?: boolean;
10
+ };
11
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
12
+ "update:modelValue": (value: boolean) => any;
13
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
15
+ }>, {
16
+ modelValue: boolean;
17
+ disabled: boolean;
18
+ hideSeparator: boolean;
19
+ indeterminate: boolean;
20
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
@@ -0,0 +1,31 @@
1
+ type __VLS_Props = {
2
+ title?: string;
3
+ subtitle?: string;
4
+ href?: string;
5
+ target?: string;
6
+ rel?: string;
7
+ disabled?: boolean;
8
+ hideSeparator?: boolean;
9
+ };
10
+ declare var __VLS_10: {};
11
+ type __VLS_Slots = {} & {
12
+ icon?: (props: typeof __VLS_10) => any;
13
+ };
14
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
15
+ click: (event: MouseEvent) => any;
16
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
17
+ onClick?: ((event: MouseEvent) => any) | undefined;
18
+ }>, {
19
+ disabled: boolean;
20
+ hideSeparator: boolean;
21
+ target: string;
22
+ rel: string;
23
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ title?: string;
3
+ subtitle?: string;
4
+ disabled?: boolean;
5
+ hideSeparator?: boolean;
6
+ destructive?: boolean;
7
+ };
8
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
9
+ click: (event: MouseEvent) => any;
10
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
11
+ onClick?: ((event: MouseEvent) => any) | undefined;
12
+ }>, {
13
+ disabled: boolean;
14
+ hideSeparator: boolean;
15
+ destructive: boolean;
16
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
17
+ declare const _default: typeof __VLS_export;
18
+ export default _default;
@@ -0,0 +1,20 @@
1
+ type __VLS_Props = {
2
+ modelValue?: boolean;
3
+ name?: string;
4
+ value?: string | number;
5
+ title?: string;
6
+ subtitle?: string;
7
+ disabled?: boolean;
8
+ hideSeparator?: boolean;
9
+ };
10
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
11
+ "update:modelValue": (value: boolean) => any;
12
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
13
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
14
+ }>, {
15
+ modelValue: boolean;
16
+ disabled: boolean;
17
+ hideSeparator: boolean;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
@@ -8,6 +8,11 @@ export { default as KrSelectItem } from './components/KrSelectItem.vue';
8
8
  export type { KrSelectItemProps, KrSelectVariant, KrSelectShape } from './components/KrSelectItem.vue';
9
9
  export { default as KrSwitch } from './components/KrSwitch.vue';
10
10
  export { default as KrToggleRow } from './components/KrToggleRow.vue';
11
+ export { default as KrRadioRow } from './components/KrRadioRow.vue';
12
+ export { default as KrCheckboxRow } from './components/KrCheckboxRow.vue';
13
+ export { default as KrButtonRow } from './components/KrButtonRow.vue';
14
+ export { default as KrLinkRow } from './components/KrLinkRow.vue';
15
+ export { default as KrNavigationRow } from './components/KrNavigationRow.vue';
11
16
  export { default as KrTextField } from './components/KrTextField.vue';
12
17
  export { default as KrSearchInput } from './components/KrSearchInput.vue';
13
18
  export { default as KrToast } from './components/KrToast.vue';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@anguszhu/kroma-ui",
3
- "version": "0.1.0",
4
- "description": "A small, themeable Vue 3 UI component library extracted from real product use — buttons, dialogs, toasts, switches, selects and more.",
3
+ "version": "0.2.0",
4
+ "description": "A small, themeable UI component library with React and Vue support.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "publishConfig": {