vueless 0.0.675 → 0.0.676
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.
- package/composables/useUI.ts +12 -1
- package/package.json +1 -1
- package/types.ts +1 -1
- package/ui.boilerplate/types.ts +1 -1
- package/ui.button/UButton.vue +9 -6
- package/ui.button/types.ts +1 -1
- package/ui.button-link/ULink.vue +37 -62
- package/ui.button-link/config.ts +8 -35
- package/ui.button-link/storybook/stories.ts +0 -22
- package/ui.button-link/types.ts +1 -11
- package/ui.button-toggle/types.ts +1 -1
- package/ui.button-toggle-item/types.ts +1 -1
- package/ui.container-accordion/types.ts +1 -1
- package/ui.container-card/types.ts +1 -1
- package/ui.container-col/types.ts +1 -1
- package/ui.container-divider/types.ts +1 -1
- package/ui.container-group/types.ts +1 -1
- package/ui.container-groups/types.ts +1 -1
- package/ui.container-modal/UModal.vue +21 -20
- package/ui.container-modal/config.ts +3 -2
- package/ui.container-modal/types.ts +1 -1
- package/ui.container-modal-confirm/types.ts +1 -1
- package/ui.container-page/UPage.vue +31 -19
- package/ui.container-page/config.ts +1 -0
- package/ui.container-page/types.ts +1 -1
- package/ui.container-row/types.ts +1 -1
- package/ui.data-list/types.ts +1 -1
- package/ui.data-table/types.ts +1 -1
- package/ui.dropdown-badge/types.ts +1 -1
- package/ui.dropdown-button/types.ts +1 -1
- package/ui.dropdown-link/UDropdownLink.vue +29 -33
- package/ui.dropdown-link/config.ts +3 -3
- package/ui.dropdown-link/types.ts +1 -1
- package/ui.dropdown-list/types.ts +1 -1
- package/ui.form-calendar/types.ts +1 -1
- package/ui.form-checkbox/types.ts +1 -1
- package/ui.form-checkbox-group/types.ts +1 -1
- package/ui.form-checkbox-multi-state/types.ts +1 -1
- package/ui.form-date-picker/types.ts +1 -1
- package/ui.form-date-picker-range/types.ts +1 -1
- package/ui.form-input/types.ts +1 -1
- package/ui.form-input-file/types.ts +1 -1
- package/ui.form-input-money/types.ts +1 -1
- package/ui.form-input-number/types.ts +1 -1
- package/ui.form-input-rating/types.ts +1 -1
- package/ui.form-input-search/types.ts +1 -1
- package/ui.form-label/types.ts +1 -1
- package/ui.form-radio/types.ts +1 -1
- package/ui.form-radio-group/types.ts +1 -1
- package/ui.form-select/USelect.vue +8 -6
- package/ui.form-select/types.ts +1 -1
- package/ui.form-switch/types.ts +1 -1
- package/ui.form-textarea/types.ts +1 -1
- package/ui.image-avatar/types.ts +1 -1
- package/ui.image-icon/UIcon.vue +2 -18
- package/ui.image-icon/storybook/stories.ts +0 -3
- package/ui.image-icon/types.ts +1 -13
- package/ui.loader/types.ts +1 -1
- package/ui.loader-overlay/types.ts +1 -1
- package/ui.loader-progress/types.ts +1 -1
- package/ui.navigation-pagination/types.ts +1 -1
- package/ui.navigation-progress/types.ts +2 -2
- package/ui.navigation-tab/types.ts +1 -1
- package/ui.navigation-tabs/types.ts +1 -1
- package/ui.other-dot/types.ts +1 -1
- package/ui.other-theme-color-toggle/storybook/stories.ts +1 -1
- package/ui.other-theme-color-toggle/types.ts +1 -1
- package/ui.text-alert/types.ts +1 -1
- package/ui.text-badge/types.ts +1 -1
- package/ui.text-block/types.ts +1 -1
- package/ui.text-empty/types.ts +1 -1
- package/ui.text-file/types.ts +1 -1
- package/ui.text-files/types.ts +1 -1
- package/ui.text-header/types.ts +1 -1
- package/ui.text-money/types.ts +1 -1
- package/ui.text-notify/types.ts +1 -1
- package/ui.text-number/types.ts +1 -1
- package/utils/theme.ts +5 -1
package/composables/useUI.ts
CHANGED
|
@@ -241,7 +241,18 @@ export default function useUI<T>(
|
|
|
241
241
|
return vuelessAttrs;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
/**
|
|
245
|
+
* Get data test attribute value if exist.
|
|
246
|
+
*/
|
|
247
|
+
function getDataTest(suffix?: string) {
|
|
248
|
+
if (!props.dataTest) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return suffix ? `${props.dataTest}-${suffix}` : props.dataTest;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return { config, getDataTest, ...getKeysAttrs(mutatedProps) } as UseUI<T>;
|
|
245
256
|
}
|
|
246
257
|
|
|
247
258
|
/**
|
package/package.json
CHANGED
package/types.ts
CHANGED
|
@@ -297,7 +297,7 @@ export type MutatedProps = ComputedRef<UnknownObject>;
|
|
|
297
297
|
|
|
298
298
|
export type UseUI<T> = {
|
|
299
299
|
config: Ref<T & ComponentConfig<T>>;
|
|
300
|
-
|
|
300
|
+
getDataTest: (suffix?: string) => string | null;
|
|
301
301
|
} & KeysAttrs<T>;
|
|
302
302
|
|
|
303
303
|
export type KeysAttrs<T> = Record<
|
package/ui.boilerplate/types.ts
CHANGED
package/ui.button/UButton.vue
CHANGED
|
@@ -67,10 +67,8 @@ const mutatedProps = computed(() => ({
|
|
|
67
67
|
label: Boolean(props.label),
|
|
68
68
|
}));
|
|
69
69
|
|
|
70
|
-
const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs } =
|
|
71
|
-
defaultConfig,
|
|
72
|
-
mutatedProps,
|
|
73
|
-
);
|
|
70
|
+
const { getDataTest, buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs } =
|
|
71
|
+
useUI<Config>(defaultConfig, mutatedProps);
|
|
74
72
|
</script>
|
|
75
73
|
|
|
76
74
|
<template>
|
|
@@ -82,10 +80,15 @@ const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs
|
|
|
82
80
|
v-bind="buttonAttrs"
|
|
83
81
|
:style="buttonStyle"
|
|
84
82
|
:tabindex="!loading ? tabindex : -1"
|
|
85
|
-
:data-test="
|
|
83
|
+
:data-test="getDataTest()"
|
|
86
84
|
>
|
|
87
85
|
<template v-if="loading">
|
|
88
|
-
<ULoader
|
|
86
|
+
<ULoader
|
|
87
|
+
:loading="loading"
|
|
88
|
+
color="inherit"
|
|
89
|
+
v-bind="loaderAttrs"
|
|
90
|
+
:data-test="getDataTest('loader')"
|
|
91
|
+
/>
|
|
89
92
|
</template>
|
|
90
93
|
|
|
91
94
|
<template v-else>
|
package/ui.button/types.ts
CHANGED
package/ui.button-link/ULink.vue
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { computed,
|
|
2
|
+
import { computed, useSlots } from "vue";
|
|
3
3
|
import { RouterLink, useLink } from "vue-router";
|
|
4
4
|
|
|
5
5
|
import useUI from "../composables/useUI.ts";
|
|
@@ -71,13 +71,6 @@ const useLinkOptions = {
|
|
|
71
71
|
|
|
72
72
|
const { route, isActive, isExactActive } = useLink(useLinkOptions);
|
|
73
73
|
|
|
74
|
-
const wrapperRef = ref(null);
|
|
75
|
-
|
|
76
|
-
const wrapperActiveClasses = computed(() => [
|
|
77
|
-
isActive.value && props.wrapperActiveClass,
|
|
78
|
-
isExactActive.value && props.wrapperExactActiveClass,
|
|
79
|
-
]);
|
|
80
|
-
|
|
81
74
|
const linkActiveClasses = computed(() => [
|
|
82
75
|
isActive.value && props.activeClass,
|
|
83
76
|
isExactActive.value && props.exactActiveClass,
|
|
@@ -117,14 +110,6 @@ function onBlur(event: FocusEvent) {
|
|
|
117
110
|
emit("blur", event);
|
|
118
111
|
}
|
|
119
112
|
|
|
120
|
-
defineExpose({
|
|
121
|
-
/**
|
|
122
|
-
* A reference to the link wrapper element for direct DOM manipulation.
|
|
123
|
-
* @property {HTMLElement}
|
|
124
|
-
*/
|
|
125
|
-
wrapperRef,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
113
|
/**
|
|
129
114
|
* Get element / nested component attributes for each config token ✨
|
|
130
115
|
* Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
|
|
@@ -134,53 +119,43 @@ const mutatedProps = computed(() => ({
|
|
|
134
119
|
defaultSlot: hasSlotContent(slots["default"]),
|
|
135
120
|
}));
|
|
136
121
|
|
|
137
|
-
const {
|
|
122
|
+
const { getDataTest, linkAttrs } = useUI<Config>(defaultConfig, mutatedProps);
|
|
138
123
|
</script>
|
|
139
124
|
|
|
140
125
|
<template>
|
|
141
|
-
<
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
@keydown="onKeydown"
|
|
177
|
-
@mouseover="onMouseover"
|
|
178
|
-
>
|
|
179
|
-
<!-- @slot Use it replace the label. -->
|
|
180
|
-
<slot>{{ label }}</slot>
|
|
181
|
-
</a>
|
|
182
|
-
|
|
183
|
-
<!-- @slot Use it to add something after the label. -->
|
|
184
|
-
<slot name="right" />
|
|
185
|
-
</div>
|
|
126
|
+
<router-link
|
|
127
|
+
v-if="isPresentRoute"
|
|
128
|
+
:to="route"
|
|
129
|
+
:target="targetValue"
|
|
130
|
+
v-bind="linkAttrs"
|
|
131
|
+
:class="linkActiveClasses"
|
|
132
|
+
:data-test="getDataTest()"
|
|
133
|
+
tabindex="0"
|
|
134
|
+
@blur="onBlur"
|
|
135
|
+
@focus="onFocus"
|
|
136
|
+
@click="onClick"
|
|
137
|
+
@keydown="onKeydown"
|
|
138
|
+
@mouseover="onMouseover"
|
|
139
|
+
>
|
|
140
|
+
<!-- @slot Use it replace the label. -->
|
|
141
|
+
<slot>{{ label }}</slot>
|
|
142
|
+
</router-link>
|
|
143
|
+
|
|
144
|
+
<a
|
|
145
|
+
v-else
|
|
146
|
+
:href="prefixedHref"
|
|
147
|
+
:target="targetValue"
|
|
148
|
+
v-bind="linkAttrs"
|
|
149
|
+
:class="linkActiveClasses"
|
|
150
|
+
:data-test="getDataTest()"
|
|
151
|
+
tabindex="0"
|
|
152
|
+
@blur="onBlur"
|
|
153
|
+
@focus="onFocus"
|
|
154
|
+
@click="onClick"
|
|
155
|
+
@keydown="onKeydown"
|
|
156
|
+
@mouseover="onMouseover"
|
|
157
|
+
>
|
|
158
|
+
<!-- @slot Use it replace the label. -->
|
|
159
|
+
<slot>{{ label }}</slot>
|
|
160
|
+
</a>
|
|
186
161
|
</template>
|
package/ui.button-link/config.ts
CHANGED
|
@@ -1,40 +1,12 @@
|
|
|
1
1
|
export default /*tw*/ {
|
|
2
|
-
wrapper: {
|
|
3
|
-
base: `
|
|
4
|
-
w-fit inline-flex items-center rounded transition focus-visible:outline-none
|
|
5
|
-
focus-within:ring-dynamic focus-within:ring-offset-4 focus-within:ring-{color}-700/15
|
|
6
|
-
`,
|
|
7
|
-
variants: {
|
|
8
|
-
size: {
|
|
9
|
-
sm: "gap-1",
|
|
10
|
-
md: "gap-1",
|
|
11
|
-
lg: "gap-1.5",
|
|
12
|
-
},
|
|
13
|
-
color: {
|
|
14
|
-
grayscale: "focus-within:ring-gray-700/15",
|
|
15
|
-
white: "focus-within:ring-white/15",
|
|
16
|
-
},
|
|
17
|
-
disabled: {
|
|
18
|
-
true: "!ring-0 !ring-offset-0 cursor-not-allowed",
|
|
19
|
-
},
|
|
20
|
-
defaultSlot: {
|
|
21
|
-
true: "flex items-center focus-within:ring-0 focus-within:ring-offset-0",
|
|
22
|
-
},
|
|
23
|
-
ring: {
|
|
24
|
-
false: "!ring-0 !ring-offset-0",
|
|
25
|
-
},
|
|
26
|
-
block: {
|
|
27
|
-
true: "w-full",
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
2
|
link: {
|
|
32
3
|
base: `
|
|
33
|
-
inline-block cursor-pointer !leading-none transition
|
|
4
|
+
inline-block cursor-pointer !leading-none rounded transition
|
|
34
5
|
text-{color}-600 decoration-{color}-600 underline-offset-4
|
|
35
6
|
hover:text-{color}-700 hover:decoration-{color}-700
|
|
36
7
|
focus:text-{color}-700 focus:decoration-{color}-700 focus:outline-0
|
|
37
8
|
active:text-{color}-800 active:decoration-{color}-800
|
|
9
|
+
focus:ring-dynamic focus:ring-offset-4 focus:ring-{color}-700/15
|
|
38
10
|
`,
|
|
39
11
|
variants: {
|
|
40
12
|
size: {
|
|
@@ -57,10 +29,10 @@ export default /*tw*/ {
|
|
|
57
29
|
grayscale: `
|
|
58
30
|
text-gray-900 decoration-gray-900
|
|
59
31
|
hover:text-gray-800 hover:decoration-gray-800
|
|
60
|
-
focus:text-gray-800 focus:decoration-gray-800
|
|
32
|
+
focus:text-gray-800 focus:decoration-gray-800 focus:ring-gray-700/15
|
|
61
33
|
active:text-gray-700 active:decoration-gray-700
|
|
62
34
|
`,
|
|
63
|
-
white: "decoration-white text-white",
|
|
35
|
+
white: "decoration-white text-white focus:ring-white/15",
|
|
64
36
|
},
|
|
65
37
|
defaultSlot: {
|
|
66
38
|
true: "flex items-center no-underline hover:no-underline",
|
|
@@ -71,6 +43,9 @@ export default /*tw*/ {
|
|
|
71
43
|
disabled: {
|
|
72
44
|
true: "text-gray-400 pointer-events-none",
|
|
73
45
|
},
|
|
46
|
+
ring: {
|
|
47
|
+
false: "!ring-0 !ring-offset-0",
|
|
48
|
+
},
|
|
74
49
|
block: {
|
|
75
50
|
true: "w-full",
|
|
76
51
|
},
|
|
@@ -83,11 +58,9 @@ export default /*tw*/ {
|
|
|
83
58
|
ariaCurrentValue: "page",
|
|
84
59
|
activeClass: "",
|
|
85
60
|
exactActiveClass: "",
|
|
86
|
-
wrapperActiveClass: "",
|
|
87
|
-
wrapperExactActiveClass: "",
|
|
88
61
|
underlined: undefined,
|
|
89
62
|
block: false,
|
|
90
|
-
ring:
|
|
63
|
+
ring: false,
|
|
91
64
|
dashed: false,
|
|
92
65
|
disabled: false,
|
|
93
66
|
targetBlank: false,
|
|
@@ -196,25 +196,3 @@ DefaultSlot.args = {
|
|
|
196
196
|
</template>
|
|
197
197
|
`,
|
|
198
198
|
};
|
|
199
|
-
|
|
200
|
-
export const LeftAndRightSlots: StoryFn<ULinkArgs> = (args: ULinkArgs) => ({
|
|
201
|
-
components: { ULink, UIcon, URow },
|
|
202
|
-
setup() {
|
|
203
|
-
return { args };
|
|
204
|
-
},
|
|
205
|
-
template: `
|
|
206
|
-
<URow no-mobile>
|
|
207
|
-
<ULink label="Download">
|
|
208
|
-
<template #left>
|
|
209
|
-
<UIcon name="download" size="xs" color="green" />
|
|
210
|
-
</template>
|
|
211
|
-
</ULink>
|
|
212
|
-
|
|
213
|
-
<ULink label="Open">
|
|
214
|
-
<template #right>
|
|
215
|
-
<UIcon name="open_in_new" size="xs" color="green" />
|
|
216
|
-
</template>
|
|
217
|
-
</ULink>
|
|
218
|
-
</URow>
|
|
219
|
-
`,
|
|
220
|
-
});
|
package/ui.button-link/types.ts
CHANGED
|
@@ -87,16 +87,6 @@ export interface Props {
|
|
|
87
87
|
*/
|
|
88
88
|
exactActiveClass?: string;
|
|
89
89
|
|
|
90
|
-
/**
|
|
91
|
-
* Apply classes to the wrapper div when link route is active or when it matches any parent route.
|
|
92
|
-
*/
|
|
93
|
-
wrapperActiveClass?: string;
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Apply classes to the wrapper div when link route is active.
|
|
97
|
-
*/
|
|
98
|
-
wrapperExactActiveClass?: string;
|
|
99
|
-
|
|
100
90
|
/**
|
|
101
91
|
* Show underline.
|
|
102
92
|
*/
|
|
@@ -130,5 +120,5 @@ export interface Props {
|
|
|
130
120
|
/**
|
|
131
121
|
* Data-test attribute for automated testing.
|
|
132
122
|
*/
|
|
133
|
-
dataTest?: string;
|
|
123
|
+
dataTest?: string | null;
|
|
134
124
|
}
|
|
@@ -32,7 +32,7 @@ const emit = defineEmits([
|
|
|
32
32
|
"update:modelValue",
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Triggers when back link
|
|
35
|
+
* Triggers when a back link is clicked.
|
|
36
36
|
*/
|
|
37
37
|
"back",
|
|
38
38
|
]);
|
|
@@ -113,6 +113,7 @@ const {
|
|
|
113
113
|
config,
|
|
114
114
|
modalAttrs,
|
|
115
115
|
titleAttrs,
|
|
116
|
+
backLinkWrapperAttrs,
|
|
116
117
|
backLinkAttrs,
|
|
117
118
|
backLinkIconAttrs,
|
|
118
119
|
closeIconAttrs,
|
|
@@ -157,25 +158,25 @@ const {
|
|
|
157
158
|
<slot name="before-title" />
|
|
158
159
|
|
|
159
160
|
<div v-bind="headerLeftFallbackAttrs">
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
<
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
</
|
|
161
|
+
<div v-if="isShownArrowButton" v-bind="backLinkWrapperAttrs">
|
|
162
|
+
<UIcon
|
|
163
|
+
internal
|
|
164
|
+
size="2xs"
|
|
165
|
+
color="gray"
|
|
166
|
+
:name="config.defaults.backIcon"
|
|
167
|
+
v-bind="backLinkIconAttrs"
|
|
168
|
+
/>
|
|
169
|
+
|
|
170
|
+
<ULink
|
|
171
|
+
size="sm"
|
|
172
|
+
color="gray"
|
|
173
|
+
:to="backTo"
|
|
174
|
+
:ring="false"
|
|
175
|
+
:label="backLabel"
|
|
176
|
+
v-bind="backLinkAttrs"
|
|
177
|
+
@click="onClickBackLink"
|
|
178
|
+
/>
|
|
179
|
+
</div>
|
|
179
180
|
|
|
180
181
|
<UHeader :label="title" size="sm" v-bind="titleAttrs" />
|
|
181
182
|
<div v-if="description" v-bind="descriptionAttrs" v-text="description" />
|
|
@@ -18,9 +18,10 @@ export default /*tw*/ {
|
|
|
18
18
|
leaveToClass: "opacity-0",
|
|
19
19
|
},
|
|
20
20
|
innerWrapper: "py-12 w-full h-full overflow-auto",
|
|
21
|
-
header: "flex
|
|
22
|
-
headerLeft: "flex items-center
|
|
21
|
+
header: "flex justify-between px-4 md:px-8 pb-6 pt-8",
|
|
22
|
+
headerLeft: "flex items-center gap-4",
|
|
23
23
|
headerLeftFallback: "flex flex-col",
|
|
24
|
+
backLinkWrapper: "flex items-center gap-0.5 mb-0.5",
|
|
24
25
|
backLink: "{ULink} flex items-center gap-0.5",
|
|
25
26
|
backLinkIcon: "{UIcon}",
|
|
26
27
|
title: "{UHeader}",
|
|
@@ -25,6 +25,13 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
25
25
|
backLabel: "",
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
+
const emit = defineEmits([
|
|
29
|
+
/**
|
|
30
|
+
* Triggers when a back link is clicked.
|
|
31
|
+
*/
|
|
32
|
+
"back",
|
|
33
|
+
]);
|
|
34
|
+
|
|
28
35
|
const { isMobileBreakpoint } = useBreakpoint();
|
|
29
36
|
|
|
30
37
|
const isExistHeader = computed(() => {
|
|
@@ -56,6 +63,10 @@ onMounted(() => {
|
|
|
56
63
|
}
|
|
57
64
|
});
|
|
58
65
|
|
|
66
|
+
function onClickBackLink() {
|
|
67
|
+
emit("back");
|
|
68
|
+
}
|
|
69
|
+
|
|
59
70
|
/**
|
|
60
71
|
* Get element / nested component attributes for each config token ✨
|
|
61
72
|
* Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
|
|
@@ -66,6 +77,7 @@ const {
|
|
|
66
77
|
pageAttrs,
|
|
67
78
|
rightRoundingAttrs,
|
|
68
79
|
titleAttrs,
|
|
80
|
+
backLinkWrapperAttrs,
|
|
69
81
|
backLinkAttrs,
|
|
70
82
|
backLinkIconAttrs,
|
|
71
83
|
headerAttrs,
|
|
@@ -95,25 +107,25 @@ const {
|
|
|
95
107
|
<slot name="before-title" />
|
|
96
108
|
|
|
97
109
|
<div v-bind="headerLeftFallbackAttrs">
|
|
98
|
-
<
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
</
|
|
110
|
+
<div v-if="isShownArrowButton" v-bind="backLinkWrapperAttrs">
|
|
111
|
+
<UIcon
|
|
112
|
+
internal
|
|
113
|
+
size="2xs"
|
|
114
|
+
color="gray"
|
|
115
|
+
:name="config.defaults.backIcon"
|
|
116
|
+
v-bind="backLinkIconAttrs"
|
|
117
|
+
/>
|
|
118
|
+
|
|
119
|
+
<ULink
|
|
120
|
+
:ring="false"
|
|
121
|
+
size="sm"
|
|
122
|
+
color="gray"
|
|
123
|
+
:to="backTo"
|
|
124
|
+
:label="backLabel"
|
|
125
|
+
v-bind="backLinkAttrs"
|
|
126
|
+
@click="onClickBackLink"
|
|
127
|
+
/>
|
|
128
|
+
</div>
|
|
117
129
|
|
|
118
130
|
<UHeader :label="title" :size="titleSize" v-bind="titleAttrs" />
|
|
119
131
|
<div v-if="description" v-bind="descriptionAttrs" v-text="description" />
|
|
@@ -32,6 +32,7 @@ export default /*tw*/ {
|
|
|
32
32
|
header: "flex items-start justify-between mb-4 md:mb-6",
|
|
33
33
|
headerLeft: "flex items-center gap-4",
|
|
34
34
|
headerLeftFallback: "flex flex-col gap-0.5",
|
|
35
|
+
backLinkWrapper: "flex items-center gap-0.5",
|
|
35
36
|
backLink: "{ULink}",
|
|
36
37
|
backLinkIcon: "{UIcon}",
|
|
37
38
|
title: "{UHeader}",
|
package/ui.data-list/types.ts
CHANGED
package/ui.data-table/types.ts
CHANGED