@astrake/lumora-ui 0.2.2 → 0.7.3

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 (94) hide show
  1. package/CHANGELOG.md +113 -21
  2. package/README.md +29 -31
  3. package/dist/LuAccordion.vue_vue_type_script_setup_true_lang-CwG5Ml8t.js +5032 -0
  4. package/dist/__mocks__/empty.d.ts +4 -0
  5. package/dist/components/LuAccordion.vue.d.ts +23 -0
  6. package/dist/components/LuBarChart.vue.d.ts +22 -0
  7. package/dist/components/LuBottomSheet.vue.d.ts +27 -0
  8. package/dist/components/LuCalendar.vue.d.ts +34 -0
  9. package/dist/components/LuCheckbox.vue.d.ts +17 -3
  10. package/dist/components/LuChip.vue.d.ts +35 -0
  11. package/dist/components/LuChipGroup.vue.d.ts +23 -0
  12. package/dist/components/LuCollapsible.vue.d.ts +5 -2
  13. package/dist/components/LuCommandPalette.vue.d.ts +25 -0
  14. package/dist/components/LuDataGrid.types.d.ts +39 -0
  15. package/dist/components/LuDataGrid.vue.d.ts +84 -0
  16. package/dist/components/LuDateRangePicker.vue.d.ts +29 -0
  17. package/dist/components/LuDoughnutChart.vue.d.ts +17 -0
  18. package/dist/components/LuDrawer.vue.d.ts +33 -0
  19. package/dist/components/LuFileUpload.vue.d.ts +38 -0
  20. package/dist/components/LuFormField.vue.d.ts +21 -0
  21. package/dist/components/LuFormWizard.types.d.ts +7 -0
  22. package/dist/components/LuFormWizard.vue.d.ts +33 -0
  23. package/dist/components/LuGaugeChart.vue.d.ts +16 -0
  24. package/dist/components/LuKanban.types.d.ts +24 -0
  25. package/dist/components/LuKanban.vue.d.ts +30 -0
  26. package/dist/components/LuLineChart.vue.d.ts +19 -0
  27. package/dist/components/LuList.vue.d.ts +18 -0
  28. package/dist/components/LuListDivider.vue.d.ts +5 -0
  29. package/dist/components/LuListItem.vue.d.ts +32 -0
  30. package/dist/components/LuListSubheader.vue.d.ts +16 -0
  31. package/dist/components/LuMediaGallery.vue.d.ts +25 -0
  32. package/dist/components/LuMenu.vue.d.ts +2 -2
  33. package/dist/components/LuPlanner.types.d.ts +14 -0
  34. package/dist/components/LuPlanner.vue.d.ts +23 -0
  35. package/dist/components/LuPopover.vue.d.ts +24 -0
  36. package/dist/components/LuRadioGroup.types.d.ts +1 -0
  37. package/dist/components/LuRichTextEditor.vue.d.ts +27 -0
  38. package/dist/components/LuSelect.vue.d.ts +35 -2
  39. package/dist/components/{LuPageHeader.vue.d.ts → LuSparkline.vue.d.ts} +9 -5
  40. package/dist/components/LuSwitch.vue.d.ts +19 -5
  41. package/dist/components/LuTimeline.vue.d.ts +17 -0
  42. package/dist/components/LuTimelineItem.vue.d.ts +24 -0
  43. package/dist/components/LuToast.vue.d.ts +5 -0
  44. package/dist/components/LuTree.types.d.ts +9 -0
  45. package/dist/components/LuTree.vue.d.ts +25 -0
  46. package/dist/components/LuTreeNode.vue.d.ts +37 -0
  47. package/dist/components/__tests__/LuAccordion.test.d.ts +1 -0
  48. package/dist/components/__tests__/LuBarChart.test.d.ts +1 -0
  49. package/dist/components/__tests__/LuBottomSheet.test.d.ts +1 -0
  50. package/dist/components/__tests__/LuCalendar.test.d.ts +1 -0
  51. package/dist/components/__tests__/LuCheckbox.test.d.ts +1 -0
  52. package/dist/components/__tests__/LuChip.test.d.ts +1 -0
  53. package/dist/components/__tests__/LuCommandPalette.test.d.ts +1 -0
  54. package/dist/components/__tests__/LuDataGrid.test.d.ts +1 -0
  55. package/dist/components/__tests__/LuDateRangePicker.test.d.ts +1 -0
  56. package/dist/components/__tests__/LuDoughnutChart.test.d.ts +1 -0
  57. package/dist/components/__tests__/LuDrawer.test.d.ts +1 -0
  58. package/dist/components/__tests__/LuFileUpload.test.d.ts +1 -0
  59. package/dist/components/__tests__/LuFormWizard.test.d.ts +1 -0
  60. package/dist/components/__tests__/LuGaugeChart.test.d.ts +1 -0
  61. package/dist/components/__tests__/LuKanban.test.d.ts +1 -0
  62. package/dist/components/__tests__/LuLineChart.test.d.ts +1 -0
  63. package/dist/components/__tests__/LuList.test.d.ts +1 -0
  64. package/dist/components/__tests__/LuMediaGallery.test.d.ts +1 -0
  65. package/dist/components/__tests__/LuPlanner.test.d.ts +1 -0
  66. package/dist/components/__tests__/LuPopover.test.d.ts +1 -0
  67. package/dist/components/__tests__/LuRadio.test.d.ts +1 -0
  68. package/dist/components/__tests__/LuRichTextEditor.test.d.ts +1 -0
  69. package/dist/components/__tests__/LuSelect.test.d.ts +1 -0
  70. package/dist/components/__tests__/LuSparkline.test.d.ts +1 -0
  71. package/dist/components/__tests__/LuSwitch.test.d.ts +1 -0
  72. package/dist/components/__tests__/LuTimeline.test.d.ts +1 -0
  73. package/dist/components/__tests__/LuToast.test.d.ts +1 -0
  74. package/dist/components/__tests__/LuTree.test.d.ts +1 -0
  75. package/dist/components/index.d.ts +42 -3
  76. package/dist/components/index.js +73 -44
  77. package/dist/composables/index.d.ts +2 -0
  78. package/dist/composables/index.js +36 -17
  79. package/dist/composables/lazyVChart.d.ts +10 -0
  80. package/dist/composables/useChartTheme.d.ts +65 -0
  81. package/dist/composables/useDataGrid.d.ts +52 -0
  82. package/dist/composables/useFloating.d.ts +12 -0
  83. package/dist/composables/useLuToast.d.ts +14 -0
  84. package/dist/index.d.ts +5 -0
  85. package/dist/index.js +210 -146
  86. package/dist/skins/index.js +824 -20
  87. package/dist/useLuToast-D5d7Wrcr.js +1029 -0
  88. package/package.json +16 -3
  89. package/scripts/postinstall.mjs +35 -0
  90. package/src/lumora.css +216 -5
  91. package/dist/LuCodeBlock.vue_vue_type_script_setup_true_lang-BdXflBkJ.js +0 -1672
  92. package/dist/components/LuThemeSelect.vue.d.ts +0 -2
  93. package/dist/components/LuThemeSwitch.vue.d.ts +0 -2
  94. package/dist/useShiki-DPOJfneq.js +0 -30
@@ -28,6 +28,23 @@ const e = {
28
28
  default: "flex min-h-[72px] w-full rounded-lg border border-zinc-300 bg-zinc-50 px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 transition-[border-color,box-shadow] duration-150 focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 disabled:cursor-not-allowed disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-50 dark:placeholder:text-zinc-500 dark:focus:border-rose-400 dark:focus:ring-rose-400",
29
29
  error: "flex min-h-[72px] w-full rounded-lg border border-red-500 bg-zinc-50 px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 transition-[border-color,box-shadow] duration-150 focus:outline-none focus:border-red-500 focus:ring-1 focus:ring-red-500 disabled:cursor-not-allowed disabled:opacity-40 dark:border-red-500 dark:bg-zinc-900 dark:text-zinc-50 dark:placeholder:text-zinc-500"
30
30
  },
31
+ LuCheckContainer: {
32
+ default: "inline-flex items-center gap-3"
33
+ },
34
+ LuCheck: {
35
+ default: "peer relative flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border border-zinc-300 bg-white ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-rose-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-950 dark:ring-offset-zinc-950 dark:focus-visible:ring-rose-400 transition-colors",
36
+ checked: "bg-rose-600 border-rose-600 text-white dark:bg-rose-500 dark:border-rose-500",
37
+ indeterminate: "bg-rose-600 border-rose-600 text-white dark:bg-rose-500 dark:border-rose-500"
38
+ },
39
+ "LuCheck.error": {
40
+ default: "border-red-500 focus-visible:ring-red-500 dark:border-red-500 dark:focus-visible:ring-red-400"
41
+ },
42
+ LuCheckIcon: {
43
+ default: "h-3 w-3 text-current"
44
+ },
45
+ LuCheckLabel: {
46
+ default: "text-sm font-medium leading-none text-zinc-900 peer-disabled:cursor-not-allowed peer-disabled:opacity-40 dark:text-zinc-50 cursor-pointer select-none"
47
+ },
31
48
  LuCheckboxContainer: {
32
49
  default: "flex items-center space-x-2"
33
50
  },
