@skewedaspect/sleekspace-ui 0.7.0 → 0.8.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 (243) hide show
  1. package/dist/sleekspace-ui.css +1000 -307
  2. package/dist/sleekspace-ui.es.js +31559 -29868
  3. package/dist/sleekspace-ui.umd.js +32210 -30438
  4. package/dist/{components → src/components}/Accordion/SkAccordion.vue.d.ts +1 -1
  5. package/dist/{components → src/components}/Accordion/types.d.ts +1 -1
  6. package/dist/{components → src/components}/Alert/SkAlert.vue.d.ts +1 -1
  7. package/dist/{components → src/components}/Alert/types.d.ts +1 -1
  8. package/dist/{components → src/components}/Avatar/SkAvatar.vue.d.ts +1 -1
  9. package/dist/{components → src/components}/Avatar/types.d.ts +1 -1
  10. package/dist/{components → src/components}/Breadcrumbs/SkBreadcrumbs.vue.d.ts +2 -2
  11. package/dist/{components → src/components}/Breadcrumbs/types.d.ts +1 -1
  12. package/dist/{components → src/components}/Button/SkButton.vue.d.ts +9 -1
  13. package/dist/{components → src/components}/Button/types.d.ts +1 -1
  14. package/dist/{components → src/components}/Card/SkCard.vue.d.ts +1 -1
  15. package/dist/src/components/Card/types.d.ts +2 -0
  16. package/dist/{components → src/components}/Checkbox/SkCheckbox.vue.d.ts +1 -1
  17. package/dist/{components → src/components}/Checkbox/types.d.ts +1 -1
  18. package/dist/{components → src/components}/Collapsible/SkCollapsible.vue.d.ts +1 -1
  19. package/dist/src/components/Collapsible/types.d.ts +2 -0
  20. package/dist/{components → src/components}/ColorPicker/SkColorPicker.vue.d.ts +1 -1
  21. package/dist/{components → src/components}/ColorPicker/types.d.ts +1 -1
  22. package/dist/{components → src/components}/ContextMenu/SkContextMenu.vue.d.ts +1 -1
  23. package/dist/src/components/ContextMenu/types.d.ts +2 -0
  24. package/dist/{components → src/components}/Divider/SkDivider.vue.d.ts +1 -1
  25. package/dist/{components → src/components}/Dropdown/SkDropdown.vue.d.ts +1 -1
  26. package/dist/{components → src/components}/Dropdown/types.d.ts +1 -1
  27. package/dist/{components → src/components}/Input/SkInput.vue.d.ts +1 -1
  28. package/dist/{components → src/components}/Input/types.d.ts +1 -1
  29. package/dist/{components → src/components}/Listbox/SkListbox.vue.d.ts +1 -1
  30. package/dist/{components → src/components}/Listbox/types.d.ts +1 -1
  31. package/dist/{components → src/components}/Modal/SkModal.vue.d.ts +1 -1
  32. package/dist/{components → src/components}/Modal/types.d.ts +1 -1
  33. package/dist/{components → src/components}/NavBar/SkNavBar.vue.d.ts +2 -1
  34. package/dist/src/components/NavBar/context.d.ts +3 -0
  35. package/dist/{components → src/components}/NavBar/types.d.ts +1 -1
  36. package/dist/{components → src/components}/NumberInput/SkNumberInput.vue.d.ts +1 -1
  37. package/dist/{components → src/components}/NumberInput/types.d.ts +1 -1
  38. package/dist/src/components/Page/SkPage.vue.d.ts +161 -0
  39. package/dist/src/components/Page/SkPageSidebarToggle.vue.d.ts +41 -0
  40. package/dist/src/components/Page/index.d.ts +3 -0
  41. package/dist/src/components/Page/types.d.ts +39 -0
  42. package/dist/{components → src/components}/Pagination/SkPagination.vue.d.ts +3 -3
  43. package/dist/{components → src/components}/Pagination/types.d.ts +1 -1
  44. package/dist/{components → src/components}/Panel/SkPanel.vue.d.ts +1 -1
  45. package/dist/{components → src/components}/Panel/types.d.ts +1 -1
  46. package/dist/{components → src/components}/Popover/SkPopover.vue.d.ts +1 -1
  47. package/dist/{components → src/components}/Progress/SkProgress.vue.d.ts +1 -1
  48. package/dist/{components → src/components}/Progress/types.d.ts +1 -1
  49. package/dist/{components → src/components}/Radio/SkRadio.vue.d.ts +1 -1
  50. package/dist/{components → src/components}/Radio/types.d.ts +1 -1
  51. package/dist/{components → src/components}/ScrollArea/SkScrollArea.vue.d.ts +9 -0
  52. package/dist/{components → src/components}/ScrollArea/types.d.ts +1 -1
  53. package/dist/{components → src/components}/Select/SkSelect.vue.d.ts +1 -1
  54. package/dist/{components → src/components}/Select/SkSelectItem.vue.d.ts +6 -18
  55. package/dist/{components → src/components}/Select/types.d.ts +1 -1
  56. package/dist/{components → src/components}/Sidebar/SkSidebar.vue.d.ts +10 -2
  57. package/dist/{components → src/components}/Sidebar/types.d.ts +1 -1
  58. package/dist/{components → src/components}/Slider/SkSlider.vue.d.ts +1 -1
  59. package/dist/{components → src/components}/Slider/types.d.ts +1 -1
  60. package/dist/{components → src/components}/Spinner/SkSpinner.vue.d.ts +1 -1
  61. package/dist/{components → src/components}/Spinner/types.d.ts +1 -1
  62. package/dist/{components → src/components}/Splitter/types.d.ts +1 -1
  63. package/dist/{components → src/components}/Switch/SkSwitch.vue.d.ts +1 -1
  64. package/dist/{components → src/components}/Switch/types.d.ts +1 -1
  65. package/dist/{components → src/components}/Table/SkTable.vue.d.ts +1 -1
  66. package/dist/{components → src/components}/Table/types.d.ts +1 -1
  67. package/dist/{components → src/components}/Tabs/SkTab.vue.d.ts +1 -1
  68. package/dist/{components → src/components}/Tabs/SkTabs.vue.d.ts +2 -2
  69. package/dist/{components → src/components}/Tag/SkTag.vue.d.ts +1 -1
  70. package/dist/{components → src/components}/TagsInput/SkTagsInput.vue.d.ts +1 -1
  71. package/dist/{components → src/components}/TagsInput/types.d.ts +1 -1
  72. package/dist/{components → src/components}/Textarea/SkTextarea.vue.d.ts +1 -1
  73. package/dist/{components → src/components}/Textarea/types.d.ts +1 -1
  74. package/dist/{components → src/components}/Toolbar/types.d.ts +1 -1
  75. package/dist/{components → src/components}/Tooltip/SkTooltip.vue.d.ts +1 -1
  76. package/dist/{components → src/components}/Tooltip/types.d.ts +1 -1
  77. package/dist/{components → src/components}/TreeView/SkTreeView.vue.d.ts +5 -5
  78. package/dist/{components → src/components}/TreeView/types.d.ts +1 -1
  79. package/dist/src/composables/useFocusTrap.d.ts +17 -0
  80. package/dist/src/composables/usePageDrawer.d.ts +35 -0
  81. package/dist/src/composables/usePortalContext.test.d.ts +1 -0
  82. package/dist/{index.d.ts → src/index.d.ts} +2 -0
  83. package/dist/src/styles/mixins/fluidSize.test.d.ts +1 -0
  84. package/dist/tokens.css +60 -0
  85. package/llms-full.txt +6349 -0
  86. package/llms.txt +46 -0
  87. package/package.json +16 -11
  88. package/src/components/Button/SkButton.vue +25 -13
  89. package/src/components/NavBar/SkNavBar.vue +12 -1
  90. package/src/components/NavBar/context.ts +16 -0
  91. package/src/components/Page/SkPage.vue +460 -72
  92. package/src/components/Page/SkPageSidebarToggle.vue +148 -0
  93. package/src/components/Page/index.ts +1 -0
  94. package/src/components/Page/types.ts +30 -5
  95. package/src/components/ScrollArea/SkScrollArea.vue +12 -0
  96. package/src/components/Select/SkSelectItem.vue +2 -2
  97. package/src/components/Sidebar/SkSidebar.vue +10 -0
  98. package/src/components/TreeView/SkTreeView.vue +6 -6
  99. package/src/composables/useFocusTrap.test.ts +184 -0
  100. package/src/composables/useFocusTrap.ts +141 -0
  101. package/src/composables/usePageDrawer.ts +96 -0
  102. package/src/global.d.ts +1 -0
  103. package/src/index.ts +5 -0
  104. package/src/styles/components/_accordion.scss +15 -0
  105. package/src/styles/components/_alert.scss +1 -0
  106. package/src/styles/components/_avatar.scss +1 -0
  107. package/src/styles/components/_breadcrumbs.scss +7 -0
  108. package/src/styles/components/_button.scss +291 -214
  109. package/src/styles/components/_checkbox.scss +9 -1
  110. package/src/styles/components/_collapsible.scss +15 -0
  111. package/src/styles/components/_color-picker.scss +4 -1
  112. package/src/styles/components/_input.scss +1 -0
  113. package/src/styles/components/_listbox.scss +8 -2
  114. package/src/styles/components/_menu.scss +9 -2
  115. package/src/styles/components/_modal.scss +18 -2
  116. package/src/styles/components/_navbar.scss +22 -6
  117. package/src/styles/components/_number-input.scss +1 -0
  118. package/src/styles/components/_page.scss +220 -12
  119. package/src/styles/components/_pagination.scss +10 -1
  120. package/src/styles/components/_panel.scss +8 -3
  121. package/src/styles/components/_popover.scss +15 -2
  122. package/src/styles/components/_progress.scss +14 -0
  123. package/src/styles/components/_radio.scss +8 -1
  124. package/src/styles/components/_scroll-area.scss +56 -0
  125. package/src/styles/components/_select.scss +3 -1
  126. package/src/styles/components/_sidebar.scss +78 -38
  127. package/src/styles/components/_skeleton.scss +18 -0
  128. package/src/styles/components/_slider.scss +5 -4
  129. package/src/styles/components/_spinner.scss +15 -0
  130. package/src/styles/components/_switch.scss +5 -0
  131. package/src/styles/components/_table.scss +1 -0
  132. package/src/styles/components/_tabs.scss +6 -0
  133. package/src/styles/components/_tag.scss +2 -0
  134. package/src/styles/components/_tags-input.scss +1 -0
  135. package/src/styles/components/_textarea.scss +1 -0
  136. package/src/styles/components/_toast.scss +16 -1
  137. package/src/styles/components/_toolbar.scss +2 -0
  138. package/src/styles/components/_tooltip.scss +14 -1
  139. package/src/styles/components/_tree-view.scss +6 -1
  140. package/src/styles/mixins/_index.scss +1 -0
  141. package/src/styles/mixins/_responsive.scss +184 -0
  142. package/src/styles/mixins/fluidSize.test.ts +149 -0
  143. package/src/styles/tokens/_foundation-breakpoints.scss +26 -0
  144. package/src/styles/tokens/_foundation-z-index.scss +38 -0
  145. package/src/styles/tokens/index.scss +2 -0
  146. package/web-types.json +194 -14
  147. package/dist/components/Card/types.d.ts +0 -2
  148. package/dist/components/Collapsible/types.d.ts +0 -2
  149. package/dist/components/ContextMenu/types.d.ts +0 -2
  150. package/dist/components/Page/SkPage.vue.d.ts +0 -64
  151. package/dist/components/Page/index.d.ts +0 -2
  152. package/dist/components/Page/types.d.ts +0 -16
  153. package/dist/{components → src/components}/Accordion/SkAccordionItem.vue.d.ts +0 -0
  154. package/dist/{components → src/components}/Accordion/index.d.ts +0 -0
  155. package/dist/{components → src/components}/Avatar/index.d.ts +0 -0
  156. package/dist/{components → src/components}/Breadcrumbs/SkBreadcrumbItem.vue.d.ts +0 -0
  157. package/dist/{components → src/components}/Breadcrumbs/SkBreadcrumbSeparator.vue.d.ts +0 -0
  158. package/dist/{components → src/components}/Breadcrumbs/index.d.ts +0 -0
  159. package/dist/{components → src/components}/Checkbox/index.d.ts +0 -0
  160. package/dist/{components → src/components}/Collapsible/index.d.ts +0 -0
  161. package/dist/{components → src/components}/ColorPicker/index.d.ts +0 -0
  162. package/dist/{components → src/components}/ContextMenu/SkContextMenuCheckboxItem.vue.d.ts +0 -0
  163. package/dist/{components → src/components}/ContextMenu/SkContextMenuItem.vue.d.ts +0 -0
  164. package/dist/{components → src/components}/ContextMenu/SkContextMenuLabel.vue.d.ts +0 -0
  165. package/dist/{components → src/components}/ContextMenu/SkContextMenuRadioGroup.vue.d.ts +0 -0
  166. package/dist/{components → src/components}/ContextMenu/SkContextMenuRadioItem.vue.d.ts +0 -0
  167. package/dist/{components → src/components}/ContextMenu/SkContextMenuSeparator.vue.d.ts +0 -0
  168. package/dist/{components → src/components}/ContextMenu/SkContextMenuSubmenu.vue.d.ts +0 -0
  169. package/dist/{components → src/components}/ContextMenu/index.d.ts +0 -0
  170. package/dist/{components → src/components}/Divider/types.d.ts +0 -0
  171. package/dist/{components → src/components}/Dropdown/SkDropdownCheckboxItem.vue.d.ts +0 -0
  172. package/dist/{components → src/components}/Dropdown/SkDropdownMenuItem.vue.d.ts +0 -0
  173. package/dist/{components → src/components}/Dropdown/SkDropdownMenuLabel.vue.d.ts +0 -0
  174. package/dist/{components → src/components}/Dropdown/SkDropdownMenuSeparator.vue.d.ts +0 -0
  175. package/dist/{components → src/components}/Dropdown/SkDropdownRadioGroup.vue.d.ts +0 -0
  176. package/dist/{components → src/components}/Dropdown/SkDropdownRadioItem.vue.d.ts +0 -0
  177. package/dist/{components → src/components}/Dropdown/SkDropdownSubmenu.vue.d.ts +0 -0
  178. package/dist/{components → src/components}/Dropdown/index.d.ts +0 -0
  179. package/dist/{components → src/components}/Field/SkField.vue.d.ts +0 -0
  180. package/dist/{components → src/components}/Field/index.d.ts +0 -0
  181. package/dist/{components → src/components}/Field/types.d.ts +0 -0
  182. package/dist/{components → src/components}/Group/SkGroup.vue.d.ts +0 -0
  183. package/dist/{components → src/components}/Group/types.d.ts +0 -0
  184. package/dist/{components → src/components}/Input/index.d.ts +0 -0
  185. package/dist/{components → src/components}/Listbox/SkListboxItem.vue.d.ts +0 -0
  186. package/dist/{components → src/components}/Listbox/SkListboxSeparator.vue.d.ts +0 -0
  187. package/dist/{components → src/components}/Listbox/index.d.ts +0 -0
  188. package/dist/{components → src/components}/Modal/index.d.ts +0 -0
  189. package/dist/{components → src/components}/NavBar/index.d.ts +0 -0
  190. package/dist/{components → src/components}/NumberInput/index.d.ts +0 -0
  191. package/dist/{components → src/components}/Pagination/SkPaginationItem.vue.d.ts +0 -0
  192. package/dist/{components → src/components}/Pagination/index.d.ts +0 -0
  193. package/dist/{components → src/components}/Popover/index.d.ts +0 -0
  194. package/dist/{components → src/components}/Popover/types.d.ts +0 -0
  195. package/dist/{components → src/components}/Progress/index.d.ts +0 -0
  196. package/dist/{components → src/components}/Radio/SkRadioGroup.vue.d.ts +0 -0
  197. package/dist/{components → src/components}/Radio/index.d.ts +0 -0
  198. package/dist/{components → src/components}/ScrollArea/index.d.ts +0 -0
  199. package/dist/{components → src/components}/Select/SkSelectSeparator.vue.d.ts +0 -0
  200. package/dist/{components → src/components}/Select/index.d.ts +0 -0
  201. package/dist/{components → src/components}/Sidebar/SkSidebarItem.vue.d.ts +0 -0
  202. package/dist/{components → src/components}/Sidebar/SkSidebarSection.vue.d.ts +0 -0
  203. package/dist/{components → src/components}/Skeleton/SkSkeleton.vue.d.ts +2 -2
  204. /package/dist/{components → src/components}/Skeleton/index.d.ts +0 -0
  205. /package/dist/{components → src/components}/Skeleton/types.d.ts +0 -0
  206. /package/dist/{components → src/components}/Slider/index.d.ts +0 -0
  207. /package/dist/{components → src/components}/Spinner/index.d.ts +0 -0
  208. /package/dist/{components → src/components}/Splitter/SkSplitter.vue.d.ts +0 -0
  209. /package/dist/{components → src/components}/Splitter/SkSplitterHandle.vue.d.ts +0 -0
  210. /package/dist/{components → src/components}/Splitter/SkSplitterPanel.vue.d.ts +0 -0
  211. /package/dist/{components → src/components}/Splitter/index.d.ts +0 -0
  212. /package/dist/{components → src/components}/Switch/index.d.ts +0 -0
  213. /package/dist/{components → src/components}/Table/index.d.ts +0 -0
  214. /package/dist/{components → src/components}/Tabs/SkTabList.vue.d.ts +0 -0
  215. /package/dist/{components → src/components}/Tabs/SkTabPanel.vue.d.ts +0 -0
  216. /package/dist/{components → src/components}/Tabs/SkTabPanels.vue.d.ts +0 -0
  217. /package/dist/{components → src/components}/Tabs/types.d.ts +0 -0
  218. /package/dist/{components → src/components}/Tag/types.d.ts +0 -0
  219. /package/dist/{components → src/components}/TagsInput/index.d.ts +0 -0
  220. /package/dist/{components → src/components}/Textarea/index.d.ts +0 -0
  221. /package/dist/{components → src/components}/Theme/SkTheme.vue.d.ts +0 -0
  222. /package/dist/{components → src/components}/Theme/types.d.ts +0 -0
  223. /package/dist/{components → src/components}/Theme/useTheme.d.ts +0 -0
  224. /package/dist/{components → src/components}/Toast/SkToast.vue.d.ts +0 -0
  225. /package/dist/{components → src/components}/Toast/SkToastProvider.vue.d.ts +0 -0
  226. /package/dist/{components → src/components}/Toast/index.d.ts +0 -0
  227. /package/dist/{components → src/components}/Toast/types.d.ts +0 -0
  228. /package/dist/{components → src/components}/Toast/useToast.d.ts +0 -0
  229. /package/dist/{components → src/components}/Toolbar/SkToolbar.vue.d.ts +0 -0
  230. /package/dist/{components → src/components}/Toolbar/SkToolbarButton.vue.d.ts +0 -0
  231. /package/dist/{components → src/components}/Toolbar/SkToolbarSeparator.vue.d.ts +0 -0
  232. /package/dist/{components → src/components}/Toolbar/SkToolbarToggleGroup.vue.d.ts +0 -0
  233. /package/dist/{components → src/components}/Toolbar/SkToolbarToggleItem.vue.d.ts +0 -0
  234. /package/dist/{components → src/components}/Toolbar/index.d.ts +0 -0
  235. /package/dist/{components → src/components}/Tooltip/SkTooltipProvider.vue.d.ts +0 -0
  236. /package/dist/{components → src/components}/Tooltip/index.d.ts +0 -0
  237. /package/dist/{components → src/components}/TreeView/SkTreeItem.vue.d.ts +0 -0
  238. /package/dist/{components → src/components}/TreeView/index.d.ts +0 -0
  239. /package/dist/{composables → src/composables}/useCustomColors.d.ts +0 -0
  240. /package/dist/{composables → src/composables}/useCustomColors.test.d.ts +0 -0
  241. /package/dist/{composables/usePortalContext.test.d.ts → src/composables/useFocusTrap.test.d.ts} +0 -0
  242. /package/dist/{composables → src/composables}/usePortalContext.d.ts +0 -0
  243. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
