cisse-vue-ui 0.2.6 → 0.2.8

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 (29) hide show
  1. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs → CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs} +2 -2
  2. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs.map +1 -0
  3. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js} +2 -2
  4. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js.map +1 -0
  5. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js → EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js} +15 -13
  6. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js.map +1 -0
  7. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs → EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs} +15 -13
  8. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs.map +1 -0
  9. package/dist/components/core/TableComponent.vue.d.ts +18 -2
  10. package/dist/components/core/index.cjs +1 -1
  11. package/dist/components/core/index.js +1 -1
  12. package/dist/components/feedback/index.cjs +1 -1
  13. package/dist/components/feedback/index.js +1 -1
  14. package/dist/components/index.cjs +2 -2
  15. package/dist/components/index.js +2 -2
  16. package/dist/{index-DUVvDjHF.js → index-BEUu6KNI.js} +3 -3
  17. package/dist/index-BEUu6KNI.js.map +1 -0
  18. package/dist/{index-C-qIi_nO.cjs → index-DHo9Tbn4.cjs} +3 -3
  19. package/dist/index-DHo9Tbn4.cjs.map +1 -0
  20. package/dist/index.cjs +3 -3
  21. package/dist/index.js +3 -3
  22. package/dist/style.css +1 -1
  23. package/package.json +1 -1
  24. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs.map +0 -1
  25. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js.map +0 -1
  26. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js.map +0 -1
  27. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs.map +0 -1
  28. package/dist/index-C-qIi_nO.cjs.map +0 -1
  29. package/dist/index-DUVvDjHF.js.map +0 -1
@@ -119,23 +119,25 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
119
119
  });
120
120
  const _hoisted_1$4 = {
121
121
  key: 0,
122
- class: "flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"
122
+ class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700"
123
123
  };
124
- const _hoisted_2$3 = { class: "flex items-center gap-4" };
125
- const _hoisted_3$3 = { class: "text-sm text-gray-700 dark:text-gray-300" };
124
+ const _hoisted_2$3 = { class: "flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4" };
125
+ const _hoisted_3$3 = { class: "text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left" };
126
126
  const _hoisted_4$2 = {
127
127
  key: 0,
128
- class: "flex items-center gap-2"
128
+ class: "flex items-center justify-center sm:justify-start gap-2"
129
129
  };
130
130
  const _hoisted_5 = {
131
- class: "text-sm text-gray-600 dark:text-gray-400",
131
+ class: "text-sm text-gray-600 dark:text-gray-400 hidden sm:inline",
132
132
  for: "page-size"
133
133
  };
134
134
  const _hoisted_6 = ["value"];
135
135
  const _hoisted_7 = ["value"];
136
- const _hoisted_8 = { class: "flex gap-2" };
136
+ const _hoisted_8 = { class: "flex justify-center sm:justify-end gap-2" };
137
137
  const _hoisted_9 = ["disabled"];
138
- const _hoisted_10 = ["disabled"];
138
+ const _hoisted_10 = { class: "hidden sm:inline" };
139
+ const _hoisted_11 = ["disabled"];
140
+ const _hoisted_12 = { class: "hidden sm:inline" };
139
141
  const _sfc_main$4 = /* @__PURE__ */ defineComponent({
140
142
  __name: "PaginationControls",
141
143
  props: {
@@ -187,26 +189,26 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
187
189
  createElementVNode("div", _hoisted_8, [
188
190
  createElementVNode("button", {
189
191
  disabled: __props.currentPage === 1 || __props.loading,
190
- class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
192
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
191
193
  onClick: _cache[0] || (_cache[0] = ($event) => changePage(__props.currentPage - 1))
192
194
  }, [
193
195
  createVNode(unref(Icon), {
194
196
  class: "h-4 w-4",
195
197
  icon: "lucide:chevron-left"
196
198
  }),
197
- createTextVNode(" " + toDisplayString(__props.previousLabel), 1)
199
+ createElementVNode("span", _hoisted_10, toDisplayString(__props.previousLabel), 1)
198
200
  ], 8, _hoisted_9),
199
201
  createElementVNode("button", {
200
202
  disabled: __props.currentPage === __props.totalPages || __props.loading,
201
- class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
203
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
202
204
  onClick: _cache[1] || (_cache[1] = ($event) => changePage(__props.currentPage + 1))
203
205
  }, [
204
- createTextVNode(toDisplayString(__props.nextLabel) + " ", 1),
206
+ createElementVNode("span", _hoisted_12, toDisplayString(__props.nextLabel), 1),
205
207
  createVNode(unref(Icon), {
206
208
  class: "h-4 w-4",
207
209
  icon: "lucide:chevron-right"
208
210
  })
209
- ], 8, _hoisted_10)
211
+ ], 8, _hoisted_11)
210
212
  ])
211
213
  ])) : createCommentVNode("", true);
