ketekny-ui-kit 1.0.45 → 1.0.46
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/package.json +1 -1
- package/src/style/style.css +2 -0
- package/src/ui/kMessageNew.vue +49 -18
package/package.json
CHANGED
package/src/style/style.css
CHANGED
package/src/ui/kMessageNew.vue
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
colors.container,
|
|
8
8
|
'relative overflow-hidden shadow-sm ring-1 ring-black/5 transition-[box-shadow,transform] duration-200 dark:ring-white/10',
|
|
9
9
|
'border',
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
accentEnabled ? 'border-l-4 rounded-r-md' : 'rounded-md',
|
|
11
|
+
accentEnabled ? accentStripes[type] : '',
|
|
12
12
|
'focus-within:ring-2 focus-within:ring-primary/30 focus-within:ring-offset-1 focus-within:ring-offset-white dark:focus-within:ring-offset-slate-900',
|
|
13
13
|
sizes[size].padding,
|
|
14
14
|
$attrs.class,
|
|
@@ -36,13 +36,12 @@
|
|
|
36
36
|
<span
|
|
37
37
|
v-else-if="iconStyle === 'badge'"
|
|
38
38
|
:class="[
|
|
39
|
-
'inline-flex shrink-0 items-center justify-center
|
|
40
|
-
sizes[size].
|
|
41
|
-
colors.icon,
|
|
39
|
+
'inline-flex shrink-0 items-center justify-center',
|
|
40
|
+
sizes[size].badgeWrap,
|
|
42
41
|
]"
|
|
43
42
|
aria-hidden="true"
|
|
44
43
|
>
|
|
45
|
-
|
|
44
|
+
<component :is="badgeIcons[type]" :class="[sizes[size].badgeIcon, colors.title]" aria-hidden="true" />
|
|
46
45
|
</span>
|
|
47
46
|
<!-- Lucide icon -->
|
|
48
47
|
<component
|
|
@@ -67,7 +66,7 @@
|
|
|
67
66
|
<!-- Right: action slot | label | close -->
|
|
68
67
|
<div
|
|
69
68
|
v-if="hasActionSlot || label || isClosable"
|
|
70
|
-
class="flex shrink-0 items-center gap-2 self-end sm:self-start sm:pl-3"
|
|
69
|
+
class="ml-auto flex shrink-0 items-center gap-2 self-end sm:self-start sm:pl-3"
|
|
71
70
|
>
|
|
72
71
|
<slot name="action" />
|
|
73
72
|
<span
|
|
@@ -86,7 +85,7 @@
|
|
|
86
85
|
]"
|
|
87
86
|
:aria-label="`Close ${type} message`"
|
|
88
87
|
>
|
|
89
|
-
<
|
|
88
|
+
<CloseIcon :class="sizes[size].close" />
|
|
90
89
|
</button>
|
|
91
90
|
</div>
|
|
92
91
|
</div>
|
|
@@ -96,7 +95,7 @@
|
|
|
96
95
|
|
|
97
96
|
<script setup>
|
|
98
97
|
import { computed, onBeforeUnmount, ref, useSlots, watch } from 'vue'
|
|
99
|
-
import { X, Info, CircleCheckBig, TriangleAlert, OctagonX } from 'lucide-vue-next'
|
|
98
|
+
import { X as CloseIcon, Info, CircleCheckBig, TriangleAlert, OctagonX } from 'lucide-vue-next'
|
|
100
99
|
|
|
101
100
|
// ─── Color config ────────────────────────────────────────────────────────────
|
|
102
101
|
|
|
@@ -109,6 +108,13 @@ const colorConfig = {
|
|
|
109
108
|
body: 'text-slate-700 dark:text-sky-50',
|
|
110
109
|
label: 'text-slate-500 dark:text-slate-300',
|
|
111
110
|
},
|
|
111
|
+
standard: {
|
|
112
|
+
container: 'border-slate-200 bg-white dark:border-slate-700 dark:bg-slate-900/90',
|
|
113
|
+
icon: 'bg-sky-100 border-sky-300 text-sky-700 dark:bg-sky-500/15 dark:border-sky-400/40 dark:text-sky-300',
|
|
114
|
+
title: 'text-sky-700 dark:text-sky-300',
|
|
115
|
+
body: 'text-slate-700 dark:text-slate-200',
|
|
116
|
+
label: 'text-slate-500 dark:text-slate-300',
|
|
117
|
+
},
|
|
112
118
|
outlined: {
|
|
113
119
|
container: 'border-sky-400 bg-white dark:border-sky-500/70 dark:bg-slate-900',
|
|
114
120
|
icon: 'bg-sky-100/60 border-sky-500 text-sky-600 dark:bg-sky-900/50 dark:border-sky-400 dark:text-sky-300',
|
|
@@ -132,6 +138,13 @@ const colorConfig = {
|
|
|
132
138
|
body: 'text-slate-700 dark:text-emerald-50',
|
|
133
139
|
label: 'text-slate-500 dark:text-slate-300',
|
|
134
140
|
},
|
|
141
|
+
standard: {
|
|
142
|
+
container: 'border-slate-200 bg-white dark:border-slate-700 dark:bg-slate-900/90',
|
|
143
|
+
icon: 'bg-emerald-100 border-emerald-300 text-emerald-700 dark:bg-emerald-500/15 dark:border-emerald-400/40 dark:text-emerald-300',
|
|
144
|
+
title: 'text-emerald-700 dark:text-emerald-300',
|
|
145
|
+
body: 'text-slate-700 dark:text-slate-200',
|
|
146
|
+
label: 'text-slate-500 dark:text-slate-300',
|
|
147
|
+
},
|
|
135
148
|
outlined: {
|
|
136
149
|
container: 'border-emerald-400 bg-white dark:border-emerald-500/70 dark:bg-slate-900',
|
|
137
150
|
icon: 'bg-emerald-100/60 border-emerald-500 text-emerald-600 dark:bg-emerald-900/50 dark:border-emerald-400 dark:text-emerald-300',
|
|
@@ -155,6 +168,13 @@ const colorConfig = {
|
|
|
155
168
|
body: 'text-slate-700 dark:text-amber-50',
|
|
156
169
|
label: 'text-slate-500 dark:text-slate-300',
|
|
157
170
|
},
|
|
171
|
+
standard: {
|
|
172
|
+
container: 'border-slate-200 bg-white dark:border-slate-700 dark:bg-slate-900/90',
|
|
173
|
+
icon: 'bg-amber-100 border-amber-300 text-amber-700 dark:bg-amber-500/15 dark:border-amber-400/40 dark:text-amber-300',
|
|
174
|
+
title: 'text-amber-700 dark:text-amber-300',
|
|
175
|
+
body: 'text-slate-700 dark:text-slate-200',
|
|
176
|
+
label: 'text-slate-500 dark:text-slate-300',
|
|
177
|
+
},
|
|
158
178
|
outlined: {
|
|
159
179
|
container: 'border-amber-400 bg-white dark:border-amber-500/70 dark:bg-slate-900',
|
|
160
180
|
icon: 'bg-amber-100/60 border-amber-500 text-amber-600 dark:bg-amber-900/50 dark:border-amber-400 dark:text-amber-300',
|
|
@@ -178,6 +198,13 @@ const colorConfig = {
|
|
|
178
198
|
body: 'text-slate-700 dark:text-rose-50',
|
|
179
199
|
label: 'text-slate-500 dark:text-slate-300',
|
|
180
200
|
},
|
|
201
|
+
standard: {
|
|
202
|
+
container: 'border-slate-200 bg-white dark:border-slate-700 dark:bg-slate-900/90',
|
|
203
|
+
icon: 'bg-rose-100 border-rose-300 text-rose-700 dark:bg-rose-500/15 dark:border-rose-400/40 dark:text-rose-300',
|
|
204
|
+
title: 'text-rose-700 dark:text-rose-300',
|
|
205
|
+
body: 'text-slate-700 dark:text-slate-200',
|
|
206
|
+
label: 'text-slate-500 dark:text-slate-300',
|
|
207
|
+
},
|
|
181
208
|
outlined: {
|
|
182
209
|
container: 'border-rose-400 bg-white dark:border-rose-500/70 dark:bg-slate-900',
|
|
183
210
|
icon: 'bg-rose-100/60 border-rose-500 text-rose-600 dark:bg-rose-900/50 dark:border-rose-400 dark:text-rose-300',
|
|
@@ -206,22 +233,24 @@ const sizes = {
|
|
|
206
233
|
sm: {
|
|
207
234
|
padding: 'px-3 py-2',
|
|
208
235
|
text: 'text-xs sm:text-sm',
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
236
|
+
badgeWrap: 'h-5 w-5 mt-0.5',
|
|
237
|
+
badgeIcon: 'h-5 w-5',
|
|
238
|
+
customIcon: 'text-base leading-none',
|
|
239
|
+
lucide: 'h-4 w-4',
|
|
212
240
|
close: 'h-3 w-3',
|
|
213
241
|
},
|
|
214
242
|
md: {
|
|
215
243
|
padding: 'px-4 py-3',
|
|
216
244
|
text: 'text-sm sm:text-base',
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
245
|
+
badgeWrap: 'h-6 w-6 mt-0.5',
|
|
246
|
+
badgeIcon: 'h-6 w-6',
|
|
247
|
+
customIcon: 'text-lg leading-none',
|
|
248
|
+
lucide: 'h-5 w-5',
|
|
220
249
|
close: 'h-3.5 w-3.5',
|
|
221
250
|
},
|
|
222
251
|
}
|
|
223
252
|
|
|
224
|
-
const
|
|
253
|
+
const badgeIcons = { info: Info, success: CircleCheckBig, warning: TriangleAlert, error: OctagonX }
|
|
225
254
|
const lucideIcons = { info: Info, success: CircleCheckBig, warning: TriangleAlert, error: OctagonX }
|
|
226
255
|
|
|
227
256
|
// ─── Props / emits ────────────────────────────────────────────────────────────
|
|
@@ -229,13 +258,14 @@ const lucideIcons = { info: Info, success: CircleCheckBig, warning: TriangleAler
|
|
|
229
258
|
const props = defineProps({
|
|
230
259
|
type: {
|
|
231
260
|
type: String,
|
|
232
|
-
default
|
|
261
|
+
// Keep legacy default for drop-in compatibility with kMessage.
|
|
262
|
+
default: 'warning',
|
|
233
263
|
validator: (val) => ['info', 'success', 'warning', 'error'].includes(val),
|
|
234
264
|
},
|
|
235
265
|
variant: {
|
|
236
266
|
type: String,
|
|
237
267
|
default: 'default',
|
|
238
|
-
validator: (val) => ['default', 'outlined', 'filled'].includes(val),
|
|
268
|
+
validator: (val) => ['default', 'standard', 'outlined', 'filled'].includes(val),
|
|
239
269
|
},
|
|
240
270
|
iconStyle: {
|
|
241
271
|
type: String,
|
|
@@ -277,6 +307,7 @@ const hasActionSlot = computed(() => !!slots.action)
|
|
|
277
307
|
const hasDefaultSlot = computed(() => !!slots.default)
|
|
278
308
|
const hasIconSlot = computed(() => !!slots.icon)
|
|
279
309
|
const colors = computed(() => colorConfig[props.type][props.variant])
|
|
310
|
+
const accentEnabled = computed(() => props.accent || props.variant === 'standard')
|
|
280
311
|
const dismissAfterMs = computed(() => {
|
|
281
312
|
const value = Number(props.dismissAfter)
|
|
282
313
|
return Number.isFinite(value) && value > 0 ? value : 0
|