@@ -38,17 +55,23 @@ const e = {
38
55
  default: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-40 text-zinc-900 dark:text-zinc-100 cursor-pointer"
39
56
  },
40
57
  LuRadioGroup: {
41
- default: "flex flex-col space-y-2",
42
- horizontal: "flex flex-row space-x-4"
58
+ default: "flex flex-col gap-2",
59
+ card: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"
43
60
  },
44
61
  LuRadioContainer: {
45
- default: "flex items-center space-x-2"
62
+ default: "inline-flex items-center gap-3",
63
+ card: "relative flex cursor-pointer flex-col rounded-xl border border-zinc-200 bg-white p-4 shadow-sm hover:bg-zinc-50 focus-within:ring-2 focus-within:ring-rose-500 focus-within:ring-offset-2 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-900/80 transition-colors dark:focus-within:ring-rose-400 dark:focus-within:ring-offset-zinc-950 has-[:checked]:border-rose-500 has-[:checked]:bg-rose-50/50 dark:has-[:checked]:border-rose-500 dark:has-[:checked]:bg-rose-500/10"
46
64
  },
47
65
  LuRadio: {
48
- default: "h-4 w-4 rounded-full border-zinc-300 text-rose-600 focus:ring-rose-500 disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-900 dark:focus:ring-rose-500"
66
+ default: "peer relative flex h-4 w-4 shrink-0 items-center justify-center rounded-full border border-zinc-300 bg-white ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-rose-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-950 dark:ring-offset-zinc-950 dark:focus-visible:ring-rose-400 transition-colors",
67
+ checked: "border-rose-600 text-rose-600 dark:border-rose-500 dark:text-rose-500"
68
+ },
69
+ LuRadioDot: {
70
+ default: "h-2 w-2 rounded-full fill-current bg-current"
49
71
  },
50
72
  LuRadioLabel: {
51
- default: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-40 text-zinc-900 dark:text-zinc-100 cursor-pointer"
73
+ default: "text-sm font-medium leading-none text-zinc-900 peer-disabled:cursor-not-allowed peer-disabled:opacity-40 dark:text-zinc-50 cursor-pointer select-none",
74
+ card: "flex flex-col gap-1 cursor-pointer select-none"
52
75
  },