@@ -3,6 +3,7 @@
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
5
  @use '@/styles/mixins/cut-border' as *;
6
+ @use '@/styles/mixins/responsive' as *;
6
7
 
7
8
  //----------------------------------------------------------------------------------------------------------------------
8
9
 
@@ -278,3 +279,16 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
278
279
  }
279
280
 
280
281
  //----------------------------------------------------------------------------------------------------------------------
282
+ // Reduced motion: indeterminate progress still communicates "working", just slower. A fully
283
+ // static bar would read as "stopped" or broken.
284
+ //----------------------------------------------------------------------------------------------------------------------
285
+
286
+ @include reduced-motion
287
+ {
288
+ .sk-progress-indicator-indeterminate
289
+ {
290
+ animation-duration: 8s;
291
+ }
292
+ }
293
+
294
+ //----------------------------------------------------------------------------------------------------------------------
@@ -1,4 +1,4 @@
1
- @use '@/styles/mixins/cut-border' as *;
1
+ @use '@/styles/mixins' as *;
2
2
 
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
  // Radio Component Styles
@@ -29,6 +29,11 @@
29
29
  gap: var(--sk-space-xs);
30
30
  cursor: pointer;
31
31
 
32
+ @include touch
33
+ {
34
+ min-height: 44px;
35
+ }
36
+
32
37
  &.sk-disabled
