vueless 0.0.702 → 0.0.704

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 (76) hide show
  1. package/bin/constants.js +2 -2
  2. package/constants.js +2 -2
  3. package/package.json +1 -1
  4. package/ui.button/config.ts +8 -26
  5. package/ui.button/storybook/stories.ts +0 -3
  6. package/ui.button/types.ts +0 -5
  7. package/ui.button-link/config.ts +3 -9
  8. package/ui.button-link/storybook/stories.ts +0 -3
  9. package/ui.button-link/types.ts +0 -5
  10. package/ui.button-toggle/UToggle.vue +0 -1
  11. package/ui.button-toggle/config.ts +1 -6
  12. package/ui.button-toggle/types.ts +0 -5
  13. package/ui.button-toggle-item/UToggleItem.vue +0 -2
  14. package/ui.button-toggle-item/config.ts +1 -1
  15. package/ui.container-modal/UModal.vue +0 -1
  16. package/ui.container-page/UPage.vue +0 -1
  17. package/ui.dropdown-badge/config.ts +4 -5
  18. package/ui.dropdown-badge/storybook/stories.ts +0 -1
  19. package/ui.dropdown-button/config.ts +4 -5
  20. package/ui.dropdown-button/storybook/stories.ts +0 -1
  21. package/ui.dropdown-link/UDropdownLink.vue +0 -1
  22. package/ui.dropdown-link/config.ts +3 -7
  23. package/ui.dropdown-link/storybook/stories.ts +0 -3
  24. package/ui.dropdown-link/types.ts +0 -5
  25. package/ui.dropdown-list/config.ts +7 -3
  26. package/ui.dropdown-list/storybook/stories.ts +1 -0
  27. package/ui.form-calendar/UCalendar.vue +0 -4
  28. package/ui.form-calendar/UCalendarDayView.vue +0 -13
  29. package/ui.form-calendar/UCalendarMonthView.vue +0 -12
  30. package/ui.form-calendar/UCalendarYearView.vue +0 -12
  31. package/ui.form-checkbox/config.ts +9 -6
  32. package/ui.form-color-picker/UColorPicker.vue +0 -1
  33. package/ui.form-date-picker-range/UDatePickerRange.vue +0 -3
  34. package/ui.form-date-picker-range/UDatePickerRangePeriodMenu.vue +0 -12
  35. package/ui.form-date-picker-range/config.ts +7 -20
  36. package/ui.form-input/UInput.vue +2 -8
  37. package/ui.form-input/config.ts +6 -16
  38. package/ui.form-input/storybook/stories.ts +36 -22
  39. package/ui.form-input/types.ts +1 -1
  40. package/ui.form-input-file/UInputFile.vue +1 -2
  41. package/ui.form-input-file/config.ts +4 -7
  42. package/ui.form-input-money/UInputMoney.vue +5 -4
  43. package/ui.form-input-money/storybook/stories.ts +126 -49
  44. package/ui.form-input-number/storybook/stories.ts +43 -21
  45. package/ui.form-input-rating/UInputRating.vue +1 -0
  46. package/ui.form-input-rating/config.ts +5 -0
  47. package/ui.form-input-rating/storybook/stories.ts +62 -19
  48. package/ui.form-input-rating/types.ts +12 -7
  49. package/ui.form-input-search/UInputSearch.vue +1 -1
  50. package/ui.form-input-search/config.ts +8 -11
  51. package/ui.form-input-search/storybook/stories.ts +110 -31
  52. package/ui.form-input-search/types.ts +6 -6
  53. package/ui.form-label/config.ts +3 -3
  54. package/ui.form-radio/URadio.vue +5 -2
  55. package/ui.form-radio/config.ts +12 -6
  56. package/ui.form-radio-group/URadioGroup.vue +1 -0
  57. package/ui.form-select/config.ts +4 -7
  58. package/ui.form-switch/USwitch.vue +8 -2
  59. package/ui.form-switch/config.ts +11 -8
  60. package/ui.form-switch/types.ts +0 -1
  61. package/ui.form-textarea/config.ts +8 -14
  62. package/ui.navigation-breadcrumbs/UBreadcrumbs.vue +0 -1
  63. package/ui.navigation-breadcrumbs/types.ts +1 -1
  64. package/ui.navigation-pagination/UPagination.vue +22 -10
  65. package/ui.navigation-pagination/config.ts +15 -17
  66. package/ui.navigation-tab/UTab.vue +58 -20
  67. package/ui.navigation-tab/config.ts +14 -14
  68. package/ui.navigation-tab/storybook/stories.ts +1 -1
  69. package/ui.navigation-tab/types.ts +15 -4
  70. package/ui.navigation-tabs/UTabs.vue +6 -4
  71. package/ui.navigation-tabs/config.ts +4 -15
  72. package/ui.navigation-tabs/storybook/stories.ts +0 -3
  73. package/ui.navigation-tabs/types.ts +8 -3
  74. package/ui.text-alert/UAlert.vue +0 -1
  75. package/ui.text-badge/config.ts +3 -6
  76. package/ui.text-file/UFile.vue +2 -9