212
214
  };
@@ -467,4 +469,4 @@ export {
467
469
  _sfc_main$1 as e,
468
470
  _sfc_main as f
469
471
  };
470
- //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js.map
472
+ //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js","sources":["../src/components/feedback/LoadingSpinner.vue","../src/components/feedback/Modal.vue","../src/components/feedback/PaginationControls.vue","../src/components/feedback/NotificationComponent.vue","../src/components/feedback/NotificationList.vue","../src/components/feedback/Alert.vue","../src/components/feedback/EmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { SpinnerSize } from '@/types'\n\nconst { text, size = 'md' } = defineProps<{\n text?: string\n size?: SpinnerSize\n}>()\n\nconst sizeClasses: Record<SpinnerSize, string> = {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-center py-12\">\n <div class=\"text-center\">\n <div\n :class=\"sizeClasses[size]\"\n class=\"border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent\"\n ></div>\n <p v-if=\"text\" class=\"mt-4 text-gray-600 dark:text-gray-400\">{{ text }}</p>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\nimport { onMounted, onUnmounted } from 'vue'\nimport type { ModalSize } from '@/types'\n\nconst {\n title = '',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n closeButtonLabel = 'Close',\n} = defineProps<{\n title?: string\n size?: ModalSize\n closeOnBackdrop?: boolean\n closeOnEscape?: boolean\n closeButtonLabel?: string\n}>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst sizeClasses: Record<ModalSize, string> = {\n sm: 'max-w-md',\n default: 'max-w-3xl',\n lg: 'max-w-5xl',\n xl: 'max-w-7xl',\n full: 'max-w-full mx-4',\n}\n\nconst handleBackdropClick = () => {\n if (closeOnBackdrop) {\n emit('close')\n }\n}\n\nconst handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n emit('close')\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = ''\n})\n</script>\n\n<template>\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n @click.self=\"handleBackdropClick\"\n >\n <div\n :class=\"sizeClasses[size]\"\n class=\"flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900\"\n >\n <!-- Header -->\n <div\n v-if=\"title || $slots.header || $slots.title\"\n class=\"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <h3 class=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n <slot name=\"header\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </slot>\n </h3>\n <button\n class=\"rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\"\n type=\"button\"\n @click=\"emit('close')\"\n >\n <Icon class=\"h-5 w-5\" icon=\"lucide:x\" />\n <span class=\"sr-only\">{{ closeButtonLabel }}</span>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-4\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"$slots.footer\"\n class=\"flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nconst {\n currentPage,\n totalPages,\n loading = false,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n showPageSize = true,\n pageLabel = 'Page',\n ofLabel = 'of',\n itemsPerPageLabel = 'Items per page:',\n previousLabel = 'Previous',\n nextLabel = 'Next',\n} = defineProps<{\n currentPage: number\n totalPages: number\n loading?: boolean\n pageSize?: number\n pageSizeOptions?: number[]\n showPageSize?: boolean\n pageLabel?: string\n ofLabel?: string\n itemsPerPageLabel?: string\n previousLabel?: string\n nextLabel?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:page': [page: number]\n 'update:pageSize': [size: number]\n}>()\n\nconst changePage = (page: number) => {\n if (page >= 1 && page <= totalPages && !loading) {\n emit('update:page', page)\n }\n}\n\nconst changePageSize = (event: Event) => {\n const target = event.target as HTMLSelectElement\n emit('update:pageSize', Number(target.value))\n}\n</script>\n\n<template>\n <div\n v-if=\"totalPages > 1\"\n class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700\"\n >\n <!-- Info and page size -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4\">\n <div class=\"text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left\">\n {{ pageLabel }} {{ currentPage }} {{ ofLabel }} {{ totalPages }}\n </div>\n <div v-if=\"showPageSize\" class=\"flex items-center justify-center sm:justify-start gap-2\">\n <label class=\"text-sm text-gray-600 dark:text-gray-400 hidden sm:inline\" for=\"page-size\">\n {{ itemsPerPageLabel }}\n </label>\n <select\n id=\"page-size\"\n :value=\"pageSize\"\n class=\"focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100\"\n @change=\"changePageSize\"\n >\n <option v-for=\"size in pageSizeOptions\" :key=\"size\" :value=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Navigation buttons -->\n <div class=\"flex justify-center sm:justify-end gap-2\">\n <button\n :disabled=\"currentPage === 1 || loading\"\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\n @click=\"changePage(currentPage - 1)\"\n >\n <Icon class=\"h-4 w-4\" icon=\"lucide:chevron-left\" />\n <span class=\"hidden sm:inline\">{{ previousLabel }}</span>\n </button>\n <button\n :disabled=\"currentPage === totalPages || loading\"\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\n @click=\"changePage(currentPage + 1)\"\n >\n <span class=\"hidden sm:inline\">{{ nextLabel }}</span>\n <Icon class=\"h-4 w-4\" icon=\"lucide:chevron-right\" />\n </button>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport { computed, onMounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nconst props = defineProps<{\n notification: Notification\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n\nconst iconName = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'lucide:check-circle'\n case 'info':\n return 'lucide:info'\n case 'warning':\n return 'lucide:alert-triangle'\n case 'error':\n return 'lucide:x-circle'\n default:\n return 'lucide:bell'\n }\n})\n\nconst iconColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'text-green-600 dark:text-green-400'\n case 'info':\n return 'text-blue-600 dark:text-blue-400'\n case 'warning':\n return 'text-yellow-600 dark:text-yellow-400'\n case 'error':\n return 'text-red-600 dark:text-red-400'\n default:\n return 'text-gray-600 dark:text-gray-400'\n }\n})\n\nconst bgColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'bg-green-50 dark:bg-green-950'\n case 'info':\n return 'bg-blue-50 dark:bg-blue-950'\n case 'warning':\n return 'bg-yellow-50 dark:bg-yellow-950'\n case 'error':\n return 'bg-red-50 dark:bg-red-950'\n default:\n return 'bg-gray-50 dark:bg-gray-950'\n }\n})\n\nconst handleDismiss = () => {\n if (props.notification.id) {\n emit('dismiss', props.notification.id)\n }\n}\n\nonMounted(() => {\n const duration = props.notification.duration ?? props.duration ?? 5000\n if (props.autoDismiss !== false && duration > 0) {\n setTimeout(() => {\n handleDismiss()\n }, duration)\n }\n})\n</script>\n\n<template>\n <div\n class=\"flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black\"\n >\n <div :class=\"[bgColor, 'flex items-center justify-center rounded-full p-2']\">\n <Icon :class=\"iconColor\" :icon=\"iconName\" class=\"h-5 w-5\" />\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <h4 v-if=\"notification.title\" class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\n {{ notification.title }}\n </h4>\n <p v-if=\"notification.message\" class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n {{ notification.message }}\n </p>\n </div>\n\n <button\n class=\"shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400\"\n @click=\"handleDismiss\"\n >\n <Icon class=\"h-4 w-4\" icon=\"lucide:x\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport NotificationComponent from './NotificationComponent.vue'\n\ndefineProps<{\n notifications: Notification[]\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n</script>\n\n<template>\n <div class=\"fixed top-5 right-5 z-50 flex flex-col gap-3\">\n <NotificationComponent\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n :notification=\"notification\"\n :auto-dismiss=\"autoDismiss\"\n :duration=\"duration\"\n @dismiss=\"emit('dismiss', $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst props = withDefaults(\n defineProps<{\n /** Alert variant */\n variant?: AlertVariant\n /** Title text */\n title?: string\n /** Show close button */\n dismissible?: boolean\n /** Custom icon */\n icon?: string\n }>(),\n {\n variant: 'info',\n },\n)\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string; iconColor: string }> = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n icon: 'lucide:info',\n iconColor: 'text-blue-500',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n icon: 'lucide:check-circle',\n iconColor: 'text-green-500',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n icon: 'lucide:alert-triangle',\n iconColor: 'text-yellow-500',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n icon: 'lucide:alert-circle',\n iconColor: 'text-red-500',\n },\n}\n\nconst styles = variantStyles[props.variant]\n</script>\n\n<template>\n <div\n :class=\"[\n 'flex gap-3 rounded-lg border p-4',\n styles.bg,\n styles.border,\n ]\"\n role=\"alert\"\n >\n <Icon\n :icon=\"icon || styles.icon\"\n :class=\"['size-5 shrink-0', styles.iconColor]\"\n />\n <div class=\"flex-1\">\n <h4\n v-if=\"title\"\n class=\"mb-1 font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h4>\n <div class=\"text-sm text-gray-700 dark:text-gray-300\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\n @click=\"emit('dismiss')\"\n >\n <Icon icon=\"lucide:x\" class=\"size-4\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nwithDefaults(\n defineProps<{\n /** Message to display */\n message?: string\n /** Icon name (iconify format) */\n icon?: string\n /** Title text */\n title?: string\n }>(),\n {\n message: 'No results found',\n icon: 'lucide:inbox',\n },\n)\n</script>\n\n<template>\n <div class=\"py-12 text-center\">\n <Icon\n v-if=\"icon\"\n :icon=\"icon\"\n class=\"mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500\"\n />\n <h3 v-if=\"title\" class=\"mb-2 text-lg font-medium text-gray-900 dark:text-white\">\n {{ title }}\n </h3>\n <p class=\"text-gray-500 dark:text-gray-400\">\n <slot>{{ message }}</slot>\n </p>\n <div v-if=\"$slots.action\" class=\"mt-4\">\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_normalizeClass","_hoisted_3","_toDisplayString","$slots","_renderSlot","_createVNode","_unref","_hoisted_4","_hoisted_5","_Fragment","_renderList","_createBlock","NotificationComponent"],"mappings":"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"}
@@ -120,23 +120,25 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
120
120
  });
