fluentui-svelte 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/app-surface/app-surface.svelte +96 -0
- package/dist/components/app-surface/app-surface.svelte.d.ts +22 -0
- package/dist/components/app-surface/docs/llms.md +73 -0
- package/dist/components/app-surface/types.d.ts +19 -0
- package/dist/components/app-surface/types.js +1 -0
- package/dist/components/app-window/app-window.d.ts +3 -0
- package/dist/components/app-window/app-window.js +3 -0
- package/dist/components/app-window/app-window.svelte +193 -0
- package/dist/components/app-window/app-window.svelte.d.ts +25 -0
- package/dist/components/app-window/docs/llms.md +119 -0
- package/dist/components/app-window/types.d.ts +66 -0
- package/dist/components/app-window/types.js +1 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte +47 -31
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +2 -2
- package/dist/components/auto-suggest-box/docs/llms.md +34 -33
- package/dist/components/auto-suggest-box/option.svelte +6 -4
- package/dist/components/auto-suggest-box/types.d.ts +13 -16
- package/dist/components/avatar/avatar.svelte +4 -3
- package/dist/components/avatar/docs/llms.md +1 -1
- package/dist/components/avatar/type.d.ts +1 -1
- package/dist/components/badge/badge-icon.svelte +2 -2
- package/dist/components/badge/badge.svelte +2 -2
- package/dist/components/badge/docs/llms.md +2 -2
- package/dist/components/badge/types.d.ts +2 -2
- package/dist/components/breadcrumb/breadcrumb-button.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-divider.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb.svelte +10 -5
- package/dist/components/breadcrumb/docs/llms.md +11 -11
- package/dist/components/breadcrumb/types.d.ts +7 -7
- package/dist/components/button/button.svelte +2 -2
- package/dist/components/button/docs/llms.md +17 -17
- package/dist/components/button/split-button.svelte +7 -7
- package/dist/components/button/types.d.ts +5 -5
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte +98 -10
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +1 -1
- package/dist/components/calendar-date-picker/docs/llms.md +19 -14
- package/dist/components/calendar-date-picker/types.d.ts +22 -8
- package/dist/components/calendar-view/calendar-view-days.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-grid.js +8 -3
- package/dist/components/calendar-view/calendar-view-item.svelte +10 -4
- package/dist/components/calendar-view/calendar-view-months.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-years.svelte +3 -2
- package/dist/components/calendar-view/calendar-view.svelte +11 -4
- package/dist/components/calendar-view/calendar-view.svelte.js +5 -0
- package/dist/components/calendar-view/docs/llms.md +20 -19
- package/dist/components/calendar-view/types.d.ts +6 -1
- package/dist/components/card/card-footer.svelte +2 -2
- package/dist/components/card/card-header.svelte +5 -4
- package/dist/components/card/card-preview.svelte +13 -2
- package/dist/components/card/card.svelte +5 -5
- package/dist/components/card/docs/llms.md +22 -21
- package/dist/components/card/types.d.ts +8 -4
- package/dist/components/checkbox/checkbox.svelte +47 -26
- package/dist/components/checkbox/checkbox.svelte.d.ts +3 -24
- package/dist/components/checkbox/docs/llms.md +24 -23
- package/dist/components/checkbox/types.d.ts +10 -23
- package/dist/components/date-picker/date-picker.svelte +98 -27
- package/dist/components/date-picker/date-picker.svelte.d.ts +1 -1
- package/dist/components/date-picker/docs/llms.md +23 -20
- package/dist/components/date-picker/types.d.ts +24 -15
- package/dist/components/dialog/dialog-actions.svelte +2 -2
- package/dist/components/dialog/dialog-content.svelte +2 -2
- package/dist/components/dialog/dialog-surface.svelte +102 -9
- package/dist/components/dialog/dialog-title.svelte +2 -2
- package/dist/components/dialog/dialog-trigger.svelte +2 -2
- package/dist/components/dialog/dialog.svelte +22 -11
- package/dist/components/dialog/docs/llms.md +56 -19
- package/dist/components/dialog/types.d.ts +25 -7
- package/dist/components/divider/divider.svelte +6 -4
- package/dist/components/divider/types.d.ts +1 -1
- package/dist/components/dropdown/docs/llms.md +30 -28
- package/dist/components/dropdown/dropdown-option.svelte +17 -5
- package/dist/components/dropdown/dropdown.svelte +182 -84
- package/dist/components/dropdown/dropdown.svelte.d.ts +1 -1
- package/dist/components/dropdown/types.d.ts +26 -20
- package/dist/components/dropdown-select/docs/llms.md +24 -22
- package/dist/components/dropdown-select/dropdown-select-option.svelte +2 -2
- package/dist/components/dropdown-select/dropdown-select.svelte +42 -7
- package/dist/components/dropdown-select/types.d.ts +4 -4
- package/dist/components/expander/docs/llms.md +3 -3
- package/dist/components/expander/expander.svelte +13 -8
- package/dist/components/expander/types.d.ts +5 -5
- package/dist/components/flyout/docs/llms.md +1 -1
- package/dist/components/flyout/flyout.svelte +17 -6
- package/dist/components/flyout/types.d.ts +1 -1
- package/dist/components/hyperlink/docs/llms.md +6 -6
- package/dist/components/hyperlink/hyperlink.svelte +13 -4
- package/dist/components/hyperlink/types.d.ts +1 -1
- package/dist/components/info-bar/docs/llms.md +11 -10
- package/dist/components/info-bar/info-bar.svelte +3 -2
- package/dist/components/info-bar/types.d.ts +4 -0
- package/dist/components/label/docs/llms.md +75 -22
- package/dist/components/label/label-context.d.ts +14 -0
- package/dist/components/label/label-context.js +10 -0
- package/dist/components/label/label.svelte +153 -30
- package/dist/components/label/label.svelte.d.ts +1 -1
- package/dist/components/label/types.d.ts +48 -4
- package/dist/components/list-view/docs/llms.md +103 -33
- package/dist/components/list-view/list-view-item-branch.svelte +257 -0
- package/dist/components/list-view/list-view-item-branch.svelte.d.ts +4 -0
- package/dist/components/list-view/list-view-item.svelte +164 -46
- package/dist/components/list-view/list-view-item.svelte.d.ts +5 -5
- package/dist/components/list-view/list-view.svelte +73 -25
- package/dist/components/list-view/types.d.ts +71 -8
- package/dist/components/list-view/utils.d.ts +10 -0
- package/dist/components/list-view/utils.js +17 -1
- package/dist/components/menu/docs/llms.md +98 -15
- package/dist/components/menu/menu-command-bar-item.svelte +61 -0
- package/dist/components/menu/menu-command-bar-item.svelte.d.ts +14 -0
- package/dist/components/menu/menu-command-bar.svelte +218 -0
- package/dist/components/menu/menu-command-bar.svelte.d.ts +21 -0
- package/dist/components/menu/menu-group.svelte +6 -3
- package/dist/components/menu/menu-item-checkbox.svelte +5 -4
- package/dist/components/menu/menu-item-radio.svelte +5 -4
- package/dist/components/menu/menu-item-switch.svelte +5 -4
- package/dist/components/menu/menu-item.svelte +5 -5
- package/dist/components/menu/menu-item.svelte.d.ts +2 -3
- package/dist/components/menu/menu-list.svelte +10 -1
- package/dist/components/menu/menu-popover.svelte +9 -5
- package/dist/components/menu/menu-trigger.svelte +2 -1
- package/dist/components/menu/menu.svelte.js +1 -0
- package/dist/components/menu/types.d.ts +62 -7
- package/dist/components/number-box/docs/llms.md +6 -4
- package/dist/components/number-box/number-box.svelte +35 -29
- package/dist/components/number-box/number-box.svelte.d.ts +1 -1
- package/dist/components/number-box/types.d.ts +1 -1
- package/dist/components/persona/docs/llms.md +29 -25
- package/dist/components/persona/persona.svelte +8 -6
- package/dist/components/persona/types.d.ts +4 -3
- package/dist/components/progress-bar/docs/llms.md +13 -13
- package/dist/components/progress-bar/progress-bar.svelte +6 -6
- package/dist/components/progress-bar/types.d.ts +4 -4
- package/dist/components/progress-ring/docs/llms.md +14 -14
- package/dist/components/progress-ring/progress-ring.svelte +5 -5
- package/dist/components/progress-ring/types.d.ts +3 -3
- package/dist/components/radio-button/docs/llms.md +11 -8
- package/dist/components/radio-button/radio-button.svelte +38 -12
- package/dist/components/radio-button/radio-button.svelte.d.ts +1 -1
- package/dist/components/radio-button/types.d.ts +11 -8
- package/dist/components/rating/docs/llms.md +15 -14
- package/dist/components/rating/rating.svelte +66 -29
- package/dist/components/rating/rating.svelte.d.ts +1 -1
- package/dist/components/rating/types.d.ts +8 -8
- package/dist/components/side-nav/docs/llms.md +110 -0
- package/dist/components/side-nav/side-nav-branch.svelte +43 -0
- package/dist/components/side-nav/side-nav-branch.svelte.d.ts +4 -0
- package/dist/components/side-nav/side-nav-item.svelte +75 -0
- package/dist/components/side-nav/side-nav-item.svelte.d.ts +25 -0
- package/dist/components/side-nav/side-nav-list.svelte +32 -0
- package/dist/components/side-nav/side-nav-list.svelte.d.ts +7 -0
- package/dist/components/side-nav/side-nav.d.ts +2 -0
- package/dist/components/side-nav/side-nav.js +2 -0
- package/dist/components/side-nav/side-nav.svelte +355 -0
- package/dist/components/side-nav/side-nav.svelte.d.ts +24 -0
- package/dist/components/side-nav/types.d.ts +149 -0
- package/dist/components/side-nav/types.js +1 -0
- package/dist/components/skeleton/docs/llms.md +1 -1
- package/dist/components/skeleton/skeleton.svelte +2 -2
- package/dist/components/skeleton/types.d.ts +1 -1
- package/dist/components/slider/docs/llms.md +31 -28
- package/dist/components/slider/slider.svelte +126 -61
- package/dist/components/slider/slider.svelte.d.ts +1 -3
- package/dist/components/slider/types.d.ts +21 -14
- package/dist/components/tab-view/docs/llms.md +7 -7
- package/dist/components/tab-view/tab-view-tab.svelte +16 -14
- package/dist/components/tab-view/tab-view.svelte +16 -9
- package/dist/components/tab-view/types.d.ts +6 -6
- package/dist/components/table/docs/llms.md +38 -33
- package/dist/components/table/table-body.svelte +2 -2
- package/dist/components/table/table-cell-actions.svelte +8 -2
- package/dist/components/table/table-cell-layout.svelte +2 -2
- package/dist/components/table/table-cell.svelte +2 -2
- package/dist/components/table/table-header-cell.svelte +2 -2
- package/dist/components/table/table-header.svelte +2 -2
- package/dist/components/table/table-row.svelte +2 -2
- package/dist/components/table/table-selection-cell.svelte +6 -6
- package/dist/components/table/table.svelte +2 -2
- package/dist/components/table/types.d.ts +11 -11
- package/dist/components/tag/docs/llms.md +26 -26
- package/dist/components/tag/tag-group.svelte +2 -2
- package/dist/components/tag/tag.svelte +13 -12
- package/dist/components/tag/types.d.ts +6 -4
- package/dist/components/tag-picker/docs/llms.md +61 -55
- package/dist/components/tag-picker/option-group.svelte +17 -4
- package/dist/components/tag-picker/option-group.svelte.d.ts +1 -1
- package/dist/components/tag-picker/option.svelte +15 -4
- package/dist/components/tag-picker/tag-picker.svelte +137 -65
- package/dist/components/tag-picker/tag-picker.svelte.d.ts +2 -2
- package/dist/components/tag-picker/types.d.ts +36 -16
- package/dist/components/text-box/docs/llms.md +31 -4
- package/dist/components/text-box/text-box-button.svelte +3 -3
- package/dist/components/text-box/text-box-button.svelte.d.ts +1 -1
- package/dist/components/text-box/text-box.svelte +41 -14
- package/dist/components/text-box/types.d.ts +5 -5
- package/dist/components/textarea/docs/llms.md +4 -3
- package/dist/components/textarea/textarea.svelte +14 -6
- package/dist/components/textarea/types.d.ts +2 -4
- package/dist/components/time-picker/docs/llms.md +18 -15
- package/dist/components/time-picker/time-picker.svelte +133 -33
- package/dist/components/time-picker/time-picker.svelte.d.ts +1 -1
- package/dist/components/time-picker/types.d.ts +23 -13
- package/dist/components/title-bar/docs/llms.md +382 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte +215 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte.d.ts +22 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte +190 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte.d.ts +27 -0
- package/dist/components/title-bar/title-bar.d.ts +3 -0
- package/dist/components/title-bar/title-bar.js +4 -0
- package/dist/components/title-bar/title-bar.svelte +224 -0
- package/dist/components/title-bar/title-bar.svelte.d.ts +26 -0
- package/dist/components/title-bar/types.d.ts +165 -0
- package/dist/components/title-bar/types.js +1 -0
- package/dist/components/toggle-switch/docs/llms.md +11 -9
- package/dist/components/toggle-switch/toggle-switch.svelte +23 -14
- package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +1 -1
- package/dist/components/toggle-switch/types.d.ts +12 -10
- package/dist/components/tooltip/docs/llms.md +1 -1
- package/dist/components/tooltip/tooltip.svelte +5 -4
- package/dist/components/tooltip/types.d.ts +1 -1
- package/dist/components/top-nav/docs/llms.md +1 -1
- package/dist/components/top-nav/top-nav-item.svelte +2 -2
- package/dist/components/top-nav/top-nav.svelte +2 -2
- package/dist/components/top-nav/types.d.ts +2 -2
- package/dist/components/tree-view/docs/llms.md +11 -11
- package/dist/components/tree-view/tree-view-item-content.svelte +3 -3
- package/dist/components/tree-view/tree-view-item.svelte +13 -5
- package/dist/components/tree-view/tree-view.svelte +20 -5
- package/dist/components/tree-view/tree-view.svelte.d.ts +1 -1
- package/dist/components/tree-view/tree-view.svelte.js +31 -3
- package/dist/components/tree-view/types.d.ts +7 -3
- package/dist/index.d.ts +18 -0
- package/dist/index.js +20 -0
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +26 -5
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +2 -0
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +1 -0
- package/dist/internal/native-field.svelte.d.ts +44 -0
- package/dist/internal/native-field.svelte.js +85 -0
- package/dist/internal/utils.d.ts +16 -2
- package/dist/internal/utils.js +25 -3
- package/dist/types/index.d.ts +3 -3
- package/package.json +50 -36
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# SideNav
|
|
2
|
+
|
|
3
|
+
App navigation built on ListView. SideNavItem renders an anchor by default. Use `as="button"` for actions, or `as="li"` / `as="div"` for content with multiple controls. The navigation owns no router: set href and active from your app's current route.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```svelte
|
|
8
|
+
<script>
|
|
9
|
+
import { AppWindow, AppSurface, SideNav, SideNavItem } from 'fluentui-svelte';
|
|
10
|
+
import { HomeRegular, FolderRegular, SettingsRegular } from 'fluentui-icons-svelte';
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<AppWindow width={480} height={240}>
|
|
14
|
+
<SideNav header="Workspace">
|
|
15
|
+
<SideNavItem href="#home" label="Home" icon={HomeRegular} active />
|
|
16
|
+
<SideNavItem href="#documents" label="Documents" icon={FolderRegular} />
|
|
17
|
+
<SideNavItem href="#settings" label="Settings" icon={SettingsRegular} />
|
|
18
|
+
</SideNav>
|
|
19
|
+
<AppSurface style="padding: 1rem">Page content</AppSurface>
|
|
20
|
+
</AppWindow>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
SideNav also works on its own, in any container with a height. Use `bind:collapsed` to control it, `SideNavBranch` to nest items and the `footer` snippet to pin items to the bottom.
|
|
24
|
+
|
|
25
|
+
## Modes and accessibility
|
|
26
|
+
|
|
27
|
+
Docked navigation occupies layout space and collapses to an icon rail. Labels remain available to assistive technology. Items without icons show their initial in the rail. Opening a branch from the rail expands the navigation first.
|
|
28
|
+
|
|
29
|
+
With `floating`, SideNav overlays AppWindow's body below its optional TitleBar. Closed floating navigation shows only the hamburger; opening it does not move page content. It is non-modal and does not trap focus. Escape, an outside pointer press, moving focus outside, and activating a SideNavItem close it. Set `closeOnSelect={false}` to keep it open after activation. A standalone floating SideNav needs a positioned parent.
|
|
30
|
+
|
|
31
|
+
Inside an AppWindow whose TitleBar has a global navigation button (`TitleBarLeftControls globalNav`), that button expands and collapses the SideNav, follows its state in `aria-expanded`, and SideNav hides its own hamburger. Set `showToggle` to `true` to keep both, or to `false` to hide the hamburger and control it yourself (`getAppWindowContext().state.sideNav.setCollapsed`). While a floating navigation is open, the global button is not an outside press.
|
|
32
|
+
|
|
33
|
+
The Button toggle exposes aria-expanded and aria-controls. SideNav is a named navigation landmark with native lists and links. The underlying ListView supplies arrow navigation, disabled-item handling and selection. Avoid menu/listbox roles for ordinary route navigation. There is no back button.
|
|
34
|
+
|
|
35
|
+
## Custom content and footer
|
|
36
|
+
|
|
37
|
+
Only two regions accept text, snippets or components: `topContent`, between the hamburger section and the list, and `footerContent`, after the list and before the pinned navigation footer. Strings render as text and are hidden in the compact rail. Snippets receive `{ collapsed, floating }`; components receive these as props, so they can render compact controls or hide their content. Use a snippet to supply other required component props.
|
|
38
|
+
|
|
39
|
+
The header is plain text. SideNavItem uses its label or ordinary ListViewItem children markup. The `footer` snippet contains navigation entries and remains pinned while the main list scrolls. Compose real Menu, TextBox, Avatar and Button components in the two custom regions.
|
|
40
|
+
|
|
41
|
+
## ListView customization
|
|
42
|
+
|
|
43
|
+
`listViewProps` customizes every list of the navigation: the main one, the footer and the ones inside a SideNavBranch. Defaults are role="list", selectionMode="none" and navigationMode="items". Keep native list semantics when using branches. Selection can be enabled and bound through `selectedItems`, shared across all of them. Set each item's value when using selection.
|
|
44
|
+
|
|
45
|
+
## Component Props (SideNav)
|
|
46
|
+
|
|
47
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
48
|
+
<!-- props:SideNavProps -->
|
|
49
|
+
|
|
50
|
+
| Name | Type | Default | Description |
|
|
51
|
+
| ------------------------------------------------ | -------------------------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `ref` _bindable_ | `HTMLElement` | `null` | | The DOM reference of the navigation landmark. |
|
|
53
|
+
| `label` | `string` | `'Main navigation'` | The accessible name of the navigation landmark. |
|
|
54
|
+
| `collapsed` _bindable_ | `boolean` | `false` | Shows an icon rail when docked, or only the toggle when floating. |
|
|
55
|
+
| `position` | `'left'` | `'right'` | `'left'` | The side of the window the navigation is on. It mirrors in right-to-left layouts, and AppSurface rounds the corners that face it. |
|
|
56
|
+
| `showToggle` | `boolean` | `Automatic` | Whether the navigation shows its own hamburger toggle. By default it hides it when the title bar of its window has a global navigation button, which then controls the navigation. Set it to true to keep both, or to false to control the navigation yourself. |
|
|
57
|
+
| `floating` | `boolean` | `false` | Overlays the content of a positioned parent instead of taking layout space. The overlay is non-modal. |
|
|
58
|
+
| `width` | `number` | `string` | `200` | The expanded width. Numbers are pixels converted to rem; strings are CSS lengths. |
|
|
59
|
+
| `expandLabel` | `string` | `'Expand navigation'` | The accessible label of the toggle while collapsed. |
|
|
60
|
+
| `collapseLabel` | `string` | `'Collapse navigation'` | The accessible label of the toggle while expanded. |
|
|
61
|
+
| `closeOnSelect` | `boolean` | `true` | Closes a floating panel after activating a SideNavItem. |
|
|
62
|
+
| `onCollapsedChange` | `(event: Event, collapsed: boolean) => void` | | Called when the user expands or collapses the navigation. |
|
|
63
|
+
| `selectedItems` _bindable_ | `string[]` | | The selection shared by every list in the navigation. Selection is off by default. |
|
|
64
|
+
| `listViewProps` | `SideNavListViewProps` | | Overrides the defaults of every list in the navigation, the main one, the footer and the ones inside a SideNavBranch: native list semantics, no selection and one tab stop per item. |
|
|
65
|
+
| `header` | `string` | | The text heading beside the hamburger button. Hidden in the compact rail. |
|
|
66
|
+
| `topContent` | `string` | `Snippet` | `Component` | | Custom content between the hamburger section and the list. Text, snippets and components are supported. Renderers receive collapsed and floating; strings are hidden in the compact rail. |
|
|
67
|
+
| `footerContent` | `string` | `Snippet` | `Component` | | Custom content after the scrolling list and before the pinned footer. Text, snippets and components are supported. Renderers receive collapsed and floating; strings are hidden in the compact rail. |
|
|
68
|
+
| `footer` | `Snippet` | | Footer list items pinned to the bottom, outside the main list's scroll area. |
|
|
69
|
+
| `children` | `Snippet` | | Main navigation items. Use SideNavItem and SideNavBranch. |
|
|
70
|
+
| `HTMLAttributes<HTMLElement>` without `children` | | | |
|
|
71
|
+
|
|
72
|
+
<!-- /props:SideNavProps -->
|
|
73
|
+
|
|
74
|
+
## Component Props (SideNavItem)
|
|
75
|
+
|
|
76
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
77
|
+
<!-- props:SideNavItemProps -->
|
|
78
|
+
|
|
79
|
+
| Name | Type | Default | Description |
|
|
80
|
+
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------- |
|
|
81
|
+
| `as` | `'li'` | `'a'` | `'button'` | `'div'` | `'a'` | The HTML tag. Links are the default; use button for actions and li or div for custom controls. |
|
|
82
|
+
| `ref` _bindable_ | `HTMLLIElement` | `HTMLAnchorElement` | `HTMLButtonElement` | `HTMLDivElement` | | The DOM reference of the item. |
|
|
83
|
+
| `label` | `string` | | The accessible label, also used as visible content when children are absent. |
|
|
84
|
+
| `icon` | `Snippet` | `Component` | | The decorative icon shown in both expanded and collapsed modes. |
|
|
85
|
+
| `children` | `Snippet` | | Optional item markup, following ListViewItem. The label is rendered when children are absent. |
|
|
86
|
+
| `shape`, `value`, `active`, `role`, `disabled`, `checkmark`, `onAction`, `onfocus` from `ListViewItemProps` | | | |
|
|
87
|
+
| HTML Attributes | | | |
|
|
88
|
+
|
|
89
|
+
<!-- /props:SideNavItemProps -->
|
|
90
|
+
|
|
91
|
+
## Component Props (SideNavBranch)
|
|
92
|
+
|
|
93
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
94
|
+
<!-- props:SideNavBranchProps -->
|
|
95
|
+
|
|
96
|
+
| Name | Type | Default | Description |
|
|
97
|
+
| ---------------------------------------------------------------------------------------------------- | --------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
98
|
+
| `label` | `string` | | The accessible label of the disclosure button. In the compact rail, its initial stands in when there is no icon. |
|
|
99
|
+
| `icon` | `Snippet` | `Component` | | The decorative icon before the label. |
|
|
100
|
+
| `expanded` _bindable_ | `boolean` | `false` | Whether the nested items are visible. Branches only expand or collapse and are never selectable. The compact rail reports a branch as collapsed, and opens the navigation when one is pressed. |
|
|
101
|
+
| `onExpandedChange` | `(e: Event, expanded: boolean) => void` | | Called when a user expands or collapses the branch. |
|
|
102
|
+
| `disabled` | `boolean` | `false` | Disables the disclosure button. |
|
|
103
|
+
| `ref` _bindable_ | `HTMLButtonElement` | | The DOM reference of the native disclosure button. Additional HTML attributes, including class and id, also target this button. |
|
|
104
|
+
| `wrapperRef` _bindable_ | `HTMLLIElement` | `HTMLDivElement` | | The DOM reference of the wrapper element, the list item that holds the button and the nested list. |
|
|
105
|
+
| `wrapperAttributes` | `HTMLAttributes` | | The attributes to spread on the wrapper element. |
|
|
106
|
+
| `shape` | `ListViewItemBranchProps['shape']` | | The disclosure button shape. Inherited from the list by default. |
|
|
107
|
+
| `children` | `Snippet` | | The nested SideNavItem and SideNavBranch content. |
|
|
108
|
+
| `HTMLButtonAttributes` without `children`, `role`, `type`, `value`, `aria-expanded`, `aria-controls` | | | |
|
|
109
|
+
|
|
110
|
+
<!-- /props:SideNavBranchProps -->
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import ListViewItemBranch from '../list-view/list-view-item-branch.svelte';
|
|
3
|
+
import SideNavList from './side-nav-list.svelte';
|
|
4
|
+
import { getSideNavContext } from './side-nav.js';
|
|
5
|
+
import type { SideNavBranchProps } from './types.js';
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
ref = $bindable(null),
|
|
9
|
+
wrapperRef = $bindable(null),
|
|
10
|
+
expanded = $bindable(false),
|
|
11
|
+
label,
|
|
12
|
+
wrapperAttributes,
|
|
13
|
+
icon,
|
|
14
|
+
onclick,
|
|
15
|
+
children,
|
|
16
|
+
...attributes
|
|
17
|
+
}: SideNavBranchProps = $props();
|
|
18
|
+
|
|
19
|
+
const context = getSideNavContext();
|
|
20
|
+
// The rail hides the branch, so the branch reports collapsed there without losing its own state.
|
|
21
|
+
const visiblyExpanded = () => expanded && !context?.state.compact;
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
{#snippet initial()}<span>{label.slice(0, 1)}</span>{/snippet}
|
|
25
|
+
|
|
26
|
+
<ListViewItemBranch
|
|
27
|
+
{...attributes}
|
|
28
|
+
{label}
|
|
29
|
+
wrapperAttributes={{ class: `fs-side-nav-branch ${wrapperAttributes?.class ?? ''}`, ...wrapperAttributes }}
|
|
30
|
+
icon={icon ?? (context?.state.compact ? initial : undefined)}
|
|
31
|
+
bind:ref
|
|
32
|
+
bind:wrapperRef
|
|
33
|
+
bind:expanded={visiblyExpanded, (value) => (expanded = value)}
|
|
34
|
+
onclick={(event) => {
|
|
35
|
+
onclick?.(event);
|
|
36
|
+
// A branch cannot open inside the rail, so the rail opens first.
|
|
37
|
+
if (!event.defaultPrevented) context?.methods.setCollapsed(event, false);
|
|
38
|
+
}}
|
|
39
|
+
>
|
|
40
|
+
<SideNavList>
|
|
41
|
+
{@render children?.()}
|
|
42
|
+
</SideNavList>
|
|
43
|
+
</ListViewItemBranch>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script lang="ts" generics="T extends 'li' | 'a' | 'button' | 'div' = 'a'">
|
|
2
|
+
import ListViewItem from '../list-view/list-view-item.svelte';
|
|
3
|
+
import { RenderSoC } from '../../internal/index.js';
|
|
4
|
+
import { getSideNavContext } from './side-nav.js';
|
|
5
|
+
import type { SideNavItemProps } from './types.js';
|
|
6
|
+
import type { ListViewItemProps } from '../list-view/types.js';
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
as = 'a' as T,
|
|
10
|
+
ref = $bindable(null),
|
|
11
|
+
label,
|
|
12
|
+
icon,
|
|
13
|
+
children,
|
|
14
|
+
onAction,
|
|
15
|
+
...attributes
|
|
16
|
+
}: SideNavItemProps<T> = $props();
|
|
17
|
+
|
|
18
|
+
// Outside a SideNav the item is a plain, expanded one: it has no rail to fit and no panel to close.
|
|
19
|
+
const context = getSideNavContext();
|
|
20
|
+
const Item = ListViewItem<T>;
|
|
21
|
+
const compact = $derived(context?.state.compact ?? false);
|
|
22
|
+
|
|
23
|
+
function handleAction(event: MouseEvent, value: string) {
|
|
24
|
+
onAction?.(event, value);
|
|
25
|
+
context?.methods.activate(event);
|
|
26
|
+
}
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<Item
|
|
30
|
+
{as}
|
|
31
|
+
bind:ref
|
|
32
|
+
aria-label={label}
|
|
33
|
+
title={compact ? label : undefined}
|
|
34
|
+
{...attributes as unknown as ListViewItemProps<T>}
|
|
35
|
+
onAction={as === 'a' || as === 'button' || onAction ? handleAction : undefined}
|
|
36
|
+
>
|
|
37
|
+
{#if icon}
|
|
38
|
+
<span class="fs-side-nav-item-icon" aria-hidden="true">
|
|
39
|
+
<RenderSoC SoC={icon} />
|
|
40
|
+
</span>
|
|
41
|
+
{:else if compact}
|
|
42
|
+
<span class="fs-side-nav-item-icon" aria-hidden="true">
|
|
43
|
+
{label.slice(0, 1)}
|
|
44
|
+
</span>
|
|
45
|
+
{/if}
|
|
46
|
+
<span class="fs-side-nav-item-label" hidden={compact}>
|
|
47
|
+
{#if children}
|
|
48
|
+
{@render children()}
|
|
49
|
+
{:else}
|
|
50
|
+
{label}
|
|
51
|
+
{/if}
|
|
52
|
+
</span>
|
|
53
|
+
</Item>
|
|
54
|
+
|
|
55
|
+
<style>
|
|
56
|
+
.fs-side-nav-item-icon {
|
|
57
|
+
display: inline-flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
flex: none;
|
|
61
|
+
inline-size: 1rem;
|
|
62
|
+
/* As tall as a line of text, so an item is as tall with its label as without it. */
|
|
63
|
+
block-size: 1lh;
|
|
64
|
+
& :global(svg) {
|
|
65
|
+
inline-size: 1rem;
|
|
66
|
+
block-size: 1rem;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
.fs-side-nav-item-label {
|
|
70
|
+
min-inline-size: 0;
|
|
71
|
+
overflow: hidden;
|
|
72
|
+
text-overflow: ellipsis;
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
}
|
|
75
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SideNavItemProps } from './types.ts';
|
|
2
|
+
declare function $$render<T extends 'li' | 'a' | 'button' | 'div' = 'a'>(): {
|
|
3
|
+
props: SideNavItemProps<T>;
|
|
4
|
+
exports: {};
|
|
5
|
+
bindings: "ref";
|
|
6
|
+
slots: {};
|
|
7
|
+
events: {};
|
|
8
|
+
};
|
|
9
|
+
declare class __sveltets_Render<T extends 'li' | 'a' | 'button' | 'div' = 'a'> {
|
|
10
|
+
props(): ReturnType<typeof $$render<T>>['props'];
|
|
11
|
+
events(): ReturnType<typeof $$render<T>>['events'];
|
|
12
|
+
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
13
|
+
bindings(): "ref";
|
|
14
|
+
exports(): {};
|
|
15
|
+
}
|
|
16
|
+
interface $$IsomorphicComponent {
|
|
17
|
+
new <T extends 'li' | 'a' | 'button' | 'div' = 'a'>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
18
|
+
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
19
|
+
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
20
|
+
<T extends 'li' | 'a' | 'button' | 'div' = 'a'>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
21
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
22
|
+
}
|
|
23
|
+
declare const SideNavItem: $$IsomorphicComponent;
|
|
24
|
+
type SideNavItem<T extends 'li' | 'a' | 'button' | 'div' = 'a'> = InstanceType<typeof SideNavItem<T>>;
|
|
25
|
+
export default SideNavItem;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import ListView from '../list-view/list-view.svelte';
|
|
4
|
+
import { getSideNavContext } from './side-nav.js';
|
|
5
|
+
|
|
6
|
+
let { children }: { children?: Snippet } = $props();
|
|
7
|
+
|
|
8
|
+
const context = getSideNavContext();
|
|
9
|
+
|
|
10
|
+
// Escape belongs to the enclosing panel: ListView keeps its other navigation keys.
|
|
11
|
+
const MANAGED_KEYS = { Home: true, End: true, PageUp: true, PageDown: true };
|
|
12
|
+
|
|
13
|
+
// Outside a SideNav, a branch keeps the selection of its own list.
|
|
14
|
+
let ownSelectedItems = $state<string[]>([]);
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<ListView
|
|
18
|
+
role="list"
|
|
19
|
+
selectionMode="none"
|
|
20
|
+
navigationMode="items"
|
|
21
|
+
manageSpecialKeys={MANAGED_KEYS}
|
|
22
|
+
{...context?.config.listViewProps}
|
|
23
|
+
bind:selectedItems={
|
|
24
|
+
() => context?.state.selectedItems ?? ownSelectedItems,
|
|
25
|
+
(value) => {
|
|
26
|
+
if (context) context.state.selectedItems = value;
|
|
27
|
+
else ownSelectedItems = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
>
|
|
31
|
+
{@render children?.()}
|
|
32
|
+
</ListView>
|