@@ -4,18 +4,13 @@ export default /*tw*/ {
4
4
  base: "{UInput} {>searchInput}",
5
5
  rightSlot: "pr-0",
6
6
  },
7
- clearIcon: {
7
+ inputIcon: {
8
8
  base: "{UIcon}",
9
- defaults: {
10
- size: {
11
- sm: "xs",
12
- md: "sm",
13
- lg: "md",
9
+ variants: {
10
+ disabled: {
11
+ true: "text-gray-400 pointer-events-none",
14
12
  },
15
13
  },
16
- },
17
- searchIcon: {
18
- base: "{UIcon}",
19
14
  defaults: {
20
15
  size: {
21
16
  sm: "xs",
@@ -24,13 +19,15 @@ export default /*tw*/ {
24
19
  },
25
20
  },
26
21
  },
22
+ clearIcon: "{>inputIcon}",
23
+ searchIcon: "{>inputIcon}",
27
24
  searchButton: {
28
25
  base: "{UButton} rounded-l-none ml-1 outline outline-1 outline-gray-900",
29
26
  defaults: {
30
27
  size: {
31
28
  sm: "xs",
32
- md: "md",
33
- lg: "lg",
29
+ md: "sm",
30
+ lg: "md",
34
31
  },
35
32
  },
36
33
  },
@@ -1,3 +1,4 @@
1
+ import { computed } from "vue";
1
2
  import {
2
3
  getArgTypes,
3
4
  getSlotNames,
@@ -8,14 +9,17 @@ import {
8
9
  import UInputSearch from "../../ui.form-input-search/UInputSearch.vue";
9
10
  import UButton from "../../ui.button/UButton.vue";
10
11
  import UIcon from "../../ui.image-icon/UIcon.vue";
12
+ import UCol from "../../ui.container-col/UCol.vue";
11
13
  import URow from "../../ui.container-row/URow.vue";
14
+ import UAvatar from "../../ui.image-avatar/UAvatar.vue";
15
+ import UBadge from "../../ui.text-badge/UBadge.vue";
12
16
 
13
17
  import type { Meta, StoryFn } from "@storybook/vue3";
14
18
  import type { Props } from "../types.ts";
15
19
 
16
20
  interface UInputSearchArgs extends Props {
17
21
  slotTemplate?: string;
18
- enum: "size";
22
+ enum: "size" | "labelAlign";
19
23
  }
20
24
 
21
25
  export default {
@@ -25,6 +29,9 @@ export default {
25
29
  argTypes: {
26
30
  ...getArgTypes(UInputSearch.__name),
27
31
  },
32
+ args: {
33
+ modelValue: "Which UI library is the best?",
34
+ },
28
35
  parameters: {
29
36
  docs: {
30
37
  ...getDocsDescription(UInputSearch.__name),
@@ -36,70 +43,142 @@ const DefaultTemplate: StoryFn<UInputSearchArgs> = (args: UInputSearchArgs) => (
36
43
  components: { UInputSearch, UButton, UIcon },
37
44
  setup() {
38
45
  const slots = getSlotNames(UInputSearch.__name);
46
+ const errorMessage = computed(() =>
47
+ args.modelValue === "" && args.error !== ""
48
+ ? "This field is required. Please enter a value."
49
+ : "",
50
+ );
39
51
 
40
- return { args, slots };
52
+ return { args, slots, errorMessage };
41
53
  },
42
54
  template: `
43
- <UInputSearch v-bind="args" v-model="args.modelValue">
55
+ <UInputSearch
56
+ v-bind="args"
57
+ v-model="args.modelValue"
58
+ :error="errorMessage"
59
+ class="max-w-96"
60
+ >
44
61
  ${args.slotTemplate || getSlotsFragment("")}
45
62
  </UInputSearch>
46
63
  `,
47
64
  });
48
65
 
49
66
  const EnumVariantTemplate: StoryFn<UInputSearchArgs> = (args: UInputSearchArgs, { argTypes }) => ({
50
- components: { UInputSearch, URow },
67
+ components: { UInputSearch, UCol },
51
68
  setup() {
69
+ let filteredOptions = argTypes?.[args.enum]?.options;
70
+
71
+ if (args.enum === "labelAlign") {
72
+ filteredOptions = argTypes?.[args.enum]?.options?.filter(
73
+ (item) => item !== "right" && item !== "topWithDesc",
74
+ );
75
+ }
76
+
52
77
  return {
53
78
  args,
54
- options: argTypes?.[args.enum]?.options,
79
+ filteredOptions,
55
80
  };
56
81
  },
57
82
  template: `
58
- <URow>
83
+ <UCol>
59
84
  <UInputSearch
60
- v-for="(option, index) in options"
85
+ v-for="(option, index) in filteredOptions"
61
86
  :key="index"
62
87
  v-bind="args"
63
88
  v-model="args.modelValue"
64
89
  :[args.enum]="option"
90
+ :placeholder="option"
91
+ class="max-w-96"
65
92
  >
66
93
  </UInputSearch>
67
- </URow>
94
+ </UCol>
68
95
  `,
69
96
  });
70
97
 
71
98
  export const Default = DefaultTemplate.bind({});
72
99
  Default.args = {};
73
100
 
74
- export const SearchButton = DefaultTemplate.bind({});
75
- SearchButton.args = { searchButtonLabel: "Search" };
101
+ export const Label = DefaultTemplate.bind({});
102
+ Label.args = { label: "Search for product or brand" };
76
103
 
77
- export const MinLength = DefaultTemplate.bind({});
78
- MinLength.args = { minLength: 4 };
104
+ export const Placeholder = DefaultTemplate.bind({});
105
+ Placeholder.args = { modelValue: "", placeholder: "Type to search...", error: "" };
106
+
107
+ export const Description = DefaultTemplate.bind({});
108
+ Description.args = { description: "Search for additional details." };
109
+
110
+ export const Error = DefaultTemplate.bind({});
111
+ Error.args = { modelValue: "" };
112
+
113
+ export const Disabled = DefaultTemplate.bind({});
114
+ Disabled.args = { disabled: true };
79
115
 
80
116
  export const Sizes = EnumVariantTemplate.bind({});
81
- Sizes.args = { enum: "size" };
117
+ Sizes.args = { enum: "size", modelValue: "" };
82
118
 
83
- export const LeftIcon = DefaultTemplate.bind({});
84
- LeftIcon.args = { leftIcon: "star" };
119
+ export const LabelPlacement = EnumVariantTemplate.bind({});
120
+ LabelPlacement.args = { enum: "labelAlign", modelValue: "", label: "Search for product or brand" };
85
121
 
86
- export const RightIcon = DefaultTemplate.bind({});
87
- RightIcon.args = { rightIcon: "star" };
122
+ export const SearchButton = DefaultTemplate.bind({});
123
+ SearchButton.args = { searchButtonLabel: "Search" };
124
+ SearchButton.parameters = {
125
+ docs: {
126
+ description: {
127
+ story:
128
+ // eslint-disable-next-line vue/max-len
129
+ "`searchButtonLabel` prop shows a button with a passed label instead of the default search icon. When clicked, it triggers the search event.",
130
+ },
131
+ },
132
+ };
88
133
 
89
- export const LeftSlot = DefaultTemplate.bind({});
90
- LeftSlot.args = {
91
- slotTemplate: `
92
- <template #left>
93
- <UIcon name="star" />
94
- </template>
95
- `,
134
+ export const MinLength = DefaultTemplate.bind({});
135
+ MinLength.args = { minLength: 4 };
136
+ MinLength.parameters = {
137
+ docs: {
138
+ description: {
139
+ story:
140
+ "Determines minimum character length for search. If not met, search event is not fired.",
141
+ },
142
+ },
96
143
  };
97
144
 
98
- export const RightSlot = DefaultTemplate.bind({});
99
- RightSlot.args = {
100
- slotTemplate: `
101
- <template #right>
102
- <UIcon name="star" />
103
- </template>
145
+ export const IconProps: StoryFn<UInputSearchArgs> = (args) => ({
146
+ components: { UInputSearch, URow },
147
+ setup() {
148
+ return { args };
149
+ },
150
+ template: `
151
+ <URow>
152
+ <UInputSearch
153
+ left-icon="travel_explore"
154
+ placeholder="Search for a travel destination"
155
+ />
156
+ <UInputSearch
157
+ right-icon="person_search"
158
+ placeholder="Search for a person"
159
+ />
160
+ </URow>
104
161
  `,
105
- };
162
+ });
163
+
164
+ export const Slots: StoryFn<UInputSearchArgs> = (args) => ({
165
+ components: { UInputSearch, URow, UButton, UAvatar, UBadge },
166
+ setup() {
167
+ return { args };
168
+ },
169
+ template: `
170
+ <URow no-mobile>
171
+ <UInputSearch v-bind="args" :config="{ searchInput: { leftSlot: 'pl-0' } }">
172
+ <template #left>
173
+ <UAvatar size="sm" />
174
+ </template>
175
+ </UInputSearch>
176
+
177
+ <UInputSearch v-bind="args" :config="{ searchInput: { rightSlot: 'pr-0' } }">
178
+ <template #right>
179
+ <UBadge label="Search" size="sm" color="green" />
180
+ </template>
181
+ </UInputSearch>
182
+ </URow>
183
+ `,
184
+ });
@@ -5,6 +5,11 @@ import type { ComponentConfig } from "../types.ts";
5
5
  export type Config = typeof defaultConfig;
6
6
 
7
7
  export interface Props {
8
+ /**
9
+ * Input label.
10
+ */
11
+ label?: string;
12
+
8
13
  /**
9
14
  * Search input value.
10
15
  */
@@ -23,12 +28,7 @@ export interface Props {
23
28
  /**
24
29
  * Label placement.
25
30
  */
26
- labelAlign?: "top" | "topInside" | "topWithDesc" | "left" | "right";
27
-
28
- /**
29
- * Input label.
30
- */
31
- label?: string;
31
+ labelAlign?: "topInside" | "top" | "topWithDesc" | "left" | "right";
32
32
 
33
33
  /**
34
34
  * Input description.
@@ -33,13 +33,13 @@ export default /*tw*/ {
33
33
  },
34
34
  align: {
35
35
  top: "font-medium",
36
- topInside: "font-normal absolute left-3 text-gray-500 group-focus-within:text-brand-500",
36
+ topInside: "font-normal absolute left-3 text-gray-500 group-focus-within:text-brand-600",
37
37
  topWithDesc: "font-medium",
38
38
  left: "font-normal",
39
39
  right: "font-normal",
40
40
  },
41
41
  error: {
42
- true: "text-red-500",
42
+ true: "text-red-600 group-focus-within:text-red-600",
43
43
  },
44
44
  disabled: {
45
45
  true: "text-gray-500 cursor-not-allowed",
@@ -75,7 +75,7 @@ export default /*tw*/ {
75
75
  right: "pt-0.5",
76
76
  },
77
77
  error: {
78
- true: "text-red-500",
78
+ true: "text-red-600",
79
79
  },
80
80
  },
81
81
  },
@@ -21,6 +21,7 @@ const setRadioGroupSelectedItem = inject<SetRadioGroupSelectedItem>(
21
21
  const getRadioGroupName = inject("getRadioGroupName", null);
22
22
  const getRadioGroupColor = inject("getRadioGroupColor", null);
23
23
  const getRadioGroupSize = inject("getRadioGroupSize", null);
24
+ const getRadioGroupDisabled = inject("getRadioGroupDisabled", null);
24
25
  const getRadioGroupSelectedItem = inject("getRadioGroupSelectedItem", null);
25
26
 
26
27
  const props = withDefaults(defineProps<Props>(), {
@@ -42,6 +43,7 @@ const localValue = ref<LocalValueType>("");
42
43
  const radioName = ref("");
43
44
  const radioColor = ref(toValue(getRadioGroupColor) || props.color);
44
45
  const radioSize = ref(toValue(getRadioGroupSize) || props.size);
46
+ const radioDisabled = ref(toValue(getRadioGroupDisabled) || props.disabled);
45
47
 
46
48
  const isChecked = computed(() => {
47
49
  const currentValue = props.modelValue ?? localValue.value;
@@ -65,6 +67,7 @@ onMounted(() => {
65
67
 
66
68
  watchEffect(() => (radioColor.value = toValue(getRadioGroupColor) || props.color));
67
69
  watchEffect(() => (radioSize.value = toValue(getRadioGroupSize) || props.size));
70
+ watchEffect(() => (radioDisabled.value = toValue(getRadioGroupDisabled) || props.disabled));
68
71
  watchEffect(() => {
69
72
  localValue.value = toValue(getRadioGroupSelectedItem) || null;
70
73
  emit("update:modelValue", props.value);
@@ -101,7 +104,7 @@ const { radioAttrs, radioLabelAttrs } = useUI<Config>(defaultConfig, mutatedProp
101
104
  :error="error"
102
105
  :size="radioSize"
103
106
  :align="labelAlign"
104
- :disabled="disabled"
107
+ :disabled="radioDisabled"
105
108
  :description="description"
106
109
  interactive
107
110
  v-bind="radioLabelAttrs"
@@ -121,7 +124,7 @@ const { radioAttrs, radioLabelAttrs } = useUI<Config>(defaultConfig, mutatedProp
121
124
  :value="radioValue"
122
125
  :name="radioName"
123
126
  :checked="checked || isChecked"
124
- :disabled="disabled"
127
+ :disabled="radioDisabled"
125
128
  v-bind="radioAttrs"
126
129
  :data-test="dataTest"
127
130
  @change="onChange"
@@ -2,11 +2,14 @@ export default /*tw*/ {
2
2
  radioLabel: "{ULabel}",
3
3
  radio: {
4
4
  base: `
5
- border cursor-pointer transition checked:text-{color}-600
6
- border-gray-300 hover:border-gray-400 focus:border-{color}-500 active:border-{color}-800
7
- focus:ring-{color}-700/15 focus:ring-dynamic focus:ring-offset-dynamic
8
- disabled:border-gray-300 disabled:text-gray-100
9
- checked:disabled:border-gray-400 checked:disabled:text-gray-400 disabled:cursor-not-allowed
5
+ border border-gray-300 bg-white cursor-pointer transition
6
+ hover:border-gray-400
7
+ active:border-{color}-600 active:bg-{color}-200
8
+ focus:ring-0 focus:ring-offset-0
9
+ checked:text-{color}-600
10
+ focus-visible:ring-{color}-600 focus-visible:ring-dynamic focus-visible:ring-offset-dynamic
11
+ disabled:border-gray-300 disabled:bg-gray-100 disabled:cursor-not-allowed
12
+ disabled:checked:bg-gray-400 disabled:checked:border-transparent
10
13
  `,
11
14
  variants: {
12
15
  size: {
@@ -15,7 +18,10 @@ export default /*tw*/ {
15
18
  lg: "size-6",
16
19
  },
17
20
  color: {
18
- grayscale: "focus:ring-gray-700/15 focus:border-gray-500 active:border-gray-800 checked:text-gray-900",
21
+ grayscale: `
22
+ focus-visible:ring-gray-900
23
+ checked:text-gray-900 checked:hover:text-gray-800 checked:active:text-gray-700
24
+ `,
19
25
  },
20
26
  },
21
27
  },
@@ -41,6 +41,7 @@ provide("getRadioGroupSelectedItem", () => selectedItem.value);
41
41
  provide("getRadioGroupName", () => props.name);
42
42
  provide("getRadioGroupColor", () => props.color);
43
43
  provide("getRadioGroupSize", () => props.size);
44
+ provide("getRadioGroupDisabled", () => props.disabled);
44
45
 
45
46
  /**
46
47
  * Get element / nested component attributes for each config token ✨
@@ -4,16 +4,13 @@ export default /*tw*/ {
4
4
  base: `
5
5
  flex flex-row-reverse justify-between w-full min-h-full box-border relative
6
6
  rounded-dynamic border border-gray-300 bg-white
7
- hover:border-gray-400 hover:transition hover:focus-within:border-brand-500
8
- focus-within:ring-brand-700/15 focus-within:ring-dynamic focus-within:ring-offset-dynamic
9
- focus-within:border-brand-500 focus-within:outline-none
7
+ hover:border-gray-400 hover:transition hover:focus-within:border-brand-600
8
+ focus-within:ring-brand-600 focus-within:ring-dynamic focus-within:ring-offset-0
9
+ focus-within:border-brand-600 focus-within:outline-none
10
10
  `,
11
11
  variants: {
12
12
  error: {
13
- true: `
14
- bg-red-50 border-red-300 hover:border-red-300
15
- focus-within:border-red-500 focus-within:ring-red-700/15
16
- `,
13
+ true: "!border-red-600 focus-within:ring-red-600",
17
14
  },
18
15
  disabled: {
19
16
  true: `
@@ -108,15 +108,21 @@ const {
108
108
  <slot name="label" :label="label" />
109
109
  </template>
110
110
 
111
- <label :for="elementId" v-bind="wrapperAttrs">
111
+ <label
112
+ tabindex="0"
113
+ :for="elementId"
114
+ v-bind="wrapperAttrs"
115
+ @keydown.enter="onKeydownSpace"
116
+ @keydown.space.prevent="onKeydownSpace"
117
+ >
112
118
  <input
113
119
  :id="elementId"
114
120
  v-model="checkedValue"
121
+ tabindex="-1"
115
122
  type="checkbox"
116
123
  :disabled="disabled"
117
124
  v-bind="inputAttrs"
118
125
  @click="onClickToggle"
119
- @keydown.space="onKeydownSpace"
120
126
  />
121
127
 
122
128
  <span v-bind="circleAttrs">
@@ -2,32 +2,35 @@ export default /*tw*/ {
2
2
  switchLabel: "{ULabel}",
3
3
  wrapper: {
4
4
  base: `
5
- flex items-center p-0.5 relative rounded-3xl cursor-pointer transition
6
- focus-within:ring-dynamic focus-within:ring-offset-dynamic
5
+ flex items-center p-0.5 relative rounded-full cursor-pointer transition
6
+ focus-visible:ring-dynamic focus-visible:ring-offset-dynamic ring-{color}-600 outline-0
7
7
  `,
8
8
  variants: {
9
- checked: {
10
- true: "bg-{color}-600 ring-{color}-700/15 hover:bg-{color}-700 active:bg-{color}-800",
11
- false: "bg-gray-300 ring-gray-700/15 hover:bg-gray-400 active:bg-gray-500",
12
- },
13
9
  size: {
14
10
  sm: "w-6",
15
11
  md: "w-8",
16
12
  lg: "w-10",
17
13
  },
14
+ color: {
15
+ grayscale: "ring-gray-900",
16
+ },
17
+ checked: {
18
+ true: "bg-{color}-600 hover:bg-{color}-700 active:bg-{color}-800",
19
+ false: "bg-gray-300 hover:bg-gray-400 active:bg-gray-600",
20
+ },
18
21
  },
19
22
  compoundVariants: [
20
23
  { toggleLabel: true, size: "sm", class: "w-10" },
21
24
  { toggleLabel: true, size: "md", class: "w-12" },
22
25
  { toggleLabel: true, size: "lg", class: "w-14" },
26
+ { color: "grayscale", checked: true, class: "bg-gray-900 hover:bg-gray-800 active:bg-gray-700" },
23
27
  { disabled: true, checked: false, class: "bg-gray-300" },
24
28
  { disabled: true, checked: true, class: "bg-gray-400" },
25
- { color: "grayscale", disabled: false, checked: true, class: "bg-gray-900 ring-gray-700/15" },
26
29
  ],
27
30
  },
28
31
  input: "absolute size-0 opacity-0",
29
32
  circle: {
30
- base: "transition-all duration-300 rounded-full bg-white flex items-center justify-center",
33
+ base: "rounded-full bg-white flex items-center justify-center transition-all",
31
34
  variants: {
32
35
  size: {
33
36
  sm: "size-3",
@@ -53,7 +53,6 @@ export interface Props {
53
53
  | "pink"
54
54
  | "rose"
55
55
  | "gray"
56
- | "white"
57
56
  | "brand";
58
57
 
59
58
  /**
@@ -1,27 +1,21 @@
1
1
  export default /*tw*/ {
2
2
  textareaLabel: "{ULabel}",
3
- leftSlot: "flex items-center justify-center whitespace-nowrap pl-3 gap-1 rounded-dynamic rounded-r-none",
4
- rightSlot: "flex items-center justify-center whitespace-nowrap pr-3 gap-1 rounded-dynamic rounded-l-none",
3
+ slot: "flex items-center justify-center whitespace-nowrap gap-1 rounded-dynamic",
4
+ leftSlot: "{>slot} pl-3 rounded-r-none",
5
+ rightSlot: "{>slot} pr-3 rounded-l-none",
5
6
  wrapper: {
6
7
  base: `
7
8
  flex bg-white transition w-full
8
- rounded-dynamic border border-gray-300 hover:border-gray-400 hover:focus-within:border-brand-500
9
- focus-within:border-brand-500 focus-within:ring-dynamic focus-within:ring-offset-dynamic
10
- focus-within:ring-brand-700/15 focus-within:outline-none
9
+ rounded-dynamic border border-gray-300 hover:border-gray-400 hover:focus-within:border-brand-600
10
+ focus-within:border-brand-600 focus-within:ring-dynamic focus-within:ring-offset-0
11
+ focus-within:ring-brand-600 focus-within:outline-none
11
12
  `,
12
13
  variants: {
13
14
  error: {
14
- true: `
15
- bg-red-50 border-red-300
16
- hover:border-red-400 hover:focus-within:border-red-500
17
- focus-within:border-red-500 focus-within:ring-red-700/15
18
- `,
15
+ true: "!border-red-600 focus-within:ring-red-600",
19
16
  },
20
17
  disabled: {
21
- true: `
22
- focus-within:ring-0 focus-within:ring-offset-0 bg-gray-100
23
- hover:border-gray-300 focus-within:border-gray-300 hover:focus-within:border-gray-300
24
- `,
18
+ true: "!border-gray-300 focus-within:ring-0 bg-gray-100",
25
19
  },
26
20
  },
27
21
  },
@@ -76,7 +76,6 @@ const { config, breadcrumbsAttrs, breadcrumbLinkAttrs, breadcrumbIconAttrs, divi
76
76
  :underlined="underlined"
77
77
  :dashed="dashed"
78
78
  :disabled="link.disabled || (!link.to && !link.href)"
79
- :ring="false"
80
79
  v-bind="breadcrumbLinkAttrs"
81
80
  :data-test="dataTest"
82
81
  @click="onClickLink(link)"
@@ -56,7 +56,7 @@ export interface Props {
56
56
  underlined?: boolean;
57
57
 
58
58
  /**
59
- * Set breadcrumbs' underline style as dashed.
59
+ * Set links underline style as dashed.
60
60
  */
61
61
  dashed?: boolean;
62
62
 
@@ -124,7 +124,6 @@ const {
124
124
  <div v-bind="paginationAttrs">
125
125
  <UButton
126
126
  v-if="showFirst"
127
- :ring="false"
128
127
  variant="thirdary"
129
128
  :label="firstLabel"
130
129
  :square="!firstLabel"
@@ -138,6 +137,7 @@ const {
138
137
  <UIcon
139
138
  v-if="!firstLabel"
140
139
  internal
140
+ color="brand"
141
141
  :name="config.defaults.firstIcon"
142
142
  v-bind="firstIconAttrs"
143
143
  />
@@ -145,7 +145,6 @@ const {
145
145
  </UButton>
146
146
 
147
147
  <UButton
148
- :ring="false"
149
148
  variant="thirdary"
150
149
  :label="prevLabel"
151
150
  :square="!prevLabel"
@@ -156,7 +155,13 @@ const {
156
155
  >
157
156
  <!-- @slot Use it to add something instead of the "prev" label. -->
158
157
  <slot name="prev">
159
- <UIcon v-if="!prevLabel" internal :name="config.defaults.prevIcon" v-bind="prevIconAttrs" />
158
+ <UIcon
159
+ v-if="!prevLabel"
160
+ internal
161
+ color="brand"
162
+ :name="config.defaults.prevIcon"
163
+ v-bind="prevIconAttrs"
164
+ />
160
165
  </slot>
161
166
  </UButton>
162
167
 
@@ -165,7 +170,6 @@ const {
165
170
  v-if="!isFinite(page.number)"
166
171
  square
167
172
  disabled
168
- :ring="false"
169
173
  variant="thirdary"
170
174
  v-bind="inactiveButtonAttrs"
171
175
  >
@@ -176,7 +180,6 @@ const {
176
180
  <UButton
177
181
  v-else-if="page.isActive"
178
182
  filled
179
- :ring="false"
180
183
  :variant="variant"
181
184
  :label="String(page.number)"
182
185
  :disabled="disabled"
@@ -186,7 +189,6 @@ const {
186
189
 
187
190
  <UButton
188
191
  v-else
189
- :ring="false"
190
192
  variant="thirdary"
191
193
  :label="String(page.number)"
192
194
  :disabled="disabled"
@@ -197,7 +199,6 @@ const {
197
199
  </template>
198
200
 
199
201
  <UButton
200
- :ring="false"
201
202
  variant="thirdary"
202
203
  :label="nextLabel"
203
204
  :square="!nextLabel"
@@ -208,13 +209,18 @@ const {
208
209
  >
209
210
  <!-- @slot Use it to add something instead of the "next" label. -->
210
211
  <slot name="next">
211
- <UIcon v-if="!nextLabel" internal :name="config.defaults.nextIcon" v-bind="nextIconAttrs" />
212
+ <UIcon
213
+ v-if="!nextLabel"
214
+ internal
215
+ color="brand"
216
+ :name="config.defaults.nextIcon"
217
+ v-bind="nextIconAttrs"
218
+ />
212
219
  </slot>
213
220
  </UButton>
214
221
 
215
222
  <UButton
216
223
  v-if="showLast"
217
- :ring="false"
218
224
  variant="thirdary"
219
225
  :label="lastLabel"
220
226
  :square="!lastLabel"
@@ -225,7 +231,13 @@ const {
225
231
  >
226
232
  <!-- @slot Use it to add something instead of the "last" label. -->
227
233
  <slot name="last">
228
- <UIcon v-if="!lastLabel" internal :name="config.defaults.lastIcon" v-bind="lastIconAttrs" />
234
+ <UIcon
235
+ v-if="!lastLabel"
236
+ internal
237
+ color="brand"
238
+ :name="config.defaults.lastIcon"
239
+ v-bind="lastIconAttrs"
240
+ />
229
241
  </slot>
230
242
  </UButton>
231
243
  </div>