121
121
  const _hoisted_1$4 = {
122
122
  key: 0,
123
- class: "flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"
123
+ class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700"
124
124
  };
125
- const _hoisted_2$3 = { class: "flex items-center gap-4" };
126
- const _hoisted_3$3 = { class: "text-sm text-gray-700 dark:text-gray-300" };
125
+ const _hoisted_2$3 = { class: "flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4" };
126
+ const _hoisted_3$3 = { class: "text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left" };
127
127
  const _hoisted_4$2 = {
128
128
  key: 0,
129
- class: "flex items-center gap-2"
129
+ class: "flex items-center justify-center sm:justify-start gap-2"
130
130
  };
131
131
  const _hoisted_5 = {
132
- class: "text-sm text-gray-600 dark:text-gray-400",
132
+ class: "text-sm text-gray-600 dark:text-gray-400 hidden sm:inline",
133
133
  for: "page-size"
134
134
  };
135
135
  const _hoisted_6 = ["value"];
136
136
  const _hoisted_7 = ["value"];
137
- const _hoisted_8 = { class: "flex gap-2" };
137
+ const _hoisted_8 = { class: "flex justify-center sm:justify-end gap-2" };
138
138
  const _hoisted_9 = ["disabled"];
139
- const _hoisted_10 = ["disabled"];
139
+ const _hoisted_10 = { class: "hidden sm:inline" };
140
+ const _hoisted_11 = ["disabled"];
141
+ const _hoisted_12 = { class: "hidden sm:inline" };
140
142
  const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
