@antify/ui 1.0.4 → 1.2.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 (105) hide show
  1. package/dist/components/AntAccordion.vue +32 -7
  2. package/dist/components/AntAccordionItem.vue +48 -15
  3. package/dist/components/AntAlert.vue +8 -6
  4. package/dist/components/AntDropdown.vue +50 -36
  5. package/dist/components/AntIcon.vue +8 -6
  6. package/dist/components/AntKeycap.vue +22 -17
  7. package/dist/components/AntListGroup.vue +5 -3
  8. package/dist/components/AntModal.vue +17 -7
  9. package/dist/components/AntPopover.vue +118 -42
  10. package/dist/components/AntSkeleton.vue +1 -1
  11. package/dist/components/AntTooltip.vue +102 -76
  12. package/dist/components/__stories/AntAccordion.stories.d.ts +1 -0
  13. package/dist/components/__stories/AntAccordion.stories.js +73 -1
  14. package/dist/components/__stories/AntAccordion.stories.mjs +68 -0
  15. package/dist/components/__stories/AntDropdown.stories.js +27 -23
  16. package/dist/components/__stories/AntDropdown.stories.mjs +26 -22
  17. package/dist/components/__stories/AntKeycap.stories.js +13 -15
  18. package/dist/components/__stories/AntKeycap.stories.mjs +13 -13
  19. package/dist/components/__stories/AntListGroup.stories.js +1 -1
  20. package/dist/components/__stories/AntListGroup.stories.mjs +1 -1
  21. package/dist/components/__stories/AntModal.stories.js +2 -1
  22. package/dist/components/__stories/AntModal.stories.mjs +2 -1
  23. package/dist/components/__stories/AntPopover.stories.js +22 -21
  24. package/dist/components/__stories/AntPopover.stories.mjs +22 -20
  25. package/dist/components/__stories/AntTooltip.stories.d.ts +0 -10
  26. package/dist/components/__stories/AntTooltip.stories.js +32 -212
  27. package/dist/components/__stories/AntTooltip.stories.mjs +29 -193
  28. package/dist/components/__types/AntKeycap.types.d.ts +1 -0
  29. package/dist/components/__types/AntKeycap.types.js +1 -0
  30. package/dist/components/__types/AntKeycap.types.mjs +1 -0
  31. package/dist/components/buttons/AntButton.vue +41 -44
  32. package/dist/components/crud/AntCrud.vue +1 -1
  33. package/dist/components/crud/AntCrudDetailActions.vue +1 -0
  34. package/dist/components/crud/AntCrudTableFilter.vue +20 -18
  35. package/dist/components/forms/AntField.vue +7 -2
  36. package/dist/components/forms/__stories/AntField.stories.js +0 -16
  37. package/dist/components/forms/__stories/AntField.stories.mjs +2 -16
  38. package/dist/components/index.d.ts +2 -2
  39. package/dist/components/index.js +7 -7
  40. package/dist/components/index.mjs +2 -2
  41. package/dist/components/inputs/AntCheckbox.vue +25 -6
  42. package/dist/components/inputs/AntDateInput.vue +1 -1
  43. package/dist/components/inputs/AntRadio.vue +2 -1
  44. package/dist/components/inputs/AntSelect.vue +25 -22
  45. package/dist/components/inputs/AntSwitch.vue +2 -7
  46. package/dist/components/inputs/AntTagInput.vue +91 -114
  47. package/dist/components/inputs/AntTextarea.vue +7 -3
  48. package/dist/components/inputs/Elements/AntBaseInput.vue +2 -2
  49. package/dist/components/inputs/Elements/{AntDropDown.vue → AntSelectMenu.vue} +85 -40
  50. package/dist/components/inputs/Elements/__stories/AntBaseInput.stories.d.ts +0 -1
  51. package/dist/components/inputs/Elements/__stories/AntBaseInput.stories.js +1 -29
  52. package/dist/components/inputs/Elements/__stories/AntBaseInput.stories.mjs +0 -22
  53. package/dist/components/inputs/Elements/index.d.ts +2 -1
  54. package/dist/components/inputs/Elements/index.js +7 -0
  55. package/dist/components/inputs/Elements/index.mjs +3 -1
  56. package/dist/components/inputs/__stories/AntCheckbox.stories.d.ts +0 -1
  57. package/dist/components/inputs/__stories/AntCheckbox.stories.js +1 -43
  58. package/dist/components/inputs/__stories/AntCheckbox.stories.mjs +0 -35
  59. package/dist/components/inputs/__stories/AntCheckboxGroup.stories.d.ts +0 -1
  60. package/dist/components/inputs/__stories/AntCheckboxGroup.stories.js +1 -31
  61. package/dist/components/inputs/__stories/AntCheckboxGroup.stories.mjs +0 -28
  62. package/dist/components/inputs/__stories/AntDateInput.stories.d.ts +0 -1
  63. package/dist/components/inputs/__stories/AntDateInput.stories.js +1 -32
  64. package/dist/components/inputs/__stories/AntDateInput.stories.mjs +0 -28
  65. package/dist/components/inputs/__stories/AntNumberInput.stories.d.ts +0 -2
  66. package/dist/components/inputs/__stories/AntNumberInput.stories.js +1 -65
  67. package/dist/components/inputs/__stories/AntNumberInput.stories.mjs +1 -54
  68. package/dist/components/inputs/__stories/AntPasswordInput.stories.d.ts +0 -1
  69. package/dist/components/inputs/__stories/AntPasswordInput.stories.js +1 -35
  70. package/dist/components/inputs/__stories/AntPasswordInput.stories.mjs +0 -25
  71. package/dist/components/inputs/__stories/AntRadioGroup.stories.d.ts +0 -1
  72. package/dist/components/inputs/__stories/AntRadioGroup.stories.js +1 -47
  73. package/dist/components/inputs/__stories/AntRadioGroup.stories.mjs +0 -46
  74. package/dist/components/inputs/__stories/AntRangeSlider.stories.d.ts +0 -1
  75. package/dist/components/inputs/__stories/AntRangeSlider.stories.js +1 -33
  76. package/dist/components/inputs/__stories/AntRangeSlider.stories.mjs +1 -28
  77. package/dist/components/inputs/__stories/AntSelect.stories.d.ts +0 -1
  78. package/dist/components/inputs/__stories/AntSelect.stories.js +18 -46
  79. package/dist/components/inputs/__stories/AntSelect.stories.mjs +16 -47
  80. package/dist/components/inputs/__stories/AntSwitch.stories.d.ts +0 -1
  81. package/dist/components/inputs/__stories/AntSwitch.stories.js +1 -42
  82. package/dist/components/inputs/__stories/AntSwitch.stories.mjs +1 -37
  83. package/dist/components/inputs/__stories/AntSwitcher.stories.d.ts +0 -1
  84. package/dist/components/inputs/__stories/AntSwitcher.stories.js +1 -51
  85. package/dist/components/inputs/__stories/AntSwitcher.stories.mjs +1 -51
  86. package/dist/components/inputs/__stories/AntTagInput.stories.d.ts +0 -1
  87. package/dist/components/inputs/__stories/AntTagInput.stories.js +1 -35
  88. package/dist/components/inputs/__stories/AntTagInput.stories.mjs +0 -33
  89. package/dist/components/inputs/__stories/AntTextInput.stories.d.ts +0 -2
  90. package/dist/components/inputs/__stories/AntTextInput.stories.js +1 -107
  91. package/dist/components/inputs/__stories/AntTextInput.stories.mjs +0 -104
  92. package/dist/components/inputs/__stories/AntTextarea.stories.d.ts +0 -2
  93. package/dist/components/inputs/__stories/AntTextarea.stories.js +7 -66
  94. package/dist/components/inputs/__stories/AntTextarea.stories.mjs +6 -55
  95. package/dist/components/inputs/__stories/AntUnitInput.stories.d.ts +0 -2
  96. package/dist/components/inputs/__stories/AntUnitInput.stories.js +1 -61
  97. package/dist/components/inputs/__stories/AntUnitInput.stories.mjs +0 -53
  98. package/dist/components/table/AntTable.vue +17 -15
  99. package/dist/components/table/AntTd.vue +1 -2
  100. package/dist/components/table/__stories/AntTable.stories.js +7 -14
  101. package/dist/components/table/__stories/AntTable.stories.mjs +7 -15
  102. package/dist/components/tabs/AntTabItem.vue +16 -6
  103. package/dist/components/tabs/AntTabs.vue +8 -0
  104. package/dist/components/tabs/__types/AntTabItem.types.d.ts +1 -0
  105. package/package.json +2 -1