33
38
  {
34
39
  cursor: not-allowed;
@@ -47,6 +52,7 @@
47
52
  // Corner cut size (scales with size variant)
48
53
  --sk-radio-cut: 0.3rem;
49
54
 
55
+ position: relative;
50
56
  display: inline-flex;
51
57
  align-items: center;
52
58
  justify-content: center;
@@ -230,6 +236,7 @@
230
236
 
231
237
  .sk-radio-indicator
232
238
  {
239
+ position: relative;
233
240
  display: flex;
234
241
  align-items: center;
235
242
  justify-content: center;
@@ -26,6 +26,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
26
26
  --sk-scroll-area-thumb-color: var(--sk-scroll-area-color-base);
27
27
  --sk-scroll-area-track-color: oklch(from var(--sk-neutral-base) l c h / 0.08);
28
28
  --sk-scroll-area-size: 0.5rem;
29
+ --sk-scroll-area-fade: 1.5rem;
29
30
 
30
31
  position: relative;
31
32
  overflow: hidden;
@@ -36,6 +37,61 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
36
37
  }
37
38
  }
38
39
 
40
+ //----------------------------------------------------------------------------------------------------------------------
41
+ // Edge fade
42
+ //
43
+ // Applied to the viewport via CSS mask-image so the content visibly tapers at the edges where
44
+ // scrolling is possible. Always-on (not scroll-position aware) -- keeps the pattern pure-CSS
45
+ // and avoids layout shift. Width is tunable via `--sk-scroll-area-fade`.
46
+ //----------------------------------------------------------------------------------------------------------------------
47
+
48
+ .sk-scroll-area.sk-fade
49
+ {
50
+ &.sk-vertical .sk-scroll-area-viewport
51
+ {
52
+ mask-image: linear-gradient(
53
+ to bottom,
54
+ transparent 0,
55
+ black var(--sk-scroll-area-fade),
56
+ black calc(100% - var(--sk-scroll-area-fade)),
57
+ transparent 100%
58
+ );
59
+ }
60
+
61
+ &.sk-horizontal .sk-scroll-area-viewport
62
+ {
63
+ mask-image: linear-gradient(
64
+ to right,
65
+ transparent 0,
66
+ black var(--sk-scroll-area-fade),
67
+ black calc(100% - var(--sk-scroll-area-fade)),
68
+ transparent 100%
69
+ );
70
+ }
71
+
72
+ &.sk-both .sk-scroll-area-viewport
73
+ {
74
+ // Two masks composited with `intersect` so only the center (opaque on both axes) is
75
+ // fully opaque; the remaining three edges fade.
76
+ mask-image:
77
+ linear-gradient(
78
+ to bottom,
79
+ transparent 0,
80
+ black var(--sk-scroll-area-fade),
81
+ black calc(100% - var(--sk-scroll-area-fade)),
82
+ transparent 100%
83
+ ),
84
+ linear-gradient(
85
+ to right,
86
+ transparent 0,
87
+ black var(--sk-scroll-area-fade),
88
+ black calc(100% - var(--sk-scroll-area-fade)),
89
+ transparent 100%
90
+ );
91
+ mask-composite: intersect;
92
+ }
93
+ }
94
+
39
95
  //----------------------------------------------------------------------------------------------------------------------
