@antify/ui 2.2.1 → 2.2.4

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 (147) hide show
  1. package/dist/components/AntAccordion.vue +25 -12
  2. package/dist/components/AntAccordionItem.vue +28 -13
  3. package/dist/components/AntAlert.vue +25 -15
  4. package/dist/components/AntCard.vue +26 -14
  5. package/dist/components/AntContent.vue +4 -4
  6. package/dist/components/AntDropdown.vue +41 -23
  7. package/dist/components/AntIcon.vue +18 -6
  8. package/dist/components/AntKeycap.vue +31 -16
  9. package/dist/components/AntListGroup.vue +13 -11
  10. package/dist/components/AntListGroupItem.vue +19 -9
  11. package/dist/components/AntModal.vue +26 -15
  12. package/dist/components/AntPagination.vue +28 -15
  13. package/dist/components/AntPopover.vue +74 -51
  14. package/dist/components/AntSkeleton.vue +8 -4
  15. package/dist/components/AntSpinner.vue +14 -6
  16. package/dist/components/AntTag.vue +25 -13
  17. package/dist/components/AntToast.vue +19 -11
  18. package/dist/components/AntToaster.vue +13 -5
  19. package/dist/components/AntTooltip.vue +78 -54
  20. package/dist/components/__stories/AntAccordion.stories.js +4 -4
  21. package/dist/components/__stories/AntAccordion.stories.mjs +50 -17
  22. package/dist/components/__stories/AntAlert.stories.mjs +18 -5
  23. package/dist/components/__stories/AntCard.stories.mjs +36 -10
  24. package/dist/components/__stories/AntContent.stories.mjs +14 -4
  25. package/dist/components/__stories/AntDropdown.stories.mjs +20 -4
  26. package/dist/components/__stories/AntIcon.stories.mjs +38 -12
  27. package/dist/components/__stories/AntKeycap.stories.mjs +35 -10
  28. package/dist/components/__stories/AntListGroup.stories.d.ts +1 -1
  29. package/dist/components/__stories/AntListGroup.stories.mjs +22 -4
  30. package/dist/components/__stories/AntListGroupItem.stories.mjs +27 -8
  31. package/dist/components/__stories/AntModal.stories.mjs +17 -4
  32. package/dist/components/__stories/AntPagination.stories.mjs +21 -6
  33. package/dist/components/__stories/AntPopover.stories.mjs +20 -4
  34. package/dist/components/__stories/AntSkeleton.stories.mjs +17 -5
  35. package/dist/components/__stories/AntSpinner.stories.mjs +33 -9
  36. package/dist/components/__stories/AntTag.stories.mjs +28 -8
  37. package/dist/components/__stories/AntToast.stories.mjs +19 -5
  38. package/dist/components/__stories/AntToaster.stories.d.ts +1 -1
  39. package/dist/components/__stories/AntToaster.stories.mjs +35 -9
  40. package/dist/components/__stories/AntTooltip.stories.js +1 -1
  41. package/dist/components/__stories/AntTooltip.stories.mjs +44 -13
  42. package/dist/components/buttons/AntActionButton.vue +38 -29
  43. package/dist/components/buttons/AntButton.vue +34 -13
  44. package/dist/components/buttons/AntCreateButton.vue +11 -4
  45. package/dist/components/buttons/AntDeleteButton.vue +11 -4
  46. package/dist/components/buttons/AntDuplicateButton.vue +11 -4
  47. package/dist/components/buttons/AntEditButton.vue +11 -4
  48. package/dist/components/buttons/AntSaveAndNewButton.vue +11 -4
  49. package/dist/components/buttons/AntSaveButton.vue +11 -4
  50. package/dist/components/buttons/__stories/AntActionButton.stories.mjs +35 -10
  51. package/dist/components/buttons/__stories/AntButton.stories.mjs +77 -23
  52. package/dist/components/buttons/__stories/AntCreateButton.stories.mjs +25 -7
  53. package/dist/components/buttons/__stories/AntDeleteButton.stories.mjs +25 -7
  54. package/dist/components/buttons/__stories/AntDuplicateButton.stories.mjs +25 -7
  55. package/dist/components/buttons/__stories/AntEditButton.stories.mjs +25 -7
  56. package/dist/components/buttons/__stories/AntSaveAndNewButton.stories.mjs +25 -7
  57. package/dist/components/buttons/__stories/AntSaveButton.stories.mjs +25 -7
  58. package/dist/components/crud/AntCrud.vue +6 -6
  59. package/dist/components/crud/AntCrudDetail.vue +8 -5
  60. package/dist/components/crud/AntCrudDetailActions.vue +14 -8
  61. package/dist/components/crud/AntCrudDetailNav.vue +21 -13
  62. package/dist/components/crud/AntCrudTableFilter.vue +29 -17
  63. package/dist/components/crud/AntCrudTableNav.vue +36 -22
  64. package/dist/components/crud/__stories/AntCrud.stories.mjs +17 -5
  65. package/dist/components/crud/__stories/AntCrudDetail.stories.mjs +11 -3
  66. package/dist/components/crud/__stories/AntCrudDetailActions.stories.mjs +10 -2
  67. package/dist/components/crud/__stories/AntCrudDetailNav.stories.mjs +11 -3
  68. package/dist/components/crud/__stories/AntCrudTableFilter.stories.mjs +17 -5
  69. package/dist/components/crud/__stories/AntCrudTableNav.stories.mjs +23 -7
  70. package/dist/components/dialogs/AntDeleteDialog.vue +13 -5
  71. package/dist/components/dialogs/AntDialog.vue +23 -13
  72. package/dist/components/dialogs/__stories/AndDeleteDialog.stories.mjs +12 -3
  73. package/dist/components/dialogs/__stories/AntDialog.stories.mjs +28 -7
  74. package/dist/components/forms/AntField.vue +18 -7
  75. package/dist/components/forms/AntFormGroup.vue +9 -5
  76. package/dist/components/forms/AntFormGroupLabel.vue +1 -1
  77. package/dist/components/forms/__stories/AntField.stories.mjs +37 -9
  78. package/dist/components/forms/__stories/AntFormGroup.stories.mjs +20 -5
  79. package/dist/components/forms/__stories/AntFormGroupLabel.stories.mjs +11 -3
  80. package/dist/components/index.d.ts +1 -1
  81. package/dist/components/inputs/AntCheckbox.vue +60 -36
  82. package/dist/components/inputs/AntCheckboxGroup.vue +39 -15
  83. package/dist/components/inputs/AntDateInput.vue +35 -12
  84. package/dist/components/inputs/AntNumberInput.vue +33 -12
  85. package/dist/components/inputs/AntPasswordInput.vue +32 -11
  86. package/dist/components/inputs/AntRadio.vue +57 -34
  87. package/dist/components/inputs/AntRadioGroup.vue +60 -35
  88. package/dist/components/inputs/AntRangeSlider.vue +31 -12
  89. package/dist/components/inputs/AntSearch.vue +19 -7
  90. package/dist/components/inputs/AntSelect.vue +107 -83
  91. package/dist/components/inputs/AntSwitch.vue +35 -18
  92. package/dist/components/inputs/AntSwitcher.vue +30 -15
  93. package/dist/components/inputs/AntTagInput.vue +91 -61
  94. package/dist/components/inputs/AntTextInput.vue +31 -11
  95. package/dist/components/inputs/AntTextarea.vue +53 -25
  96. package/dist/components/inputs/AntUnitInput.vue +33 -12
  97. package/dist/components/inputs/Elements/AntBaseInput.vue +47 -18
  98. package/dist/components/inputs/Elements/AntInputDescription.vue +16 -8
  99. package/dist/components/inputs/Elements/AntInputLabel.vue +13 -5
  100. package/dist/components/inputs/Elements/AntInputLimiter.vue +13 -5
  101. package/dist/components/inputs/Elements/AntSelectMenu.vue +65 -41
  102. package/dist/components/inputs/Elements/__stories/AntBaseInput.stories.mjs +104 -27
  103. package/dist/components/inputs/Elements/__stories/AntInputDescription.stories.mjs +33 -9
  104. package/dist/components/inputs/Elements/__stories/AntInputLabel.stories.mjs +34 -9
  105. package/dist/components/inputs/Elements/__stories/AntInputLimiter.stories.mjs +33 -9
  106. package/dist/components/inputs/Elements/index.d.ts +1 -1
  107. package/dist/components/inputs/__stories/AntCheckbox.stories.mjs +34 -9
  108. package/dist/components/inputs/__stories/AntCheckboxGroup.stories.mjs +45 -21
  109. package/dist/components/inputs/__stories/AntDateInput.stories.mjs +52 -14
  110. package/dist/components/inputs/__stories/AntNumberInput.stories.mjs +66 -17
  111. package/dist/components/inputs/__stories/AntPasswordInput.stories.mjs +51 -13
  112. package/dist/components/inputs/__stories/AntRadioGroup.stories.mjs +45 -12
  113. package/dist/components/inputs/__stories/AntRangeSlider.stories.mjs +16 -5
  114. package/dist/components/inputs/__stories/AntSearch.stories.mjs +41 -10
  115. package/dist/components/inputs/__stories/AntSelect.stories.mjs +59 -15
  116. package/dist/components/inputs/__stories/AntSwitch.stories.js +126 -102
  117. package/dist/components/inputs/__stories/AntSwitch.stories.mjs +162 -112
  118. package/dist/components/inputs/__stories/AntSwitcher.stories.mjs +38 -10
  119. package/dist/components/inputs/__stories/AntTagInput.stories.mjs +46 -12
  120. package/dist/components/inputs/__stories/AntTextInput.stories.mjs +59 -16
  121. package/dist/components/inputs/__stories/AntTextarea.stories.mjs +47 -13
  122. package/dist/components/inputs/__stories/AntUnitInput.stories.mjs +46 -12
  123. package/dist/components/layouts/AntNavLeftLayout.vue +12 -6
  124. package/dist/components/layouts/__stories/AntNavLeftLayout.stories.mjs +10 -2
  125. package/dist/components/navbar/AntNavbar.vue +7 -3
  126. package/dist/components/navbar/AntNavbarItem.vue +12 -6
  127. package/dist/components/navbar/__stories/AntNavbar.stories.mjs +59 -37
  128. package/dist/components/table/AntCollapsibleTableRowContent.vue +7 -5
  129. package/dist/components/table/AntTable.vue +210 -165
  130. package/dist/components/table/AntTableSkeleton.vue +126 -0
  131. package/dist/components/table/AntTableSortButton.vue +22 -13
  132. package/dist/components/table/AntTd.vue +21 -17
  133. package/dist/components/table/AntTh.vue +19 -12
  134. package/dist/components/table/__stories/AntTable.stories.js +1 -1
  135. package/dist/components/table/__stories/AntTable.stories.mjs +190 -62
  136. package/dist/components/tabs/AntTabItem.vue +20 -8
  137. package/dist/components/tabs/AntTabs.vue +35 -21
  138. package/dist/components/tabs/__stories/AntTabItem.stories.mjs +23 -7
  139. package/dist/components/tabs/__stories/AntTabs.stories.mjs +45 -13
  140. package/dist/components/transitions/AntTransitionCollapseHeight.vue +1 -1
  141. package/dist/composables/useToaster.mjs +25 -7
  142. package/dist/index.css +1 -0
  143. package/dist/utils.mjs +3 -1
  144. package/package.json +23 -16
  145. package/dist/tailwind.config.d.ts +0 -3
  146. package/dist/tailwind.config.js +0 -198
  147. package/dist/tailwind.config.mjs +0 -189
