@skewedaspect/sleekspace-ui 0.5.1 → 0.7.0

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 (121) hide show
  1. package/dist/components/Card/SkCard.vue.d.ts +13 -1
  2. package/dist/components/ColorPicker/SkColorPicker.vue.d.ts +29 -0
  3. package/dist/components/ColorPicker/index.d.ts +2 -0
  4. package/dist/components/ColorPicker/types.d.ts +4 -0
  5. package/dist/components/ContextMenu/SkContextMenu.vue.d.ts +25 -0
  6. package/dist/components/ContextMenu/SkContextMenuCheckboxItem.vue.d.ts +28 -0
  7. package/dist/components/ContextMenu/SkContextMenuItem.vue.d.ts +26 -0
  8. package/dist/components/ContextMenu/SkContextMenuLabel.vue.d.ts +17 -0
  9. package/dist/components/ContextMenu/SkContextMenuRadioGroup.vue.d.ts +26 -0
  10. package/dist/components/ContextMenu/SkContextMenuRadioItem.vue.d.ts +23 -0
  11. package/dist/components/ContextMenu/SkContextMenuSeparator.vue.d.ts +2 -0
  12. package/dist/components/ContextMenu/SkContextMenuSubmenu.vue.d.ts +24 -0
  13. package/dist/components/ContextMenu/index.d.ts +9 -0
  14. package/dist/components/ContextMenu/types.d.ts +2 -0
  15. package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
  16. package/dist/components/Dropdown/SkDropdownCheckboxItem.vue.d.ts +28 -0
  17. package/dist/components/Dropdown/SkDropdownMenuLabel.vue.d.ts +17 -0
  18. package/dist/components/Dropdown/SkDropdownRadioGroup.vue.d.ts +26 -0
  19. package/dist/components/Dropdown/SkDropdownRadioItem.vue.d.ts +23 -0
  20. package/dist/components/Dropdown/index.d.ts +4 -0
  21. package/dist/components/Panel/SkPanel.vue.d.ts +15 -1
  22. package/dist/components/Panel/types.d.ts +1 -0
  23. package/dist/components/Popover/SkPopover.vue.d.ts +1 -1
  24. package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +31 -0
  25. package/dist/components/ScrollArea/index.d.ts +2 -0
  26. package/dist/components/ScrollArea/types.d.ts +4 -0
  27. package/dist/components/Select/SkSelect.vue.d.ts +61 -0
  28. package/dist/components/Select/SkSelectItem.vue.d.ts +134 -0
  29. package/dist/components/Select/SkSelectSeparator.vue.d.ts +2 -0
  30. package/dist/components/Select/index.d.ts +4 -0
  31. package/dist/components/Select/types.d.ts +3 -0
  32. package/dist/components/Sidebar/SkSidebar.vue.d.ts +8 -1
  33. package/dist/components/Sidebar/types.d.ts +1 -0
  34. package/dist/components/Skeleton/SkSkeleton.vue.d.ts +2 -2
  35. package/dist/components/Splitter/SkSplitter.vue.d.ts +29 -0
  36. package/dist/components/Splitter/SkSplitterHandle.vue.d.ts +7 -0
  37. package/dist/components/Splitter/SkSplitterPanel.vue.d.ts +30 -0
  38. package/dist/components/Splitter/index.d.ts +4 -0
  39. package/dist/components/Splitter/types.d.ts +3 -0
  40. package/dist/components/Toolbar/SkToolbar.vue.d.ts +31 -0
  41. package/dist/components/Toolbar/SkToolbarButton.vue.d.ts +22 -0
  42. package/dist/components/Toolbar/SkToolbarSeparator.vue.d.ts +2 -0
  43. package/dist/components/Toolbar/SkToolbarToggleGroup.vue.d.ts +31 -0
  44. package/dist/components/Toolbar/SkToolbarToggleItem.vue.d.ts +23 -0
  45. package/dist/components/Toolbar/index.d.ts +6 -0
  46. package/dist/components/Toolbar/types.d.ts +5 -0
  47. package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
  48. package/dist/components/TreeView/SkTreeItem.vue.d.ts +39 -0
  49. package/dist/components/TreeView/SkTreeView.vue.d.ts +31 -0
  50. package/dist/components/TreeView/index.d.ts +3 -0
  51. package/dist/components/TreeView/types.d.ts +3 -0
  52. package/dist/index.d.ts +61 -0
  53. package/dist/sleekspace-ui.css +1644 -65
  54. package/dist/sleekspace-ui.es.js +17444 -6063
  55. package/dist/sleekspace-ui.umd.js +17426 -6045
  56. package/package.json +2 -1
  57. package/src/components/Card/SkCard.vue +17 -1
  58. package/src/components/ColorPicker/SkColorPicker.vue +355 -0
  59. package/src/components/ColorPicker/index.ts +6 -0
  60. package/src/components/ColorPicker/types.ts +11 -0
  61. package/src/components/ContextMenu/SkContextMenu.vue +83 -0
  62. package/src/components/ContextMenu/SkContextMenuCheckboxItem.vue +72 -0
  63. package/src/components/ContextMenu/SkContextMenuItem.vue +49 -0
  64. package/src/components/ContextMenu/SkContextMenuLabel.vue +17 -0
  65. package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +36 -0
  66. package/src/components/ContextMenu/SkContextMenuRadioItem.vue +53 -0
  67. package/src/components/ContextMenu/SkContextMenuSeparator.vue +21 -0
  68. package/src/components/ContextMenu/SkContextMenuSubmenu.vue +94 -0
  69. package/src/components/ContextMenu/index.ts +15 -0
  70. package/src/components/ContextMenu/types.ts +9 -0
  71. package/src/components/Dropdown/SkDropdown.vue +1 -1
  72. package/src/components/Dropdown/SkDropdownCheckboxItem.vue +72 -0
  73. package/src/components/Dropdown/SkDropdownMenuItem.vue +1 -1
  74. package/src/components/Dropdown/SkDropdownMenuLabel.vue +17 -0
  75. package/src/components/Dropdown/SkDropdownRadioGroup.vue +36 -0
  76. package/src/components/Dropdown/SkDropdownRadioItem.vue +53 -0
  77. package/src/components/Dropdown/SkDropdownSubmenu.vue +2 -2
  78. package/src/components/Dropdown/index.ts +4 -0
  79. package/src/components/Panel/SkPanel.vue +29 -4
  80. package/src/components/Panel/types.ts +3 -0
  81. package/src/components/ScrollArea/SkScrollArea.vue +87 -0
  82. package/src/components/ScrollArea/index.ts +8 -0
  83. package/src/components/ScrollArea/types.ts +11 -0
  84. package/src/components/Select/SkSelect.vue +210 -0
  85. package/src/components/Select/SkSelectItem.vue +112 -0
  86. package/src/components/Select/SkSelectSeparator.vue +40 -0
  87. package/src/components/Select/index.ts +10 -0
  88. package/src/components/Select/types.ts +10 -0
  89. package/src/components/Sidebar/SkSidebar.vue +39 -2
  90. package/src/components/Sidebar/types.ts +2 -0
  91. package/src/components/Splitter/SkSplitter.vue +65 -0
  92. package/src/components/Splitter/SkSplitterHandle.vue +40 -0
  93. package/src/components/Splitter/SkSplitterPanel.vue +45 -0
  94. package/src/components/Splitter/index.ts +10 -0
  95. package/src/components/Splitter/types.ts +10 -0
  96. package/src/components/Toolbar/SkToolbar.vue +69 -0
  97. package/src/components/Toolbar/SkToolbarButton.vue +36 -0
  98. package/src/components/Toolbar/SkToolbarSeparator.vue +15 -0
  99. package/src/components/Toolbar/SkToolbarToggleGroup.vue +49 -0
  100. package/src/components/Toolbar/SkToolbarToggleItem.vue +37 -0
  101. package/src/components/Toolbar/index.ts +12 -0
  102. package/src/components/Toolbar/types.ts +12 -0
  103. package/src/components/TreeView/SkTreeItem.vue +84 -0
  104. package/src/components/TreeView/SkTreeView.vue +120 -0
  105. package/src/components/TreeView/index.ts +9 -0
  106. package/src/components/TreeView/types.ts +10 -0
  107. package/src/global.d.ts +22 -0
  108. package/src/index.ts +110 -0
  109. package/src/styles/components/_card.scss +45 -9
  110. package/src/styles/components/_color-picker.scss +552 -0
  111. package/src/styles/components/_index.scss +6 -0
  112. package/src/styles/components/_listbox.scss +1 -0
  113. package/src/styles/components/_menu.scss +52 -3
  114. package/src/styles/components/_panel.scss +119 -13
  115. package/src/styles/components/_scroll-area.scss +120 -0
  116. package/src/styles/components/_select.scss +439 -0
  117. package/src/styles/components/_sidebar.scss +83 -4
  118. package/src/styles/components/_splitter.scss +136 -0
  119. package/src/styles/components/_toolbar.scss +296 -0
  120. package/src/styles/components/_tree-view.scss +187 -0
  121. package/web-types.json +1244 -197
