@antify/ui 2.0.0 → 2.1.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.
@@ -9,10 +9,12 @@ const props = withDefaults(defineProps<{
9
9
  state?: InputState,
10
10
  delay?: number,
11
11
  tooltipClasses?: string | Record<string, boolean>
12
+ disabled?: boolean;
12
13
  }>(), {
13
14
  state: InputState.base,
14
15
  delay: 600,
15
16
  tooltipClasses: '',
17
+ disabled: false,
16
18
  });
17
19
 
18
20
  const floatOpen = ref<boolean>(false)
@@ -157,7 +159,7 @@ function onClick() {
157
159
 
158
160
  <teleport to="body">
159
161
  <div
160
- v-if="floatOpen && hasSlotContent($slots.content)"
162
+ v-if="floatOpen && hasSlotContent($slots.content) && !disabled"
161
163
  :class="_tooltipClasses"
162
164
  ref="floating"
163
165
  :style="{
@@ -4,3 +4,4 @@ declare const meta: Meta<typeof AntTooltip>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof AntTooltip>;
6
6
  export declare const Docs: Story;
7
+ export declare const disabled: Story;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- module.exports = exports.Docs = void 0;
6
+ exports.disabled = exports.default = exports.Docs = void 0;
7
7
  var _AntTooltip = _interopRequireDefault(require("../AntTooltip.vue"));
8
8
  var _enums = require("../../enums");
9
9
  var _AntButton = _interopRequireDefault(require("../buttons/AntButton.vue"));
@@ -102,4 +102,11 @@ const Docs = exports.Docs = {
102
102
  });
103
103
  },
104
104
  args: {}
105
+ };
106
+ const disabled = exports.disabled = {
107
+ render: Docs.render,
108
+ args: {
109
+ ...Docs.args,
110
+ disabled: true
111
+ }
105
112
  };
@@ -75,3 +75,10 @@ export const Docs = {
75
75
  },
76
76
  args: {}
77
77
  };
