fluent-svelte-extra 1.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.
Files changed (145) hide show
  1. package/.prettierignore +1 -0
  2. package/.prettierrc +7 -0
  3. package/CHANGELOG.md +7 -0
  4. package/LICENSE +21 -0
  5. package/README.md +33 -0
  6. package/package.json +83 -0
  7. package/src/app.html +12 -0
  8. package/src/global.d.ts +1 -0
  9. package/src/lib/AutoSuggestBox/AutoSuggestBox.scss +44 -0
  10. package/src/lib/AutoSuggestBox/AutoSuggestBox.svelte +173 -0
  11. package/src/lib/Button/Button.scss +94 -0
  12. package/src/lib/Button/Button.svelte +48 -0
  13. package/src/lib/CalendarDatePicker/CalendarDatePicker.scss +15 -0
  14. package/src/lib/CalendarDatePicker/CalendarDatePicker.svelte +86 -0
  15. package/src/lib/CalendarView/CalendarView.scss +156 -0
  16. package/src/lib/CalendarView/CalendarView.svelte +753 -0
  17. package/src/lib/CalendarView/CalendarViewItem.scss +130 -0
  18. package/src/lib/CalendarView/CalendarViewItem.svelte +33 -0
  19. package/src/lib/Checkbox/Checkbox.scss +117 -0
  20. package/src/lib/Checkbox/Checkbox.svelte +81 -0
  21. package/src/lib/ComboBox/ComboBox.scss +152 -0
  22. package/src/lib/ComboBox/ComboBox.svelte +360 -0
  23. package/src/lib/ComboBox/ComboBoxItem.scss +80 -0
  24. package/src/lib/ComboBox/ComboBoxItem.svelte +30 -0
  25. package/src/lib/ContentDialog/ContentDialog.scss +68 -0
  26. package/src/lib/ContentDialog/ContentDialog.svelte +123 -0
  27. package/src/lib/ContextMenu/ContextMenu.scss +11 -0
  28. package/src/lib/ContextMenu/ContextMenu.svelte +104 -0
  29. package/src/lib/Expander/Expander.scss +134 -0
  30. package/src/lib/Expander/Expander.svelte +123 -0
  31. package/src/lib/Flipper/Flipper.svelte +49 -0
  32. package/src/lib/Flyout/FlyoutSurface.scss +14 -0
  33. package/src/lib/Flyout/FlyoutSurface.svelte +21 -0
  34. package/src/lib/Flyout/FlyoutWrapper.scss +81 -0
  35. package/src/lib/Flyout/FlyoutWrapper.svelte +126 -0
  36. package/src/lib/IconButton/IconButton.scss +31 -0
  37. package/src/lib/IconButton/IconButton.svelte +49 -0
  38. package/src/lib/InfoBadge/InfoBadge.scss +39 -0
  39. package/src/lib/InfoBadge/InfoBadge.svelte +81 -0
  40. package/src/lib/InfoBar/InfoBar.scss +122 -0
  41. package/src/lib/InfoBar/InfoBar.svelte +133 -0
  42. package/src/lib/ListItem/ListItem.scss +74 -0
  43. package/src/lib/ListItem/ListItem.svelte +88 -0
  44. package/src/lib/MenuBar/MenuBar.scss +10 -0
  45. package/src/lib/MenuBar/MenuBar.svelte +49 -0
  46. package/src/lib/MenuBar/MenuBarItem.scss +38 -0
  47. package/src/lib/MenuBar/MenuBarItem.svelte +135 -0
  48. package/src/lib/MenuBar/flyoutState.ts +5 -0
  49. package/src/lib/MenuFlyout/MenuFlyoutDivider.scss +7 -0
  50. package/src/lib/MenuFlyout/MenuFlyoutDivider.svelte +14 -0
  51. package/src/lib/MenuFlyout/MenuFlyoutItem.scss +147 -0
  52. package/src/lib/MenuFlyout/MenuFlyoutItem.svelte +239 -0
  53. package/src/lib/MenuFlyout/MenuFlyoutSurface.scss +42 -0
  54. package/src/lib/MenuFlyout/MenuFlyoutSurface.svelte +28 -0
  55. package/src/lib/MenuFlyout/MenuFlyoutWrapper.scss +64 -0
  56. package/src/lib/MenuFlyout/MenuFlyoutWrapper.svelte +114 -0
  57. package/src/lib/NavigationView/NavigationView.scss +0 -0
  58. package/src/lib/NavigationView/NavigationView.svelte +82 -0
  59. package/src/lib/NumberBox/NumberBox.scss +31 -0
  60. package/src/lib/NumberBox/NumberBox.svelte +267 -0
  61. package/src/lib/PersonPicture/PersonPicture.scss +35 -0
  62. package/src/lib/PersonPicture/PersonPicture.svelte +62 -0
  63. package/src/lib/ProgressBar/ProgressBar.scss +83 -0
  64. package/src/lib/ProgressBar/ProgressBar.svelte +60 -0
  65. package/src/lib/ProgressRing/ProgressRing.scss +37 -0
  66. package/src/lib/ProgressRing/ProgressRing.svelte +73 -0
  67. package/src/lib/RadioButton/RadioButton.scss +114 -0
  68. package/src/lib/RadioButton/RadioButton.svelte +67 -0
  69. package/src/lib/RangeSlider/RangeSlider.svelte +91 -0
  70. package/src/lib/ScrollView/ScrollView.svelte +9 -0
  71. package/src/lib/Slider/Slider.scss +263 -0
  72. package/src/lib/Slider/Slider.svelte +261 -0
  73. package/src/lib/TextBlock/TextBlock.scss +62 -0
  74. package/src/lib/TextBlock/TextBlock.svelte +70 -0
  75. package/src/lib/TextBox/TextBox.scss +108 -0
  76. package/src/lib/TextBox/TextBox.svelte +225 -0
  77. package/src/lib/TextBox/TextBoxButton.scss +34 -0
  78. package/src/lib/TextBox/TextBoxButton.svelte +27 -0
  79. package/src/lib/ToggleSwitch/ToggleSwitch.scss +118 -0
  80. package/src/lib/ToggleSwitch/ToggleSwitch.svelte +55 -0
  81. package/src/lib/Tooltip/TooltipSurface.scss +16 -0
  82. package/src/lib/Tooltip/TooltipSurface.svelte +27 -0
  83. package/src/lib/Tooltip/TooltipWrapper.scss +66 -0
  84. package/src/lib/Tooltip/TooltipWrapper.svelte +117 -0
  85. package/src/lib/_mixins.scss +130 -0
  86. package/src/lib/index.ts +33 -0
  87. package/src/lib/internal.ts +213 -0
  88. package/src/lib/svelte-jsx.d.ts +14 -0
  89. package/src/lib/theme.css +414 -0
  90. package/src/routes/__layout.svelte +48 -0
  91. package/src/routes/docs/__layout.svelte +122 -0
  92. package/src/routes/docs/components/button.md +43 -0
  93. package/src/routes/docs/components/calendarview.md +188 -0
  94. package/src/routes/docs/components/checkbox.md +87 -0
  95. package/src/routes/docs/components/contentdialog.md +155 -0
  96. package/src/routes/docs/components/expander.md +115 -0
  97. package/src/routes/docs/components/flyout.md +107 -0
  98. package/src/routes/docs/components/iconbutton.md +39 -0
  99. package/src/routes/docs/components/infobadge.md +54 -0
  100. package/src/routes/docs/components/infobar.md +102 -0
  101. package/src/routes/docs/components/listitem.md +87 -0
  102. package/src/routes/docs/components/personpicture.md +125 -0
  103. package/src/routes/docs/components/progressring.md +83 -0
  104. package/src/routes/docs/components/radiobutton.md +88 -0
  105. package/src/routes/docs/components/slider.md +165 -0
  106. package/src/routes/docs/components/textblock.md +46 -0
  107. package/src/routes/docs/components/textbox.md +124 -0
  108. package/src/routes/docs/components/toggleswitch.md +73 -0
  109. package/src/routes/docs/getting-started.md +116 -0
  110. package/src/routes/docs/index.md +37 -0
  111. package/src/routes/docs/internals/index.md +0 -0
  112. package/src/routes/index.svelte +121 -0
  113. package/src/routes/test/__layout-test.svelte +1 -0
  114. package/src/routes/test/index.svelte +757 -0
  115. package/src/routes/test/nav.svelte +7 -0
  116. package/src/site/data/docs.ts +176 -0
  117. package/src/site/data/home.ts +12 -0
  118. package/src/site/lib/APIDocs/APIDocs.svelte +178 -0
  119. package/src/site/lib/APIDocs/ParsedComponent.d.ts +85 -0
  120. package/src/site/lib/CopyBox/CopyBox.svelte +23 -0
  121. package/src/site/lib/Example/Example.scss +33 -0
  122. package/src/site/lib/Example/Example.svelte +18 -0
  123. package/src/site/lib/HeroCard/HeroCard.scss +24 -0
  124. package/src/site/lib/HeroCard/HeroCard.svelte +36 -0
  125. package/src/site/lib/Metadata/Metadata.svelte +14 -0
  126. package/src/site/lib/Navbar/Navbar.scss +92 -0
  127. package/src/site/lib/Navbar/Navbar.svelte +47 -0
  128. package/src/site/lib/PageSection/PageSection.scss +57 -0
  129. package/src/site/lib/PageSection/PageSection.svelte +10 -0
  130. package/src/site/lib/Showcase/Showcase.scss +53 -0
  131. package/src/site/lib/Showcase/Showcase.svelte +67 -0
  132. package/src/site/lib/Toc/Toc.scss +18 -0
  133. package/src/site/lib/Toc/Toc.svelte +59 -0
  134. package/src/site/lib/TreeView/TreeView.svelte +89 -0
  135. package/src/site/lib/index.ts +9 -0
  136. package/src/site/styles/_markdown.scss +260 -0
  137. package/src/site/styles/_mixins.scss +319 -0
  138. package/src/site/styles/global.scss +40 -0
  139. package/src/site/styles/pages/docs.scss +74 -0
  140. package/src/site/styles/pages/home.scss +134 -0
  141. package/static/bloom-mica-dark.png +0 -0
  142. package/static/bloom-mica-light.png +0 -0
  143. package/static/logo.svg +11 -0
  144. package/svelte.config.js +57 -0
  145. package/tsconfig.json +38 -0