@@ -1,11 +1,22 @@
1
1
  <script setup lang="ts">
2
2
  import AntField from '../forms/AntField.vue';
3
- import {computed, watch} from 'vue';
3
+ import {
4
+ computed, watch,
5
+ } from 'vue';
4
6
  import AntSkeleton from '../AntSkeleton.vue';
5
- import {InputState, Size} from '../../enums';
6
- import {hasSlotContent} from '../../utils';
7
+ import {
8
+ InputState, Size,
9
+ } from '../../enums';
10
+ import {
11
+ hasSlotContent,
12
+ } from '../../utils';
7
13
 
8
- const emit = defineEmits(['update:modelValue', 'input', 'blur', 'validate']);
14
+ const emit = defineEmits([
15
+ 'update:modelValue',
16
+ 'input',
17
+ 'blur',
18
+ 'validate',
19
+ ]);
9
20
  const props = withDefaults(defineProps<{
10
21
  modelValue: boolean | null;
11
22
  label?: string;
@@ -14,35 +25,37 @@ const props = withDefaults(defineProps<{
14
25
  readonly?: boolean;
15
26
  disabled?: boolean;
16
27
  size?: Size;
17
- state?: InputState
18
- messages?: string[]
28
+ state?: InputState;
29
+ messages?: string[];
19
30
  }>(), {
20
31
  size: Size.md,
21
32
  state: InputState.base,
22
- messages: () => []
33
+ messages: () => [],
23
34
  });
24
35
  const _value = computed({
25
36
  get: () => props.modelValue,
26
37
  set: (val: boolean | null) => {
27
38
  emit('update:modelValue', val);
28
39
  emit('input', val);
29
- }
40
+ },
30
41
  });
31
42
  const hasInputState = computed(() => props.skeleton || props.readonly || props.disabled);
32
43
  const buttonClasses = computed(() => {
33
- const classes: { [key: string]: boolean } = {
34
- 'relative inline-flex flex-shrink-0': true,
35
- 'focus:outline-none': true,
44
+ const classes: {
45
+ [key: string]: boolean;
46
+ } = {
47
+ 'relative inline-flex shrink-0': true,
48
+ 'focus:outline-hidden': true,
36
49
  'rounded-full ease-in-out duration-200': true,
37
50
  'focus-within:ring-4': !hasInputState.value && (props.size === Size.lg || props.size === Size.md),
38
51
  'focus-within:ring-2': !hasInputState.value && (props.size === Size.sm || props.size === Size.xs || props.size === Size.xs2),
39
52
  'h-5 w-9': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
40
53
  'h-4 w-[30px]': props.size === Size.xs || props.size === Size.xs2,
41
54
  'bg-base-300': !_value.value,
42
- 'invisible': props.skeleton,
55
+ invisible: props.skeleton,
43
56
  // Disabled
44
57
  'opacity-50 cursor-not-allowed': props.disabled,
45
- 'cursor-default': props.readonly
58
+ 'cursor-default': props.readonly,
46
59
  };
47
60
  const colorVariant = {
48
61
  [InputState.base]: 'focus-within:ring-primary-200',
@@ -65,14 +78,14 @@ const buttonClasses = computed(() => {
65
78
  return classes;
66
79
  });
67
80
  const ballClasses = computed(() => ({
68
- 'pointer-events-none inline-block rounded-full bg-base-100 shadow transform ring-0 transition ease-in-out duration-200': true,
81
+ 'pointer-events-none inline-block rounded-full bg-base-100 shadow-sm transform ring-0 transition ease-in-out duration-200': true,
69
82
  'h-4 w-4 translate-y-0.5': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
70
83
  'translate-x-[1.125rem]': _value.value && (props.size === Size.lg || props.size === Size.md || props.size === Size.sm),
71
84
  'translate-x-0.5': !_value.value && (props.size === Size.lg || props.size === Size.md || props.size === Size.sm),
72
85
  'h-3.5 w-3.5 translate-y-[1px]': props.size === Size.xs || props.size === Size.xs2,
73
86
  'translate-x-[.925rem]': _value.value && (props.size === Size.xs || props.size === Size.xs2),
74
87
  'translate-x-[1px]': !_value.value && (props.size === Size.xs || props.size === Size.xs2),
75
- 'invisible': props.skeleton
88
+ invisible: props.skeleton,
76
89
  }));
77
90
  const valueClasses = computed(() => ({
78
91
  'text-for-white-bg-font': true,
@@ -111,7 +124,11 @@ watch(() => props.skeleton, (val) => {
111
124
  }
112
125
  });
113
126
  watch(_value, () => {
114
- if ([InputState.danger, InputState.info, InputState.warning].includes(props.state)) {
127
+ if ([
128
+ InputState.danger,
129
+ InputState.info,
130
+ InputState.warning,
131
+ ].includes(props.state)) {
115
132
  emit('validate', props.modelValue);
116
133
  }
117
134
  });
@@ -156,7 +173,7 @@ function onBlur(e: FocusEvent) {
156
173
  aria-hidden="true"
157
174
  :class="ballClasses"
158
175
  >
159
- <slot name="icon"/>
176
+ <slot name="icon" />
160
177
  </span>
161
178
  </button>
162
179
 
@@ -173,7 +190,7 @@ function onBlur(e: FocusEvent) {
173
190
  :class="props.size === Size.lg || props.size === Size.md ||props.size === Size.sm ? 'h-5' : 'h-4'"
174
191
  >
175
192
  <span :class="valueClasses">
176
- <slot/>
193
+ <slot />
177
194
  </span>
178
195
 
179
196
  <AntSkeleton
@@ -1,13 +1,25 @@
1
1
  <script setup lang="ts">
2
2
  import AntField from '../forms/AntField.vue';
3
3
  import AntButton from '../buttons/AntButton.vue';
4
- import {faChevronLeft, faChevronRight} from '@fortawesome/free-solid-svg-icons';
4
+ import {
5
+ faChevronLeft, faChevronRight,
6
+ } from '@fortawesome/free-solid-svg-icons';
5
7
  import AntSkeleton from '../AntSkeleton.vue';
6
- import {type SwitcherOption} from './__types/AntSwitcher.types';
7
- import {State, Grouped, InputState, Size} from '../../enums';
8
- import {computed, onMounted, watch} from 'vue';
9
-
10
- const emit = defineEmits(['update:modelValue', 'validate', 'blur']);
8
+ import {
9
+ type SwitcherOption,
10
+ } from './__types/AntSwitcher.types';
11
+ import {
12
+ State, Grouped, InputState, Size,
13
+ } from '../../enums';
14
+ import {
15
+ computed, onMounted, watch,
16
+ } from 'vue';
17
+
18
+ const emit = defineEmits([
19
+ 'update:modelValue',
20
+ 'validate',
21
+ 'blur',
22
+ ]);
11
23
  const props = withDefaults(defineProps<{
12
24
  modelValue: string | null;
13
25
  options: string[] | SwitcherOption[];
@@ -17,17 +29,16 @@ const props = withDefaults(defineProps<{
17
29
  readonly?: boolean;
18
30
  disabled?: boolean;
19
31
  state?: InputState;
20
- size?: Size,
32
+ size?: Size;
21
33
  messages?: string[];
22
34
  }>(), {
23
35
  state: InputState.base,
24
36
  size: Size.md,
25
- messages: () => []
37
+ messages: () => [],
26
38
  });
27
39
  const _value = computed({
28
40
  get() {
29
- const found = props.options.find((option: string | SwitcherOption) =>
30
- typeof option === 'string' ? option === props.modelValue : option.value === props.modelValue);
41
+ const found = props.options.find((option: string | SwitcherOption) => typeof option === 'string' ? option === props.modelValue : option.value === props.modelValue);
31
42
 
32
43
  if (!found) {
33
44
  return props.options[0];
@@ -37,12 +48,14 @@ const _value = computed({
37
48
  },
38
49
  set(val: string | SwitcherOption) {
39
50
  emit('update:modelValue', typeof val === 'string' ? val : val.value);
40
- }
51
+ },
41
52
  });
42
53
  const hasInputState = computed(() => props.skeleton || props.readonly || props.disabled);
43
54
  const containerClasses = computed(() => {
44
- const classes: { [key: string]: boolean } = {
45
- 'flex relative ring-primary/25 rounded-md outline-none': true,
55
+ const classes: {
56
+ [key: string]: boolean;
57
+ } = {
58
+ 'flex relative ring-primary/25 rounded-md outline-hidden': true,
46
59
  'focus-within:ring-2': (props.size === Size.xs2 || props.size === Size.xs || props.size === Size.sm) && !hasInputState.value,
47
60
  'focus-within:ring-4': (props.size === Size.md || props.size === Size.lg) && !hasInputState.value,
48
61
  };
@@ -59,14 +72,16 @@ const containerClasses = computed(() => {
59
72
  return classes;
60
73
  });
61
74
  const itemClasses = computed(() => {
62
- const classes: { [key: string]: boolean } = {
75
+ const classes: {
76
+ [key: string]: boolean;
77
+ } = {
63
78
  'grow text-center text-black relative outline outline-1 -outline-offset-1': true,
64
79
  'p-1 text-xs ': props.size === Size.xs2,
65
80
  'p-1.5 text-xs ': props.size === Size.xs,
66
81
  'p-1.5 text-sm ': props.size === Size.sm,
67
82
  'p-2 text-sm ': props.size === Size.md,
68
83
  'p-2.5 text-sm ': props.size === Size.lg,
69
- 'invisible': props.skeleton,
84
+ invisible: props.skeleton,
70
85
  'opacity-50 cursor-not-allowed': props.disabled,
71
86
  };
72
87
 
@@ -1,59 +1,81 @@
1
1
  <script setup lang="ts">
2
- import {AntField} from './Elements';
3
- import type {SelectOption} from './__types';
4
- import {Grouped, InputState, Size} from '../../enums';
5
- import {useVModel} from '@vueuse/core';
6
- import {faChevronRight, type IconDefinition} from '@fortawesome/free-solid-svg-icons';
7
- import {computed, onMounted, type Ref, ref, watch} from 'vue';
2
+ import {
3
+ AntField,
4
+ } from './Elements';
5
+ import type {
6
+ SelectOption,
7
+ } from './__types';
8
+ import {
9
+ Grouped, InputState, Size,
10
+ } from '../../enums';
11
+ import {
12
+ useVModel,
13
+ } from '@vueuse/core';
14
+ import {
15
+ faChevronRight, type IconDefinition,
16
+ } from '@fortawesome/free-solid-svg-icons';
17
+ import {
18
+ computed, onMounted, type Ref, ref, watch,
19
+ } from 'vue';
8
20
  import AntTag from '../AntTag.vue';
9
21
  import AntIcon from '../AntIcon.vue';
10
- import {AntTagSize, IconSize} from '../__types';
22
+ import {
23
+ AntTagSize, IconSize,
24
+ } from '../__types';
11
25
  import AntSelectMenu from './Elements/AntSelectMenu.vue';
12
26
  import AntSkeleton from '../AntSkeleton.vue';
13
- import {vOnClickOutside} from '@vueuse/components';
14
- import {AntTagInputSize} from './__types/AntTagInput.types';
15
- import type {TagState} from '../__types/AntTag.types';
27
+ import {
28
+ vOnClickOutside,
29
+ } from '@vueuse/components';
30
+ import {
31
+ AntTagInputSize,
32
+ } from './__types/AntTagInput.types';
33
+ import type {
34
+ TagState,
35
+ } from '../__types/AntTag.types';
16
36
 
17
- const emit = defineEmits(['update:modelValue', 'blur', 'validate']);
18
- const props = withDefaults(
19
- defineProps<{
20
- modelValue: (string | number)[] | null;
21
- options: SelectOption[];
22
- label?: string;
23
- description?: string;
24
- placeholder?: string;
25
- size?: AntTagInputSize;
26
- state?: InputState;
27
- disabled?: boolean;
28
- readonly?: boolean;
29
- skeleton?: boolean;
30
- name?: string;
31
- expanded?: boolean;
32
- icon?: IconDefinition;
33
- grouped?: Grouped;
34
- nullable?: boolean;
35
- messages?: string[];
36
- allowCreate?: boolean;
37
- allowDuplicates?: boolean;
38
- openOnFocus?: boolean;
39
- autoCloseAfterSelection?: boolean;
40
- createCallback?: (item: string) => Promise<SelectOption>;
41
- }>(), {
42
- size: AntTagInputSize.md,
43
- state: InputState.base,
44
- icon: () => faChevronRight,
45
- messages: () => [],
46
- grouped: Grouped.none,
47
- allowCreate: false,
48
- allowDuplicates: false,
49
- openOnFocus: true,
50
- readonly: false,
51
- disabled: false,
52
- skeleton: false,
53
- autoCloseAfterSelection: false,
54
- placeholder: 'Add new tag'
55
- }
56
- );
37
+ const emit = defineEmits([
38
+ 'update:modelValue',
39
+ 'blur',
40
+ 'validate',
41
+ ]);
42
+ const props = withDefaults(defineProps<{
43
+ modelValue: (string | number)[] | null;
44
+ options: SelectOption[];
45
+ label?: string;
46
+ description?: string;
47
+ placeholder?: string;
48
+ size?: AntTagInputSize;
49
+ state?: InputState;
50
+ disabled?: boolean;
51
+ readonly?: boolean;
52
+ skeleton?: boolean;
53
+ name?: string;
54
+ expanded?: boolean;
55
+ icon?: IconDefinition;
56
+ grouped?: Grouped;
57
+ nullable?: boolean;
58
+ messages?: string[];
59
+ allowCreate?: boolean;
60
+ allowDuplicates?: boolean;
61
+ openOnFocus?: boolean;
62
+ autoCloseAfterSelection?: boolean;
63
+ createCallback?: (item: string) => Promise<SelectOption>;
64
+ }>(), {
65
+ size: AntTagInputSize.md,
66
+ state: InputState.base,
67
+ icon: () => faChevronRight,
68
+ messages: () => [],
69
+ grouped: Grouped.none,
70
+ allowCreate: false,
71
+ allowDuplicates: false,
72
+ openOnFocus: true,
73
+ readonly: false,
74
+ disabled: false,
75
+ skeleton: false,
76
+ autoCloseAfterSelection: false,
77
+ placeholder: 'Add new tag',
78
+ });
57
79
 
58
80
  const _modelValue: Ref<(string | number)[] | null> = useVModel(props, 'modelValue', emit);
59
81
  const _skeleton = useVModel(props, 'skeleton', emit);
@@ -88,7 +110,7 @@ const inputContainerClasses = computed(() => {
88
110
  'rounded-none': props.grouped === Grouped.center,
89
111
  'rounded-tl-none rounded-bl-none rounded-tr-md rounded-br-md': props.grouped === Grouped.right,
90
112
  'rounded-md': props.grouped === Grouped.none,
91
- 'invisible': props.skeleton,
113
+ invisible: props.skeleton,
92
114
  };
93
115
  });
94
116
  const inputClasses = computed(() => {
@@ -101,7 +123,7 @@ const inputClasses = computed(() => {
101
123
  };
102
124
 
103
125
  return {
104
- 'outline-0 border:none ring:none bg-transparent w-full': true,
126
+ 'outline-0 bg-transparent w-full': true,
105
127
  'opacity-50 cursor-not-allowed': props.disabled,
106
128
  [variants[props.state]]: true,
107
129
  };
@@ -124,15 +146,15 @@ const filteredOptions = computed(() => {
124
146
  return !_modelValue.value?.includes(option.value);
125
147
  }
126
148
 
127
- return option.label.toLowerCase().includes(tagInput.value.toLowerCase())
149
+ return option.label.toLowerCase().includes(tagInput.value.toLowerCase());
128
150
  });
129
- })
151
+ });
130
152
 
131
153
  function onClickOutside() {
132
154
  if (!dropDownOpen.value) {
133
155
  return;
134
156
  }
135
- console.log("click outside");
157
+ console.log('click outside');
136
158
  // dropDownOpen.value = false;
137
159
  }
138
160
 
@@ -161,7 +183,7 @@ function addTagFromOptions(item: string | number) {
161
183
  addTag(item);
162
184
 
163
185
  if (props.autoCloseAfterSelection) {
164
- console.log("HIER");
186
+ console.log('HIER');
165
187
  dropDownOpen.value = false;
166
188
  }
167
189
  }
@@ -175,7 +197,9 @@ function addTag(tagValue: string | number): void {
175
197
  if (Array.isArray(_modelValue.value)) {
176
198
  _modelValue.value.push(tagValue);
177
199
  } else {
178
- _modelValue.value = [tagValue];
200
+ _modelValue.value = [
201
+ tagValue,
202
+ ];
179
203
  }
180
204
 
181
205
  tagInput.value = '';
@@ -211,10 +235,16 @@ watch(() => props.skeleton, (val) => {
211
235
  }
212
236
  });
213
237
  watch(_modelValue, (val) => {
214
- if ([InputState.danger, InputState.warning, InputState.info].includes(props.state)) {
238
+ if ([
239
+ InputState.danger,
240
+ InputState.warning,
241
+ InputState.info,
242
+ ].includes(props.state)) {
215
243
  emit('validate', val);
216
244
  }
217
- }, {deep: true});
245
+ }, {
246
+ deep: true,
247
+ });
218
248
 
219
249
  onMounted(() => {
220
250
  /**
@@ -248,9 +278,9 @@ onMounted(() => {
248
278
  />
249
279
 
250
280
  <div
281
+ v-on-click-outside="onClickOutside"
251
282
  :class="inputContainerClasses"
252
283
  class="w-full flex items-center"
253
- v-on-click-outside="onClickOutside"
254
284
  >
255
285
  <div
256
286
  class="flex gap-2.5 items-center"
@@ -286,7 +316,7 @@ onMounted(() => {
286
316
  @keydown.delete="removeLastTag"
287
317
  @keydown.enter.prevent="checkCreateTag(tagInput)"
288
318
  @blur="onBlur"
289
- />
319
+ >
290
320
  </div>
291
321
  </div>
292
322
 
@@ -1,17 +1,37 @@
1
1
  <script lang="ts" setup>
2
- import {onMounted} from 'vue';
2
+ import {
3
+ onMounted,
4
+ } from 'vue';
3
5
  import AntField from '../forms/AntField.vue';
4
6
  import AntBaseInput from './Elements/AntBaseInput.vue';
5
- import {Size} from '../../enums/Size.enum';
6
- import {TextInputType} from './__types/AntTextInput.types';
7
- import {handleEnumValidation} from '../../handler';
8
- import {useVModel} from '@vueuse/core';
9
- import {InputState} from '../../enums';
10
- import {BaseInputType} from './Elements/__types';
7
+ import {
8
+ Size,
9
+ } from '../../enums/Size.enum';
10
+ import {
11
+ TextInputType,
12
+ } from './__types/AntTextInput.types';
13
+ import {
14
+ handleEnumValidation,
15
+ } from '../../handler';
16
+ import {
17
+ useVModel,
18
+ } from '@vueuse/core';
19
+ import {
20
+ InputState,
21
+ } from '../../enums';
22
+ import {
23
+ BaseInputType,
24
+ } from './Elements/__types';
11
25
 
12
- defineOptions({inheritAttrs: false});
26
+ defineOptions({
27
+ inheritAttrs: false,
28
+ });
13
29
 
14
- const emit = defineEmits(['update:modelValue', 'update:skeleton', 'validate']);
30
+ const emit = defineEmits([
31
+ 'update:modelValue',
32
+ 'update:skeleton',
33
+ 'validate',
34
+ ]);
15
35
  const props = withDefaults(defineProps<{
16
36
  modelValue: string | null;
17
37
  label?: string;
@@ -34,7 +54,7 @@ const props = withDefaults(defineProps<{
34
54
  size: Size.md,
35
55
  type: TextInputType.text,
36
56
  limiter: false,
37
- messages: () => []
57
+ messages: () => [],
38
58
  });
39
59
 
40
60
  const _value = useVModel(props, 'modelValue', emit);
@@ -60,7 +80,7 @@ onMounted(() => {
60
80
  <AntBaseInput
61
81
  v-model="_value"
62
82
  :type="type as unknown as BaseInputType"
63
- wrapper-class="flex-grow"
83
+ wrapper-class="grow"
64
84
  :state="state"
65
85
  :size="size"
66
86
  :skeleton="skeleton"
@@ -1,25 +1,47 @@
1
1
  <script lang="ts" setup>
2
- import {computed, onMounted, ref, watch} from 'vue';
3
- import {Size} from '../../enums/Size.enum';
2
+ import {
3
+ computed, onMounted, ref, watch,
4
+ } from 'vue';
5
+ import {
6
+ Size,
7
+ } from '../../enums/Size.enum';
4
8
  import AntSkeleton from '../AntSkeleton.vue';
5
9
  import AntIcon from '../AntIcon.vue';
6
- import {Grouped} from '../../enums/Grouped.enum';
10
+ import {
11
+ Grouped,
12
+ } from '../../enums/Grouped.enum';
7
13
  import {
8
14
  faExclamationTriangle,
9
15
  faExclamationCircle,
10
16
  faCircleCheck,
11
- faCircleInfo
17
+ faCircleInfo,
12
18
  } from '@fortawesome/free-solid-svg-icons';
13
- import {handleEnumValidation} from '../../handler';
14
- import {classesToObjectSyntax} from '../../utils';
19
+ import {
20
+ handleEnumValidation,
21
+ } from '../../handler';
22
+ import {
23
+ classesToObjectSyntax,
24
+ } from '../../utils';
15
25
  import AntField from '../forms/AntField.vue';
16
- import {useVModel} from '@vueuse/core';
17
- import {InputState} from '../../enums';
18
- import {IconSize} from '../__types';
26
+ import {
27
+ useVModel,
28
+ } from '@vueuse/core';
29
+ import {
30
+ InputState,
31
+ } from '../../enums';
32
+ import {
33
+ IconSize,
34
+ } from '../__types';
19
35
 
20
- defineOptions({inheritAttrs: false});
36
+ defineOptions({
37
+ inheritAttrs: false,
38
+ });
21
39
 
22
- const emit = defineEmits(['update:modelValue', 'validate', 'blur']);
40
+ const emit = defineEmits([
41
+ 'update:modelValue',
42
+ 'validate',
43
+ 'blur',
44
+ ]);
23
45
  const props = withDefaults(defineProps<{
24
46
  modelValue: string | null;
25
47
  size?: Size;
@@ -47,7 +69,7 @@ const props = withDefaults(defineProps<{
47
69
  showIcon: true,
48
70
  limiter: false,
49
71
  resize: true,
50
- messages: () => []
72
+ messages: () => [],
51
73
  });
52
74
 
53
75
  const _modelValue = useVModel(props, 'modelValue', emit);
@@ -93,19 +115,19 @@ const inputClasses = computed(() => {
93
115
  'rounded-none': props.grouped === Grouped.center,
94
116
  'rounded-tl-none rounded-bl-none rounded-tr-md rounded-br-md': props.grouped === Grouped.right,
95
117
  'rounded-md': props.grouped === Grouped.none,
96
- 'invisible': props.skeleton,
97
- 'resize-none': !props.resize
118
+ invisible: props.skeleton,
119
+ 'resize-none': !props.resize,
98
120
  };
99
121
  });
100
122
  const iconColor = computed(() => {
101
123
  const variants = {
102
- 'base': undefined,
103
- 'danger': 'text-danger-500',
104
- 'info': 'text-info-500',
105
- 'primary': 'text-primary-500',
106
- 'secondary': 'text-secondary-500',
107
- 'success': 'text-success-500',
108
- 'warning': 'text-warning-500',
124
+ base: undefined,
125
+ danger: 'text-danger-500',
126
+ info: 'text-info-500',
127
+ primary: 'text-primary-500',
128
+ secondary: 'text-secondary-500',
129
+ success: 'text-success-500',
130
+ warning: 'text-warning-500',
109
131
  };
110
132
 
111
133
  return variants[props.state];
@@ -132,10 +154,16 @@ onMounted(() => {
132
154
  });
133
155
 
134
156
  watch(_modelValue, (val) => {
135
- if ([InputState.danger, InputState.warning, InputState.info].includes(props.state)) {
157
+ if ([
158
+ InputState.danger,
159
+ InputState.warning,
160
+ InputState.info,
161
+ ].includes(props.state)) {
136
162
  emit('validate', val);
137
163
  }
138
- }, {deep: true});
164
+ }, {
165
+ deep: true,
166
+ });
139
167
  watch(() => props.skeleton, (val) => {
140
168
  if (!val && props.modelValue !== null) {
141
169
  emit('validate', props.modelValue);
@@ -148,7 +176,7 @@ function onBlur(e: FocusEvent) {
148
176
  }
149
177
 
150
178
  defineExpose({
151
- getTextAreaRef: () => textAreaRef.value
179
+ getTextAreaRef: () => textAreaRef.value,
152
180
  });
153
181
 
154
182
  </script>
@@ -170,12 +198,12 @@ defineExpose({
170
198
  :class="{...{'-mr-px': grouped !== Grouped.none}, ..._wrapperClass}"
171
199
  >
172
200
  <textarea
201
+ ref="textAreaRef"
173
202
  v-model="_modelValue"
174
203
  :class="inputClasses"
175
204
  :placeholder="placeholder !== undefined ? placeholder : label"
176
205
  :disabled="disabled || skeleton"
177
206
  :readonly="readonly"
178
- ref="textAreaRef"
179
207
  v-bind="$attrs"
180
208
  @blur="onBlur"
181
209
  />