40
96
  // ScrollArea Viewport
41
97
  //----------------------------------------------------------------------------------------------------------------------
@@ -132,6 +132,7 @@
132
132
 
133
133
  .sk-select-trigger
134
134
  {
135
+ position: relative;
135
136
  display: flex;
136
137
  align-items: center;
137
138
  gap: var(--sk-space-sm);
@@ -253,7 +254,7 @@
253
254
  max-height: 20rem;
254
255
  overflow: auto;
255
256
  padding: var(--sk-space-xs);
256
- z-index: 1000;
257
+ z-index: var(--sk-z-dropdown);
257
258
 
258
259
  @include cut-border(
259
260
  $cut: 0.625rem,
@@ -368,6 +369,7 @@
368
369
 
369
370
  .sk-select-item
370
371
  {
372
+ position: relative;
371
373
  display: flex;
372
374
  align-items: center;
373
375
  justify-content: space-between;
@@ -15,6 +15,18 @@
15
15
  width: var(--sk-sidebar-width, 180px);
16
16
  flex-shrink: 0;
17
17
 
18
+ // Stretch the internal panel to fill whatever height the parent gives us. In a page shell
19
+ // the sidebar column is usually a flex item sized to the page height; the chrome should
20
+ // reach top-to-bottom rather than collapsing around its intrinsic content.
21
+ display: flex;
22
+ flex-direction: column;
23
+
24
+ .sk-sidebar-panel
25
+ {
26
+ flex: 1 1 auto;
27
+ min-height: 0;
28
+ }
29
+
18
30
  // Item theming -- uses same darkened color derivation as button system.
19
31
  // --sk-sidebar-color-base is overridden per kind below; bg/hover/active derive automatically.
20
32
  --sk-sidebar-color-base: var(--sk-neutral-base);
@@ -25,15 +37,41 @@
25
37
  );
26
38
  --sk-sidebar-item-hover-bg: color-mix(in oklch, var(--sk-sidebar-item-bg) 85%, white 15%);
27
39
  --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);
40
+ // Neutral's base is low-chroma, so base-as-text goes invisible on the dark bg.
41
+ // Default to neutral-text; chromatic kinds override back to their base below.
42
+ --sk-sidebar-item-active-text: var(--sk-neutral-text);
43
+ --sk-sidebar-item-active-bg: color-mix(in oklch, var(--sk-sidebar-item-bg) 92%, white 8%);
30
44
 
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); }
45
+ &.sk-primary
46
+ {
47
+ --sk-sidebar-color-base: var(--sk-primary-base);
48
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
49
+ }
50
+ &.sk-accent
51
+ {
52
+ --sk-sidebar-color-base: var(--sk-accent-base);
53
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
54
+ }
55
+ &.sk-info
56
+ {
57
+ --sk-sidebar-color-base: var(--sk-info-base);
58
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
59
+ }
60
+ &.sk-success
61
+ {
62
+ --sk-sidebar-color-base: var(--sk-success-base);
63
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
64
+ }
65
+ &.sk-warning
66
+ {
67
+ --sk-sidebar-color-base: var(--sk-warning-base);
68
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
69
+ }
70
+ &.sk-danger
71
+ {
72
+ --sk-sidebar-color-base: var(--sk-danger-base);
73
+ --sk-sidebar-item-active-text: var(--sk-sidebar-color-base);
74
+ }
37
75
 