53
76
  LuAlert: {
54
77
  default: "relative w-full rounded-lg border-l-[3px] border-l-zinc-400 bg-zinc-50 p-4 flex gap-3 text-sm text-zinc-800 dark:border-l-zinc-600 dark:bg-zinc-900 dark:text-zinc-200",
@@ -201,20 +224,60 @@ const e = {
201
224
  vertical: "h-full w-px"
202
225
  },
203
226
  LuSelect: {
204
- default: "flex h-9 w-full items-center justify-between rounded-lg border border-zinc-300 bg-zinc-50 px-3 py-2 text-sm focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 disabled:cursor-not-allowed disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-900 dark:focus:border-rose-400 dark:focus:ring-rose-400",
227
+ default: "flex h-9 w-full items-center justify-between rounded-lg border border-zinc-300 bg-zinc-50 px-3 py-2 text-sm focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 disabled:cursor-not-allowed disabled:opacity-40 dark:border-zinc-700 dark:bg-zinc-900 dark:focus:border-rose-400 dark:focus:ring-rose-400 transition-[border-color,box-shadow] duration-150",
205
228
  theme: "w-32"
206
229
  },
230
+ "LuSelect.error": {
231
+ default: "border-red-500 focus:border-red-500 focus:ring-red-500 dark:border-red-500 dark:focus:border-red-400 dark:focus:ring-red-400"
232
+ },
233
+ LuSelectIcon: {
234
+ default: "h-4 w-4 shrink-0 text-zinc-400 transition-transform duration-200 dark:text-zinc-500",
235
+ open: "rotate-180"
236
+ },
237
+ LuSelectPanel: {
238
+ default: "absolute z-50 mt-1 max-h-60 overflow-hidden rounded-xl border border-zinc-200/80 bg-white/95 backdrop-blur-sm shadow-lg lu-fade-in dark:border-zinc-700/80 dark:bg-zinc-900/95 dark:shadow-zinc-950/50 flex flex-col"
239
+ },
240
+ LuSelectSearch: {
241
+ default: "flex h-9 w-full rounded-none border-b border-zinc-200 bg-transparent px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 focus:outline-none dark:border-zinc-800 dark:text-zinc-50 dark:placeholder:text-zinc-500 shrink-0"
242
+ },
243
+ LuSelectOptionList: {
244
+ default: "overflow-y-auto p-1 lu-scrollbar-thin"
245
+ },
246
+ LuSelectOption: {
247
+ default: "relative flex w-full cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none transition-colors",
248
+ hover: "bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-50",
249
+ active: "bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-50",
250
+ selected: "bg-rose-50 text-rose-700 dark:bg-rose-950/30 dark:text-rose-300 font-medium",
251
+ disabled: "pointer-events-none opacity-40"
252
+ },
253
+ LuSelectEmpty: {
254
+ default: "p-4 text-center text-sm text-zinc-500 dark:text-zinc-400"
255
+ },
256
+ LuSelectPlaceholder: {
257
+ default: "text-zinc-500 dark:text-zinc-400 truncate"
258
+ },
259
+ LuSwitchRoot: {
260
+ default: "inline-flex items-center gap-3 cursor-pointer select-none"
261
+ },
207
262
  LuSwitch: {
208
263
  default: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-rose-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-40 bg-zinc-200 dark:bg-zinc-700 dark:focus-visible:ring-rose-400 dark:focus-visible:ring-offset-zinc-950",
209
264
  checked: "bg-rose-600 dark:bg-rose-500",
210
- thumb: "pointer-events-none block h-5 w-5 rounded-full bg-white shadow-md ring-0 transition-transform duration-150 dark:bg-white",
211
- thumbChecked: "translate-x-5",
212
- thumbUnchecked: "translate-x-0",
265
+ indeterminate: "bg-zinc-300 dark:bg-zinc-600",
266
+ success: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-40 bg-zinc-200 dark:bg-zinc-700 dark:focus-visible:ring-emerald-400 dark:focus-visible:ring-offset-zinc-950",
267
+ "success-checked": "bg-emerald-600 dark:bg-emerald-500",
268
+ warning: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-40 bg-zinc-200 dark:bg-zinc-700 dark:focus-visible:ring-amber-400 dark:focus-visible:ring-offset-zinc-950",
269
+ "warning-checked": "bg-amber-500 dark:bg-amber-400",
270
+ danger: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-40 bg-zinc-200 dark:bg-zinc-700 dark:focus-visible:ring-red-400 dark:focus-visible:ring-offset-zinc-950",
271
+ "danger-checked": "bg-red-600 dark:bg-red-500",
213
272
  theme: "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-rose-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-40 bg-zinc-200 dark:bg-zinc-700 dark:focus-visible:ring-offset-zinc-950"
214
273
  },
215
274
  LuSwitchThumb: {
216
- default: "pointer-events-none block h-5 w-5 rounded-full bg-white shadow-md ring-0 transition-transform duration-150 dark:bg-white",
217
- checked: "translate-x-5"
275
+ default: "pointer-events-none block h-5 w-5 rounded-full bg-white shadow-md ring-0 transition-transform duration-150 dark:bg-white translate-x-0",
276
+ checked: "translate-x-5",
277
+ indeterminate: "translate-x-2.5 shadow-none"
278
+ },
279
+ LuSwitchLabel: {
280
+ default: "text-sm font-medium leading-none text-zinc-900 peer-disabled:cursor-not-allowed peer-disabled:opacity-40 dark:text-zinc-50 cursor-pointer select-none"
218
281
  },
219
282
  LuTable: {
220
283
  default: "w-full caption-bottom text-sm"
@@ -294,7 +357,17 @@ const e = {
294
357
  label: "text-[10px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500",
295
358
  muted: "text-xs text-zinc-400 dark:text-zinc-600",
296
359
  code: "font-mono text-[0.8125rem] border border-zinc-200 bg-zinc-100/60 text-zinc-700 px-1 py-px rounded dark:border-zinc-700 dark:bg-zinc-800/50 dark:text-zinc-300",
297
- "brand-label": "text-sm font-semibold text-zinc-900 dark:text-zinc-50"
360
+ "brand-label": "text-sm font-semibold text-zinc-900 dark:text-zinc-50",
361
+ // Skin v2 — new variants
362
+ "metric-large": "text-5xl font-bold tracking-tight text-zinc-900 dark:text-zinc-100 tabular-nums",
363
+ "metric-delta": "text-sm font-semibold tabular-nums",
364
+ "metric-delta-up": "text-sm font-semibold text-emerald-600 dark:text-emerald-400 tabular-nums",
365
+ "metric-delta-down": "text-sm font-semibold text-rose-600 dark:text-rose-400 tabular-nums",
366
+ "timeline-date": "text-xs font-medium text-zinc-500 dark:text-zinc-400",
367
+ caption: "text-xs text-zinc-400 dark:text-zinc-500 leading-relaxed",
368
+ "grid-header": "text-[11px] font-semibold uppercase tracking-[0.06em] text-zinc-500 dark:text-zinc-400",
369
+ overline: "text-[10px] font-semibold uppercase tracking-[0.1em] text-zinc-400 dark:text-zinc-500",
370
+ display: "text-4xl sm:text-5xl font-bold tracking-[-0.03em] leading-none text-zinc-950 dark:text-white"
298
371
  },
299
372
  LuPageHeader: {
300
373
  default: "pt-2 pb-8 border-b border-zinc-100 dark:border-zinc-800"
@@ -314,14 +387,688 @@ const e = {
314
387
  LuCodeBlockTitle: { default: "text-xl font-semibold tracking-tight text-zinc-900 dark:text-zinc-50" },
315
388
  LuCodeBlockDescription: { default: "text-base text-zinc-600 dark:text-zinc-400" },
316
389
  LuCodeBlockCard: { default: "flex flex-col overflow-hidden rounded-xl border border-zinc-200/80 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900" },
317
- LuCodeBlockPreviewArea: { default: "flex flex-col p-8 items-center justify-center min-h-[200px] w-full overflow-auto bg-zinc-50 dark:bg-zinc-800/60" },
390
+ LuCodeBlockPreviewArea: { default: "flex flex-col p-8 items-center justify-center min-h-[200px] w-full overflow-visible bg-zinc-50 dark:bg-zinc-800/60" },
318
391
  LuCodeBlockCodeArea: { default: "flex flex-col relative w-full" },
319
392
  LuCodeBlockSplitArea: { default: "flex flex-col relative border-t md:border-t-0 md:border-l border-zinc-200 dark:border-zinc-800 w-full md:w-1/2 shrink-0" },
320
393
  LuCodeBlockSplitContainer: { default: "flex flex-col md:flex-row min-h-[300px]" },
321
394
  LuCodeBlockCodeHeader: { default: "flex items-center justify-between px-4 py-2 border-b border-zinc-800 bg-[#282c34]" },
322
395
  LuCodeBlockBadge: { default: "text-xs font-mono font-medium text-zinc-400 uppercase tracking-widest" },
323
396
  LuCodeBlockCopyButton: { default: "text-zinc-400 hover:text-zinc-100 hover:bg-white/10 transition-colors duration-150 p-1.5 rounded-md focus:outline-none" },
324
- LuCodeBlockCodeContent: { default: "p-4 overflow-x-auto text-sm bg-[#282c34] [&>pre]:!bg-transparent [&>pre]:!m-0 [&>pre]:!p-0" }
397
+ LuCodeBlockCodeContent: { default: "p-4 overflow-x-auto text-sm bg-[#282c34] [&>pre]:!bg-transparent [&>pre]:!m-0 [&>pre]:!p-0" },
398
+ // ─── v0.3.0: LuDataGrid ───────────────────────────────────────────────────
399
+ LuDataGrid: {
400
+ default: "w-full text-sm"
401
+ },
402
+ LuDataGridContainer: {
403
+ default: "lu-data-grid-container relative w-full overflow-hidden rounded-xl border border-zinc-200/80 bg-white shadow-sm dark:border-zinc-800 dark:bg-zinc-900"
404
+ },
405
+ LuDataGridToolbar: {
406
+ default: "flex items-center justify-between gap-3 px-4 py-3 border-b border-zinc-100 dark:border-zinc-800"
407
+ },
408
+ LuDataGridScrollArea: {
409
+ default: "lu-data-grid-scroll lu-scrollbar-thin"
410
+ },
411
+ LuDataGridTable: {
412
+ default: "lu-data-grid-table w-full caption-bottom text-sm"
413
+ },
414
+ LuDataGridHead: {
415
+ default: "border-b border-zinc-200 dark:border-zinc-800"
416
+ },
417
+ LuDataGridHeaderRow: {
418
+ default: ""
419
+ },
420
+ LuDataGridHeaderCell: {
421
+ default: "h-11 px-4 text-left align-middle whitespace-nowrap select-none",
422
+ sortable: "cursor-pointer hover:bg-zinc-50 dark:hover:bg-zinc-800/60 transition-colors"
423
+ },
424
+ LuDataGridBody: {
425
+ default: "[&_tr:last-child]:border-0"
426
+ },
427
+ LuDataGridRow: {
428
+ default: "border-b border-zinc-100 transition-colors hover:bg-zinc-50/80 data-[selected=true]:bg-rose-50/50 dark:border-zinc-800 dark:hover:bg-zinc-800/50 dark:data-[selected=true]:bg-rose-950/20"
429
+ },
430
+ LuDataGridCell: {
431
+ default: "px-4 py-3 align-middle",
432
+ editing: "p-1"
433
+ },
434
+ LuDataGridCheckboxCell: {
435
+ default: "px-3 align-middle w-10"
436
+ },
437
+ LuDataGridGroupRow: {
438
+ default: "border-b border-zinc-100 bg-zinc-50/80 dark:border-zinc-800 dark:bg-zinc-800/40"
439
+ },
440
+ LuDataGridGroupCell: {
441
+ default: "px-4 py-2 align-middle font-medium text-sm text-zinc-600 dark:text-zinc-400"
442
+ },
443
+ LuDataGridEmpty: {
444
+ default: "flex flex-col items-center justify-center gap-3 py-16 text-center"
445
+ },
446
+ LuDataGridFooter: {
447
+ default: "flex items-center justify-between px-4 py-3 border-t border-zinc-100 dark:border-zinc-800"
448
+ },
449
+ LuDataGridCards: {
450
+ default: "lu-data-grid-cards flex flex-col divide-y divide-zinc-100 dark:divide-zinc-800"
451
+ },
452
+ LuDataGridCard: {
453
+ default: "flex flex-col gap-2 px-4 py-3"
454
+ },
455
+ LuDataGridColumnMenu: {
456
+ default: "absolute z-50 min-w-[160px] rounded-xl border border-zinc-200/80 bg-white/95 backdrop-blur-sm p-1 shadow-lg lu-slide-down dark:border-zinc-700/80 dark:bg-zinc-900/95"
457
+ },
458
+ LuDataGridSortIcon: {
459
+ default: "ml-1.5 inline-flex text-zinc-400 dark:text-zinc-500",
460
+ asc: "text-zinc-700 dark:text-zinc-300",
461
+ desc: "text-zinc-700 dark:text-zinc-300"
462
+ },
463
+ LuDataGridErrorInput: {
464
+ default: "border-rose-500 bg-rose-50/30 dark:bg-rose-950/10 dark:border-rose-400"
465
+ },
466
+ LuDataGridEmptyIcon: {
467
+ default: "text-zinc-300 dark:text-zinc-600"
468
+ },
469
+ LuDataGridSearchInput: {
470
+ default: "flex h-8 w-56 rounded-lg border border-zinc-200 bg-zinc-50 px-3 py-1.5 text-sm text-zinc-900 placeholder:text-zinc-400 transition-[border-color,box-shadow] duration-150 focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-50 dark:placeholder:text-zinc-500 dark:focus:border-rose-400"
471
+ },
472
+ LuDataGridSelectionBar: {
473
+ default: "flex items-center gap-3 text-sm text-zinc-600 dark:text-zinc-300"
474
+ },
475
+ LuDataGridSelectionBarCount: {
476
+ default: "font-semibold text-zinc-900 dark:text-zinc-50"
477
+ },
478
+ LuDataGridSelectionBarAction: {
479
+ default: "text-rose-600 hover:text-rose-700 dark:text-rose-400 dark:hover:text-rose-300 cursor-pointer underline underline-offset-2 transition-colors"
480
+ },
481
+ LuDataGridFilterRow: {
482
+ default: "border-b border-zinc-100 bg-zinc-50/50 dark:border-zinc-800 dark:bg-zinc-800/30"
483
+ },
484
+ LuDataGridFilterCell: {
485
+ default: "px-2 py-1.5 align-middle"
486
+ },
487
+ LuDataGridFilterInput: {
488
+ default: "flex h-7 w-full rounded-md border border-zinc-200 bg-white px-2 py-1 text-xs text-zinc-900 placeholder:text-zinc-400 transition-[border-color,box-shadow] duration-150 focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-50 dark:placeholder:text-zinc-500 dark:focus:border-rose-400"
489
+ },
490
+ LuDataGridFilterSelect: {
491
+ default: "flex h-7 w-full rounded-md border border-zinc-200 bg-white px-2 py-1 text-xs text-zinc-900 focus:outline-none focus:border-rose-500 focus:ring-1 focus:ring-rose-500 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-50 dark:focus:border-rose-400"
492
+ },
493
+ // ─── v0.3.0: LuChart components ───────────────────────────────────────────
494
+ LuBarChart: {
495
+ default: "w-full"
496
+ },
497
+ LuLineChart: {
498
+ default: "w-full"
499
+ },
500
+ LuDoughnutChart: {
501
+ default: "w-full"
502
+ },
503
+ LuSparkline: {
504
+ default: "inline-block"
505
+ },
506
+ LuGaugeChart: {
507
+ default: "w-full"
508
+ },
509
+ LuChartContainer: {
510
+ default: "relative w-full rounded-xl border border-zinc-200/80 bg-white p-4 dark:border-zinc-800 dark:bg-zinc-900"
511
+ },
512
+ LuChartLegend: {
513
+ default: "flex flex-wrap items-center gap-3 mt-3 text-xs text-zinc-500 dark:text-zinc-400"
514
+ },
515
+ LuChartLegendItem: {
516
+ default: "flex items-center gap-1.5"
517
+ },
518
+ LuChartLegendDot: {
519
+ default: "w-2.5 h-2.5 rounded-full shrink-0"
520
+ },
521
+ // ─── v0.3.0: LuFileUpload ─────────────────────────────────────────────────
522
+ LuFileUpload: {
523
+ default: "flex flex-col gap-3"
524
+ },
525
+ LuFileUploadDropzone: {
526
+ default: "relative flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed border-zinc-300 bg-zinc-50/50 px-6 py-10 text-center transition-colors cursor-pointer hover:border-rose-400 hover:bg-rose-50/30 dark:border-zinc-700 dark:bg-zinc-900/50 dark:hover:border-rose-500 dark:hover:bg-rose-950/20",
527
+ active: "border-rose-400 bg-rose-50/50 dark:border-rose-500 dark:bg-rose-950/20"
528
+ },
529
+ LuFileUploadInput: {
530
+ default: "absolute inset-0 opacity-0 cursor-pointer"
531
+ },
532
+ LuFileUploadIcon: {
533
+ default: "text-zinc-400 dark:text-zinc-500"
534
+ },
535
+ LuFileUploadHint: {
536
+ default: "text-xs text-zinc-400 dark:text-zinc-500"
537
+ },
538
+ LuFileUploadList: {
539
+ default: "flex flex-col gap-2"
540
+ },
541
+ LuFileUploadItem: {
542
+ default: "flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-3 dark:border-zinc-800 dark:bg-zinc-900"
543
+ },
544
+ LuFileUploadItemIcon: {
545
+ default: "shrink-0 text-zinc-400 dark:text-zinc-500"
546
+ },
547
+ LuFileUploadItemName: {
548
+ default: "flex-1 min-w-0 truncate text-sm text-zinc-700 dark:text-zinc-300"
549
+ },
550
+ LuFileUploadItemSize: {
551
+ default: "text-xs text-zinc-400 dark:text-zinc-500 shrink-0"
552
+ },
553
+ LuFileUploadItemRemove: {
554
+ default: "shrink-0 text-zinc-400 hover:text-rose-500 transition-colors cursor-pointer dark:text-zinc-500 dark:hover:text-rose-400"
555
+ },
556
+ // ─── v0.3.0: LuMediaGallery ───────────────────────────────────────────────
557
+ LuMediaGallery: {
558
+ default: "grid gap-2"
559
+ },
560
+ LuMediaGalleryItem: {
561
+ default: "relative group overflow-hidden rounded-lg bg-zinc-100 dark:bg-zinc-800 aspect-square cursor-pointer"
562
+ },
563
+ LuMediaGalleryItemImage: {
564
+ default: "w-full h-full object-cover transition-transform duration-200 group-hover:scale-105"
565
+ },
566
+ LuMediaGalleryItemOverlay: {
567
+ default: "absolute inset-0 bg-black/0 group-hover:bg-black/30 transition-colors duration-200 flex items-center justify-center gap-2 opacity-0 group-hover:opacity-100"
568
+ },
569
+ LuMediaGalleryItemBadge: {
570
+ default: "absolute top-1.5 right-1.5"
571
+ },
572
+ // ─── v0.3.0: LuLightbox (internal) ────────────────────────────────────────
573
+ LuLightbox: {
574
+ default: "fixed inset-0 z-[100] flex items-center justify-center"
575
+ },
576
+ LuLightboxOverlay: {
577
+ default: "absolute inset-0 bg-black/80 backdrop-blur-sm"
578
+ },
579
+ LuLightboxContent: {
580
+ default: "relative z-10 max-w-[90vw] max-h-[90vh] flex items-center justify-center"
581
+ },
582
+ LuLightboxImage: {
583
+ default: "max-w-full max-h-[90vh] rounded-lg object-contain shadow-2xl"
584
+ },
585
+ LuLightboxNav: {
586
+ default: "absolute top-1/2 -translate-y-1/2 flex items-center justify-center w-10 h-10 rounded-full bg-white/10 hover:bg-white/20 text-white backdrop-blur-sm transition-colors cursor-pointer",
587
+ prev: "left-4",
588
+ next: "right-4"
589
+ },
590
+ LuLightboxClose: {
591
+ default: "absolute top-4 right-4 z-20 flex items-center justify-center w-9 h-9 rounded-full bg-white/10 hover:bg-white/20 text-white backdrop-blur-sm transition-colors cursor-pointer"
592
+ },
593
+ LuLightboxCaption: {
594
+ default: "absolute bottom-4 left-1/2 -translate-x-1/2 text-center text-sm text-white/80"
595
+ },
596
+ // ─── v0.3.0: LuTimeline ───────────────────────────────────────────────────
597
+ LuTimeline: {
598
+ default: "relative flex flex-col",
599
+ compact: "relative flex flex-col",
600
+ numbered: "relative flex flex-col"
601
+ },
602
+ LuTimelineItem: {
603
+ default: "relative flex gap-4 pb-10 last:pb-0",
604
+ compact: "relative flex gap-3 pb-5 last:pb-0",
605
+ numbered: "relative flex gap-4 pb-10 last:pb-0"
606
+ },
607
+ LuTimelineDotWrapper: {
608
+ default: "flex flex-col items-center w-10 shrink-0"
609
+ },
610
+ LuTimelineDot: {
611
+ default: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 border-zinc-200 bg-white text-zinc-400 shadow-sm dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-500",
612
+ success: "border-emerald-500 bg-emerald-50 text-emerald-600 dark:border-emerald-500 dark:bg-emerald-950/40 dark:text-emerald-400",
613
+ warning: "border-amber-400 bg-amber-50 text-amber-600 dark:border-amber-400 dark:bg-amber-950/40 dark:text-amber-400",
614
+ danger: "border-red-500 bg-red-50 text-red-600 dark:border-red-500 dark:bg-red-950/40 dark:text-red-400",
615
+ info: "border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-950/40 dark:text-blue-400"
616
+ },
617
+ LuTimelineDotCompact: {
618
+ default: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full border-2 border-zinc-200 bg-white text-zinc-400 dark:border-zinc-700 dark:bg-zinc-900",
619
+ success: "border-emerald-500 bg-emerald-50 text-emerald-600 dark:border-emerald-500 dark:bg-emerald-950/40 dark:text-emerald-400",
620
+ warning: "border-amber-400 bg-amber-50 text-amber-600 dark:border-amber-400 dark:bg-amber-950/40 dark:text-amber-400",
621
+ danger: "border-red-500 bg-red-50 text-red-600 dark:border-red-500 dark:bg-red-950/40 dark:text-red-400",
622
+ info: "border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-950/40 dark:text-blue-400"
623
+ },
624
+ LuTimelineConnector: {
625
+ default: "mt-1 flex-1 w-0.5 min-h-[1.5rem] bg-zinc-200 dark:bg-zinc-700"
626
+ },
627
+ LuTimelineContent: {
628
+ default: "flex flex-col gap-0.5 pt-1.5 min-w-0 flex-1"
629
+ },
630
+ LuTimelineDate: {
631
+ default: "text-xs font-medium text-zinc-400 dark:text-zinc-500 tabular-nums mb-0.5"
632
+ },
633
+ LuTimelineTitle: {
634
+ default: "text-sm font-semibold text-zinc-900 dark:text-zinc-100 leading-snug"
635
+ },
636
+ // ─── v0.3.0: LuFormWizard ─────────────────────────────────────────────────
637
+ LuFormWizard: {
638
+ default: "flex flex-col w-full"
639
+ },
640
+ LuFormWizardSteps: {
641
+ default: "relative flex items-center justify-between gap-2 px-2 pb-8"
642
+ },
643
+ LuFormWizardStepWrapper: {
644
+ default: "relative flex flex-1 flex-col items-center gap-2"
645
+ },
646
+ LuFormWizardStepConnector: {
647
+ default: "lu-form-wizard-step-connector bg-zinc-200 dark:bg-zinc-800 transition-colors duration-300",
648
+ completed: "lu-form-wizard-step-connector bg-rose-500 dark:bg-rose-500 transition-colors duration-300"
649
+ },
650
+ LuFormWizardStep: {
651
+ default: "flex items-center justify-center w-9 h-9 rounded-full border-2 border-zinc-300 bg-white text-sm font-medium text-zinc-500 transition-all duration-200 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-400",
652
+ active: "border-rose-500 bg-rose-50 text-rose-600 dark:border-rose-400 dark:bg-rose-950/30 dark:text-rose-400",
653
+ completed: "border-emerald-500 bg-emerald-50 text-emerald-600 dark:border-emerald-400 dark:bg-emerald-950/30 dark:text-emerald-400"
654
+ },
655
+ LuFormWizardStepLabel: {
656
+ default: "text-xs text-center text-zinc-500 dark:text-zinc-400 whitespace-nowrap",
657
+ active: "text-rose-600 font-medium dark:text-rose-400",
658
+ completed: "text-emerald-600 dark:text-emerald-400"
659
+ },
660
+ LuFormWizardBody: {
661
+ default: "flex-1 min-h-0"
662
+ },
663
+ LuFormWizardFooter: {
664
+ default: "flex items-center justify-between gap-3 pt-6 border-t border-zinc-100 mt-6 dark:border-zinc-800"
665
+ },
666
+ LuFormWizardError: {
667
+ default: "text-sm text-rose-600 dark:text-rose-400"
668
+ },
669
+ // ─── v0.3.0: LuFormField ──────────────────────────────────────────────────
670
+ LuFormField: {
671
+ default: "flex flex-col gap-1.5"
672
+ },
673
+ LuFormFieldLabel: {
674
+ default: "text-sm font-medium text-zinc-700 dark:text-zinc-300"
675
+ },
676
+ LuFormFieldHint: {
677
+ default: "text-xs text-zinc-400 dark:text-zinc-500"
678
+ },
679
+ LuFormFieldError: {
680
+ default: "text-xs text-rose-600 dark:text-rose-400"
681
+ },
682
+ // ─── v0.3.0: LuTree ───────────────────────────────────────────────────────
683
+ LuTree: {
684
+ default: "flex flex-col gap-0.5 select-none"
685
+ },
686
+ LuTreeNode: {
687
+ default: "flex flex-col"
688
+ },
689
+ LuTreeNodeContent: {
690
+ default: "relative flex items-center gap-1.5 rounded-md px-2 py-1.5 text-sm text-zinc-700 cursor-pointer hover:bg-zinc-100 transition-colors dark:text-zinc-300 dark:hover:bg-zinc-800",
691
+ selected: "bg-rose-50 text-rose-700 hover:bg-rose-50 dark:bg-rose-950/30 dark:text-rose-300 dark:hover:bg-rose-950/30",
692
+ disabled: "opacity-40 pointer-events-none"
693
+ },
694
+ LuTreeNodeToggle: {
695
+ default: "flex items-center justify-center w-5 h-5 shrink-0 text-zinc-400 dark:text-zinc-500"
696
+ },
697
+ LuTreeNodeCheckbox: {
698
+ default: "shrink-0"
699
+ },
700
+ LuTreeNodeLabel: {
701
+ default: "flex-1 min-w-0 truncate"
702
+ },
703
+ LuTreeChildren: {
704
+ default: "ml-5 pl-3 border-l border-zinc-200 mt-0.5 flex flex-col gap-0.5 dark:border-zinc-700"
705
+ },
706
+ // ─── v0.4.0: LuKanban ─────────────────────────────────────────────────────
707
+ LuKanban: {
708
+ default: "w-full"
709
+ },
710
+ LuKanbanBoard: {
711
+ default: "flex gap-4 overflow-x-auto pb-4 lu-scrollbar-thin"
712
+ },
713
+ LuKanbanColumn: {
714
+ default: "flex flex-col gap-3 min-w-[280px] max-w-[320px] shrink-0"
715
+ },
716
+ LuKanbanColumnHeader: {
717
+ default: "flex items-center justify-between gap-2 px-1"
718
+ },
719
+ LuKanbanColumnHeaderDot: {
720
+ default: "w-2 h-2 rounded-full shrink-0"
721
+ },
722
+ LuKanbanColumnHeaderTitle: {
723
+ default: "text-sm font-semibold text-zinc-700 dark:text-zinc-300 flex-1"
724
+ },
725
+ LuKanbanColumnHeaderCount: {
726
+ default: "text-xs text-zinc-400 dark:text-zinc-500 tabular-nums"
727
+ },
728
+ LuKanbanColumnBody: {
729
+ default: "flex flex-col gap-2 min-h-[120px] rounded-xl bg-zinc-50/80 p-2 dark:bg-zinc-800/40"
730
+ },
731
+ LuKanbanCard: {
732
+ default: "rounded-lg border border-zinc-200/80 bg-white p-3 shadow-xs cursor-grab active:cursor-grabbing transition-shadow hover:shadow-sm dark:border-zinc-700 dark:bg-zinc-900",
733
+ dragging: "shadow-lg opacity-80 rotate-1"
734
+ },
735
+ // ─── v0.4.0: LuCalendar / LuDateRangePicker ───────────────────────────────
736
+ LuCalendar: {
737
+ default: "flex flex-col gap-4",
738
+ mini: "w-full max-w-[260px] rounded-xl border border-zinc-200/80 bg-white p-3 shadow-sm dark:border-zinc-800 dark:bg-zinc-900 flex flex-col gap-2"
739
+ },
740
+ LuCalendarHeader: {
741
+ default: "flex items-center justify-between gap-2",
742
+ mini: "flex items-center justify-between px-1 py-1 gap-2"
743
+ },
744
+ LuCalendarNav: {
745
+ default: "flex items-center gap-1",
746
+ mini: "flex items-center gap-0.5"
747
+ },
748
+ LuCalendarTitle: {
749
+ default: "text-sm font-semibold text-zinc-900 dark:text-zinc-50",
750
+ mini: "text-xs font-semibold text-zinc-700 dark:text-zinc-200"
751
+ },
752
+ LuCalendarGrid: {
753
+ default: "w-full border-collapse",
754
+ mini: "w-full border-collapse pb-1"
755
+ },
756
+ LuCalendarGridHeader: {
757
+ default: "text-center"
758
+ },
759
+ LuCalendarGridHeaderCell: {
760
+ default: "pb-2 text-[11px] font-medium uppercase tracking-wide text-zinc-400 dark:text-zinc-500",
761
+ mini: "pb-1 text-[10px] font-medium uppercase text-zinc-400 text-center dark:text-zinc-500"
762
+ },
763
+ LuCalendarDay: {
764
+ default: "relative p-1 text-center",
765
+ mini: "relative p-0.5 text-center"
766
+ },
767
+ LuCalendarDayButton: {
768
+ default: "w-8 h-8 rounded-full text-sm flex items-center justify-center mx-auto hover:bg-zinc-100 transition-colors cursor-pointer dark:hover:bg-zinc-800",
769
+ today: "font-semibold text-rose-600 dark:text-rose-400",
770
+ selected: "bg-rose-600 text-white hover:bg-rose-700 dark:bg-rose-500 dark:hover:bg-rose-600",
771
+ inRange: "bg-rose-50 text-rose-700 rounded-none dark:bg-rose-950/30 dark:text-rose-300",
772
+ disabled: "opacity-30 pointer-events-none",
773
+ otherMonth: "text-zinc-300 dark:text-zinc-700"
774
+ },
775
+ LuCalendarDayButtonMini: {
776
+ default: "w-6 h-6 rounded-full text-xs flex items-center justify-center mx-auto hover:bg-zinc-100 transition-colors cursor-pointer dark:hover:bg-zinc-800",
777
+ today: "font-semibold text-rose-600 dark:text-rose-400",
778
+ selected: "bg-rose-600 text-white hover:bg-rose-700 dark:bg-rose-500 dark:hover:bg-rose-600",
779
+ inRange: "bg-rose-50 text-rose-700 rounded-none dark:bg-rose-950/30 dark:text-rose-300",
780
+ disabled: "opacity-30 pointer-events-none",
781
+ otherMonth: "text-zinc-300 dark:text-zinc-700"
782
+ },
783
+ LuCalendarEventDot: {
784
+ default: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-1 h-1 rounded-full bg-rose-500",
785
+ mini: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-0.5 h-0.5 rounded-full bg-rose-500"
786
+ },
787
+ LuCalendarEvent: {
788
+ default: "truncate rounded px-1 py-0.5 text-[10px] font-medium cursor-pointer"
789
+ },
790
+ // ─── v0.4.0: LuPlanner ────────────────────────────────────────────────────
791
+ LuPlannerContainer: {
792
+ default: "flex flex-col w-full rounded-xl border border-zinc-200/80 bg-white shadow-sm overflow-hidden dark:border-zinc-800 dark:bg-zinc-900"
793
+ },
794
+ LuPlannerHeader: {
795
+ default: "flex items-center justify-between px-4 py-3 border-b border-zinc-200 dark:border-zinc-800 bg-zinc-50/50 dark:bg-zinc-900/50"
796
+ },
797
+ LuPlannerNavButton: {
798
+ default: "hover:bg-zinc-100 dark:hover:bg-zinc-800"
799
+ },
800
+ LuPlannerWeekLabel: {
801
+ default: "text-sm font-semibold text-zinc-900 dark:text-zinc-50"
802
+ },
803
+ LuPlannerGrid: {
804
+ default: "flex flex-1 overflow-x-auto min-h-[500px]"
805
+ },
806
+ LuPlannerTimeGutter: {
807
+ default: "w-20 shrink-0 border-r border-zinc-200 dark:border-zinc-800 flex flex-col select-none bg-zinc-50/20 dark:bg-zinc-900/10"
808
+ },
809
+ LuPlannerTimeCell: {
810
+ default: "flex flex-col justify-center border-b border-zinc-100/50 dark:border-zinc-800/30"
811
+ },
812
+ LuPlannerTimeLabel: {
813
+ default: "text-[10px] font-medium text-zinc-400 dark:text-zinc-500 tabular-nums uppercase"
814
+ },
815
+ LuPlannerDayColumn: {
816
+ default: "flex-1 min-w-[120px] border-r border-zinc-200 dark:border-zinc-800 last:border-r-0 relative flex flex-col bg-white dark:bg-zinc-900"
817
+ },
818
+ LuPlannerDayHeader: {
819
+ default: "bg-zinc-50/10 dark:bg-zinc-900/10"
820
+ },
821
+ LuPlannerDayHeaderToday: {
822
+ default: "bg-rose-50/10 dark:bg-rose-950/5 border-b-2 border-b-rose-500 dark:border-b-rose-400"
823
+ },
824
+ LuPlannerHourCell: {
825
+ default: "border-b border-zinc-100 dark:border-zinc-800/80 hover:bg-zinc-50/50 dark:hover:bg-zinc-800/20 transition-colors duration-100"
826
+ },
827
+ LuPlannerEvent: {
828
+ default: "absolute left-1 right-1 rounded-lg px-2 py-1.5 text-xs font-semibold cursor-pointer overflow-hidden border-l-4 shadow-sm select-none hover:shadow transition-shadow duration-150"
829
+ },
830
+ LuDateRangePicker: {
831
+ default: "relative inline-block"
832
+ },
833
+ LuDateRangePickerInput: {
834
+ default: "flex h-9 items-center gap-2 rounded-lg border border-zinc-300 bg-zinc-50 px-3 text-sm text-zinc-900 cursor-pointer hover:border-zinc-400 transition-colors dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-50"
835
+ },
836
+ LuDateRangePickerDropdown: {
837
+ default: "absolute z-50 top-full mt-1 rounded-xl border border-zinc-200/80 bg-white shadow-xl p-3 lu-slide-down dark:border-zinc-700/80 dark:bg-zinc-900"
838
+ },
839
+ LuDateRangePresets: {
840
+ default: "flex flex-col gap-1 border-r border-zinc-100 pr-3 mr-3 dark:border-zinc-800"
841
+ },
842
+ LuDateRangePreset: {
843
+ default: "px-3 py-1.5 text-sm rounded-md text-zinc-600 hover:bg-zinc-100 cursor-pointer transition-colors dark:text-zinc-400 dark:hover:bg-zinc-800",
844
+ active: "bg-rose-50 text-rose-700 hover:bg-rose-50 dark:bg-rose-950/30 dark:text-rose-300 dark:hover:bg-rose-950/30"
845
+ },
846
+ // ─── v0.4.0: LuDashboardGrid ──────────────────────────────────────────────
847
+ LuDashboardGrid: {
848
+ default: "lu-dashboard-grid w-full"
849
+ },
850
+ LuDashboardGridWidget: {
851
+ default: "relative"
852
+ },
853
+ LuDashboardGridWidgetHeader: {
854
+ default: "flex items-center justify-between gap-2 mb-3"
855
+ },
856
+ LuDashboardGridWidgetDragHandle: {
857
+ default: "text-zinc-300 hover:text-zinc-500 cursor-grab active:cursor-grabbing transition-colors dark:text-zinc-600 dark:hover:text-zinc-400"
858
+ },
859
+ LuDashboardGridEditMode: {
860
+ default: "[&_.lu-dashboard-widget]:ring-2 [&_.lu-dashboard-widget]:ring-rose-300 [&_.lu-dashboard-widget]:ring-offset-1"
861
+ },
862
+ // ─── v0.4.0: LuCommandPalette ─────────────────────────────────────────────
863
+ LuCommandPalette: {
864
+ default: "relative"
865
+ },
866
+ LuCommandPaletteOverlay: {
867
+ default: "lu-command-palette-overlay fixed inset-0 z-[200] bg-black/40 backdrop-blur-sm flex items-start justify-center pt-[15vh] px-4"
868
+ },
869
+ LuCommandPaletteDialog: {
870
+ default: "w-full max-w-xl rounded-2xl border border-zinc-200/80 bg-white shadow-2xl overflow-hidden lu-slide-down dark:border-zinc-700/80 dark:bg-zinc-900"
871
+ },
872
+ LuCommandPaletteInputWrapper: {
873
+ default: "flex items-center gap-3 px-4 py-3 border-b border-zinc-100 dark:border-zinc-800"
874
+ },
875
+ LuCommandPaletteInput: {
876
+ default: "flex-1 bg-transparent text-sm text-zinc-900 placeholder:text-zinc-400 focus:outline-none dark:text-zinc-50 dark:placeholder:text-zinc-500"
877
+ },
878
+ LuCommandPaletteList: {
879
+ default: "max-h-[360px] overflow-y-auto py-2 lu-scrollbar-thin"
880
+ },
881
+ LuCommandPaletteGroup: {
882
+ default: "px-2 pb-2"
883
+ },
884
+ LuCommandPaletteGroupLabel: {
885
+ default: "px-2 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-zinc-400 dark:text-zinc-500"
886
+ },
887
+ LuCommandPaletteItem: {
888
+ default: "flex items-center gap-3 rounded-lg px-3 py-2 text-sm text-zinc-700 cursor-pointer transition-colors dark:text-zinc-300",
889
+ active: "bg-rose-50 text-rose-700 dark:bg-rose-950/30 dark:text-rose-300"
890
+ },
891
+ LuCommandPaletteItemIcon: {
892
+ default: "shrink-0 text-zinc-400 dark:text-zinc-500"
893
+ },
894
+ LuCommandPaletteEmpty: {
895
+ default: "flex items-center justify-center py-12 text-sm text-zinc-400 dark:text-zinc-500"
896
+ },
897
+ LuCommandPaletteFooter: {
898
+ default: "flex items-center gap-3 px-4 py-2.5 border-t border-zinc-100 dark:border-zinc-800"
899
+ },
900
+ LuCommandPaletteKbd: {
901
+ default: "inline-flex items-center gap-0.5 rounded border border-zinc-200 bg-zinc-100 px-1.5 py-0.5 text-[10px] font-mono text-zinc-500 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400"
902
+ },
903
+ // ─── v0.4.0: LuRichTextEditor ─────────────────────────────────────────────
904
+ LuRichTextEditor: {
905
+ default: "flex flex-col rounded-xl border border-zinc-300 bg-zinc-50 overflow-hidden transition-[border-color] focus-within:border-rose-500 dark:border-zinc-700 dark:bg-zinc-900 dark:focus-within:border-rose-400"
906
+ },
907
+ LuRichTextEditorToolbar: {
908
+ default: "flex items-center gap-0.5 flex-wrap px-2 py-1.5 border-b border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900"
909
+ },
910
+ LuRichTextEditorToolbarButton: {
911
+ default: "flex items-center justify-center w-8 h-8 rounded-md text-zinc-500 hover:bg-zinc-100 hover:text-zinc-800 transition-colors cursor-pointer dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-200",
912
+ active: "bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-50"
913
+ },
914
+ LuRichTextEditorToolbarDivider: {
915
+ default: "w-px h-5 bg-zinc-200 mx-1 dark:bg-zinc-700"
916
+ },
917
+ LuRichTextEditorContent: {
918
+ default: "px-4 py-3 min-h-[120px] text-sm text-zinc-900 leading-relaxed focus:outline-none [&_.ProseMirror]:focus:outline-none [&_.ProseMirror]:min-h-[120px] dark:text-zinc-50"
919
+ },
920
+ // ─── v0.5.0: Skin keys for headless contract compliance ──────────────────────
921
+ LuKanbanAddButton: {
922
+ default: "flex items-center justify-center w-6 h-6 rounded text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 dark:text-zinc-500 dark:hover:text-zinc-200 dark:hover:bg-zinc-700 transition-colors"
923
+ },
924
+ LuKanbanCardTitle: {
925
+ default: "font-medium text-zinc-800 dark:text-zinc-200 line-clamp-2"
926
+ },
927
+ LuKanbanEmptyColumn: {
928
+ default: "flex items-center justify-center h-20 text-xs text-zinc-400 dark:text-zinc-600 border-2 border-dashed border-zinc-200 dark:border-zinc-700 rounded-lg"
929
+ },
930
+ LuMediaGalleryRemoveButton: {
931
+ default: "flex items-center justify-center w-7 h-7 rounded-full bg-rose-600 text-white hover:bg-rose-700 transition-colors"
932
+ },
933
+ LuChartFallbackText: {
934
+ default: "text-xs text-zinc-400 dark:text-zinc-500"
935
+ },
936
+ LuCommandPaletteSearchIcon: {
937
+ default: "text-zinc-400 dark:text-zinc-500 shrink-0"
938
+ },
939
+ LuCommandPaletteClearIcon: {
940
+ default: "text-zinc-400 cursor-pointer hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300"
941
+ },
942
+ LuCommandPaletteItemLabel: {
943
+ default: "font-medium"
944
+ },
945
+ // ─── v0.6.0: LuDrawer ───────────────────────────────────────────────────────
946
+ LuDrawerBackdrop: {
947
+ default: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm"
948
+ },
949
+ LuDrawerPanel: {
950
+ default: "fixed z-50 flex flex-col bg-white shadow-2xl dark:bg-zinc-900 border-zinc-200 dark:border-zinc-800 transition-transform duration-300 ease-in-out"
951
+ },
952
+ "LuDrawerPanel.left": {
953
+ default: "left-0 top-0 bottom-0 w-80 border-r"
954
+ },
955
+ "LuDrawerPanel.right": {
956
+ default: "right-0 top-0 bottom-0 w-80 border-l"
957
+ },
958
+ "LuDrawerPanel.top": {
959
+ default: "top-0 left-0 right-0 h-80 border-b"
960
+ },
961
+ "LuDrawerPanel.bottom": {
962
+ default: "bottom-0 left-0 right-0 h-80 border-t"
963
+ },
964
+ LuDrawerHeader: {
965
+ default: "flex items-center justify-between px-6 py-4 border-b border-zinc-100 dark:border-zinc-800 shrink-0"
966
+ },
967
+ LuDrawerContent: {
968
+ default: "flex-1 overflow-y-auto p-6 lu-scrollbar-thin"
969
+ },
970
+ LuDrawerFooter: {
971
+ default: "px-6 py-4 border-t border-zinc-100 dark:border-zinc-800 shrink-0 bg-zinc-50 dark:bg-zinc-900/50"
972
+ },
973
+ // ─── v0.6.0: LuList ─────────────────────────────────────────────────────────
974
+ LuList: {
975
+ default: "flex flex-col w-full divide-y-0 divide-zinc-100 bg-white dark:bg-zinc-900 rounded-2xl border border-zinc-200/80 dark:border-zinc-800 shadow-sm overflow-hidden p-1.5"
976
+ },
977
+ LuListItem: {
978
+ default: "flex items-center gap-3 px-4 py-3 text-sm font-medium text-zinc-700 dark:text-zinc-300 rounded-xl hover:bg-zinc-50 dark:hover:bg-zinc-800/50 hover:text-zinc-900 dark:hover:text-zinc-50 transition-colors focus:outline-none focus:ring-2 focus:ring-rose-500/20"
979
+ },
980
+ "LuListItem.active": {
981
+ default: "bg-rose-50/50 text-rose-600 dark:bg-rose-950/10 dark:text-rose-400 hover:bg-rose-50 dark:hover:bg-rose-950/20"
982
+ },
983
+ "LuListItem.disabled": {
984
+ default: "opacity-40 pointer-events-none"
985
+ },
986
+ LuListItemLeading: {
987
+ default: "flex items-center justify-center shrink-0 min-w-[20px] text-zinc-400 dark:text-zinc-500"
988
+ },
989
+ LuListItemContent: {
990
+ default: "flex-1 min-w-0 flex flex-col gap-0.5"
991
+ },
992
+ LuListItemTrailing: {
993
+ default: "flex items-center justify-center shrink-0 text-zinc-400 dark:text-zinc-500 text-xs"
994
+ },
995
+ LuListDivider: {
996
+ default: "h-px bg-zinc-200 dark:bg-zinc-800/80 my-1 mx-2 list-none"
997
+ },
998
+ LuListSubheader: {
999
+ default: "px-4 py-2 text-[10px] font-bold uppercase tracking-wider text-zinc-400 dark:text-zinc-500 list-none mt-2 first:mt-0"
1000
+ },
1001
+ // ─── v0.6.0: LuPopover ──────────────────────────────────────────────────────
1002
+ LuPopover: {
1003
+ default: "relative inline-block"
1004
+ },
1005
+ LuPopoverContent: {
1006
+ default: "absolute z-40 w-72 rounded-2xl border border-zinc-200/80 bg-white p-4 shadow-xl focus:outline-none dark:border-zinc-800 dark:bg-zinc-900 lu-fade-in"
1007
+ },
1008
+ // ─── v0.6.0: LuBottomSheet ──────────────────────────────────────────────────
1009
+ LuBottomSheetBackdrop: {
1010
+ default: "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm"
1011
+ },
1012
+ LuBottomSheet: {
1013
+ default: "fixed bottom-0 left-0 right-0 z-50 max-h-[90vh] flex flex-col rounded-t-3xl border-t border-zinc-200 bg-white shadow-2xl dark:border-zinc-800 dark:bg-zinc-900 transition-transform duration-300 ease-in-out"
1014
+ },
1015
+ LuBottomSheetHandle: {
1016
+ default: "py-4 w-full cursor-grab active:cursor-grabbing shrink-0"
1017
+ },
1018
+ // ─── v0.6.0: LuToast ────────────────────────────────────────────────────────
1019
+ LuToastContainer: {
1020
+ default: "fixed bottom-4 right-4 z-50 flex flex-col gap-2 w-full max-w-sm pointer-events-none px-4 sm:px-0"
1021
+ },
1022
+ LuToast: {
1023
+ default: "flex items-start gap-3 p-4 rounded-xl border bg-white dark:bg-zinc-900 shadow-lg pointer-events-auto transition-all duration-300 w-full"
1024
+ },
1025
+ "LuToast.success": {
1026
+ default: "border-emerald-200 bg-emerald-50/50 text-emerald-900 dark:border-emerald-800/50 dark:bg-emerald-950/10 dark:text-emerald-300"
1027
+ },
1028
+ "LuToast.error": {
1029
+ default: "border-rose-200 bg-rose-50/50 text-rose-900 dark:border-rose-800/50 dark:bg-rose-950/10 dark:text-rose-300"
1030
+ },
1031
+ "LuToast.warning": {
1032
+ default: "border-amber-200 bg-amber-50/50 text-amber-900 dark:border-amber-800/50 dark:bg-amber-950/10 dark:text-amber-300"
1033
+ },
1034
+ "LuToast.info": {
1035
+ default: "border-blue-200 bg-blue-50/50 text-blue-900 dark:border-blue-800/50 dark:bg-blue-950/10 dark:text-blue-300"
1036
+ },
1037
+ LuToastTitle: {
1038
+ default: "text-sm font-semibold"
1039
+ },
1040
+ LuToastDescription: {
1041
+ default: "text-xs mt-1 opacity-90"
1042
+ },
1043
+ LuToastClose: {
1044
+ default: "shrink-0 rounded-lg p-1 opacity-60 hover:opacity-100 transition-opacity focus:outline-none"
1045
+ },
1046
+ // ─── v0.6.0: LuChip ─────────────────────────────────────────────────────────
1047
+ LuChip: {
1048
+ default: "inline-flex items-center gap-1.5 px-3 py-1 text-xs font-semibold rounded-full border border-zinc-200 bg-zinc-50 text-zinc-700 hover:bg-zinc-100 transition-colors cursor-pointer select-none dark:border-zinc-800 dark:bg-zinc-800/50 dark:text-zinc-300 dark:hover:bg-zinc-800"
1049
+ },
1050
+ "LuChip.selected": {
1051
+ default: "border-rose-200 bg-rose-50 text-rose-600 dark:border-rose-800/50 dark:bg-rose-950/20 dark:text-rose-400 hover:bg-rose-100 dark:hover:bg-rose-900/30"
1052
+ },
1053
+ "LuChip.disabled": {
1054
+ default: "opacity-40 pointer-events-none"
1055
+ },
1056
+ LuChipClose: {
1057
+ default: "shrink-0 rounded-full p-0.5 opacity-60 hover:opacity-100 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors focus:outline-none"
1058
+ },
1059
+ // ─── v0.6.0: LuAccordion ───────────────────────────────────────────────────
1060
+ LuAccordion: {
1061
+ default: "w-full border border-zinc-200 dark:border-zinc-800 rounded-2xl bg-white dark:bg-zinc-900 overflow-hidden divide-y divide-zinc-200 dark:divide-zinc-800"
1062
+ },
1063
+ LuAccordionItem: {
1064
+ default: "flex flex-col"
1065
+ },
1066
+ LuAccordionTrigger: {
1067
+ default: "flex items-center justify-between w-full px-6 py-4 text-sm font-semibold text-zinc-800 dark:text-zinc-200 hover:bg-zinc-50 dark:hover:bg-zinc-800/40 transition-colors text-left focus:outline-none focus:bg-zinc-50 dark:focus:bg-zinc-800/40"
1068
+ },
1069
+ LuAccordionContent: {
1070
+ default: "px-6 pb-4 pt-1 text-sm text-zinc-600 dark:text-zinc-400"
1071
+ }
325
1072
  }, r = {
326
1073
  LuStack: {
327
1074
  default: "flex",
@@ -408,7 +1155,7 @@ const e = {
408
1155
  LuDesktopShellMainContent: {
409
1156
  default: "flex flex-1 flex-col overflow-hidden relative"
410
1157
  }
411
- }, n = {
1158
+ }, o = {
412
1159
  LuMobileShell: {
413
1160
  default: "flex flex-col h-full w-full overflow-hidden bg-white text-zinc-900 dark:bg-zinc-950 dark:text-zinc-100"
414
1161
  },
@@ -421,7 +1168,7 @@ const e = {
421
1168
  LuMobileHeader: {
422
1169
  default: "flex items-center justify-between w-full h-14 border-b border-zinc-100 bg-white/95 backdrop-blur-sm px-4 shrink-0 pt-safe dark:bg-zinc-950/95 dark:border-zinc-900"
423
1170
  }
424
- }, i = {
1171
+ }, d = {
425
1172
  LuEmbeddedShell: {
426
1173
  default: "flex flex-col h-full w-full bg-white text-zinc-900 border border-zinc-200 rounded-lg overflow-hidden dark:bg-zinc-950 dark:text-zinc-100 dark:border-zinc-800"
427
1174
  },
@@ -433,14 +1180,71 @@ const e = {
433
1180
  },
434
1181
  LuEmbeddedToolbar: {
435
1182
  default: "flex items-center gap-2 p-2 border-b border-zinc-200 bg-zinc-50 shrink-0 dark:bg-zinc-900 dark:border-zinc-800"
1183
+ },
1184
+ // ─── v0.5.0: POS suite ────────────────────────────────────────────────────
1185
+ LuEmbeddedPOSLayout: {
1186
+ default: "lu-embedded-pos-layout",
1187
+ "2col": "lu-embedded-pos-layout grid-cols-[1fr_360px]",
1188
+ "3col": "lu-embedded-pos-layout grid-cols-[240px_1fr_360px]"
1189
+ },
1190
+ LuEmbeddedPOSTopBar: {
1191
+ default: "flex items-center justify-between gap-3 px-4 h-12 border-b border-zinc-200 bg-zinc-50 shrink-0 dark:bg-zinc-900 dark:border-zinc-800"
1192
+ },
1193
+ LuEmbeddedBarcodeInput: {
1194
+ default: "flex flex-col gap-1.5"
1195
+ },
1196
+ LuEmbeddedBarcodeInputField: {
1197
+ default: "flex h-11 items-center gap-3 rounded-xl border-2 border-zinc-300 bg-zinc-50 px-4 text-sm font-mono focus-within:border-rose-500 transition-colors dark:border-zinc-700 dark:bg-zinc-900 dark:focus-within:border-rose-400",
1198
+ scanning: "border-emerald-500 bg-emerald-50/30 dark:border-emerald-400 dark:bg-emerald-950/20"
1199
+ },
1200
+ LuEmbeddedBarcodeInputInner: {
1201
+ default: "flex-1 bg-transparent focus:outline-none text-zinc-900 placeholder:text-zinc-400 dark:text-zinc-50 dark:placeholder:text-zinc-500"
1202
+ },
1203
+ LuEmbeddedPOSItemList: {
1204
+ default: "lu-embedded-pos-item-list flex flex-col divide-y divide-zinc-100 dark:divide-zinc-800 lu-scrollbar-thin"
1205
+ },
1206
+ LuEmbeddedPOSItemListRow: {
1207
+ default: "flex items-center gap-3 px-4 py-3 hover:bg-zinc-50 dark:hover:bg-zinc-800/60 transition-colors"
1208
+ },
1209
+ LuEmbeddedPOSItemListQty: {
1210
+ default: "flex items-center gap-1.5 shrink-0"
1211
+ },
1212
+ LuEmbeddedPOSItemListQtyBtn: {
1213
+ default: "flex items-center justify-center w-7 h-7 rounded-md border border-zinc-200 text-zinc-600 hover:bg-zinc-100 hover:border-zinc-300 transition-colors dark:border-zinc-700 dark:text-zinc-400 dark:hover:bg-zinc-700"
1214
+ },
1215
+ LuEmbeddedPOSItemListQtyValue: {
1216
+ default: "w-8 text-center text-sm font-semibold text-zinc-900 dark:text-zinc-50 tabular-nums"
1217
+ },
1218
+ LuEmbeddedPOSItemListRemove: {
1219
+ default: "shrink-0 flex items-center justify-center w-7 h-7 rounded-md text-zinc-300 hover:text-rose-500 hover:bg-rose-50 transition-colors dark:text-zinc-600 dark:hover:text-rose-400 dark:hover:bg-rose-950/20"
1220
+ },
1221
+ LuEmbeddedPOSSummary: {
1222
+ default: "flex flex-col divide-y divide-zinc-100 dark:divide-zinc-800"
1223
+ },
1224
+ LuEmbeddedPOSSummaryRow: {
1225
+ default: "flex items-center justify-between px-4 py-2 text-sm"
1226
+ },
1227
+ LuEmbeddedPOSSummaryTotal: {
1228
+ default: "flex items-center justify-between px-4 py-3 font-bold text-base text-zinc-900 dark:text-zinc-50"
1229
+ },
1230
+ LuEmbeddedPOSPayment: {
1231
+ default: "flex flex-col gap-2 p-4"
1232
+ },
1233
+ LuEmbeddedPOSPaymentMethod: {
1234
+ default: "flex items-center gap-2.5 rounded-xl border-2 border-zinc-200 bg-zinc-50 px-4 py-3 cursor-pointer transition-colors hover:border-zinc-300 dark:border-zinc-700 dark:bg-zinc-900 dark:hover:border-zinc-600",
1235
+ selected: "border-rose-500 bg-rose-50/50 dark:border-rose-400 dark:bg-rose-950/20"
1236
+ },
1237
+ LuEmbeddedPOSPayButton: {
1238
+ default: "flex items-center justify-center gap-2 h-12 w-full rounded-xl font-semibold text-sm transition-colors bg-rose-600 text-white hover:bg-rose-700 active:bg-rose-800 dark:bg-rose-500 dark:hover:bg-rose-600",
1239
+ disabled: "opacity-50 cursor-not-allowed pointer-events-none"
436
1240
  }
437
- }, o = {
1241
+ }, n = {
438
1242
  ...e,
439
1243
  ...r,
440
1244
  ...t,
441
- ...n,
442
- ...i
1245
+ ...o,
1246
+ ...d
443
1247
  };
444
1248
  export {
445
- o as defaultSkin
1249
+ n as defaultSkin
446
1250
  };