141
143
  __name: "PaginationControls",
142
144
  props: {
@@ -188,26 +190,26 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
188
190
  vue.createElementVNode("div", _hoisted_8, [
189
191
  vue.createElementVNode("button", {
190
192
  disabled: __props.currentPage === 1 || __props.loading,
191
- class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
193
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
192
194
  onClick: _cache[0] || (_cache[0] = ($event) => changePage(__props.currentPage - 1))
193
195
  }, [
194
196
  vue.createVNode(vue.unref(vue$1.Icon), {
195
197
  class: "h-4 w-4",
196
198
  icon: "lucide:chevron-left"
197
199
  }),
198
- vue.createTextVNode(" " + vue.toDisplayString(__props.previousLabel), 1)
200
+ vue.createElementVNode("span", _hoisted_10, vue.toDisplayString(__props.previousLabel), 1)
199
201
  ], 8, _hoisted_9),
200
202
  vue.createElementVNode("button", {
201
203
  disabled: __props.currentPage === __props.totalPages || __props.loading,
202
- class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
204
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
203
205
  onClick: _cache[1] || (_cache[1] = ($event) => changePage(__props.currentPage + 1))
204
206
  }, [
205
- vue.createTextVNode(vue.toDisplayString(__props.nextLabel) + " ", 1),
207
+ vue.createElementVNode("span", _hoisted_12, vue.toDisplayString(__props.nextLabel), 1),
206
208
  vue.createVNode(vue.unref(vue$1.Icon), {
207
209
  class: "h-4 w-4",
208
210
  icon: "lucide:chevron-right"
209
211
  })
210
- ], 8, _hoisted_10)
212
+ ], 8, _hoisted_11)
211
213
  ])
212
214
  ])) : vue.createCommentVNode("", true);
213
215
  };
@@ -466,4 +468,4 @@ exports._sfc_main$3 = _sfc_main$3;
466
468
  exports._sfc_main$4 = _sfc_main$2;
467
469
  exports._sfc_main$5 = _sfc_main$1;
468
470
  exports._sfc_main$6 = _sfc_main;
