@placeholderco/placeholder-ui 1.0.12 → 2.1.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 (278) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +134 -130
  3. package/dist/app.css +178 -0
  4. package/dist/bootstrap.min.css +3600 -0
  5. package/dist/cards/GitCard.svelte +115 -0
  6. package/dist/cards/GitCard.svelte.d.ts +22 -0
  7. package/dist/display/Avatar.svelte +29 -17
  8. package/dist/display/Avatar.svelte.d.ts +12 -2
  9. package/dist/display/LinkCollection.svelte +40 -18
  10. package/dist/display/LinkCollection.svelte.d.ts +9 -2
  11. package/dist/display/Paper.svelte +31 -19
  12. package/dist/display/Paper.svelte.d.ts +12 -3
  13. package/dist/display/alert/Alert.svelte +129 -0
  14. package/dist/display/alert/Alert.svelte.d.ts +15 -0
  15. package/dist/display/alert/AlertVariant.d.ts +1 -0
  16. package/dist/display/alert/AlertVariant.js +1 -0
  17. package/dist/display/filetree/FileTree.svelte +259 -0
  18. package/dist/display/filetree/FileTree.svelte.d.ts +76 -0
  19. package/dist/display/filetree/FileTreeItem.svelte +396 -0
  20. package/dist/display/filetree/FileTreeItem.svelte.d.ts +40 -0
  21. package/dist/display/filetree/FileTreeNode.d.ts +46 -0
  22. package/dist/display/filetree/FileTreeNode.js +115 -0
  23. package/dist/display/filetree/index.d.ts +5 -0
  24. package/dist/display/filetree/index.js +3 -0
  25. package/dist/editors/CodeMirror.svelte +306 -0
  26. package/dist/editors/CodeMirror.svelte.d.ts +31 -0
  27. package/dist/editors/tiptap/LinkActionMenu.svelte +307 -0
  28. package/dist/editors/tiptap/LinkActionMenu.svelte.d.ts +8 -0
  29. package/dist/editors/tiptap/TipTap.svelte +856 -0
  30. package/dist/editors/tiptap/TipTap.svelte.d.ts +54 -0
  31. package/dist/editors/tiptap/TipTapBubble.svelte +790 -0
  32. package/dist/editors/tiptap/TipTapBubble.svelte.d.ts +44 -0
  33. package/dist/editors/tiptap/collaboration.d.ts +55 -0
  34. package/dist/editors/tiptap/collaboration.js +1 -0
  35. package/dist/editors/tiptap/extensions/Alert.d.ts +18 -0
  36. package/dist/editors/tiptap/extensions/Alert.js +72 -0
  37. package/dist/editors/tiptap/extensions/CodeBlockEditor.d.ts +21 -0
  38. package/dist/editors/tiptap/extensions/CodeBlockEditor.js +326 -0
  39. package/dist/editors/tiptap/extensions/Div.d.ts +19 -0
  40. package/dist/editors/tiptap/extensions/Div.js +89 -0
  41. package/dist/editors/tiptap/extensions/Span.d.ts +5 -0
  42. package/dist/editors/tiptap/extensions/Span.js +56 -0
  43. package/dist/editors/tiptap/extensions/codeBlockEditor.css +236 -0
  44. package/dist/editors/tiptap/extensions/codeBlockLanguages.d.ts +17 -0
  45. package/dist/editors/tiptap/extensions/codeBlockLanguages.js +124 -0
  46. package/dist/editors/tiptap/extensions/index.d.ts +7 -0
  47. package/dist/editors/tiptap/extensions/index.js +5 -0
  48. package/dist/editors/tiptap/toolbar/AlertButton.svelte +261 -0
  49. package/dist/editors/tiptap/toolbar/AlertButton.svelte.d.ts +7 -0
  50. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte +18 -0
  51. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte.d.ts +7 -0
  52. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte +18 -0
  53. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte.d.ts +7 -0
  54. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte +18 -0
  55. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte.d.ts +7 -0
  56. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte +18 -0
  57. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte.d.ts +7 -0
  58. package/dist/editors/tiptap/toolbar/BoldButton.svelte +18 -0
  59. package/dist/editors/tiptap/toolbar/BoldButton.svelte.d.ts +7 -0
  60. package/dist/editors/tiptap/toolbar/BulletListButton.svelte +18 -0
  61. package/dist/editors/tiptap/toolbar/BulletListButton.svelte.d.ts +7 -0
  62. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte +18 -0
  63. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte.d.ts +7 -0
  64. package/dist/editors/tiptap/toolbar/CodeButton.svelte +18 -0
  65. package/dist/editors/tiptap/toolbar/CodeButton.svelte.d.ts +7 -0
  66. package/dist/editors/tiptap/toolbar/ColorButton.svelte +299 -0
  67. package/dist/editors/tiptap/toolbar/ColorButton.svelte.d.ts +20 -0
  68. package/dist/editors/tiptap/toolbar/DocumentButton.svelte +58 -0
  69. package/dist/editors/tiptap/toolbar/DocumentButton.svelte.d.ts +9 -0
  70. package/dist/editors/tiptap/toolbar/HeadingButton.svelte +30 -0
  71. package/dist/editors/tiptap/toolbar/HeadingButton.svelte.d.ts +8 -0
  72. package/dist/editors/tiptap/toolbar/HtmlButton.svelte +68 -0
  73. package/dist/editors/tiptap/toolbar/HtmlButton.svelte.d.ts +7 -0
  74. package/dist/editors/tiptap/toolbar/ImageButton.svelte +54 -0
  75. package/dist/editors/tiptap/toolbar/ImageButton.svelte.d.ts +8 -0
  76. package/dist/editors/tiptap/toolbar/ItalicButton.svelte +18 -0
  77. package/dist/editors/tiptap/toolbar/ItalicButton.svelte.d.ts +7 -0
  78. package/dist/editors/tiptap/toolbar/LinkButton.svelte +257 -0
  79. package/dist/editors/tiptap/toolbar/LinkButton.svelte.d.ts +7 -0
  80. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte +18 -0
  81. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte.d.ts +7 -0
  82. package/dist/editors/tiptap/toolbar/RedoButton.svelte +18 -0
  83. package/dist/editors/tiptap/toolbar/RedoButton.svelte.d.ts +7 -0
  84. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte +18 -0
  85. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte.d.ts +7 -0
  86. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte +18 -0
  87. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte.d.ts +7 -0
  88. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte +18 -0
  89. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte.d.ts +7 -0
  90. package/dist/editors/tiptap/toolbar/TableButton.svelte +258 -0
  91. package/dist/editors/tiptap/toolbar/TableButton.svelte.d.ts +7 -0
  92. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte +84 -0
  93. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte.d.ts +10 -0
  94. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte +18 -0
  95. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte.d.ts +7 -0
  96. package/dist/editors/tiptap/toolbar/UndoButton.svelte +18 -0
  97. package/dist/editors/tiptap/toolbar/UndoButton.svelte.d.ts +7 -0
  98. package/dist/form/Autocomplete.svelte +86 -135
  99. package/dist/form/Autocomplete.svelte.d.ts +6 -8
  100. package/dist/form/AutocompleteMulti.svelte +385 -227
  101. package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
  102. package/dist/form/Checkbox.svelte +59 -54
  103. package/dist/form/Checkbox.svelte.d.ts +14 -5
  104. package/dist/form/Chips.svelte +29 -13
  105. package/dist/form/Chips.svelte.d.ts +16 -2
  106. package/dist/form/ColorPicker.svelte +957 -0
  107. package/dist/form/ColorPicker.svelte.d.ts +78 -0
  108. package/dist/form/ComboBox.svelte +30 -20
  109. package/dist/form/ComboBox.svelte.d.ts +1 -1
  110. package/dist/form/ComboBoxItemBuilder.svelte +161 -188
  111. package/dist/form/ComboBoxItemBuilder.svelte.d.ts +19 -2
  112. package/dist/form/ComboBoxMulti.svelte +38 -24
  113. package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
  114. package/dist/form/CronBuilder.svelte +84 -67
  115. package/dist/form/CronBuilder.svelte.d.ts +16 -3
  116. package/dist/form/DatePicker.svelte +148 -195
  117. package/dist/form/DateRangePicker.svelte +101 -98
  118. package/dist/form/DateTimePicker.svelte +167 -208
  119. package/dist/form/DateTimePicker.svelte.d.ts +10 -2
  120. package/dist/form/FormGroup.svelte +33 -10
  121. package/dist/form/FormGroup.svelte.d.ts +12 -2
  122. package/dist/form/Number.svelte +70 -47
  123. package/dist/form/Number.svelte.d.ts +36 -6
  124. package/dist/form/Radio.svelte +18 -18
  125. package/dist/form/RadioGroup.svelte +23 -12
  126. package/dist/form/RadioGroup.svelte.d.ts +13 -2
  127. package/dist/form/SegmentedControl.svelte +76 -56
  128. package/dist/form/SegmentedControl.svelte.d.ts +9 -4
  129. package/dist/form/Select.svelte +150 -233
  130. package/dist/form/Select.svelte.d.ts +29 -5
  131. package/dist/form/SelectMulti.svelte +163 -277
  132. package/dist/form/SelectMulti.svelte.d.ts +36 -7
  133. package/dist/form/Slider.svelte +183 -269
  134. package/dist/form/Slider.svelte.d.ts +32 -17
  135. package/dist/form/StringArrayBuilder.svelte +249 -0
  136. package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
  137. package/dist/form/Switch.svelte +164 -106
  138. package/dist/form/Switch.svelte.d.ts +22 -3
  139. package/dist/form/TextArea.svelte +49 -29
  140. package/dist/form/TextArea.svelte.d.ts +23 -3
  141. package/dist/form/Textbox.svelte +69 -68
  142. package/dist/form/Textbox.svelte.d.ts +32 -4
  143. package/dist/form/TimePicker.svelte +42 -47
  144. package/dist/form/TimePicker.svelte.d.ts +12 -2
  145. package/dist/form/comboBoxCore.svelte.d.ts +99 -0
  146. package/dist/form/comboBoxCore.svelte.js +243 -0
  147. package/dist/icon/Icon.svelte +8 -3
  148. package/dist/icon/Icon.svelte.d.ts +8 -3
  149. package/dist/icon/file-type-bmp.svg +1 -0
  150. package/dist/icon/file-type-csv.svg +1 -0
  151. package/dist/icon/file-type-doc.svg +1 -0
  152. package/dist/icon/file-type-docx.svg +1 -0
  153. package/dist/icon/file-type-jpg.svg +1 -0
  154. package/dist/icon/file-type-pdf.svg +1 -0
  155. package/dist/icon/file-type-png.svg +1 -0
  156. package/dist/icon/file-type-ppt.svg +1 -0
  157. package/dist/icon/file-type-svg.svg +1 -0
  158. package/dist/icon/file-type-txt.svg +1 -0
  159. package/dist/icon/file-type-xls.svg +1 -0
  160. package/dist/icon/file-type-zip.svg +1 -0
  161. package/dist/icon/index.d.ts +166 -151
  162. package/dist/icon/index.js +166 -152
  163. package/dist/icon/logo-placeholder.svg +6 -0
  164. package/dist/icon/source-code.svg +1 -0
  165. package/dist/icon/sun-moon.svg +1 -0
  166. package/dist/icon/table.svg +6 -0
  167. package/dist/index.d.ts +146 -82
  168. package/dist/index.js +77 -78
  169. package/dist/layout/AppShell.svelte +12 -162
  170. package/dist/layout/AppShell.svelte.d.ts +6 -27
  171. package/dist/layout/CustomNavbar.svelte +9 -7
  172. package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
  173. package/dist/layout/Navbar.svelte +161 -129
  174. package/dist/layout/Navbar.svelte.d.ts +29 -15
  175. package/dist/layout/NavbarItemDisplay.svelte +2 -2
  176. package/dist/layout/NavbarItemView.svelte +182 -0
  177. package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
  178. package/dist/layout/Sidenav.svelte +280 -341
  179. package/dist/layout/Sidenav.svelte.d.ts +36 -4
  180. package/dist/models/ComboBoxItem.d.ts +2 -0
  181. package/dist/models/Employee.d.ts +53 -0
  182. package/dist/models/Employee.js +23 -0
  183. package/dist/models/Hyperlink.d.ts +3 -1
  184. package/dist/models/LinkCollectionItem.d.ts +3 -1
  185. package/dist/models/NavbarItem.d.ts +6 -2
  186. package/dist/theme.svelte.d.ts +0 -1
  187. package/dist/theme.svelte.js +46 -58
  188. package/dist/ui/Accordion.svelte +81 -242
  189. package/dist/ui/Accordion.svelte.d.ts +37 -14
  190. package/dist/ui/AccordionItem.svelte +303 -0
  191. package/dist/ui/AccordionItem.svelte.d.ts +21 -0
  192. package/dist/ui/ActionIcon.svelte +25 -21
  193. package/dist/ui/ActionIcon.svelte.d.ts +15 -2
  194. package/dist/ui/Badge.svelte +163 -171
  195. package/dist/ui/Badge.svelte.d.ts +13 -5
  196. package/dist/ui/Button.svelte +178 -205
  197. package/dist/ui/Button.svelte.d.ts +19 -2
  198. package/dist/ui/ButtonVariant.d.ts +15 -1
  199. package/dist/ui/ContextMenu.svelte +146 -0
  200. package/dist/ui/ContextMenu.svelte.d.ts +37 -0
  201. package/dist/ui/ContextMenuList.svelte +188 -0
  202. package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
  203. package/dist/ui/Dialog.svelte +183 -111
  204. package/dist/ui/Dialog.svelte.d.ts +21 -4
  205. package/dist/ui/Drawer.svelte +237 -184
  206. package/dist/ui/Drawer.svelte.d.ts +20 -2
  207. package/dist/ui/Dropdown.svelte +24 -14
  208. package/dist/ui/Dropdown.svelte.d.ts +11 -2
  209. package/dist/ui/Dropzone.svelte +159 -57
  210. package/dist/ui/Dropzone.svelte.d.ts +29 -2
  211. package/dist/ui/Link.svelte +12 -4
  212. package/dist/ui/Link.svelte.d.ts +8 -2
  213. package/dist/ui/Loader.svelte +23 -18
  214. package/dist/ui/Loader.svelte.d.ts +5 -2
  215. package/dist/ui/Logo.svelte +37 -0
  216. package/dist/ui/Logo.svelte.d.ts +16 -0
  217. package/dist/ui/MultiSortable.svelte +287 -0
  218. package/dist/ui/MultiSortable.svelte.d.ts +50 -0
  219. package/dist/ui/Pagination.svelte +15 -9
  220. package/dist/ui/Pagination.svelte.d.ts +6 -2
  221. package/dist/ui/Popover.svelte +43 -65
  222. package/dist/ui/Popover.svelte.d.ts +14 -5
  223. package/dist/ui/ProgressBar.svelte +28 -30
  224. package/dist/ui/ProgressBarVariant.d.ts +7 -1
  225. package/dist/ui/SegmentedControl.svelte +0 -0
  226. package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
  227. package/dist/ui/Sortable.svelte +163 -0
  228. package/dist/ui/Sortable.svelte.d.ts +47 -0
  229. package/dist/ui/Table.svelte +383 -80
  230. package/dist/ui/Table.svelte.d.ts +43 -2
  231. package/dist/ui/Tabs.svelte +22 -18
  232. package/dist/ui/Tabs.svelte.d.ts +6 -2
  233. package/dist/ui/ThemeSwitcher.svelte +26 -7
  234. package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
  235. package/dist/ui/Tooltip.svelte +312 -180
  236. package/dist/ui/Tooltip.svelte.d.ts +4 -3
  237. package/dist/uiTheme.svelte.d.ts +86 -0
  238. package/dist/uiTheme.svelte.js +214 -0
  239. package/dist/util/DateFunctions.js +1 -1
  240. package/dist/util/DragDrop.d.ts +50 -0
  241. package/dist/util/DragDrop.js +154 -0
  242. package/dist/util/NavigateTo.js +2 -2
  243. package/dist/util/dayjs.d.ts +4 -0
  244. package/dist/util/dayjs.js +15 -0
  245. package/package.json +66 -26
  246. package/dist/display/Alert.svelte +0 -179
  247. package/dist/display/Alert.svelte.d.ts +0 -13
  248. package/dist/form/FileInput.svelte +0 -235
  249. package/dist/form/FileInput.svelte.d.ts +0 -23
  250. package/dist/form/PasswordInput.svelte +0 -253
  251. package/dist/form/PasswordInput.svelte.d.ts +0 -34
  252. package/dist/form/Rating.svelte +0 -235
  253. package/dist/form/Rating.svelte.d.ts +0 -21
  254. package/dist/styles/components.css +0 -199
  255. package/dist/styles/dark.css +0 -146
  256. package/dist/styles/index.css +0 -116
  257. package/dist/styles/reset.css +0 -110
  258. package/dist/styles/semantic.css +0 -86
  259. package/dist/styles/tokens.css +0 -203
  260. package/dist/styles/utilities.css +0 -523
  261. package/dist/ui/Breadcrumbs.svelte +0 -131
  262. package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
  263. package/dist/ui/LoadingOverlay.svelte +0 -53
  264. package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
  265. package/dist/ui/Progress.svelte +0 -191
  266. package/dist/ui/Progress.svelte.d.ts +0 -15
  267. package/dist/ui/RingProgress.svelte +0 -141
  268. package/dist/ui/RingProgress.svelte.d.ts +0 -18
  269. package/dist/ui/Skeleton.svelte +0 -85
  270. package/dist/ui/Skeleton.svelte.d.ts +0 -12
  271. package/dist/ui/Stepper.svelte +0 -355
  272. package/dist/ui/Stepper.svelte.d.ts +0 -24
  273. package/dist/ui/Timeline.svelte +0 -225
  274. package/dist/ui/Timeline.svelte.d.ts +0 -23
  275. /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
  276. /package/dist/{actions → util}/ClickOutside.js +0 -0
  277. /package/dist/{transitions → util}/Transitions.d.ts +0 -0
  278. /package/dist/{transitions → util}/Transitions.js +0 -0
