@finema/core 2.18.3 → 2.20.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 (45) hide show
  1. package/README.md +79 -79
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +1 -1
  4. package/dist/runtime/components/DevToolsWindow/index.vue +98 -95
  5. package/dist/runtime/components/Dialog/index.vue +20 -19
  6. package/dist/runtime/components/Form/FieldWrapper.vue +13 -13
  7. package/dist/runtime/components/Form/Fields.vue +5 -0
  8. package/dist/runtime/components/Form/InputCheckbox/index.vue +18 -18
  9. package/dist/runtime/components/Form/InputNumber/index.vue +20 -20
  10. package/dist/runtime/components/Form/InputSearch/index.vue +79 -0
  11. package/dist/runtime/components/Form/InputSearch/index.vue.d.ts +13 -0
  12. package/dist/runtime/components/Form/InputSearch/types.d.ts +16 -0
  13. package/dist/runtime/components/Form/InputSearch/types.js +0 -0
  14. package/dist/runtime/components/Form/InputSelectMultiple/index.vue +43 -43
  15. package/dist/runtime/components/Form/InputText/index.vue +216 -79
  16. package/dist/runtime/components/Form/InputText/types.d.ts +1 -0
  17. package/dist/runtime/components/Form/InputTextarea/index.vue +18 -18
  18. package/dist/runtime/components/Form/InputToggle/index.vue +17 -17
  19. package/dist/runtime/components/Form/InputUploadDropzoneAuto/EmptyState.vue +4 -4
  20. package/dist/runtime/components/Form/InputUploadDropzoneAuto/FailedState.vue +7 -7
  21. package/dist/runtime/components/Form/InputUploadDropzoneAuto/LoadingState.vue +5 -5
  22. package/dist/runtime/components/Form/InputUploadDropzoneAuto/SuccessState.vue +7 -7
  23. package/dist/runtime/components/Form/index.vue +5 -5
  24. package/dist/runtime/components/Form/types.d.ts +3 -1
  25. package/dist/runtime/components/Form/types.js +1 -0
  26. package/dist/runtime/components/Image.vue +28 -28
  27. package/dist/runtime/components/Log/index.vue +17 -17
  28. package/dist/runtime/components/Table/Base.vue +1 -1
  29. package/dist/runtime/components/Table/ColumnDate.vue +1 -1
  30. package/dist/runtime/components/Table/ColumnDateTime.vue +1 -1
  31. package/dist/runtime/components/Table/ColumnImage.vue +4 -4
  32. package/dist/runtime/components/Table/ColumnNumber.vue +1 -1
  33. package/dist/runtime/components/Table/ColumnText.vue +1 -1
  34. package/dist/runtime/components/Table/index.vue +3 -1
  35. package/dist/runtime/composables/useConfig.d.ts +2 -2
  36. package/dist/runtime/composables/useConfig.js +4 -4
  37. package/dist/runtime/server/tsconfig.json +3 -3
  38. package/dist/runtime/styles/main.css +1 -1
  39. package/dist/runtime/theme/dialog.d.ts +6 -4
  40. package/dist/runtime/theme/dialog.js +7 -5
  41. package/dist/runtime/theme/input.d.ts +3 -0
  42. package/dist/runtime/theme/input.js +4 -1
  43. package/dist/runtime/theme/uploadFileDropzone.d.ts +11 -9
  44. package/dist/runtime/theme/uploadFileDropzone.js +11 -9
  45. package/package.json +3 -7
@@ -11,12 +11,12 @@
11
11
  <h1 class="truncate font-bold">
12
12
  {{ selectedFile.name }}
13
13
  </h1>
14
- <p class="truncate font-light text-error">
14
+ <p class="text-error truncate font-light">
15
15
  {{ uploadFailedLabel }}
16
16
  </p>
17
17
  <Button
18
18
  variant="link"
19
- :icon="themeStatic.actionRetryIcon"
19
+ :icon="icons.actionRetryIcon"
20
20
  :class="theme.actionRetryBtnClass()"
21
21
  color="primary"
22
22
  @click="$emit('retry')"
@@ -25,7 +25,7 @@
25
25
  </Button>
