edvoyui-component-library-test-flight 0.0.24 → 0.0.26

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 (38) hide show
  1. package/dist/{input/EUIInput.vue.d.ts → EUIInput.vue.d.ts} +1 -1
  2. package/dist/EUIInput.vue.d.ts.map +1 -0
  3. package/dist/button/EUIButton.vue.d.ts.map +1 -0
  4. package/dist/library-vue-ts.cjs.js +16 -16
  5. package/dist/library-vue-ts.es.js +6034 -6021
  6. package/dist/library-vue-ts.umd.js +19 -19
  7. package/dist/modal/EUIModal.vue.d.ts +1 -1
  8. package/dist/modal/EUIModal.vue.d.ts.map +1 -1
  9. package/dist/popover/EUIPopover.vue.d.ts +1 -1
  10. package/dist/table/EUIDashboardTable.vue.d.ts +1 -1
  11. package/dist/table/EUITable.vue.d.ts +1 -1
  12. package/package.json +2 -1
  13. package/src/assets/svg/ChevronBigDown.vue +22 -0
  14. package/src/components/HelloWorld.vue +235 -77
  15. package/src/components/checkbox/EUICheckbox.vue +2 -2
  16. package/src/components/datepicker/EUIDatepicker.stories.ts +136 -12
  17. package/src/components/datepicker/EUIDatepicker.vue +31 -7
  18. package/src/components/delete.vue +49 -1
  19. package/src/components/index.ts +0 -1
  20. package/src/components/input/EUIInput.stories.ts +219 -6
  21. package/src/components/input/EUIInput.vue +30 -15
  22. package/src/components/modal/EUIModal.vue +13 -16
  23. package/src/components/select/EUISelect.stories.ts +49 -3
  24. package/src/components/select/EUISelect.vue +79 -34
  25. package/src/components/table/EUIDashboardTable.vue +2 -2
  26. package/src/components/table/EUITable.vue +2 -2
  27. package/src/components/telephone/EUITelephone.stories.ts +164 -8
  28. package/src/components/telephone/EUITelephone.vue +33 -11
  29. package/src/components/textArea/EUITextArea.stories.ts +52 -0
  30. package/src/components/textArea/EUITextArea.vue +36 -5
  31. package/dist/EUIButton.vue.d.ts.map +0 -1
  32. package/dist/input/EUIInput.vue.d.ts.map +0 -1
  33. package/dist/inputNormal/EUIInputNormal.vue.d.ts +0 -5
  34. package/dist/inputNormal/EUIInputNormal.vue.d.ts.map +0 -1
  35. package/src/components/inputNormal/EUIInputNormal.stories.ts +0 -164
  36. package/src/components/inputNormal/EUIInputNormal.vue +0 -161
  37. package/src/components/select/EUISelect.scss +0 -0
  38. /package/dist/{EUIButton.vue.d.ts → button/EUIButton.vue.d.ts} +0 -0
@@ -1,38 +1,43 @@
1
1
  <template>
2
2
  <div>
3
+ <label
4
+ v-if="!inputFilled && label"
5
+ :for="`${name}-${id}`"
6
+ :class="[
7
+ 'text-xs w-full text-gray-500 cursor-pointer font-medium',
8
+ required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
9
+ ]"
10
+ >
11
+ {{ label }}
12
+ </label>
3
13
  <div
4
- :class="disabled ? 'pointer-events-none cursor-not-allowed' : ''"
5
- class="relative w-full mb-2 overflow-hidden border border-gray-100 cursor-pointer group h-14 rounded-2xl focus-within:border-purple-600 focus-within:ring-1 focus-within:ring-purple-600"
14
+ :class="[{'pointer-events-none cursor-not-allowed': disabled}, {'h-14 rounded-2xl focus-within:border-purple-600 focus-within:ring-1 focus-within:ring-purple-600 border border-gray-100': inputFilled}, 'group cursor-pointer relative w-full mb-2 overflow-hidden']"
6
15
  >
7
16
  <label