469
- //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs.map
471
+ //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs","sources":["../src/components/feedback/LoadingSpinner.vue","../src/components/feedback/Modal.vue","../src/components/feedback/PaginationControls.vue","../src/components/feedback/NotificationComponent.vue","../src/components/feedback/NotificationList.vue","../src/components/feedback/Alert.vue","../src/components/feedback/EmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { SpinnerSize } from '@/types'\n\nconst { text, size = 'md' } = defineProps<{\n text?: string\n size?: SpinnerSize\n}>()\n\nconst sizeClasses: Record<SpinnerSize, string> = {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-center py-12\">\n <div class=\"text-center\">\n <div\n :class=\"sizeClasses[size]\"\n class=\"border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent\"\n ></div>\n <p v-if=\"text\" class=\"mt-4 text-gray-600 dark:text-gray-400\">{{ text }}</p>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\nimport { onMounted, onUnmounted } from 'vue'\nimport type { ModalSize } from '@/types'\n\nconst {\n title = '',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n closeButtonLabel = 'Close',\n} = defineProps<{\n title?: string\n size?: ModalSize\n closeOnBackdrop?: boolean\n closeOnEscape?: boolean\n closeButtonLabel?: string\n}>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst sizeClasses: Record<ModalSize, string> = {\n sm: 'max-w-md',\n default: 'max-w-3xl',\n lg: 'max-w-5xl',\n xl: 'max-w-7xl',\n full: 'max-w-full mx-4',\n}\n\nconst handleBackdropClick = () => {\n if (closeOnBackdrop) {\n emit('close')\n }\n}\n\nconst handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n emit('close')\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = ''\n})\n</script>\n\n<template>\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n @click.self=\"handleBackdropClick\"\n >\n <div\n :class=\"sizeClasses[size]\"\n class=\"flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900\"\n >\n <!-- Header -->\n <div\n v-if=\"title || $slots.header || $slots.title\"\n class=\"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <h3 class=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n <slot name=\"header\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </slot>\n </h3>\n <button\n class=\"rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\"\n type=\"button\"\n @click=\"emit('close')\"\n >\n <Icon class=\"h-5 w-5\" icon=\"lucide:x\" />\n <span class=\"sr-only\">{{ closeButtonLabel }}</span>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-4\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"$slots.footer\"\n class=\"flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nconst {\n currentPage,\n totalPages,\n loading = false,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n showPageSize = true,\n pageLabel = 'Page',\n ofLabel = 'of',\n itemsPerPageLabel = 'Items per page:',\n previousLabel = 'Previous',\n nextLabel = 'Next',\n} = defineProps<{\n currentPage: number\n totalPages: number\n loading?: boolean\n pageSize?: number\n pageSizeOptions?: number[]\n showPageSize?: boolean\n pageLabel?: string\n ofLabel?: string\n itemsPerPageLabel?: string\n previousLabel?: string\n nextLabel?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:page': [page: number]\n 'update:pageSize': [size: number]\n}>()\n\nconst changePage = (page: number) => {\n if (page >= 1 && page <= totalPages && !loading) {\n emit('update:page', page)\n }\n}\n\nconst changePageSize = (event: Event) => {\n const target = event.target as HTMLSelectElement\n emit('update:pageSize', Number(target.value))\n}\n</script>\n\n<template>\n <div\n v-if=\"totalPages > 1\"\n class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700\"\n >\n <!-- Info and page size -->\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4\">\n <div class=\"text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left\">\n {{ pageLabel }} {{ currentPage }} {{ ofLabel }} {{ totalPages }}\n </div>\n <div v-if=\"showPageSize\" class=\"flex items-center justify-center sm:justify-start gap-2\">\n <label class=\"text-sm text-gray-600 dark:text-gray-400 hidden sm:inline\" for=\"page-size\">\n {{ itemsPerPageLabel }}\n </label>\n <select\n id=\"page-size\"\n :value=\"pageSize\"\n class=\"focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100\"\n @change=\"changePageSize\"\n >\n <option v-for=\"size in pageSizeOptions\" :key=\"size\" :value=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Navigation buttons -->\n <div class=\"flex justify-center sm:justify-end gap-2\">\n <button\n :disabled=\"currentPage === 1 || loading\"\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\n @click=\"changePage(currentPage - 1)\"\n >\n <Icon class=\"h-4 w-4\" icon=\"lucide:chevron-left\" />\n <span class=\"hidden sm:inline\">{{ previousLabel }}</span>\n </button>\n <button\n :disabled=\"currentPage === totalPages || loading\"\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\n @click=\"changePage(currentPage + 1)\"\n >\n <span class=\"hidden sm:inline\">{{ nextLabel }}</span>\n <Icon class=\"h-4 w-4\" icon=\"lucide:chevron-right\" />\n </button>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport { computed, onMounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nconst props = defineProps<{\n notification: Notification\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n\nconst iconName = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'lucide:check-circle'\n case 'info':\n return 'lucide:info'\n case 'warning':\n return 'lucide:alert-triangle'\n case 'error':\n return 'lucide:x-circle'\n default:\n return 'lucide:bell'\n }\n})\n\nconst iconColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'text-green-600 dark:text-green-400'\n case 'info':\n return 'text-blue-600 dark:text-blue-400'\n case 'warning':\n return 'text-yellow-600 dark:text-yellow-400'\n case 'error':\n return 'text-red-600 dark:text-red-400'\n default:\n return 'text-gray-600 dark:text-gray-400'\n }\n})\n\nconst bgColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'bg-green-50 dark:bg-green-950'\n case 'info':\n return 'bg-blue-50 dark:bg-blue-950'\n case 'warning':\n return 'bg-yellow-50 dark:bg-yellow-950'\n case 'error':\n return 'bg-red-50 dark:bg-red-950'\n default:\n return 'bg-gray-50 dark:bg-gray-950'\n }\n})\n\nconst handleDismiss = () => {\n if (props.notification.id) {\n emit('dismiss', props.notification.id)\n }\n}\n\nonMounted(() => {\n const duration = props.notification.duration ?? props.duration ?? 5000\n if (props.autoDismiss !== false && duration > 0) {\n setTimeout(() => {\n handleDismiss()\n }, duration)\n }\n})\n</script>\n\n<template>\n <div\n class=\"flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black\"\n >\n <div :class=\"[bgColor, 'flex items-center justify-center rounded-full p-2']\">\n <Icon :class=\"iconColor\" :icon=\"iconName\" class=\"h-5 w-5\" />\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <h4 v-if=\"notification.title\" class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\n {{ notification.title }}\n </h4>\n <p v-if=\"notification.message\" class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n {{ notification.message }}\n </p>\n </div>\n\n <button\n class=\"shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400\"\n @click=\"handleDismiss\"\n >\n <Icon class=\"h-4 w-4\" icon=\"lucide:x\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport NotificationComponent from './NotificationComponent.vue'\n\ndefineProps<{\n notifications: Notification[]\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n</script>\n\n<template>\n <div class=\"fixed top-5 right-5 z-50 flex flex-col gap-3\">\n <NotificationComponent\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n :notification=\"notification\"\n :auto-dismiss=\"autoDismiss\"\n :duration=\"duration\"\n @dismiss=\"emit('dismiss', $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst props = withDefaults(\n defineProps<{\n /** Alert variant */\n variant?: AlertVariant\n /** Title text */\n title?: string\n /** Show close button */\n dismissible?: boolean\n /** Custom icon */\n icon?: string\n }>(),\n {\n variant: 'info',\n },\n)\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string; iconColor: string }> = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n icon: 'lucide:info',\n iconColor: 'text-blue-500',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n icon: 'lucide:check-circle',\n iconColor: 'text-green-500',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n icon: 'lucide:alert-triangle',\n iconColor: 'text-yellow-500',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n icon: 'lucide:alert-circle',\n iconColor: 'text-red-500',\n },\n}\n\nconst styles = variantStyles[props.variant]\n</script>\n\n<template>\n <div\n :class=\"[\n 'flex gap-3 rounded-lg border p-4',\n styles.bg,\n styles.border,\n ]\"\n role=\"alert\"\n >\n <Icon\n :icon=\"icon || styles.icon\"\n :class=\"['size-5 shrink-0', styles.iconColor]\"\n />\n <div class=\"flex-1\">\n <h4\n v-if=\"title\"\n class=\"mb-1 font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h4>\n <div class=\"text-sm text-gray-700 dark:text-gray-300\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\n @click=\"emit('dismiss')\"\n >\n <Icon icon=\"lucide:x\" class=\"size-4\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nwithDefaults(\n defineProps<{\n /** Message to display */\n message?: string\n /** Icon name (iconify format) */\n icon?: string\n /** Title text */\n title?: string\n }>(),\n {\n message: 'No results found',\n icon: 'lucide:inbox',\n },\n)\n</script>\n\n<template>\n <div class=\"py-12 text-center\">\n <Icon\n v-if=\"icon\"\n :icon=\"icon\"\n class=\"mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500\"\n />\n <h3 v-if=\"title\" class=\"mb-2 text-lg font-medium text-gray-900 dark:text-white\">\n {{ title }}\n </h3>\n <p class=\"text-gray-500 dark:text-gray-400\">\n <slot>{{ message }}</slot>\n </p>\n <div v-if=\"$slots.action\" class=\"mt-4\">\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_normalizeClass","_hoisted_3","_toDisplayString","onMounted","onUnmounted","$slots","_renderSlot","_createVNode","_unref","Icon","_hoisted_4","_hoisted_5","_Fragment","_renderList","computed","_createBlock","NotificationComponent"],"mappings":"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"}
@@ -17,7 +17,23 @@ type __VLS_Props = {
17
17
  /** Key field for unique identification (default: 'id') */
18
18
  keyField?: string;
19
19
  };
