@finema/core 2.43.2 → 2.44.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 (60) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +8 -1
  3. package/dist/runtime/components/FlexDeck/index.vue +1 -1
  4. package/dist/runtime/components/Form/InputUploadDropzone/index.vue +1 -1
  5. package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.vue +1 -1
  6. package/dist/runtime/components/Form/InputWYSIWYG/UploadImageForm.vue +1 -1
  7. package/dist/runtime/components/Form/fileState/EmptyState.vue +1 -1
  8. package/dist/runtime/components/Form/fileState/FailedState.vue +1 -1
  9. package/dist/runtime/components/Form/fileState/PreviewModal.vue +1 -1
  10. package/dist/runtime/components/Form/fileState/SuccessState.vue +1 -1
  11. package/dist/runtime/components/Image.vue +1 -1
  12. package/dist/runtime/components/Loader.vue +1 -1
  13. package/dist/runtime/components/Loader.vue.d.ts +3 -3
  14. package/dist/runtime/components/Table/Base.vue +7 -7
  15. package/dist/runtime/components/Table/Simple.vue +1 -1
  16. package/dist/runtime/components/Table/index.vue +6 -6
  17. package/dist/runtime/components/Table/index.vue.d.ts +4 -4
  18. package/dist/runtime/styles/main.css +1 -1
  19. package/dist/runtime/theme/breadcrumb.d.ts +9 -0
  20. package/dist/runtime/theme/breadcrumb.js +9 -0
  21. package/dist/runtime/theme/button.d.ts +15 -0
  22. package/dist/runtime/theme/button.js +18 -1
  23. package/dist/runtime/theme/card.d.ts +13 -0
  24. package/dist/runtime/theme/card.js +13 -0
  25. package/dist/runtime/theme/dateTime.js +1 -1
  26. package/dist/runtime/theme/dialog.d.ts +5 -1
  27. package/dist/runtime/theme/dialog.js +25 -18
  28. package/dist/runtime/theme/dropdownMenu.d.ts +17 -0
  29. package/dist/runtime/theme/dropdownMenu.js +17 -0
  30. package/dist/runtime/theme/formField.d.ts +5 -0
  31. package/dist/runtime/theme/formField.js +5 -0
  32. package/dist/runtime/theme/index.d.ts +12 -0
  33. package/dist/runtime/theme/index.js +12 -0
  34. package/dist/runtime/theme/input.d.ts +7 -0
  35. package/dist/runtime/theme/input.js +8 -1
  36. package/dist/runtime/theme/inputNumber.d.ts +5 -0
  37. package/dist/runtime/theme/inputNumber.js +6 -1
  38. package/dist/runtime/theme/inputTags.d.ts +13 -0
  39. package/dist/runtime/theme/inputTags.js +13 -0
  40. package/dist/runtime/theme/modal.d.ts +16 -0
  41. package/dist/runtime/theme/modal.js +19 -0
  42. package/dist/runtime/theme/pagination.d.ts +8 -0
  43. package/dist/runtime/theme/pagination.js +8 -0
  44. package/dist/runtime/theme/selectMenu.d.ts +8 -0
  45. package/dist/runtime/theme/selectMenu.js +11 -3
  46. package/dist/runtime/theme/slideover.d.ts +5 -0
  47. package/dist/runtime/theme/slideover.js +5 -0
  48. package/dist/runtime/theme/stepper.d.ts +16 -0
  49. package/dist/runtime/theme/stepper.js +16 -0
  50. package/dist/runtime/theme/switch.d.ts +6 -0
  51. package/dist/runtime/theme/switch.js +6 -0
  52. package/dist/runtime/theme/table.d.ts +18 -0
  53. package/dist/runtime/theme/table.js +21 -3
  54. package/dist/runtime/theme/tabs.d.ts +10 -0
  55. package/dist/runtime/theme/tabs.js +10 -0
  56. package/dist/runtime/theme/textarea.d.ts +10 -0
  57. package/dist/runtime/theme/textarea.js +10 -0
  58. package/dist/runtime/theme/toast.d.ts +6 -0
  59. package/dist/runtime/theme/toast.js +6 -0
  60. package/package.json +3 -5
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "2.43.2",
3
+ "version": "2.44.0",
4
4
  "configKey": "core",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
package/dist/module.mjs CHANGED
@@ -4,7 +4,7 @@ import * as lodash from 'lodash-es';
4
4
  import * as theme from '../dist/runtime/theme/index.js';
5
5
 
6
6
  const name = "@finema/core";
7
- const version = "2.43.2";
7
+ const version = "2.44.0";
8
8
 