17
+ v-if="inputFilled"
8
18
  :for="`${name}-${id}`"
9
19
  :class="[
10
20
  getIconClass(),
11
21
  inputValue
12
22
  ? 'top-3.5 text-xs text-gray-400 leading-none cursor-default'
13
- : 'top-1/2 text-sm w-full text-gray-700 cursor-pointer h-14 pt-5 pb-4 bg-white ring-1 ring-gray-200',
14
- disabled ? ' cursor-not-allowed' : '',
23
+ : 'top-1/2 text-sm w-full text-gray-700 cursor-pointer h-14 pt-5 pb-4',
24
+ disabled ? 'cursor-not-allowed bg-gray-50 z-10' : 'z-0 bg-white',
15
25
  required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
26
+ 'absolute font-medium left-0 px-4 -translate-y-1/2 duration-300 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0 first-letter:capitalize transition-all ease-in-out'
16
27
  ]"
17
- class="absolute font-medium left-0 px-4 z-0 -translate-y-1/2 duration-200 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0"
18
28
  >
19
- {{ label }}
29
+ {{ label || 'Label' }}
20
30
  </label>
21
31
  <div
22
32
  v-if="icon && iconType"
23
- class="absolute inset-y-0 flex items-center pointer-events-none"
24
- :class="[
25
- iconType === 'startIcon' ? 'left-0 pl-3' : 'right-0 pr-3',
26
- disabled ? 'cursor-not-allowed' : '',
27
- ]"
33
+ :class="['absolute inset-y-0 flex items-center pointer-events-none', iconType === 'startIcon' ? 'left-0 pl-3' : 'right-0 pr-3', disabled ? 'z-20': '']"
28
34
  >
29
35
  <component
30
36
  :is="icon"
31
- class="w-6 h-6 text-gray-400"
37
+ class="text-gray-400 size-6"
32
38
  aria-hidden="true"
33
39
  />
34
40
  </div>
35
-
36
41
  <input
37
42
  :id="`${name}-${id}`"
38
43
  ref="input"
@@ -40,8 +45,8 @@
40
45
  :value="modelValue"
41
46
  :placeholder="placeholder"
42
47
  :name="name"
43
- class="z-10 block w-full h-full pt-6 pb-3 text-sm font-medium leading-6 appearance-none rounded-2xl placeholder:text-gray-400 focus:outline-none disabled:opacity-75 focus:border-purple-600 autofill:bg-white"
44
- :class="[getIconClass(), disabled ? 'cursor-not-allowed' : '']"
48
+ :class="['z-10 block placeholder:text-gray-400 focus:outline-none text-sm font-medium appearance-none disabled:opacity-75 autofill:bg-white leading-6 transition-all duration-100 border-none outline-none', inputFilled ? 'pt-6 pb-3 rounded-2xl size-full' : 'px-4 py-3 h-10 w-full ring-1 ring-gray-100 focus-within:ring-purple-600 focus-within:ring-2 ring-inset', !inputFilled && rounded ? 'rounded-2xl' : 'rounded-md', disabled ? 'cursor-not-allowed' : 'cursor-text', getIconClass(), !inputFilled && className]"
49
+
45
50
  :required="required"
46
51
  :disabled="disabled"
47
52
  :readonly="readonly"
@@ -118,6 +123,16 @@ const props = defineProps({
118
123
  type: Boolean,
119
124
  default: false,
120
125
  },
126
+ inputFilled: {
127
+ type:Boolean,
128
+ default: false
129
+ },
130
+ rounded:Boolean,
131
+ className: {
132
+ type: Array as PropType<string[]>,
133
+ required: false,
134
+ default: () => [],
135
+ },
121
136
  });
122
137
 
123
138
  const hasFocus = ref(false);
@@ -7,7 +7,7 @@
7
7
  @click.self="closeModal"
8
8
  >
9
9
  <div