@@ -0,0 +1,92 @@
1
+ @use "src/lib/mixins" as *;
2
+
3
+ .navbar {
4
+ @include flex($align: center, $justify: center);
5
+ position: fixed;
6
+ transform: translateY(0.001px);
7
+ inset-block-start: 0;
8
+ inset-inline-start: 0;
9
+ z-index: 1000;
10
+ inline-size: 100%;
11
+ min-block-size: 56px;
12
+ box-sizing: border-box;
13
+ border-bottom: 1px solid var(--surface-stroke-flyout);
14
+ background-color: var(--layer-background-default);
15
+ background-clip: padding-box;
16
+ backdrop-filter: blur(60px);
17
+ &-inner {
18
+ @include flex($align: center);
19
+ inline-size: 100%;
20
+ max-inline-size: 1440px;
21
+ padding-inline: 18px 12px;
22
+ margin: 0 auto;
23
+ }
24
+ a:focus-visible {
25
+ outline: none;
26
+ box-shadow: var(--focus-stroke);
27
+ }
28
+ nav {
29
+ @include flex($align: center, $justify: end, $gap: 12px);
30
+ flex: 1 1 auto;
31
+ padding: 0 16px;
32
+ a {
33
+ @include flex($align: center, $justify: center);
34
+ border-radius: var(--control-corner-radius);
35
+ position: relative;
36
+ text-decoration: none;
37
+ color: var(--text-primary);
38
+ transition: var(--control-fast-duration) var(--control-fast-out-slow-in-easing);
39
+ padding: 5px 11px;
40
+ &:hover,
41
+ &.selected {
42
+ background-color: var(--subtle-fill-secondary);
43
+ }
44
+ &:active {
45
+ background-color: var(--subtle-fill-tertiary);
46
+ }
47
+ &.selected {
48
+ color: var(--accent-text-primary);
49
+ }
50
+ > :global(svg) {
51
+ @include icon($size: calc(var(--body-font-size) + 2px));
52
+ margin-right: 8px;
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ .logo,
59
+ .buttons {
60
+ flex: 0 0 auto;
61
+ }
62
+
63
+ .logo {
64
+ @include flex($justify: center, $align: center);
65
+ text-decoration: none;
66
+ position: relative;
67
+ color: var(--text-primary);
68
+ transition: var(--control-fast-duration) var(--control-fast-out-slow-in-easing);
69
+ font: {
70
+ family: var(--fds-font-family-display);
71
+ size: 20px;
72
+ weight: 600;
73
+ }
74
+ &:hover {
75
+ color: var(--text-secondary);
76
+ }
77
+ > img {
78
+ margin-inline-end: 14px;
79
+ width: auto;
80
+ height: 32px;
81
+ }
82
+ :global(.text-block) {
83
+ color: var(--text-secondary);
84
+ margin-inline-start: 6px;
85
+ position: relative;
86
+ top: 1px;
87
+ }
88
+ }
89
+
90
+ .buttons {
91
+ @include flex($align: center, $gap: 8px);
92
+ }
@@ -0,0 +1,47 @@
1
+ <script lang="ts">
2
+ import { page } from "$app/stores";
3
+ import { TextBlock } from "$lib";
4
+
5
+ interface Item {
6
+ href: string;
7
+ name: string;
8
+ icon?: string;
9
+ }
10
+
11
+ export let items: Item[];
12
+ </script>
13
+
14
+ <header class="navbar">
15
+ <div class="navbar-inner">
16
+ <a class="logo" href="/">
17
+ <img src="/logo.svg" width="32" height="32" alt="Fluent Svelte logo" />
18
+ Fluent Svelte <TextBlock variant="caption">ALPHA</TextBlock>
19
+ </a>
20
+ <nav>
21
+ {#each items as { href, name, icon }}
22
+ <a
23
+ {href}
24
+ sveltekit:prefetch
25
+ class:selected={$page.url.pathname === href ||
26
+ ($page.url.pathname.split("/").length > 1 &&
27
+ href.split("/").length > 1 &&
28
+ $page.url.pathname.startsWith(href) &&
29
+ !(href === "" || href === "/")) ||
30
+ (href === "/" && $page.url.pathname === "")}
31
+ >
32
+ {#if icon}
33
+ {@html icon}
34
+ {/if}
35
+ <TextBlock>{name}</TextBlock>
36
+ </a>
37
+ {/each}
38
+ </nav>
39
+ <div class="buttons">
40
+ <slot name="buttons" />
41
+ </div>
42
+ </div>
43
+ </header>
44
+
45
+ <style lang="scss">
46
+ @use "./Navbar";
47
+ </style>
@@ -0,0 +1,57 @@
1
+ @use "src/lib/mixins" as *;
2
+
3
+ .page-section {
4
+ &-inner {
5
+ margin: 0 auto;
6
+ width: 100%;
7
+ max-width: 1440px;
8
+ padding: 72px;
9
+ }
10
+ :global {
11
+ h1,
12
+ h2,
13
+ h3 {
14
+ margin: 0;
15
+ font-family: var(--font-family-display);
16
+ color: var(--text-primary);
17
+ font-weight: 600;
18
+ line-height: normal;
19
+ }
20
+
21
+ h1 {
22
+ font-size: 7.2rem;
23
+ }
24
+
25
+ h2 {
26
+ font-size: 4.8rem;
27
+ }
28
+
29
+ h3 {
30
+ font-size: 3.2rem;
31
+ }
32
+
33
+ p:not([class]) {
34
+ max-width: 65ch;
35
+ margin-block: 12px 24px;
36
+ color: var(--text-secondary);
37
+ font: {
38
+ size: 1.6rem;
39
+ weight: 400;
40
+ }
41
+ line-height: 1.65;
42
+ @media (prefers-color-scheme: dark) {
43
+ color: var(--text-tertiary);
44
+ }
45
+ }
46
+
47
+ hr:not([class]) {
48
+ margin: 0 0 24px;
49
+ border: none;
50
+ border-block-start: 1px solid var(--divider-default);
51
+ }
52
+
53
+ .buttons-spacer {
54
+ @include flex($inline: true, $wrap: true, $gap: 8px);
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,10 @@
1
+ <section class="page-section" {...$$restProps}>
2
+ <div class="page-section-inner">
3
+ <slot />
4
+ </div>
5
+ <slot name="outer" />
6
+ </section>
7
+
8
+ <style lang="scss">
9
+ @use "./PageSection";
10
+ </style>
@@ -0,0 +1,53 @@
1
+ @use "src/lib/mixins" as *;
2
+
3
+ .component-showcase {
4
+ position: relative;
5
+ overflow: hidden;
6
+ outline: none;
7
+ contain: layout;
8
+ min-block-size: 240px;
9
+ inline-size: 100%;
10
+ border-radius: var(--overlay-corner-radius);
11
+ background-clip: padding-box;
12
+ background-color: var(--card-background-default);
13
+ border: 1px solid var(--card-stroke-default);
14
+ box-shadow: var(--card-shadow);
15
+ padding: 24px;
16
+ z-index: 1;
17
+ &:focus-visible {
18
+ box-shadow: var(--focus-stroke);
19
+ }
20
+ &-grid {
21
+ margin: 24px;
22
+ position: relative;
23
+ display: grid;
24
+ place-items: center;
25
+ grid-gap: 12px;
26
+ }
27
+ &-backdrop,
28
+ &-inner {
29
+ @include flex($align: center, $justify: center);
30
+ position: absolute;
31
+ inset-inline-start: 0;
32
+ inset-block-start: 0;
33
+ inline-size: 100%;
34
+ block-size: 100%;
35
+ }
36
+ &-backdrop {
37
+ z-index: -1;
38
+ transform: translate(-50%, -50%);
39
+ block-size: 600%;
40
+ inline-size: 600%;
41
+ }
42
+ &-buttons {
43
+ position: absolute;
44
+ inset-inline-end: 12px;
45
+ inset-block-end: 12px;
46
+ }
47
+ :global {
48
+ .info-bar {
49
+ inline-size: 100%;
50
+ margin-block-end: 0;
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,67 @@
1
+ <script lang="ts">
2
+ import { IconButton, Tooltip } from "$lib";
3
+
4
+ import _panzoom from "panzoom";
5
+ import type { PanZoomOptions } from "panzoom";
6
+
7
+ import Edit from "@fluentui/svg-icons/icons/edit_16_regular.svg?raw";
8
+
9
+ export let columns = 1;
10
+
11
+ export let columnWidth = "1fr";
12
+
13
+ export let repl = "";
14
+
15
+ let className = "";
16
+ export { className as class };
17
+
18
+ function panzoom(node: HTMLElement, options?: PanZoomOptions) {
19
+ _panzoom(node, options);
20
+ }
21
+ </script>
22
+
23
+ <div class="component-showcase {className}" {...$$restProps}>
24
+ <div use:panzoom={{ minZoom: 0.5, maxZoom: 10, bounds: true }} class="component-showcase-inner">
25
+ <div
26
+ class="component-showcase-grid"
27
+ style="grid-template-columns: {`${columnWidth} `.repeat(columns)}"
28
+ >
29
+ <slot />
30
+ </div>
31
+ <svg class="component-showcase-backdrop">
32
+ <pattern
33
+ id="pattern-14333"
34
+ x="5.800038310074086"
35
+ y="6.229276141719765"
36
+ width="11.17258097342026"
37
+ height="11.17258097342026"
38
+ patternUnits="userSpaceOnUse"
39
+ >
40
+ <circle
41
+ cx="0.2979354926245403"
42
+ cy="0.2979354926245403"
43
+ r="0.2979354926245403"
44
+ fill="var(--fds-text-disabled)"
45
+ />
46
+ </pattern>
47
+ <rect x="0" y="0" width="100%" height="100%" fill="url(#pattern-14333)" />
48
+ </svg>
49
+ </div>
50
+ <div class="component-showcase-buttons">
51
+ {#if repl}
52
+ <Tooltip text="Edit in Svelte REPL" offset={8} placement="left">
53
+ <IconButton
54
+ href="https://svelte.dev/repl/{repl}"
55
+ target="blank"
56
+ rel="noreferrer noopener"
57
+ >
58
+ {@html Edit}
59
+ </IconButton>
60
+ </Tooltip>
61
+ {/if}
62
+ </div>
63
+ </div>
64
+
65
+ <style lang="scss">
66
+ @use "./Showcase";
67
+ </style>
@@ -0,0 +1,18 @@
1
+ .table-of-contents {
2
+ li {
3
+ list-style-type: none;
4
+ margin: 0;
5
+ padding: 0;
6
+ margin-left: calc(12px * var(--depth));
7
+ }
8
+ :global(.list-item) {
9
+ margin-inline: 0;
10
+ inline-size: 100%;
11
+ block-size: 28px;
12
+ :global(.text-block) {
13
+ white-space: nowrap;
14
+ overflow: hidden;
15
+ text-overflow: ellipsis;
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import { onMount } from "svelte";
3
+
4
+ import { ListItem } from "$lib";
5
+ import { page } from "$app/stores";
6
+
7
+ export let target: HTMLElement;
8
+
9
+ let headings: HTMLHeadingElement[] = [];
10
+ let activeHeading: HTMLHeadingElement;
11
+
12
+ $: $page,
13
+ (headings =
14
+ target &&
15
+ Array.from(target.querySelectorAll("h1, h2, h3")).filter(
16
+ node => !node.closest(".component-showcase-grid, .markdown-body > table")
17
+ ));
18
+
19
+ function handleScroll() {
20
+ if (headings)
21
+ activeHeading = [...headings]
22
+ .reverse()
23
+ .find(heading => heading.offsetTop <= window.scrollY);
24
+ }
25
+
26
+ function handleClick(event, index: number, id: string) {
27
+ if (id) history.pushState({}, "", `#${id}`);
28
+
29
+ window.scrollTo({
30
+ top: headings[index].offsetTop + 1,
31
+ behavior: "smooth"
32
+ });
33
+ }
34
+
35
+ onMount(() => {
36
+ window.addEventListener("scroll", handleScroll);
37
+ });
38
+ </script>
39
+
40
+ {#if target}
41
+ {#key $page}
42
+ <nav class="table-of-contents">
43
+ {#each headings as { tagName, innerText, id }, i}
44
+ <li style="--fds-depth: {+tagName[1] - 1};">
45
+ <ListItem
46
+ on:click={e => handleClick(e, i, id)}
47
+ selected={activeHeading === headings[i]}
48
+ >
49
+ {innerText}
50
+ </ListItem>
51
+ </li>
52
+ {/each}
53
+ </nav>
54
+ {/key}
55
+ {/if}
56
+
57
+ <style lang="scss">
58
+ @use "./Toc";
59
+ </style>
@@ -0,0 +1,89 @@
1
+ <script lang="ts">
2
+ import { onMount } from "svelte";
3
+ import { page } from "$app/stores";
4
+
5
+ import { ListItem, TextBlock } from "$lib";
6
+
7
+ export let tree = [];
8
+ export let __depth = 0;
9
+
10
+ let treeViewState: any;
11
+
12
+ onMount(() => {
13
+ // Check localStorage for an existing treeViewState
14
+ // If none exists, use a blank object string
15
+ treeViewState = JSON.parse(localStorage.getItem("treeViewState") ?? "{}");
16
+ });
17
+
18
+ // Utility function for converting regular names to kebab case
19
+ const id = (s: string) => s.toLowerCase().split(" ").join("-");
20
+
21
+ // Function for expanding/collapsing docs categories
22
+ function toggleExpansion(event: MouseEvent, name: string) {
23
+ event.stopPropagation();
24
+
25
+ // Modify treeViewState to have the opposite of the previous entry for the category
26
+ treeViewState[id(name)] = !treeViewState[id(name)];
27
+
28
+ // Update value in localStorage for persistence
29
+ localStorage.setItem("treeViewState", JSON.stringify(treeViewState));
30
+ }
31
+ </script>
32
+
33
+ <div class="tree-view">
34
+ {#each tree as { name, path, type, pages, icon }}
35
+ {#if type === "category"}
36
+ {#if __depth > 0}
37
+ <div class="subtree" class:expanded={treeViewState?.[id(name)]}>
38
+ <ListItem
39
+ type="expander"
40
+ expanded={treeViewState?.[id(name)]}
41
+ on:click={e => toggleExpansion(e, name)}
42
+ >
43
+ <svelte:fragment slot="icon">
44
+ {@html icon || ""}
45
+ </svelte:fragment>
46
+ {name}
47
+ </ListItem>
48
+ {#if treeViewState?.[id(name)]}
49
+ <div class="subtree-items">
50
+ <svelte:self __depth={__depth + 1} tree={pages} />
51
+ </div>
52
+ {/if}
53
+ </div>
54
+ {:else}
55
+ <TextBlock class="category-header" variant="bodyStrong">{name}</TextBlock>
56
+ <svelte:self __depth={__depth + 1} tree={pages} />
57
+ {/if}
58
+ {:else}
59
+ <ListItem
60
+ on:click
61
+ type="navigation"
62
+ selected={`/docs${path}` === $page.url.pathname}
63
+ href="/docs{path}"
64
+ >
65
+ <svelte:fragment slot="icon">
66
+ {@html icon || ""}
67
+ </svelte:fragment>
68
+ {name}
69
+ </ListItem>
70
+ {/if}
71
+ {/each}
72
+ </div>
73
+
74
+ <style lang="scss">
75
+ // Add padding to subtrees for the nesting effect
76
+ .subtree-items {
77
+ padding-inline-start: 24px;
78
+ }
79
+
80
+ .tree-view {
81
+ max-block-size: 100%;
82
+ min-block-size: 0;
83
+ :global(.category-header) {
84
+ inline-size: 100%;
85
+ padding-inline: 16px;
86
+ padding-block: 10px;
87
+ }
88
+ }
89
+ </style>
@@ -0,0 +1,9 @@
1
+ export { default as CopyBox } from "./CopyBox/CopyBox.svelte";
2
+ export { default as HeroCard } from "./HeroCard/HeroCard.svelte";
3
+ export { default as Metadata } from "./Metadata/Metadata.svelte";
4
+ export { default as PageSection } from "./PageSection/PageSection.svelte";
5
+ export { default as Navbar } from "./Navbar/Navbar.svelte";
6
+ export { default as TreeView } from "./TreeView/TreeView.svelte";
7
+ export { default as Showcase } from "./Showcase/Showcase.svelte";
8
+ export { default as Toc } from "./Toc/Toc.svelte";
9
+ export { default as APIDocs } from "./APIDocs/APIDocs.svelte";