9
9
  const nuxtAppOptions = {
10
10
  head: {
@@ -90,6 +90,13 @@ const module = defineNuxtModule({
90
90
  _nuxt.options.appConfig.core || {},
91
91
  core
92
92
  );
93
+ _nuxt.options.ui = defu(_nuxt.options.ui || {}, {
94
+ theme: {
95
+ colors: [
96
+ "white"
97
+ ]
98
+ }
99
+ });
93
100
  _nuxt.options.colorMode = {
94
101
  preference: "light"
95
102
  };
@@ -86,7 +86,6 @@ import { NumberHelper } from "#core/utils/NumberHelper";
86
86
  import { _debounce, useRouter, useWatchChange, useWatchTrue } from "#imports";
87
87
  import { useCoreConfig } from "#core/composables/useConfig";
88
88
  import Empty from "#core/components/Empty.vue";
89
- defineSlots();
90
89
  const emits = defineEmits(["pageChange", "search"]);
91
90
  const props = defineProps({
92
91
  options: {
@@ -98,6 +97,7 @@ const props = defineProps({
98
97
  default: ""
99
98
  }
100
99
  });
100
+ defineSlots();
101
101
  const coreConfig = useCoreConfig();
102
102
  const router = useRouter();
103
103
  const q = ref(props.options?.pageOptions.search ?? "");
@@ -40,6 +40,7 @@ import FieldWrapper from "#core/components/Form/FieldWrapper.vue";
40
40
  import { useFieldHOC } from "#core/composables/useForm";
41
41
  import { uploadFileDropzoneTheme } from "#core/theme/uploadFileDropzone";
42
42
  import { useUiConfig } from "#core/composables/useConfig";
43
+ const emits = defineEmits(["change", "delete"]);
43
44
  const props = defineProps({
44
45
  accept: { type: [Array, String], required: false },
45
46
  maxSize: { type: Number, required: false },
@@ -60,7 +61,6 @@ const props = defineProps({
60
61
  help: { type: String, required: false },
61
62
  ui: { type: null, required: false }
62
63
  });
63
- const emits = defineEmits(["change", "delete"]);
64
64
  const {
65
65
  wrapperProps,
66
66
  handleChange: onChange,
@@ -63,6 +63,7 @@ import { useFieldHOC } from "#core/composables/useForm";
63
63
  import { uploadFileDropzoneTheme } from "#core/theme/uploadFileDropzone";
64
64
  import { useUiConfig } from "#core/composables/useConfig";
65
65
  import { downloadFileFromURL } from "#core/helpers/componentHelper";
66
+ const emits = defineEmits(["change", "success", "delete"]);
66
67
  const props = defineProps({
67
68
  requestOptions: { type: Object, required: true },
68
69
  uploadPathURL: { type: String, required: false },
@@ -94,7 +95,6 @@ const props = defineProps({
94
95
  help: { type: String, required: false },
95
96
  ui: { type: null, required: false }
96
97
  });
97
- const emits = defineEmits(["change", "success", "delete"]);
98
98
  const {
99
99
  wrapperProps,
100
100
  handleChange: onChange,
@@ -17,10 +17,10 @@
17
17
 
18
18
  <script setup>
19
19
  import { ref } from "vue";
20
+ const emit = defineEmits(["submit"]);
20
21
  const props = defineProps({
21
22
  options: { type: Object, required: false }
22
23
  });
23
- const emit = defineEmits(["submit"]);
24
24
  const fileInput = ref();
25
25
  const selectedFile = ref(null);
26
26
  const handleFileSelect = (event) => {
@@ -24,12 +24,12 @@
24
24
 
25
25
  <script setup>
26
26
  import { useUiIconConfig } from "#core/composables/useConfig";
27
+ defineEmits(["openFile"]);
27
28
  defineProps({
28
29
  theme: { type: null, required: true },
29
30
  selectFileLabel: { type: String, required: true },
30
31
  selectFileSubLabel: { type: String, required: true },
31
32
  placeholder: { type: String, required: false }
32
33
  });
33
- defineEmits(["openFile"]);
34
34
  const icons = useUiIconConfig("uploadFileDropzone");
35
35
  </script>
@@ -37,13 +37,13 @@
37
37
  <script setup>
38
38
  import { isImage } from "#core/helpers/componentHelper";
39
39
  import { useUiIconConfig } from "#core/composables/useConfig";
40
+ defineEmits(["retry", "delete"]);
40
41
  const props = defineProps({
41
42
  theme: { type: null, required: true },
42
43
  selectedFile: { type: null, required: true },
43
44
  uploadFailedLabel: { type: String, required: true },
44
45
  retryLabel: { type: String, required: true }
45
46
  });
46
- defineEmits(["retry", "delete"]);
47
47
  const icons = useUiIconConfig("uploadFileDropzone");
48
48
  const getFileIcon = (file) => {
49
49
  if (isImage(file)) {
@@ -28,8 +28,8 @@
28
28
 
29
29
  <script setup>
30
30
  import { isImageFromPath, isVideoFromPath } from "#core/helpers/componentHelper";
31
+ const emits = defineEmits(["close"]);
31
32
  defineProps({
32
33
  value: { type: Object, required: false }
33
34
  });
34
- const emits = defineEmits(["close"]);
35
35
  </script>
@@ -80,13 +80,13 @@ import {
80
80
  useFileSize
81
81
  } from "#core/helpers/componentHelper";
82
82
  import { useUiIconConfig } from "#core/composables/useConfig";
83
+ defineEmits(["preview", "download", "delete"]);
83
84
  defineProps({
84
85
  theme: { type: null, required: true },
85
86
  value: { type: Object, required: true },
86
87
  disabled: { type: Boolean, required: false },
87
88
  readonly: { type: Boolean, required: false }
88
89
  });
89
- defineEmits(["preview", "download", "delete"]);
90
90
  const icons = useUiIconConfig("uploadFileDropzone");
91
91
  const getFileSizeFromValue = (fileValue) => {
92
92
  const allocate = useFileSize(fileValue.size || 0);
@@ -31,7 +31,6 @@
31
31
 
32
32
  <script setup>
33
33
  import { UseImage } from "@vueuse/components";
34
- defineSlots();
35
34
  defineProps({
36
35
  src: { type: String, required: true },
37
36
  srcset: { type: String, required: false },
@@ -48,4 +47,5 @@ defineProps({
48
47
  ismap: { type: null, required: false },
49
48
  usemap: { type: null, required: false }
50
49
  });
50
+ defineSlots();
51
51
  </script>
@@ -24,12 +24,12 @@
24
24
  import { computed } from "vue";
25
25
  import { loaderTheme } from "#core/theme/loader";
26
26
  import { useUiConfig } from "#core/composables/useConfig";
27
- defineSlots();
28
27
  const props = defineProps({
29
28
  loading: { type: Boolean, required: false, default: true },
30
29
  icon: { type: String, required: false, default: "i-svg-spinners:180-ring-with-bg" },
31
30
  ui: { type: null, required: false },
32
31
  class: { type: null, required: false }
33
32
  });
33
+ defineSlots();
34
34
  const theme = computed(() => useUiConfig(loaderTheme, "loader")());
35
35
  </script>
@@ -1,13 +1,13 @@
1
1
  import { loaderTheme } from '#core/theme/loader';
2
- type __VLS_Slots = {
3
- loading: () => any;
4
- };
5
2
  type __VLS_Props = {
6
3
  loading?: boolean;
7
4
  icon?: string;
8
5
  ui?: typeof loaderTheme['slots'];
9
6
  class?: any;
10
7
  };
8
+ type __VLS_Slots = {
9
+ loading: () => any;
10
+ };
11
11
  declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
12
  loading: boolean;
13
13
  icon: string;
@@ -82,13 +82,6 @@ import ColumnText from "#core/components/Table/ColumnText.vue";
82
82
  import { useWatchChange } from "#core/composables/useWatch";
83
83
  import UTable from "#ui/components/Table";
84
84
  import { tableTheme } from "#core/theme/table";
85
- const columnTypeComponents = {
86
- [COLUMN_TYPES.NUMBER]: ColumnNumber,
87
- [COLUMN_TYPES.IMAGE]: ColumnImage,
88
- [COLUMN_TYPES.DATE_TIME]: ColumnDateTime,
89
- [COLUMN_TYPES.DATE]: ColumnDate,
90
- [COLUMN_TYPES.TEXT]: ColumnText
91
- };
92
85
  const emits = defineEmits(["pageChange"]);
93
86
  const props = defineProps({
94
87
  status: {
@@ -117,6 +110,13 @@ const props = defineProps({
117
110
  default: false
118
111
  }
119
112
  });
113
+ const columnTypeComponents = {
114
+ [COLUMN_TYPES.NUMBER]: ColumnNumber,
115
+ [COLUMN_TYPES.IMAGE]: ColumnImage,
116
+ [COLUMN_TYPES.DATE_TIME]: ColumnDateTime,
117
+ [COLUMN_TYPES.DATE]: ColumnDate,
118
+ [COLUMN_TYPES.TEXT]: ColumnText
119
+ };
120
120
  const page = ref(props.pageOptions?.currentPage || 1);
121
121
  const theme = computed(() => useUiConfig(tableTheme, "table")());
122
122
  const uTableCompatibleColumns = computed(
@@ -26,13 +26,13 @@ import { computed, ref } from "vue";
26
26
  import Base from "#core/components/Table/Base.vue";
27
27
  import { initPageOptions } from "#core/composables/loaderPage";
28
28
  import { useCoreConfig } from "#core/composables/useConfig";
29
- defineSlots();
30
29
  const props = defineProps({
31
30
  options: {
32
31
  type: Object,
33
32
  required: true
34
33
  }
35
34
  });
35
+ defineSlots();
36
36
  const currentPage = ref(1);
37
37
  const coreConfig = useCoreConfig();
38
38
  const pageOptions = computed(() => {
@@ -110,6 +110,12 @@ import ColumnText from "#core/components/Table/ColumnText.vue";
110
110
  import ColumnNumber from "#core/components/Table/ColumnNumber.vue";
111
111
  import { tableTheme } from "#core/theme/table";
112
112
  import UTable from "#ui/components/Table";
113
+ const emits = defineEmits(["pageChange", "search"]);
114
+ const props = defineProps({
115
+ options: { type: Object, required: true },
116
+ ui: { type: null, required: false }
117
+ });
118
+ defineSlots();
113
119
  const columnTypeComponents = {
114
120
  [COLUMN_TYPES.NUMBER]: ColumnNumber,
115
121
  [COLUMN_TYPES.IMAGE]: ColumnImage,
@@ -117,12 +123,6 @@ const columnTypeComponents = {
117
123
  [COLUMN_TYPES.DATE]: ColumnDate,
118
124
  [COLUMN_TYPES.TEXT]: ColumnText
119
125
  };
120
- defineSlots();
121
- const emits = defineEmits(["pageChange", "search"]);
122
- const props = defineProps({
123
- options: { type: Object, required: true },
124
- ui: { type: null, required: false }
125
- });
126
126
  const page = ref(props.options?.pageOptions?.currentPage || 1);
127
127
  const tableContainer = ref();
128
128
  const router = useRouter();
@@ -1,14 +1,14 @@
1
1
  import type { TableSlots } from '@nuxt/ui';
2
2
  import type { ITableOptions } from '#core/components/Table/types';
3
3
  import { tableTheme } from '#core/theme/table';
4
- type Slot = TableSlots<any> & {
5
- error: (props?: Record<string, any>) => any;
6
- };
7
- type __VLS_Slots = Slot;
8
4
  type __VLS_Props = {
9
5
  options: ITableOptions<any>;
10
6
  ui?: typeof tableTheme['slots'];
11
7
  };
8
+ type __VLS_Slots = Slot;
9
+ type Slot = TableSlots<any> & {
10
+ error: (props?: Record<string, any>) => any;
11
+ };
12
12
  declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
13
13
  search: (q: string) => any;
14
14
  pageChange: (page: number) => any;
@@ -1 +1 @@
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}.dp__outer_menu_wrap{@apply ring-1 ring-gray-200}[role=dialog]{pointer-events:auto!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;--font-display:"Noto Sans Thai","Noto Sans Thai Looped","Public Sans",sans-serif}@theme static{--ui-text:var(--ui-color-neutral-800);--color-main:#1570ef;--color-main-50:#ebeeff;--color-main-100:#d1e9ff;--color-main-200:#b2ddff;--color-main-300:#84caff;--color-main-400:#53b1fd;--color-main-500:#1570ef;--color-main-600:#1570ef;--color-main-700:#175cd3;--color-main-800:#1849a9;--color-main-900:#194185;--color-main-950:#102a56;--color-warning:#f79009;--color-warning-50:#fffaeb;--color-warning-100:#fef0c7;--color-warning-200:#fedf89;--color-warning-300:#fec84b;--color-warning-400:#fdb022;--color-warning-500:#f79009;--color-warning-600:#dc6803;--color-warning-700:#b54708;--color-warning-800:#93370d;--color-warning-900:#7a2e0e;--color-warning-950:#4e1d09;--color-success:#17b26a;--color-success-50:#ecfdf3;--color-success-100:#dcfae6;--color-success-200:#abefc6;--color-success-300:#75e0a7;--color-success-400:#47cd89;--color-success-500:#17b26a;--color-success-600:#079455;--color-success-700:#067647;--color-success-800:#085d3a;--color-success-900:#074d31;--color-success-950:#053321;--color-error:#e11d48;--color-error-50:#fef2f2;--color-error-100:#fee2e2;--color-error-200:#f0899f;--color-error-300:#eb6582;--color-error-400:#e64065;--color-error-500:#e11d48;--color-error-600:#af1738;--color-error-700:#7e1028;--color-error-800:#4c0a18;--color-error-900:#1a0308;--color-error-950:#010000;--color-info:#2563eb;--color-info-50:#dde9ff;--color-info-100:#c8dfff;--color-info-200:#a1c4ff;--color-info-300:#7aa9ff;--color-info-400:#538eff;--color-info-500:#2563eb;--color-info-600:#1a4aaf;--color-info-700:#0f318a;--color-info-800:#081f65;--color-info-900:#020b3a;--color-info-950:#000;--color-white:#fff;--color-white-50:#fff;--color-white-100:#fff;--color-white-200:#fff;--color-white-300:#fff;--color-white-400:#fff;--color-white-500:#fff;--color-white-600:#e3e3e3;--color-white-700:#c7c7c7;--color-white-800:#ababab;--color-white-900:#8f8f8f;--color-white-950:#818181}html{@apply text-sm lg:text-base;font-family:Noto Sans Thai,Noto Sans Thai Looped,Public Sans,sans-serif}::-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}.dp__outer_menu_wrap{@apply ring-1 ring-gray-200}[role=dialog]{pointer-events:auto!important}#__nuxt,body,html{@apply w-full h-full}.dp__main{display:block!important}.dp__menu{border:none!important}.dp__pointer{height:44px!important}.dp__outer_menu_wrap{box-shadow:none!important}.dp--menu-wrapper{@apply ring-1 ring-slate-300}
@@ -0,0 +1,9 @@
1
+ export declare const breadcrumbTheme: {
2
+ variants: {
3
+ active: {
4
+ true: {
5
+ link: string;
6
+ };
7
+ };
8
+ };
9
+ };
@@ -0,0 +1,9 @@
1
+ export const breadcrumbTheme = {
2
+ variants: {
3
+ active: {
4
+ true: {
5
+ link: "text-black font-semibold"
6
+ }
7
+ }
8
+ }
9
+ };
@@ -2,4 +2,19 @@ export declare const buttonTheme: {
2
2
  slots: {
3
3
  base: string[];
4
4
  };
5
+ variants: {
6
+ size: {
7
+ xl: {
8
+ base: string;
9
+ };
10
+ };
11
+ };
12
+ compoundVariants: {
13
+ color: string;
14
+ variant: string;
15
+ class: string;
16
+ }[];
17
+ defaultVariants: {
18
+ size: string;
19
+ };
5
20
  };
@@ -1,5 +1,22 @@
1
1
  export const buttonTheme = {
2
2
  slots: {
3
- base: ["cursor-pointer"]
3
+ base: ["rounded-lg cursor-pointer"]
4
+ },
5
+ variants: {
6
+ size: {
7
+ xl: {
8
+ base: "py-2.5 font-semibold"
9
+ }
10
+ }
11
+ },
12
+ compoundVariants: [
13
+ {
14
+ color: "white",
15
+ variant: "solid",
16
+ class: "text-black"
17
+ }
18
+ ],
19
+ defaultVariants: {
20
+ size: "xl"
4
21
  }
5
22
  };
@@ -0,0 +1,13 @@
1
+ export declare const cardTheme: {
2
+ slots: {
3
+ root: string;
4
+ header: string;
5
+ };
6
+ variants: {
7
+ variant: {
8
+ soft: {
9
+ root: string;
10
+ };
11
+ };
12
+ };
13
+ };
@@ -0,0 +1,13 @@
1
+ export const cardTheme = {
2
+ slots: {
3
+ root: "!bg-white",
4
+ header: "text-lg font-bold"
5
+ },
6
+ variants: {
7
+ variant: {
8
+ soft: {
9
+ root: "bg-elevated/50 divide-y divide-default shadow-[0px_2px_14px_0px_rgba(0,0,0,0.06)]"
10
+ }
11
+ }
12
+ }
13
+ };
@@ -1,5 +1,5 @@
1
1
  export const dateTimeTheme = {
2
2
  slots: {
3
- clearIcon: "size-4 cursor-pointer text-gray-300 hover:text-gray-200"
3
+ clearIcon: "size-6 mr-3"
4
4
  }
5
5
  };
@@ -8,7 +8,7 @@ export declare const dialogTheme: {
8
8
  iconLoading: string;
9
9
  };
10
10
  slots: {
11
- base: string;
11
+ base: string[];
12
12
  overlay: string;
13
13
  iconWrapper: string;
14
14
  icon: string;
@@ -24,15 +24,19 @@ export declare const dialogTheme: {
24
24
  color: {
25
25
  success: {
26
26
  icon: string;
27
+ iconWrapper: string;
27
28
  };
28
29
  info: {
29
30
  icon: string;
31
+ iconWrapper: string;
30
32
  };
31
33
  warning: {
32
34
  icon: string;
35
+ iconWrapper: string;
33
36
  };
34
37
  error: {
35
38
  icon: string;
39
+ iconWrapper: string;
36
40
  };
37
41
  loading: {
38
42
  icon: string;
@@ -1,42 +1,49 @@
1
1
  export const dialogTheme = {
2
2
  icons: {
3
3
  iconSuccess: "i-heroicons-check-circle",
4
- iconInfo: "i-heroicons-information-circle",
4
+ iconInfo: "material-symbols:info-outline",
5
5
  iconWarning: "i-heroicons-exclamation-circle",
6
6
  iconError: "i-heroicons-x-circle",
7
- iconConfirm: "i-heroicons-information-circle",
7
+ iconConfirm: "material-symbols:info-outline",
8
8
  iconLoading: "i-svg-spinners:180-ring-with-bg"
9
9
  },
10
10
  slots: {
11
- 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",
12
- overlay: "fixed inset-0 bg-elevated/75 backdrop-blur",
13
- iconWrapper: "",
14
- icon: "size-12",
15
- wrapper: "flex flex-col w-full",
11
+ base: [
12
+ "rounded-xl flex-col justify-start items-start space-x-0 bg-[url(/dialog-bg.png)] bg-no-repeat bg-top-left bg-size-[220px]",
13
+ "max-sm:top-auto max-sm:bottom-0 max-sm:left-0 max-sm:right-0 max-sm:translate-x-0 max-sm:translate-y-0 max-sm:w-full max-sm:max-w-full max-sm:rounded-b-none max-sm:rounded-t-xl"
14
+ ],
15
+ overlay: "bg-black/50 backdrop-blur",
16
+ iconWrapper: "rounded-full size-[48px] flex justify-center items-center",
17
+ icon: "size-6",
18
+ wrapper: "justify-start items-start",
16
19
  confirmColor: "info",
17
- title: "font-bold text-lg",
18
- description: "text-neutral-400 text-sm",
19
- buttonGroup: "flex justify-end items-center space-x-3 mt-4",
20
- confirmButton: "",
21
- cancelButton: ""
20
+ title: "mt-4",
21
+ description: "whitespace-pre-line",
22
+ buttonGroup: "justify-center w-full mt-6",
23
+ confirmButton: "w-full justify-center",
24
+ cancelButton: "w-full justify-center"
22
25
  },
23
26
  variants: {
24
27
  color: {
25
28
  success: {
26
- icon: "text-success"
29
+ icon: "text-success",
30
+ iconWrapper: "bg-success/10"
27
31
  },
28
32
  info: {
29
- icon: "text-info"
33
+ icon: "text-info",
34
+ iconWrapper: "bg-info/10"
30
35
  },
31
36
  warning: {
32
- icon: "text-warning"
37
+ icon: "text-warning",
38
+ iconWrapper: "bg-warning/10"
33
39
  },
34
40
  error: {
35
- icon: "text-error"
41
+ icon: "text-error",
42
+ iconWrapper: "bg-error/10"
36
43
  },
37
44
  loading: {
38
- icon: "text-primary",
39
- base: "max-w-[400px]",
45
+ icon: "text-primary size-10",
46
+ base: "max-w-[400px] bg-none",
40
47
  wrapper: "justify-center"
41
48
  }
42
49
  },
@@ -0,0 +1,17 @@
1
+ export declare const dropdownMenuTheme: {
2
+ slots: {
3
+ content: string;
4
+ item: string;
5
+ clearIcon: string;
6
+ };
7
+ variants: {
8
+ size: {
9
+ lg: {
10
+ content: string;
11
+ };
12
+ };
13
+ };
14
+ defaultVariants: {
15
+ size: string;
16
+ };
17
+ };
@@ -0,0 +1,17 @@
1
+ export const dropdownMenuTheme = {
2
+ slots: {
3
+ content: "cursor-pointer w-full",
4
+ item: "cursor-pointer max-sm:h-14",
5
+ clearIcon: "size-6"
6
+ },
7
+ variants: {
8
+ size: {
9
+ lg: {
10
+ content: "text-sm py-2.5 disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed"
11
+ }
12
+ }
13
+ },
14
+ defaultVariants: {
15
+ size: "lg"
16
+ }
17
+ };
@@ -0,0 +1,5 @@
1
+ export declare const formFieldTheme: {
2
+ slots: {
3
+ label: string;
4
+ };
5
+ };
@@ -0,0 +1,5 @@
1
+ export const formFieldTheme = {
2
+ slots: {
3
+ label: "font-bold"
4
+ }
5
+ };
@@ -13,3 +13,15 @@ export { uploadFileDropzoneTheme as uploadFileDropzone } from './uploadFileDropz
13
13
  export { dateTimeTheme as dateTime } from './dateTime.js';
14
14
  export { radioGroupTheme as radioGroup } from './radioGroup.js';
15
15
  export { wysiwygTheme as wysiwyg } from './wysiwyg.js';
16
+ export { slideoverTheme as slideover } from './slideover.js';
17
+ export { toastTheme as toast } from './toast.js';
18
+ export { cardTheme as card } from './card.js';
19
+ export { switchTheme as switch } from './switch.js';
20
+ export { breadcrumbTheme as breadcrumb } from './breadcrumb.js';
21
+ export { tabsTheme as tabs } from './tabs.js';
22
+ export { modalTheme as modal } from './modal.js';
23
+ export { paginationTheme as pagination } from './pagination.js';
24
+ export { formFieldTheme as formField } from './formField.js';
25
+ export { inputTagsTheme as inputTags } from './inputTags.js';
26
+ export { stepperTheme as stepper } from './stepper.js';
27
+ export { dropdownMenuTheme as dropdownMenu } from './dropdownMenu.js';
@@ -13,3 +13,15 @@ export { uploadFileDropzoneTheme as uploadFileDropzone } from "./uploadFileDropz
13
13
  export { dateTimeTheme as dateTime } from "./dateTime.js";
14
14
  export { radioGroupTheme as radioGroup } from "./radioGroup.js";
15
15
  export { wysiwygTheme as wysiwyg } from "./wysiwyg.js";
16
+ export { slideoverTheme as slideover } from "./slideover.js";
17
+ export { toastTheme as toast } from "./toast.js";
18
+ export { cardTheme as card } from "./card.js";
19
+ export { switchTheme as switch } from "./switch.js";
20
+ export { breadcrumbTheme as breadcrumb } from "./breadcrumb.js";
21
+ export { tabsTheme as tabs } from "./tabs.js";
22
+ export { modalTheme as modal } from "./modal.js";
23
+ export { paginationTheme as pagination } from "./pagination.js";
24
+ export { formFieldTheme as formField } from "./formField.js";
25
+ export { inputTagsTheme as inputTags } from "./inputTags.js";
26
+ export { stepperTheme as stepper } from "./stepper.js";
27
+ export { dropdownMenuTheme as dropdownMenu } from "./dropdownMenu.js";
@@ -5,6 +5,13 @@ export declare const inputTheme: {
5
5
  suggestionItem: string;
6
6
  suggestionItemActive: string;
7
7
  };
8
+ variants: {
9
+ size: {
10
+ xl: {
11
+ base: string;
12
+ };
13
+ };
14
+ };
8
15
  defaultVariants: {
9
16
  size: string;
10
17
  };
@@ -5,7 +5,14 @@ export const inputTheme = {
5
5
  suggestionItem: "px-3 py-3 text-sm cursor-pointer hover:bg-(--ui-color-primary-100) truncate",
6
6
  suggestionItemActive: "bg-(--ui-color-primary-100)"
7
7
  },
8
+ variants: {
9
+ size: {
10
+ xl: {
11
+ base: "py-2.5 disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed"
12
+ }
13
+ }
14
+ },
8
15
  defaultVariants: {
9
- size: "lg"
16
+ size: "xl"
10
17
  }
11
18
  };
@@ -2,6 +2,11 @@ export declare const inputNumberTheme: {
2
2
  slots: {
3
3
  root: string;
4
4
  };
5
+ variants: {
6
+ size: {
7
+ xl: string;
8
+ };
9
+ };
5
10
  defaultVariants: {
6
11
  size: string;
7
12
  };
@@ -2,7 +2,12 @@ export const inputNumberTheme = {
2
2
  slots: {
3
3
  root: "w-full"
4
4
  },
5
+ variants: {
6
+ size: {
7
+ xl: "py-2.5 disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed"
8
+ }
9
+ },
5
10
  defaultVariants: {
6
- size: "lg"
11
+ size: "xl"
7
12
  }
8
13
  };
@@ -0,0 +1,13 @@
1
+ export declare const inputTagsTheme: {
2
+ variants: {
3
+ size: {
4
+ xl: {
5
+ base: string;
6
+ item: string;
7
+ };
8
+ };
9
+ };
10
+ defaultVariants: {
11
+ size: string;
12
+ };
13
+ };
@@ -0,0 +1,13 @@
1
+ export const inputTagsTheme = {
2
+ variants: {
3
+ size: {
4
+ xl: {
5
+ base: "py-2.5 min-h-[100px] items-start disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed w-full",
6
+ item: "bg-white"
7
+ }
8
+ }
9
+ },
10
+ defaultVariants: {
11
+ size: "xl"
12
+ }
13
+ };
@@ -0,0 +1,16 @@
1
+ export declare const modalTheme: {
2
+ slots: {
3
+ overlay: string;
4
+ title: string;
5
+ content: string[];
6
+ body: string;
7
+ footer: string;
8
+ };
9
+ variants: {
10
+ fullscreen: {
11
+ false: {
12
+ content: string;
13
+ };
14
+ };
15
+ };
16
+ };
@@ -0,0 +1,19 @@
1
+ export const modalTheme = {
2
+ slots: {
3
+ overlay: "bg-[#0C111D]/60 backdrop-blur",
4
+ title: "text-xl font-bold",
5
+ content: [
6
+ "divide-none overflow-visible flex flex-col",
7
+ "max-sm:top-auto max-sm:bottom-0 max-sm:left-0 max-sm:right-0 max-sm:translate-x-0 max-sm:translate-y-0 max-sm:w-full max-sm:max-w-full max-sm:h-auto max-sm:max-h-[90dvh] max-sm:rounded-b-none max-sm:rounded-t-lg"
8
+ ],
9
+ body: "!pt-0 overflow-y-auto flex-1 overflow-x-visible",
10
+ footer: "w-full"
11
+ },
12
+ variants: {
13
+ fullscreen: {
14
+ false: {
15
+ content: "overflow-visible"
16
+ }
17
+ }
18
+ }
19
+ };
@@ -0,0 +1,8 @@
1
+ export declare const paginationTheme: {
2
+ slots: {
3
+ first: string;
4
+ prev: string;
5
+ next: string;
6
+ last: string;
7
+ };
8
+ };
@@ -0,0 +1,8 @@
1
+ export const paginationTheme = {
2
+ slots: {
3
+ first: "disabled:hidden",
4
+ prev: "disabled:hidden",
5
+ next: "disabled:hidden",
6
+ last: "disabled:hidden"
7
+ }
8
+ };
@@ -5,12 +5,20 @@ export declare const selectMenuTheme: {
5
5
  selectedWrapper: string;
6
6
  selectedLabel: string;
7
7
  clearIcon: string;
8
+ item: string;
8
9
  tagsWrapper: string;
9
10
  tagsItem: string;
10
11
  tagsItemText: string;
11
12
  tagsItemDelete: string[];
12
13
  tagsItemDeleteIcon: string;
13
14
  };
15
+ variants: {
16
+ size: {
17
+ xl: {
18
+ base: string;
19
+ };
20
+ };
21
+ };
14
22
  defaultVariants: {
15
23
  size: string;
16
24
  };
@@ -1,10 +1,11 @@
1
1
  export const selectMenuTheme = {
2
2
  slots: {
3
- base: "w-full",
3
+ base: "cursor-pointer w-full",
4
4
  trailingIcon: "group-data-[state=open]:rotate-180 transition-transform duration-200",
5
5
  selectedWrapper: "flex w-full items-center justify-between",
6
6
  selectedLabel: "truncate",
7
- clearIcon: "size-4 cursor-pointer text-gray-300 hover:text-gray-200",
7
+ clearIcon: "size-6",
8
+ item: "cursor-pointer max-sm:h-14",
8
9
  tagsWrapper: "flex flex-wrap gap-x-2 gap-y-1",
9
10
  tagsItem: "px-1.5 py-0.5 rounded-sm inline-flex items-center gap-0.5 bg-primary text-white data-disabled:cursor-not-allowed data-disabled:opacity-75",
10
11
  tagsItemText: "flex items-center gap-x-1 text-sm",
@@ -14,7 +15,14 @@ export const selectMenuTheme = {
14
15
  ],
15
16
  tagsItemDeleteIcon: "ph:x"
16
17
  },
18
+ variants: {
19
+ size: {
20
+ xl: {
21
+ base: "py-2.5 disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed"
22
+ }
23
+ }
24
+ },
17
25
  defaultVariants: {
18
- size: "lg"
26
+ size: "xl"
19
27
  }
20
28
  };
@@ -0,0 +1,5 @@
1
+ export declare const slideoverTheme: {
2
+ slots: {
3
+ overlay: string;
4
+ };
5
+ };
@@ -0,0 +1,5 @@
1
+ export const slideoverTheme = {
2
+ slots: {
3
+ overlay: "bg-black/50 backdrop-blur"
4
+ }
5
+ };
@@ -0,0 +1,16 @@
1
+ export declare const stepperTheme: {
2
+ variants: {
3
+ size: {
4
+ xs: {
5
+ trigger: string;
6
+ icon: string;
7
+ title: string;
8
+ description: string;
9
+ wrapper: string;
10
+ };
11
+ };
12
+ };
13
+ defaultVariants: {
14
+ size: string;
15
+ };
16
+ };
@@ -0,0 +1,16 @@
1
+ export const stepperTheme = {
2
+ variants: {
3
+ size: {
4
+ xs: {
5
+ trigger: "size-8",
6
+ icon: "size-6",
7
+ title: "text-base font-bold",
8
+ description: "text-sm",
9
+ wrapper: "mt-1.5"
10
+ }
11
+ }
12
+ },
13
+ defaultVariants: {
14
+ size: "xs"
15
+ }
16
+ };
@@ -0,0 +1,6 @@
1
+ export declare const switchTheme: {
2
+ slots: {
3
+ base: string;
4
+ label: string;
5
+ };
6
+ };
@@ -0,0 +1,6 @@
1
+ export const switchTheme = {
2
+ slots: {
3
+ base: "cursor-pointer",
4
+ label: "cursor-pointer"
5
+ }
6
+ };
@@ -1,10 +1,28 @@
1
1
  export declare const tableTheme: {
2
2
  slots: {
3
+ root: string;
3
4
  searchContainer: string;
4
5
  captionContainer: string;
5
6
  captionBoldText: string;
6
7
  errorMessage: string;
7
8
  paginationContainer: string;
8
9
  paginationInfo: string;
10
+ thead: string;
11
+ th: string;
12
+ td: string;
13
+ };
14
+ variants: {
15
+ pinned: {
16
+ true: {
17
+ th: string;
18
+ td: string;
19
+ };
20
+ };
21
+ sticky: {
22
+ true: {
23
+ thead: string;
24
+ tfoot: string;
25
+ };
26
+ };
9
27
  };
10
28
  };
@@ -1,10 +1,28 @@
1
1
  export const tableTheme = {
2
2
  slots: {
3
+ root: "rounded-t-md rounded-b-md bg-white",
3
4
  searchContainer: "mb-4 flex justify-end",
4
- captionContainer: "mb-4 text-gray-500",
5
+ captionContainer: "hidden",
5
6
  captionBoldText: "font-bold",
6
7
  errorMessage: "text-error-400 text-2xl h-[200px] flex justify-center items-center",
7
- paginationContainer: "mt-4 flex justify-between px-3",
8
- paginationInfo: "text-sm text-gray-500"
8
+ paginationContainer: "items-center flex-col lg:flex-row gap-4",
9
+ paginationInfo: "text-gray-600",
10
+ thead: "bg-primary",
11
+ th: "text-[#222222] bg-white whitespace-nowrap",
12
+ td: "text-[#222222]"
13
+ },
14
+ variants: {
15
+ pinned: {
16
+ true: {
17
+ th: "sticky bg-gray-100 data-[pinned=left]:left-0 data-[pinned=right]:right-0 z-[100] ",
18
+ td: "sticky bg-gray-50 data-[pinned=left]:left-0 data-[pinned=right]:right-0 "
19
+ }
20
+ },
21
+ sticky: {
22
+ true: {
23
+ thead: "sticky top-0 inset-x-0 bg-primary z-[1] backdrop-blur",
24
+ tfoot: "sticky bottom-0 inset-x-0 bg-white z-[1] backdrop-blur"
25
+ }
26
+ }
9
27
  }
10
28
  };
@@ -0,0 +1,10 @@
1
+ export declare const tabsTheme: {
2
+ slots: {
3
+ label: string;
4
+ list: string;
5
+ trigger: string;
6
+ };
7
+ defaultVariants: {
8
+ size: string;
9
+ };
10
+ };
@@ -0,0 +1,10 @@
1
+ export const tabsTheme = {
2
+ slots: {
3
+ label: "whitespace-nowrap",
4
+ list: "relative flex p-1 group overflow-x-auto overflow-y-hidden scrollbar-hide",
5
+ trigger: "data-[state=active]:font-bold cursor-pointer whitespace-nowrap shrink-0"
6
+ },
7
+ defaultVariants: {
8
+ size: "xl"
9
+ }
10
+ };
@@ -2,4 +2,14 @@ export declare const textareaTheme: {
2
2
  slots: {
3
3
  root: string;
4
4
  };
5
+ variants: {
6
+ size: {
7
+ xl: {
8
+ base: string;
9
+ };
10
+ };
11
+ };
12
+ defaultVariants: {
13
+ size: string;
14
+ };
5
15
  };
@@ -1,5 +1,15 @@
1
1
  export const textareaTheme = {
2
2
  slots: {
3
3
  root: "w-full"
4
+ },
5
+ variants: {
6
+ size: {
7
+ xl: {
8
+ base: "py-2.5 disabled:bg-[#F5F5F5] disabled:text-[#737373] disabled:cursor-not-allowed"
9
+ }
10
+ }
11
+ },
12
+ defaultVariants: {
13
+ size: "xl"
4
14
  }
5
15
  };
@@ -0,0 +1,6 @@
1
+ export declare const toastTheme: {
2
+ slots: {
3
+ root: string;
4
+ icon: string;
5
+ };
6
+ };
@@ -0,0 +1,6 @@
1
+ export const toastTheme = {
2
+ slots: {
3
+ root: "rounded-xl",
4
+ icon: "size-8"
5
+ }
6
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "2.43.2",
3
+ "version": "2.44.0",
4
4
  "repository": "https://gitlab.finema.co/finema/ui-kit",
5
5
  "license": "MIT",
6
6
  "author": "Finema Dev Core Team",
@@ -72,6 +72,7 @@
72
72
  },
73
73
  "devDependencies": {
74
74
  "@eslint/js": "^9.26.0",
75
+ "@finema/eslint-config": "^2.0.3",
75
76
  "@nuxt/devtools": "^2.6.0",
76
77
  "@nuxt/eslint-config": "^1.4.1",
77
78
  "@nuxt/module-builder": "^1.0.2",
@@ -79,9 +80,6 @@
79
80
  "@nuxt/test-utils": "^3.19.0",
80
81
  "@types/node": "latest",
81
82
  "changelogen": "^0.6.1",
82
- "eslint": "^9.26.0",
83
- "eslint-plugin-unused-imports": "^4.1.4",
84
- "eslint-plugin-better-tailwindcss": "^3.3.0",
85
83
  "husky": "^9.1.7",
86
84
  "lint-staged": "^16.0.0",
87
85
  "nuxt": "^4.0.2",
@@ -93,4 +91,4 @@
93
91
  "lint-staged": {
94
92
  "*": "eslint --fix --quiet"
95
93
  }
96
- }
94
+ }