26
26
  </div>
27
27
  <Icon
28
- :name="themeStatic.actionDeleteIcon"
28
+ :name="icons.actionDeleteIcon"
29
29
  :class="theme.actionDeleteIconClass()"
30
30
  title="ลบไฟล์"
31
31
  @click="$emit('delete')"
@@ -36,7 +36,7 @@
36
36
 
37
37
  <script setup>
38
38
  import { isImage } from "#core/helpers/componentHelper";
39
- import { useUiConfigStatic } from "#imports";
39
+ import { useUiIconConfig } from "#imports";
40
40
  const props = defineProps({
41
41
  theme: { type: null, required: true },
42
42
  selectedFile: { type: null, required: true },
@@ -44,11 +44,11 @@ const props = defineProps({
44
44
  retryLabel: { type: String, required: true }
45
45
  });
46
46
  defineEmits(["retry", "delete"]);
47
- const themeStatic = useUiConfigStatic("uploadFileDropzone");
47
+ const icons = useUiIconConfig("uploadFileDropzone");
48
48
  const getFileIcon = (file) => {
49
49
  if (isImage(file)) {
50
- return themeStatic.placeholderImgIcon;
50
+ return icons.placeholderImgIcon;
51
51
  }
52
- return themeStatic.filePreviewIcon;
52
+ return icons.filePreviewIcon;
53
53
  };
54
54
  </script>
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
  <div>
19
19
  <Icon
20
- :name="themeStatic.loadingIcon"
20
+ :name="icons.loadingIcon"
21
21
  :class="theme.onLoadingLoadingIconClass()"
22
22
  />
23
23
  </div>
@@ -27,19 +27,19 @@
27
27
 
28
28
  <script setup>
29
29
  import { isImage } from "#core/helpers/componentHelper";
30
- import { useUiConfigStatic } from "#imports";
30
+ import { useUiIconConfig } from "#imports";
31
31
  const props = defineProps({
32
32
  theme: { type: null, required: true },
33
33
  selectedFile: { type: null, required: true },
34
34
  percent: { type: Number, required: true },
35
35
  uploadingLabel: { type: String, required: true }
36
36
  });
37
- const themeStatic = useUiConfigStatic("uploadFileDropzone");
37
+ const icons = useUiIconConfig("uploadFileDropzone");
38
38
  const getFileIcon = (file) => {
39
39
  if (isImage(file)) {
40
- return themeStatic.placeholderImgIcon;
40
+ return icons.placeholderImgIcon;
41
41
  }
42
- return themeStatic.filePreviewIcon;
42
+ return icons.filePreviewIcon;
43
43
  };
44
44
  const getFileSize = (file) => {
45
45
  const size = file.size;
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  <div v-else>
15
15
  <Icon
16
- :name="themeStatic.filePreviewIcon"
16
+ :name="icons.filePreviewIcon"
17
17
  :class="theme.onPreviewPreviewFileClass()"
18
18
  />
19
19
  </div>
@@ -35,27 +35,27 @@
35
35
  class="flex"
36
36
  >
37
37
  <Icon
38
- :name="themeStatic.actionPreviewIcon"
38
+ :name="icons.actionPreviewIcon"
39
39
  :class="theme.actionIconClass()"
40
40
  title="ดูตัวอย่าง"
41
41
  />
42
42
  </a>
43
43
  <Icon
44
44
  v-if="isImageFromPath(value.path) || isVideoFromPath(value.path)"
45
- :name="themeStatic.actionPreviewIcon"
45
+ :name="icons.actionPreviewIcon"
46
46
  :class="theme.actionIconClass()"
47
47
  title="ดูตัวอย่าง"
48
48
  @click="$emit('preview')"
49
49
  />
50
50
  <Icon
51
- :name="themeStatic.actionDownloadIcon"
51
+ :name="icons.actionDownloadIcon"
52
52
  :class="theme.actionIconClass()"
53
53
  title="ดาวน์โหลดไฟล์"
54
54
  @click="$emit('download')"
55
55
  />
56
56
  <Icon
57
57
  v-if="!disabled && !readonly"
58
- :name="themeStatic.actionDeleteIcon"
58
+ :name="icons.actionDeleteIcon"
59
59
  :class="theme.actionIconClass()"
60
60
  title="ลบไฟล์"
61
61
  @click="$emit('delete')"
@@ -72,7 +72,7 @@ import {
72
72
  isVideoFromPath,
73
73
  useFileSize
74
74
  } from "#core/helpers/componentHelper";
75
- import { useUiConfigStatic } from "#imports";
75
+ import { useUiIconConfig } from "#imports";
76
76
  defineProps({
77
77
  theme: { type: null, required: true },
78
78
  value: { type: Object, required: true },
@@ -80,7 +80,7 @@ defineProps({
80
80
  readonly: { type: Boolean, required: false }
81
81
  });
82
82
  defineEmits(["preview", "download", "delete"]);
83
- const themeStatic = useUiConfigStatic("uploadFileDropzone");
83
+ const icons = useUiIconConfig("uploadFileDropzone");
84
84
  const getFileSizeFromValue = (fileValue) => {
85
85
  const allocate = useFileSize(fileValue.size || 0);
86
86
  return allocate.isSelectedFileUseMb.value ? `${allocate.selectedFileSizeMb.value} MB` : `${allocate.selectedFileSizeKb.value} KB`;
@@ -1,5 +1,5 @@
1
- <template>
2
- <form class="form">
3
- <slot />
4
- </form>
5
- </template>
1
+ <template>
2
+ <form class="form">
3
+ <slot />
4
+ </form>
5
+ </template>
@@ -3,6 +3,7 @@ import type { FormContext } from 'vee-validate';
3
3
  import type { IUploadDropzoneAutoField } from './InputUploadDropzoneAuto/types.js';
4
4
  import type { IDateTimeRangeField } from './InputDateTimeRange/date_range_time_field.types.js';
5
5
  import type { ITextField } from '#core/components/Form/InputText/types';
6
+ import type { ISearchField } from '#core/components/Form/InputSearch/types';
6
7
  import type { ITextareaField } from '#core/components/Form/InputTextarea/types';
7
8
  import type { IToggleField } from '#core/components/Form/InputToggle/types';
8
9
  import type { ISelectField } from '#core/components/Form/InputSelect/types';
@@ -14,6 +15,7 @@ import type { IRadioField } from '#core/components/Form/InputRadio/types';
14
15
  import type { IWYSIWYGField } from '#core/components/Form/InputWYSIWYG/types';
15
16
  export declare const enum INPUT_TYPES {
16
17
  TEXT = "TEXT",
18
+ SEARCH = "SEARCH",
17
19
  NUMBER = "NUMBER",
18
20
  TEXTAREA = "TEXTAREA",
19
21
  PASSWORD = "PASSWORD",
@@ -64,7 +66,7 @@ export interface IFormFieldBase<I extends INPUT_TYPES, P extends IFieldProps, O>
64
66
  props: P;
65
67
  on?: O;
66
68
  }
67
- export type IFormField = ITextField | INumberField | ITextareaField | IToggleField | ISelectField | ICheckboxField | ISelectMultipleField | IRadioField | IDateTimeField | IDateTimeRangeField | IUploadDropzoneAutoField | IWYSIWYGField | IFormFieldBase<INPUT_TYPES.COMPONENT, any, any>;
69
+ export type IFormField = ITextField | ISearchField | INumberField | ITextareaField | IToggleField | ISelectField | ICheckboxField | ISelectMultipleField | IRadioField | IDateTimeField | IDateTimeRangeField | IUploadDropzoneAutoField | IWYSIWYGField | IFormFieldBase<INPUT_TYPES.COMPONENT, any, any>;
68
70
  export interface IFileValue {
69
71
  url: string;
70
72
  path?: string;
@@ -1,5 +1,6 @@
1
1
  export var INPUT_TYPES = /* @__PURE__ */ ((INPUT_TYPES2) => {
2
2
  INPUT_TYPES2["TEXT"] = "TEXT";
3
+ INPUT_TYPES2["SEARCH"] = "SEARCH";
3
4
  INPUT_TYPES2["NUMBER"] = "NUMBER";
4
5
  INPUT_TYPES2["TEXTAREA"] = "TEXTAREA";
5
6
  INPUT_TYPES2["PASSWORD"] = "PASSWORD";
@@ -1,32 +1,32 @@
1
1
  <template>
2
- <UseImage v-bind="$props">
3
- <template #loading>
4
- <slot name="loading">
5
- <div
6
- class="flex h-full w-full items-center justify-center"
7
- >
8
- <Loader
9
- :loading="true"
10
- />
11
- </div>
12
- </slot>
13
- </template>
14
-
15
- <template #error>
16
- <slot name="error">
17
- <div
18
- class="flex h-full w-full items-center justify-center"
19
- >
20
- <p class="text-error-400">
21
- <Icon
22
- name="i-heroicons:exclamation-circle-solid"
23
- class="size-8 text-error-400"
24
- />
25
- </p>
26
- </div>
27
- </slot>
28
- </template>
29
- </UseImage>
2
+ <UseImage v-bind="$props">
3
+ <template #loading>
4
+ <slot name="loading">
5
+ <div
6
+ class="flex h-full w-full items-center justify-center"
7
+ >
8
+ <Loader
9
+ :loading="true"
10
+ />
11
+ </div>
12
+ </slot>
13
+ </template>
14
+
15
+ <template #error>
16
+ <slot name="error">
17
+ <div
18
+ class="flex h-full w-full items-center justify-center"
19
+ >
20
+ <p class="text-error-400">
21
+ <Icon
22
+ name="i-heroicons:exclamation-circle-solid"
23
+ class="text-error-400 size-8"
24
+ />
25
+ </p>
26
+ </div>
27
+ </slot>
28
+ </template>
29
+ </UseImage>
30
30
  </template>
31
31
 
32
32
  <script setup>
@@ -1,21 +1,21 @@
1
1
  <template>
2
- <DevOnly>
3
- <TeleportSafe
4
- to="#dev-logs"
5
- >
6
- <LogItem
7
- v-if="typeof data !== 'undefined'"
8
- :data="data"
9
- :title="title"
10
- />
11
- <LogItem
12
- v-for="(item, index) in dataItems"
13
- :key="index"
14
- :data="item"
15
- :title="`${title} #${index + 1}`"
16
- />
17
- </TeleportSafe>
18
- </DevOnly>
2
+ <DevOnly>
3
+ <TeleportSafe
4
+ to="#dev-logs"
5
+ >
6
+ <LogItem
7
+ v-if="typeof data !== 'undefined'"
8
+ :data="data"
9
+ :title="title"
10
+ />
11
+ <LogItem
12
+ v-for="(item, index) in dataItems"
13
+ :key="index"
14
+ :data="item"
15
+ :title="`${title} #${index + 1}`"
16
+ />
17
+ </TeleportSafe>
18
+ </DevOnly>
19
19
  </template>
20
20
 
21
21
  <script setup>
@@ -18,7 +18,7 @@
18
18
  <div class="flex h-60 items-center justify-center">
19
19
  <Icon
20
20
  name="i-svg-spinners:180-ring-with-bg"
21
- class="size-8 text-primary"
21
+ class="text-primary size-8"
22
22
  />
23
23
  </div>
24
24
  </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- {{ getValue || "-" }}
2
+ {{ getValue || "-" }}
3
3
  </template>
4
4
 
5
5
  <script setup>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- {{ getValue || "-" }}
2
+ {{ getValue || "-" }}
3
3
  </template>
4
4
 
5
5
  <script setup>
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <Image
3
- class="h-12 rounded"
4
- :src="getValue"
5
- />
2
+ <Image
3
+ class="h-12 rounded"
4
+ :src="getValue"
5
+ />
6
6
  </template>
7
7
 
8
8
  <script setup>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- {{ getValue }}
2
+ {{ getValue }}
3
3
  </template>
4
4
 
5
5
  <script setup>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- {{ getValue }}
2
+ {{ getValue }}
3
3
  </template>
4
4
 
5
5
  <script setup>
@@ -32,7 +32,9 @@
32
32
  name="error"
33
33
  >
34
34
  <div
35
- class="flex h-[200px] items-center justify-center text-2xl text-error-400"
35
+ class="
36
+ text-error-400 flex h-[200px] items-center justify-center text-2xl
37
+ "
36
38
  >
37
39
  {{ StringHelper.getError(options.status.errorData) }}
38
40
  </div>
@@ -1,5 +1,5 @@
1
1
  import type { core as Core } from '../../core.config.js';
2
2
  export declare const useCoreConfig: () => typeof Core;
3
3
  export declare const useUiConfig: (config: object, name: string) => any;
4
- export declare const useUiConfigStatic: (name: string) => any;
5
- export declare const useUiAllConfig: () => any;
4
+ export declare const useUiIconConfig: (name: string) => any;
5
+ export declare const useUiStaticConfig: (name: string) => any;
@@ -9,9 +9,9 @@ export const useUiConfig = (config, name) => {
9
9
  ...appConfig.ui[name] || {}
10
10
  });
11
11
  };
12
- export const useUiConfigStatic = (name) => {
13
- return appConfig.ui[name].slots;
12
+ export const useUiIconConfig = (name) => {
13
+ return appConfig.ui[name].icons;
14
14
  };
15
- export const useUiAllConfig = () => {
16
- return appConfig.ui;
15
+ export const useUiStaticConfig = (name) => {
16
+ return appConfig.ui[name].slots;
17
17
  };
@@ -1,3 +1,3 @@
1
- {
2
- "extends": "../../../.nuxt/tsconfig.server.json",
3
- }
1
+ {
2
+ "extends": "../../../.nuxt/tsconfig.server.json",
3
+ }
@@ -1 +1 @@
1
- @import "tailwindcss";@import "@nuxt/ui";@plugin "@tailwindcss/typography";@source inline("prose");@theme static{--font-sans:"Noto Sans Thai","Noto Sans Thai Looped","Public Sans",sans-serif;--color-main:#232c5a;--color-main-50:#f4f4f7;--color-main-100:#e9eaef;--color-main-200:#c8cad6;--color-main-300:#a7abbd;--color-main-400:#656b8c;--color-main-500:#232c5a;--color-main-600:#202851;--color-main-700:#151a36;--color-main-800:#101429;--color-main-900:#0b0d1b;--color-main-950:#0b0d1b;--color-secondary:#ee8b36;--color-secondary-50:#fdf1e7;--color-secondary-100:#f9d6b8;--color-secondary-200:#f5bb89;--color-secondary-300:#f1a05a;--color-secondary-400:#ed852b;--color-secondary-500:#d46b12;--color-secondary-600:#a5540e;--color-secondary-700:#763c0a;--color-secondary-800:#472406;--color-secondary-900:#180c02;--color-info:#0d8cee;--color-info-50:#f3f9fe;--color-info-100:#e7f4fd;--color-info-200:#ebf6ff;--color-info-300:#9ed1f8;--color-info-400:#56aff3;--color-info-500:#0d8cee;--color-info-600:#0c7ed6;--color-info-700:#08548f;--color-info-800:#063f6b;--color-info-900:#042a47;--color-error:#f25555;--color-error-50:#fef7f7;--color-error-100:#feeeee;--color-error-200:#ffdfdf;--color-error-300:#fabbbb;--color-error-400:#f68888;--color-error-500:#f25555;--color-error-600:#da4d4d;--color-error-700:#913333;--color-error-800:#6d2626;--color-error-900:#491a1a;--color-success:#3fb061;--color-success-50:#f5fbf7;--color-success-100:#ecf7ef;--color-success-200:#daeee0;--color-success-300:#b2dfc0;--color-success-400:#79c890;--color-success-500:#3fb061;--color-success-600:#399e57;--color-success-700:#266a3a;--color-success-800:#1c4f2c;--color-success-900:#13351d;--color-warning:#ff9a35;--color-warning-50:#fffaf5;--color-warning-100:#fff5eb;--color-warning-200:#fef1cc;--color-warning-300:#ffd7ae;--color-warning-400:#ffb872;--color-warning-500:#ff9a35;--color-warning-600:#e68b30;--color-warning-700:#995c20;--color-warning-800:#734518;--color-warning-900:#4d2e10}::-webkit-scrollbar{-webkit-appearance:none;height:10px;width:10px}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:4px;box-shadow:0 0 1px hsla(0,0%,100%,.5)}:root{--dp-font-family:inherit!important}.dp__theme_light{--dp-primary-color:var(--color-main)!important;--dp-primary-disabled-color:var(--color-main-200)!important}#__nuxt,body,html{@apply w-full h-full}
1
+ @import "tailwindcss";@import "@nuxt/ui";@plugin "@tailwindcss/typography";@source inline("prose");@theme{--font-sans:"Noto Sans Thai","Noto Sans Thai Looped","Public Sans",sans-serif}@theme static{--color-main:#232c5a;--color-main-50:#f4f4f7;--color-main-100:#e9eaef;--color-main-200:#c8cad6;--color-main-300:#a7abbd;--color-main-400:#656b8c;--color-main-500:#232c5a;--color-main-600:#202851;--color-main-700:#151a36;--color-main-800:#101429;--color-main-900:#0b0d1b;--color-main-950:#0b0d1b;--color-secondary:#ee8b36;--color-secondary-50:#fdf1e7;--color-secondary-100:#f9d6b8;--color-secondary-200:#f5bb89;--color-secondary-300:#f1a05a;--color-secondary-400:#ed852b;--color-secondary-500:#d46b12;--color-secondary-600:#a5540e;--color-secondary-700:#763c0a;--color-secondary-800:#472406;--color-secondary-900:#180c02;--color-info:#0d8cee;--color-info-50:#f3f9fe;--color-info-100:#e7f4fd;--color-info-200:#ebf6ff;--color-info-300:#9ed1f8;--color-info-400:#56aff3;--color-info-500:#0d8cee;--color-info-600:#0c7ed6;--color-info-700:#08548f;--color-info-800:#063f6b;--color-info-900:#042a47;--color-error:#f25555;--color-error-50:#fef7f7;--color-error-100:#feeeee;--color-error-200:#ffdfdf;--color-error-300:#fabbbb;--color-error-400:#f68888;--color-error-500:#f25555;--color-error-600:#da4d4d;--color-error-700:#913333;--color-error-800:#6d2626;--color-error-900:#491a1a;--color-success:#3fb061;--color-success-50:#f5fbf7;--color-success-100:#ecf7ef;--color-success-200:#daeee0;--color-success-300:#b2dfc0;--color-success-400:#79c890;--color-success-500:#3fb061;--color-success-600:#399e57;--color-success-700:#266a3a;--color-success-800:#1c4f2c;--color-success-900:#13351d;--color-warning:#ff9a35;--color-warning-50:#fffaf5;--color-warning-100:#fff5eb;--color-warning-200:#fef1cc;--color-warning-300:#ffd7ae;--color-warning-400:#ffb872;--color-warning-500:#ff9a35;--color-warning-600:#e68b30;--color-warning-700:#995c20;--color-warning-800:#734518;--color-warning-900:#4d2e10}::-webkit-scrollbar{-webkit-appearance:none;height:10px;width:10px}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:4px;box-shadow:0 0 1px hsla(0,0%,100%,.5)}:root{--dp-font-family:inherit!important}.dp__theme_light{--dp-primary-color:var(--color-main)!important;--dp-primary-disabled-color:var(--color-main-200)!important}#__nuxt,body,html{@apply w-full h-full}
@@ -1,13 +1,15 @@
1
1
  export declare const dialogTheme: {
2
- slots: {
3
- base: string;
4
- overlay: string;
5
- icon: string;
2
+ icons: {
6
3
  iconSuccess: string;
7
4
  iconInfo: string;
8
5
  iconWarning: string;
9
6
  iconError: string;
10
7
  iconConfirm: string;
8
+ };
9
+ slots: {
10
+ base: string;
11
+ overlay: string;
12
+ icon: string;
11
13
  wrapper: string;
12
14
  confirmColor: string;
13
15
  title: string;
@@ -1,13 +1,15 @@
1
1
  export const dialogTheme = {
2
- slots: {
3
- base: "flex space-x-4 shadow-lg ring ring-default z-[100] text-sm fixed top-[50%] left-[50%] max-h-[85vh] w-[90vw] max-w-[500px] translate-x-[-50%] translate-y-[-50%] rounded-lg bg-white p-[25px] focus:outline-none",
4
- overlay: "fixed inset-0 bg-elevated/75 backdrop-blur",
5
- icon: "size-12",
2
+ icons: {
6
3
  iconSuccess: "i-heroicons-check-circle",
7
4
  iconInfo: "i-heroicons-information-circle",
8
5
  iconWarning: "i-heroicons-exclamation-circle",
9
6
  iconError: "i-heroicons-x-circle",
10
- iconConfirm: "i-heroicons-information-circle",
7
+ iconConfirm: "i-heroicons-information-circle"
8
+ },
9
+ slots: {
10
+ base: "flex space-x-4 shadow-lg ring ring-default z-[100] text-sm fixed top-[50%] left-[50%] max-h-[85vh] w-[90vw] max-w-[500px] translate-x-[-50%] translate-y-[-50%] rounded-lg bg-white p-[25px] focus:outline-none",
11
+ overlay: "fixed inset-0 bg-elevated/75 backdrop-blur",
12
+ icon: "size-12",
11
13
  wrapper: "flex flex-col w-full",
12
14
  confirmColor: "info",
13
15
  title: "font-bold text-lg",
@@ -1,6 +1,9 @@
1
1
  export declare const inputTheme: {
2
2
  slots: {
3
3
  root: string;
4
+ suggestionsContainer: string;
5
+ suggestionItem: string;
6
+ suggestionItemActive: string;
4
7
  };
5
8
  defaultVariants: {
6
9
  size: string;
@@ -1,6 +1,9 @@
1
1
  export const inputTheme = {
2
2
  slots: {
3
- root: "w-full"
3
+ root: "w-full",
4
+ suggestionsContainer: "absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-md shadow max-h-60 overflow-y-auto",
5
+ suggestionItem: "px-3 py-3 text-sm cursor-pointer hover:bg-(--ui-color-primary-100) truncate",
6
+ suggestionItemActive: "bg-(--ui-color-primary-100)"
4
7
  },
5
8
  defaultVariants: {
6
9
  size: "lg"
@@ -1,4 +1,15 @@
1
1
  export declare const uploadFileDropzoneTheme: {
2
+ icons: {
3
+ filePreviewIcon: string;
4
+ uploadIcon: string;
5
+ placeholderImgIcon: string;
6
+ failedImgIcon: string;
7
+ loadingIcon: string;
8
+ actionPreviewIcon: string;
9
+ actionDownloadIcon: string;
10
+ actionDeleteIcon: string;
11
+ actionRetryIcon: string;
12
+ };
2
13
  slots: {
3
14
  base: string;
4
15
  wrapper: string;
@@ -7,11 +18,6 @@ export declare const uploadFileDropzoneTheme: {
7
18
  placeholderWrapper: string;
8
19
  placeholder: string;
9
20
  labelWrapper: string;
10
- filePreviewIcon: string;
11
- uploadIcon: string;
12
- placeholderImgIcon: string;
13
- failedImgIcon: string;
14
- loadingIcon: string;
15
21
  labelIcon: string;
16
22
  onLoadingWrapper: string;
17
23
  onLoadingPlaceholderWrapper: string;
@@ -30,10 +36,6 @@ export declare const uploadFileDropzoneTheme: {
30
36
  actionWrapper: string;
31
37
  actionIconClass: string;
32
38
  actionDeleteIconClass: string;
33
- actionPreviewIcon: string;
34
- actionDownloadIcon: string;
35
- actionDeleteIcon: string;
36
- actionRetryIcon: string;
37
39
  actionRetryBtnClass: string;
38
40
  };
39
41
  variants: {
@@ -1,4 +1,15 @@
1
1
  export const uploadFileDropzoneTheme = {
2
+ icons: {
3
+ filePreviewIcon: "i-heroicons:document-text-solid",
4
+ uploadIcon: "ri:upload-cloud-2-line",
5
+ placeholderImgIcon: "i-material-symbols:imagesmode-outline",
6
+ failedImgIcon: "i-material-symbols:imagesmode-outline",
7
+ loadingIcon: "i-svg-spinners:180-ring-with-bg",
8
+ actionPreviewIcon: "ic:outline-remove-red-eye",
9
+ actionDownloadIcon: "material-symbols:download",
10
+ actionDeleteIcon: "material-symbols:delete",
11
+ actionRetryIcon: "stash:arrow-retry"
12
+ },
2
13
  slots: {
3
14
  base: "relative w-full text-base p-4 transition rounded-md flex items-center justify-center ring-1 bg-white ring-gray-300",
4
15
  wrapper: "flex flex-col items-center w-full",
@@ -7,11 +18,6 @@ export const uploadFileDropzoneTheme = {
7
18
  placeholderWrapper: "py-4 flex flex-col items-center justify-center",
8
19
  placeholder: "text-gray-400 text-center font-light text-sm truncate",
9
20
  labelWrapper: "flex items-center space-x-2 text-gray-400 text-center",
10
- filePreviewIcon: "i-heroicons:document-text-solid",
11
- uploadIcon: "ri:upload-cloud-2-line",
12
- placeholderImgIcon: "i-material-symbols:imagesmode-outline",
13
- failedImgIcon: "i-material-symbols:imagesmode-outline",
14
- loadingIcon: "i-svg-spinners:180-ring-with-bg",
15
21
  labelIcon: "size-6 text-gray-400 text-center mb-3",
16
22
  // Loading state
17
23
  onLoadingWrapper: "flex items-center space-x-4 w-full",
@@ -34,10 +40,6 @@ export const uploadFileDropzoneTheme = {
34
40
  actionWrapper: "flex items-center space-x-2",
35
41
  actionIconClass: "size-6 text-dimmed hover:text-dimmed-600 cursor-pointer transition-colors",
36
42
  actionDeleteIconClass: "size-6 text-(--ui-color-error-500) hover:text-(--ui-color-error-600) cursor-pointer transition-colors",
37
- actionPreviewIcon: "ic:outline-remove-red-eye",
38
- actionDownloadIcon: "material-symbols:download",
39
- actionDeleteIcon: "material-symbols:delete",
40
- actionRetryIcon: "stash:arrow-retry",
41
43
  actionRetryBtnClass: "px-0"
42
44
  },
43
45
  variants: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "2.18.3",
3
+ "version": "2.20.0",
4
4
  "repository": "https://gitlab.finema.co/finema/ui-kit",
5
5
  "license": "MIT",
6
6
  "author": "Finema Dev Core Team",
@@ -72,7 +72,6 @@
72
72
  },
73
73
  "devDependencies": {
74
74
  "@eslint/js": "^9.26.0",
75
- "@hyoban/eslint-plugin-tailwindcss": "^4.0.0-alpha.12",
76
75
  "@nuxt/devtools": "^2.4.1",
77
76
  "@nuxt/eslint-config": "^1.3.1",
78
77
  "@nuxt/module-builder": "^1.0.1",
@@ -81,11 +80,8 @@
81
80
  "@types/node": "latest",
82
81
  "changelogen": "^0.5.7",
83
82
  "eslint": "^9.26.0",
84
- "eslint-config-prettier": "^9.1.0",
85
- "eslint-import-resolver-typescript": "^3.7.0",
86
- "eslint-plugin-prettier": "^5.2.1",
87
- "eslint-plugin-tailwindcss": "^3.17.5",
88
83
  "eslint-plugin-unused-imports": "^4.1.4",
84
+ "eslint-plugin-better-tailwindcss": "^3.1.0",
89
85
  "husky": "^9.1.7",
90
86
  "lint-staged": "^16.0.0",
91
87
  "nuxt": "3.17.3",
@@ -97,4 +93,4 @@
97
93
  "lint-staged": {
98
94
  "*": "eslint --fix"
99
95
  }
100
- }
96
+ }