@@ -0,0 +1,439 @@
1
+ @use '@/styles/mixins/cut-border' as *;
2
+
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+ // Select Component Styles
5
+ //----------------------------------------------------------------------------------------------------------------------
6
+
7
+ .sk-select
8
+ {
9
+ // Color tokens (can be overridden by custom colors)
10
+ --sk-select-color-base: var(--sk-neutral-base);
11
+ --sk-select-fg: var(--sk-neutral-text);
12
+
13
+ position: relative;
14
+ display: inline-flex;
15
+ width: 100%;
16
+
17
+ // Size variants
18
+ &.sk-sm
19
+ {
20
+ --sk-select-cut: 0.4rem;
21
+ }
22
+
23
+ &.sk-md
24
+ {
25
+ --sk-select-cut: 0.5rem;
26
+ }
27
+
28
+ &.sk-lg
29
+ {
30
+ --sk-select-cut: 0.6rem;
31
+ }
32
+
33
+ &.sk-xl
34
+ {
35
+ --sk-select-cut: 0.7rem;
36
+ }
37
+
38
+ // Kind variants
39
+ &.sk-neutral
40
+ {
41
+ --sk-select-color-base: var(--sk-neutral-base);
42
+ --sk-select-fg: var(--sk-neutral-text);
43
+ }
44
+
45
+ &.sk-primary
46
+ {
47
+ --sk-select-color-base: var(--sk-primary-base);
48
+ --sk-select-fg: var(--sk-primary-text);
49
+ }
50
+
51
+ &.sk-accent
52
+ {
53
+ --sk-select-color-base: var(--sk-accent-base);
54
+ --sk-select-fg: var(--sk-accent-text);
55
+ }
56
+
57
+ &.sk-info
58
+ {
59
+ --sk-select-color-base: var(--sk-info-base);
60
+ --sk-select-fg: var(--sk-info-text);
61
+ }
62
+
63
+ &.sk-success
64
+ {
65
+ --sk-select-color-base: var(--sk-success-base);
66
+ --sk-select-fg: var(--sk-success-text);
67
+ }
68
+
69
+ &.sk-warning
70
+ {
71
+ --sk-select-color-base: var(--sk-warning-base);
72
+ --sk-select-fg: var(--sk-warning-text);
73
+ }
74
+
75
+ &.sk-danger
76
+ {
77
+ --sk-select-color-base: var(--sk-danger-base);
78
+ --sk-select-fg: var(--sk-danger-text);
79
+ }
80
+
81
+ // Color kinds (direct palette access)
82
+ &.sk-neon-blue
83
+ {
84
+ --sk-select-color-base: var(--sk-neon-blue-base);
85
+ --sk-select-fg: var(--sk-neon-blue-text);
86
+ }
87
+
88
+ &.sk-neon-purple
89
+ {
90
+ --sk-select-color-base: var(--sk-neon-purple-base);
91
+ --sk-select-fg: var(--sk-neon-purple-text);
92
+ }
93
+
94
+ &.sk-neon-orange
95
+ {
96
+ --sk-select-color-base: var(--sk-neon-orange-base);
97
+ --sk-select-fg: var(--sk-neon-orange-text);
98
+ }
99
+
100
+ &.sk-neon-green
101
+ {
102
+ --sk-select-color-base: var(--sk-neon-green-base);
103
+ --sk-select-fg: var(--sk-neon-green-text);
104
+ }
105
+
106
+ &.sk-neon-mint
107
+ {
108
+ --sk-select-color-base: var(--sk-neon-mint-base);
109
+ --sk-select-fg: var(--sk-neon-mint-text);
110
+ }
111
+
112
+ &.sk-neon-pink
113
+ {
114
+ --sk-select-color-base: var(--sk-neon-pink-base);
115
+ --sk-select-fg: var(--sk-neon-pink-text);
116
+ }
117
+
118
+ &.sk-yellow
119
+ {
120
+ --sk-select-color-base: var(--sk-yellow-base);
121
+ --sk-select-fg: var(--sk-yellow-text);
122
+ }
123
+
124
+ &.sk-red
125
+ {
126
+ --sk-select-color-base: var(--sk-red-base);
127
+ --sk-select-fg: var(--sk-red-text);
128
+ }
129
+ }
130
+
131
+ //----------------------------------------------------------------------------------------------------------------------
132
+
133
+ .sk-select-trigger
134
+ {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: var(--sk-space-sm);
138
+ width: 100%;
139
+
140
+ // Button reset (SelectTrigger renders as <button>)
141
+ font-family: var(--sk-font-family-base);
142
+ font-size: inherit;
143
+ text-align: left;
144
+
145
+ @include cut-border(
146
+ $cut: var(--sk-select-cut),
147
+ $border-width: var(--sk-border-width-thin),
148
+ $border-color: var(--sk-select-color-base),
149
+ $corners: (top-right)
150
+ );
151
+
152
+ // Base styling
153
+ background: color-mix(
154
+ in oklch,
155
+ color-mix(in oklch, var(--sk-select-color-base) 75%, transparent 25%),
156
+ #000 65%
157
+ );
158
+ color: var(--sk-select-fg);
159
+ cursor: pointer;
160
+ outline: none;
161
+
162
+ // Transitions
163
+ transition-property: background, border-color;
164
+ transition-duration: var(--sk-transition-duration-base);
165
+
166
+ // Size variants
167
+ .sk-select.sk-sm &
168
+ {
169
+ height: 2rem;
170
+ padding: 0 var(--sk-space-sm);
171
+ font-size: 0.875rem;
172
+ }
173
+
174
+ .sk-select.sk-md &
175
+ {
176
+ height: 2.5rem;
177
+ padding: 0 var(--sk-space-md);
178
+ font-size: 1rem;
179
+ }
180
+
181
+ .sk-select.sk-lg &
182
+ {
183
+ height: 3rem;
184
+ padding: 0 var(--sk-space-md);
185
+ font-size: 1.125rem;
186
+ }
187
+
188
+ .sk-select.sk-xl &
189
+ {
190
+ height: 3.5rem;
191
+ padding: 0 var(--sk-space-md);
192
+ font-size: 1.25rem;
193
+ }
194
+
195
+ // Focus state
196
+ &:focus-visible
197
+ {
198
+ border-color: color-mix(in oklch, var(--sk-select-color-base), white 35%);
199
+ background: color-mix(
200
+ in oklch,
201
+ color-mix(in oklch, var(--sk-select-color-base) 75%, transparent 25%),
202
+ #000 25%
203
+ );
204
+ }
205
+
206
+ // Hover state
207
+ &:hover:not(:disabled)
208
+ {
209
+ border-color: color-mix(in oklch, var(--sk-select-color-base), white 20%);
210
+ }
211
+
212
+ // Disabled state
213
+ &:disabled
214
+ {
215
+ opacity: 0.5;
216
+ cursor: not-allowed;
217
+ }
218
+
219
+ // SelectValue text -- fill remaining space
220
+ > span
221
+ {
222
+ flex: 1;
223
+ color: white;
224
+ overflow: hidden;
225
+ text-overflow: ellipsis;
226
+ white-space: nowrap;
227
+
228
+ // Placeholder (Reka UI adds data-placeholder when no value is selected)
229
+ &[data-placeholder]
230
+ {
231
+ color: color-mix(in oklch, var(--sk-select-fg), transparent 50%);
232
+ }
233
+ }
234
+
235
+ // Chevron icon -- fixed right
236
+ > svg
237
+ {
238
+ flex-shrink: 0;
239
+ opacity: 0.8;
240
+ }
241
+ }
242
+
243
+ //----------------------------------------------------------------------------------------------------------------------
244
+
245
+ .sk-select-content
246
+ {
247
+ // Color tokens - define defaults (can be overridden by kind variants)
248
+ --sk-menu-color-base: var(--sk-neutral-base);
249
+ --sk-menu-fg: var(--sk-neutral-text);
250
+
251
+ position: relative;
252
+ min-width: var(--reka-select-trigger-width);
253
+ max-height: 20rem;
254
+ overflow: auto;
255
+ padding: var(--sk-space-xs);
256
+ z-index: 1000;
257
+
258
+ @include cut-border(
259
+ $cut: 0.625rem,
260
+ $border-width: var(--sk-border-width-thin),
261
+ $border-color: var(--sk-menu-color-base),
262
+ $corners: (top-left)
263
+ );
264
+
265
+ // Base styling
266
+ background: color-mix(
267
+ in oklch,
268
+ color-mix(in oklch, var(--sk-menu-color-base) 95%, transparent 5%),
269
+ #000 46.25%
270
+ );
271
+ color: var(--sk-menu-fg);
272
+ box-shadow: var(--sk-shadow-lg);
273
+
274
+ // Kind variants (defined directly on content for portal support)
275
+ &.sk-neutral
276
+ {
277
+ --sk-menu-color-base: var(--sk-neutral-base);
278
+ --sk-menu-fg: var(--sk-neutral-text);
279
+ }
280
+
281
+ &.sk-primary
282
+ {
283
+ --sk-menu-color-base: var(--sk-primary-base);
284
+ --sk-menu-fg: var(--sk-primary-text);
285
+ }
286
+
287
+ &.sk-accent
288
+ {
289
+ --sk-menu-color-base: var(--sk-accent-base);
290
+ --sk-menu-fg: var(--sk-accent-text);
291
+ }
292
+
293
+ &.sk-info
294
+ {
295
+ --sk-menu-color-base: var(--sk-info-base);
296
+ --sk-menu-fg: var(--sk-info-text);
297
+ }
298
+
299
+ &.sk-success
300
+ {
301
+ --sk-menu-color-base: var(--sk-success-base);
302
+ --sk-menu-fg: var(--sk-success-text);
303
+ }
304
+
305
+ &.sk-warning
306
+ {
307
+ --sk-menu-color-base: var(--sk-warning-base);
308
+ --sk-menu-fg: var(--sk-warning-text);
309
+ }
310
+
311
+ &.sk-danger
312
+ {
313
+ --sk-menu-color-base: var(--sk-danger-base);
314
+ --sk-menu-fg: var(--sk-danger-text);
315
+ }
316
+
317
+ // Color kinds (direct palette access)
318
+ &.sk-neon-blue
319
+ {
320
+ --sk-menu-color-base: var(--sk-neon-blue-base);
321
+ --sk-menu-fg: var(--sk-neon-blue-text);
322
+ }
323
+
324
+ &.sk-neon-purple
325
+ {
326
+ --sk-menu-color-base: var(--sk-neon-purple-base);
327
+ --sk-menu-fg: var(--sk-neon-purple-text);
328
+ }
329
+
330
+ &.sk-neon-orange
331
+ {
332
+ --sk-menu-color-base: var(--sk-neon-orange-base);
333
+ --sk-menu-fg: var(--sk-neon-orange-text);
334
+ }
335
+
336
+ &.sk-neon-green
337
+ {
338
+ --sk-menu-color-base: var(--sk-neon-green-base);
339
+ --sk-menu-fg: var(--sk-neon-green-text);
340
+ }
341
+
342
+ &.sk-neon-mint
343
+ {
344
+ --sk-menu-color-base: var(--sk-neon-mint-base);
345
+ --sk-menu-fg: var(--sk-neon-mint-text);
346
+ }
347
+
348
+ &.sk-neon-pink
349
+ {
350
+ --sk-menu-color-base: var(--sk-neon-pink-base);
351
+ --sk-menu-fg: var(--sk-neon-pink-text);
352
+ }
353
+
354
+ &.sk-yellow
355
+ {
356
+ --sk-menu-color-base: var(--sk-yellow-base);
357
+ --sk-menu-fg: var(--sk-yellow-text);
358
+ }
359
+
360
+ &.sk-red
361
+ {
362
+ --sk-menu-color-base: var(--sk-red-base);
363
+ --sk-menu-fg: var(--sk-red-text);
364
+ }
365
+ }
366
+
367
+ //----------------------------------------------------------------------------------------------------------------------
368
+
369
+ .sk-select-item
370
+ {
371
+ display: flex;
372
+ align-items: center;
373
+ justify-content: space-between;
374
+ gap: var(--sk-space-md);
375
+ padding: var(--sk-space-xs) var(--sk-space-md);
376
+ cursor: pointer;
377
+ color: color-mix(in oklch, var(--sk-menu-fg), black 15%);
378
+ font-size: 0.875rem;
379
+ outline: none;
380
+ user-select: none;
381
+
382
+ @include cut-border(
383
+ $cut: 0.5rem,
384
+ $border-width: var(--sk-border-width-thin),
385
+ $border-color: transparent,
386
+ $corners: (top-left bottom-right)
387
+ );
388
+
389
+ // Hover state
390
+ &:hover:not([data-disabled])
391
+ {
392
+ background: color-mix(
393
+ in oklch,
394
+ color-mix(in oklch, var(--sk-menu-color-base), black 30%),
395
+ transparent 10%
396
+ );
397
+ color: var(--sk-menu-fg);
398
+ }
399
+
400
+ // Highlighted state (keyboard navigation)
401
+ &[data-highlighted]
402
+ {
403
+ background: color-mix(
404
+ in oklch,
405
+ color-mix(in oklch, var(--sk-menu-color-base), black 30%),
406
+ transparent 10%
407
+ );
408
+ color: var(--sk-menu-fg);
409
+ outline: none;
410
+ }
411
+
412
+ // Disabled state
413
+ &[data-disabled]
414
+ {
415
+ opacity: 0.5;
416
+ cursor: not-allowed;
417
+ }
418
+ }
419
+
420
+ //----------------------------------------------------------------------------------------------------------------------
421
+
422
+ .sk-select-item-indicator
423
+ {
424
+ display: flex;
425
+ align-items: center;
426
+ justify-content: center;
427
+ flex-shrink: 0;
428
+ }
429
+
430
+ //----------------------------------------------------------------------------------------------------------------------
431
+
432
+ .sk-select-separator
433
+ {
434
+ height: 1px;
435
+ margin: var(--sk-space-xs) 0;
436
+ background: color-mix(in oklch, var(--sk-menu-color-base), transparent 70%);
437
+ }
438
+
439
+ //----------------------------------------------------------------------------------------------------------------------
@@ -15,6 +15,26 @@
15
15
  width: var(--sk-sidebar-width, 180px);