10
- class="backdrop fixed inset-0 z-[-1] w-screen h-screen bg-black/25 pointer-events-none overflow-hidden"
10
+ class="backdrop fixed inset-0 z-[-1] w-screen h-screen bg-black/50 pointer-events-none overflow-hidden"
11
11
  ></div>
12
12
  <div
13
13
  class="bg-white shadow-lg max-w-lg w-full max-h-[calc(100svh-3rem)] md:h-auto overflow-hidden relative"
@@ -20,13 +20,13 @@
20
20
  </template>
21
21
  <div
22
22
  v-else
23
- class="flex items-center justify-between font-medium text-gray-700"
23
+ class="flex flex-row items-center justify-between font-medium text-gray-700"
24
24
  :class="slimHeader ? 'p-4 text-base' : 'p-6 text-lg'"
25
25
  >
26
26
  <h3 class="text-xl font-semibold">
27
27
  <slot name="title">{{ title || "Modal Title" }}</slot>
28
28
  </h3>
29
- <div>
29
+ <div v-if="visibleClose" class="flex-initial">
30
30
  <button
31
31
  type="button"
32
32
  class="flex items-center justify-center text-gray-400 bg-white hover:bg-gray-50 rounded-3xl hover:text-gray-600 size-8"
@@ -104,6 +104,10 @@ export default defineComponent({
104
104
  type: String,
105
105
  default: "",
106
106
  },
107
+ visibleClose: {
108
+ type: Boolean,
109
+ default: true,
110
+ },
107
111
  },
108
112
  emits: ["update:isVisible", "confirm"],
109
113
  methods: {
@@ -131,33 +135,26 @@ export default defineComponent({
131
135
  <style lang="scss" scoped>
132
136
  .modal-enter-active,
133
137
  .modal-leave-active {
134
- transition: opacity 0.5s ease, transform 0.5s ease;
138
+ transition: opacity 0.3s ease, transform 0.3s ease;
135
139
  }
136
140
  .modal-enter-from,
137
141
  .modal-leave-to {
138
- opacity: 0;
139
- transform-origin: top;
140
- transform: translateY(40%) scale(0.4);
142
+ @apply opacity-0;
141
143
  }
142
144
  .modal-enter-to,
143
145
  .modal-leave-from {
144
- opacity: 1;
145
- transform-origin: top center;
146
- transform: translateY(0%) scale(1);
146
+ @apply opacity-100;
147
147
  }
148
148
 
149
149
  .backdrop {
150
- transition: opacity 0.6s ease, transform 0.6s ease;
150
+ transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1);
151
151
  }
152
152
  .modal-enter-from .backdrop,
153
153
  .modal-leave-to .backdrop {
154
- transform: scale(0.3) rotate3d(0.5, 1, 0, 60deg);
155
- opacity: 0;
154
+ @apply opacity-0;
156
155
  }
157
156
  .modal-enter-to .backdrop,
158
157
  .modal-leave-from .backdrop {
159
- // transform: scale(0.8) rotate3d(0.5, 0, 0, 90deg); //rotate effect
160
- transform: scale(1) rotate3d(0, 0, 0, 90deg); // fade effect only
161
- opacity: 0.2;
158
+ @apply opacity-100;
162
159
  }
163
160
  </style>
@@ -25,6 +25,15 @@ const meta = {
25
25
  description:
26
26
  "Object containing validation errors where keys are field names and values are the error messages.",
27
27
  },
28
+ inputFilled: {
29
+ control: "boolean",
30
+ description: "Toggles the alternate Select input Filled design.",
31
+ defaultValue: false,
32
+ table: {
33
+ type: { summary: "Boolean" },
34
+ defaultValue: { summary: "false" },
35
+ },
36
+ },
28
37
  },
29
38
  } satisfies Meta<typeof EUISelect>;
30
39
 
