@placeholderco/placeholder-ui 1.0.12 → 2.0.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.
- package/LICENSE +1 -1
- package/README.md +134 -130
- package/dist/app.css +178 -0
- package/dist/bootstrap.min.css +3600 -0
- package/dist/cards/GitCard.svelte +115 -0
- package/dist/cards/GitCard.svelte.d.ts +22 -0
- package/dist/display/Avatar.svelte +29 -17
- package/dist/display/Avatar.svelte.d.ts +12 -2
- package/dist/display/LinkCollection.svelte +40 -18
- package/dist/display/LinkCollection.svelte.d.ts +9 -2
- package/dist/display/Paper.svelte +31 -19
- package/dist/display/Paper.svelte.d.ts +12 -3
- package/dist/display/alert/Alert.svelte +129 -0
- package/dist/display/alert/Alert.svelte.d.ts +15 -0
- package/dist/display/alert/AlertVariant.d.ts +1 -0
- package/dist/display/alert/AlertVariant.js +1 -0
- package/dist/display/filetree/FileTree.svelte +259 -0
- package/dist/display/filetree/FileTree.svelte.d.ts +76 -0
- package/dist/display/filetree/FileTreeItem.svelte +396 -0
- package/dist/display/filetree/FileTreeItem.svelte.d.ts +40 -0
- package/dist/display/filetree/FileTreeNode.d.ts +46 -0
- package/dist/display/filetree/FileTreeNode.js +115 -0
- package/dist/display/filetree/index.d.ts +5 -0
- package/dist/display/filetree/index.js +3 -0
- package/dist/editors/CodeMirror.svelte +306 -0
- package/dist/editors/CodeMirror.svelte.d.ts +31 -0
- package/dist/editors/tiptap/LinkActionMenu.svelte +307 -0
- package/dist/editors/tiptap/LinkActionMenu.svelte.d.ts +8 -0
- package/dist/editors/tiptap/TipTap.svelte +856 -0
- package/dist/editors/tiptap/TipTap.svelte.d.ts +54 -0
- package/dist/editors/tiptap/TipTapBubble.svelte +790 -0
- package/dist/editors/tiptap/TipTapBubble.svelte.d.ts +44 -0
- package/dist/editors/tiptap/collaboration.d.ts +55 -0
- package/dist/editors/tiptap/collaboration.js +1 -0
- package/dist/editors/tiptap/extensions/Alert.d.ts +18 -0
- package/dist/editors/tiptap/extensions/Alert.js +72 -0
- package/dist/editors/tiptap/extensions/CodeBlockEditor.d.ts +21 -0
- package/dist/editors/tiptap/extensions/CodeBlockEditor.js +326 -0
- package/dist/editors/tiptap/extensions/Div.d.ts +19 -0
- package/dist/editors/tiptap/extensions/Div.js +89 -0
- package/dist/editors/tiptap/extensions/Span.d.ts +5 -0
- package/dist/editors/tiptap/extensions/Span.js +56 -0
- package/dist/editors/tiptap/extensions/codeBlockEditor.css +236 -0
- package/dist/editors/tiptap/extensions/codeBlockLanguages.d.ts +17 -0
- package/dist/editors/tiptap/extensions/codeBlockLanguages.js +124 -0
- package/dist/editors/tiptap/extensions/index.d.ts +7 -0
- package/dist/editors/tiptap/extensions/index.js +5 -0
- package/dist/editors/tiptap/toolbar/AlertButton.svelte +261 -0
- package/dist/editors/tiptap/toolbar/AlertButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignRightButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignRightButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/BoldButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/BoldButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/BulletListButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/BulletListButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/CodeButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/CodeButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ColorButton.svelte +299 -0
- package/dist/editors/tiptap/toolbar/ColorButton.svelte.d.ts +20 -0
- package/dist/editors/tiptap/toolbar/DocumentButton.svelte +58 -0
- package/dist/editors/tiptap/toolbar/DocumentButton.svelte.d.ts +9 -0
- package/dist/editors/tiptap/toolbar/HeadingButton.svelte +30 -0
- package/dist/editors/tiptap/toolbar/HeadingButton.svelte.d.ts +8 -0
- package/dist/editors/tiptap/toolbar/HtmlButton.svelte +68 -0
- package/dist/editors/tiptap/toolbar/HtmlButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ImageButton.svelte +54 -0
- package/dist/editors/tiptap/toolbar/ImageButton.svelte.d.ts +8 -0
- package/dist/editors/tiptap/toolbar/ItalicButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/ItalicButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/LinkButton.svelte +257 -0
- package/dist/editors/tiptap/toolbar/LinkButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/OrderedListButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/OrderedListButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/RedoButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/RedoButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/SubscriptButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/SubscriptButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/TableButton.svelte +258 -0
- package/dist/editors/tiptap/toolbar/TableButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ToolbarButton.svelte +84 -0
- package/dist/editors/tiptap/toolbar/ToolbarButton.svelte.d.ts +10 -0
- package/dist/editors/tiptap/toolbar/UnderlineButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/UnderlineButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/UndoButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/UndoButton.svelte.d.ts +7 -0
- package/dist/form/Autocomplete.svelte +86 -135
- package/dist/form/Autocomplete.svelte.d.ts +6 -8
- package/dist/form/AutocompleteMulti.svelte +385 -227
- package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
- package/dist/form/Checkbox.svelte +59 -54
- package/dist/form/Checkbox.svelte.d.ts +14 -5
- package/dist/form/Chips.svelte +29 -13
- package/dist/form/Chips.svelte.d.ts +16 -2
- package/dist/form/ComboBox.svelte +30 -20
- package/dist/form/ComboBox.svelte.d.ts +1 -1
- package/dist/form/ComboBoxItemBuilder.svelte +161 -188
- package/dist/form/ComboBoxItemBuilder.svelte.d.ts +19 -2
- package/dist/form/ComboBoxMulti.svelte +38 -24
- package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
- package/dist/form/CronBuilder.svelte +84 -67
- package/dist/form/CronBuilder.svelte.d.ts +16 -3
- package/dist/form/DatePicker.svelte +148 -195
- package/dist/form/DateRangePicker.svelte +101 -98
- package/dist/form/DateTimePicker.svelte +167 -208
- package/dist/form/DateTimePicker.svelte.d.ts +10 -2
- package/dist/form/FormGroup.svelte +33 -10
- package/dist/form/FormGroup.svelte.d.ts +12 -2
- package/dist/form/Number.svelte +70 -47
- package/dist/form/Number.svelte.d.ts +36 -6
- package/dist/form/Radio.svelte +18 -18
- package/dist/form/RadioGroup.svelte +23 -12
- package/dist/form/RadioGroup.svelte.d.ts +13 -2
- package/dist/form/SegmentedControl.svelte +76 -56
- package/dist/form/SegmentedControl.svelte.d.ts +9 -4
- package/dist/form/Select.svelte +150 -233
- package/dist/form/Select.svelte.d.ts +29 -5
- package/dist/form/SelectMulti.svelte +163 -277
- package/dist/form/SelectMulti.svelte.d.ts +36 -7
- package/dist/form/Slider.svelte +183 -269
- package/dist/form/Slider.svelte.d.ts +32 -17
- package/dist/form/StringArrayBuilder.svelte +249 -0
- package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
- package/dist/form/Switch.svelte +164 -106
- package/dist/form/Switch.svelte.d.ts +22 -3
- package/dist/form/TextArea.svelte +49 -29
- package/dist/form/TextArea.svelte.d.ts +23 -3
- package/dist/form/Textbox.svelte +69 -68
- package/dist/form/Textbox.svelte.d.ts +32 -4
- package/dist/form/TimePicker.svelte +42 -47
- package/dist/form/TimePicker.svelte.d.ts +12 -2
- package/dist/form/comboBoxCore.svelte.d.ts +99 -0
- package/dist/form/comboBoxCore.svelte.js +243 -0
- package/dist/icon/Icon.svelte +8 -3
- package/dist/icon/Icon.svelte.d.ts +8 -3
- package/dist/icon/file-type-bmp.svg +1 -0
- package/dist/icon/file-type-csv.svg +1 -0
- package/dist/icon/file-type-doc.svg +1 -0
- package/dist/icon/file-type-docx.svg +1 -0
- package/dist/icon/file-type-jpg.svg +1 -0
- package/dist/icon/file-type-pdf.svg +1 -0
- package/dist/icon/file-type-png.svg +1 -0
- package/dist/icon/file-type-ppt.svg +1 -0
- package/dist/icon/file-type-svg.svg +1 -0
- package/dist/icon/file-type-txt.svg +1 -0
- package/dist/icon/file-type-xls.svg +1 -0
- package/dist/icon/file-type-zip.svg +1 -0
- package/dist/icon/index.d.ts +166 -151
- package/dist/icon/index.js +166 -152
- package/dist/icon/logo-placeholder.svg +6 -0
- package/dist/icon/source-code.svg +1 -0
- package/dist/icon/sun-moon.svg +1 -0
- package/dist/icon/table.svg +6 -0
- package/dist/index.d.ts +87 -26
- package/dist/index.js +25 -28
- package/dist/layout/AppShell.svelte +12 -162
- package/dist/layout/AppShell.svelte.d.ts +6 -27
- package/dist/layout/CustomNavbar.svelte +9 -7
- package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
- package/dist/layout/Navbar.svelte +161 -129
- package/dist/layout/Navbar.svelte.d.ts +29 -15
- package/dist/layout/NavbarItemDisplay.svelte +2 -2
- package/dist/layout/NavbarItemView.svelte +182 -0
- package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
- package/dist/layout/Sidenav.svelte +280 -341
- package/dist/layout/Sidenav.svelte.d.ts +36 -4
- package/dist/models/ComboBoxItem.d.ts +2 -0
- package/dist/models/Employee.d.ts +53 -0
- package/dist/models/Employee.js +23 -0
- package/dist/models/Hyperlink.d.ts +3 -1
- package/dist/models/LinkCollectionItem.d.ts +3 -1
- package/dist/models/NavbarItem.d.ts +6 -2
- package/dist/theme.svelte.d.ts +0 -1
- package/dist/theme.svelte.js +46 -58
- package/dist/ui/Accordion.svelte +81 -242
- package/dist/ui/Accordion.svelte.d.ts +37 -14
- package/dist/ui/AccordionItem.svelte +303 -0
- package/dist/ui/AccordionItem.svelte.d.ts +21 -0
- package/dist/ui/ActionIcon.svelte +25 -21
- package/dist/ui/ActionIcon.svelte.d.ts +15 -2
- package/dist/ui/Badge.svelte +163 -171
- package/dist/ui/Badge.svelte.d.ts +13 -5
- package/dist/ui/Button.svelte +178 -205
- package/dist/ui/Button.svelte.d.ts +19 -2
- package/dist/ui/ButtonVariant.d.ts +15 -1
- package/dist/ui/ContextMenu.svelte +146 -0
- package/dist/ui/ContextMenu.svelte.d.ts +37 -0
- package/dist/ui/ContextMenuList.svelte +188 -0
- package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
- package/dist/ui/Dialog.svelte +183 -111
- package/dist/ui/Dialog.svelte.d.ts +21 -4
- package/dist/ui/Drawer.svelte +237 -184
- package/dist/ui/Drawer.svelte.d.ts +20 -2
- package/dist/ui/Dropdown.svelte +24 -14
- package/dist/ui/Dropdown.svelte.d.ts +11 -2
- package/dist/ui/Dropzone.svelte +159 -57
- package/dist/ui/Dropzone.svelte.d.ts +29 -2
- package/dist/ui/Link.svelte +12 -4
- package/dist/ui/Link.svelte.d.ts +8 -2
- package/dist/ui/Loader.svelte +23 -18
- package/dist/ui/Loader.svelte.d.ts +5 -2
- package/dist/ui/Logo.svelte +37 -0
- package/dist/ui/Logo.svelte.d.ts +16 -0
- package/dist/ui/MultiSortable.svelte +287 -0
- package/dist/ui/MultiSortable.svelte.d.ts +50 -0
- package/dist/ui/Pagination.svelte +15 -9
- package/dist/ui/Pagination.svelte.d.ts +6 -2
- package/dist/ui/Popover.svelte +43 -65
- package/dist/ui/Popover.svelte.d.ts +14 -5
- package/dist/ui/ProgressBar.svelte +28 -30
- package/dist/ui/ProgressBarVariant.d.ts +7 -1
- package/dist/ui/SegmentedControl.svelte +0 -0
- package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
- package/dist/ui/Sortable.svelte +163 -0
- package/dist/ui/Sortable.svelte.d.ts +47 -0
- package/dist/ui/Table.svelte +383 -80
- package/dist/ui/Table.svelte.d.ts +43 -2
- package/dist/ui/Tabs.svelte +22 -18
- package/dist/ui/Tabs.svelte.d.ts +6 -2
- package/dist/ui/ThemeSwitcher.svelte +26 -7
- package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
- package/dist/ui/Tooltip.svelte +312 -180
- package/dist/ui/Tooltip.svelte.d.ts +4 -3
- package/dist/uiTheme.svelte.d.ts +86 -0
- package/dist/uiTheme.svelte.js +214 -0
- package/dist/util/DateFunctions.js +1 -1
- package/dist/util/DragDrop.d.ts +50 -0
- package/dist/util/DragDrop.js +154 -0
- package/dist/util/NavigateTo.js +2 -2
- package/dist/util/dayjs.d.ts +4 -0
- package/dist/util/dayjs.js +15 -0
- package/package.json +66 -26
- package/dist/display/Alert.svelte +0 -179
- package/dist/display/Alert.svelte.d.ts +0 -13
- package/dist/form/FileInput.svelte +0 -235
- package/dist/form/FileInput.svelte.d.ts +0 -23
- package/dist/form/PasswordInput.svelte +0 -253
- package/dist/form/PasswordInput.svelte.d.ts +0 -34
- package/dist/form/Rating.svelte +0 -235
- package/dist/form/Rating.svelte.d.ts +0 -21
- package/dist/styles/components.css +0 -199
- package/dist/styles/dark.css +0 -146
- package/dist/styles/index.css +0 -116
- package/dist/styles/reset.css +0 -110
- package/dist/styles/semantic.css +0 -86
- package/dist/styles/tokens.css +0 -203
- package/dist/styles/utilities.css +0 -523
- package/dist/ui/Breadcrumbs.svelte +0 -131
- package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
- package/dist/ui/LoadingOverlay.svelte +0 -53
- package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
- package/dist/ui/Progress.svelte +0 -191
- package/dist/ui/Progress.svelte.d.ts +0 -15
- package/dist/ui/RingProgress.svelte +0 -141
- package/dist/ui/RingProgress.svelte.d.ts +0 -18
- package/dist/ui/Skeleton.svelte +0 -85
- package/dist/ui/Skeleton.svelte.d.ts +0 -12
- package/dist/ui/Stepper.svelte +0 -355
- package/dist/ui/Stepper.svelte.d.ts +0 -24
- package/dist/ui/Timeline.svelte +0 -225
- package/dist/ui/Timeline.svelte.d.ts +0 -23
- /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
- /package/dist/{actions → util}/ClickOutside.js +0 -0
- /package/dist/{transitions → util}/Transitions.d.ts +0 -0
- /package/dist/{transitions → util}/Transitions.js +0 -0
package/dist/ui/Drawer.svelte
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
|
-
import type { SidenavItem, SidenavSection } from '../layout/Sidenav.svelte';
|
|
3
|
+
import type { SidenavItem, SidenavItemAction, SidenavSection } from '../layout/Sidenav.svelte';
|
|
4
4
|
import Icon from '../icon/Icon.svelte';
|
|
5
5
|
import Link from './Link.svelte';
|
|
6
6
|
import ActionIcon from './ActionIcon.svelte';
|
|
@@ -8,23 +8,41 @@
|
|
|
8
8
|
import { fade, fly } from 'svelte/transition';
|
|
9
9
|
import { slide } from 'svelte/transition';
|
|
10
10
|
|
|
11
|
-
interface
|
|
11
|
+
export interface DrawerProps {
|
|
12
|
+
/** Whether the drawer is open (bindable) */
|
|
12
13
|
open?: boolean;
|
|
14
|
+
/** Side from which the drawer slides in */
|
|
13
15
|
position?: 'left' | 'right';
|
|
16
|
+
/** Width of the drawer */
|
|
14
17
|
width?: string;
|
|
18
|
+
/** Close drawer when clicking outside */
|
|
15
19
|
closeOnClickOutside?: boolean;
|
|
20
|
+
/** Close drawer when pressing Escape key */
|
|
16
21
|
closeOnEscape?: boolean;
|
|
22
|
+
/** Auto-close on larger screens */
|
|
17
23
|
closeForLargeScreens?: boolean;
|
|
24
|
+
/** Breakpoint for large screen detection */
|
|
18
25
|
largeScreenBreakpoint?: number;
|
|
26
|
+
/** Navigation sections (for sidenav-style drawer) */
|
|
19
27
|
sections?: SidenavSection[];
|
|
28
|
+
/** Sections pinned to the bottom */
|
|
20
29
|
bottomSections?: SidenavSection[];
|
|
30
|
+
/** Title displayed in the drawer header */
|
|
21
31
|
title?: string;
|
|
32
|
+
/** Additional CSS classes */
|
|
22
33
|
class?: string;
|
|
34
|
+
/** Custom header content */
|
|
23
35
|
header?: Snippet;
|
|
36
|
+
/** Custom footer content */
|
|
24
37
|
footer?: Snippet;
|
|
38
|
+
/** Main drawer content */
|
|
25
39
|
children?: Snippet;
|
|
40
|
+
/** Callback when drawer closes */
|
|
26
41
|
onclose?: () => void;
|
|
42
|
+
/** Callback when a navigation item is clicked */
|
|
27
43
|
onItemClick?: (item: SidenavItem) => void;
|
|
44
|
+
/** When item action buttons are shown: on hover/focus or always visible */
|
|
45
|
+
actionsVisible?: 'hover' | 'always';
|
|
28
46
|
}
|
|
29
47
|
|
|
30
48
|
let {
|
|
@@ -43,8 +61,9 @@
|
|
|
43
61
|
footer,
|
|
44
62
|
children,
|
|
45
63
|
onclose,
|
|
46
|
-
onItemClick
|
|
47
|
-
|
|
64
|
+
onItemClick,
|
|
65
|
+
actionsVisible = 'hover'
|
|
66
|
+
}: DrawerProps = $props();
|
|
48
67
|
|
|
49
68
|
let expandedSections: Set<string> = $state(new Set());
|
|
50
69
|
|
|
@@ -66,7 +85,11 @@
|
|
|
66
85
|
}
|
|
67
86
|
|
|
68
87
|
function handleWindowResize() {
|
|
69
|
-
if (
|
|
88
|
+
if (
|
|
89
|
+
closeForLargeScreens &&
|
|
90
|
+
typeof window !== 'undefined' &&
|
|
91
|
+
window.innerWidth > largeScreenBreakpoint
|
|
92
|
+
) {
|
|
70
93
|
close();
|
|
71
94
|
}
|
|
72
95
|
}
|
|
@@ -100,6 +123,12 @@
|
|
|
100
123
|
item.onclick?.();
|
|
101
124
|
}
|
|
102
125
|
|
|
126
|
+
function handleActionClick(action: SidenavItemAction, item: SidenavItem, e: MouseEvent) {
|
|
127
|
+
// Keep the action independent of the item's own navigation/expand behaviour
|
|
128
|
+
e.stopPropagation();
|
|
129
|
+
action.onclick?.(item, e);
|
|
130
|
+
}
|
|
131
|
+
|
|
103
132
|
// Body scroll lock
|
|
104
133
|
$effect(() => {
|
|
105
134
|
if (typeof document !== 'undefined') {
|
|
@@ -119,6 +148,106 @@
|
|
|
119
148
|
const flyDirection = $derived(position === 'left' ? -320 : 320);
|
|
120
149
|
</script>
|
|
121
150
|
|
|
151
|
+
{#snippet itemActions(item: SidenavItem)}
|
|
152
|
+
{#if item.actions && item.actions.length > 0}
|
|
153
|
+
<span class="nav-actions" class:always={actionsVisible === 'always'}>
|
|
154
|
+
{#each item.actions as action}
|
|
155
|
+
<ActionIcon
|
|
156
|
+
svg={action.iconSvg}
|
|
157
|
+
size="0.875rem"
|
|
158
|
+
variant={action.variant ?? 'secondary-subtle'}
|
|
159
|
+
tooltip={action.label}
|
|
160
|
+
onclick={(e) => handleActionClick(action, item, e)}
|
|
161
|
+
/>
|
|
162
|
+
{/each}
|
|
163
|
+
</span>
|
|
164
|
+
{/if}
|
|
165
|
+
{/snippet}
|
|
166
|
+
|
|
167
|
+
{#snippet sectionList(sects: SidenavSection[])}
|
|
168
|
+
{#each sects as section}
|
|
169
|
+
{#if section.title}
|
|
170
|
+
<div class="section-title">{section.title}</div>
|
|
171
|
+
{/if}
|
|
172
|
+
<ul class="nav-list">
|
|
173
|
+
{#each section.items as item}
|
|
174
|
+
<li class="nav-item">
|
|
175
|
+
<div class="nav-item-row" class:active={item.active}>
|
|
176
|
+
{#if item.href && !(item.items && item.items.length > 0)}
|
|
177
|
+
<Link
|
|
178
|
+
href={item.href}
|
|
179
|
+
class="nav-link {item.active ? 'active' : ''}"
|
|
180
|
+
onclick={() => handleLinkClick(item)}
|
|
181
|
+
>
|
|
182
|
+
{#if item.iconSvg}
|
|
183
|
+
<Icon svg={item.iconSvg} size="1.25em" />
|
|
184
|
+
{/if}
|
|
185
|
+
<span class="nav-label">{item.label}</span>
|
|
186
|
+
</Link>
|
|
187
|
+
{:else}
|
|
188
|
+
<button
|
|
189
|
+
type="button"
|
|
190
|
+
class="nav-link"
|
|
191
|
+
class:active={item.active}
|
|
192
|
+
class:has-children={item.items && item.items.length > 0}
|
|
193
|
+
onclick={(e) => handleItemClick(item, e)}
|
|
194
|
+
>
|
|
195
|
+
{#if item.iconSvg}
|
|
196
|
+
<Icon svg={item.iconSvg} size="1.25em" />
|
|
197
|
+
{/if}
|
|
198
|
+
<span class="nav-label">{item.label}</span>
|
|
199
|
+
{#if item.items && item.items.length > 0}
|
|
200
|
+
<Icon
|
|
201
|
+
svg={iconChevronRight}
|
|
202
|
+
size="0.75em"
|
|
203
|
+
class="chevron {isExpanded(item.label) ? 'expanded' : ''}"
|
|
204
|
+
/>
|
|
205
|
+
{/if}
|
|
206
|
+
</button>
|
|
207
|
+
{/if}
|
|
208
|
+
{@render itemActions(item)}
|
|
209
|
+
</div>
|
|
210
|
+
{#if item.items && item.items.length > 0 && isExpanded(item.label)}
|
|
211
|
+
<ul class="sub-nav-list" transition:slide={{ duration: 200 }}>
|
|
212
|
+
{#each item.items as subItem}
|
|
213
|
+
<li class="sub-nav-item">
|
|
214
|
+
<div class="nav-item-row" class:active={subItem.active}>
|
|
215
|
+
{#if subItem.href}
|
|
216
|
+
<Link
|
|
217
|
+
href={subItem.href}
|
|
218
|
+
class="sub-nav-link {subItem.active ? 'active' : ''}"
|
|
219
|
+
onclick={() => handleLinkClick(subItem)}
|
|
220
|
+
>
|
|
221
|
+
{#if subItem.iconSvg}
|
|
222
|
+
<Icon svg={subItem.iconSvg} size="1em" />
|
|
223
|
+
{/if}
|
|
224
|
+
<span class="nav-label">{subItem.label}</span>
|
|
225
|
+
</Link>
|
|
226
|
+
{:else}
|
|
227
|
+
<button
|
|
228
|
+
type="button"
|
|
229
|
+
class="sub-nav-link"
|
|
230
|
+
class:active={subItem.active}
|
|
231
|
+
onclick={() => handleLinkClick(subItem)}
|
|
232
|
+
>
|
|
233
|
+
{#if subItem.iconSvg}
|
|
234
|
+
<Icon svg={subItem.iconSvg} size="1em" />
|
|
235
|
+
{/if}
|
|
236
|
+
<span class="nav-label">{subItem.label}</span>
|
|
237
|
+
</button>
|
|
238
|
+
{/if}
|
|
239
|
+
{@render itemActions(subItem)}
|
|
240
|
+
</div>
|
|
241
|
+
</li>
|
|
242
|
+
{/each}
|
|
243
|
+
</ul>
|
|
244
|
+
{/if}
|
|
245
|
+
</li>
|
|
246
|
+
{/each}
|
|
247
|
+
</ul>
|
|
248
|
+
{/each}
|
|
249
|
+
{/snippet}
|
|
250
|
+
|
|
122
251
|
<svelte:window onresize={handleWindowResize} onkeydown={handleKeydown} />
|
|
123
252
|
|
|
124
253
|
{#if open}
|
|
@@ -167,81 +296,7 @@
|
|
|
167
296
|
{#if hasNavContent}
|
|
168
297
|
<!-- Navigation sections -->
|
|
169
298
|
<nav class="drawer-nav">
|
|
170
|
-
{
|
|
171
|
-
{#if section.title}
|
|
172
|
-
<div class="section-title">{section.title}</div>
|
|
173
|
-
{/if}
|
|
174
|
-
<ul class="nav-list">
|
|
175
|
-
{#each section.items as item}
|
|
176
|
-
<li class="nav-item">
|
|
177
|
-
{#if item.href && !(item.items && item.items.length > 0)}
|
|
178
|
-
<Link
|
|
179
|
-
href={item.href}
|
|
180
|
-
class="nav-link {item.active ? 'active' : ''}"
|
|
181
|
-
onclick={() => handleLinkClick(item)}
|
|
182
|
-
>
|
|
183
|
-
{#if item.iconSvg}
|
|
184
|
-
<Icon svg={item.iconSvg} size="1.25em" />
|
|
185
|
-
{/if}
|
|
186
|
-
<span class="nav-label">{item.label}</span>
|
|
187
|
-
</Link>
|
|
188
|
-
{:else}
|
|
189
|
-
<button
|
|
190
|
-
type="button"
|
|
191
|
-
class="nav-link"
|
|
192
|
-
class:active={item.active}
|
|
193
|
-
class:has-children={item.items && item.items.length > 0}
|
|
194
|
-
onclick={(e) => handleItemClick(item, e)}
|
|
195
|
-
>
|
|
196
|
-
{#if item.iconSvg}
|
|
197
|
-
<Icon svg={item.iconSvg} size="1.25em" />
|
|
198
|
-
{/if}
|
|
199
|
-
<span class="nav-label">{item.label}</span>
|
|
200
|
-
{#if item.items && item.items.length > 0}
|
|
201
|
-
<Icon
|
|
202
|
-
svg={iconChevronRight}
|
|
203
|
-
size="0.75em"
|
|
204
|
-
class="chevron {isExpanded(item.label) ? 'expanded' : ''}"
|
|
205
|
-
/>
|
|
206
|
-
{/if}
|
|
207
|
-
</button>
|
|
208
|
-
{#if item.items && item.items.length > 0 && isExpanded(item.label)}
|
|
209
|
-
<ul class="sub-nav-list" transition:slide={{ duration: 200 }}>
|
|
210
|
-
{#each item.items as subItem}
|
|
211
|
-
<li class="sub-nav-item">
|
|
212
|
-
{#if subItem.href}
|
|
213
|
-
<Link
|
|
214
|
-
href={subItem.href}
|
|
215
|
-
class="sub-nav-link {subItem.active ? 'active' : ''}"
|
|
216
|
-
onclick={() => handleLinkClick(subItem)}
|
|
217
|
-
>
|
|
218
|
-
{#if subItem.iconSvg}
|
|
219
|
-
<Icon svg={subItem.iconSvg} size="1em" />
|
|
220
|
-
{/if}
|
|
221
|
-
<span>{subItem.label}</span>
|
|
222
|
-
</Link>
|
|
223
|
-
{:else}
|
|
224
|
-
<button
|
|
225
|
-
type="button"
|
|
226
|
-
class="sub-nav-link"
|
|
227
|
-
class:active={subItem.active}
|
|
228
|
-
onclick={() => handleLinkClick(subItem)}
|
|
229
|
-
>
|
|
230
|
-
{#if subItem.iconSvg}
|
|
231
|
-
<Icon svg={subItem.iconSvg} size="1em" />
|
|
232
|
-
{/if}
|
|
233
|
-
<span>{subItem.label}</span>
|
|
234
|
-
</button>
|
|
235
|
-
{/if}
|
|
236
|
-
</li>
|
|
237
|
-
{/each}
|
|
238
|
-
</ul>
|
|
239
|
-
{/if}
|
|
240
|
-
{/if}
|
|
241
|
-
</li>
|
|
242
|
-
{/each}
|
|
243
|
-
</ul>
|
|
244
|
-
{/each}
|
|
299
|
+
{@render sectionList(sections)}
|
|
245
300
|
</nav>
|
|
246
301
|
{:else if children}
|
|
247
302
|
{@render children()}
|
|
@@ -251,41 +306,7 @@
|
|
|
251
306
|
<!-- Bottom sections -->
|
|
252
307
|
{#if bottomSections.length > 0}
|
|
253
308
|
<nav class="drawer-bottom">
|
|
254
|
-
{
|
|
255
|
-
{#if section.title}
|
|
256
|
-
<div class="section-title">{section.title}</div>
|
|
257
|
-
{/if}
|
|
258
|
-
<ul class="nav-list">
|
|
259
|
-
{#each section.items as item}
|
|
260
|
-
<li class="nav-item">
|
|
261
|
-
{#if item.href}
|
|
262
|
-
<Link
|
|
263
|
-
href={item.href}
|
|
264
|
-
class="nav-link {item.active ? 'active' : ''}"
|
|
265
|
-
onclick={() => handleLinkClick(item)}
|
|
266
|
-
>
|
|
267
|
-
{#if item.iconSvg}
|
|
268
|
-
<Icon svg={item.iconSvg} size="1.25em" />
|
|
269
|
-
{/if}
|
|
270
|
-
<span class="nav-label">{item.label}</span>
|
|
271
|
-
</Link>
|
|
272
|
-
{:else}
|
|
273
|
-
<button
|
|
274
|
-
type="button"
|
|
275
|
-
class="nav-link"
|
|
276
|
-
class:active={item.active}
|
|
277
|
-
onclick={() => handleLinkClick(item)}
|
|
278
|
-
>
|
|
279
|
-
{#if item.iconSvg}
|
|
280
|
-
<Icon svg={item.iconSvg} size="1.25em" />
|
|
281
|
-
{/if}
|
|
282
|
-
<span class="nav-label">{item.label}</span>
|
|
283
|
-
</button>
|
|
284
|
-
{/if}
|
|
285
|
-
</li>
|
|
286
|
-
{/each}
|
|
287
|
-
</ul>
|
|
288
|
-
{/each}
|
|
309
|
+
{@render sectionList(bottomSections)}
|
|
289
310
|
</nav>
|
|
290
311
|
{/if}
|
|
291
312
|
|
|
@@ -302,8 +323,8 @@
|
|
|
302
323
|
.drawer-backdrop {
|
|
303
324
|
position: fixed;
|
|
304
325
|
inset: 0;
|
|
305
|
-
background-color:
|
|
306
|
-
z-index:
|
|
326
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
327
|
+
z-index: 1040;
|
|
307
328
|
}
|
|
308
329
|
|
|
309
330
|
.drawer {
|
|
@@ -314,21 +335,21 @@
|
|
|
314
335
|
flex-direction: column;
|
|
315
336
|
width: var(--drawer-width);
|
|
316
337
|
max-width: 100vw;
|
|
317
|
-
background-color: var(--
|
|
318
|
-
border-right: 1px solid var(--
|
|
319
|
-
z-index:
|
|
338
|
+
background-color: var(--paper-body-bg);
|
|
339
|
+
border-right: 1px solid var(--border-color);
|
|
340
|
+
z-index: 1050;
|
|
320
341
|
overflow: hidden;
|
|
321
342
|
}
|
|
322
343
|
|
|
323
344
|
.drawer-left {
|
|
324
345
|
left: 0;
|
|
325
|
-
border-right: 1px solid var(--
|
|
346
|
+
border-right: 1px solid var(--border-color);
|
|
326
347
|
border-left: none;
|
|
327
348
|
}
|
|
328
349
|
|
|
329
350
|
.drawer-right {
|
|
330
351
|
right: 0;
|
|
331
|
-
border-left: 1px solid var(--
|
|
352
|
+
border-left: 1px solid var(--border-color);
|
|
332
353
|
border-right: none;
|
|
333
354
|
}
|
|
334
355
|
|
|
@@ -336,18 +357,18 @@
|
|
|
336
357
|
display: flex;
|
|
337
358
|
align-items: center;
|
|
338
359
|
justify-content: space-between;
|
|
339
|
-
gap:
|
|
340
|
-
padding:
|
|
341
|
-
border-bottom: 1px solid var(--
|
|
360
|
+
gap: 1rem;
|
|
361
|
+
padding: 0.75rem 1rem;
|
|
362
|
+
border-bottom: 1px solid var(--border-color);
|
|
342
363
|
flex-shrink: 0;
|
|
343
|
-
min-height:
|
|
364
|
+
min-height: var(--header-height);
|
|
344
365
|
}
|
|
345
366
|
|
|
346
367
|
.drawer-title {
|
|
347
368
|
margin: 0;
|
|
348
|
-
font-size:
|
|
349
|
-
font-weight:
|
|
350
|
-
color: var(--
|
|
369
|
+
font-size: 1.125rem;
|
|
370
|
+
font-weight: 600;
|
|
371
|
+
color: var(--text-color);
|
|
351
372
|
flex: 1;
|
|
352
373
|
}
|
|
353
374
|
|
|
@@ -363,28 +384,28 @@
|
|
|
363
384
|
}
|
|
364
385
|
|
|
365
386
|
.drawer-nav {
|
|
366
|
-
padding:
|
|
387
|
+
padding: 0.5rem 0;
|
|
367
388
|
}
|
|
368
389
|
|
|
369
390
|
.drawer-bottom {
|
|
370
391
|
flex-shrink: 0;
|
|
371
|
-
border-top: 1px solid var(--
|
|
372
|
-
padding:
|
|
392
|
+
border-top: 1px solid var(--border-color);
|
|
393
|
+
padding: 0.5rem 0;
|
|
373
394
|
}
|
|
374
395
|
|
|
375
396
|
.drawer-footer {
|
|
376
|
-
padding:
|
|
377
|
-
border-top: 1px solid var(--
|
|
397
|
+
padding: 1rem;
|
|
398
|
+
border-top: 1px solid var(--border-color);
|
|
378
399
|
flex-shrink: 0;
|
|
379
400
|
}
|
|
380
401
|
|
|
381
402
|
.section-title {
|
|
382
|
-
padding:
|
|
383
|
-
font-size:
|
|
384
|
-
font-weight:
|
|
403
|
+
padding: 0.75rem 1rem 0.5rem;
|
|
404
|
+
font-size: 0.75rem;
|
|
405
|
+
font-weight: 600;
|
|
385
406
|
text-transform: uppercase;
|
|
386
|
-
letter-spacing:
|
|
387
|
-
color: var(--
|
|
407
|
+
letter-spacing: 0.05em;
|
|
408
|
+
color: var(--text-muted, #6b7280);
|
|
388
409
|
}
|
|
389
410
|
|
|
390
411
|
.nav-list {
|
|
@@ -397,44 +418,76 @@
|
|
|
397
418
|
margin: 0;
|
|
398
419
|
}
|
|
399
420
|
|
|
421
|
+
/* Row wraps the nav link/button together with its action buttons. The row (not the
|
|
422
|
+
link) carries the hover/active background so it spans the full width, including the
|
|
423
|
+
action-button area. */
|
|
424
|
+
.nav-item-row {
|
|
425
|
+
display: flex;
|
|
426
|
+
align-items: center;
|
|
427
|
+
transition: background-color 0.15s ease;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.nav-item-row :global(.nav-link),
|
|
431
|
+
.nav-item-row button.nav-link,
|
|
432
|
+
.nav-item-row :global(.sub-nav-link),
|
|
433
|
+
.nav-item-row button.sub-nav-link {
|
|
434
|
+
flex: 1;
|
|
435
|
+
min-width: 0;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/* Action buttons: revealed on hover/focus by default, or always when opted in */
|
|
439
|
+
.nav-actions {
|
|
440
|
+
display: flex;
|
|
441
|
+
align-items: center;
|
|
442
|
+
gap: 0.125rem;
|
|
443
|
+
flex-shrink: 0;
|
|
444
|
+
padding-right: 0.5rem;
|
|
445
|
+
opacity: 0;
|
|
446
|
+
pointer-events: none;
|
|
447
|
+
transition: opacity 0.15s ease;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.nav-actions.always,
|
|
451
|
+
.nav-item-row:hover .nav-actions,
|
|
452
|
+
.nav-item-row:focus-within .nav-actions {
|
|
453
|
+
opacity: 1;
|
|
454
|
+
pointer-events: auto;
|
|
455
|
+
}
|
|
456
|
+
|
|
400
457
|
.nav-item :global(.nav-link),
|
|
401
|
-
.nav-item
|
|
458
|
+
.nav-item button.nav-link {
|
|
402
459
|
display: flex;
|
|
403
460
|
align-items: center;
|
|
404
|
-
gap:
|
|
461
|
+
gap: 0.75rem;
|
|
405
462
|
width: 100%;
|
|
406
|
-
padding:
|
|
407
|
-
font-size:
|
|
408
|
-
font-weight:
|
|
409
|
-
color: var(--
|
|
463
|
+
padding: 0.625rem 1rem;
|
|
464
|
+
font-size: 0.875rem;
|
|
465
|
+
font-weight: 500;
|
|
466
|
+
color: var(--text-color);
|
|
410
467
|
background: none;
|
|
411
468
|
border: none;
|
|
412
469
|
text-decoration: none;
|
|
413
470
|
cursor: pointer;
|
|
414
|
-
transition:
|
|
471
|
+
transition: color 0.15s ease;
|
|
415
472
|
text-align: left;
|
|
416
473
|
}
|
|
417
474
|
|
|
418
|
-
.nav-item
|
|
419
|
-
|
|
420
|
-
background-color: var(--pui-bg-hover);
|
|
475
|
+
.nav-item > .nav-item-row:hover {
|
|
476
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.08);
|
|
421
477
|
}
|
|
422
478
|
|
|
423
|
-
:global(.dark) .nav-item
|
|
424
|
-
|
|
425
|
-
background-color: var(--pui-bg-hover);
|
|
479
|
+
:global(.dark) .nav-item > .nav-item-row:hover {
|
|
480
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.2);
|
|
426
481
|
}
|
|
427
482
|
|
|
428
|
-
.nav-item
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
border-left: 3px solid var(--pui-color-secondary);
|
|
483
|
+
.nav-item > .nav-item-row.active {
|
|
484
|
+
background-color: rgba(var(--ui-accent-rgbc), 0.2);
|
|
485
|
+
border-left: 3px solid var(--ui-accent);
|
|
432
486
|
}
|
|
433
487
|
|
|
434
|
-
:global(.dark) .nav-item
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
border-left: 3px solid var(--pui-color-primary);
|
|
488
|
+
:global(.dark) .nav-item > .nav-item-row.active {
|
|
489
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.3);
|
|
490
|
+
border-left: 3px solid var(--ui-primary);
|
|
438
491
|
}
|
|
439
492
|
|
|
440
493
|
.nav-label {
|
|
@@ -445,7 +498,7 @@
|
|
|
445
498
|
}
|
|
446
499
|
|
|
447
500
|
.nav-link :global(.chevron) {
|
|
448
|
-
transition: transform
|
|
501
|
+
transition: transform 0.2s ease;
|
|
449
502
|
flex-shrink: 0;
|
|
450
503
|
}
|
|
451
504
|
|
|
@@ -457,7 +510,7 @@
|
|
|
457
510
|
list-style: none;
|
|
458
511
|
margin: 0;
|
|
459
512
|
padding: 0;
|
|
460
|
-
background-color: var(--
|
|
513
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.03);
|
|
461
514
|
}
|
|
462
515
|
|
|
463
516
|
:global(.dark) .sub-nav-list {
|
|
@@ -469,42 +522,42 @@
|
|
|
469
522
|
}
|
|
470
523
|
|
|
471
524
|
.sub-nav-item :global(.sub-nav-link),
|
|
472
|
-
.sub-nav-item
|
|
525
|
+
.sub-nav-item button.sub-nav-link {
|
|
473
526
|
display: flex;
|
|
474
527
|
align-items: center;
|
|
475
|
-
gap:
|
|
528
|
+
gap: 0.5rem;
|
|
476
529
|
width: 100%;
|
|
477
|
-
padding:
|
|
478
|
-
font-size:
|
|
479
|
-
font-weight:
|
|
480
|
-
color: var(--
|
|
530
|
+
padding: 0.5rem 1rem 0.5rem 2.75rem;
|
|
531
|
+
font-size: 0.8125rem;
|
|
532
|
+
font-weight: 400;
|
|
533
|
+
color: var(--text-color);
|
|
481
534
|
background: none;
|
|
482
535
|
border: none;
|
|
483
536
|
text-decoration: none;
|
|
484
537
|
cursor: pointer;
|
|
485
|
-
transition:
|
|
538
|
+
transition: color 0.15s ease;
|
|
486
539
|
text-align: left;
|
|
487
540
|
}
|
|
488
541
|
|
|
489
|
-
.sub-nav-item
|
|
490
|
-
|
|
491
|
-
|
|
542
|
+
.sub-nav-item > .nav-item-row:hover {
|
|
543
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.08);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
:global(.dark) .sub-nav-item > .nav-item-row:hover {
|
|
547
|
+
background-color: rgba(var(--ui-primary-rgbc), 0.2);
|
|
492
548
|
}
|
|
493
549
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
background-color: var(--pui-bg-active);
|
|
550
|
+
.sub-nav-item > .nav-item-row.active {
|
|
551
|
+
border-left: 3px solid var(--ui-accent);
|
|
497
552
|
}
|
|
498
553
|
|
|
499
|
-
.sub-nav-item
|
|
500
|
-
|
|
501
|
-
font-weight: var(--pui-font-weight-medium);
|
|
502
|
-
border-left: 3px solid var(--pui-color-secondary);
|
|
554
|
+
:global(.dark) .sub-nav-item > .nav-item-row.active {
|
|
555
|
+
border-left: 3px solid var(--ui-primary);
|
|
503
556
|
}
|
|
504
557
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
558
|
+
.sub-nav-item > .nav-item-row.active :global(.sub-nav-link),
|
|
559
|
+
.sub-nav-item > .nav-item-row.active button.sub-nav-link {
|
|
560
|
+
font-weight: 500;
|
|
508
561
|
}
|
|
509
562
|
|
|
510
563
|
/* Scrollbar styling */
|
|
@@ -517,8 +570,8 @@
|
|
|
517
570
|
}
|
|
518
571
|
|
|
519
572
|
.drawer-content::-webkit-scrollbar-thumb {
|
|
520
|
-
background-color:
|
|
521
|
-
border-radius:
|
|
573
|
+
background-color: #343434;
|
|
574
|
+
border-radius: 3px;
|
|
522
575
|
border: none;
|
|
523
576
|
}
|
|
524
577
|
</style>
|
|
@@ -1,23 +1,41 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { SidenavItem, SidenavSection } from '../layout/Sidenav.svelte';
|
|
3
|
-
interface
|
|
3
|
+
export interface DrawerProps {
|
|
4
|
+
/** Whether the drawer is open (bindable) */
|
|
4
5
|
open?: boolean;
|
|
6
|
+
/** Side from which the drawer slides in */
|
|
5
7
|
position?: 'left' | 'right';
|
|
8
|
+
/** Width of the drawer */
|
|
6
9
|
width?: string;
|
|
10
|
+
/** Close drawer when clicking outside */
|
|
7
11
|
closeOnClickOutside?: boolean;
|
|
12
|
+
/** Close drawer when pressing Escape key */
|
|
8
13
|
closeOnEscape?: boolean;
|
|
14
|
+
/** Auto-close on larger screens */
|
|
9
15
|
closeForLargeScreens?: boolean;
|
|
16
|
+
/** Breakpoint for large screen detection */
|
|
10
17
|
largeScreenBreakpoint?: number;
|
|
18
|
+
/** Navigation sections (for sidenav-style drawer) */
|
|
11
19
|
sections?: SidenavSection[];
|
|
20
|
+
/** Sections pinned to the bottom */
|
|
12
21
|
bottomSections?: SidenavSection[];
|
|
22
|
+
/** Title displayed in the drawer header */
|
|
13
23
|
title?: string;
|
|
24
|
+
/** Additional CSS classes */
|
|
14
25
|
class?: string;
|
|
26
|
+
/** Custom header content */
|
|
15
27
|
header?: Snippet;
|
|
28
|
+
/** Custom footer content */
|
|
16
29
|
footer?: Snippet;
|
|
30
|
+
/** Main drawer content */
|
|
17
31
|
children?: Snippet;
|
|
32
|
+
/** Callback when drawer closes */
|
|
18
33
|
onclose?: () => void;
|
|
34
|
+
/** Callback when a navigation item is clicked */
|
|
19
35
|
onItemClick?: (item: SidenavItem) => void;
|
|
36
|
+
/** When item action buttons are shown: on hover/focus or always visible */
|
|
37
|
+
actionsVisible?: 'hover' | 'always';
|
|
20
38
|
}
|
|
21
|
-
declare const Drawer: import("svelte").Component<
|
|
39
|
+
declare const Drawer: import("svelte").Component<DrawerProps, {}, "open">;
|
|
22
40
|
type Drawer = ReturnType<typeof Drawer>;
|
|
23
41
|
export default Drawer;
|