16
16
  flex-shrink: 0;
17
17
 
18
+ // Item theming -- uses same darkened color derivation as button system.
19
+ // --sk-sidebar-color-base is overridden per kind below; bg/hover/active derive automatically.
20
+ --sk-sidebar-color-base: var(--sk-neutral-base);
21
+ --sk-sidebar-item-bg: color-mix(
22
+ in oklch,
23
+ color-mix(in oklch, var(--sk-sidebar-color-base) 75%, transparent 25%),
24
+ #000 46.25%
25
+ );
26
+ --sk-sidebar-item-hover-bg: color-mix(in oklch, var(--sk-sidebar-item-bg) 85%, white 15%);
27
+ --sk-sidebar-item-hover-text: color-mix(in oklch, var(--sk-sidebar-color-base), white 30%);
28
+ --sk-sidebar-item-active-text: color-mix(in oklch, var(--sk-sidebar-color-base), white 50%);
29
+ --sk-sidebar-item-active-bg: var(--sk-sidebar-item-bg);
30
+
31
+ &.sk-primary { --sk-sidebar-color-base: var(--sk-primary-base); }
32
+ &.sk-accent { --sk-sidebar-color-base: var(--sk-accent-base); }
33
+ &.sk-info { --sk-sidebar-color-base: var(--sk-info-base); }
34
+ &.sk-success { --sk-sidebar-color-base: var(--sk-success-base); }
35
+ &.sk-warning { --sk-sidebar-color-base: var(--sk-warning-base); }
36
+ &.sk-danger { --sk-sidebar-color-base: var(--sk-danger-base); }
37
+
18
38
  .sk-sidebar-nav