20
- declare function __VLS_template(): any;
20
+ declare function __VLS_template(): {
21
+ attrs: Partial<{}>;
22
+ slots: Partial<Record<string, (_: {
23
+ property: Property;
24
+ }) => any>> & Partial<Record<string, (_: {
25
+ item: ItemType;
26
+ property: Property;
27
+ value: unknown;
28
+ }) => any>> & {
29
+ action?(_: {
30
+ item: ItemType;
31
+ }): any;
32
+ empty?(_: {}): any;
33
+ };
34
+ refs: {};
35
+ rootEl: HTMLDivElement;
36
+ };
21
37
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
22
38
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
23
39
  select: (id: string) => any;
@@ -28,7 +44,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
28
44
  }>, {
29
45
  selectable: boolean;
30
46
  keyField: string;
31
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
47
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
32
48
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
33
49
  export default _default;
34
50
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../../CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs");
3
+ const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../../CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs");
4
4
  const Dropdown_vue_vue_type_script_setup_true_lang = require("../../Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs");
5
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("../../BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
6
6
  exports.AutocompleteComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$4;
@@ -1,4 +1,4 @@
1
- import { d, g, f, _, k, b, c, j, i, e, a, h } from "../../CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js";
1
+ import { d, g, f, _, k, b, c, j, i, e, a, h } from "../../CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js";
2
2
  import { a as a2, _ as _2 } from "../../Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js";
3
3
  import { _ as _3 } from "../../BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  export {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const EmptyState_vue_vue_type_script_setup_true_lang = require("../../EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs");
3
+ const EmptyState_vue_vue_type_script_setup_true_lang = require("../../EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs");
4
4
  exports.Alert = EmptyState_vue_vue_type_script_setup_true_lang._sfc_main$5;
5
5
  exports.EmptyState = EmptyState_vue_vue_type_script_setup_true_lang._sfc_main$6;
6
6
  exports.LoadingSpinner = EmptyState_vue_vue_type_script_setup_true_lang._sfc_main;
@@ -1,4 +1,4 @@
1
- import { e, f, _, a, c, d, b } from "../../EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js";
1
+ import { e, f, _, a, c, d, b } from "../../EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js";
2
2
  export {
3
3
  e as Alert,
4
4
  f as EmptyState,
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs");
3
+ const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs");
4
4
  const Dropdown_vue_vue_type_script_setup_true_lang = require("../Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs");
5
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("../BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
6
6
  const Switch_vue_vue_type_script_setup_true_lang = require("../Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs");
7
7
  const Checkbox_vue_vue_type_script_setup_true_lang = require("../Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
8
- const EmptyState_vue_vue_type_script_setup_true_lang = require("../EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs");
8
+ const EmptyState_vue_vue_type_script_setup_true_lang = require("../EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs");
9
9
  const PageLayout_vue_vue_type_script_setup_true_lang = require("../PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs");
10
10
  exports.AutocompleteComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$4;
11
11
  exports.Avatar = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$7;
@@ -1,9 +1,9 @@
1
- import { d, g, f, _, k, b, c, j, i, e, a, h } from "../CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js";
1
+ import { d, g, f, _, k, b, c, j, i, e, a, h } from "../CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js";
2
2
  import { a as a2, _ as _2 } from "../Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js";
3
3
  import { e as e2, d as d2, c as c2, b as b2, _ as _3, a as a3 } from "../BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  import { d as d3, a as a4, b as b3, _ as _4, c as c3, e as e3, f as f2 } from "../Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js";
5
5
  import { _ as _5 } from "../Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js";
6
- import { e as e4, f as f3, _ as _6, a as a5, c as c4, d as d4, b as b4 } from "../EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js";
6
+ import { e as e4, f as f3, _ as _6, a as a5, c as c4, d as d4, b as b4 } from "../EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js";
7
7
  import { _ as _7, a as a6 } from "../PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js";
8
8
  export {
9
9
  e4 as Alert,
@@ -1,9 +1,9 @@
1
- import { d as _sfc_main$1, g as _sfc_main$2, f as _sfc_main$6, _ as _sfc_main$7, k as _sfc_main$9, b as _sfc_main$k, c as _sfc_main$r, j as _sfc_main$u, i as _sfc_main$w, e as _sfc_main$x, a as _sfc_main$y, h as _sfc_main$z } from "./CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js";
1
+ import { d as _sfc_main$1, g as _sfc_main$2, f as _sfc_main$6, _ as _sfc_main$7, k as _sfc_main$9, b as _sfc_main$k, c as _sfc_main$r, j as _sfc_main$u, i as _sfc_main$w, e as _sfc_main$x, a as _sfc_main$y, h as _sfc_main$z } from "./CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js";
2
2
  import { a as _sfc_main$b, _ as _sfc_main$j } from "./Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js";
3
3
  import { e as _sfc_main$3, d as _sfc_main$5, c as _sfc_main$a, b as _sfc_main$o, _ as _sfc_main$t, a as _sfc_main$A } from "./BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  import { d as _sfc_main$d, a as _sfc_main$e, b as _sfc_main$f, _ as _sfc_main$g, c as _sfc_main$h, e as _sfc_main$s, f as _sfc_main$v } from "./Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js";
5
5
  import { _ as _sfc_main$8 } from "./Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js";
6
- import { e as _sfc_main, f as _sfc_main$c, _ as _sfc_main$i, a as _sfc_main$l, c as _sfc_main$m, d as _sfc_main$n, b as _sfc_main$q } from "./EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js";
6
+ import { e as _sfc_main, f as _sfc_main$c, _ as _sfc_main$i, a as _sfc_main$l, c as _sfc_main$m, d as _sfc_main$n, b as _sfc_main$q } from "./EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js";
7
7
  import { _ as _sfc_main$4, a as _sfc_main$p } from "./PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js";
8
8
  const components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9
9
  __proto__: null,
@@ -48,4 +48,4 @@ const components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
48
48
  export {
49
49
  components as c
50
50
  };
51
- //# sourceMappingURL=index-DUVvDjHF.js.map
51
+ //# sourceMappingURL=index-BEUu6KNI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BEUu6KNI.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
- const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("./CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs");
2
+ const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("./CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs");
3
3
  const Dropdown_vue_vue_type_script_setup_true_lang = require("./Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs");
4
4
  const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
5
5
  const Switch_vue_vue_type_script_setup_true_lang = require("./Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs");
6
6
  const Checkbox_vue_vue_type_script_setup_true_lang = require("./Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
7
- const EmptyState_vue_vue_type_script_setup_true_lang = require("./EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs");
7
+ const EmptyState_vue_vue_type_script_setup_true_lang = require("./EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs");
8
8
  const PageLayout_vue_vue_type_script_setup_true_lang = require("./PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs");
9
9
  const components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10
10
  __proto__: null,
@@ -47,4 +47,4 @@ const components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
47
47
  TextType: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1
48
48
  }, Symbol.toStringTag, { value: "Module" }));
49
49
  exports.components = components;
50
- //# sourceMappingURL=index-C-qIi_nO.cjs.map
50
+ //# sourceMappingURL=index-DHo9Tbn4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DHo9Tbn4.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.cjs CHANGED
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("./CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs");
3
+ const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("./CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs");
4
4
  const Dropdown_vue_vue_type_script_setup_true_lang = require("./Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs");
5
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
6
6
  const Switch_vue_vue_type_script_setup_true_lang = require("./Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs");
7
7
  const Checkbox_vue_vue_type_script_setup_true_lang = require("./Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
8
- const EmptyState_vue_vue_type_script_setup_true_lang = require("./EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs");
8
+ const EmptyState_vue_vue_type_script_setup_true_lang = require("./EmptyState.vue_vue_type_script_setup_true_lang-DzDK0MZi.cjs");
9
9
  const PageLayout_vue_vue_type_script_setup_true_lang = require("./PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs");
10
10
  const useModal = require("./useModal-DDF_ZS8C.cjs");
11
11
  const useDropdown = require("./useDropdown-DHFnd259.cjs");
12
- const components_index = require("./index-C-qIi_nO.cjs");
12
+ const components_index = require("./index-DHo9Tbn4.cjs");
13
13
  const VueTailwindUI = {
14
14
  install(app, options = {}) {
15
15
  const { prefix = "", components: selectedComponents } = options;
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { d, g, f, _, k, b, c, j, i, e, a, h } from "./CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js";
1
+ import { d, g, f, _, k, b, c, j, i, e, a, h } from "./CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js";
2
2
  import { a as a2, _ as _2 } from "./Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js";
3
3
  import { e as e2, d as d2, c as c2, b as b2, _ as _3, a as a3 } from "./BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  import { d as d3, a as a4, b as b3, _ as _4, c as c3, e as e3, f as f2 } from "./Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js";
5
5
  import { _ as _5 } from "./Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js";
6
- import { e as e4, f as f3, _ as _6, a as a5, c as c4, d as d4, b as b4 } from "./EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js";
6
+ import { e as e4, f as f3, _ as _6, a as a5, c as c4, d as d4, b as b4 } from "./EmptyState.vue_vue_type_script_setup_true_lang-BBLBf32F.js";
7
7
  import { _ as _7, a as a6 } from "./PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js";
8
8
  import { a as a7, b as b5, c as c5, d as d5, u } from "./useModal-Aq8hn152.js";
9
9
  import { u as u2 } from "./useDropdown-iVu14E6s.js";
10
- import { c as components } from "./index-DUVvDjHF.js";
10
+ import { c as components } from "./index-BEUu6KNI.js";
11
11
  const VueTailwindUI = {
12
12
  install(app, options = {}) {
13
13
  const { prefix = "", components: selectedComponents } = options;