78
+ export const disabled = {
79
+ render: Docs.render,
80
+ args: {
81
+ ...Docs.args,
82
+ disabled: true
83
+ }
84
+ };
@@ -81,27 +81,25 @@ watch(() => props.fullWidth, (val) => {
81
81
  v-model:show-dropdown="showDropdown"
82
82
  :position="Position.left"
83
83
  >
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
- />
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
+ />
93
92
 
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>
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>
105
103
 
106
104
  <template #content>
107
105
  <slot name="dropdownContent"/>
@@ -12,7 +12,6 @@ import type {SelectOption} from '../__types';
12
12
  import {useElementSize, useVModel, onClickOutside} from '@vueuse/core';
13
13
  import type {Validator} from '@antify/validate';
14
14
  import {autoUpdate, flip, offset, useFloating} from "@floating-ui/vue";
15
- import {vOnClickOutside} from '@vueuse/components';
16
15
 
17
16
  const emit = defineEmits(['update:open', 'update:modelValue', 'update:focused', 'selectElement']);
18
17
  const props = withDefaults(defineProps<{
@@ -35,7 +34,7 @@ const props = withDefaults(defineProps<{
35
34
  closeOnSelectItem: true,
36
35
  });
37
36
  const reference = ref<HTMLElement | null | undefined>(props.inputRef)
38
- const width = useElementSize(reference);
37
+ const elementSize = useElementSize(reference);
39
38
  const floating = ref<HTMLElement | null>(null)
40
39
  const {floatingStyles, middlewareData, placement} = useFloating(reference, floating, {
41
40
  placement: 'bottom',
@@ -69,7 +68,7 @@ const dropdownClasses = computed(() => {
69
68
  };
70
69
 
71
70
  return {
72
- 'w-full border flex flex-col gap-px outline-none -mt-px overflow-hidden shadow-md z-[90]': true,
71
+ 'w-full border flex flex-col gap-px outline-none -mt-px overflow-y-auto shadow-md z-[90] max-h-[250px]': true,
73
72
  'rounded-md': true,
74
73
  [variants[props.state]]: true,
75
74
  };
@@ -84,7 +83,7 @@ const dropDownItemClasses = computed(() => {
84
83
  };
85
84
 
86
85
  return {
87
- 'select-none text-ellipsis overflow-hidden whitespace-nowrap': true,
86
+ 'select-none text-ellipsis overflow-hidden whitespace-nowrap min-h-fit': true,
88
87
  [variants[props.state]]: true,
89
88
  // Size
90
89
  'p-1 text-xs': props.size === Size.xs2,
@@ -203,31 +202,31 @@ watch(_modelValue, (val) => {
203
202
  <slot/>
204
203
 
205
204
  <teleport to="body">
206
- <div
207
- v-if="isOpen"
208
- :class="dropdownClasses"
209
- ref="floating"
210
- :style="{width: `${width.width.value}px!important`, ...floatingStyles}"
211
- >
212
205
  <div
213
- v-for="(option, index) in options"
214
- :key="`option-${index}`"
215
- :class="{...dropDownItemClasses, ...getActiveDropDownItemClasses(option)}"
216
- @mousedown="(e) => onClickDropDownItem(e, option.value)"
217
- @mouseover="() => focusedDropDownItem = option.value"
206
+ v-if="isOpen"
207
+ :class="dropdownClasses"
208
+ ref="floating"
209
+ :style="{width: `${elementSize.width.value}px!important`, ...floatingStyles}"
218
210
  >
219
- {{ option.label }}
211
+ <div
212
+ v-for="(option, index) in options"
213
+ :key="`option-${index}`"
214
+ :class="{...dropDownItemClasses, ...getActiveDropDownItemClasses(option)}"
215
+ @mousedown="(e) => onClickDropDownItem(e, option.value)"
216
+ @mouseover="() => focusedDropDownItem = option.value"
217
+ >
218
+ {{ option.label }}
219
+ </div>
220
+
221
+ <div
222
+ v-if="options.length === 0"
223
+ :class="{...dropDownItemClasses}"
224
+ >
225
+ <slot name="empty">
226
+ No options available
227
+ </slot>
228
+ </div>
220
229
  </div>
221
-
222
- <div
223
- v-if="options.length === 0"
224
- :class="{...dropDownItemClasses}"
225
- >
226
- <slot name="empty">
227
- No options available
228
- </slot>
229
- </div>
230
- </div>
231
230
  </teleport>
232
231
  </div>
233
232
  </template>
@@ -4,6 +4,7 @@ declare const meta: Meta<typeof AntSelect>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof AntSelect>;
6
6
  export declare const Docs: Story;
7
+ export declare const manyOptions: Story;
7
8
  export declare const nullable: Story;
8
9
  export declare const skeleton: Story;
9
10
  export declare const disabled: Story;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withPlaceholder = exports.summary = exports.skeleton = exports.nullable = exports.ellipsisText = exports.disabled = exports.default = exports.Docs = void 0;
6
+ exports.withPlaceholder = exports.summary = exports.skeleton = exports.nullable = exports.manyOptions = exports.ellipsisText = exports.disabled = exports.default = exports.Docs = void 0;
7
7
  var _Size = require("../../../enums/Size.enum");
8
8
  var _AntSelect = _interopRequireDefault(require("../AntSelect.vue"));
9
9
  var _AntSelectMenu = _interopRequireDefault(require("../Elements/AntSelectMenu.vue"));
@@ -75,6 +75,10 @@ const options = [{
75
75
  label: "Option 4",
76
76
  value: "4"
77
77
  }];
78
+ const manySelectOptions = [...Array(24).keys()].map(key => ({
79
+ label: `Option ${Number(key) + 1}`,
80
+ value: Number(key) + 1
81
+ }));
78
82
  const Docs = exports.Docs = {
79
83
  render: args => ({
80
84
  components: {
@@ -115,6 +119,13 @@ const Docs = exports.Docs = {
115
119
  description: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod"
116
120
  }
117
121
  };
122
+ const manyOptions = exports.manyOptions = {
123
+ render: Docs.render,
124
+ args: {
125
+ ...Docs.args,
126
+ options: manySelectOptions
127
+ }
128
+ };
118
129
  const nullable = exports.nullable = {
119
130
  render: Docs.render,
120
131
  args: {
@@ -185,7 +196,8 @@ const summary = exports.summary = {
185
196
  },
186
197
  setup() {
187
198
  return {
188
- args
199
+ args,
200
+ manySelectOptions
189
201
  };
190
202
  },
191
203
  template: `
@@ -53,6 +53,10 @@ const options = [
53
53
  value: "4"
54
54
  }
55
55
  ];
56
+ const manySelectOptions = [...Array(24).keys()].map((key) => ({
57
+ label: `Option ${Number(key) + 1}`,
58
+ value: Number(key) + 1
59
+ }));
56
60
  export const Docs = {
57
61
  render: (args) => ({
58
62
  components: { AntSelect, AntDropdown },
@@ -86,6 +90,13 @@ export const Docs = {
86
90
  description: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod"
87
91
  }
88
92
  };
93
+ export const manyOptions = {
94
+ render: Docs.render,
95
+ args: {
96
+ ...Docs.args,
97
+ options: manySelectOptions
98
+ }
99
+ };
89
100
  export const nullable = {
90
101
  render: Docs.render,
91
102
  args: {
@@ -151,7 +162,7 @@ export const summary = {
151
162
  render: (args) => ({
152
163
  components: { AntSelect },
153
164
  setup() {
154
- return { args };
165
+ return { args, manySelectOptions };
155
166
  },
156
167
  template: `
157
168
  <div class="p-4 flex flex-col gap-2.5">
@@ -29,13 +29,15 @@ const props = withDefaults(
29
29
  showLightVersion?: boolean;
30
30
  size?: AntTableSize;
31
31
  headerColor?: string;
32
+ emptyStateText?: string;
32
33
  }>(), {
33
34
  rowKey: 'id',
34
35
  loading: false,
35
36
  selectableRows: false,
36
37
  showLightVersion: false,
37
38
  size: AntTableSize.md,
38
- headerColor: 'bg-base-200'
39
+ headerColor: 'bg-base-200',
40
+ emptyStateText: 'We couldn\'t find any entry',
39
41
  });
40
42
 
41
43
  const selected: Ref<Record<string, unknown> | undefined> = useVModel(props, 'selectedRow', emits);
@@ -188,7 +190,7 @@ function rowClick(elem: Record<string, unknown>): void {
188
190
  >
189
191
  <slot name="emptyState">
190
192
  <div class="flex items-center flex-col">
191
- <span class="font-semibold">We couldn't find any entry</span>
193
+ <span class="font-semibold">{{ emptyStateText }}</span>
192
194
  </div>
193
195
  </slot>
194
196
  </td>
@@ -205,7 +205,43 @@ const Docs = exports.Docs = {
205
205
  }
206
206
  };
207
207
  const Empty = exports.Empty = {
208
- render: Docs.render,
208
+ render: args => ({
209
+ components: {
210
+ AntTable: _AntTable.default,
211
+ AntSwitch: _AntSwitch.default
212
+ },
213
+ setup() {
214
+ const selected = (0, _vue.ref)();
215
+ return {
216
+ args,
217
+ selected
218
+ };
219
+ },
220
+ template: `
221
+ <div class="flex flex-col gap-2">
222
+ <div class="h-96 border border-dashed border-base-300">
223
+ <AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
224
+ <template #cellContent="{element: entry, header}">
225
+ <div v-if="header.identifier === 'employeed'">
226
+ <AntSwitch v-model="entry.employeed"/>
227
+ </div>
228
+ </template>
229
+ </AntTable>
230
+ </div>
231
+
232
+ <div class="h-96 border border-dashed border-base-300">
233
+ <AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" empty-state-text="Custom Empty State Text">
234
+ <template #cellContent="{element: entry, header}">
235
+ <div v-if="header.identifier === 'employeed'">
236
+ <AntSwitch v-model="entry.employeed"/>
237
+ </div>
238
+ </template>
239
+ </AntTable>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ `
244
+ }),
209
245
  args: {
210
246
  headers: [{
211
247
  title: "Name",
@@ -154,7 +154,37 @@ export const Docs = {
154
154
  }
155
155
  };
156
156
  export const Empty = {
157
- render: Docs.render,
157
+ render: (args) => ({
158
+ components: { AntTable, AntSwitch },
159
+ setup() {
160
+ const selected = ref();
161
+ return { args, selected };
162
+ },
163
+ template: `
164
+ <div class="flex flex-col gap-2">
165
+ <div class="h-96 border border-dashed border-base-300">
166
+ <AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val">
167
+ <template #cellContent="{element: entry, header}">
168
+ <div v-if="header.identifier === 'employeed'">
169
+ <AntSwitch v-model="entry.employeed"/>
170
+ </div>
171
+ </template>
172
+ </AntTable>
173
+ </div>
174
+
175
+ <div class="h-96 border border-dashed border-base-300">
176
+ <AntTable v-bind="args" v-model="selected" :selected-row="selected" @row-click="(val) => selected = val" empty-state-text="Custom Empty State Text">
177
+ <template #cellContent="{element: entry, header}">
178
+ <div v-if="header.identifier === 'employeed'">
179
+ <AntSwitch v-model="entry.employeed"/>
180
+ </div>
181
+ </template>
182
+ </AntTable>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ `
187
+ }),
158
188
  args: {
159
189
  headers: [
160
190
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antify/ui",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {