vueless 0.0.287 → 0.0.288

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 (79) hide show
  1. package/composable.ui/index.js +3 -2
  2. package/constants/index.js +2 -1
  3. package/directive.tooltip/index.js +1 -2
  4. package/package.json +3 -3
  5. package/service.ui/index.js +3 -6
  6. package/ui.button/configs/default.config.js +1 -1
  7. package/ui.button/index.vue +1 -1
  8. package/ui.button-link/composables/attrs.composable.js +18 -28
  9. package/ui.button-link/configs/default.config.js +8 -6
  10. package/ui.button-link/index.stories.js +20 -1
  11. package/ui.button-link/index.vue +19 -24
  12. package/ui.button-toggle/configs/default.config.js +1 -1
  13. package/ui.button-toggle-item/configs/default.config.js +1 -1
  14. package/ui.container-accordion/configs/default.config.js +1 -1
  15. package/ui.container-card/configs/default.config.js +1 -1
  16. package/ui.container-card/index.stories.js +2 -2
  17. package/ui.container-col/configs/default.config.js +1 -1
  18. package/ui.container-divider/configs/default.config.js +1 -1
  19. package/ui.container-group/configs/default.config.js +1 -1
  20. package/ui.container-modal/configs/default.config.js +1 -1
  21. package/ui.container-modal/index.vue +1 -1
  22. package/ui.container-modal-confirm/configs/default.config.js +1 -1
  23. package/ui.container-page/configs/default.config.js +2 -2
  24. package/ui.container-page/index.stories.js +2 -2
  25. package/ui.container-page/index.vue +22 -11
  26. package/ui.container-row/configs/default.config.js +1 -1
  27. package/ui.data-list/configs/default.config.js +1 -1
  28. package/ui.data-table/configs/default.config.js +1 -1
  29. package/ui.data-table/index.stories.js +1 -1
  30. package/ui.dropdown-badge/configs/default.config.js +1 -1
  31. package/ui.dropdown-button/configs/default.config.js +1 -1
  32. package/ui.dropdown-link/configs/default.config.js +1 -1
  33. package/ui.dropdown-list/configs/default.config.js +1 -1
  34. package/ui.form-calendar/configs/default.config.js +1 -1
  35. package/ui.form-checkbox/configs/default.config.js +1 -1
  36. package/ui.form-checkbox-group/configs/default.config.js +1 -1
  37. package/ui.form-checkbox-multi-state/configs/default.config.js +1 -1
  38. package/ui.form-color-picker/configs/default.config.js +1 -1
  39. package/ui.form-date-picker/configs/default.config.js +1 -1
  40. package/ui.form-date-picker-range/configs/default.config.js +1 -1
  41. package/ui.form-input/configs/default.config.js +1 -1
  42. package/ui.form-input-file/configs/default.config.js +2 -2
  43. package/ui.form-input-file/index.vue +14 -13
  44. package/ui.form-input-money/configs/default.config.js +1 -1
  45. package/ui.form-input-number/configs/default.config.js +1 -1
  46. package/ui.form-input-rating/configs/default.config.js +1 -1
  47. package/ui.form-input-search/configs/default.config.js +1 -1
  48. package/ui.form-label/configs/default.config.js +1 -1
  49. package/ui.form-radio/configs/default.config.js +1 -1
  50. package/ui.form-radio-group/configs/default.config.js +1 -1
  51. package/ui.form-select/configs/default.config.js +1 -1
  52. package/ui.form-switch/configs/default.config.js +1 -1
  53. package/ui.form-textarea/configs/default.config.js +1 -1
  54. package/ui.image-avatar/configs/default.config.js +1 -1
  55. package/ui.image-icon/configs/default.config.js +4 -48
  56. package/ui.image-icon/index.stories.js +0 -3
  57. package/ui.image-icon/index.vue +13 -42
  58. package/ui.loader/configs/default.config.js +1 -1
  59. package/ui.loader-rendering/configs/default.config.js +1 -1
  60. package/ui.loader-top/configs/default.config.js +1 -1
  61. package/ui.navigation-pagination/configs/default.config.js +1 -1
  62. package/ui.navigation-progress/configs/default.config.js +1 -1
  63. package/ui.navigation-tab/configs/default.config.js +1 -1
  64. package/ui.navigation-tabs/configs/default.config.js +1 -1
  65. package/ui.other-dot/configs/default.config.js +1 -1
  66. package/ui.text-alert/configs/default.config.js +1 -1
  67. package/ui.text-badge/configs/default.config.js +1 -1
  68. package/ui.text-block/configs/default.config.js +1 -1
  69. package/ui.text-empty/configs/default.config.js +14 -4
  70. package/ui.text-empty/index.stories.js +0 -1
  71. package/ui.text-empty/index.vue +19 -10
  72. package/ui.text-file/configs/default.config.js +2 -2
  73. package/ui.text-file/index.vue +1 -1
  74. package/ui.text-files/configs/default.config.js +1 -1
  75. package/ui.text-header/configs/default.config.js +1 -1
  76. package/ui.text-money/configs/default.config.js +1 -1
  77. package/ui.text-notify/configs/default.config.js +1 -1
  78. package/ui.text-notify/index.vue +2 -2
  79. package/web-types.json +16 -24
@@ -83,7 +83,7 @@ export default function useUI(defaultConfig = {}, propsConfigGetter = null, topL
83
83
 
84
84
  const configAttrs = {
85
85
  config: configKeyValue,
86
- ...configKeyValue?.defaultVariants,
86
+ ...configKeyValue?.defaults,
87
87
  };
88
88
 
89
89
  const isTopLevelClassKey = configKey === (topLevelClassKey || firstClassKey);
@@ -192,6 +192,7 @@ function mergeConfigs({
192
192
 
193
193
  const {
194
194
  i18n,
195
+ defaults,
195
196
  strategy,
196
197
  safelist,
197
198
  component,
@@ -217,7 +218,7 @@ function mergeConfigs({
217
218
  }
218
219
  } else if (key === strategy) {
219
220
  config[key] = propsConfig[key] || globalConfig[key] || defaultConfig[key];
220
- } else if (key === defaultVariants) {
221
+ } else if (key === defaults || key === defaultVariants) {
221
222
  config[key] = { ...defaultConfig[key], ...globalConfig[key], ...propsConfig[key] };
222
223
  } else if (key === compoundVariants) {
223
224
  config[key] = mergeCompoundVariants({
@@ -56,11 +56,12 @@ export const CVA_CONFIG_KEY = {
56
56
  /* Vueless default config keys */
57
57
  export const SYSTEM_CONFIG_KEY = {
58
58
  i18n: "i18n",
59
+ defaults: "defaults",
59
60
  strategy: "strategy",
60
61
  safelist: "safelist",
61
62
  component: "component",
62
- safelistColors: "safelistColors",
63
63
  transition: "transition",
64
+ safelistColors: "safelistColors",
64
65
  iconName: "iconName",
65
66
  ...CVA_CONFIG_KEY,
66
67
  };
@@ -16,14 +16,13 @@ const defaultSettings = {
16
16
  theme: "light",
17
17
  animation: "shift-away",
18
18
  };
19
+
19
20
  const mergedSettings = merge(defaultSettings, globalSettings);
20
21
 
21
22
  tippy.setDefaultProps(mergedSettings);
22
23
 
23
24
  export default {
24
25
  mounted(el, bindings) {
25
- if (!bindings.value.content) return;
26
-
27
26
  tippy(el, merge(mergedSettings, bindings.value || {}));
28
27
  },
29
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vueless",
3
- "version": "0.0.287",
3
+ "version": "0.0.288",
4
4
  "license": "MIT",
5
5
  "description": "Vue Styleless Component Framework.",
6
6
  "homepage": "https://vueless.com",
@@ -37,9 +37,9 @@
37
37
  "@release-it/bumper": "^6.0.1",
38
38
  "@vitejs/plugin-vue": "^5.0.5",
39
39
  "@vue/eslint-config-prettier": "^9.0.0",
40
- "@vueless/plugin-vite": "^0.0.51",
40
+ "@vueless/plugin-vite": "^0.0.54",
41
41
  "@vueless/storybook": "^0.0.34",
42
- "@vueless/web-types": "^0.0.13",
42
+ "@vueless/web-types": "^0.0.14",
43
43
  "autoprefixer": "^10.4.19",
44
44
  "cssnano": "^6.1.2",
45
45
  "eslint": "^8.55.0",
@@ -132,14 +132,11 @@ function setFavicon(faviconPath) {
132
132
  }
133
133
 
134
134
  function getDefault(defaultConfig, name) {
135
- const defaultVariants = merge(
136
- cloneDeep(defaultConfig.defaultVariants),
137
- globalComponentConfig[name]?.defaultVariants,
138
- );
135
+ const defaults = merge(cloneDeep(defaultConfig.defaults), globalComponentConfig[name]?.defaults);
139
136
 
140
- defaultVariants.color = getColor(defaultVariants.color);
137
+ defaults.color = getColor(defaults.color);
141
138
 
142
- return defaultVariants;
139
+ return defaults;
143
140
  }
144
141
 
145
142
  function getColor(color) {
@@ -147,7 +147,7 @@ export default /*tw*/ {
147
147
  leftIcon: "{UIcon}",
148
148
  rightIcon: "{UIcon}",
149
149
  centerIcon: "{UIcon}",
150
- defaultVariants: {
150
+ defaults: {
151
151
  color: "brand",
152
152
  variant: "primary",
153
153
  tag: "button",
@@ -280,7 +280,7 @@ const loaderSize = computed(() => {
280
280
 
281
281
  const iconSize = computed(() => {
282
282
  const sizes = {
283
- "2xs": "xs",
283
+ "2xs": "2xs",
284
284
  xs: "xs",
285
285
  sm: "sm",
286
286
  md: "sm",
@@ -33,39 +33,29 @@ export default function useAttrs(props, { isActive, isExactActive }) {
33
33
  if (key === "wrapper") {
34
34
  const wrapperAttrs = attrs[`${key}Attrs`];
35
35
 
36
- attrs[`${key}Attrs`] = computed(() => {
37
- const hasDefaultSlot = hasSlotContent(slots["default"]);
38
- const hasRightSlot = hasSlotContent(slots["right"]);
39
- const hasLeftSlot = hasSlotContent(slots["left"]);
40
-
41
- return {
42
- ...wrapperAttrs.value,
43
- class: cx([
44
- wrapperAttrs.value.class,
45
- (hasDefaultSlot || hasLeftSlot || hasRightSlot) && config.value.withSlots,
46
- isActive.value && props.wrapperActiveClass,
47
- isExactActive.value && props.wrapperExactActiveClass,
48
- ]),
49
- };
50
- });
36
+ attrs[`${key}Attrs`] = computed(() => ({
37
+ ...wrapperAttrs.value,
38
+ class: cx([
39
+ wrapperAttrs.value.class,
40
+ hasSlotContent(slots["default"]) && config.value.withChild,
41
+ isActive.value && props.wrapperActiveClass,
42
+ isExactActive.value && props.wrapperExactActiveClass,
43
+ ]),
44
+ }));
51
45
  }
52
46
 
53
47
  if (key === "link") {
54
48
  const linkAttrs = attrs[`${key}Attrs`];
55
49
 
56
- attrs[`${key}Attrs`] = computed(() => {
57
- const hasDefaultSlot = hasSlotContent(slots["default"]);
58
-
59
- return {
60
- ...linkAttrs.value,
61
- class: cx([
62
- linkAttrs.value.class,
63
- hasDefaultSlot && config.value.withSlots,
64
- isActive.value && props.activeClass,
65
- isExactActive.value && props.exactActiveClass,
66
- ]),
67
- };
68
- });
50
+ attrs[`${key}Attrs`] = computed(() => ({
51
+ ...linkAttrs.value,
52
+ class: cx([
53
+ linkAttrs.value.class,
54
+ hasSlotContent(slots["default"]) && config.value.withChild,
55
+ isActive.value && props.activeClass,
56
+ isExactActive.value && props.exactActiveClass,
57
+ ]),
58
+ }));
69
59
  }
70
60
  }
71
61
 
@@ -1,10 +1,15 @@
1
1
  export default /*tw*/ {
2
2
  wrapper: {
3
3
  base: `
4
- w-fit inline-flex rounded transition focus-visible:outline-none
4
+ w-fit inline-flex items-center rounded transition focus-visible:outline-none
5
5
  focus-within:ring-dynamic focus-within:ring-offset-4 focus-within:ring-{color}-700/15
6
6
  `,
7
7
  variants: {
8
+ size: {
9
+ sm: "gap-1",
10
+ md: "gap-1.5",
11
+ lg: "gap-1.5",
12
+ },
8
13
  color: {
9
14
  grayscale: "focus-within:ring-gray-700/15",
10
15
  white: "focus-within:ring-white/15",
@@ -56,11 +61,8 @@ export default /*tw*/ {
56
61
  },
57
62
  },
58
63
  },
59
- text: "w-full",
60
- withSlots: "flex items-center no-underline hover:no-underline focus-within:ring-0 focus-within:ring-offset-0",
61
- leftSlot: "mr-1",
62
- rightSlot: "ml-1",
63
- defaultVariants: {
64
+ withChild: "flex items-center no-underline hover:no-underline focus-within:ring-0 focus-within:ring-offset-0",
65
+ defaults: {
64
66
  color: "brand",
65
67
  type: "link",
66
68
  size: "md",
@@ -1,6 +1,7 @@
1
1
  import { getArgTypes, getSlotNames, getSlotsFragment } from "../service.storybook";
2
2
 
3
3
  import ULink from "../ui.button-link";
4
+ import UIcon from "../ui.image-icon";
4
5
  import UButton from "../ui.button";
5
6
  import URow from "../ui.container-row";
6
7
 
@@ -21,7 +22,7 @@ export default {
21
22
  };
22
23
 
23
24
  const DefaultTemplate = (args) => ({
24
- components: { ULink, UButton },
25
+ components: { ULink, UButton, UIcon },
25
26
  setup() {
26
27
  const slots = getSlotNames(ULink.name);
27
28
 
@@ -106,3 +107,21 @@ slotDefault.args = {
106
107
  </template>
107
108
  `,
108
109
  };
110
+
111
+ export const slotLeft = DefaultTemplate.bind({});
112
+ slotLeft.args = {
113
+ slotTemplate: `
114
+ <template #left>
115
+ <UIcon name="star" size="xs" />
116
+ </template>
117
+ `,
118
+ };
119
+
120
+ export const slotRight = DefaultTemplate.bind({});
121
+ slotRight.args = {
122
+ slotTemplate: `
123
+ <template #right>
124
+ <UIcon name="star" size="xs" />
125
+ </template>
126
+ `,
127
+ };
@@ -1,16 +1,14 @@
1
1
  <template>
2
2
  <div v-bind="wrapperAttrs" ref="wrapperRef" tabindex="-1">
3
- <div v-if="hasSlotContent($slots['left'])" v-bind="leftSlotAttrs">
4
- <!-- @slot Use it to add something before the text. -->
5
- <slot name="left" />
6
- </div>
3
+ <!-- @slot Use it to add something before the text. -->
4
+ <slot name="left" />
7
5
 
8
6
  <router-link
9
7
  v-if="isPresentRoute"
10
8
  :to="route"
11
9
  :target="targetValue"
12
- :data-test="dataTest"
13
10
  v-bind="linkAttrs"
11
+ :data-test="dataTest"
14
12
  tabindex="0"
15
13
  @blur="onBlur"
16
14
  @focus="onFocus"
@@ -20,16 +18,16 @@
20
18
  >
21
19
  <!-- @slot Use it replace the text. -->
22
20
  <slot>
23
- <span v-if="!hasSlotContent($slots['default'])" v-bind="textAttrs" v-text="label" />
21
+ {{ label }}
24
22
  </slot>
25
23
  </router-link>
26
24
 
27
25
  <a
28
26
  v-else
29
- :href="href"
27
+ :href="prefixedHref"
30
28
  :target="targetValue"
31
- :data-test="dataTest"
32
29
  v-bind="linkAttrs"
30
+ :data-test="dataTest"
33
31
  tabindex="0"
34
32
  @blur="onBlur"
35
33
  @focus="onFocus"
@@ -39,14 +37,12 @@
39
37
  >
40
38
  <!-- @slot Use it replace the text. -->
41
39
  <slot>
42
- <span v-if="!hasSlotContent($slots['default'])" v-bind="textAttrs" v-text="label" />
40
+ {{ label }}
43
41
  </slot>
44
42
  </a>
45
43
 
46
- <div v-if="hasSlotContent($slots['right'])" v-bind="rightSlotAttrs">
47
- <!-- @slot Use it to add something after the text. -->
48
- <slot name="right" />
49
- </div>
44
+ <!-- @slot Use it to add something after the text. -->
45
+ <slot name="right" />
50
46
  </div>
51
47
  </template>
52
48
 
@@ -99,17 +95,17 @@ const props = defineProps({
99
95
  },
100
96
 
101
97
  /**
102
- * Link url.
98
+ * Link href url.
103
99
  */
104
- url: {
100
+ href: {
105
101
  type: String,
106
102
  default: "",
107
103
  },
108
104
 
109
105
  /**
110
- * Vue route object.
106
+ * Vue-router route object.
111
107
  */
112
- route: {
108
+ to: {
113
109
  type: Object,
114
110
  default: () => ({}),
115
111
  },
@@ -142,7 +138,7 @@ const props = defineProps({
142
138
  },
143
139
 
144
140
  /**
145
- * Open link in new window.
141
+ * Open link in the new tab.
146
142
  */
147
143
  targetBlank: {
148
144
  type: Boolean,
@@ -263,7 +259,7 @@ const props = defineProps({
263
259
  });
264
260
 
265
261
  const isPresentRoute = computed(() => {
266
- for (let key in props.route) return true;
262
+ for (let key in props.to) return true;
267
263
 
268
264
  return false;
269
265
  });
@@ -274,28 +270,27 @@ const { route, isActive, isExactActive } = useLink({
274
270
  exactActiveClass: props.exactActiveClass,
275
271
  custom: props.custom,
276
272
  replace: props.replace,
277
- to: isPresentRoute.value ? props.route : "/",
273
+ to: isPresentRoute.value ? props.to : "/",
278
274
  });
279
275
 
280
276
  const wrapperRef = ref(null);
281
277
 
282
278
  defineExpose({ wrapperRef });
283
279
 
284
- const { wrapperAttrs, linkAttrs, rightSlotAttrs, leftSlotAttrs, textAttrs, hasSlotContent } =
285
- useAttrs(props, { isActive, isExactActive });
280
+ const { wrapperAttrs, linkAttrs } = useAttrs(props, { isActive, isExactActive });
286
281
 
287
282
  const targetValue = computed(() => {
288
283
  return props.targetBlank ? "_blank" : "_self";
289
284
  });
290
285
 
291
- const href = computed(() => {
286
+ const prefixedHref = computed(() => {
292
287
  const types = {
293
288
  phone: "tel:",
294
289
  email: "mailto:",
295
290
  link: "",
296
291
  };
297
292
 
298
- return props.url ? `${types[props.type]}${props.url}` : null;
293
+ return props.href ? `${types[props.type]}${props.href}` : null;
299
294
  });
300
295
 
301
296
  function onClick(event) {
@@ -37,7 +37,7 @@ export default /*tw*/ {
37
37
  ],
38
38
  },
39
39
  item: "{UToggleItem}",
40
- defaultVariants: {
40
+ defaults: {
41
41
  variant: "primary",
42
42
  labelAlign: "top",
43
43
  size: "md",
@@ -42,7 +42,7 @@ export default /*tw*/ {
42
42
  ],
43
43
  },
44
44
  input: "p-0 m-0 size-0 invisible absolute",
45
- defaultVariants: {
45
+ defaults: {
46
46
  variant: "primary",
47
47
  type: "radio",
48
48
  size: "md",
@@ -28,7 +28,7 @@ export default /*tw*/ {
28
28
  expandIconName: "add",
29
29
  collapseIconName: "remove",
30
30
  divider: "{UDivider} group-last:hidden",
31
- defaultVariants: {
31
+ defaults: {
32
32
  size: "md",
33
33
  },
34
34
  };
@@ -18,7 +18,7 @@ export default /*tw*/ {
18
18
  divider: "{UDivider}",
19
19
  footer: "flex justify-between",
20
20
  footerMobileReverse: "flex flex-col-reverse space-y-reverse",
21
- defaultVariants: {
21
+ defaults: {
22
22
  padding: "md",
23
23
  mobileFooterReverse: false,
24
24
  },
@@ -84,7 +84,7 @@ export const slotHeaderLeftBefore = DefaultTemplate.bind({});
84
84
  slotHeaderLeftBefore.args = {
85
85
  slotTemplate: `
86
86
  <template #header-left-before>
87
- <UIcon name="star" size="sm" round />
87
+ <UIcon name="star" size="sm" />
88
88
  </template>
89
89
  ${defaultTemplate}
90
90
  `,
@@ -104,7 +104,7 @@ export const slotHeaderLeftAfter = DefaultTemplate.bind({});
104
104
  slotHeaderLeftAfter.args = {
105
105
  slotTemplate: `
106
106
  <template #header-left-after>
107
- <UIcon name="star" size="sm" round />
107
+ <UIcon name="star" size="sm" />
108
108
  </template>
109
109
  ${defaultTemplate}
110
110
  `,
@@ -38,7 +38,7 @@ export default /*tw*/ {
38
38
  },
39
39
  },
40
40
  },
41
- defaultVariants: {
41
+ defaults: {
42
42
  gap: "md",
43
43
  align: "start",
44
44
  justify: "start",
@@ -63,7 +63,7 @@ export default /*tw*/ {
63
63
  },
64
64
  },
65
65
  },
66
- defaultVariants: {
66
+ defaults: {
67
67
  variant: "default",
68
68
  size: "md",
69
69
  dashed: false,
@@ -25,7 +25,7 @@ export default /*tw*/ {
25
25
  },
26
26
  },
27
27
  },
28
- defaultVariants: {
28
+ defaults: {
29
29
  gap: "md",
30
30
  upperlined: false,
31
31
  underlined: false,
@@ -55,7 +55,7 @@ export default /*tw*/ {
55
55
  },
56
56
  },
57
57
  },
58
- defaultVariants: {
58
+ defaults: {
59
59
  width: "sm",
60
60
  inner: false,
61
61
  closeIcon: true,
@@ -27,7 +27,7 @@
27
27
  v-if="isShownArrowButton"
28
28
  size="sm"
29
29
  color="gray"
30
- :route="backRoute"
30
+ :to="backRoute"
31
31
  v-bind="backLinkAttrs"
32
32
  @click="onClickBackLink"
33
33
  >
@@ -7,7 +7,7 @@ export default /*tw*/ {
7
7
  confirm: "Confirm",
8
8
  cancel: "Cancel",
9
9
  },
10
- defaultVariants: {
10
+ defaults: {
11
11
  width: "sm",
12
12
  confirmColor: "brand",
13
13
  confirmDisabled: false,
@@ -38,7 +38,7 @@ export default /*tw*/ {
38
38
  header: "flex items-start justify-between mb-4 md:mb-6",
39
39
  headerLeft: "flex items-center space-x-4",
40
40
  headerLeftFallback: "flex flex-col",
41
- backLink: "{ULink} flex items-center gap-0.5",
41
+ backLink: "{ULink}",
42
42
  backLinkIcon: "{UIcon}",
43
43
  backLinkIconName: "arrow_back",
44
44
  title: "{UHeader}",
@@ -61,7 +61,7 @@ export default /*tw*/ {
61
61
  },
62
62
  },
63
63
  },
64
- defaultVariants: {
64
+ defaults: {
65
65
  titleSize: "lg",
66
66
  width: "wide",
67
67
  gray: false,
@@ -82,9 +82,9 @@ widePage.args = { widePage: true, width: "sm" };
82
82
 
83
83
  export const backRoute = DefaultTemplate.bind({});
84
84
  backRoute.args = {
85
+ backLabel: "back",
85
86
  backRoute: {
86
- name: "",
87
- title: "some route title",
87
+ path: "/",
88
88
  params: {},
89
89
  },
90
90
  };
@@ -14,19 +14,22 @@
14
14
  <div v-bind="headerLeftFallbackAttrs">
15
15
  <ULink
16
16
  v-if="isShownArrowButton"
17
- size="xs"
17
+ no-ring
18
+ size="sm"
18
19
  color="gray"
19
- :route="backRoute"
20
+ :to="backRoute"
21
+ :label="backLabel"
20
22
  v-bind="backLinkAttrs"
21
23
  >
22
- <UIcon
23
- internal
24
- size="xs"
25
- color="gray"
26
- :name="config.backLinkIconName"
27
- v-bind="backLinkIconAttrs"
28
- />
29
- {{ backRoute.title }}
24
+ <template #left>
25
+ <UIcon
26
+ internal
27
+ size="xs"
28
+ color="gray"
29
+ :name="config.backLinkIconName"
30
+ v-bind="backLinkIconAttrs"
31
+ />
32
+ </template>
30
33
  </ULink>
31
34
 
32
35
  <UHeader :label="title" :size="titleSize" v-bind="titleAttrs" />
@@ -133,13 +136,21 @@ const props = defineProps({
133
136
  },
134
137
 
135
138
  /**
136
- * Set Vue router route params for back arrow.
139
+ * Back link vue-router route object.
137
140
  */
138
141
  backRoute: {
139
142
  type: Object,
140
143
  default: () => ({}),
141
144
  },
142
145
 
146
+ /**
147
+ * Back link label.
148
+ */
149
+ backLabel: {
150
+ type: String,
151
+ default: "",
152
+ },
153
+
143
154
  /**
144
155
  * Set gray background color.
145
156
  */
@@ -39,7 +39,7 @@ export default /*tw*/ {
39
39
  },
40
40
  },
41
41
  },
42
- defaultVariants: {
42
+ defaults: {
43
43
  gap: "md",
44
44
  align: "start",
45
45
  justify: "start",
@@ -40,7 +40,7 @@ export default /*tw*/ {
40
40
  emptyTitle: "",
41
41
  emptyDescription: "There is no data in the list.",
42
42
  },
43
- defaultVariants: {
43
+ defaults: {
44
44
  size: "md",
45
45
  labelKey: "label",
46
46
  valueKey: "id",
@@ -95,7 +95,7 @@ export default /*tw*/ {
95
95
  i18n: {
96
96
  noData: "There is no data in the table.",
97
97
  },
98
- defaultVariants: {
98
+ defaults: {
99
99
  nesting: false,
100
100
  compact: false,
101
101
  selectable: false,
@@ -366,7 +366,7 @@ cellSlots.args = {
366
366
  </template>
367
367
 
368
368
  <template #cell-email="{ value }">
369
- <ULink :label="value" :url="value" type="email" size="sm" />
369
+ <ULink :label="value" :url="value" type="email" />
370
370
  </template>
371
371
 
372
372
  <template #cell-tags="{ value }">
@@ -22,7 +22,7 @@ export default /*tw*/ {
22
22
  },
23
23
  },
24
24
  list: "{UDropdownList} w-fit",
25
- defaultVariants: {
25
+ defaults: {
26
26
  color: "brand",
27
27
  size: "md",
28
28
  weight: "medium",
@@ -22,7 +22,7 @@ export default /*tw*/ {
22
22
  },
23
23
  },
24
24
  list: "{UDropdownList} w-fit",
25
- defaultVariants: {
25
+ defaults: {
26
26
  color: "brand",
27
27
  size: "md",
28
28
  variant: "primary",
@@ -23,7 +23,7 @@ export default /*tw*/ {
23
23
  },
24
24
  },
25
25
  list: "{UDropdownList} w-fit",
26
- defaultVariants: {
26
+ defaults: {
27
27
  color: "brand",
28
28
  size: "md",
29
29
  labelKey: "label",
@@ -61,7 +61,7 @@ export default /*tw*/ {
61
61
  noDataToShow: "No data to show.",
62
62
  add: "Add",
63
63
  },
64
- defaultVariants: {
64
+ defaults: {
65
65
  size: "md",
66
66
  labelKey: "label",
67
67
  valueKey: "id",