38
76
  .sk-sidebar-nav
39
77
  {
@@ -79,6 +117,17 @@
79
117
  cursor: pointer;
80
118
  display: block;
81
119
 
120
+ // Coarse-pointer touch-target floor. Parent .sk-sidebar.sk-dense opts out.
121
+ .sk-sidebar:not(.sk-dense) &
122
+ {
123
+ @include touch
124
+ {
125
+ min-height: 44px;
126
+ display: flex;
127
+ align-items: center;
128
+ }
129
+ }
130
+
82
131
  &:hover
83
132
  {
84
133
  background: var(--sk-sidebar-item-hover-bg);
@@ -99,16 +148,8 @@
99
148
  background: var(--sk-sidebar-item-active-bg);
100
149
  color: var(--sk-sidebar-item-active-text);
101
150
  font-weight: 600;
102
- clip-path: polygon(
103
- 10px 0%,
104
- 100% 0%,
105
- 100% calc(100% - 10px),
106
- calc(100% - 10px) 100%,
107
- 0% 100%,
108
- 0% 10px
109
- );
110
151
 
111
- // Active indicator: 2px L-shape tracing the left edge + top-left bevel
152
+ // Active indicator: 2px vertical bar on the left edge
112
153
  &::before
113
154
  {
114
155
  content: '';
@@ -116,14 +157,24 @@
116
157
  inset: 0;
117
158
  background: var(--sk-sidebar-color-base);
118
159
  clip-path: polygon(
119
- 0% 100%,
120
- 0px 10px,
121
- 10px 0px,
122
- 11.41px 1.41px,
123
- 2px 10.83px,
124
- 2px 100%
160
+ 0% 0%,
161
+ 2px 0%,
162
+ 2px 100%,
163
+ 0% 100%
125
164
  );
126
165
  }
166
+
167
+ // Hovering an active item: keep square corners, lighten bg and indicator
168
+ &:hover
169
+ {
170
+ background: var(--sk-sidebar-item-hover-bg);
171
+ clip-path: none;
172
+
173
+ &::before
174
+ {
175
+ background: var(--sk-sidebar-item-hover-text);
176
+ }
177
+ }
127
178
  }
128
179
 
129
180
  // Mirrored for right-side placement
@@ -144,24 +195,13 @@
144
195
  &.sk-active,
145
196
  &.router-link-active
146
197
  {
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
198
  &::before
157
199
  {
158
200
  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%
201
+ 100% 0%,
202
+ calc(100% - 2px) 0%,
203
+ calc(100% - 2px) 100%,
204
+ 100% 100%
165
205
  );
166
206
  }
167
207
  }