@@ -35,8 +44,8 @@ type Story = StoryObj<typeof meta>;
35
44
  export const Default: Story = {
36
45
  args: {
37
46
  name: "country",
38
- label: "country",
39
- placeholder: "country",
47
+ label: "Country Name",
48
+ placeholder: "select country",
40
49
  items: [
41
50
  { value: "usa", label: "United States", name: "United States" },
42
51
  { value: "canada", label: "Canada", name: "Canada" },
@@ -44,6 +53,43 @@ export const Default: Story = {
44
53
  ],
45
54
  modelValue: { value: "usa", label: "United States", name: "United States" },
46
55
  errors: {},
47
- required: true,
56
+ required: false,
48
57
  },
58
+ render: (args) => ({
59
+ components: { EUISelect },
60
+ setup() {
61
+ return { args };
62
+ },
63
+ template: '<div class="max-w-xs"><EUISelect v-bind="args" /></div>',
64
+ }),
49
65
  };
66
+
67
+ export const inputFilled: Story = {
68
+ args: {
69
+ name: "country",
70
+ label: "Country Name",
71
+ placeholder: "select country",
72
+ items: [
73
+ { value: "usa", label: "United States", name: "United States" },
74
+ { value: "canada", label: "Canada", name: "Canada" },
75
+ { value: "uk", label: "United Kingdom", name: "United Kingdom" },
76
+ ],
77
+ modelValue: [],
78
+ errors: {},
79
+ inputFilled: true,
80
+ },
81
+ parameters: {
82
+ docs: {
83
+ description: {
84
+ story: "Toggles the alternate Select Filled design.",
85
+ },
86
+ },
87
+ },
88
+ render: (args) => ({
89
+ components: { EUISelect },
90
+ setup() {
91
+ return { args };
92
+ },
93
+ template: '<div class="max-w-xs"><EUISelect v-bind="args" /></div>',
94
+ }),
95
+ };
@@ -1,5 +1,14 @@
1
1
  <template>
2
2
  <div :class="isUseCustomSelect ? 'isUseCustomSelect' : ''">
3
+ <label
4
+ v-if="!inputFilled && label"
5
+ :class="[
6
+ 'text-xs w-full text-gray-500 cursor-pointer font-medium block mb-1',
7
+ required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
8
+ ]"
9
+ >
10
+ {{ label }}
11
+ </label>
3
12
  <vSelect
4
13
  v-model="selected"
5
14
  :filter="isFussySeach ? fuseSearch : undefined"
@@ -18,7 +27,14 @@
18
27
  :loading="loading"
19
28
  :disabled="disabled"
20
29
  :selectable="selectedLimit"
21
- :class="[ isUseCustomSelect ? 'customselect' : 'rounded-2xl border border-gray-200 focus-within:border-purple-600 focus-within:ring-inset focus-within:ring-1 focus-within:ring-purple-600 z-10 focus-within:rounded', disabled ? 'opacity-25' : '', 'group relative min-h-14 w-full bg-white cursor-pointer overflow-hidden' ]"
30
+ :class="[
31
+ isUseCustomSelect
32
+ ? 'customselect'
33
+ : 'border border-gray-200 focus-within:border-purple-600 focus-within:ring-inset focus-within:ring-1 focus-within:ring-purple-600 z-10 focus-within:rounded',
34
+ inputFilled ? 'rounded-2xl min-h-14' : 'rounded-md min-h-10',
35
+ 'group relative w-full bg-white cursor-pointer overflow-hidden',
36
+ { 'opacity-25': disabled },
37
+ ]"
22
38
  :clearable="isUseCustomSelect ? clearable : undefined"
23
39
  :no-drop="nodropDown"
24
40
  @search="search($event)"
@@ -26,18 +42,18 @@
26
42
  @option:deselected="deselected($event)"
27
43
  @option:created="handleOptionCreate"
28
44
  >
29
- <template #header>
45
+ <template v-if="inputFilled" #header>
30
46
  <div
31
47
  :class="[
32
48
  inputValue
33
49
  ? 'top-3.5 text-xs text-gray-400 cursor-default max-w-max'
