@anguszhu/kroma-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/core/focusTrap.d.ts +3 -0
  4. package/dist/core/toastTimer.d.ts +13 -0
  5. package/dist/core/types.d.ts +35 -0
  6. package/dist/kroma-react.cjs +2 -0
  7. package/dist/kroma-react.cjs.map +1 -0
  8. package/dist/kroma-react.d.ts +2 -0
  9. package/dist/kroma-react.js +600 -0
  10. package/dist/kroma-react.js.map +1 -0
  11. package/dist/kroma-ui.css +804 -0
  12. package/dist/kroma-vue.cjs +2 -0
  13. package/dist/kroma-vue.cjs.map +1 -0
  14. package/dist/kroma-vue.d.ts +2 -0
  15. package/dist/kroma-vue.js +706 -0
  16. package/dist/kroma-vue.js.map +1 -0
  17. package/dist/kroma.css +804 -0
  18. package/dist/react/components/KrButton.d.ts +7 -0
  19. package/dist/react/components/KrChevron.d.ts +3 -0
  20. package/dist/react/components/KrDialog.d.ts +14 -0
  21. package/dist/react/components/KrEmpty.d.ts +7 -0
  22. package/dist/react/components/KrMenuItem.d.ts +7 -0
  23. package/dist/react/components/KrOverlay.d.ts +11 -0
  24. package/dist/react/components/KrSearchInput.d.ts +11 -0
  25. package/dist/react/components/KrSection.d.ts +6 -0
  26. package/dist/react/components/KrSelectGroup.d.ts +21 -0
  27. package/dist/react/components/KrSelectItem.d.ts +17 -0
  28. package/dist/react/components/KrSwitch.d.ts +7 -0
  29. package/dist/react/components/KrTextField.d.ts +10 -0
  30. package/dist/react/components/KrToast.d.ts +15 -0
  31. package/dist/react/components/KrToggleRow.d.ts +10 -0
  32. package/dist/react/hooks/useCssTransition.d.ts +12 -0
  33. package/dist/react/index.d.ts +28 -0
  34. package/dist/react/utils/cx.d.ts +1 -0
  35. package/dist/vue/components/KrButton.vue.d.ts +20 -0
  36. package/dist/vue/components/KrChevron.vue.d.ts +3 -0
  37. package/dist/vue/components/KrDialog.vue.d.ts +34 -0
  38. package/dist/vue/components/KrEmpty.vue.d.ts +17 -0
  39. package/dist/vue/components/KrMenuItem.vue.d.ts +15 -0
  40. package/dist/vue/components/KrOverlay.vue.d.ts +28 -0
  41. package/dist/vue/components/KrSearchInput.vue.d.ts +30 -0
  42. package/dist/vue/components/KrSection.vue.d.ts +17 -0
  43. package/dist/vue/components/KrSelectGroup.vue.d.ts +44 -0
  44. package/dist/vue/components/KrSelectItem.vue.d.ts +25 -0
  45. package/dist/vue/components/KrSwitch.vue.d.ts +12 -0
  46. package/dist/vue/components/KrTextField.vue.d.ts +13 -0
  47. package/dist/vue/components/KrToast.vue.d.ts +32 -0
  48. package/dist/vue/components/KrToggleRow.vue.d.ts +18 -0
  49. package/dist/vue/index.d.ts +20 -0
  50. package/package.json +92 -0
@@ -0,0 +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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"}