@@ -1,4 +1,17 @@
1
1
  <script lang="ts" module>
2
+ import type { ButtonVariant } from '../ui/ButtonVariant.js';
3
+
4
+ export interface SidenavItemAction {
5
+ /** SVG icon to display in the action button */
6
+ iconSvg: string;
7
+ /** Accessible label, also shown as a tooltip on hover */
8
+ label?: string;
9
+ /** Visual style variant for the action button */
10
+ variant?: ButtonVariant;
11
+ /** Click handler; receives the item the action belongs to and the event */
12
+ onclick?: (item: SidenavItem, event: MouseEvent) => void;
13
+ }
14
+
2
15
  export interface SidenavItem {
3
16
  label: string;
4
17
  href?: string;
@@ -6,6 +19,8 @@
6
19
  active?: boolean;
7
20
  items?: SidenavItem[];
8
21
  onclick?: () => void;
22
+ /** Action buttons shown on the right of the item (e.g. edit, delete) */
23
+ actions?: SidenavItemAction[];
9
24
  }
10
25
 
11
26
  export interface SidenavSection {
@@ -15,69 +30,83 @@
15
30
  </script>
16
31
 
17
32
  <script lang="ts">
18
- import type { Snippet } from "svelte";
19
- import Icon from "../icon/Icon.svelte";
20
- import Textbox from "../form/Textbox.svelte";
21
- import ActionIcon from "../ui/ActionIcon.svelte";
22
- import Drawer from "../ui/Drawer.svelte";
23
- import { iconChevronRight, iconSearch, iconX } from "../icon/index.js";
24
- import { slide } from "svelte/transition";
25
- import { viewportState } from "../theme.svelte.js";
26
-
27
- interface Props {
33
+ import type { Snippet } from 'svelte';
34
+ import Icon from '../icon/Icon.svelte';
35
+ import Textbox from '../form/Textbox.svelte';
36
+ import ActionIcon from '../ui/ActionIcon.svelte';
37
+ import Drawer from '../ui/Drawer.svelte';
38
+ import { iconChevronRight, iconSearch, iconX } from '../icon/index.js';
39
+ import { slide } from 'svelte/transition';
40
+ import { viewportState } from '../theme.svelte.js';
41
+ import Link from '../ui/Link.svelte';
42
+
43
+ export interface SidenavProps {
44
+ /** Navigation sections to display */
28
45
  sections?: SidenavSection[];
46
+ /** Sections pinned to the bottom of the sidenav */
29
47
  bottomSections?: SidenavSection[];
48
+ /** Whether the sidenav is in collapsed (icon-only) mode */
30
49
  collapsed?: boolean;
50
+ /** Width of the expanded sidenav */
31
51
  width?: string;
52
+ /** Width when collapsed */
32
53
  collapsedWidth?: string;
54
+ /** Additional CSS classes */
33
55
  class?: string;
56
+ /** Custom header content */
34
57
  header?: Snippet;
58
+ /** Custom footer content */
35
59
  footer?: Snippet;
60
+ /** Enable search/filter for navigation items */
36
61
  searchable?: boolean;
62
+ /** Placeholder text for search input */
37
63
  searchPlaceholder?: string;
64
+ /** Callback when a navigation item is clicked */
38
65
  onItemClick?: (item: SidenavItem) => void;
39
- // Responsive props
66
+ /** When item action buttons are shown: on hover/focus or always visible.
67
+ * Note: in the mobile drawer they are always visible (touch has no hover). */
68
+ actionsVisible?: 'hover' | 'always';
69
+ /** Enable responsive behavior (drawer on mobile) */
40
70
  responsive?: boolean;
71
+ /** Breakpoint (px) below which mobile mode activates */
41
72
  mobileBreakpoint?: number;
73
+ /** Whether the mobile drawer is open (bindable) */
42
74
  mobileOpen?: boolean;
75
+ /** Title shown in mobile drawer header */
43
76
  mobileTitle?: string;
44
- mobileDrawerPosition?: "left" | "right";
77
+ /** Position of the mobile drawer */
78
+ mobileDrawerPosition?: 'left' | 'right';
45
79
  }
46
80
 
47
81
  let {
48
82
  sections = [],
49
83
  bottomSections = [],
50
84
  collapsed = false,
51
- width = "260px",
52
- collapsedWidth = "60px",
53
- class: className = "",
85
+ width = '260px',
86
+ collapsedWidth = '60px',
87
+ class: className = '',
54
88
  header,
55
89
  footer,
56
90
  searchable = false,
57
- searchPlaceholder = "Search...",
91
+ searchPlaceholder = 'Search...',
58
92
  onItemClick,
93
+ actionsVisible = 'hover',
59
94
  // Responsive props
60
95
  responsive = false,
61
96
  mobileBreakpoint = 768,
62
97
  mobileOpen = $bindable(false),
63
- mobileTitle = "",
64
- mobileDrawerPosition = "left",
65
- }: Props = $props();
98
+ mobileTitle = '',
99
+ mobileDrawerPosition = 'left'
100
+ }: SidenavProps = $props();
66
101
 
67
- let searchQuery = $state("");
102
+ let searchQuery = $state('');
68
103
 
69
104
  // Track if we're in mobile mode using viewportState
70
- const isMobile = $derived(
71
- responsive && viewportState.isBelow(mobileBreakpoint),
72
- );
105
+ const isMobile = $derived(responsive && viewportState.isBelow(mobileBreakpoint));
73
106
 
74
107
  // Auto-close drawer when resizing to desktop
75
108
  $effect(() => {
76
- if (
77
- responsive &&
78
- !viewportState.isBelow(mobileBreakpoint) &&
79
- mobileOpen
80
- ) {
109
+ if (responsive && !viewportState.isBelow(mobileBreakpoint) && mobileOpen) {
81
110
  mobileOpen = false;
82
111
  }
83
112
  });
@@ -89,11 +118,7 @@
89
118
  const lowerText = text.toLowerCase();
90
119
 
91
120
  let queryIndex = 0;
92
- for (
93
- let i = 0;
94
- i < lowerText.length && queryIndex < lowerQuery.length;
95
- i++
96
- ) {
121
+ for (let i = 0; i < lowerText.length && queryIndex < lowerQuery.length; i++) {
97
122
  if (lowerText[i] === lowerQuery[queryIndex]) {
98
123
  queryIndex++;
99
124
  }
@@ -112,12 +137,7 @@
112
137
  // Check if item matches
113
138
  if (fuzzyMatch(searchQuery, item.label)) return true;
114
139
  // Check if any sub-item matches
115
- if (
116
- item.items?.some((sub) =>
117
- fuzzyMatch(searchQuery, sub.label),
118
- )
119
- )
120
- return true;
140
+ if (item.items?.some((sub) => fuzzyMatch(searchQuery, sub.label))) return true;
121
141
  return false;
122
142
  })
123
143
  .map((item) => {
@@ -125,9 +145,7 @@
125
145
  if (item.items) {
126
146
  return {
127
147
  ...item,
128
- items: item.items.filter((sub) =>
129
- fuzzyMatch(searchQuery, sub.label),
130
- ),
148
+ items: item.items.filter((sub) => fuzzyMatch(searchQuery, sub.label))
131
149
  };
132
150
  }
133
151
  return item;
@@ -142,7 +160,7 @@
142
160
  let filteredBottomSections = $derived(filterSections(bottomSections));
143
161
 
144
162
  function clearSearch() {
145
- searchQuery = "";
163
+ searchQuery = '';
146
164
  }
147
165
 
148
166
  let expandedSections: Set<string> = $state(new Set());
@@ -175,7 +193,7 @@
175
193
  }
176
194
  }
177
195
 
178
- function handleLinkClick(item: SidenavItem) {
196
+ function handleNavItemClick(item: SidenavItem) {
179
197
  onItemClick?.(item);
180
198
  item.onclick?.();
181
199
  // Close drawer on mobile after navigation
@@ -190,8 +208,119 @@
190
208
  // Close drawer after clicking an item
191
209
  mobileOpen = false;
192
210
  }
211
+
212
+ function handleActionClick(action: SidenavItemAction, item: SidenavItem, e: MouseEvent) {
213
+ // Keep the action independent of the item's own navigation/expand behaviour
214
+ e.stopPropagation();
215
+ action.onclick?.(item, e);
216
+ }
193
217
  </script>
194
218
 
219
+ {#snippet itemActions(item: SidenavItem)}
220
+ {#if item.actions && item.actions.length > 0 && !collapsed}
221
+ <span class="nav-actions" class:always={actionsVisible === 'always'}>
222
+ {#each item.actions as action}
223
+ <ActionIcon
224
+ svg={action.iconSvg}
225
+ size="0.875rem"
226
+ variant={action.variant ?? 'secondary-subtle'}
227
+ tooltip={action.label}
228
+ onclick={(e) => handleActionClick(action, item, e)}
229
+ />
230
+ {/each}
231
+ </span>
232
+ {/if}
233
+ {/snippet}
234
+
235
+ {#snippet sectionList(sects: SidenavSection[])}
236
+ {#each sects as section}
237
+ {#if section.title && !collapsed}
238
+ <div class="section-title">{section.title}</div>
239
+ {/if}
240
+ <ul class="nav-list">
241
+ {#each section.items as item}
242
+ <li class="nav-item">
243
+ <div class="nav-item-row" class:active={item.active}>
244
+ {#if item.href && !(item.items && item.items.length > 0)}
245
+ <Link
246
+ href={item.href}
247
+ class="nav-link {item.active ? 'active' : ''}"
248
+ onclick={() => handleNavItemClick(item)}
249
+ >
250
+ {#if item.iconSvg}
251
+ <Icon svg={item.iconSvg} size="1.25em" />
252
+ {/if}
253
+ {#if !collapsed}
254
+ <span class="nav-label">{item.label}</span>
255
+ {/if}
256
+ </Link>
257
+ {:else}
258
+ <button
259
+ type="button"
260
+ class="nav-link"
261
+ class:active={item.active}
262
+ class:has-children={item.items && item.items.length > 0}
263
+ title={collapsed ? item.label : undefined}
264
+ onclick={(e) => handleItemClick(item, e)}
265
+ >
266
+ {#if item.iconSvg}
267
+ <Icon svg={item.iconSvg} size="1.25em" />
268
+ {/if}
269
+ {#if !collapsed}
270
+ <span class="nav-label">{item.label}</span>
271
+ {#if item.items && item.items.length > 0}
272
+ <Icon
273
+ svg={iconChevronRight}
274
+ size="0.75em"
275
+ class="chevron {isExpanded(item.label) ? 'expanded' : ''}"
276
+ />
277
+ {/if}
278
+ {/if}
279
+ </button>
280
+ {/if}
281
+ {@render itemActions(item)}
282
+ </div>
283
+ {#if item.items && item.items.length > 0 && isExpanded(item.label) && !collapsed}
284
+ <ul class="sub-nav-list" transition:slide={{ duration: 200 }}>
285
+ {#each item.items as subItem}
286
+ <li class="sub-nav-item">
287
+ <div class="nav-item-row" class:active={subItem.active}>
288
+ {#if subItem.href}
289
+ <Link
290
+ href={subItem.href}
291
+ class="sub-nav-link {subItem.active ? 'active' : ''}"
292
+ onclick={() => handleNavItemClick(subItem)}
293
+ >
294
+ {#if subItem.iconSvg}
295
+ <Icon svg={subItem.iconSvg} size="1em" />
296
+ {/if}
297
+ <span class="nav-label">{subItem.label}</span>
298
+ </Link>
299
+ {:else}
300
+ <button
301
+ type="button"
302
+ class="sub-nav-link"
303
+ class:active={subItem.active}
304
+ onclick={() => handleNavItemClick(subItem)}
305
+ >
306
+ {#if subItem.iconSvg}
307
+ <Icon svg={subItem.iconSvg} size="1em" />
308
+ {/if}
309
+ <span class="nav-label">{subItem.label}</span>
310
+ </button>
311
+ {/if}
312
+ {@render itemActions(subItem)}
313
+ </div>
314
+ </li>
315
+ {/each}
316
+ </ul>
317
+ {/if}
318
+ </li>
319
+ {/each}
320
+ </ul>
321
+ {/each}
322
+ {/snippet}
323
+
195
324
  {#if !isMobile}
196
325
  <!-- Desktop: Regular Sidenav -->
197
326
  <aside
@@ -229,249 +358,12 @@
229
358
  {/if}
230
359
 
231
360
  <nav class="sidenav-content">
232
- {#each filteredSections as section}
233
- {#if section.title && !collapsed}
234
- <div class="section-title">{section.title}</div>
235
- {/if}
236
- <ul class="nav-list">
237
- {#each section.items as item}
238
- <li class="nav-item">
239
- {#if item.href && !(item.items && item.items.length > 0)}
240
- <a
241
- href={item.href}
242
- class="nav-link"
243
- class:active={item.active}
244
- title={collapsed ? item.label : undefined}
245
- onclick={() => handleLinkClick(item)}
246
- >
247
- {#if item.iconSvg}
248
- <Icon
249
- svg={item.iconSvg}
250
- size="1.25em"
251
- />
252
- {/if}
253
- {#if !collapsed}
254
- <span class="nav-label"
255
- >{item.label}</span
256
- >
257
- {/if}
258
- </a>
259
- {:else}
260
- <button
261
- type="button"
262
- class="nav-link"
263
- class:active={item.active}
264
- class:has-children={item.items &&
265
- item.items.length > 0}
266
- title={collapsed ? item.label : undefined}
267
- onclick={(e) => handleItemClick(item, e)}
268
- >
269
- {#if item.iconSvg}
270
- <Icon
271
- svg={item.iconSvg}
272
- size="1.25em"
273
- />
274
- {/if}
275
- {#if !collapsed}
276
- <span class="nav-label"
277
- >{item.label}</span
278
- >
279
- {#if item.items && item.items.length > 0}
280
- <Icon
281
- svg={iconChevronRight}
282
- size="0.75em"
283
- class="chevron {isExpanded(
284
- item.label,
285
- )
286
- ? 'expanded'
287
- : ''}"
288
- />
289
- {/if}
290
- {/if}
291
- </button>
292
- {#if item.items && item.items.length > 0 && isExpanded(item.label) && !collapsed}
293
- <ul
294
- class="sub-nav-list"
295
- transition:slide={{ duration: 200 }}
296
- >
297
- {#each item.items as subItem}
298
- <li class="sub-nav-item">
299
- {#if subItem.href}
300
- <a
301
- href={subItem.href}
302
- class="sub-nav-link"
303
- class:active={subItem.active}
304
- onclick={() =>
305
- handleLinkClick(
306
- subItem,
307
- )}
308
- >
309
- {#if subItem.iconSvg}
310
- <Icon
311
- svg={subItem.iconSvg}
312
- size="1em"
313
- />
314
- {/if}
315
- <span
316
- >{subItem.label}</span
317
- >
318
- </a>
319
- {:else}
320
- <button
321
- type="button"
322
- class="sub-nav-link"
323
- class:active={subItem.active}
324
- onclick={() =>
325
- handleLinkClick(
326
- subItem,
327
- )}
328
- >
329
- {#if subItem.iconSvg}
330
- <Icon
331
- svg={subItem.iconSvg}
332
- size="1em"
333
- />
334
- {/if}
335
- <span
336
- >{subItem.label}</span
337
- >
338
- </button>
339
- {/if}
340
- </li>
341
- {/each}
342
- </ul>
343
- {/if}
344
- {/if}
345
- </li>
346
- {/each}
347
- </ul>
348
- {/each}
361
+ {@render sectionList(filteredSections)}
349
362
  </nav>
350
363
 
351
364
  {#if filteredBottomSections.length > 0}
352
365
  <nav class="sidenav-bottom">
353
- {#each filteredBottomSections as section}
354
- {#if section.title && !collapsed}
355
- <div class="section-title">{section.title}</div>
356
- {/if}
357
- <ul class="nav-list">
358
- {#each section.items as item}
359
- <li class="nav-item">
360
- {#if item.href && !(item.items && item.items.length > 0)}
361
- <a
362
- href={item.href}
363
- class="nav-link"
364
- class:active={item.active}
365
- title={collapsed
366
- ? item.label
367
- : undefined}
368
- onclick={() => handleLinkClick(item)}
369
- >
370
- {#if item.iconSvg}
371
- <Icon
372
- svg={item.iconSvg}
373
- size="1.25em"
374
- />
375
- {/if}
376
- {#if !collapsed}
377
- <span class="nav-label"
378
- >{item.label}</span
379
- >
380
- {/if}
381
- </a>
382
- {:else}
383
- <button
384
- type="button"
385
- class="nav-link"
386
- class:active={item.active}
387
- class:has-children={item.items &&
388
- item.items.length > 0}
389
- title={collapsed
390
- ? item.label
391
- : undefined}
392
- onclick={(e) =>
393
- handleItemClick(item, e)}
394
- >
395
- {#if item.iconSvg}
396
- <Icon
397
- svg={item.iconSvg}
398
- size="1.25em"
399
- />
400
- {/if}
401
- {#if !collapsed}
402
- <span class="nav-label"
403
- >{item.label}</span
404
- >
405
- {#if item.items && item.items.length > 0}
406
- <Icon
407
- svg={iconChevronRight}
408
- size="0.75em"
409
- class="chevron {isExpanded(
410
- item.label,
411
- )
412
- ? 'expanded'
413
- : ''}"
414
- />
415
- {/if}
416
- {/if}
417
- </button>
418
- {#if item.items && item.items.length > 0 && isExpanded(item.label) && !collapsed}
419
- <ul
420
- class="sub-nav-list"
421
- transition:slide={{ duration: 200 }}
422
- >
423
- {#each item.items as subItem}
424
- <li class="sub-nav-item">
425
- {#if subItem.href}
426
- <a
427
- href={subItem.href}
428
- class="sub-nav-link"
429
- class:active={subItem.active}
430
- onclick={() =>
431
- handleLinkClick(
432
- subItem,
433
- )}
434
- >
435
- {#if subItem.iconSvg}
436
- <Icon
437
- svg={subItem.iconSvg}
438
- size="1em"
439
- />
440
- {/if}
441
- <span
442
- >{subItem.label}</span
443
- >
444
- </a>
445
- {:else}
446
- <button
447
- type="button"
448
- class="sub-nav-link"
449
- class:active={subItem.active}
450
- onclick={() =>
451
- handleLinkClick(
452
- subItem,
453
- )}
454
- >
455
- {#if subItem.iconSvg}
456
- <Icon
457
- svg={subItem.iconSvg}
458
- size="1em"
459
- />
460
- {/if}
461
- <span
462
- >{subItem.label}</span
463
- >
464
- </button>
465
- {/if}
466
- </li>
467
- {/each}
468
- </ul>
469
- {/if}
470
- {/if}
471
- </li>
472
- {/each}
473
- </ul>
474
- {/each}
366
+ {@render sectionList(filteredBottomSections)}
475
367
  </nav>
476
368
  {/if}
477
369
 
@@ -492,6 +384,7 @@
492
384
  {sections}
493
385
  {bottomSections}
494
386
  {width}
387
+ actionsVisible="always"
495
388
  onItemClick={handleDrawerItemClick}
496
389
  >
497
390
  {#snippet header()}
@@ -513,12 +406,13 @@
513
406
  flex-direction: column;
514
407
  width: var(--sidenav-width);
515
408
  min-width: var(--sidenav-width);
516
- height: 100%;
517
- background-color: var(--pui-paper-body-bg);
409
+ background-color: var(--paper-body-bg);
410
+ border-right: 1px solid var(--border-color);
518
411
  transition:
519
- width var(--pui-transition-fast) var(--pui-ease-in-out),
520
- min-width var(--pui-transition-fast) var(--pui-ease-in-out);
412
+ width 0.2s ease,
413
+ min-width 0.2s ease;
521
414
  overflow: hidden;
415
+ height: var(--page-content-height);
522
416
  }
523
417
 
524
418
  .sidenav.collapsed {
@@ -527,14 +421,14 @@
527
421
  }
528
422
 
529
423
  .sidenav-header {
530
- padding: var(--pui-spacing-4);
531
- border-bottom: 1px solid var(--pui-border-default);
424
+ padding: 1rem;
425
+ border-bottom: 1px solid var(--border-color);
532
426
  flex-shrink: 0;
533
427
  }
534
428
 
535
429
  .sidenav-search {
536
- padding: var(--pui-spacing-2) var(--pui-spacing-3);
537
- border-bottom: 1px solid var(--pui-border-default);
430
+ padding: 0.5rem 0.75rem;
431
+ border-bottom: 1px solid var(--border-color);
538
432
  flex-shrink: 0;
539
433
  }
540
434
 
@@ -544,7 +438,7 @@
544
438
 
545
439
  .sidenav-search :global(.search-clear-btn) {
546
440
  position: absolute;
547
- right: var(--pui-spacing-1);
441
+ right: 0.25rem;
548
442
  top: 50%;
549
443
  transform: translateY(-50%);
550
444
  }
@@ -557,25 +451,27 @@
557
451
 
558
452
  .sidenav-bottom {
559
453
  flex-shrink: 0;
560
- border-top: 1px solid var(--pui-border-default);
561
- padding: var(--pui-spacing-2) 0;
454
+ border-top: 1px solid var(--border-color);
455
+ padding: 0.5rem 0;
562
456
  }
563
457
 
564
458
  .sidenav-footer {
565
- padding: var(--pui-spacing-4);
566
- border-top: 1px solid var(--pui-border-default);
459
+ padding: 1rem;
460
+ border-top: 1px solid var(--border-color);
567
461
  flex-shrink: 0;
568
462
  }
569
463
 
570
464
  .section-title {
571
- padding: var(--pui-spacing-3) var(--pui-spacing-4) var(--pui-spacing-2);
465
+ padding: 0.75rem 1rem 0.5rem;
466
+ font-size: 0.75rem;
467
+ font-weight: 600;
572
468
  text-transform: uppercase;
573
469
  letter-spacing: 0.05em;
574
- color: var(--pui-text-muted);
575
- border-top: 1px solid var(--pui-border-default);
576
- border-bottom: 1px solid var(--pui-border-default);
470
+ color: var(--text-muted, #6b7280);
471
+ border-top: 1px solid var(--border-color);
472
+ border-bottom: 1px solid var(--border-color);
577
473
  }
578
-
474
+
579
475
  .section-title:first-child {
580
476
  border-top: none;
581
477
  }
@@ -590,44 +486,63 @@
590
486
  margin: 0;
591
487
  }
592
488
 
593
- .nav-link {
489
+ /* Row wraps the nav link/button together with its action buttons. The row (not the
490
+ link) carries the hover/active background so it spans the full width, including the
491
+ action-button area. */
492
+ .nav-item-row {
493
+ display: flex;
494
+ align-items: center;
495
+ transition: background-color 0.15s ease;
496
+ }
497
+
498
+ .nav-item-row :global(.nav-link),
499
+ .nav-item-row button.nav-link,
500
+ .nav-item-row :global(.sub-nav-link),
501
+ .nav-item-row button.sub-nav-link {
502
+ flex: 1;
503
+ min-width: 0;
504
+ }
505
+
506
+ .nav-item :global(.nav-link),
507
+ .nav-item button.nav-link {
594
508
  display: flex;
595
509
  align-items: center;
596
- gap: var(--pui-spacing-3);
510
+ gap: 0.75rem;
597
511
  width: 100%;
598
- padding: var(--pui-spacing-2_5) var(--pui-spacing-4);
599
- color: var(--pui-text-primary);
512
+ padding: 0.625rem 1rem;
513
+ font-size: 0.875rem;
514
+ font-weight: 500;
515
+ color: var(--text-color);
600
516
  background: none;
601
517
  border: none;
602
518
  text-decoration: none;
603
519
  cursor: pointer;
604
- transition:
605
- background-color var(--pui-transition-fast) var(--pui-ease-in-out),
606
- color var(--pui-transition-fast) var(--pui-ease-in-out);
520
+ transition: color 0.15s ease;
607
521
  text-align: left;
608
522
  }
609
523
 
610
- .collapsed .nav-link {
524
+ .collapsed .nav-item :global(.nav-link),
525
+ .collapsed .nav-item button.nav-link {
611
526
  justify-content: center;
612
- padding: var(--pui-spacing-3);
527
+ padding: 0.75rem;
613
528
  }
614
529
 
615
- .nav-link:hover {
616
- background-color: var(--pui-bg-hover);
530
+ .nav-item > .nav-item-row:hover {
531
+ background-color: rgba(var(--ui-primary-rgbc), 0.08);
617
532
  }
618
533
 
619
- :global(.dark) .nav-link:hover {
620
- background-color: var(--pui-bg-hover);
534
+ :global(.dark) .nav-item > .nav-item-row:hover {
535
+ background-color: rgba(var(--ui-primary-rgbc), 0.2);
621
536
  }
622
537
 
623
- .nav-link.active {
624
- background-color: var(--pui-bg-active);
625
- border-left: 3px solid var(--pui-color-secondary);
538
+ .nav-item > .nav-item-row.active {
539
+ background-color: rgba(var(--ui-accent-rgbc), 0.2);
540
+ border-left: 3px solid var(--ui-accent);
626
541
  }
627
542
 
628
- :global(.dark) .nav-link.active {
629
- background-color: var(--pui-bg-active);
630
- border-left: 3px solid var(--pui-color-primary);
543
+ :global(.dark) .nav-item > .nav-item-row.active {
544
+ background-color: rgba(var(--ui-primary-rgbc), 0.3);
545
+ border-left: 3px solid var(--ui-primary);
631
546
  }
632
547
 
633
548
  .nav-label {
@@ -637,8 +552,27 @@
637
552
  text-overflow: ellipsis;
638
553
  }
639
554
 
555
+ /* Action buttons: revealed on hover/focus by default, or always when opted in */
556
+ .nav-actions {
557
+ display: flex;
558
+ align-items: center;
559
+ gap: 0.125rem;
560
+ flex-shrink: 0;
561
+ padding-right: 0.5rem;
562
+ opacity: 0;
563
+ pointer-events: none;
564
+ transition: opacity 0.15s ease;
565
+ }
566
+
567
+ .nav-actions.always,
568
+ .nav-item-row:hover .nav-actions,
569
+ .nav-item-row:focus-within .nav-actions {
570
+ opacity: 1;
571
+ pointer-events: auto;
572
+ }
573
+
640
574
  .nav-link :global(.chevron) {
641
- transition: transform var(--pui-transition-fast) var(--pui-ease-in-out);
575
+ transition: transform 0.2s ease;
642
576
  flex-shrink: 0;
643
577
  }
644
578
 
@@ -650,49 +584,54 @@
650
584
  list-style: none;
651
585
  margin: 0;
652
586
  padding: 0;
653
- background-color: var(--pui-bg-subtle);
587
+ background-color: rgba(var(--ui-primary-rgbc), 0.03);
654
588
  }
655
589
 
656
590
  :global(.dark) .sub-nav-list {
657
- background-color: var(--pui-bg-subtle);
591
+ background-color: rgba(0, 0, 0, 0.2);
658
592
  }
659
593
 
660
594
  .sub-nav-item {
661
595
  margin: 0;
662
596
  }
663
597
 
664
- .sub-nav-link {
598
+ .sub-nav-item :global(.sub-nav-link),
599
+ .sub-nav-item button.sub-nav-link {
665
600
  display: flex;
666
601
  align-items: center;
667
- gap: var(--pui-spacing-2);
602
+ gap: 0.5rem;
668
603
  width: 100%;
669
- padding: var(--pui-spacing-2) var(--pui-spacing-4) var(--pui-spacing-2)
670
- var(--pui-spacing-11);
671
- color: var(--pui-text-primary);
604
+ padding: 0.5rem 1rem 0.5rem 2.75rem;
605
+ font-size: 0.8125rem;
606
+ font-weight: 400;
607
+ color: var(--text-color);
672
608
  background: none;
673
609
  border: none;
674
610
  text-decoration: none;
675
611
  cursor: pointer;
676
- transition:
677
- background-color var(--pui-transition-fast) var(--pui-ease-in-out),
678
- color var(--pui-transition-fast) var(--pui-ease-in-out);
612
+ transition: color 0.15s ease;
679
613
  text-align: left;
680
614
  }
681
615
 
682
- .sub-nav-link:hover {
683
- background-color: var(--pui-bg-hover);
616
+ .sub-nav-item > .nav-item-row:hover {
617
+ background-color: rgba(var(--ui-primary-rgbc), 0.08);
618
+ }
619
+
620
+ :global(.dark) .sub-nav-item > .nav-item-row:hover {
621
+ background-color: rgba(var(--ui-primary-rgbc), 0.2);
684
622
  }
685
623
 
686
- :global(.dark) .sub-nav-link:hover {
687
- background-color: var(--pui-bg-hover);
624
+ .sub-nav-item > .nav-item-row.active {
625
+ border-left: 3px solid var(--ui-accent);
688
626
  }
689
627
 
690
- .sub-nav-link.active {
691
- border-left: 3px solid var(--pui-color-secondary);
628
+ :global(.dark) .sub-nav-item > .nav-item-row.active {
629
+ border-left: 3px solid var(--ui-primary);
692
630
  }
693
631
 
694
- :global(.dark) .sub-nav-link.active {
695
- border-left: 3px solid var(--pui-color-primary);
632
+ .sub-nav-item > .nav-item-row.active :global(.sub-nav-link),
633
+ .sub-nav-item > .nav-item-row.active button.sub-nav-link {
634
+ font-weight: 500;
696
635
  }
697
636
 
698
637
  /* Scrollbar styling */
@@ -705,8 +644,8 @@
705
644
  }
706
645
 
707
646
  .sidenav-content::-webkit-scrollbar-thumb {
708
- background-color: var(--pui-color-gray-600);
709
- border-radius: var(--pui-radius-sm);
647
+ background-color: #343434;
648
+ border-radius: 3px;
710
649
  border: none;
711
650
  }
712
651
  </style>