34
- : 'top-1/2 text-sm text-gray-700 cursor-pointer h-14 pt-5 pb-4 bg-transparent ring-0 ring-gray-200 group-hover:top-3.5 group-hover:py-0 group-hover:h-auto bg-white group-hover:text-xs group-hover:min-w-max w-11/12 group-hover:-translate-y-1/2 group-hover:text-gray-400',
50
+ : 'top-1/2 text-sm text-gray-700 cursor-pointer h-14 pt-5 pb-4 bg-transparent ring-0 ring-gray-200 group-hover:top-3.5 group-hover:py-0 group-hover:h-auto bg-white group-hover:text-xs group-hover:w-max w-11/12 group-hover:-translate-y-1/2 group-hover:text-gray-400',
35
51
  disabled ? ' cursor-not-allowed' : '',
36
52
  required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
37
53
  ]"
38
54
  class="absolute text-left font-medium inset-x-0 px-4 z-10 -translate-y-1/2 duration-200 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0 capitalize leading-[normal]"
39
55
  >
40
- {{ startCaseText(label) }}
56
+ {{ startCaseText(label) || "Select" }}
41
57
  </div>
42
58
  </template>
43
59
  <template #selected-option="{ name: nameText, iconlink }">
@@ -90,6 +106,11 @@
90
106
  </button>
91
107
  </div>
92
108
  </template>
109
+ <template #open-indicator="{ attributes }">
110
+ <span v-bind="attributes as Record<string, any>"
111
+ ><ChevronBigDown class="text-current size-6"
112
+ /></span>
113
+ </template>
93
114
  </vSelect>
94
115
  <EUIErrorMessage :errors="errors" :name="name" class="mt-2" />
95
116
  </div>
@@ -111,8 +132,8 @@ import {
111
132
  toRefs,
112
133
  watch,
113
134
  } from "vue";
114
- import "./EUISelect.scss";
115
135
  import { ValidationErrors } from "../../utils/types";
136
+ import ChevronBigDown from "../../assets/svg/ChevronBigDown.vue";
116
137
 