@@ -2,6 +2,8 @@
2
2
  // Skeleton Component Styles
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
+ @use '@/styles/mixins/responsive' as *;
6
+
5
7
  //----------------------------------------------------------------------------------------------------------------------
6
8
  // Base Skeleton
7
9
  //----------------------------------------------------------------------------------------------------------------------
@@ -136,3 +138,19 @@
136
138
  }
137
139
 
138
140
  //----------------------------------------------------------------------------------------------------------------------
141
+ // Reduced motion: skeletons are decorative placeholders -- stop the shimmer/pulse entirely so
142
+ // users who opt out of motion don't get an infinite loop in their peripheral vision. Content
143
+ // still reads as "something loading" via the muted background color.
144
+ //----------------------------------------------------------------------------------------------------------------------
145
+
146
+ @include reduced-motion
147
+ {
148
+ .sk-skeleton,
149
+ .sk-skeleton::after,
150
+ .sk-skeleton-shimmer::after
151
+ {
152
+ animation: none;
153
+ }
154
+ }
155
+
156
+ //----------------------------------------------------------------------------------------------------------------------
@@ -126,7 +126,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
126
126
  flex-grow: 1;
127
127
  background: var(--sk-slider-track-bg);
128
128
 
129
- .sk-horizontal &
129
+ .sk-slider.sk-horizontal &
130
130
  {
131
131
  height: var(--sk-slider-track-size);
132
132
  width: 100%;
@@ -140,7 +140,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
140
140
  );