@@ -19,7 +19,7 @@ withDefaults(defineProps<{
19
19
  <slot name="search-section"/>
20
20
  </div>
21
21
 
22
- <div class="bg-white flex-grow h-full overflow-hidden">
22
+ <div class="bg-white flex-grow h-px overflow-hidden">
23
23
  <slot name="table-section"/>
24
24
  </div>
25
25
 
@@ -28,6 +28,7 @@ withDefaults(defineProps<{
28
28
  :filled="false"
29
29
  :icon-left="faAngleLeft"
30
30
  :disabled="disabled"
31
+ :skeleton="skeleton"
31
32
  @click="$emit('back')"
32
33
  >
33
34
  Back
@@ -81,25 +81,27 @@ watch(() => props.fullWidth, (val) => {
81
81
  v-model:show-dropdown="showDropdown"
82
82
  :position="Position.left"
83
83
  >
84
- <div class="flex">
85
- <AntButton
86
- :state="hasFilter ? State.info : State.base"
87
- :grouped="hasFilter ? Grouped.left : Grouped.none"
88
- :skeleton="skeleton"
89
- :icon-left="faFilter"
90
- @click="() => showDropdown = !showDropdown"
91
- />
84
+ <template #reference>
85
+ <div class="flex">
86
+ <AntButton
87
+ :state="hasFilter ? State.info : State.base"
88
+ :grouped="hasFilter ? Grouped.left : Grouped.none"
89
+ :skeleton="skeleton"
90
+ :icon-left="faFilter"
91
+ @click="() => showDropdown = !showDropdown"
92
+ />
92
93
 
93
- <AntButton
94
- v-if="hasFilter"
95
- :state="State.info"
96
- :grouped="Grouped.right"
97
- :skeleton="skeleton"
98
- :icon-left="faMultiply"
99
- filled
100
- @click="$emit('removeFilter')"
101
- />
102
- </div>
94
+ <AntButton
95
+ v-if="hasFilter"
96
+ :state="State.info"
97
+ :grouped="Grouped.right"
98
+ :skeleton="skeleton"
99
+ :icon-left="faMultiply"
100
+ filled
101
+ @click="$emit('removeFilter')"
102
+ />
103
+ </div>
104
+ </template>
103
105
 
104
106
  <template #content>
105
107
  <slot name="dropdownContent"/>
@@ -20,12 +20,14 @@ const props = withDefaults(defineProps<{
20
20
  limiterMaxValue?: number;
21
21
  labelFor?: string;
22
22
  expanded?: boolean;
23
+ expandedHeight?: boolean;
23
24
  }>(), {
24
25
  state: InputState.base,
25
26
  skeleton: false,
26
27
  size: Size.md,
27
28
  messages: () => [],
28
- expanded: true
29
+ expanded: true,
30
+ expandedHeight: false,
29
31
  });
30
32
 
31
33
  onMounted(() => {
@@ -47,6 +49,8 @@ const fieldClasses = computed(() => ({
47
49
  'gap-2': props.size === Size.md,
48
50
  'gap-1.5': (props.size === Size.sm || props.size === Size.xs),
49
51
  'gap-1': props.size === Size.xs2,
52
+ 'h-full': props.expandedHeight,
53
+ 'h-fit': !props.expandedHeight,
50
54
  }));
51
55
  const descriptionClasses = computed(() => ({
52
56
  'gap-2.5': props.size === Size.lg,
@@ -66,9 +70,10 @@ const descriptionClasses = computed(() => ({
66
70
  :size="size"
67
71
  :skeleton="skeleton"
68
72
  :for="labelFor"
73
+ class="h-full"
69
74
  @click-content="$emit('clickLabel')"
70
75
  >
71
- <div class="w-full">
76
+ <div class="w-full h-full">
72
77
  <slot/>
73
78
  </div>
74
79
  </AntInputLabel>
@@ -9,7 +9,6 @@ var _AntBaseInput = _interopRequireDefault(require("../../inputs/Elements/AntBas
9
9
  var _Size = require("../../../enums/Size.enum");
10
10
  var _vue = require("vue");
11
11
  var _enums = require("../../../enums");
12
- var _validate = require("@antify/validate");
13
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
13
  const meta = {
15
14
  title: "Forms/Field",
@@ -66,39 +65,24 @@ const Docs = exports.Docs = {
66
65
  args.size = val;
67
66
  }
68
67
  });
69
- const state = (0, _vue.computed)({
70
- get() {
71
- return validator.hasErrors() ? _enums.InputState.danger : args.state;
72
- },
73
- set(val) {
74
- args.state = val;
75
- }
76
- });
77
68
  const value = (0, _vue.ref)(null);
78
- const validator = (0, _vue.reactive)((0, _validate.useFieldValidator)([_validate.isRequiredRule, _validate.notBlankRule]));
79
69
  return {
80
70
  args,
81
71
  value,
82
- validator,
83
72
  skeleton,
84
73
  size,
85
- state,
86
74
  InputState: _enums.InputState
87
75
  };
88
76
  },
89
77
  template: `
90
78
  <AntField
91
79
  v-bind="args"
92
- :messages="Array.isArray(args.messages) ? args.messages : validator.getErrors()"
93
- :state="state"
94
80
  >
95
81
  <AntBaseInput
96
82
  v-model="value"
97
83
  :skeleton="skeleton"
98
84
  :size="size"
99
- :state="state"
100
85
  placeholder="Placeholder"
101
- @validate="(val) => validator.validate(val)"
102
86
  />
103
87
  </AntField>
104
88
  `
@@ -1,9 +1,8 @@
1
1
  import AntField from "../AntField.vue";
2
2
  import AntBaseInput from "../../inputs/Elements/AntBaseInput.vue";
3
3
  import { Size } from "../../../enums/Size.enum.mjs";
4
- import { computed, reactive, ref } from "vue";
4
+ import { computed, ref } from "vue";
5
5
  import { InputState } from "../../../enums/index.mjs";
6
- import { isRequiredRule, notBlankRule, useFieldValidator } from "@antify/validate";
7
6
  const meta = {
8
7
  title: "Forms/Field",
9
8
  component: AntField,
@@ -44,31 +43,18 @@ export const Docs = {
44
43
  args.size = val;
45
44
  }
46
45
  });
47
- const state = computed({
48
- get() {
49
- return validator.hasErrors() ? InputState.danger : args.state;
50
- },
51
- set(val) {
52
- args.state = val;
53
- }
54
- });
55
46
  const value = ref(null);
56
- const validator = reactive(useFieldValidator([isRequiredRule, notBlankRule]));
57
- return { args, value, validator, skeleton, size, state, InputState };
47
+ return { args, value, skeleton, size, InputState };
58
48
  },
59
49
  template: `
60
50
  <AntField
61
51
  v-bind="args"
62
- :messages="Array.isArray(args.messages) ? args.messages : validator.getErrors()"
63
- :state="state"
64
52
  >
65
53
  <AntBaseInput
66
54
  v-model="value"
67
55
  :skeleton="skeleton"
68
56
  :size="size"
69
- :state="state"
70
57
  placeholder="Placeholder"
71
- @validate="(val) => validator.validate(val)"
72
58
  />
73
59
  </AntField>
74
60
  `
@@ -18,7 +18,7 @@ import AntField from './forms/AntField.vue';
18
18
  import AntFormGroup from './forms/AntFormGroup.vue';
19
19
  import AntFormGroupLabel from './forms/AntFormGroupLabel.vue';
20
20
  import AntBaseInput from './inputs/Elements/AntBaseInput.vue';
21
- import AntDropDown from './inputs/Elements/AntDropDown.vue';
21
+ import AntSelectMenu from './inputs/Elements/AntSelectMenu.vue';
22
22
  import AntInputDescription from './inputs/Elements/AntInputDescription.vue';
23
23
  import AntInputLabel from './inputs/Elements/AntInputLabel.vue';
24
24
  import AntInputLimiter from './inputs/Elements/AntInputLimiter.vue';
@@ -63,4 +63,4 @@ import AntTag from './AntTag.vue';
63
63
  import AntToast from './AntToast.vue';
64
64
  import AntToaster from './AntToaster.vue';
65
65
  import AntTooltip from './AntTooltip.vue';
66
- export { AntActionButton, AntButton, AntCreateButton, AntDeleteButton, AntDuplicateButton, AntEditButton, AntSaveAndNewButton, AntSaveButton, AntCrud, AntCrudDetail, AntCrudDetailActions, AntCrudDetailNav, AntCrudTableFilter, AntCrudTableNav, AntDeleteDialog, AntDialog, AntField, AntFormGroup, AntFormGroupLabel, AntBaseInput, AntDropDown, AntInputDescription, AntInputLabel, AntInputLimiter, AntCheckbox, AntCheckboxGroup, AntDateInput, AntNumberInput, AntPasswordInput, AntRadio, AntRadioGroup, AntRangeSlider, AntSearch, AntSelect, AntSwitch, AntSwitcher, AntTagInput, AntTextarea, AntTextInput, AntUnitInput, AntNavLeftLayout, AntNavbar, AntNavbarItem, AntTable, AntTabs, AntTransitionCollapseHeight, AntAccordion, AntAccordionItem, AntAlert, AntCard, AntContent, AntDropdown, AntIcon, AntKeycap, AntListGroup, AntListGroupItem, AntModal, AntPagination, AntPopover, AntSkeleton, AntSpinner, AntTag, AntToast, AntToaster, AntTooltip };
66
+ export { AntActionButton, AntButton, AntCreateButton, AntDeleteButton, AntDuplicateButton, AntEditButton, AntSaveAndNewButton, AntSaveButton, AntCrud, AntCrudDetail, AntCrudDetailActions, AntCrudDetailNav, AntCrudTableFilter, AntCrudTableNav, AntDeleteDialog, AntDialog, AntField, AntFormGroup, AntFormGroupLabel, AntBaseInput, AntSelectMenu, AntInputDescription, AntInputLabel, AntInputLimiter, AntCheckbox, AntCheckboxGroup, AntDateInput, AntNumberInput, AntPasswordInput, AntRadio, AntRadioGroup, AntRangeSlider, AntSearch, AntSelect, AntSwitch, AntSwitcher, AntTagInput, AntTextarea, AntTextInput, AntUnitInput, AntNavLeftLayout, AntNavbar, AntNavbarItem, AntTable, AntTabs, AntTransitionCollapseHeight, AntAccordion, AntAccordionItem, AntAlert, AntCard, AntContent, AntDropdown, AntIcon, AntKeycap, AntListGroup, AntListGroupItem, AntModal, AntPagination, AntPopover, AntSkeleton, AntSpinner, AntTag, AntToast, AntToaster, AntTooltip };
@@ -129,12 +129,6 @@ Object.defineProperty(exports, "AntDialog", {
129
129
  return _AntDialog.default;
130
130
  }
131
131
  });
132
- Object.defineProperty(exports, "AntDropDown", {
133
- enumerable: true,
134
- get: function () {
135
- return _AntDropDown.default;
136
- }
137
- });
138
132
  Object.defineProperty(exports, "AntDropdown", {
139
133
  enumerable: true,
140
134
  get: function () {
@@ -303,6 +297,12 @@ Object.defineProperty(exports, "AntSelect", {
303
297
  return _AntSelect.default;
304
298
  }
305
299
  });
300
+ Object.defineProperty(exports, "AntSelectMenu", {
301
+ enumerable: true,
302
+ get: function () {
303
+ return _AntSelectMenu.default;
304
+ }
305
+ });
306
306
  Object.defineProperty(exports, "AntSkeleton", {
307
307
  enumerable: true,
308
308
  get: function () {
@@ -413,7 +413,7 @@ var _AntField = _interopRequireDefault(require("./forms/AntField.vue"));
413
413
  var _AntFormGroup = _interopRequireDefault(require("./forms/AntFormGroup.vue"));
414
414
  var _AntFormGroupLabel = _interopRequireDefault(require("./forms/AntFormGroupLabel.vue"));
415
415
  var _AntBaseInput = _interopRequireDefault(require("./inputs/Elements/AntBaseInput.vue"));
416
- var _AntDropDown = _interopRequireDefault(require("./inputs/Elements/AntDropDown.vue"));
416
+ var _AntSelectMenu = _interopRequireDefault(require("./inputs/Elements/AntSelectMenu.vue"));
417
417
  var _AntInputDescription = _interopRequireDefault(require("./inputs/Elements/AntInputDescription.vue"));
418
418
  var _AntInputLabel = _interopRequireDefault(require("./inputs/Elements/AntInputLabel.vue"));
419
419
  var _AntInputLimiter = _interopRequireDefault(require("./inputs/Elements/AntInputLimiter.vue"));
@@ -18,7 +18,7 @@ import AntField from "./forms/AntField.vue";
18
18
  import AntFormGroup from "./forms/AntFormGroup.vue";
19
19
  import AntFormGroupLabel from "./forms/AntFormGroupLabel.vue";
20
20
  import AntBaseInput from "./inputs/Elements/AntBaseInput.vue";
21
- import AntDropDown from "./inputs/Elements/AntDropDown.vue";
21
+ import AntSelectMenu from "./inputs/Elements/AntSelectMenu.vue";
22
22
  import AntInputDescription from "./inputs/Elements/AntInputDescription.vue";
23
23
  import AntInputLabel from "./inputs/Elements/AntInputLabel.vue";
24
24
  import AntInputLimiter from "./inputs/Elements/AntInputLimiter.vue";
@@ -84,7 +84,7 @@ export {
84
84
  AntFormGroup,
85
85
  AntFormGroupLabel,
86
86
  AntBaseInput,
87
- AntDropDown,
87
+ AntSelectMenu,
88
88
  AntInputDescription,
89
89
  AntInputLabel,
90
90
  AntInputLimiter,
@@ -86,6 +86,20 @@ const itemSize = computed(() => {
86
86
  return IconSize.sm;
87
87
  }
88
88
  });
89
+ const iconColor = computed(() => {
90
+ switch (props.state) {
91
+ case InputState.base:
92
+ return 'text-primary-500-font';
93
+ case InputState.info:
94
+ return 'text-info-500-font';
95
+ case InputState.success:
96
+ return 'text-success-500-font'
97
+ case InputState.warning:
98
+ return 'text-warning-500-font';
99
+ default:
100
+ return 'text-danger-500-font';
101
+ }
102
+ })
89
103
 
90
104
  /**
91
105
  * Delay value to change the checkboxes background color after
@@ -145,12 +159,17 @@ onMounted(() => {
145
159
  @blur="onBlur"
146
160
  />
147
161
 
148
- <AntIcon
149
- v-if="_modelValue"
150
- :icon="faCheck"
151
- class="absolute !text-white pointer-events-none"
152
- :size="itemSize"
153
- />
162
+ <div
163
+ class="absolute flex items-center justify-center !text-white pointer-events-none"
164
+ :class="size === Size.lg || size === Size.md || size === Size.sm ? 'h-5 w-5' : 'h-4 w-4'"
165
+ >
166
+ <AntIcon
167
+ v-if="_modelValue"
168
+ :icon="faCheck"
169
+ :size="itemSize"
170
+ :color="iconColor"
171
+ />
172
+ </div>
154
173
 
155
174
  <AntSkeleton
156
175
  v-if="skeleton"
@@ -95,7 +95,7 @@ function onClickCalendar() {
95
95
  :icon="_icon"
96
96
  :color="iconColor"
97
97
  :size="iconSize"
98
- class="cursor-pointer"
98
+ :class="{'cursor-pointer': !disabled, 'opacity-50': disabled}"
99
99
  @click="onClickCalendar"
100
100
  />
101
101
  </template>
@@ -72,9 +72,9 @@ const inputClasses = computed(() => {
72
72
  const valueClass = computed(() => ({
73
73
  'relative w-fit full-height text-for-white-bg-font': true,
74
74
  'cursor-pointer': !hasInputState.value,
75
- 'cursor-not-allowed opacity-50': props.disabled,
76
75
  'text-sm': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
77
76
  'text-xs': props.size === Size.xs || props.size === Size.xs2,
77
+ 'cursor-not-allowed opacity-50': props.disabled,
78
78
  }));
79
79
  const gapSize = computed(() => {
80
80
  switch (props.size) {
@@ -106,6 +106,7 @@ const innerRadioClass = computed(() => (
106
106
  'bg-danger-500': props.state === InputState.danger,
107
107
  'h-3 w-3': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
108
108
  'h-2 w-2': props.size === Size.xs || props.size === Size.xs2,
109
+ 'cursor-not-allowed opacity-50': props.disabled,
109
110
  }
110
111
  ));
111
112
 
@@ -25,7 +25,7 @@ import {vOnClickOutside} from '@vueuse/components';
25
25
  import AntButton from '../buttons/AntButton.vue';
26
26
  import {State, InputState} from '../../enums';
27
27
  import {IconSize} from '../__types';
28
- import AntDropDown from './Elements/AntDropDown.vue';
28
+ import AntSelectMenu from './Elements/AntSelectMenu.vue';
29
29
 
30
30
  defineOptions({inheritAttrs: false});
31
31
 
@@ -100,9 +100,6 @@ const inputClasses = computed(() => {
100
100
  'rounded-none': props.grouped === Grouped.center,
101
101
  'rounded-md': props.grouped === Grouped.none,
102
102
  'rounded-tr-none rounded-br-none': props.nullable && _modelValue.value !== null,
103
- 'rounded-bl-none rounded-br-none': isOpen.value,
104
- // Open
105
- 'shadow-md': isOpen.value,
106
103
  // Disabled
107
104
  'opacity-50 cursor-not-allowed': props.disabled,
108
105
  };
@@ -143,6 +140,13 @@ const skeletonGrouped = computed(() => {
143
140
  return Grouped.left;
144
141
  }
145
142
  });
143
+ const iconSize = computed(() => {
144
+ if (props.size === Size.lg || props.size === Size.md || props.size === Size.sm) {
145
+ return IconSize.sm;
146
+ }
147
+
148
+ return IconSize.xs;
149
+ })
146
150
  const inputRef = ref<HTMLElement | null>(null);
147
151
  const dropDownRef = ref<HTMLElement | null>(null);
148
152
  const focusedDropDownItem = ref<string | number | null>(null);
@@ -244,14 +248,26 @@ function onClickRemoveButton() {
244
248
  :name="name"
245
249
  >
246
250
 
251
+ <!-- Dropdown -->
252
+ <AntSelectMenu
253
+ ref="dropDownRef"
254
+ v-model="_modelValue"
255
+ v-model:open="isOpen"
256
+ v-model:focused="dropDownFocused"
257
+ :options="options"
258
+ :size="size"
259
+ :state="state"
260
+ :close-on-enter="true"
261
+ @select-element="(e) => _modelValue = e"
262
+ >
247
263
  <!-- Input -->
248
264
  <div
249
- ref="inputRef"
250
265
  :class="inputClasses"
266
+ ref="inputRef"
251
267
  :tabindex="disabled || readonly ? -1 : 0"
252
268
  v-bind="$attrs"
253
269
  @mousedown="onClickSelectInput"
254
- @click="inputRef?.focus()"
270
+ @click="() => inputRef?.focus()"
255
271
  @blur="onBlur"
256
272
  >
257
273
  <div
@@ -278,31 +294,18 @@ function onClickRemoveButton() {
278
294
  <AntIcon
279
295
  v-if="isOpen"
280
296
  :icon="faChevronUp"
281
- :size="IconSize.sm"
297
+ :size="iconSize"
282
298
  :class="arrowClasses"
283
299
  />
284
300
 
285
301
  <AntIcon
286
302
  v-else
287
303
  :icon="faChevronDown"
288
- :size="IconSize.sm"
304
+ :size="iconSize"
289
305
  :class="arrowClasses"
290
306
  />
291
307
  </div>
292
-
293
- <!-- Dropdown -->
294
- <AntDropDown
295
- ref="dropDownRef"
296
- v-model="_modelValue"
297
- v-model:open="isOpen"
298
- v-model:focused="dropDownFocused"
299
- :options="options"
300
- :input-ref="inputRef"
301
- :size="size"
302
- :state="state"
303
- :close-on-enter="true"
304
- @select-element="(e) => _modelValue = e"
305
- />
308
+ </AntSelectMenu>
306
309
  </div>
307
310
 
308
311
  <AntButton
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import AntField from '../forms/AntField.vue';
3
- import {computed, onMounted, watch} from 'vue';
3
+ import {computed, watch} from 'vue';
4
4
  import AntSkeleton from '../AntSkeleton.vue';
5
5
  import {InputState, Size} from '../../enums';
6
6
  import {hasSlotContent} from '../../utils';
@@ -111,12 +111,7 @@ watch(() => props.skeleton, (val) => {
111
111
  }
112
112
  });
113
113
  watch(_value, () => {
114
- if (props.messages.length > 0) {
115
- emit('validate', props.modelValue);
116
- }
117
- });
118
- onMounted(() => {
119
- if (!props.skeleton && props.modelValue !== null) {
114
+ if ([InputState.danger, InputState.info, InputState.warning].includes(props.state)) {
120
115
  emit('validate', props.modelValue);
121
116
  }
122
117
  });