117
138
  type VirtualElement = {
118
139
  getBoundingClientRect: () => ClientRect | DOMRect;
@@ -146,7 +167,7 @@ const props = defineProps({
146
167
  default: "",
147
168
  required: false,
148
169
  },
149
- customOffset:{
170
+ customOffset: {
150
171
  type: Array as PropType<any>,
151
172
  required: false,
152
173
  },
@@ -170,7 +191,7 @@ const props = defineProps({
170
191
  },
171
192
  label: {
172
193
  type: String,
173
- default: "Select an option...",
194
+ default: "",
174
195
  required: false,
175
196
  },
176
197
  searchLabel: {
@@ -198,10 +219,10 @@ const props = defineProps({
198
219
  required: false,
199
220
  default: false,
200
221
  },
201
- multipleLimit:{
222
+ multipleLimit: {
202
223
  type: Number,
203
224
  required: false,
204
- default: false
225
+ default: false,
205
226
  },
206
227
  disabled: {
207
228
  type: Boolean as PropType<boolean>,
@@ -252,6 +273,10 @@ const props = defineProps({
252
273
  required: false,
253
274
  default: true,
254
275
  },
276
+ inputFilled: {
277
+ type: Boolean,
278
+ default: false,
279
+ },
255
280
  });
256
281
 
257
282
  const {
@@ -302,7 +327,7 @@ const deselected = (newValue: any) => {
302
327
  }
303
328
  };
304
329
 
305
- watch(modelValue, (newValue:any) => {
330
+ watch(modelValue, (newValue: any) => {
306
331
  selected.value = newValue;
307
332
  });
308
333
 
@@ -311,8 +336,8 @@ const search = (x: string) => {
311
336
  emit("search", x);
312
337
  };
313
338
 
314
- const selectWidth = computed(() => props.customWidth)
315
- const offsetValue = computed(() => props.customOffset)
339
+ const selectWidth = computed(() => props.customWidth);
340
+ const offsetValue = computed(() => props.customOffset);
316
341
 
317
342
  const withPopper = (
318
343
  dropdownList: HTMLElement,
@@ -320,10 +345,10 @@ const withPopper = (
320
345
  { width }: any
321
346
  ) => {
322
347
  const newwidth = selectWidth.value || width; //setcustom width '400px'
323
- const newOffset = offsetValue.value || [0,3]; //setcustom Offset '[123, -1]'
348
+ const newOffset = offsetValue.value || [0, 7]; //setcustom Offset '[123, -1]'
324
349
  const customWidth = isUseCustomSelect.value ? newwidth : width;
325
350
  dropdownList.style.width = customWidth;
326
- const offsetValues = isUseCustomSelect.value ? newOffset : [0, 3];
351
+ const offsetValues = isUseCustomSelect.value ? newOffset : [0, 7];
327
352
  const popper = createPopper(component.$refs.toggle, dropdownList, {
328
353
  placement: "bottom",
329
354
  modifiers: [
@@ -360,7 +385,13 @@ onBeforeUnmount(() => {
360
385
 
361
386
  const slectedChipbg = computed(() => (props.multiple ? "#f3e8ff" : ""));
362
387
  const slectedChiptextColor = computed(() => (props.multiple ? "#7e22ce" : ""));
363
- const slectedChipHeight = computed(() => (props.multiple ? "fit-content" : ""));
388
+ const slectedChipHeight = computed(() =>
389
+ props.multiple && props.inputFilled
390
+ ? "fit-content"
391
+ : props.inputFilled
392
+ ? ""
393
+ : "auto"
394
+ );
364
395
 
365
396
  const dropDownIcon = computed(() => (props.clearable ? "flex" : "none"));
366
397
 
@@ -372,17 +403,17 @@ const selectBG = computed(() => {
372
403
  });
373
404
  const selectHeight = computed(() => {
374
405
  if (selected.value?.length === 0 || _.isEmpty(selected.value)) {
375
- return "54px";
406
+ return props.inputFilled ? "54px" : "36px";
376
407
  }
377
408
 
378
409
  let heightValue;
379
410
 
380
411
  if (props.multiple) {
381
- heightValue = "32px";
412
+ heightValue = props.inputFilled ? "32px" : "0px";
382
413
  } else if (isUseCustomSelect.value) {
383
414
  heightValue = "fit-content";
384
415
  } else {
385
- heightValue = "54px";
416
+ heightValue = props.inputFilled ? "40px" : "30px";
386
417
  }
387
418
 
388
419
  return heightValue;
@@ -396,15 +427,28 @@ const selectedMultiple = computed(() => {
396
427
  let heightValue;
397
428
 
398
429
  if (isUseCustomSelect.value || props.multiple) {
399
- heightValue = "24px";
430
+ heightValue = props.inputFilled ? "24px" : "4px";
400
431
  } else {
401
- heightValue = "2px";
432
+ heightValue = props.inputFilled ? "12px" : "2px";
402
433
  }
403
434
 
404
435
  return heightValue;
405
436
  });
406
437
 
407
- const selectFocus = computed(() => (props.multiple ? "8px" : "8px"));
438
+ const selectFocus = computed(() =>
439
+ props.multiple && props.inputFilled
440
+ ? "8px"
441
+ : props.inputFilled
442
+ ? "8px"
443
+ : "0px"
444
+ );
445
+ const searchMargin = computed(() =>
446
+ props.multiple && props.inputFilled
447
+ ? "10px"
448
+ : props.inputFilled
449
+ ? "10px"
450
+ : "0px"
451
+ );
408
452
 
409
453
  const selectRequited = computed(() =>
410
454
  props.required
@@ -435,7 +479,8 @@ const inputValue = computed(() => {
435
479
  const selectedValue = selected.value;
436
480
  if (modelValue) return true;
437
481
  if (Array.isArray(selectedValue)) return !!selectedValue.length;
438
- if (selectedValue && typeof selectedValue === 'object') return !!Object.keys(selectedValue).length;
482
+ if (selectedValue && typeof selectedValue === "object")
483
+ return !!Object.keys(selectedValue).length;
439
484
  return !!selectedValue;
440
485
  });
441
486
 
@@ -444,17 +489,18 @@ const handleOptionCreate = (e: any) => {
444
489
  };
445
490
 
446
491
  const isSelectable = computed(() => {
447
- return !props.multipleLimit || (selected.value?.length ?? 0) < props.multipleLimit;
492
+ return (
493
+ !props.multipleLimit || (selected.value?.length ?? 0) < props.multipleLimit
494
+ );
448
495
  });
449
496
 
450
- const selectedLimit = () => {
451
- if(!props.multipleLimit) return true
497
+ const selectedLimit = () => {
498
+ if (!props.multipleLimit) return true;
452
499
 
453
- if(props.multipleLimit) {
454
- return isSelectable.value
500
+ if (props.multipleLimit) {
501
+ return isSelectable.value;
455
502
  }
456
- }
457
-
503
+ };
458
504
 
459
505
  // const handlers = (e: Event) => {
460
506
  // console.log("@e", e);
@@ -492,9 +538,6 @@ const selectedLimit = () => {
492
538
  }
493
539
  }
494
540
 
495
- .vs__search:focus {
496
- padding-top: v-bind(selectFocus);
497
- }
498
541
  .vs--single.vs--open .vs__selected,
499
542
  .vs--single.vs--loading .vs__selected {
500
543
  @apply opacity-0;
@@ -551,9 +594,11 @@ const selectedLimit = () => {
551
594
 
552
595
  .vs {
553
596
  &__search {
554
- @apply placeholder-gray-500 placeholder:text-sm placeholder:font-medium placeholder:leading-loose;
597
+ @apply px-2 placeholder:text-sm placeholder:font-medium placeholder:leading-loose appearance-none;
598
+ margin-top: v-bind(searchMargin);
555
599
  &:focus {
556
- @apply text-sm font-medium;
600
+ @apply text-sm font-medium pl-2.5;
601
+ padding-top: v-bind(selectFocus);
557
602
  }
558
603
  }
559
604
  &__selected {
@@ -96,7 +96,7 @@
96
96
  </template>
97
97
  </tbody>
98
98
  <tbody v-if="computedItems.length === 0">
99
- <tr>
99
+ <tr class="norecords">
100
100
  <td :colspan="headers.length">
101
101
  <div
102
102
  class="flex items-center justify-center text-xl font-medium text-gray-500 min-h-96"
@@ -458,7 +458,7 @@ watch(() => tableContainer.value?.clientWidth, checkOverflow);
458
458
  }
459
459
  tbody {
460
460
  @apply snap-y snap-mandatory snap-always;
461
- tr {
461
+ tr:not(.norecords) {
462
462
  @apply text-gray-500 transition-all duration-150 rounded-xl bg-white snap-start ease-in-out snap-x snap-mandatory;
463
463
  &:hover {
464
464
  @apply shadow-[1px_2px_40px_0px_#03022912] ring-1 ring-gray-100 ring-inset z-30;
@@ -125,7 +125,7 @@
125
125
  </template>
126
126
  </tbody>
127
127
  <tbody v-if="computedItems.length === 0">
128
- <tr>
128
+ <tr class="norecords">
129
129
  <td :colspan="checkable === true ? headers.length + 1 : headers.length">
130
130
  <div
131
131
  class="flex items-center justify-center text-xl font-medium text-gray-500 min-h-96"
@@ -484,7 +484,7 @@ watch(() => tableContainer.value?.clientWidth, checkOverflow);
484
484
 
485
485
  tbody {
486
486
  @apply snap-y snap-mandatory snap-always;
487
- tr {
487
+ tr:not(.norecords) {
488
488
  @apply text-gray-600 transition-colors duration-100 bg-white snap-start ease-in-out snap-x snap-mandatory rounded-sm h-12;
489
489
  &:hover {
490
490
  @apply bg-purple-50 ring-1 ring-purple-100 ring-inset;