141
141
  }
142
142
 
143
- .sk-vertical &
143
+ .sk-slider.sk-vertical &
144
144
  {
145
145
  width: var(--sk-slider-track-size);
146
146
  height: 100%;
@@ -172,7 +172,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
172
172
  oklch(from var(--sk-slider-color-base) calc(l * 0.85) c h / 0.2)
173
173
  );
174
174
 
175
- .sk-horizontal &
175
+ .sk-slider.sk-horizontal &
176
176
  {
177
177
  height: 100%;
178
178
 
@@ -185,7 +185,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
185
185
  );
186
186
  }
187
187
 
188
- .sk-vertical &
188
+ .sk-slider.sk-vertical &
189
189
  {
190
190
  width: 100%;
191
191
 
@@ -205,6 +205,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
205
205
 
206
206
  .sk-slider-thumb
207
207
  {
208
+ position: relative;
208
209
  display: block;
209
210
  width: var(--sk-slider-thumb-size);
210
211
  height: var(--sk-slider-thumb-size);
@@ -2,6 +2,8 @@
2
2
  // Spinner Component Styles
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
+ @use '@/styles/mixins/responsive' as *;
6
+
5
7
  $kinds: (neutral, primary, accent, info, success, warning, danger);
6
8
 
7
9
  //----------------------------------------------------------------------------------------------------------------------
@@ -329,3 +331,16 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
329
331
  }
330
332
 
331
333
  //----------------------------------------------------------------------------------------------------------------------
334
+ // Reduced motion: spinners still communicate "loading", but we slow the animation dramatically
335
+ // (5x) so the motion is less intrusive. Stopping entirely would make the spinner look frozen.
336
+ //----------------------------------------------------------------------------------------------------------------------
337
+
338
+ @include reduced-motion
339
+ {
340
+ .sk-spinner *
341
+ {
342
+ animation-duration: 8s !important;
343
+ }
344
+ }
345
+
346
+ //----------------------------------------------------------------------------------------------------------------------
@@ -96,6 +96,11 @@
96
96
  gap: var(--sk-switch-label-gap);
97
97
  cursor: pointer;
98
98
 
99
+ @include touch
100
+ {
101
+ min-height: 44px;
102
+ }
103
+
99
104
  // Disable cursor when switch is disabled
100
105
  &:has(.sk-switch:disabled)
101
106
  {
@@ -47,6 +47,7 @@
47
47
  --sk-table-border-color: color-mix(in oklch, var(--sk-neutral-base), black 20%);
48
48
  --sk-table-corner-cut: 1rem;
49
49
 
50
+ position: relative;
50
51
  overflow-x: auto;
51
52
 
52
53
  // Cut top-right corner with neutral border (opaque, like solid buttons)
@@ -3,6 +3,7 @@
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
5
  @use '../theme/variables' as *;
6
+ @use '../mixins' as *;
6
7
 
7
8
  //----------------------------------------------------------------------------------------------------------------------
8
9
  // Tabs Design Tokens
@@ -268,6 +269,11 @@
268
269
  border: none;
269
270
  border-radius: 0; // Override any RekaUI defaults
270
271
  cursor: pointer;
272
+
273
+ @include touch
274
+ {
275
+ min-height: 44px;
276
+ }
271
277
  transition:
272
278
  color var(--sk-tab-transition-duration) var(--sk-tab-transition-easing),
273
279
  background-color var(--sk-tab-transition-duration) var(--sk-tab-transition-easing),
@@ -191,6 +191,8 @@
191
191
  .sk-tag
192
192
  {
193
193
  // Base styles
194
+ // position: relative anchors the cut-border fallback's ::before (Safari, Firefox — no corner-shape).
195
+ position: relative;
194
196
  display: inline-flex;
195
197
  align-items: center;
196
198
  justify-content: center;
@@ -135,6 +135,7 @@
135
135
 
136
136
  .sk-tags-input-container
137
137
  {
138
+ position: relative;
138
139
  display: flex;
139
140
  flex-wrap: wrap;
140
141
  align-items: center;
@@ -13,6 +13,7 @@
13
13
  // Corner cut size (scales with size variant)
14
14
  --sk-textarea-cut: 0.5rem;
15
15
 
16
+ position: relative;
16
17
  display: block;
17
18
  width: 100%;
18
19
  font-family: var(--sk-font-family-base);
@@ -12,7 +12,7 @@
12
12
  {
13
13
  // Base styles - fixed positioning for floating viewport
14
14
  position: fixed;
15
- z-index: 100;
15
+ z-index: var(--sk-z-toast);
16
16
  display: flex;
17
17
  flex-direction: column;
18
18
  gap: var(--sk-space-sm);
@@ -107,6 +107,7 @@
107
107
  // Base Styles
108
108
  //------------------------------------------------------------------------------------------------------------------
109
109
 
110
+ position: relative;
110
111
  display: flex;
111
112
  align-items: center;
112
113
  gap: var(--sk-toast-gap);
@@ -329,3 +330,17 @@
329
330
  }
330
331
 
331
332
  //----------------------------------------------------------------------------------------------------------------------
333
+ // Reduced motion: drop the slide-from-edge so toasts appear and dismiss in place.
334
+ //----------------------------------------------------------------------------------------------------------------------
335
+
336
+ @include reduced-motion
337
+ {
338
+ .sk-toast-root[data-state='open'],
339
+ .sk-toast-root[data-state='closed'],
340
+ .sk-toast-root[data-swipe='end']
341
+ {
342
+ animation: none;
343
+ }
344
+ }
345
+
346
+ //----------------------------------------------------------------------------------------------------------------------
@@ -151,6 +151,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
151
151
 
152
152
  .sk-toolbar-button
153
153
  {
154
+ position: relative;
154
155
  display: flex;
155
156
  align-items: center;
156
157
  justify-content: center;
@@ -214,6 +215,7 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
214
215
 
215
216
  .sk-toolbar-toggle-item
216
217
  {
218
+ position: relative;
217
219
  display: flex;
218
220
  align-items: center;
219
221
  justify-content: center;
@@ -1,4 +1,5 @@
1
1
  @use '@/styles/mixins/cut-border' as *;
2
+ @use '@/styles/mixins/responsive' as *;
2
3
 
3
4
  .sk-tooltip-content
4
5
  {
@@ -36,7 +37,7 @@
36
37
  0 0 8px oklch(from var(--sk-tooltip-color-base) l c h / 0.4);
37
38
 
38
39
  max-width: 20rem;
39
- z-index: 60;
40
+ z-index: var(--sk-z-tooltip);
40
41
 
41
42
  // Content animation
42
43
  &[data-state='delayed-open'],
@@ -204,3 +205,15 @@
204
205
  transform: scale(0.95);
205
206
  }
206
207
  }
208
+
209
+ //----------------------------------------------------------------------------------------------------------------------
210
+ // Reduced motion: skip the scale-in so the tooltip appears in place.
211
+ //----------------------------------------------------------------------------------------------------------------------
212
+
213
+ @include reduced-motion
214
+ {
215
+ .sk-tooltip-content[data-state]
216
+ {
217
+ animation: none;
218
+ }
219
+ }
@@ -2,7 +2,7 @@
2
2
  // TreeView Component Styles
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
- @use '@/styles/mixins/cut-border' as *;
5
+ @use '@/styles/mixins' as *;
6
6
 
7
7
  $kinds: (neutral, primary, accent, info, success, warning, danger);
8
8
 
@@ -57,6 +57,11 @@ $kinds: (neutral, primary, accent, info, success, warning, danger);
57
57
  line-height: 1.5;
58
58
  outline: none;
59
59
 
60
+ @include touch
61
+ {
62
+ min-height: 44px;
63
+ }
64
+
60
65
  transition:
61
66
  background var(--sk-transition-duration-fast) var(--sk-transition-timing-default);
62
67
 
@@ -3,5 +3,6 @@
3
3
  //----------------------------------------------------------------------------------------------------------------------
4
4
 
5
5
  @forward 'cut-border';
6
+ @forward 'responsive';
6
7
 
7
8
  //----------------------------------------------------------------------------------------------------------------------