ketekny-ui-kit 1.0.45 → 1.0.47

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ketekny-ui-kit",
3
3
  "type": "module",
4
- "version": "1.0.45",
4
+ "version": "1.0.47",
5
5
  "description": "A Vue 3 UI component library with Tailwind CSS styling",
6
6
  "main": "index.js",
7
7
  "files": [
@@ -1,4 +1,6 @@
1
1
 
2
+ @import "primeicons/primeicons.css";
3
+
2
4
  @tailwind base;
3
5
  @tailwind components;
4
6
  @tailwind utilities;
@@ -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
- accent ? 'border-l-4 rounded-r-md' : 'rounded-md',
11
- accent ? accentStripes[type] : '',
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 rounded-full border font-semibold',
40
- sizes[size].badge,
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
- {{ iconLetters[type] }}
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
- <X :class="sizes[size].close" />
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-sky-200/90 bg-sky-50/60 dark:border-sky-500/35 dark:bg-sky-950/35',
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-emerald-200/90 bg-emerald-50/60 dark:border-emerald-500/35 dark:bg-emerald-950/35',
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-amber-200/90 bg-amber-50/60 dark:border-amber-500/35 dark:bg-amber-950/35',
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-rose-200/90 bg-rose-50/60 dark:border-rose-500/35 dark:bg-rose-950/35',
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
- badge: 'h-4 w-4 text-[10px]',
210
- customIcon: 'text-sm leading-none',
211
- lucide: 'h-3.5 w-3.5',
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
- badge: 'h-5 w-5 text-xs',
218
- customIcon: 'text-base leading-none',
219
- lucide: 'h-4 w-4',
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 iconLetters = { info: 'i', success: '✓', warning: '!', error: '✕' }
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: 'info',
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