@halo-dev/components 0.0.0-alpha.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 (44) hide show
  1. package/dist/components/alert/index.d.ts +1 -0
  2. package/dist/components/alert/interface.d.ts +1 -0
  3. package/dist/components/button/index.d.ts +1 -0
  4. package/dist/components/button/interface.d.ts +2 -0
  5. package/dist/components/card/Card.vue.d.ts +17 -0
  6. package/dist/components/card/index.d.ts +1 -0
  7. package/dist/components/checkbox/index.d.ts +2 -0
  8. package/dist/components/dialog/index.d.ts +3 -0
  9. package/dist/components/dialog/interface.d.ts +13 -0
  10. package/dist/components/dialog/use-dialog.d.ts +9 -0
  11. package/dist/components/header/PageHeader.vue.d.ts +10 -0
  12. package/dist/components/header/index.d.ts +1 -0
  13. package/dist/components/input/index.d.ts +1 -0
  14. package/dist/components/input/interface.d.ts +1 -0
  15. package/dist/components/menu/RoutesMenu.d.ts +14 -0
  16. package/dist/components/menu/index.d.ts +4 -0
  17. package/dist/components/menu/interface.d.ts +12 -0
  18. package/dist/components/modal/index.d.ts +1 -0
  19. package/dist/components/radio/index.d.ts +2 -0
  20. package/dist/components/select/Option.vue.d.ts +10 -0
  21. package/dist/components/select/index.d.ts +2 -0
  22. package/dist/components/select/interface.d.ts +1 -0
  23. package/dist/components/space/index.d.ts +1 -0
  24. package/dist/components/space/interface.d.ts +4 -0
  25. package/dist/components/switch/index.d.ts +1 -0
  26. package/dist/components/tabs/index.d.ts +3 -0
  27. package/dist/components/tabs/interface.d.ts +2 -0
  28. package/dist/components/tag/index.d.ts +1 -0
  29. package/dist/components/tag/interface.d.ts +1 -0
  30. package/dist/components/textarea/Textarea.vue.d.ts +40 -0
  31. package/dist/components/textarea/index.d.ts +1 -0
  32. package/dist/components.d.ts +16 -0
  33. package/dist/halo-components.cjs.js +3 -0
  34. package/dist/halo-components.cjs.js.map +1 -0
  35. package/dist/halo-components.es.js +2121 -0
  36. package/dist/halo-components.es.js.map +1 -0
  37. package/dist/halo-components.iife.js +20 -0
  38. package/dist/halo-components.iife.js.map +1 -0
  39. package/dist/halo-components.umd.js +20 -0
  40. package/dist/halo-components.umd.js.map +1 -0
  41. package/dist/icons/icons.d.ts +42 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/style.css +1 -0
  44. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-components.es.js","sources":["../plugin-vue:export-helper","../src/components/alert/Alert.vue","../src/components/button/Button.vue","../src/components/checkbox/CheckBox.vue","../src/components/checkbox/CheckBoxGroup.vue","../src/components/input/Input.vue","../src/components/menu/Menu.vue","../src/components/menu/MenuItem.vue","../src/components/menu/RoutesMenu.tsx","../src/components/modal/Modal.vue","../src/components/radio/Radio.vue","../src/components/radio/RadioGroup.vue","../src/components/select/Select.vue","../src/components/space/interface.ts","../src/components/space/Space.vue","../src/components/tabs/Tabs.vue","../src/components/tabs/TabItem.vue","../src/components/tabs/Tabbar.vue","../src/components/tag/Tag.vue","../src/components/textarea/Textarea.vue","../src/components/switch/Switch.vue","../src/components/dialog/Dialog.vue","../src/components/dialog/interface.ts","../src/components/dialog/DialogProvider.vue","../src/components/dialog/use-dialog.ts"],"sourcesContent":["\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<script lang=\"ts\" setup>\nimport type { Component, PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Type } from \"./interface\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconCloseCircle,\n IconErrorWarning,\n IconInformation,\n} from \"../../icons/icons\";\n\nconst TypeIcons: Record<Type, Component> = {\n success: IconCheckboxCircle,\n info: IconInformation,\n default: IconInformation,\n warning: IconErrorWarning,\n error: IconCloseCircle,\n};\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n title: {\n type: String,\n },\n description: {\n type: String,\n },\n closable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\"close\"]);\n\nconst classes = computed(() => {\n return [`alert-${props.type}`];\n});\n\nconst handleClose = () => {\n emit(\"close\");\n};\n</script>\n\n<template>\n <div :class=\"classes\" class=\"alert-wrapper\">\n <div class=\"alert-header\">\n <div class=\"alert-icon\">\n <slot name=\"icon\">\n <component :is=\"TypeIcons[type]\" />\n </slot>\n </div>\n <div class=\"alert-title\">\n {{ title }}\n </div>\n <div v-if=\"closable\" class=\"alert-close\" @click=\"handleClose\">\n <IconClose />\n </div>\n </div>\n <div v-if=\"description || $slots.description\" class=\"alert-description\">\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"alert-actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.alert-wrapper {\n @apply flex;\n @apply flex-col;\n @apply box-border;\n @apply border;\n padding: 12px 16px;\n border-radius: 4px;\n\n .alert-header {\n @apply flex;\n\n .alert-icon {\n @apply self-center;\n @apply mr-3;\n @apply text-lg;\n }\n\n .alert-title {\n @apply self-center;\n @apply mr-3;\n @apply flex-1;\n @apply font-medium;\n @apply text-base;\n }\n\n .alert-close {\n @apply self-center;\n @apply cursor-pointer;\n @apply rounded-full;\n @apply p-0.5;\n\n &:hover {\n @apply transition-all;\n @apply bg-gray-300;\n @apply text-white;\n }\n }\n }\n\n .alert-description {\n @apply text-sm;\n @apply mt-2;\n }\n\n .alert-actions {\n @apply border-t;\n @apply mt-3 pt-2;\n }\n\n &.alert-default {\n @apply bg-gray-50;\n @apply border-gray-300;\n\n .alert-icon,\n .alert-description {\n @apply text-gray-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-gray-700;\n }\n }\n\n &.alert-success {\n @apply bg-green-50;\n @apply border-green-300;\n\n .alert-icon,\n .alert-description {\n @apply text-green-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-green-700;\n }\n }\n\n &.alert-info {\n @apply bg-sky-50;\n @apply border-sky-300;\n\n .alert-icon,\n .alert-description {\n @apply text-sky-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-sky-700;\n }\n }\n\n &.alert-warning {\n @apply bg-orange-50;\n @apply border-orange-300;\n\n .alert-icon,\n .alert-description {\n @apply text-orange-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-orange-700;\n }\n }\n\n &.alert-error {\n @apply bg-red-50;\n @apply border-red-300;\n\n .alert-icon,\n .alert-description {\n @apply text-red-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-red-700;\n }\n }\n}\n</style>\n","<template>\n <button\n :class=\"classes\"\n :disabled=\"disabled\"\n class=\"btn\"\n @click=\"handleClick\"\n >\n <span v-if=\"$slots.icon || loading\" class=\"btn-icon\">\n <svg\n v-if=\"loading\"\n class=\"animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n <slot v-else name=\"icon\" />\n </span>\n <span class=\"btn-content\">\n <slot />\n </span>\n </button>\n</template>\n<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { RouteLocationRaw } from \"vue-router\";\nimport { useRouter } from \"vue-router\";\nimport type { Size, Type } from \"./interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n circle: {\n type: Boolean,\n default: false,\n },\n block: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n route: {\n type: Object as PropType<RouteLocationRaw>,\n },\n});\n\nconst router = useRouter();\nconst emit = defineEmits([\"click\"]);\n\nconst classes = computed(() => {\n return [\n `btn-${props.size}`,\n `btn-${props.type}`,\n { \"btn-circle\": props.circle },\n { \"btn-block\": props.block },\n { \"btn-loading\": props.loading },\n ];\n});\n\nfunction handleClick() {\n if (props.disabled || props.loading) return;\n if (props.route) {\n router.push(props.route);\n }\n emit(\"click\");\n}\n</script>\n<style lang=\"scss\">\n.btn {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply cursor-pointer;\n @apply select-none;\n @apply flex-wrap;\n @apply items-center;\n @apply justify-center;\n @apply transition-all;\n @apply text-center;\n @apply text-sm;\n @apply no-underline;\n @apply h-9;\n @apply px-4;\n @apply outline-0;\n @apply border-none;\n @apply appearance-none;\n @apply align-middle;\n\n &:hover {\n @apply opacity-90;\n }\n\n &:active {\n @apply opacity-100;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n}\n\n.btn-default {\n border: 1px solid #d9d9d9;\n\n .btn-icon {\n color: #0e1731;\n }\n}\n\n.btn-primary {\n background: #4ccba0;\n @apply text-white;\n}\n\n.btn-secondary {\n background: #0e1731;\n @apply text-white;\n}\n\n.btn-danger {\n background: #d71d1d;\n @apply text-white;\n}\n\n.btn-block {\n @apply w-full;\n}\n\n.btn-icon {\n @apply h-5 w-5;\n @apply text-white;\n @apply mr-3;\n}\n\n.btn-loading {\n @apply cursor-not-allowed;\n &:hover {\n @apply opacity-100;\n }\n}\n\n.btn-lg {\n @apply h-11;\n @apply px-5;\n @apply text-lg;\n}\n\n.btn-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-circle {\n @apply w-9;\n @apply p-0;\n @apply rounded-full;\n}\n\n.btn-lg.btn-circle {\n @apply w-11;\n}\n\n.btn-sm.btn-circle {\n @apply w-7;\n}\n\n.btn-xs.btn-circle {\n @apply w-6;\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n checked: {\n type: Boolean,\n default: false,\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst id = [\"checkbox\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst emit = defineEmits([\"update:checked\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { checked } = e.target as HTMLInputElement;\n emit(\"update:checked\", checked);\n emit(\"change\", e);\n}\n</script>\n<template>\n <div\n :class=\"{ 'checkbox-wrapper-checked': checked }\"\n class=\"checkbox-wrapper\"\n >\n <div class=\"checkbox-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :value=\"value\"\n type=\"checkbox\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"checkbox-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VCheckbox } from \"./index\";\nimport type { PropType } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: Object as PropType<Array<string>>,\n default: () => {\n return [];\n },\n },\n options: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { value, checked } = e.target as HTMLInputElement;\n const checkedValues = [...props.modelValue];\n\n if (checked) {\n checkedValues.push(value);\n } else {\n checkedValues.splice(checkedValues.indexOf(value), 1);\n }\n emit(\"update:modelValue\", checkedValues);\n emit(\"change\", checkedValues);\n}\n</script>\n<template>\n <div class=\"checkbox-group-wrapper\">\n <VCheckbox\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :checked=\"modelValue.includes(option[valueKey])\"\n :label=\"option[labelKey]\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-group-wrapper {\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`input-${props.size}`];\n});\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"input-wrapper\">\n <div v-if=\"$slots.prefix\" class=\"input-prefix\">\n <slot name=\"prefix\" />\n </div>\n <input\n :class=\"classes\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n type=\"text\"\n @input=\"handleInput\"\n />\n <div v-if=\"$slots.suffix\" class=\"input-suffix\">\n <slot name=\"suffix\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.input-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n input {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply resize-none;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.input-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.input-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.input-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.input-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n\n .input-prefix {\n position: absolute;\n display: flex;\n top: 50%;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n\n .input-suffix {\n position: absolute;\n display: flex;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { provide } from \"vue\";\n\nconst props = defineProps({\n openIds: {\n type: Object as PropType<string[]>,\n required: false,\n },\n});\n\nprovide<string[] | undefined>(\"openIds\", props.openIds);\n</script>\n\n<template>\n <div class=\"menu-container w-full p-3\">\n <ul>\n <slot />\n </ul>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { IconArrowRight } from \"../../icons/icons\";\nimport { computed, inject, ref, useSlots } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n default: \"\",\n },\n title: {\n type: String,\n default: \"\",\n },\n active: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"select\"]);\n\nconst slots = useSlots();\n\nconst open = ref(false);\n\nconst openIds = inject<string[] | undefined>(\"openIds\");\n\nif (openIds?.includes(props.id)) {\n open.value = true;\n}\n\nconst hasSubmenus = computed(() => {\n return slots.default && slots.default().length > 0;\n});\n\nfunction handleClick() {\n if (hasSubmenus.value) {\n open.value = !open.value;\n return;\n }\n emit(\"select\", props.id);\n}\n</script>\n\n<template>\n <li\n :class=\"{ 'has-submenus': hasSubmenus }\"\n class=\"menu-item\"\n @click.stop=\"handleClick\"\n >\n <div :class=\"{ active }\" class=\"menu-item-title\">\n <span v-if=\"$slots.icon\" class=\"menu-icon mr-3 self-center\">\n <slot name=\"icon\" />\n </span>\n <span class=\"menu-title flex-1 self-center\">\n {{ title }}\n </span>\n <span\n v-if=\"$slots.default\"\n :class=\"{ open }\"\n class=\"menu-icon-collapse self-center transition-all\"\n >\n <IconArrowRight />\n </span>\n </div>\n\n <Transition name=\"submenus-show\">\n <ul v-show=\"$slots.default && open\" class=\"sub-menu-items transition-all\">\n <slot />\n </ul>\n </Transition>\n </li>\n</template>\n\n<style lang=\"scss\">\n.menu-item {\n @apply cursor-pointer;\n}\n\n.menu-item-title {\n @apply transition-all;\n @apply text-base;\n @apply flex;\n @apply select-none;\n @apply relative;\n @apply p-2;\n @apply font-normal;\n\n border-radius: 4px;\n\n &:hover,\n &.active {\n @apply bg-gray-100;\n @apply font-medium;\n }\n\n &.active::after {\n @apply absolute;\n top: calc(50% - 13px);\n left: -8px;\n width: 3px;\n height: 26px;\n content: \"\";\n background: #242e41;\n border-radius: 6px;\n }\n}\n\n.menu-icon-collapse.open {\n transform: rotate(90deg);\n}\n\n.submenus-show-enter-active {\n transition: all 0.1s ease-out;\n}\n\n.submenus-show-leave-active {\n transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);\n}\n\n.submenus-show-enter-from,\n.submenus-show-enter-to {\n transform: translateY(-10px);\n opacity: 0;\n}\n</style>\n","import type { Component, PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport type { MenuGroupType, MenuItemType } from \"./interface\";\nimport { VMenu, VMenuItem, VMenuLabel } from \"./index\";\nimport type { RouteLocationMatched } from \"vue-router\";\nimport { useRoute, useRouter } from \"vue-router\";\n\nconst VRoutesMenu = defineComponent({\n name: \"VRoutesMenu\",\n props: {\n menus: {\n type: Object as PropType<MenuGroupType[]>,\n },\n },\n emits: [\"select\"],\n setup(props, { emit }) {\n const route = useRoute();\n const { push } = useRouter();\n\n const openIds = computed(() => {\n return route.matched.map((item: RouteLocationMatched) => item.path);\n });\n\n async function handleSelect(id: string) {\n emit(\"select\", id);\n await push(id);\n }\n\n function renderIcon(icon: Component | undefined) {\n if (!icon) return undefined;\n\n return <icon height=\"20px\" width=\"20px\" />;\n }\n\n function renderItems(items: MenuItemType[] | undefined) {\n return items?.map((item) => {\n return (\n <>\n {item.children?.length ? (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n >\n {renderItems(item.children)}\n </VMenuItem>\n ) : (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n onSelect={handleSelect}\n active={openIds.value.includes(item.path)}\n />\n )}\n </>\n );\n });\n }\n\n return () => (\n <VMenu openIds={openIds.value}>\n {props.menus?.map((menu: MenuGroupType) => {\n return (\n <>\n {menu.name && <VMenuLabel>{menu.name}</VMenuLabel>}\n {menu.items?.length && renderItems(menu.items)}\n </>\n );\n })}\n </VMenu>\n );\n },\n});\n\nexport { VRoutesMenu };\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport { IconClose } from \"../../icons/icons\";\n\nconst props = defineProps({\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n },\n width: {\n type: Number,\n default: 500,\n },\n fullscreen: {\n type: Boolean,\n default: false,\n },\n bodyClass: {\n type: Object as PropType<string[]>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst rootVisible = ref(false);\n\nconst wrapperClasses = computed(() => {\n return {\n \"modal-wrapper-fullscreen\": props.fullscreen,\n };\n});\n\nconst contentStyles = computed(() => {\n return {\n maxWidth: props.width + \"px\",\n };\n});\n\nfunction handleClose() {\n emit(\"update:visible\", false);\n emit(\"close\");\n}\n</script>\n<template>\n <Teleport to=\"body\" :disabled=\"true\">\n <div\n v-show=\"rootVisible\"\n :class=\"wrapperClasses\"\n aria-modal=\"true\"\n class=\"modal-wrapper\"\n role=\"dialog\"\n tabindex=\"0\"\n @keyup.esc=\"handleClose()\"\n >\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n @before-enter=\"rootVisible = true\"\n @after-leave=\"rootVisible = false\"\n >\n <div v-show=\"visible\" class=\"modal-layer\" @click=\"handleClose()\" />\n </transition>\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-show=\"visible\"\n :style=\"contentStyles\"\n class=\"modal-content transform transition-all\"\n >\n <div v-if=\"$slots.header || title\" class=\"modal-header\">\n <slot name=\"header\">\n <div class=\"modal-header-title\">{{ title }}</div>\n <div class=\"modal-header-actions flex flex-row\">\n <slot name=\"actions\"></slot>\n <div class=\"modal-header-action\" @click=\"handleClose()\">\n <IconClose />\n </div>\n </div>\n </slot>\n </div>\n <div :class=\"bodyClass\" class=\"modal-body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"modal-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </transition>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n.modal-wrapper {\n @apply fixed;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply flex flex-row;\n @apply items-center justify-center;\n z-index: 999;\n\n .modal-layer {\n @apply flex-none;\n @apply absolute;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply transition-opacity;\n @apply bg-gray-500;\n @apply bg-opacity-75;\n }\n\n .modal-content {\n @apply flex;\n @apply flex-col;\n @apply relative;\n @apply bg-white;\n @apply items-stretch;\n @apply shadow-xl;\n width: calc(100vw - 20px);\n max-height: calc(100vh - 20px);\n border-radius: 4px;\n\n .modal-header {\n @apply flex;\n @apply justify-between;\n @apply border-b;\n\n .modal-header-title {\n @apply self-center;\n @apply text-base;\n @apply font-bold;\n padding: 12px 16px;\n }\n\n .modal-header-actions {\n @apply self-center;\n @apply h-full;\n .modal-header-action {\n @apply cursor-pointer;\n padding: 12px 16px;\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n }\n\n .modal-body {\n @apply overflow-y-auto overflow-x-hidden;\n @apply flex-1;\n word-wrap: break-word;\n padding: 12px 16px;\n }\n\n .modal-footer {\n @apply border-t;\n padding: 12px 16px;\n }\n }\n\n &.modal-wrapper-fullscreen {\n .modal-content {\n width: 100vw !important;\n max-width: 100vw !important;\n height: 100vh !important;\n max-height: 100vh !important;\n border-radius: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst id = [\"radio\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst checked = computed(() => props.modelValue === props.value);\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div :class=\"{ 'radio-wrapper-checked': checked }\" class=\"radio-wrapper\">\n <div class=\"radio-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :name=\"name\"\n :value=\"value\"\n type=\"radio\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"radio-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.radio-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n\n .radio-inner {\n @apply self-center;\n @apply relative;\n }\n\n .radio-label {\n @apply flex;\n @apply self-center;\n @apply items-start;\n @apply ml-3;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VRadio } from \"./index\";\nimport type { PropType } from \"vue\";\n\ndefineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n options: {\n type: Object as PropType<Array<Record<string, string | number | boolean>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(value: string | number | boolean) {\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div class=\"radio-group-wrapper\">\n <VRadio\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :label=\"option[labelKey] + ''\"\n :model-value=\"modelValue\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\"></style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`select-${props.size}`];\n});\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLSelectElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"select-wrapper\">\n <select\n :class=\"classes\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n @change=\"handleChange\"\n >\n <option v-if=\"placeholder\" key=\"placeholder\" disabled hidden value=\"\">\n {{ placeholder }}\n </option>\n <slot />\n </select>\n </div>\n</template>\n<style lang=\"scss\">\n.select-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n\n select {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.select-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.select-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.select-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.select-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n}\n</style>\n","export type Spacing = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type Direction = \"row\" | \"column\";\nexport type Align = \"start\" | \"end\" | \"center\" | \"stretch\";\nexport const SpacingSize: Record<string, number> = {\n xs: 10,\n sm: 12,\n md: 16,\n lg: 20,\n};\n","<script lang=\"ts\" setup>\nimport type { Align, Direction, Spacing } from \"./interface\";\nimport { SpacingSize } from \"./interface\";\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n spacing: {\n type: String as PropType<Spacing>,\n default: \"xs\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n align: {\n type: String as PropType<Align>,\n default: \"center\",\n },\n});\n\nconst wrapperClasses = computed(() => {\n const { direction, align } = props;\n return [`space-direction-${direction}`, `space-align-${align}`];\n});\n</script>\n<template>\n <div\n :class=\"wrapperClasses\"\n :style=\"`gap: ${SpacingSize[spacing]}px`\"\n class=\"space-wrapper\"\n >\n <slot />\n </div>\n</template>\n<style lang=\"scss\">\n.space-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n &.space-direction-row {\n @apply flex-row;\n }\n\n &.space-direction-column {\n @apply flex-col;\n }\n\n &.space-align-center {\n @apply items-center;\n }\n\n &.space-align-start {\n @apply items-start;\n }\n\n &.space-align-end {\n @apply items-end;\n }\n\n &.space-align-stretch {\n @apply items-stretch;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef, PropType } from \"vue\";\nimport { computed, provide, useSlots } from \"vue\";\nimport { VTabbar } from \"./index\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nprovide<ComputedRef<string | number | undefined>>(\n \"activeId\",\n computed(() => props.activeId)\n);\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst slots = useSlots();\n\nconst tabItems = computed(() => {\n return slots.default?.().map(({ props: slotProps }) => {\n return {\n id: slotProps?.[props.idKey],\n label: slotProps?.[props.labelKey],\n };\n });\n});\n\nconst classes = computed(() => {\n return [`tabs-direction-${props.direction}`];\n});\n\nconst handleChange = (id: string | number) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabs-wrapper\">\n <div class=\"tabs-bar-wrapper\">\n <VTabbar\n :activeId=\"activeId\"\n :direction=\"direction\"\n :items=\"tabItems\"\n :type=\"type\"\n @change=\"handleChange\"\n />\n </div>\n <div class=\"tabs-items-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabs-wrapper {\n @apply flex;\n\n &.tabs-direction-row {\n @apply flex-col;\n\n .tabs-items-wrapper {\n @apply mt-2;\n }\n }\n\n &.tabs-direction-column {\n .tabs-items-wrapper {\n @apply ml-2;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef } from \"vue\";\nimport { computed, inject } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n },\n label: {\n type: String,\n },\n});\n\nconst activeId = inject<ComputedRef<string | number | undefined>>(\"activeId\");\n\nconst isActive = computed(() => {\n return activeId?.value === props.id;\n});\n</script>\n<template>\n <div v-if=\"isActive\" class=\"tabs-item-wrapper\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n items: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst classes = computed(() => {\n return [`tabbar-${props.type}`, `tabbar-direction-${props.direction}`];\n});\n\nconst handleChange = (id: number | string) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabbar-wrapper\">\n <div class=\"tabbar-items\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :class=\"{ 'tabbar-item-active': item[idKey] === activeId }\"\n class=\"tabbar-item\"\n @click=\"handleChange(item[idKey])\"\n >\n <div v-if=\"item.icon\" class=\"tabbar-item-icon\">\n <component :is=\"item.icon\" />\n </div>\n <div v-if=\"item[labelKey]\" class=\"tabbar-item-label\">\n {{ item[labelKey] }}\n </div>\n </div>\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabbar-wrapper {\n .tabbar-items {\n @apply flex;\n @apply items-center;\n @apply flex-row;\n }\n\n .tabbar-item {\n @apply flex;\n @apply cursor-pointer;\n @apply self-center;\n @apply transition-all;\n @apply text-base;\n @apply justify-center;\n @apply gap-2;\n\n .tabbar-item-label,\n .tabbar-item-icon {\n @apply self-center;\n }\n }\n\n &.tabbar-default {\n border-bottom-width: 2px;\n @apply border-b-gray-100;\n\n .tabbar-items {\n margin-bottom: -2px;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-5;\n @apply py-1;\n @apply border-b-gray-100;\n\n border-bottom-width: 2px;\n\n &.tabbar-item-active {\n color: #0e1731;\n border-bottom-color: #0e1731;\n }\n }\n }\n\n &.tabbar-pills {\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-gray-100;\n @apply opacity-100;\n }\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n\n &.tabbar-outline {\n @apply p-1;\n @apply bg-gray-100;\n border-radius: 4px;\n\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-white;\n @apply opacity-100;\n @apply shadow-sm;\n }\n\n &:hover {\n @apply bg-white;\n }\n }\n }\n\n &.tabbar-direction-row {\n .tabbar-items {\n @apply flex-row;\n }\n }\n\n &.tabbar-direction-column {\n .tabbar-items {\n @apply flex-col;\n }\n\n &.tabbar-default {\n border-bottom-width: 0;\n @apply border-b-0;\n border-right-width: 2px;\n @apply border-r-gray-100;\n\n .tabbar-items {\n margin-bottom: 0;\n margin-right: -2px;\n }\n\n .tabbar-item {\n border-bottom-width: 0;\n border-right-width: 2px;\n\n &.tabbar-item-active {\n border-right-color: #0e1731;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Theme } from \"./interface\";\n\nconst props = defineProps({\n theme: {\n type: String as PropType<Theme>,\n default: \"default\",\n },\n rounded: {\n type: Boolean,\n default: false,\n },\n});\n\nconst classes = computed(() => {\n return [`tag-${props.theme}`, { \"tag-rounded\": props.rounded }];\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"tag-wrapper\">\n <div v-if=\"$slots.leftIcon\" class=\"tag-left-icon\">\n <slot name=\"leftIcon\" />\n </div>\n <span class=\"tag-content\">\n <slot />\n </span>\n <div v-if=\"$slots.rightIcon\" class=\"tag-right-icon\">\n <slot name=\"rightIcon\" />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tag-wrapper {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply flex-wrap;\n @apply box-border;\n @apply cursor-pointer;\n @apply text-center;\n @apply items-center;\n @apply justify-center;\n @apply w-auto;\n @apply align-middle;\n @apply h-5;\n @apply text-xs;\n\n &.tag-default {\n border: 1px solid #d9d9d9;\n }\n\n &.tag-primary {\n background: #4ccba0;\n border: 1px solid #4ccba0;\n @apply text-white;\n }\n\n &.tag-secondary {\n background: #0e1731;\n border: 1px solid #0e1731;\n @apply text-white;\n }\n\n &.tag-danger {\n background: #d71d1d;\n border: 1px solid #d71d1d;\n @apply text-white;\n }\n\n &.tag-rounded {\n @apply rounded-full;\n }\n\n .tag-content {\n @apply px-1;\n }\n\n .tag-left-icon {\n @apply pl-1;\n }\n\n .tag-right-icon {\n @apply pr-1;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineProps({\n modelValue: {\n type: String,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n rows: {\n type: Number,\n default: 3,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"textarea-wrapper\">\n <textarea\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n >\n </textarea>\n </div>\n</template>\n<style lang=\"scss\">\n.textarea-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n textarea {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n\n @apply p-3;\n @apply text-sm;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n modelValue: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst handleChange = () => {\n emit(\"update:modelValue\", !props.modelValue);\n emit(\"change\", !props.modelValue);\n};\n</script>\n<template>\n <div class=\"switch-wrapper\">\n <button\n :class=\"{\n 'bg-gray-200': !modelValue,\n '!bg-themeable-primary-600': modelValue,\n }\"\n aria-checked=\"false\"\n class=\"switch-inner\"\n role=\"switch\"\n type=\"button\"\n @click=\"handleChange\"\n >\n <span\n :class=\"{\n 'translate-x-0': !modelValue,\n 'translate-x-5': modelValue,\n }\"\n aria-hidden=\"true\"\n class=\"switch-indicator\"\n >\n <slot name=\"icon\" />\n </span>\n </button>\n </div>\n</template>\n<style lang=\"scss\">\n.switch-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n .switch-inner {\n @apply relative;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply h-6;\n @apply w-11;\n @apply border-2;\n @apply border-transparent;\n @apply rounded-full;\n @apply cursor-pointer;\n @apply transition-colors;\n @apply ease-in-out;\n @apply duration-200;\n\n .switch-indicator {\n @apply pointer-events-none;\n @apply inline-block;\n @apply h-5;\n @apply w-5;\n @apply rounded-full;\n @apply bg-white;\n @apply shadow;\n @apply transform;\n @apply ring-0;\n @apply transition;\n @apply ease-in-out;\n @apply duration-200;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VModal } from \"@/components/modal\";\nimport { VSpace } from \"@/components/space\";\nimport { VButton } from \"@/components/button\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconErrorWarning,\n IconForbidLine,\n IconInformation,\n} from \"@/icons/icons\";\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport type { Type } from \"@/components/dialog/interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"info\",\n },\n title: {\n type: String,\n default: \"提示\",\n },\n description: {\n type: String,\n default: \"\",\n },\n confirmText: {\n type: String,\n default: \"确定\",\n },\n cancelText: {\n type: String,\n default: \"取消\",\n },\n visible: {\n type: Boolean,\n default: false,\n },\n onConfirm: {\n type: Function as PropType<() => void>,\n },\n onCancel: {\n type: Function as PropType<() => void>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst icons = {\n success: {\n icon: IconCheckboxCircle,\n color: \"green\",\n },\n info: {\n icon: IconInformation,\n color: \"blue\",\n },\n warning: {\n icon: IconErrorWarning,\n color: \"orange\",\n },\n error: {\n icon: IconForbidLine,\n color: \"red\",\n },\n};\nconst icon = computed(() => icons[props.type]);\n\nconst loading = ref(false);\n\nconst handleCancel = () => {\n if (props.onCancel) {\n props.onCancel();\n }\n handleClose();\n};\n\nconst handleConfirm = async () => {\n if (props.onConfirm) {\n loading.value = true;\n await props.onConfirm();\n }\n handleClose();\n};\n\nconst handleClose = () => {\n loading.value = false;\n emit(\"update:visible\", false);\n emit(\"close\");\n};\n</script>\n<template>\n <VModal :visible=\"visible\" :width=\"450\" @close=\"handleCancel()\">\n <div class=\"flex justify-between items-start py-2 mb-2\">\n <div>\n <div\n :class=\"`ring-${icon.color}-100`\"\n class=\"inline-flex rounded-full bg-teal-50 p-1.5 ring-4\"\n >\n <component\n :is=\"icon.icon\"\n :class=\"`text-${icon.color}-500`\"\n class=\"w-5 h-5\"\n ></component>\n </div>\n </div>\n <div>\n <IconClose class=\"cursor-pointer\" @click=\"handleCancel\" />\n </div>\n </div>\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-1 flex flex-col items-stretch gap-2\">\n <div class=\"text-base text-gray-900 font-bold\">{{ title }}</div>\n <div class=\"text-sm text-gray-700\">{{ description }}</div>\n </div>\n </div>\n <template #footer>\n <VSpace>\n <VButton :loading=\"loading\" type=\"secondary\" @click=\"handleConfirm\">\n {{ confirmText }}\n </VButton>\n <VButton @click=\"handleCancel\">{{ cancelText }}</VButton>\n </VSpace>\n </template>\n </VModal>\n</template>\n","export type Type = \"success\" | \"info\" | \"warning\" | \"error\";\nexport const DialogProviderProvideKey = \"DIALOG_PROVIDER_PROVIDE_KEY\";\n\nexport interface useDialogOptions {\n type?: Type;\n visible: boolean;\n title: string;\n description?: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\n\nexport type useDialogUserOptions = Omit<useDialogOptions, \"type\" | \"visible\">;\n","<script lang=\"ts\" setup>\nimport { VDialog } from \"./index\";\nimport { provide, ref } from \"vue\";\nimport type { useDialogOptions } from \"./interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\nconst options = ref<useDialogOptions>({\n visible: false,\n title: \"\",\n});\n\nprovide(DialogProviderProvideKey, options);\n</script>\n<template>\n <slot />\n <VDialog\n v-model:visible=\"options.visible\"\n :cancel-text=\"options.cancelText\"\n :confirm-text=\"options.confirmText\"\n :description=\"options.description\"\n :onCancel=\"options.onCancel\"\n :onConfirm=\"options.onConfirm\"\n :title=\"options.title\"\n :type=\"options.type\"\n ></VDialog>\n</template>\n","import type { Ref } from \"vue\";\nimport { inject } from \"vue\";\nimport type {\n Type,\n useDialogOptions,\n useDialogUserOptions,\n} from \"@/components/dialog/interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\ninterface useDialogReturn {\n success: (options: useDialogUserOptions) => void;\n info: (options: useDialogUserOptions) => void;\n warning: (options: useDialogUserOptions) => void;\n error: (options: useDialogUserOptions) => void;\n}\n\nexport function useDialog(): useDialogReturn {\n const dialogOptions = inject<Ref<useDialogOptions>>(DialogProviderProvideKey);\n\n if (!dialogOptions) {\n throw new Error(\"DialogProvider is not mounted\");\n }\n\n const createDialog = (type: Type) => (options: useDialogUserOptions) => {\n dialogOptions.value = { ...dialogOptions.value, ...options };\n dialogOptions.value.type = type;\n dialogOptions.value.visible = true;\n };\n\n return {\n success: createDialog(\"success\"),\n info: createDialog(\"info\"),\n warning: createDialog(\"warning\"),\n error: createDialog(\"error\"),\n };\n}\n"],"names":["VRoutesMenu","defineComponent","name","props","menus","type","Object","emits","setup","emit","route","useRoute","push","useRouter","openIds","computed","matched","map","item","path","handleSelect","id","renderIcon","icon","undefined","_createVNode","renderItems","items","_Fragment","children","length","VMenuItem","value","includes","VMenu","menu"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ var HaloComponents=function(a,e,m){"use strict";var no=Object.defineProperty;var A=Object.getOwnPropertySymbols;var io=Object.prototype.hasOwnProperty,lo=Object.prototype.propertyIsEnumerable;var L=(a,e,m)=>e in a?no(a,e,{enumerable:!0,configurable:!0,writable:!0,value:m}):a[e]=m,y=(a,e)=>{for(var m in e||(e={}))io.call(e,m)&&L(a,m,e[m]);if(A)for(var m of A(e))lo.call(e,m)&&L(a,m,e[m]);return a};var co=(()=>`*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}:root{--themeable-primary-50: 251, 254, 253;--themeable-primary-100: 220, 247, 238;--themeable-primary-200: 190, 240, 223;--themeable-primary-300: 160, 232, 208;--themeable-primary-400: 132, 223, 192;--themeable-primary-500: 103, 213, 176;--themeable-primary-600: 76, 203, 160;--themeable-primary-700: 56, 185, 141;--themeable-primary-800: 49, 154, 119;--themeable-primary-900: 42, 124, 96;--themeable-primary: 76, 203, 160;--themeable-secondary-50: 163, 182, 240;--themeable-secondary-100: 132, 158, 233;--themeable-secondary-200: 101, 133, 226;--themeable-secondary-300: 71, 109, 218;--themeable-secondary-400: 45, 86, 207;--themeable-secondary-500: 40, 74, 174;--themeable-secondary-600: 34, 62, 142;--themeable-secondary-700: 28, 49, 110;--themeable-secondary-800: 21, 36, 79;--themeable-secondary-900: 14, 23, 49;--themeable-secondary: 14, 23, 49}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-0{top:0px}.bottom-0{bottom:0px}.mt-3{margin-top:.75rem}.-mt-6{margin-top:-1.5rem}.ml-auto{margin-left:auto}.ml-1{margin-left:.25rem}.ml-4{margin-left:1rem}.ml-2{margin-left:.5rem}.mb-2{margin-bottom:.5rem}.mr-3{margin-right:.75rem}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.h-5{height:1.25rem}.h-3{height:.75rem}.h-8{height:2rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-10{height:2.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-12{height:3rem}.h-32{height:8rem}.h-28{height:7rem}.h-40{height:10rem}.h-4{height:1rem}.w-full{width:100%}.w-4{width:1rem}.w-16{width:4rem}.w-6{width:1.5rem}.w-5{width:1.25rem}.w-1\\/2{width:50%}.w-1\\/3{width:33.333333%}.min-w-0{min-width:0px}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-6{gap:1.5rem}.gap-4{gap:1rem}.gap-2{gap:.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-indigo-200{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity))}.bg-indigo-300{--tw-bg-opacity: 1;background-color:rgb(165 180 252 / var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity: 1;background-color:rgb(129 140 248 / var(--tw-bg-opacity))}.bg-green-200{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.\\!bg-themeable-primary-600{--tw-bg-opacity: 1 !important;background-color:rgba(var(--themeable-primary-600),var(--tw-bg-opacity))!important}.fill-current{fill:currentColor}.p-3{padding:.75rem}.p-0{padding:0}.p-1\\.5{padding:.375rem}.p-1{padding:.25rem}.p-4{padding:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-5{padding-bottom:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-100{transition-duration:.1s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.group:hover .group-hover\\:block{display:block}@media (min-width: 640px){.sm\\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\\:space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}}@media (min-width: 768px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
2
+ `)();const R={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Y=[e.createElementVNode("path",{fill:"currentColor",d:"M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2zm0 2a8 8 0 1 0 0 16a8 8 0 0 0 0-16zm3.833 3.337a.595.595 0 0 1 .763.067a.59.59 0 0 1 .063.76c-2.18 3.046-3.38 4.678-3.598 4.897a1.502 1.502 0 0 1-2.122 0a1.502 1.502 0 0 1 0-2.122c.374-.373 2.005-1.574 4.894-3.602zM17.5 11a1 1 0 1 1 0 2a1 1 0 0 1 0-2zm-11 0a1 1 0 1 1 0 2a1 1 0 0 1 0-2zm2.318-3.596a1 1 0 1 1-1.416 1.414a1 1 0 0 1 1.416-1.414zM12 5.5a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1)];function H(t,r){return e.openBlock(),e.createElementBlock("svg",R,Y)}var D={name:"ri-dashboard-3-line",render:H};const j={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},T=[e.createElementVNode("path",{fill:"currentColor",d:"m10.828 12l4.95 4.95l-1.414 1.414L8 12l6.364-6.364l1.414 1.414z"},null,-1)];function K(t,r){return e.openBlock(),e.createElementBlock("svg",j,T)}var F={name:"ri-arrow-left-s-line",render:K};const O={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},G=[e.createElementVNode("path",{fill:"currentColor",d:"m13.172 12l-4.95-4.95l1.414-1.414L16 12l-6.364 6.364l-1.414-1.414z"},null,-1)];function U(t,r){return e.openBlock(),e.createElementBlock("svg",O,G)}var x={name:"ri-arrow-right-s-line",render:U};const X={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},P=[e.createElementVNode("path",{fill:"currentColor",d:"m12 16l-6-6h12z"},null,-1)];function q(t,r){return e.openBlock(),e.createElementBlock("svg",X,P)}var J={name:"ri-arrow-down-s-fill",render:q};const Q={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},W=[e.createElementVNode("path",{fill:"currentColor",d:"m12 10.828l-4.95 4.95l-1.414-1.414L12 8l6.364 6.364l-1.414 1.414z"},null,-1)];function Z(t,r){return e.openBlock(),e.createElementBlock("svg",Q,W)}var ee={name:"ri-arrow-up-s-line",render:Z};const te={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},re=[e.createElementVNode("path",{fill:"currentColor",d:"m12 13.172l4.95-4.95l1.414 1.414L12 16L5.636 9.636L7.05 8.222z"},null,-1)];function ae(t,r){return e.openBlock(),e.createElementBlock("svg",te,re)}var oe={name:"ri-arrow-down-s-line",render:ae};const ne={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ie=[e.createElementVNode("path",{fill:"currentColor",d:"M2 3.993A1 1 0 0 1 2.992 3h18.016c.548 0 .992.445.992.993v16.014a1 1 0 0 1-.992.993H2.992A.993.993 0 0 1 2 20.007V3.993zM11 5H4v14h7V5zm2 0v14h7V5h-7zm1 2h5v2h-5V7zm0 3h5v2h-5v-2z"},null,-1)];function le(t,r){return e.openBlock(),e.createElementBlock("svg",ne,ie)}var ce={name:"ri-book-read-line",render:le};const se={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},de=[e.createElementVNode("path",{fill:"currentColor",d:"M5 8v12h14V8H5zm0-2h14V4H5v2zm15 16H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zM7 10h4v4H7v-4zm0 6h10v2H7v-2zm6-5h4v2h-4v-2z"},null,-1)];function pe(t,r){return e.openBlock(),e.createElementBlock("svg",se,de)}var me={name:"ri-pages-line",render:pe};const he={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},we=[e.createElementVNode("path",{fill:"currentColor",d:"M2 8.994A5.99 5.99 0 0 1 8 3h8c3.313 0 6 2.695 6 5.994V21H8c-3.313 0-6-2.695-6-5.994V8.994zM20 19V8.994A4.004 4.004 0 0 0 16 5H8a3.99 3.99 0 0 0-4 3.994v6.012A4.004 4.004 0 0 0 8 19h12zm-6-8h2v2h-2v-2zm-6 0h2v2H8v-2z"},null,-1)];function be(t,r){return e.openBlock(),e.createElementBlock("svg",he,we)}var ge={name:"ri-message-3-line",render:be};const fe={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},_e=[e.createElementVNode("path",{fill:"currentColor",d:"M12 2c5.522 0 10 3.978 10 8.889a5.558 5.558 0 0 1-5.556 5.555h-1.966c-.922 0-1.667.745-1.667 1.667c0 .422.167.811.422 1.1c.267.3.434.689.434 1.122C13.667 21.256 12.9 22 12 22C6.478 22 2 17.522 2 12S6.478 2 12 2zm-1.189 16.111a3.664 3.664 0 0 1 3.667-3.667h1.966A3.558 3.558 0 0 0 20 10.89C20 7.139 16.468 4 12 4a8 8 0 0 0-.676 15.972a3.648 3.648 0 0 1-.513-1.86zM7.5 12a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm9 0a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zM12 9a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3z"},null,-1)];function ue(t,r){return e.openBlock(),e.createElementBlock("svg",fe,_e)}var ye={name:"ri-palette-line",render:ue};const xe={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ke=[e.createElementVNode("path",{fill:"currentColor",d:"M2 18h7v2H2v-2zm0-7h9v2H2v-2zm0-7h20v2H2V4zm18.674 9.025l1.156-.391l1 1.732l-.916.805a4.017 4.017 0 0 1 0 1.658l.916.805l-1 1.732l-1.156-.391c-.41.37-.898.655-1.435.83L19 21h-2l-.24-1.196a3.996 3.996 0 0 1-1.434-.83l-1.156.392l-1-1.732l.916-.805a4.017 4.017 0 0 1 0-1.658l-.916-.805l1-1.732l1.156.391c.41-.37.898-.655 1.435-.83L17 11h2l.24 1.196c.536.174 1.024.46 1.434.83zM18 18a2 2 0 1 0 0-4a2 2 0 0 0 0 4z"},null,-1)];function $e(t,r){return e.openBlock(),e.createElementBlock("svg",xe,ke)}var ve={name:"ri-list-settings-line",render:$e};const Be={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ze=[e.createElementVNode("path",{fill:"currentColor",d:"M15.199 9.945a2.6 2.6 0 0 1-.79-1.551l-.403-3.083l-2.73 1.486a2.6 2.6 0 0 1-1.72.273L6.5 6.5l.57 3.056a2.6 2.6 0 0 1-.273 1.72l-1.486 2.73l3.083.403a2.6 2.6 0 0 1 1.55.79l2.138 2.257l1.336-2.807a2.6 2.6 0 0 1 1.23-1.231l2.808-1.336l-2.257-2.137zm.025 5.563l-2.213 4.65a.6.6 0 0 1-.977.155l-3.542-3.739a.6.6 0 0 0-.357-.182l-5.107-.668a.6.6 0 0 1-.449-.881l2.462-4.524a.6.6 0 0 0 .062-.396L4.16 4.86a.6.6 0 0 1 .7-.7l5.063.943a.6.6 0 0 0 .396-.062l4.524-2.462a.6.6 0 0 1 .881.45l.668 5.106a.6.6 0 0 0 .182.357l3.739 3.542a.6.6 0 0 1-.155.977l-4.65 2.213a.6.6 0 0 0-.284.284zm.797 1.927l1.414-1.414l4.243 4.242l-1.415 1.415l-4.242-4.243z"},null,-1)];function Ve(t,r){return e.openBlock(),e.createElementBlock("svg",Be,ze)}var Ce={name:"ri-magic-line",render:Ve};const Ee={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Me=[e.createElementVNode("path",{fill:"currentColor",d:"M12 14v2a6 6 0 0 0-6 6H4a8 8 0 0 1 8-8zm0-1c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6zm0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4zm2.595 7.812a3.51 3.51 0 0 1 0-1.623l-.992-.573l1-1.732l.992.573A3.496 3.496 0 0 1 17 14.645V13.5h2v1.145c.532.158 1.012.44 1.405.812l.992-.573l1 1.732l-.992.573a3.51 3.51 0 0 1 0 1.622l.992.573l-1 1.732l-.992-.573a3.496 3.496 0 0 1-1.405.812V22.5h-2v-1.145a3.496 3.496 0 0 1-1.405-.812l-.992.573l-1-1.732l.992-.572zM18 19.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3z"},null,-1)];function Se(t,r){return e.openBlock(),e.createElementBlock("svg",Ee,Me)}var Ne={name:"ri-user-settings-line",render:Se};const Ie={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ae=[e.createElementVNode("path",{fill:"currentColor",d:"M2 12c0-.865.11-1.703.316-2.504A3 3 0 0 0 4.99 4.867a9.99 9.99 0 0 1 4.335-2.505a3 3 0 0 0 5.348 0a9.99 9.99 0 0 1 4.335 2.505a3 3 0 0 0 2.675 4.63a10.036 10.036 0 0 1 0 5.007a3 3 0 0 0-2.675 4.629a9.99 9.99 0 0 1-4.335 2.505a3 3 0 0 0-5.348 0a9.99 9.99 0 0 1-4.335-2.505a3 3 0 0 0-2.675-4.63A10.056 10.056 0 0 1 2 12zm4.804 3c.63 1.091.81 2.346.564 3.524c.408.29.842.541 1.297.75A4.993 4.993 0 0 1 12 18c1.26 0 2.438.471 3.335 1.274c.455-.209.889-.46 1.297-.75A4.993 4.993 0 0 1 17.196 15a4.993 4.993 0 0 1 2.77-2.25a8.126 8.126 0 0 0 0-1.5A4.993 4.993 0 0 1 17.195 9a4.993 4.993 0 0 1-.564-3.524a7.989 7.989 0 0 0-1.297-.75A4.993 4.993 0 0 1 12 6a4.993 4.993 0 0 1-3.335-1.274a7.99 7.99 0 0 0-1.297.75A4.993 4.993 0 0 1 6.804 9a4.993 4.993 0 0 1-2.77 2.25a8.126 8.126 0 0 0 0 1.5A4.993 4.993 0 0 1 6.805 15zM12 15a3 3 0 1 1 0-6a3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2a1 1 0 0 0 0 2z"},null,-1)];function Le(t,r){return e.openBlock(),e.createElementBlock("svg",Ie,Ae)}var Re={name:"ri-settings-4-line",render:Le};const Ye={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},He=[e.createElementVNode("path",{fill:"currentColor",d:"M13 18v2h6v2h-6a2 2 0 0 1-2-2v-2H8a4 4 0 0 1-4-4V7a1 1 0 0 1 1-1h2V2h2v4h6V2h2v4h2a1 1 0 0 1 1 1v7a4 4 0 0 1-4 4h-3zm-5-2h8a2 2 0 0 0 2-2v-3H6v3a2 2 0 0 0 2 2zm10-8H6v1h12V8zm-6 6.5a1 1 0 1 1 0-2a1 1 0 0 1 0 2zM11 2h2v3h-2V2z"},null,-1)];function De(t,r){return e.openBlock(),e.createElementBlock("svg",Ye,He)}var je={name:"ri-plug-2-line",render:De};const Te={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ke=[e.createElementVNode("path",{fill:"currentColor",d:"M12 3c5.392 0 9.878 3.88 10.819 9c-.94 5.12-5.427 9-10.819 9c-5.392 0-9.878-3.88-10.819-9C2.121 6.88 6.608 3 12 3zm0 16a9.005 9.005 0 0 0 8.777-7a9.005 9.005 0 0 0-17.554 0A9.005 9.005 0 0 0 12 19zm0-2.5a4.5 4.5 0 1 1 0-9a4.5 4.5 0 0 1 0 9zm0-2a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5z"},null,-1)];function Fe(t,r){return e.openBlock(),e.createElementBlock("svg",Te,Ke)}var Oe={name:"ri-eye-line",render:Fe};const Ge={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ue=[e.createElementVNode("path",{fill:"currentColor",d:"M12.414 5H21a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7.414l2 2zM20 11H4v8h16v-8zm0-2V7h-8.414l-2-2H4v4h16z"},null,-1)];function Xe(t,r){return e.openBlock(),e.createElementBlock("svg",Ge,Ue)}var Pe={name:"ri-folder-2-line",render:Xe};const qe={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Je=[e.createElementVNode("path",{fill:"currentColor",d:"M4.5 10.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S6 12.825 6 12s-.675-1.5-1.5-1.5zm15 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S21 12.825 21 12s-.675-1.5-1.5-1.5zm-7.5 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5s1.5-.675 1.5-1.5s-.675-1.5-1.5-1.5z"},null,-1)];function Qe(t,r){return e.openBlock(),e.createElementBlock("svg",qe,Je)}var We={name:"ri-more-line",render:Qe};const Ze={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},et=[e.createElementVNode("path",{fill:"currentColor",d:"m12 10.586l4.95-4.95l1.414 1.414l-4.95 4.95l4.95 4.95l-1.414 1.414l-4.95-4.95l-4.95 4.95l-1.414-1.414l4.95-4.95l-4.95-4.95L7.05 5.636z"},null,-1)];function tt(t,r){return e.openBlock(),e.createElementBlock("svg",Ze,et)}var w={name:"ri-close-line",render:tt};const rt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},at=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-1-5h2v2h-2v-2zm0-8h2v6h-2V7z"},null,-1)];function ot(t,r){return e.openBlock(),e.createElementBlock("svg",rt,at)}var g={name:"ri-error-warning-line",render:ot};const nt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},it=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-.997-4L6.76 11.757l1.414-1.414l2.829 2.829l5.656-5.657l1.415 1.414L11.003 16z"},null,-1)];function lt(t,r){return e.openBlock(),e.createElementBlock("svg",nt,it)}var f={name:"ri-checkbox-circle-line",render:lt};const ct={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},st=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM11 7h2v2h-2V7zm0 4h2v6h-2v-6z"},null,-1)];function dt(t,r){return e.openBlock(),e.createElementBlock("svg",ct,st)}var b={name:"ri-information-line",render:dt};const pt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},mt=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm0-9.414l2.828-2.829l1.415 1.415L13.414 12l2.829 2.828l-1.415 1.415L12 13.414l-2.828 2.829l-1.415-1.415L10.586 12L7.757 9.172l1.415-1.415L12 10.586z"},null,-1)];function ht(t,r){return e.openBlock(),e.createElementBlock("svg",pt,mt)}var k={name:"ri-close-circle-line",render:ht};const wt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},bt=[e.createElementVNode("path",{fill:"currentColor",d:"M17 6h5v2h-2v13a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V8H2V6h5V3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v3zm1 2H6v12h12V8zm-4.586 6l1.768 1.768l-1.414 1.414L12 15.414l-1.768 1.768l-1.414-1.414L10.586 14l-1.768-1.768l1.414-1.414L12 12.586l1.768-1.768l1.414 1.414L13.414 14zM9 4v2h6V4H9z"},null,-1)];function gt(t,r){return e.openBlock(),e.createElementBlock("svg",wt,bt)}var ft={name:"ri-delete-bin-2-line",render:gt};const _t={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ut=[e.createElementVNode("path",{fill:"currentColor",d:"M11 11V7h2v4h4v2h-4v4h-2v-4H7v-2h4zm1 11C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16z"},null,-1)];function yt(t,r){return e.openBlock(),e.createElementBlock("svg",_t,ut)}var xt={name:"ri-add-circle-line",render:yt};const kt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},$t=[e.createElementVNode("path",{fill:"currentColor",d:"M7 19v-6h10v6h2V7.828L16.172 5H5v14h2zM4 3h13l4 4v13a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm5 12v4h6v-4H9z"},null,-1)];function vt(t,r){return e.openBlock(),e.createElementBlock("svg",kt,$t)}var Bt={name:"ri-save-line",render:vt};const zt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Vt=[e.createElementVNode("path",{fill:"currentColor",d:"M8 4h13v2H8V4zM4.5 6.5a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm0 7a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm0 6.9a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zM8 11h13v2H8v-2zm0 7h13v2H8v-2z"},null,-1)];function Ct(t,r){return e.openBlock(),e.createElementBlock("svg",zt,Vt)}var Et={name:"ri-list-unordered",render:Ct};const Mt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},St=[e.createElementVNode("path",{fill:"currentColor",d:"M14 10h-4v4h4v-4zm2 0v4h3v-4h-3zm-2 9v-3h-4v3h4zm2 0h3v-3h-3v3zM14 5h-4v3h4V5zm2 0v3h3V5h-3zm-8 5H5v4h3v-4zm0 9v-3H5v3h3zM8 5H5v3h3V5zM4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"},null,-1)];function Nt(t,r){return e.openBlock(),e.createElementBlock("svg",Mt,St)}var It={name:"ri-grid-line",render:Nt};const At={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Lt=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm-.997-6l7.07-7.071l-1.414-1.414l-5.656 5.657l-2.829-2.829l-1.414 1.414L11.003 16z"},null,-1)];function Rt(t,r){return e.openBlock(),e.createElementBlock("svg",At,Lt)}var Yt={name:"ri-checkbox-circle-fill",render:Rt};const Ht={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Dt=[e.createElementVNode("path",{fill:"currentColor",d:"M11 2c4.968 0 9 4.032 9 9s-4.032 9-9 9s-9-4.032-9-9s4.032-9 9-9zm0 16c3.867 0 7-3.133 7-7c0-3.868-3.133-7-7-7c-3.868 0-7 3.132-7 7c0 3.867 3.132 7 7 7zm8.485.071l2.829 2.828l-1.415 1.415l-2.828-2.829l1.414-1.414z"},null,-1)];function jt(t,r){return e.openBlock(),e.createElementBlock("svg",Ht,Dt)}var Tt={name:"ri-search-2-line",render:jt};const Kt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ft=[e.createElementVNode("path",{fill:"currentColor",d:"M4 16h16V5H4v11zm9 2v2h4v2H7v-2h4v-2H2.992A.998.998 0 0 1 2 16.993V4.007C2 3.451 2.455 3 2.992 3h18.016c.548 0 .992.449.992 1.007v12.986c0 .556-.455 1.007-.992 1.007H13z"},null,-1)];function Ot(t,r){return e.openBlock(),e.createElementBlock("svg",Kt,Ft)}var Gt={name:"ri-computer-line",render:Ot};const Ut={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Xt=[e.createElementVNode("path",{fill:"currentColor",d:"M7 4v16h10V4H7zM6 2h12a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm6 15a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1)];function Pt(t,r){return e.openBlock(),e.createElementBlock("svg",Ut,Xt)}var qt={name:"ri-smartphone-line",render:Pt};const Jt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Qt=[e.createElementVNode("path",{fill:"currentColor",d:"M6 4v16h12V4H6zM5 2h14a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm7 15a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1)];function Wt(t,r){return e.openBlock(),e.createElementBlock("svg",Jt,Qt)}var Zt={name:"ri-tablet-line",render:Wt};const er={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},tr=[e.createElementVNode("path",{fill:"currentColor",d:"M14 14.252v2.09A6 6 0 0 0 6 22l-2-.001a8 8 0 0 1 10-7.748zM12 13c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6zm0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4zm5.793 8.914l3.535-3.535l1.415 1.414l-4.95 4.95l-3.536-3.536l1.415-1.414l2.12 2.121z"},null,-1)];function rr(t,r){return e.openBlock(),e.createElementBlock("svg",er,tr)}var ar={name:"ri-user-follow-line",render:rr};const or={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},nr=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-5-7h9v2h-4v3l-5-5zm5-4V6l5 5H8V9h4z"},null,-1)];function ir(t,r){return e.openBlock(),e.createElementBlock("svg",or,nr)}var lr={name:"ri-exchange-line",render:ir};const cr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},sr=[e.createElementVNode("path",{fill:"currentColor",d:"M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z"},null,-1)];function dr(t,r){return e.openBlock(),e.createElementBlock("svg",cr,sr)}var pr={name:"ri-github-fill",render:dr};const mr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},hr=[e.createElementVNode("path",{fill:"currentColor",d:"m12 12.586l4.243 4.242l-1.415 1.415L13 16.415V22h-2v-5.587l-1.828 1.83l-1.415-1.415L12 12.586zM12 2a7.001 7.001 0 0 1 6.954 6.194a5.5 5.5 0 0 1-.953 10.784v-2.014a3.5 3.5 0 1 0-1.112-6.91a5 5 0 1 0-9.777 0a3.5 3.5 0 0 0-1.292 6.88l.18.03v2.014a5.5 5.5 0 0 1-.954-10.784A7 7 0 0 1 12 2z"},null,-1)];function wr(t,r){return e.openBlock(),e.createElementBlock("svg",mr,hr)}var br={name:"ri-upload-cloud-2-line",render:wr};const gr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},fr=[e.createElementVNode("path",{fill:"currentColor",d:"M3.783 2.826L12 1l8.217 1.826a1 1 0 0 1 .783.976v9.987a6 6 0 0 1-2.672 4.992L12 23l-6.328-4.219A6 6 0 0 1 3 13.79V3.802a1 1 0 0 1 .783-.976zM5 4.604v9.185a4 4 0 0 0 1.781 3.328L12 20.597l5.219-3.48A4 4 0 0 0 19 13.79V4.604L12 3.05L5 4.604zM12 11a2.5 2.5 0 1 1 0-5a2.5 2.5 0 0 1 0 5zm-4.473 5a4.5 4.5 0 0 1 8.946 0H7.527z"},null,-1)];function _r(t,r){return e.openBlock(),e.createElementBlock("svg",gr,fr)}var ur={name:"ri-shield-user-line",render:_r};const yr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},xr=[e.createElementVNode("path",{fill:"currentColor",d:"M7.105 15.21A3.001 3.001 0 1 1 5 15.17V8.83a3.001 3.001 0 1 1 2 0V12c.836-.628 1.874-1 3-1h4a3.001 3.001 0 0 0 2.895-2.21a3.001 3.001 0 1 1 2.032.064A5.001 5.001 0 0 1 14 13h-4a3.001 3.001 0 0 0-2.895 2.21zM6 17a1 1 0 1 0 0 2a1 1 0 0 0 0-2zM6 5a1 1 0 1 0 0 2a1 1 0 0 0 0-2zm12 0a1 1 0 1 0 0 2a1 1 0 0 0 0-2z"},null,-1)];function kr(t,r){return e.openBlock(),e.createElementBlock("svg",yr,xr)}var $r={name:"ri-git-branch-line",render:kr};const vr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Br=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM9 9h6v6H9V9z"},null,-1)];function zr(t,r){return e.openBlock(),e.createElementBlock("svg",vr,Br)}var Vr={name:"ri-stop-circle-line",render:zr};const Cr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Er=[e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM8.523 7.109l8.368 8.368a6.04 6.04 0 0 1-1.414 1.414L7.109 8.523A6.04 6.04 0 0 1 8.523 7.11z"},null,-1)];function Mr(t,r){return e.openBlock(),e.createElementBlock("svg",Cr,Er)}var $={name:"ri-forbid-line",render:Mr},Qo=(()=>`.alert-wrapper[data-v-3bf3a1a9]{display:flex;flex-direction:column;box-sizing:border-box;border-width:1px;padding:12px 16px;border-radius:4px}.alert-wrapper .alert-header[data-v-3bf3a1a9]{display:flex}.alert-wrapper .alert-header .alert-icon[data-v-3bf3a1a9]{align-self:center;margin-right:.75rem;font-size:1.125rem;line-height:1.75rem}.alert-wrapper .alert-header .alert-title[data-v-3bf3a1a9]{align-self:center;margin-right:.75rem;flex:1 1 0%;font-weight:500;font-size:1rem;line-height:1.5rem}.alert-wrapper .alert-header .alert-close[data-v-3bf3a1a9]{align-self:center;cursor:pointer;border-radius:9999px;padding:.125rem}.alert-wrapper .alert-header .alert-close[data-v-3bf3a1a9]:hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.alert-wrapper .alert-description[data-v-3bf3a1a9]{font-size:.875rem;line-height:1.25rem;margin-top:.5rem}.alert-wrapper .alert-actions[data-v-3bf3a1a9]{border-top-width:1px;margin-top:.75rem;padding-top:.5rem}.alert-wrapper.alert-default[data-v-3bf3a1a9]{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.alert-wrapper.alert-default .alert-icon[data-v-3bf3a1a9],.alert-wrapper.alert-default .alert-description[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.alert-wrapper.alert-default .alert-close[data-v-3bf3a1a9],.alert-wrapper.alert-default .alert-title[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.alert-wrapper.alert-success[data-v-3bf3a1a9]{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity));--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity))}.alert-wrapper.alert-success .alert-icon[data-v-3bf3a1a9],.alert-wrapper.alert-success .alert-description[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.alert-wrapper.alert-success .alert-close[data-v-3bf3a1a9],.alert-wrapper.alert-success .alert-title[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity))}.alert-wrapper.alert-info[data-v-3bf3a1a9]{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity));--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity))}.alert-wrapper.alert-info .alert-icon[data-v-3bf3a1a9],.alert-wrapper.alert-info .alert-description[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity))}.alert-wrapper.alert-info .alert-close[data-v-3bf3a1a9],.alert-wrapper.alert-info .alert-title[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity))}.alert-wrapper.alert-warning[data-v-3bf3a1a9]{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity));--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity))}.alert-wrapper.alert-warning .alert-icon[data-v-3bf3a1a9],.alert-wrapper.alert-warning .alert-description[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity))}.alert-wrapper.alert-warning .alert-close[data-v-3bf3a1a9],.alert-wrapper.alert-warning .alert-title[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.alert-wrapper.alert-error[data-v-3bf3a1a9]{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity));--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.alert-wrapper.alert-error .alert-icon[data-v-3bf3a1a9],.alert-wrapper.alert-error .alert-description[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.alert-wrapper.alert-error .alert-close[data-v-3bf3a1a9],.alert-wrapper.alert-error .alert-title[data-v-3bf3a1a9]{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}
3
+ `)(),v=(t,r)=>{const o=t.__vccOpts||t;for(const[n,i]of r)o[n]=i;return o};const Sr={class:"alert-header"},Nr={class:"alert-icon"},Ir={class:"alert-title"},Ar={key:0,class:"alert-description"},Lr={key:1,class:"alert-actions"};var Rr=v(e.defineComponent({__name:"Alert",props:{type:{type:String,default:"default"},title:{type:String},description:{type:String},closable:{type:Boolean,default:!0}},emits:["close"],setup(t,{emit:r}){const o=t,n={success:f,info:b,default:b,warning:g,error:k},i=e.computed(()=>[`alert-${o.type}`]),l=()=>{r("close")};return(c,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(i),"alert-wrapper"])},[e.createElementVNode("div",Sr,[e.createElementVNode("div",Nr,[e.renderSlot(c.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n[t.type])))],!0)]),e.createElementVNode("div",Ir,e.toDisplayString(t.title),1),t.closable?(e.openBlock(),e.createElementBlock("div",{key:0,class:"alert-close",onClick:l},[e.createVNode(e.unref(w))])):e.createCommentVNode("",!0)]),t.description||c.$slots.description?(e.openBlock(),e.createElementBlock("div",Ar,[e.renderSlot(c.$slots,"description",{},()=>[e.createTextVNode(e.toDisplayString(t.description),1)],!0)])):e.createCommentVNode("",!0),c.$slots.actions?(e.openBlock(),e.createElementBlock("div",Lr,[e.renderSlot(c.$slots,"actions",{},void 0,!0)])):e.createCommentVNode("",!0)],2))}}),[["__scopeId","data-v-3bf3a1a9"]]),Zo=(()=>`.btn{border-radius:4px;display:inline-flex;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;text-align:center;font-size:.875rem;line-height:1.25rem;-webkit-text-decoration-line:none;text-decoration-line:none;height:2.25rem;padding-left:1rem;padding-right:1rem;outline-width:0px;border-style:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle}.btn:hover{opacity:.9}.btn:active{opacity:1}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-default{border:1px solid #d9d9d9}.btn-default .btn-icon{color:#0e1731}.btn-primary{background:#4ccba0;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.btn-secondary{background:#0e1731;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.btn-danger{background:#d71d1d;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.btn-block{width:100%}.btn-icon{height:1.25rem;width:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity));margin-right:.75rem}.btn-loading{cursor:not-allowed}.btn-loading:hover{opacity:1}.btn-lg{height:2.75rem;padding-left:1.25rem;padding-right:1.25rem;font-size:1.125rem;line-height:1.75rem}.btn-sm{height:1.75rem;padding-left:.75rem;padding-right:.75rem;font-size:.75rem;line-height:1rem}.btn-sm .btn-icon{height:.75rem;width:.75rem;margin-right:.5rem}.btn-xs{height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem;line-height:1rem}.btn-xs .btn-icon{height:.75rem;width:.75rem;margin-right:.5rem}.btn-circle{width:2.25rem;padding:0;border-radius:9999px}.btn-lg.btn-circle{width:2.75rem}.btn-sm.btn-circle{width:1.75rem}.btn-xs.btn-circle{width:1.5rem}
4
+ `)();const Yr=["disabled"],Hr={key:0,class:"btn-icon"},Dr={key:0,class:"animate-spin",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},jr=[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e.createElementVNode("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"},null,-1)],Tr={class:"btn-content"},_=e.defineComponent({__name:"Button",props:{type:{type:String,default:"default"},size:{type:String,default:"md"},circle:{type:Boolean,default:!1},block:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},route:{type:Object}},emits:["click"],setup(t,{emit:r}){const o=t,n=m.useRouter(),i=e.computed(()=>[`btn-${o.size}`,`btn-${o.type}`,{"btn-circle":o.circle},{"btn-block":o.block},{"btn-loading":o.loading}]);function l(){o.disabled||o.loading||(o.route&&n.push(o.route),r("click"))}return(c,d)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass([e.unref(i),"btn"]),disabled:t.disabled,onClick:l},[c.$slots.icon||t.loading?(e.openBlock(),e.createElementBlock("span",Hr,[t.loading?(e.openBlock(),e.createElementBlock("svg",Dr,jr)):e.renderSlot(c.$slots,"icon",{key:1})])):e.createCommentVNode("",!0),e.createElementVNode("span",Tr,[e.renderSlot(c.$slots,"default")])],10,Yr))}});var rn=(()=>`.card-wrapper{box-sizing:border-box;display:flex;flex-direction:column;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);overflow:hidden;border-radius:4px;border:1px solid #eaecf0}.card-wrapper .card-header{display:flex;justify-content:space-between;border-bottom:1px solid #eaecf0}.card-wrapper .card-header .card-header-title{align-self:center;font-size:1rem;line-height:1.5rem;font-weight:700;padding:12px 16px}.card-wrapper .card-header .card-header-actions{align-self:center}.card-wrapper .card-body{padding:12px 16px}.card-wrapper .card-footer{border-top:1px solid #eaecf0;padding:12px 16px}
5
+ `)();const Kr={class:"card-wrapper"},Fr={key:0,class:"card-header"},Or={class:"card-header-title"},Gr={class:"card-header-actions"},Ur={key:1,class:"card-footer"},Xr=e.defineComponent({__name:"Card",props:{title:{type:String},bodyClass:{type:Object}},setup(t){return(r,o)=>(e.openBlock(),e.createElementBlock("div",Kr,[t.title||r.$slots.header?(e.openBlock(),e.createElementBlock("div",Fr,[e.renderSlot(r.$slots,"header",{},()=>[e.createElementVNode("div",Or,e.toDisplayString(t.title),1),e.createElementVNode("div",Gr,[e.renderSlot(r.$slots,"actions")])])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass([t.bodyClass,"card-body"])},[e.renderSlot(r.$slots,"default")],2),r.$slots.footer?(e.openBlock(),e.createElementBlock("div",Ur,[e.renderSlot(r.$slots,"footer")])):e.createCommentVNode("",!0)]))}});var an=(()=>`.checkbox-wrapper{display:flex;align-items:center;box-sizing:border-box;flex-grow:0}
6
+ `)();const Pr={class:"checkbox-inner"},qr=["id","checked","value"],Jr=["for"],B=e.defineComponent({__name:"CheckBox",props:{checked:{type:Boolean,default:!1},value:{type:[String,Number,Boolean]},label:{type:String},name:{type:String}},emits:["update:checked","change"],setup(t,{emit:r}){const o=t,n=["checkbox",o.name,o.value].filter(l=>!!l).join("-");function i(l){const{checked:c}=l.target;r("update:checked",c),r("change",l)}return(l,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([{"checkbox-wrapper-checked":t.checked},"checkbox-wrapper"])},[e.createElementVNode("div",Pr,[e.createElementVNode("input",{id:e.unref(n),checked:t.checked,value:t.value,type:"checkbox",onChange:i},null,40,qr)]),t.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:e.unref(n),class:"checkbox-label"},e.toDisplayString(t.label),9,Jr)):e.createCommentVNode("",!0)],2))}});var on=(()=>"")();const Qr={class:"checkbox-group-wrapper"},Wr=e.defineComponent({__name:"CheckBoxGroup",props:{modelValue:{type:Object,default:()=>[]},options:{type:Object},valueKey:{type:String,default:"value"},labelKey:{type:String,default:"label"},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){const o=t;function n(i){const{value:l,checked:c}=i.target,d=[...o.modelValue];c?d.push(l):d.splice(d.indexOf(l),1),r("update:modelValue",d),r("change",d)}return(i,l)=>(e.openBlock(),e.createElementBlock("div",Qr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,(c,d)=>(e.openBlock(),e.createBlock(e.unref(B),{key:d,checked:t.modelValue.includes(c[t.valueKey]),label:c[t.labelKey],name:t.name,value:c[t.valueKey],onChange:n},null,8,["checked","label","name","value"]))),128))]))}}),Zr={class:"flex items-center justify-between bg-white p-4"},ea={class:"min-w-0 flex-1 self-center"},ta={class:"flex items-center truncate text-xl font-bold text-gray-800"},ra={class:"self-center"},aa=e.defineComponent({__name:"PageHeader",props:{title:{type:String}},setup(t){return(r,o)=>(e.openBlock(),e.createElementBlock("div",Zr,[e.createElementVNode("div",ea,[e.createElementVNode("h2",ta,[e.renderSlot(r.$slots,"icon"),e.createElementVNode("span",null,e.toDisplayString(t.title),1)])]),e.createElementVNode("div",ra,[e.renderSlot(r.$slots,"actions")])]))}});var nn=(()=>`.input-wrapper{box-sizing:border-box;position:relative;width:100%;display:inline-flex}.input-wrapper input{outline-width:0px;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;resize:none;width:100%;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity));display:block;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #ced4da;border-radius:4px}.input-wrapper input:active{border-color:#4ccba0}.input-wrapper input:focus{border-color:#4ccba0}.input-wrapper input:disabled{opacity:.5;cursor:not-allowed}.input-wrapper input.input-lg{height:2.75rem;padding-left:1rem;padding-right:1rem;font-size:1.125rem;line-height:1.75rem}.input-wrapper input.input-md{height:2.25rem;padding-left:.75rem;padding-right:.75rem;font-size:.875rem;line-height:1.25rem}.input-wrapper input.input-sm{height:1.75rem;padding-left:.75rem;padding-right:.75rem;font-size:.75rem;line-height:1rem}.input-wrapper input.input-xs{height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem;line-height:1rem}.input-wrapper .input-prefix{position:absolute;display:flex;top:50%;transform:translateY(-50%);align-items:center;justify-content:center}.input-wrapper .input-suffix{position:absolute;display:flex;top:50%;right:0;transform:translateY(-50%);align-items:center;justify-content:center}
7
+ `)();const oa={class:"input-wrapper"},na={key:0,class:"input-prefix"},ia=["disabled","placeholder","value"],la={key:1,class:"input-suffix"},ca=e.defineComponent({__name:"Input",props:{modelValue:{type:String},size:{type:String,default:"md"},disabled:{type:Boolean,default:!1},placeholder:{type:String}},emits:["update:modelValue"],setup(t,{emit:r}){const o=t,n=e.computed(()=>[`input-${o.size}`]);function i(l){const{value:c}=l.target;r("update:modelValue",c)}return(l,c)=>(e.openBlock(),e.createElementBlock("div",oa,[l.$slots.prefix?(e.openBlock(),e.createElementBlock("div",na,[e.renderSlot(l.$slots,"prefix")])):e.createCommentVNode("",!0),e.createElementVNode("input",{class:e.normalizeClass(e.unref(n)),disabled:t.disabled,placeholder:t.placeholder,value:t.modelValue,type:"text",onInput:i},null,42,ia),l.$slots.suffix?(e.openBlock(),e.createElementBlock("div",la,[e.renderSlot(l.$slots,"suffix")])):e.createCommentVNode("",!0)]))}}),sa={class:"menu-container w-full p-3"},z=e.defineComponent({__name:"Menu",props:{openIds:{type:Object,required:!1}},setup(t){const r=t;return e.provide("openIds",r.openIds),(o,n)=>(e.openBlock(),e.createElementBlock("div",sa,[e.createElementVNode("ul",null,[e.renderSlot(o.$slots,"default")])]))}});var ln=(()=>`.menu-item{cursor:pointer}.menu-item-title{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;font-size:1rem;line-height:1.5rem;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;padding:.5rem;font-weight:400;border-radius:4px}.menu-item-title:hover,.menu-item-title.active{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));font-weight:500}.menu-item-title.active:after{position:absolute;top:calc(50% - 13px);left:-8px;width:3px;height:26px;content:"";background:#242e41;border-radius:6px}.menu-icon-collapse.open{transform:rotate(90deg)}.submenus-show-enter-active{transition:all .1s ease-out}.submenus-show-leave-active{transition:all .8s cubic-bezier(1,.5,.8,1)}.submenus-show-enter-from,.submenus-show-enter-to{transform:translateY(-10px);opacity:0}
8
+ `)();const da=["onClick"],pa={key:0,class:"menu-icon mr-3 self-center"},ma={class:"menu-title flex-1 self-center"},ha={class:"sub-menu-items transition-all"},u=e.defineComponent({__name:"MenuItem",props:{id:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1}},emits:["select"],setup(t,{emit:r}){const o=t,n=e.useSlots(),i=e.ref(!1),l=e.inject("openIds");l!=null&&l.includes(o.id)&&(i.value=!0);const c=e.computed(()=>n.default&&n.default().length>0);function d(){if(c.value){i.value=!i.value;return}r("select",o.id)}return(s,p)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass([{"has-submenus":e.unref(c)},"menu-item"]),onClick:e.withModifiers(d,["stop"])},[e.createElementVNode("div",{class:e.normalizeClass([{active:t.active},"menu-item-title"])},[s.$slots.icon?(e.openBlock(),e.createElementBlock("span",pa,[e.renderSlot(s.$slots,"icon")])):e.createCommentVNode("",!0),e.createElementVNode("span",ma,e.toDisplayString(t.title),1),s.$slots.default?(e.openBlock(),e.createElementBlock("span",{key:1,class:e.normalizeClass([{open:i.value},"menu-icon-collapse self-center transition-all"])},[e.createVNode(e.unref(x))],2)):e.createCommentVNode("",!0)],2),e.createVNode(e.Transition,{name:"submenus-show"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("ul",ha,[e.renderSlot(s.$slots,"default")],512),[[e.vShow,s.$slots.default&&i.value]])]),_:3})],10,da))}});var cn=(()=>`.menu-label{padding-top:10px;padding-bottom:10px;color:#847e7e;font-size:14px;font-weight:400}
9
+ `)();const wa={},ba={class:"menu-label flex flex-col"};function ga(t,r){return e.openBlock(),e.createElementBlock("li",ba,[e.renderSlot(t.$slots,"default")])}var V=v(wa,[["render",ga]]);const fa=e.defineComponent({name:"VRoutesMenu",props:{menus:{type:Object}},emits:["select"],setup(t,{emit:r}){const o=m.useRoute(),{push:n}=m.useRouter(),i=e.computed(()=>o.matched.map(s=>s.path));async function l(s){r("select",s),await n(s)}function c(s){if(!!s)return e.createVNode(s,{height:"20px",width:"20px"},null)}function d(s){return s==null?void 0:s.map(p=>{var h;return e.createVNode(e.Fragment,null,[(h=p.children)!=null&&h.length?e.createVNode(u,{key:p.path,id:p.path,title:p.name},{default:()=>[d(p.children)],icon:()=>c(p.icon)}):e.createVNode(u,{key:p.path,id:p.path,title:p.name,onSelect:l,active:i.value.includes(p.path)},{icon:()=>c(p.icon)})])})}return()=>e.createVNode(z,{openIds:i.value},{default:()=>{var s;return[(s=t.menus)==null?void 0:s.map(p=>{var h;return e.createVNode(e.Fragment,null,[p.name&&e.createVNode(V,null,{default:()=>[p.name]}),((h=p.items)==null?void 0:h.length)&&d(p.items)])})]}})}});var sn=(()=>`.modal-wrapper{position:fixed;top:0px;left:0px;height:100%;width:100%;display:flex;flex-direction:row;align-items:center;justify-content:center;z-index:999}.modal-wrapper .modal-layer{flex:none;position:absolute;top:0px;left:0px;height:100%;width:100%;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:rgb(107 114 128 / var(--tw-bg-opacity));--tw-bg-opacity: .75}.modal-wrapper .modal-content{display:flex;flex-direction:column;position:relative;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));align-items:stretch;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);width:calc(100vw - 20px);max-height:calc(100vh - 20px);border-radius:4px}.modal-wrapper .modal-content .modal-header{display:flex;justify-content:space-between;border-bottom-width:1px}.modal-wrapper .modal-content .modal-header .modal-header-title{align-self:center;font-size:1rem;line-height:1.5rem;font-weight:700;padding:12px 16px}.modal-wrapper .modal-content .modal-header .modal-header-actions{align-self:center;height:100%}.modal-wrapper .modal-content .modal-header .modal-header-actions .modal-header-action{cursor:pointer;padding:12px 16px}.modal-wrapper .modal-content .modal-header .modal-header-actions .modal-header-action:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.modal-wrapper .modal-content .modal-body{overflow-y:auto;overflow-x:hidden;flex:1 1 0%;word-wrap:break-word;padding:12px 16px}.modal-wrapper .modal-content .modal-footer{border-top-width:1px;padding:12px 16px}.modal-wrapper.modal-wrapper-fullscreen .modal-content{width:100vw!important;max-width:100vw!important;height:100vh!important;max-height:100vh!important;border-radius:0}
10
+ `)();const _a={key:0,class:"modal-header"},ua={class:"modal-header-title"},ya={class:"modal-header-actions flex flex-row"},xa={key:1,class:"modal-footer"},C=e.defineComponent({__name:"Modal",props:{visible:{type:Boolean,default:!1},title:{type:String},width:{type:Number,default:500},fullscreen:{type:Boolean,default:!1},bodyClass:{type:Object}},emits:["update:visible","close"],setup(t,{emit:r}){const o=t,n=e.ref(!1),i=e.computed(()=>({"modal-wrapper-fullscreen":o.fullscreen})),l=e.computed(()=>({maxWidth:o.width+"px"}));function c(){r("update:visible",!1),r("close")}return(d,s)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body",disabled:!0},[e.withDirectives(e.createElementVNode("div",{class:e.normalizeClass([e.unref(i),"modal-wrapper"]),"aria-modal":"true",role:"dialog",tabindex:"0",onKeyup:s[4]||(s[4]=e.withKeys(p=>c(),["esc"]))},[e.createVNode(e.Transition,{"enter-active-class":"ease-out duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0",onBeforeEnter:s[1]||(s[1]=p=>n.value=!0),onAfterLeave:s[2]||(s[2]=p=>n.value=!1)},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:"modal-layer",onClick:s[0]||(s[0]=p=>c())},null,512),[[e.vShow,t.visible]])]),_:1}),e.createVNode(e.Transition,{"enter-active-class":"ease-out duration-200","enter-from-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95","enter-to-class":"opacity-100 translate-y-0 sm:scale-100","leave-active-class":"ease-in duration-100","leave-from-class":"opacity-100 translate-y-0 sm:scale-100","leave-to-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{style:e.normalizeStyle(e.unref(l)),class:"modal-content transform transition-all"},[d.$slots.header||t.title?(e.openBlock(),e.createElementBlock("div",_a,[e.renderSlot(d.$slots,"header",{},()=>[e.createElementVNode("div",ua,e.toDisplayString(t.title),1),e.createElementVNode("div",ya,[e.renderSlot(d.$slots,"actions"),e.createElementVNode("div",{class:"modal-header-action",onClick:s[3]||(s[3]=p=>c())},[e.createVNode(e.unref(w))])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass([t.bodyClass,"modal-body"])},[e.renderSlot(d.$slots,"default")],2),d.$slots.footer?(e.openBlock(),e.createElementBlock("div",xa,[e.renderSlot(d.$slots,"footer")])):e.createCommentVNode("",!0)],4),[[e.vShow,t.visible]])]),_:3})],34),[[e.vShow,n.value]])]))}});var dn=(()=>`.radio-wrapper{display:flex;align-items:center;box-sizing:border-box;flex-grow:0}.radio-wrapper .radio-inner{align-self:center;position:relative}.radio-wrapper .radio-label{display:flex;align-self:center;align-items:flex-start;margin-left:.75rem}
11
+ `)();const ka={class:"radio-inner"},$a=["id","checked","name","value"],va=["for"],E=e.defineComponent({__name:"Radio",props:{modelValue:{type:[String,Number,Boolean]},value:{type:[String,Number,Boolean]},label:{type:String},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){const o=t,n=["radio",o.name,o.value].filter(c=>!!c).join("-"),i=e.computed(()=>o.modelValue===o.value);function l(c){const{value:d}=c.target;r("update:modelValue",d),r("change",d)}return(c,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([{"radio-wrapper-checked":e.unref(i)},"radio-wrapper"])},[e.createElementVNode("div",ka,[e.createElementVNode("input",{id:e.unref(n),checked:e.unref(i),name:t.name,value:t.value,type:"radio",onChange:l},null,40,$a)]),t.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:e.unref(n),class:"radio-label"},e.toDisplayString(t.label),9,va)):e.createCommentVNode("",!0)],2))}}),Ba={class:"radio-group-wrapper"},za=e.defineComponent({__name:"RadioGroup",props:{modelValue:{type:[String,Number,Boolean]},options:{type:Object},valueKey:{type:String,default:"value"},labelKey:{type:String,default:"label"},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){function o(n){r("update:modelValue",n),r("change",n)}return(n,i)=>(e.openBlock(),e.createElementBlock("div",Ba,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,(l,c)=>(e.openBlock(),e.createBlock(e.unref(E),{key:c,label:l[t.labelKey]+"","model-value":t.modelValue,name:t.name,value:l[t.valueKey],onChange:o},null,8,["label","model-value","name","value"]))),128))]))}});var pn=(()=>`.select-wrapper{box-sizing:border-box;position:relative;width:100%;display:inline-flex}.select-wrapper select{outline-width:0px;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity));display:block;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #ced4da;border-radius:4px}.select-wrapper select:active{border-color:#4ccba0}.select-wrapper select:focus{border-color:#4ccba0}.select-wrapper select:disabled{opacity:.5;cursor:not-allowed}.select-wrapper select.select-lg{height:2.75rem;padding-left:1rem;padding-right:1rem;font-size:1.125rem;line-height:1.75rem}.select-wrapper select.select-md{height:2.25rem;padding-left:.75rem;padding-right:.75rem;font-size:.875rem;line-height:1.25rem}.select-wrapper select.select-sm{height:1.75rem;padding-left:.75rem;padding-right:.75rem;font-size:.75rem;line-height:1rem}.select-wrapper select.select-xs{height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem;line-height:1rem}
12
+ `)();const Va={class:"select-wrapper"},Ca=["disabled","value"],Ea={key:"placeholder",disabled:"",hidden:"",value:""},Ma=e.defineComponent({__name:"Select",props:{modelValue:{type:String},size:{type:String,default:"md"},disabled:{type:Boolean,default:!1},placeholder:{type:String}},emits:["update:modelValue"],setup(t,{emit:r}){const o=t,n=e.computed(()=>[`select-${o.size}`]);function i(l){const{value:c}=l.target;r("update:modelValue",c)}return(l,c)=>(e.openBlock(),e.createElementBlock("div",Va,[e.createElementVNode("select",{class:e.normalizeClass(e.unref(n)),disabled:t.disabled,value:t.modelValue,onChange:i},[t.placeholder?(e.openBlock(),e.createElementBlock("option",Ea,e.toDisplayString(t.placeholder),1)):e.createCommentVNode("",!0),e.renderSlot(l.$slots,"default")],42,Ca)]))}}),Sa=["value"],Na=e.defineComponent({__name:"Option",props:{value:{type:[String,Number,Boolean]}},setup(t){return(r,o)=>(e.openBlock(),e.createElementBlock("option",{value:t.value},[e.renderSlot(r.$slots,"default")],8,Sa))}}),Ia={xs:10,sm:12,md:16,lg:20};var mn=(()=>`.space-wrapper{display:inline-flex;box-sizing:border-box}.space-wrapper.space-direction-row{flex-direction:row}.space-wrapper.space-direction-column{flex-direction:column}.space-wrapper.space-align-center{align-items:center}.space-wrapper.space-align-start{align-items:flex-start}.space-wrapper.space-align-end{align-items:flex-end}.space-wrapper.space-align-stretch{align-items:stretch}
13
+ `)();const M=e.defineComponent({__name:"Space",props:{spacing:{type:String,default:"xs"},direction:{type:String,default:"row"},align:{type:String,default:"center"}},setup(t){const r=t,o=e.computed(()=>{const{direction:n,align:i}=r;return[`space-direction-${n}`,`space-align-${i}`]});return(n,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(o),"space-wrapper"]),style:e.normalizeStyle(`gap: ${e.unref(Ia)[t.spacing]}px`)},[e.renderSlot(n.$slots,"default")],6))}});var hn=(()=>`.tabs-wrapper{display:flex}.tabs-wrapper.tabs-direction-row{flex-direction:column}.tabs-wrapper.tabs-direction-row .tabs-items-wrapper{margin-top:.5rem}.tabs-wrapper.tabs-direction-column .tabs-items-wrapper{margin-left:.5rem}
14
+ `)();const Aa={class:"tabs-bar-wrapper"},La={class:"tabs-items-wrapper"},Ra=e.defineComponent({__name:"Tabs",props:{activeId:{type:[Number,String]},type:{type:String,default:"default"},direction:{type:String,default:"row"},idKey:{type:String,default:"id"},labelKey:{type:String,default:"label"}},emits:["update:activeId","change"],setup(t,{emit:r}){const o=t;e.provide("activeId",e.computed(()=>o.activeId));const n=e.useSlots(),i=e.computed(()=>{var d;return(d=n.default)==null?void 0:d.call(n).map(({props:s})=>({id:s==null?void 0:s[o.idKey],label:s==null?void 0:s[o.labelKey]}))}),l=e.computed(()=>[`tabs-direction-${o.direction}`]),c=d=>{r("update:activeId",d),r("change",d)};return(d,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(l),"tabs-wrapper"])},[e.createElementVNode("div",Aa,[e.createVNode(e.unref(S),{activeId:t.activeId,direction:t.direction,items:e.unref(i),type:t.type,onChange:c},null,8,["activeId","direction","items","type"])]),e.createElementVNode("div",La,[e.renderSlot(d.$slots,"default")])],2))}}),Ya={key:0,class:"tabs-item-wrapper"},Ha=e.defineComponent({__name:"TabItem",props:{id:{type:String},label:{type:String}},setup(t){const r=t,o=e.inject("activeId"),n=e.computed(()=>(o==null?void 0:o.value)===r.id);return(i,l)=>e.unref(n)?(e.openBlock(),e.createElementBlock("div",Ya,[e.renderSlot(i.$slots,"default")])):e.createCommentVNode("",!0)}});var wn=(()=>`.tabbar-wrapper .tabbar-items{display:flex;align-items:center;flex-direction:row}.tabbar-wrapper .tabbar-item{display:flex;cursor:pointer;align-self:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;font-size:1rem;line-height:1.5rem;justify-content:center;gap:.5rem}.tabbar-wrapper .tabbar-item .tabbar-item-label,.tabbar-wrapper .tabbar-item .tabbar-item-icon{align-self:center}.tabbar-wrapper.tabbar-default{border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(243 244 246 / var(--tw-border-opacity))}.tabbar-wrapper.tabbar-default .tabbar-items{margin-bottom:-2px;justify-content:flex-start}.tabbar-wrapper.tabbar-default .tabbar-item{height:2.5rem;padding:.25rem 1.25rem;--tw-border-opacity: 1;border-bottom-color:rgb(243 244 246 / var(--tw-border-opacity));border-bottom-width:2px}.tabbar-wrapper.tabbar-default .tabbar-item.tabbar-item-active{color:#0e1731;border-bottom-color:#0e1731}.tabbar-wrapper.tabbar-pills .tabbar-items{gap:.25rem;justify-content:flex-start}.tabbar-wrapper.tabbar-pills .tabbar-item{height:2.5rem;padding:.25rem 2.25rem;opacity:.7;border-radius:4px}.tabbar-wrapper.tabbar-pills .tabbar-item.tabbar-item-active{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));opacity:1}.tabbar-wrapper.tabbar-pills .tabbar-item:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.tabbar-wrapper.tabbar-outline{padding:.25rem;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));border-radius:4px}.tabbar-wrapper.tabbar-outline .tabbar-items{gap:.25rem;justify-content:flex-start}.tabbar-wrapper.tabbar-outline .tabbar-item{height:2.5rem;padding:.25rem 2.25rem;opacity:.7;border-radius:4px}.tabbar-wrapper.tabbar-outline .tabbar-item.tabbar-item-active{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));opacity:1;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.tabbar-wrapper.tabbar-outline .tabbar-item:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.tabbar-wrapper.tabbar-direction-row .tabbar-items{flex-direction:row}.tabbar-wrapper.tabbar-direction-column .tabbar-items{flex-direction:column}.tabbar-wrapper.tabbar-direction-column.tabbar-default{border-bottom-width:0;border-bottom-width:0px;border-right-width:2px;--tw-border-opacity: 1;border-right-color:rgb(243 244 246 / var(--tw-border-opacity))}.tabbar-wrapper.tabbar-direction-column.tabbar-default .tabbar-items{margin-bottom:0;margin-right:-2px}.tabbar-wrapper.tabbar-direction-column.tabbar-default .tabbar-item{border-bottom-width:0;border-right-width:2px}.tabbar-wrapper.tabbar-direction-column.tabbar-default .tabbar-item.tabbar-item-active{border-right-color:#0e1731}
15
+ `)();const Da={class:"tabbar-items"},ja=["onClick"],Ta={key:0,class:"tabbar-item-icon"},Ka={key:1,class:"tabbar-item-label"},S=e.defineComponent({__name:"Tabbar",props:{activeId:{type:[Number,String]},items:{type:Object},type:{type:String,default:"default"},direction:{type:String,default:"row"},idKey:{type:String,default:"id"},labelKey:{type:String,default:"label"}},emits:["update:activeId","change"],setup(t,{emit:r}){const o=t,n=e.computed(()=>[`tabbar-${o.type}`,`tabbar-direction-${o.direction}`]),i=l=>{r("update:activeId",l),r("change",l)};return(l,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(n),"tabbar-wrapper"])},[e.createElementVNode("div",Da,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(d,s)=>(e.openBlock(),e.createElementBlock("div",{key:s,class:e.normalizeClass([{"tabbar-item-active":d[t.idKey]===t.activeId},"tabbar-item"]),onClick:p=>i(d[t.idKey])},[d.icon?(e.openBlock(),e.createElementBlock("div",Ta,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.icon)))])):e.createCommentVNode("",!0),d[t.labelKey]?(e.openBlock(),e.createElementBlock("div",Ka,e.toDisplayString(d[t.labelKey]),1)):e.createCommentVNode("",!0)],10,ja))),128))])],2))}});var bn=(()=>`.tag-wrapper{border-radius:4px;display:inline-flex;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;cursor:pointer;text-align:center;align-items:center;justify-content:center;width:auto;vertical-align:middle;height:1.25rem;font-size:.75rem;line-height:1rem}.tag-wrapper.tag-default{border:1px solid #d9d9d9}.tag-wrapper.tag-primary{background:#4ccba0;border:1px solid #4ccba0;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tag-wrapper.tag-secondary{background:#0e1731;border:1px solid #0e1731;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tag-wrapper.tag-danger{background:#d71d1d;border:1px solid #d71d1d;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tag-wrapper.tag-rounded{border-radius:9999px}.tag-wrapper .tag-content{padding-left:.25rem;padding-right:.25rem}.tag-wrapper .tag-left-icon{padding-left:.25rem}.tag-wrapper .tag-right-icon{padding-right:.25rem}
16
+ `)();const Fa={key:0,class:"tag-left-icon"},Oa={class:"tag-content"},Ga={key:1,class:"tag-right-icon"},Ua=e.defineComponent({__name:"Tag",props:{theme:{type:String,default:"default"},rounded:{type:Boolean,default:!1}},setup(t){const r=t,o=e.computed(()=>[`tag-${r.theme}`,{"tag-rounded":r.rounded}]);return(n,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(o),"tag-wrapper"])},[n.$slots.leftIcon?(e.openBlock(),e.createElementBlock("div",Fa,[e.renderSlot(n.$slots,"leftIcon")])):e.createCommentVNode("",!0),e.createElementVNode("span",Oa,[e.renderSlot(n.$slots,"default")]),n.$slots.rightIcon?(e.openBlock(),e.createElementBlock("div",Ga,[e.renderSlot(n.$slots,"rightIcon")])):e.createCommentVNode("",!0)],2))}});var gn=(()=>`.textarea-wrapper{box-sizing:border-box;position:relative;width:100%;display:inline-flex}.textarea-wrapper textarea{outline-width:0px;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity));display:block;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.75rem;font-size:.875rem;line-height:1.25rem;border:1px solid #ced4da;border-radius:4px}.textarea-wrapper textarea:active{border-color:#4ccba0}.textarea-wrapper textarea:focus{border-color:#4ccba0}.textarea-wrapper textarea:disabled{opacity:.5;cursor:not-allowed}
17
+ `)();const Xa={class:"textarea-wrapper"},Pa=["disabled","placeholder","rows","value"],qa=e.defineComponent({__name:"Textarea",props:{modelValue:{type:String},disabled:{type:Boolean,default:!1},placeholder:{type:String},rows:{type:Number,default:3}},emits:["update:modelValue"],setup(t,{emit:r}){function o(n){const{value:i}=n.target;r("update:modelValue",i)}return(n,i)=>(e.openBlock(),e.createElementBlock("div",Xa,[e.createElementVNode("textarea",{disabled:t.disabled,placeholder:t.placeholder,rows:t.rows,value:t.modelValue,onInput:o},`
18
+ `,40,Pa)]))}});var fn=(()=>`.switch-wrapper{display:inline-flex;box-sizing:border-box}.switch-wrapper .switch-inner{position:relative;display:inline-flex;flex-shrink:0;height:1.5rem;width:2.75rem;border-width:2px;border-color:transparent;border-radius:9999px;cursor:pointer;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.switch-wrapper .switch-inner .switch-indicator{pointer-events:none;display:inline-block;height:1.25rem;width:1.25rem;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}
19
+ `)();const Ja={class:"switch-wrapper"},Qa=e.defineComponent({__name:"Switch",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(t,{emit:r}){const o=t,n=()=>{r("update:modelValue",!o.modelValue),r("change",!o.modelValue)};return(i,l)=>(e.openBlock(),e.createElementBlock("div",Ja,[e.createElementVNode("button",{class:e.normalizeClass([{"bg-gray-200":!t.modelValue,"!bg-themeable-primary-600":t.modelValue},"switch-inner"]),"aria-checked":"false",role:"switch",type:"button",onClick:n},[e.createElementVNode("span",{class:e.normalizeClass([{"translate-x-0":!t.modelValue,"translate-x-5":t.modelValue},"switch-indicator"]),"aria-hidden":"true"},[e.renderSlot(i.$slots,"icon")],2)],2)]))}}),Wa={class:"flex justify-between items-start py-2 mb-2"},Za={class:"flex items-center gap-4"},eo={class:"flex-1 flex flex-col items-stretch gap-2"},to={class:"text-base text-gray-900 font-bold"},ro={class:"text-sm text-gray-700"},N=e.defineComponent({__name:"Dialog",props:{type:{type:String,default:"info"},title:{type:String,default:"\u63D0\u793A"},description:{type:String,default:""},confirmText:{type:String,default:"\u786E\u5B9A"},cancelText:{type:String,default:"\u53D6\u6D88"},visible:{type:Boolean,default:!1},onConfirm:{type:Function},onCancel:{type:Function}},emits:["update:visible","close"],setup(t,{emit:r}){const o=t,n={success:{icon:f,color:"green"},info:{icon:b,color:"blue"},warning:{icon:g,color:"orange"},error:{icon:$,color:"red"}},i=e.computed(()=>n[o.type]),l=e.ref(!1),c=()=>{o.onCancel&&o.onCancel(),s()},d=async()=>{o.onConfirm&&(l.value=!0,await o.onConfirm()),s()},s=()=>{l.value=!1,r("update:visible",!1),r("close")};return(p,h)=>(e.openBlock(),e.createBlock(e.unref(C),{visible:t.visible,width:450,onClose:h[0]||(h[0]=_n=>c())},{footer:e.withCtx(()=>[e.createVNode(e.unref(M),null,{default:e.withCtx(()=>[e.createVNode(e.unref(_),{loading:l.value,type:"secondary",onClick:d},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.confirmText),1)]),_:1},8,["loading"]),e.createVNode(e.unref(_),{onClick:c},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.cancelText),1)]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Wa,[e.createElementVNode("div",null,[e.createElementVNode("div",{class:e.normalizeClass([`ring-${e.unref(i).color}-100`,"inline-flex rounded-full bg-teal-50 p-1.5 ring-4"])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(i).icon),{class:e.normalizeClass([`text-${e.unref(i).color}-500`,"w-5 h-5"])},null,8,["class"]))],2)]),e.createElementVNode("div",null,[e.createVNode(e.unref(w),{class:"cursor-pointer",onClick:c})])]),e.createElementVNode("div",Za,[e.createElementVNode("div",eo,[e.createElementVNode("div",to,e.toDisplayString(t.title),1),e.createElementVNode("div",ro,e.toDisplayString(t.description),1)])])]),_:1},8,["visible"]))}}),I="DIALOG_PROVIDER_PROVIDE_KEY",ao=e.defineComponent({__name:"DialogProvider",setup(t){const r=e.ref({visible:!1,title:""});return e.provide(I,r),(o,n)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(o.$slots,"default"),e.createVNode(e.unref(N),{visible:r.value.visible,"onUpdate:visible":n[0]||(n[0]=i=>r.value.visible=i),"cancel-text":r.value.cancelText,"confirm-text":r.value.confirmText,description:r.value.description,onCancel:r.value.onCancel,onConfirm:r.value.onConfirm,title:r.value.title,type:r.value.type},null,8,["visible","cancel-text","confirm-text","description","onCancel","onConfirm","title","type"])],64))}});function oo(){const t=e.inject(I);if(!t)throw new Error("DialogProvider is not mounted");const r=o=>n=>{t.value=y(y({},t.value),n),t.value.type=o,t.value.visible=!0};return{success:r("success"),info:r("info"),warning:r("warning"),error:r("error")}}return a.IconAddCircle=xt,a.IconArrowDown=J,a.IconArrowDownLine=oe,a.IconArrowLeft=F,a.IconArrowRight=x,a.IconArrowUpLine=ee,a.IconBookRead=ce,a.IconCheckboxCircle=f,a.IconCheckboxFill=Yt,a.IconClose=w,a.IconCloseCircle=k,a.IconComputer=Gt,a.IconDashboard=D,a.IconDeleteBin=ft,a.IconErrorWarning=g,a.IconExchange=lr,a.IconEye=Oe,a.IconFolder=Pe,a.IconForbidLine=$,a.IconGitBranch=$r,a.IconGitHub=pr,a.IconGrid=It,a.IconInformation=b,a.IconList=Et,a.IconListSettings=ve,a.IconMagic=Ce,a.IconMessage=ge,a.IconMore=We,a.IconPages=me,a.IconPalette=ye,a.IconPhone=qt,a.IconPlug=je,a.IconSave=Bt,a.IconSearch=Tt,a.IconSettings=Re,a.IconShieldUser=ur,a.IconStopCircle=Vr,a.IconTablet=Zt,a.IconUpload=br,a.IconUserFollow=ar,a.IconUserSettings=Ne,a.VAlert=Rr,a.VButton=_,a.VCard=Xr,a.VCheckbox=B,a.VCheckboxGroup=Wr,a.VDialog=N,a.VDialogProvider=ao,a.VInput=ca,a.VMenu=z,a.VMenuItem=u,a.VMenuLabel=V,a.VModal=C,a.VOption=Na,a.VPageHeader=aa,a.VRadio=E,a.VRadioGroup=za,a.VRoutesMenu=fa,a.VSelect=Ma,a.VSpace=M,a.VSwitch=Qa,a.VTabItem=Ha,a.VTabbar=S,a.VTabs=Ra,a.VTag=Ua,a.VTextarea=qa,a.useDialog=oo,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),a}({},Vue,VueRouter);
20
+ //# sourceMappingURL=halo-components.iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-components.iife.js","sources":["../plugin-vue:export-helper","../src/components/alert/Alert.vue","../src/components/button/Button.vue","../src/components/checkbox/CheckBox.vue","../src/components/checkbox/CheckBoxGroup.vue","../src/components/input/Input.vue","../src/components/menu/Menu.vue","../src/components/menu/MenuItem.vue","../src/components/menu/RoutesMenu.tsx","../src/components/modal/Modal.vue","../src/components/radio/Radio.vue","../src/components/radio/RadioGroup.vue","../src/components/select/Select.vue","../src/components/space/interface.ts","../src/components/space/Space.vue","../src/components/tabs/Tabs.vue","../src/components/tabs/TabItem.vue","../src/components/tabs/Tabbar.vue","../src/components/tag/Tag.vue","../src/components/textarea/Textarea.vue","../src/components/switch/Switch.vue","../src/components/dialog/Dialog.vue","../src/components/dialog/interface.ts","../src/components/dialog/DialogProvider.vue","../src/components/dialog/use-dialog.ts"],"sourcesContent":["\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<script lang=\"ts\" setup>\nimport type { Component, PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Type } from \"./interface\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconCloseCircle,\n IconErrorWarning,\n IconInformation,\n} from \"../../icons/icons\";\n\nconst TypeIcons: Record<Type, Component> = {\n success: IconCheckboxCircle,\n info: IconInformation,\n default: IconInformation,\n warning: IconErrorWarning,\n error: IconCloseCircle,\n};\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n title: {\n type: String,\n },\n description: {\n type: String,\n },\n closable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\"close\"]);\n\nconst classes = computed(() => {\n return [`alert-${props.type}`];\n});\n\nconst handleClose = () => {\n emit(\"close\");\n};\n</script>\n\n<template>\n <div :class=\"classes\" class=\"alert-wrapper\">\n <div class=\"alert-header\">\n <div class=\"alert-icon\">\n <slot name=\"icon\">\n <component :is=\"TypeIcons[type]\" />\n </slot>\n </div>\n <div class=\"alert-title\">\n {{ title }}\n </div>\n <div v-if=\"closable\" class=\"alert-close\" @click=\"handleClose\">\n <IconClose />\n </div>\n </div>\n <div v-if=\"description || $slots.description\" class=\"alert-description\">\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"alert-actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.alert-wrapper {\n @apply flex;\n @apply flex-col;\n @apply box-border;\n @apply border;\n padding: 12px 16px;\n border-radius: 4px;\n\n .alert-header {\n @apply flex;\n\n .alert-icon {\n @apply self-center;\n @apply mr-3;\n @apply text-lg;\n }\n\n .alert-title {\n @apply self-center;\n @apply mr-3;\n @apply flex-1;\n @apply font-medium;\n @apply text-base;\n }\n\n .alert-close {\n @apply self-center;\n @apply cursor-pointer;\n @apply rounded-full;\n @apply p-0.5;\n\n &:hover {\n @apply transition-all;\n @apply bg-gray-300;\n @apply text-white;\n }\n }\n }\n\n .alert-description {\n @apply text-sm;\n @apply mt-2;\n }\n\n .alert-actions {\n @apply border-t;\n @apply mt-3 pt-2;\n }\n\n &.alert-default {\n @apply bg-gray-50;\n @apply border-gray-300;\n\n .alert-icon,\n .alert-description {\n @apply text-gray-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-gray-700;\n }\n }\n\n &.alert-success {\n @apply bg-green-50;\n @apply border-green-300;\n\n .alert-icon,\n .alert-description {\n @apply text-green-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-green-700;\n }\n }\n\n &.alert-info {\n @apply bg-sky-50;\n @apply border-sky-300;\n\n .alert-icon,\n .alert-description {\n @apply text-sky-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-sky-700;\n }\n }\n\n &.alert-warning {\n @apply bg-orange-50;\n @apply border-orange-300;\n\n .alert-icon,\n .alert-description {\n @apply text-orange-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-orange-700;\n }\n }\n\n &.alert-error {\n @apply bg-red-50;\n @apply border-red-300;\n\n .alert-icon,\n .alert-description {\n @apply text-red-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-red-700;\n }\n }\n}\n</style>\n","<template>\n <button\n :class=\"classes\"\n :disabled=\"disabled\"\n class=\"btn\"\n @click=\"handleClick\"\n >\n <span v-if=\"$slots.icon || loading\" class=\"btn-icon\">\n <svg\n v-if=\"loading\"\n class=\"animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n <slot v-else name=\"icon\" />\n </span>\n <span class=\"btn-content\">\n <slot />\n </span>\n </button>\n</template>\n<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { RouteLocationRaw } from \"vue-router\";\nimport { useRouter } from \"vue-router\";\nimport type { Size, Type } from \"./interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n circle: {\n type: Boolean,\n default: false,\n },\n block: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n route: {\n type: Object as PropType<RouteLocationRaw>,\n },\n});\n\nconst router = useRouter();\nconst emit = defineEmits([\"click\"]);\n\nconst classes = computed(() => {\n return [\n `btn-${props.size}`,\n `btn-${props.type}`,\n { \"btn-circle\": props.circle },\n { \"btn-block\": props.block },\n { \"btn-loading\": props.loading },\n ];\n});\n\nfunction handleClick() {\n if (props.disabled || props.loading) return;\n if (props.route) {\n router.push(props.route);\n }\n emit(\"click\");\n}\n</script>\n<style lang=\"scss\">\n.btn {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply cursor-pointer;\n @apply select-none;\n @apply flex-wrap;\n @apply items-center;\n @apply justify-center;\n @apply transition-all;\n @apply text-center;\n @apply text-sm;\n @apply no-underline;\n @apply h-9;\n @apply px-4;\n @apply outline-0;\n @apply border-none;\n @apply appearance-none;\n @apply align-middle;\n\n &:hover {\n @apply opacity-90;\n }\n\n &:active {\n @apply opacity-100;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n}\n\n.btn-default {\n border: 1px solid #d9d9d9;\n\n .btn-icon {\n color: #0e1731;\n }\n}\n\n.btn-primary {\n background: #4ccba0;\n @apply text-white;\n}\n\n.btn-secondary {\n background: #0e1731;\n @apply text-white;\n}\n\n.btn-danger {\n background: #d71d1d;\n @apply text-white;\n}\n\n.btn-block {\n @apply w-full;\n}\n\n.btn-icon {\n @apply h-5 w-5;\n @apply text-white;\n @apply mr-3;\n}\n\n.btn-loading {\n @apply cursor-not-allowed;\n &:hover {\n @apply opacity-100;\n }\n}\n\n.btn-lg {\n @apply h-11;\n @apply px-5;\n @apply text-lg;\n}\n\n.btn-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-circle {\n @apply w-9;\n @apply p-0;\n @apply rounded-full;\n}\n\n.btn-lg.btn-circle {\n @apply w-11;\n}\n\n.btn-sm.btn-circle {\n @apply w-7;\n}\n\n.btn-xs.btn-circle {\n @apply w-6;\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n checked: {\n type: Boolean,\n default: false,\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst id = [\"checkbox\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst emit = defineEmits([\"update:checked\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { checked } = e.target as HTMLInputElement;\n emit(\"update:checked\", checked);\n emit(\"change\", e);\n}\n</script>\n<template>\n <div\n :class=\"{ 'checkbox-wrapper-checked': checked }\"\n class=\"checkbox-wrapper\"\n >\n <div class=\"checkbox-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :value=\"value\"\n type=\"checkbox\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"checkbox-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VCheckbox } from \"./index\";\nimport type { PropType } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: Object as PropType<Array<string>>,\n default: () => {\n return [];\n },\n },\n options: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { value, checked } = e.target as HTMLInputElement;\n const checkedValues = [...props.modelValue];\n\n if (checked) {\n checkedValues.push(value);\n } else {\n checkedValues.splice(checkedValues.indexOf(value), 1);\n }\n emit(\"update:modelValue\", checkedValues);\n emit(\"change\", checkedValues);\n}\n</script>\n<template>\n <div class=\"checkbox-group-wrapper\">\n <VCheckbox\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :checked=\"modelValue.includes(option[valueKey])\"\n :label=\"option[labelKey]\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-group-wrapper {\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`input-${props.size}`];\n});\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"input-wrapper\">\n <div v-if=\"$slots.prefix\" class=\"input-prefix\">\n <slot name=\"prefix\" />\n </div>\n <input\n :class=\"classes\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n type=\"text\"\n @input=\"handleInput\"\n />\n <div v-if=\"$slots.suffix\" class=\"input-suffix\">\n <slot name=\"suffix\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.input-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n input {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply resize-none;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.input-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.input-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.input-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.input-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n\n .input-prefix {\n position: absolute;\n display: flex;\n top: 50%;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n\n .input-suffix {\n position: absolute;\n display: flex;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { provide } from \"vue\";\n\nconst props = defineProps({\n openIds: {\n type: Object as PropType<string[]>,\n required: false,\n },\n});\n\nprovide<string[] | undefined>(\"openIds\", props.openIds);\n</script>\n\n<template>\n <div class=\"menu-container w-full p-3\">\n <ul>\n <slot />\n </ul>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { IconArrowRight } from \"../../icons/icons\";\nimport { computed, inject, ref, useSlots } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n default: \"\",\n },\n title: {\n type: String,\n default: \"\",\n },\n active: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"select\"]);\n\nconst slots = useSlots();\n\nconst open = ref(false);\n\nconst openIds = inject<string[] | undefined>(\"openIds\");\n\nif (openIds?.includes(props.id)) {\n open.value = true;\n}\n\nconst hasSubmenus = computed(() => {\n return slots.default && slots.default().length > 0;\n});\n\nfunction handleClick() {\n if (hasSubmenus.value) {\n open.value = !open.value;\n return;\n }\n emit(\"select\", props.id);\n}\n</script>\n\n<template>\n <li\n :class=\"{ 'has-submenus': hasSubmenus }\"\n class=\"menu-item\"\n @click.stop=\"handleClick\"\n >\n <div :class=\"{ active }\" class=\"menu-item-title\">\n <span v-if=\"$slots.icon\" class=\"menu-icon mr-3 self-center\">\n <slot name=\"icon\" />\n </span>\n <span class=\"menu-title flex-1 self-center\">\n {{ title }}\n </span>\n <span\n v-if=\"$slots.default\"\n :class=\"{ open }\"\n class=\"menu-icon-collapse self-center transition-all\"\n >\n <IconArrowRight />\n </span>\n </div>\n\n <Transition name=\"submenus-show\">\n <ul v-show=\"$slots.default && open\" class=\"sub-menu-items transition-all\">\n <slot />\n </ul>\n </Transition>\n </li>\n</template>\n\n<style lang=\"scss\">\n.menu-item {\n @apply cursor-pointer;\n}\n\n.menu-item-title {\n @apply transition-all;\n @apply text-base;\n @apply flex;\n @apply select-none;\n @apply relative;\n @apply p-2;\n @apply font-normal;\n\n border-radius: 4px;\n\n &:hover,\n &.active {\n @apply bg-gray-100;\n @apply font-medium;\n }\n\n &.active::after {\n @apply absolute;\n top: calc(50% - 13px);\n left: -8px;\n width: 3px;\n height: 26px;\n content: \"\";\n background: #242e41;\n border-radius: 6px;\n }\n}\n\n.menu-icon-collapse.open {\n transform: rotate(90deg);\n}\n\n.submenus-show-enter-active {\n transition: all 0.1s ease-out;\n}\n\n.submenus-show-leave-active {\n transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);\n}\n\n.submenus-show-enter-from,\n.submenus-show-enter-to {\n transform: translateY(-10px);\n opacity: 0;\n}\n</style>\n","import type { Component, PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport type { MenuGroupType, MenuItemType } from \"./interface\";\nimport { VMenu, VMenuItem, VMenuLabel } from \"./index\";\nimport type { RouteLocationMatched } from \"vue-router\";\nimport { useRoute, useRouter } from \"vue-router\";\n\nconst VRoutesMenu = defineComponent({\n name: \"VRoutesMenu\",\n props: {\n menus: {\n type: Object as PropType<MenuGroupType[]>,\n },\n },\n emits: [\"select\"],\n setup(props, { emit }) {\n const route = useRoute();\n const { push } = useRouter();\n\n const openIds = computed(() => {\n return route.matched.map((item: RouteLocationMatched) => item.path);\n });\n\n async function handleSelect(id: string) {\n emit(\"select\", id);\n await push(id);\n }\n\n function renderIcon(icon: Component | undefined) {\n if (!icon) return undefined;\n\n return <icon height=\"20px\" width=\"20px\" />;\n }\n\n function renderItems(items: MenuItemType[] | undefined) {\n return items?.map((item) => {\n return (\n <>\n {item.children?.length ? (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n >\n {renderItems(item.children)}\n </VMenuItem>\n ) : (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n onSelect={handleSelect}\n active={openIds.value.includes(item.path)}\n />\n )}\n </>\n );\n });\n }\n\n return () => (\n <VMenu openIds={openIds.value}>\n {props.menus?.map((menu: MenuGroupType) => {\n return (\n <>\n {menu.name && <VMenuLabel>{menu.name}</VMenuLabel>}\n {menu.items?.length && renderItems(menu.items)}\n </>\n );\n })}\n </VMenu>\n );\n },\n});\n\nexport { VRoutesMenu };\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport { IconClose } from \"../../icons/icons\";\n\nconst props = defineProps({\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n },\n width: {\n type: Number,\n default: 500,\n },\n fullscreen: {\n type: Boolean,\n default: false,\n },\n bodyClass: {\n type: Object as PropType<string[]>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst rootVisible = ref(false);\n\nconst wrapperClasses = computed(() => {\n return {\n \"modal-wrapper-fullscreen\": props.fullscreen,\n };\n});\n\nconst contentStyles = computed(() => {\n return {\n maxWidth: props.width + \"px\",\n };\n});\n\nfunction handleClose() {\n emit(\"update:visible\", false);\n emit(\"close\");\n}\n</script>\n<template>\n <Teleport to=\"body\" :disabled=\"true\">\n <div\n v-show=\"rootVisible\"\n :class=\"wrapperClasses\"\n aria-modal=\"true\"\n class=\"modal-wrapper\"\n role=\"dialog\"\n tabindex=\"0\"\n @keyup.esc=\"handleClose()\"\n >\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n @before-enter=\"rootVisible = true\"\n @after-leave=\"rootVisible = false\"\n >\n <div v-show=\"visible\" class=\"modal-layer\" @click=\"handleClose()\" />\n </transition>\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-show=\"visible\"\n :style=\"contentStyles\"\n class=\"modal-content transform transition-all\"\n >\n <div v-if=\"$slots.header || title\" class=\"modal-header\">\n <slot name=\"header\">\n <div class=\"modal-header-title\">{{ title }}</div>\n <div class=\"modal-header-actions flex flex-row\">\n <slot name=\"actions\"></slot>\n <div class=\"modal-header-action\" @click=\"handleClose()\">\n <IconClose />\n </div>\n </div>\n </slot>\n </div>\n <div :class=\"bodyClass\" class=\"modal-body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"modal-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </transition>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n.modal-wrapper {\n @apply fixed;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply flex flex-row;\n @apply items-center justify-center;\n z-index: 999;\n\n .modal-layer {\n @apply flex-none;\n @apply absolute;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply transition-opacity;\n @apply bg-gray-500;\n @apply bg-opacity-75;\n }\n\n .modal-content {\n @apply flex;\n @apply flex-col;\n @apply relative;\n @apply bg-white;\n @apply items-stretch;\n @apply shadow-xl;\n width: calc(100vw - 20px);\n max-height: calc(100vh - 20px);\n border-radius: 4px;\n\n .modal-header {\n @apply flex;\n @apply justify-between;\n @apply border-b;\n\n .modal-header-title {\n @apply self-center;\n @apply text-base;\n @apply font-bold;\n padding: 12px 16px;\n }\n\n .modal-header-actions {\n @apply self-center;\n @apply h-full;\n .modal-header-action {\n @apply cursor-pointer;\n padding: 12px 16px;\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n }\n\n .modal-body {\n @apply overflow-y-auto overflow-x-hidden;\n @apply flex-1;\n word-wrap: break-word;\n padding: 12px 16px;\n }\n\n .modal-footer {\n @apply border-t;\n padding: 12px 16px;\n }\n }\n\n &.modal-wrapper-fullscreen {\n .modal-content {\n width: 100vw !important;\n max-width: 100vw !important;\n height: 100vh !important;\n max-height: 100vh !important;\n border-radius: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst id = [\"radio\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst checked = computed(() => props.modelValue === props.value);\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div :class=\"{ 'radio-wrapper-checked': checked }\" class=\"radio-wrapper\">\n <div class=\"radio-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :name=\"name\"\n :value=\"value\"\n type=\"radio\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"radio-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.radio-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n\n .radio-inner {\n @apply self-center;\n @apply relative;\n }\n\n .radio-label {\n @apply flex;\n @apply self-center;\n @apply items-start;\n @apply ml-3;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VRadio } from \"./index\";\nimport type { PropType } from \"vue\";\n\ndefineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n options: {\n type: Object as PropType<Array<Record<string, string | number | boolean>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(value: string | number | boolean) {\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div class=\"radio-group-wrapper\">\n <VRadio\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :label=\"option[labelKey] + ''\"\n :model-value=\"modelValue\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\"></style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`select-${props.size}`];\n});\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLSelectElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"select-wrapper\">\n <select\n :class=\"classes\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n @change=\"handleChange\"\n >\n <option v-if=\"placeholder\" key=\"placeholder\" disabled hidden value=\"\">\n {{ placeholder }}\n </option>\n <slot />\n </select>\n </div>\n</template>\n<style lang=\"scss\">\n.select-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n\n select {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.select-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.select-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.select-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.select-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n}\n</style>\n","export type Spacing = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type Direction = \"row\" | \"column\";\nexport type Align = \"start\" | \"end\" | \"center\" | \"stretch\";\nexport const SpacingSize: Record<string, number> = {\n xs: 10,\n sm: 12,\n md: 16,\n lg: 20,\n};\n","<script lang=\"ts\" setup>\nimport type { Align, Direction, Spacing } from \"./interface\";\nimport { SpacingSize } from \"./interface\";\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n spacing: {\n type: String as PropType<Spacing>,\n default: \"xs\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n align: {\n type: String as PropType<Align>,\n default: \"center\",\n },\n});\n\nconst wrapperClasses = computed(() => {\n const { direction, align } = props;\n return [`space-direction-${direction}`, `space-align-${align}`];\n});\n</script>\n<template>\n <div\n :class=\"wrapperClasses\"\n :style=\"`gap: ${SpacingSize[spacing]}px`\"\n class=\"space-wrapper\"\n >\n <slot />\n </div>\n</template>\n<style lang=\"scss\">\n.space-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n &.space-direction-row {\n @apply flex-row;\n }\n\n &.space-direction-column {\n @apply flex-col;\n }\n\n &.space-align-center {\n @apply items-center;\n }\n\n &.space-align-start {\n @apply items-start;\n }\n\n &.space-align-end {\n @apply items-end;\n }\n\n &.space-align-stretch {\n @apply items-stretch;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef, PropType } from \"vue\";\nimport { computed, provide, useSlots } from \"vue\";\nimport { VTabbar } from \"./index\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nprovide<ComputedRef<string | number | undefined>>(\n \"activeId\",\n computed(() => props.activeId)\n);\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst slots = useSlots();\n\nconst tabItems = computed(() => {\n return slots.default?.().map(({ props: slotProps }) => {\n return {\n id: slotProps?.[props.idKey],\n label: slotProps?.[props.labelKey],\n };\n });\n});\n\nconst classes = computed(() => {\n return [`tabs-direction-${props.direction}`];\n});\n\nconst handleChange = (id: string | number) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabs-wrapper\">\n <div class=\"tabs-bar-wrapper\">\n <VTabbar\n :activeId=\"activeId\"\n :direction=\"direction\"\n :items=\"tabItems\"\n :type=\"type\"\n @change=\"handleChange\"\n />\n </div>\n <div class=\"tabs-items-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabs-wrapper {\n @apply flex;\n\n &.tabs-direction-row {\n @apply flex-col;\n\n .tabs-items-wrapper {\n @apply mt-2;\n }\n }\n\n &.tabs-direction-column {\n .tabs-items-wrapper {\n @apply ml-2;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef } from \"vue\";\nimport { computed, inject } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n },\n label: {\n type: String,\n },\n});\n\nconst activeId = inject<ComputedRef<string | number | undefined>>(\"activeId\");\n\nconst isActive = computed(() => {\n return activeId?.value === props.id;\n});\n</script>\n<template>\n <div v-if=\"isActive\" class=\"tabs-item-wrapper\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n items: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst classes = computed(() => {\n return [`tabbar-${props.type}`, `tabbar-direction-${props.direction}`];\n});\n\nconst handleChange = (id: number | string) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabbar-wrapper\">\n <div class=\"tabbar-items\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :class=\"{ 'tabbar-item-active': item[idKey] === activeId }\"\n class=\"tabbar-item\"\n @click=\"handleChange(item[idKey])\"\n >\n <div v-if=\"item.icon\" class=\"tabbar-item-icon\">\n <component :is=\"item.icon\" />\n </div>\n <div v-if=\"item[labelKey]\" class=\"tabbar-item-label\">\n {{ item[labelKey] }}\n </div>\n </div>\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabbar-wrapper {\n .tabbar-items {\n @apply flex;\n @apply items-center;\n @apply flex-row;\n }\n\n .tabbar-item {\n @apply flex;\n @apply cursor-pointer;\n @apply self-center;\n @apply transition-all;\n @apply text-base;\n @apply justify-center;\n @apply gap-2;\n\n .tabbar-item-label,\n .tabbar-item-icon {\n @apply self-center;\n }\n }\n\n &.tabbar-default {\n border-bottom-width: 2px;\n @apply border-b-gray-100;\n\n .tabbar-items {\n margin-bottom: -2px;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-5;\n @apply py-1;\n @apply border-b-gray-100;\n\n border-bottom-width: 2px;\n\n &.tabbar-item-active {\n color: #0e1731;\n border-bottom-color: #0e1731;\n }\n }\n }\n\n &.tabbar-pills {\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-gray-100;\n @apply opacity-100;\n }\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n\n &.tabbar-outline {\n @apply p-1;\n @apply bg-gray-100;\n border-radius: 4px;\n\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-white;\n @apply opacity-100;\n @apply shadow-sm;\n }\n\n &:hover {\n @apply bg-white;\n }\n }\n }\n\n &.tabbar-direction-row {\n .tabbar-items {\n @apply flex-row;\n }\n }\n\n &.tabbar-direction-column {\n .tabbar-items {\n @apply flex-col;\n }\n\n &.tabbar-default {\n border-bottom-width: 0;\n @apply border-b-0;\n border-right-width: 2px;\n @apply border-r-gray-100;\n\n .tabbar-items {\n margin-bottom: 0;\n margin-right: -2px;\n }\n\n .tabbar-item {\n border-bottom-width: 0;\n border-right-width: 2px;\n\n &.tabbar-item-active {\n border-right-color: #0e1731;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Theme } from \"./interface\";\n\nconst props = defineProps({\n theme: {\n type: String as PropType<Theme>,\n default: \"default\",\n },\n rounded: {\n type: Boolean,\n default: false,\n },\n});\n\nconst classes = computed(() => {\n return [`tag-${props.theme}`, { \"tag-rounded\": props.rounded }];\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"tag-wrapper\">\n <div v-if=\"$slots.leftIcon\" class=\"tag-left-icon\">\n <slot name=\"leftIcon\" />\n </div>\n <span class=\"tag-content\">\n <slot />\n </span>\n <div v-if=\"$slots.rightIcon\" class=\"tag-right-icon\">\n <slot name=\"rightIcon\" />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tag-wrapper {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply flex-wrap;\n @apply box-border;\n @apply cursor-pointer;\n @apply text-center;\n @apply items-center;\n @apply justify-center;\n @apply w-auto;\n @apply align-middle;\n @apply h-5;\n @apply text-xs;\n\n &.tag-default {\n border: 1px solid #d9d9d9;\n }\n\n &.tag-primary {\n background: #4ccba0;\n border: 1px solid #4ccba0;\n @apply text-white;\n }\n\n &.tag-secondary {\n background: #0e1731;\n border: 1px solid #0e1731;\n @apply text-white;\n }\n\n &.tag-danger {\n background: #d71d1d;\n border: 1px solid #d71d1d;\n @apply text-white;\n }\n\n &.tag-rounded {\n @apply rounded-full;\n }\n\n .tag-content {\n @apply px-1;\n }\n\n .tag-left-icon {\n @apply pl-1;\n }\n\n .tag-right-icon {\n @apply pr-1;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineProps({\n modelValue: {\n type: String,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n rows: {\n type: Number,\n default: 3,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"textarea-wrapper\">\n <textarea\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n >\n </textarea>\n </div>\n</template>\n<style lang=\"scss\">\n.textarea-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n textarea {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n\n @apply p-3;\n @apply text-sm;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n modelValue: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst handleChange = () => {\n emit(\"update:modelValue\", !props.modelValue);\n emit(\"change\", !props.modelValue);\n};\n</script>\n<template>\n <div class=\"switch-wrapper\">\n <button\n :class=\"{\n 'bg-gray-200': !modelValue,\n '!bg-themeable-primary-600': modelValue,\n }\"\n aria-checked=\"false\"\n class=\"switch-inner\"\n role=\"switch\"\n type=\"button\"\n @click=\"handleChange\"\n >\n <span\n :class=\"{\n 'translate-x-0': !modelValue,\n 'translate-x-5': modelValue,\n }\"\n aria-hidden=\"true\"\n class=\"switch-indicator\"\n >\n <slot name=\"icon\" />\n </span>\n </button>\n </div>\n</template>\n<style lang=\"scss\">\n.switch-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n .switch-inner {\n @apply relative;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply h-6;\n @apply w-11;\n @apply border-2;\n @apply border-transparent;\n @apply rounded-full;\n @apply cursor-pointer;\n @apply transition-colors;\n @apply ease-in-out;\n @apply duration-200;\n\n .switch-indicator {\n @apply pointer-events-none;\n @apply inline-block;\n @apply h-5;\n @apply w-5;\n @apply rounded-full;\n @apply bg-white;\n @apply shadow;\n @apply transform;\n @apply ring-0;\n @apply transition;\n @apply ease-in-out;\n @apply duration-200;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VModal } from \"@/components/modal\";\nimport { VSpace } from \"@/components/space\";\nimport { VButton } from \"@/components/button\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconErrorWarning,\n IconForbidLine,\n IconInformation,\n} from \"@/icons/icons\";\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport type { Type } from \"@/components/dialog/interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"info\",\n },\n title: {\n type: String,\n default: \"提示\",\n },\n description: {\n type: String,\n default: \"\",\n },\n confirmText: {\n type: String,\n default: \"确定\",\n },\n cancelText: {\n type: String,\n default: \"取消\",\n },\n visible: {\n type: Boolean,\n default: false,\n },\n onConfirm: {\n type: Function as PropType<() => void>,\n },\n onCancel: {\n type: Function as PropType<() => void>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst icons = {\n success: {\n icon: IconCheckboxCircle,\n color: \"green\",\n },\n info: {\n icon: IconInformation,\n color: \"blue\",\n },\n warning: {\n icon: IconErrorWarning,\n color: \"orange\",\n },\n error: {\n icon: IconForbidLine,\n color: \"red\",\n },\n};\nconst icon = computed(() => icons[props.type]);\n\nconst loading = ref(false);\n\nconst handleCancel = () => {\n if (props.onCancel) {\n props.onCancel();\n }\n handleClose();\n};\n\nconst handleConfirm = async () => {\n if (props.onConfirm) {\n loading.value = true;\n await props.onConfirm();\n }\n handleClose();\n};\n\nconst handleClose = () => {\n loading.value = false;\n emit(\"update:visible\", false);\n emit(\"close\");\n};\n</script>\n<template>\n <VModal :visible=\"visible\" :width=\"450\" @close=\"handleCancel()\">\n <div class=\"flex justify-between items-start py-2 mb-2\">\n <div>\n <div\n :class=\"`ring-${icon.color}-100`\"\n class=\"inline-flex rounded-full bg-teal-50 p-1.5 ring-4\"\n >\n <component\n :is=\"icon.icon\"\n :class=\"`text-${icon.color}-500`\"\n class=\"w-5 h-5\"\n ></component>\n </div>\n </div>\n <div>\n <IconClose class=\"cursor-pointer\" @click=\"handleCancel\" />\n </div>\n </div>\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-1 flex flex-col items-stretch gap-2\">\n <div class=\"text-base text-gray-900 font-bold\">{{ title }}</div>\n <div class=\"text-sm text-gray-700\">{{ description }}</div>\n </div>\n </div>\n <template #footer>\n <VSpace>\n <VButton :loading=\"loading\" type=\"secondary\" @click=\"handleConfirm\">\n {{ confirmText }}\n </VButton>\n <VButton @click=\"handleCancel\">{{ cancelText }}</VButton>\n </VSpace>\n </template>\n </VModal>\n</template>\n","export type Type = \"success\" | \"info\" | \"warning\" | \"error\";\nexport const DialogProviderProvideKey = \"DIALOG_PROVIDER_PROVIDE_KEY\";\n\nexport interface useDialogOptions {\n type?: Type;\n visible: boolean;\n title: string;\n description?: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\n\nexport type useDialogUserOptions = Omit<useDialogOptions, \"type\" | \"visible\">;\n","<script lang=\"ts\" setup>\nimport { VDialog } from \"./index\";\nimport { provide, ref } from \"vue\";\nimport type { useDialogOptions } from \"./interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\nconst options = ref<useDialogOptions>({\n visible: false,\n title: \"\",\n});\n\nprovide(DialogProviderProvideKey, options);\n</script>\n<template>\n <slot />\n <VDialog\n v-model:visible=\"options.visible\"\n :cancel-text=\"options.cancelText\"\n :confirm-text=\"options.confirmText\"\n :description=\"options.description\"\n :onCancel=\"options.onCancel\"\n :onConfirm=\"options.onConfirm\"\n :title=\"options.title\"\n :type=\"options.type\"\n ></VDialog>\n</template>\n","import type { Ref } from \"vue\";\nimport { inject } from \"vue\";\nimport type {\n Type,\n useDialogOptions,\n useDialogUserOptions,\n} from \"@/components/dialog/interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\ninterface useDialogReturn {\n success: (options: useDialogUserOptions) => void;\n info: (options: useDialogUserOptions) => void;\n warning: (options: useDialogUserOptions) => void;\n error: (options: useDialogUserOptions) => void;\n}\n\nexport function useDialog(): useDialogReturn {\n const dialogOptions = inject<Ref<useDialogOptions>>(DialogProviderProvideKey);\n\n if (!dialogOptions) {\n throw new Error(\"DialogProvider is not mounted\");\n }\n\n const createDialog = (type: Type) => (options: useDialogUserOptions) => {\n dialogOptions.value = { ...dialogOptions.value, ...options };\n dialogOptions.value.type = type;\n dialogOptions.value.visible = true;\n };\n\n return {\n success: createDialog(\"success\"),\n info: createDialog(\"info\"),\n warning: createDialog(\"warning\"),\n error: createDialog(\"error\"),\n };\n}\n"],"names":["computed","useRouter","provide","useSlots","ref","inject","VRoutesMenu","defineComponent","name","props","menus","type","Object","emits","setup","emit","route","useRoute","push","openIds","matched","map","item","path","handleSelect","id","renderIcon","icon","_createVNode","renderItems","items","_Fragment","children","length","VMenuItem","value","includes","VMenu","menu"],"mappings":"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"}