19
39
  {
20
40
  display: flex;
@@ -50,6 +70,7 @@
50
70
 
51
71
  .sk-sidebar-item
52
72
  {
73
+ position: relative;
53
74
  color: var(--sk-neutral-text);
54
75
  text-decoration: none;
55
76
  padding: 0.5rem 0.75rem;
@@ -60,8 +81,8 @@
60
81
 
61
82
  &:hover
62
83
  {
63
- background: color-mix(in oklch, var(--sk-neutral-base), black 40%);
64
- color: var(--sk-accent-base);
84
+ background: var(--sk-sidebar-item-hover-bg);
85
+ color: var(--sk-sidebar-item-hover-text);
65
86
  clip-path: polygon(
66
87
  10px 0%,
67
88
  100% 0%,
@@ -75,8 +96,8 @@
75
96
  &.sk-active,
76
97
  &.router-link-active
77
98
  {
78
- background: color-mix(in oklch, var(--sk-neutral-base), black 40%);
79
- color: var(--sk-primary-base);
99
+ background: var(--sk-sidebar-item-active-bg);
100
+ color: var(--sk-sidebar-item-active-text);
80
101
  font-weight: 600;
81
102
  clip-path: polygon(
82
103
  10px 0%,
@@ -86,6 +107,64 @@
86
107
  0% 100%,
87
108
  0% 10px
88
109
  );
110
+
111
+ // Active indicator: 2px L-shape tracing the left edge + top-left bevel
112
+ &::before
113
+ {
114
+ content: '';
115
+ position: absolute;
116
+ inset: 0;
117
+ background: var(--sk-sidebar-color-base);
118
+ clip-path: polygon(
119
+ 0% 100%,
120
+ 0px 10px,
121
+ 10px 0px,
122
+ 11.41px 1.41px,
123
+ 2px 10.83px,
124
+ 2px 100%
125
+ );
126
+ }
127
+ }
128
+
129
+ // Mirrored for right-side placement
130
+ .sk-sidebar-right &
131
+ {
132
+ &:hover
133
+ {
134
+ clip-path: polygon(
135
+ 0% 0%,
136
+ calc(100% - 10px) 0%,
137
+ 100% 10px,
138
+ 100% 100%,
139
+ 10px 100%,
140
+ 0% calc(100% - 10px)
141
+ );
142
+ }
143
+
144
+ &.sk-active,
145
+ &.router-link-active
146
+ {
147
+ clip-path: polygon(
148
+ 0% 0%,
149
+ calc(100% - 10px) 0%,
150
+ 100% 10px,
151
+ 100% 100%,
152
+ 10px 100%,
153
+ 0% calc(100% - 10px)
154
+ );
155
+
156
+ &::before
157
+ {
158
+ clip-path: polygon(
159
+ 100% 100%,
160
+ 100% 10px,
161
+ calc(100% - 10px) 0px,
162
+ calc(100% - 11.41px) 1.41px,
163
+ calc(100% - 2px) 10.83px,
164
+ calc(100% - 2px) 100%
165
+ );
166
+ }
167
+ }
89
168
  }
90
169
  }
91
170
 
@@ -0,0 +1,136 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Splitter Component Styles
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ $kinds: (neutral, primary, accent, info, success, warning, danger);
6
+
7
+ //----------------------------------------------------------------------------------------------------------------------
8
+ // Kind Mixin
9
+ //----------------------------------------------------------------------------------------------------------------------
10
+
11
+ @mixin splitter-kind($kind)
12
+ {
13
+ &.sk-#{ '' + $kind }
14
+ {
15
+ --sk-splitter-color-base: var(--sk-#{ $kind }-base);
16
+ }
17
+ }
18
+
19
+ //----------------------------------------------------------------------------------------------------------------------
20
+ // Splitter Group
21
+ //----------------------------------------------------------------------------------------------------------------------
22
+
23
+ .sk-splitter
24
+ {
25
+ --sk-splitter-color-base: var(--sk-neutral-base);
26
+ --sk-splitter-handle-color: var(--sk-splitter-color-base);
27
+ --sk-splitter-handle-size: 4px;
28
+ --sk-splitter-handle-gap: 0.5rem;
29
+
30
+ display: flex;
31
+ width: 100%;
32
+ height: 100%;
33
+
34
+ &.sk-horizontal
35
+ {
36
+ flex-direction: row;
37
+ }
38
+
39
+ &.sk-vertical
40
+ {
41
+ flex-direction: column;
42
+ }
43
+
44
+ @each $kind in $kinds
45
+ {
46
+ @include splitter-kind($kind);
47
+ }
48
+ }
49
+
50
+ //----------------------------------------------------------------------------------------------------------------------
51
+ // Splitter Panel
52
+ //----------------------------------------------------------------------------------------------------------------------
53
+
54
+ .sk-splitter-panel
55
+ {
56
+ overflow: auto;
57
+ }
58
+
59
+ //----------------------------------------------------------------------------------------------------------------------
60
+ // Splitter Handle
61
+ //----------------------------------------------------------------------------------------------------------------------
62
+
63
+ .sk-splitter-handle
64
+ {
65
+ position: relative;
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ background: oklch(from var(--sk-splitter-handle-color) l c h / 0.1);
70
+ transition: background var(--sk-transition-duration-fast) var(--sk-transition-timing-default);
71
+
72
+ // Horizontal layout: vertical handle bar
73
+ .sk-horizontal > &
74
+ {
75
+ width: var(--sk-splitter-handle-size);
76
+ cursor: col-resize;
77
+ }
78
+
79
+ // Vertical layout: horizontal handle bar
80
+ .sk-vertical > &
81
+ {
82
+ height: var(--sk-splitter-handle-size);
83
+ cursor: row-resize;
84
+ }
85
+
86
+ &:hover:not([data-disabled])
87
+ {
88
+ background: oklch(from var(--sk-splitter-handle-color) l c h / 0.25);
89
+ }
90
+
91
+ &:active:not([data-disabled])
92
+ {
93
+ background: oklch(from var(--sk-splitter-handle-color) l c h / 0.4);
94
+ }
95
+
96
+ &:focus-visible
97
+ {
98
+ outline: var(--sk-border-width-base) solid var(--sk-splitter-handle-color);
99
+ outline-offset: -2px;
100
+ }
101
+
102
+ &[data-disabled]
103
+ {
104
+ opacity: 0.5;
105
+ cursor: not-allowed;
106
+ }
107
+ }
108
+
109
+ // Handle grip indicator (dots)
110
+ .sk-splitter-handle-grip
111
+ {
112
+ display: flex;
113
+ gap: 2px;
114
+ opacity: 0.5;
115
+ transition: opacity var(--sk-transition-duration-fast) var(--sk-transition-timing-default);
116
+
117
+ .sk-splitter-handle:hover &
118
+ {
119
+ opacity: 0.8;
120
+ }
121
+
122
+ .sk-horizontal > .sk-splitter-handle &
123
+ {
124
+ flex-direction: column;
125
+ }
126
+ }
127
+
128
+ .sk-splitter-handle-dot
129
+ {
130
+ width: 3px;
131
+ height: 3px;
132
+ border-radius: 50%;
133
+ background: var(--sk-splitter-handle-color);
134
+ }
135
+
136
+ //----------------------------------------------------------------------------------------------------------------------