@onsvisual/svelte-components 1.0.40 → 1.0.42

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 (223) hide show
  1. package/README.md +24 -24
  2. package/dist/css/main.css +513 -513
  3. package/dist/datavis/BarChart/BarChart.stories.svelte +84 -84
  4. package/dist/datavis/BarChart/docs/component.md +19 -19
  5. package/dist/datavis/Chart/Chart.stories.svelte +128 -128
  6. package/dist/datavis/Chart/docs/component.md +31 -31
  7. package/dist/datavis/Chart/docs/example.md +28 -28
  8. package/dist/datavis/ColumnChart/ColumnChart.stories.svelte +84 -84
  9. package/dist/datavis/ColumnChart/docs/component.md +19 -19
  10. package/dist/datavis/DataCard/DataCard.stories.svelte +45 -45
  11. package/dist/datavis/DataCard/DataCard.svelte +70 -70
  12. package/dist/datavis/DataCard/Sparkline.svelte +117 -117
  13. package/dist/datavis/DataCard/docs/component.md +20 -20
  14. package/dist/datavis/DataCard/docs/example.md +25 -25
  15. package/dist/datavis/DotPlotChart/DotPlotChart.stories.svelte +40 -40
  16. package/dist/datavis/DotPlotChart/docs/component.md +19 -19
  17. package/dist/datavis/LineChart/LineChart.stories.svelte +64 -64
  18. package/dist/datavis/LineChart/docs/component.md +31 -31
  19. package/dist/datavis/ScatterChart/ScatterChart.stories.svelte +55 -55
  20. package/dist/datavis/ScatterChart/docs/component.md +53 -53
  21. package/dist/datavis/Table/Table.stories.svelte +48 -48
  22. package/dist/datavis/Table/Table.svelte +161 -161
  23. package/dist/datavis/Table/docs/component.md +20 -20
  24. package/dist/datavis/demo-data/data-scatter.js +40 -40
  25. package/dist/datavis/demo-data/data.js +18 -18
  26. package/dist/datavis/intro.mdx +21 -21
  27. package/dist/decorators/Blockquote/Blockquote.stories.svelte +25 -25
  28. package/dist/decorators/Blockquote/Blockquote.svelte +27 -27
  29. package/dist/decorators/Blockquote/docs/component.md +10 -10
  30. package/dist/decorators/Divider/Divider.stories.svelte +29 -29
  31. package/dist/decorators/Divider/Divider.svelte +52 -52
  32. package/dist/decorators/Divider/docs/component.md +12 -12
  33. package/dist/decorators/Em/Em.stories.svelte +30 -30
  34. package/dist/decorators/Em/Em.svelte +58 -58
  35. package/dist/decorators/Em/docs/component.md +12 -12
  36. package/dist/decorators/Icon/Icon.stories.svelte +27 -27
  37. package/dist/decorators/Icon/Icon.svelte +93 -93
  38. package/dist/decorators/Icon/docs/component.md +10 -10
  39. package/dist/decorators/Indent/Indent.stories.svelte +22 -22
  40. package/dist/decorators/Indent/Indent.svelte +3 -3
  41. package/dist/decorators/Indent/docs/component.md +10 -10
  42. package/dist/index.js +86 -86
  43. package/dist/inputs/Button/Button.stories.svelte +70 -70
  44. package/dist/inputs/Button/Button.svelte +152 -152
  45. package/dist/inputs/Button/Button.svelte.d.ts +2 -2
  46. package/dist/inputs/Button/docs/component.md +17 -17
  47. package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
  48. package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
  49. package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
  50. package/dist/inputs/ButtonGroup/docs/component.md +23 -23
  51. package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
  52. package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
  53. package/dist/inputs/Checkbox/docs/component.md +14 -14
  54. package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
  55. package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
  56. package/dist/inputs/Checkboxes/docs/component.md +20 -20
  57. package/dist/inputs/Checkboxes/docs/example.md +16 -16
  58. package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
  59. package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
  60. package/dist/inputs/Dropdown/docs/component.md +22 -22
  61. package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
  62. package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
  63. package/dist/inputs/ErrorPanel/docs/component.md +14 -14
  64. package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
  65. package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
  66. package/dist/inputs/ErrorSummary/docs/component.md +17 -17
  67. package/dist/inputs/ErrorSummary/docs/example.md +12 -12
  68. package/dist/inputs/Input/Input.stories.svelte +73 -73
  69. package/dist/inputs/Input/Input.svelte +151 -151
  70. package/dist/inputs/Input/docs/component.md +16 -16
  71. package/dist/inputs/Radios/Radio.svelte +90 -90
  72. package/dist/inputs/Radios/Radios.stories.svelte +51 -51
  73. package/dist/inputs/Radios/Radios.svelte +62 -62
  74. package/dist/inputs/Radios/docs/component.md +24 -24
  75. package/dist/inputs/Radios/docs/example.md +21 -21
  76. package/dist/inputs/Select/Select.stories.svelte +63 -63
  77. package/dist/inputs/Select/Select.svelte +326 -326
  78. package/dist/inputs/Select/docs/component.md +27 -27
  79. package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
  80. package/dist/inputs/Textarea/Textarea.svelte +113 -113
  81. package/dist/inputs/Textarea/docs/component.md +16 -16
  82. package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
  83. package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
  84. package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
  85. package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
  86. package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
  87. package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
  88. package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
  89. package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
  90. package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
  91. package/dist/inputs/Toolbar/docs/component.md +101 -101
  92. package/dist/intro.mdx +66 -66
  93. package/dist/js/menuOptions.js +14 -14
  94. package/dist/js/utils.js +133 -133
  95. package/dist/js/withParams.js +43 -43
  96. package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
  97. package/dist/layout/Accordion/Accordion.svelte +55 -55
  98. package/dist/layout/Accordion/AccordionItem.svelte +51 -51
  99. package/dist/layout/Accordion/accordion.js +64 -64
  100. package/dist/layout/Accordion/details.js +83 -83
  101. package/dist/layout/Accordion/docs/component.md +19 -19
  102. package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
  103. package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
  104. package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
  105. package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
  106. package/dist/layout/BackLink/BackLink.svelte +30 -30
  107. package/dist/layout/BackLink/docs/component.md +12 -12
  108. package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
  109. package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
  110. package/dist/layout/Breadcrumb/docs/component.md +15 -15
  111. package/dist/layout/Card/Card.stories.svelte +39 -39
  112. package/dist/layout/Card/Card.svelte +127 -127
  113. package/dist/layout/Card/docs/component.md +14 -14
  114. package/dist/layout/Card/docs/eg-images.md +27 -27
  115. package/dist/layout/Card/docs/eg-links.md +12 -12
  116. package/dist/layout/Card/docs/eg-spans.md +12 -12
  117. package/dist/layout/Contents/Contents.stories.svelte +27 -27
  118. package/dist/layout/Contents/Contents.svelte +51 -51
  119. package/dist/layout/Contents/docs/component.md +18 -18
  120. package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
  121. package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
  122. package/dist/layout/DescriptionList/docs/component.md +18 -18
  123. package/dist/layout/Details/Details.stories.svelte +32 -32
  124. package/dist/layout/Details/Details.svelte +75 -75
  125. package/dist/layout/Details/docs/component.md +14 -14
  126. package/dist/layout/DocumentList/Document.svelte +103 -103
  127. package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
  128. package/dist/layout/DocumentList/DocumentList.svelte +33 -33
  129. package/dist/layout/DocumentList/docs/component.md +28 -28
  130. package/dist/layout/DocumentList/docs/example.md +23 -23
  131. package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
  132. package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
  133. package/dist/layout/ErrorPage/docs/component.md +13 -13
  134. package/dist/layout/Footer/Footer.stories.svelte +24 -24
  135. package/dist/layout/Footer/Footer.svelte +366 -366
  136. package/dist/layout/Footer/docs/component.md +10 -10
  137. package/dist/layout/Grid/Grid.stories.svelte +50 -50
  138. package/dist/layout/Grid/Grid.svelte +117 -117
  139. package/dist/layout/Grid/GridCell.svelte +65 -65
  140. package/dist/layout/Grid/docs/component.md +14 -14
  141. package/dist/layout/Header/Header.stories.svelte +26 -26
  142. package/dist/layout/Header/Header.svelte +875 -875
  143. package/dist/layout/Header/docs/component.md +11 -11
  144. package/dist/layout/Hero/Hero.stories.svelte +79 -79
  145. package/dist/layout/Hero/Hero.svelte +364 -364
  146. package/dist/layout/Hero/docs/component.md +14 -14
  147. package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
  148. package/dist/layout/Highlight/Highlight.svelte +77 -77
  149. package/dist/layout/Highlight/docs/component.md +12 -12
  150. package/dist/layout/Image/Image.stories.svelte +23 -23
  151. package/dist/layout/Image/Image.svelte +29 -29
  152. package/dist/layout/Image/docs/component.md +15 -15
  153. package/dist/layout/List/Li.svelte +3 -3
  154. package/dist/layout/List/List.stories.svelte +40 -40
  155. package/dist/layout/List/List.svelte +46 -46
  156. package/dist/layout/List/docs/component.md +14 -14
  157. package/dist/layout/List/docs/example.md +12 -12
  158. package/dist/layout/NavSections/NavSection.svelte +90 -90
  159. package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
  160. package/dist/layout/NavSections/NavSections.svelte +160 -160
  161. package/dist/layout/NavSections/docs/component.md +25 -25
  162. package/dist/layout/Notice/Notice.stories.svelte +61 -61
  163. package/dist/layout/Notice/Notice.svelte +56 -56
  164. package/dist/layout/Notice/docs/component.md +14 -14
  165. package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
  166. package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
  167. package/dist/layout/PhaseBanner/docs/component.md +14 -14
  168. package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
  169. package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
  170. package/dist/layout/RelatedContent/docs/component.md +16 -16
  171. package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
  172. package/dist/layout/Scroller/Scroller.svelte +368 -368
  173. package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
  174. package/dist/layout/Scroller/docs/component.md +39 -39
  175. package/dist/layout/Section/Section.stories.svelte +33 -33
  176. package/dist/layout/Section/Section.svelte +60 -60
  177. package/dist/layout/Section/docs/component.md +12 -12
  178. package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
  179. package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
  180. package/dist/layout/ShareButtons/docs/component.md +14 -14
  181. package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
  182. package/dist/layout/SkipLink/SkipLink.svelte +9 -9
  183. package/dist/layout/SkipLink/docs/component.md +11 -11
  184. package/dist/layout/Summary/Summary.stories.svelte +21 -21
  185. package/dist/layout/Summary/Summary.svelte +60 -60
  186. package/dist/layout/Summary/docs/component.md +17 -17
  187. package/dist/layout/Tabs/Tab.svelte +53 -53
  188. package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
  189. package/dist/layout/Tabs/Tabs.svelte +89 -89
  190. package/dist/layout/Tabs/docs/component.md +16 -16
  191. package/dist/layout/Tabs/tabs.js +302 -302
  192. package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
  193. package/dist/layout/Timeline/Timeline.svelte +17 -17
  194. package/dist/layout/Timeline/TimelineItem.svelte +14 -14
  195. package/dist/layout/Timeline/docs/component.md +27 -27
  196. package/dist/layout/Timeline/docs/example.md +20 -20
  197. package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
  198. package/dist/templates/EmbedArticle/docs/component.md +56 -56
  199. package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
  200. package/dist/templates/FeatureArticle/docs/component.md +125 -125
  201. package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
  202. package/dist/templates/StandardArticle/docs/component.md +76 -76
  203. package/dist/templates/intro.mdx +18 -18
  204. package/dist/wrappers/Container/Container.stories.svelte +38 -38
  205. package/dist/wrappers/Container/Container.svelte +77 -77
  206. package/dist/wrappers/Container/docs/component.md +12 -12
  207. package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
  208. package/dist/wrappers/Embed/Embed.svelte +44 -44
  209. package/dist/wrappers/Embed/docs/component.md +15 -15
  210. package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
  211. package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
  212. package/dist/wrappers/LazyLoad/docs/component.md +29 -29
  213. package/dist/wrappers/Main/Main.stories.svelte +24 -24
  214. package/dist/wrappers/Main/Main.svelte +11 -11
  215. package/dist/wrappers/Main/docs/component.md +16 -16
  216. package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
  217. package/dist/wrappers/Observe/Observe.svelte +35 -35
  218. package/dist/wrappers/Observe/docs/component.md +22 -22
  219. package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
  220. package/dist/wrappers/Theme/Theme.svelte +76 -76
  221. package/dist/wrappers/Theme/docs/component.md +10 -10
  222. package/dist/wrappers/Theme/themes.js +70 -70
  223. package/package.json +88 -88
@@ -1,90 +1,90 @@
1
- <script>
2
- import { onMount, onDestroy, getContext } from "svelte";
3
- import { slugify } from "../../js/utils.js";
4
- import BackLink from "../BackLink/BackLink.svelte";
5
-
6
- /**
7
- * Sets the title of the section
8
- * @type {string}
9
- */
10
- export let title = "Section title";
11
- /**
12
- * Sets the unique ID of the section (if not set, this will be slugified from the title)
13
- * @type {string}
14
- */
15
- export let id = slugify(title);
16
- /**
17
- * Optional: Set an additional CSS class for the section
18
- * @type {string|null}
19
- */
20
- export let cls = null;
21
- /**
22
- * Allows the h2 title tag for the section to be visually hidden
23
- * @type {boolean}
24
- */
25
- export let hideTitle = false;
26
- /**
27
- * Treat a section as sub-section. It will have an h3 title, and will be indented in the contents table
28
- * @type {boolean}
29
- */
30
- export let subsection = false;
31
-
32
- const sections = getContext("sections");
33
- const observer = getContext("observer");
34
- const tocId = getContext("tocId");
35
-
36
- let section;
37
- let mounted = false;
38
- let observed = false;
39
-
40
- // This should allow the table of contents (toc) to render before hydration
41
- $sections = [
42
- ...$sections.filter((s) => s.id !== id),
43
- { id, dataset: { title, subsection: String(subsection) } }
44
- ];
45
-
46
- // This allows sections to be highlighted on the toc after hydration,
47
- // and for sections to be added/removed gracefully from the DOM
48
- function addToObserver(observer, mounted) {
49
- if (mounted && observer && !observed) {
50
- $sections = [...section.parentElement.getElementsByTagName("section")].filter(
51
- (s) => s.dataset.type === "NavSection"
52
- );
53
- observer.observe(section);
54
- observed = true;
55
- }
56
- }
57
- $: addToObserver($observer, mounted);
58
-
59
- onMount(() => (mounted = true));
60
-
61
- onDestroy(() => {
62
- if ($observer) $observer.unobserve(section);
63
- if ($sections) $sections = $sections.filter((s) => s.id !== id);
64
- mounted = observed = false;
65
- });
66
- </script>
67
-
68
- <section
69
- {id}
70
- data-title={title}
71
- data-type="NavSection"
72
- data-subsection={subsection}
73
- class={cls}
74
- aria-label={title}
75
- bind:this={section}
76
- >
77
- {#if title}
78
- {#if subsection}
79
- <h3 class="subsection-title" class:ons-u-vh={hideTitle}>{title}</h3>
80
- {:else}
81
- <h2 class="section-title" class:ons-u-vh={hideTitle}>
82
- {title}
83
- </h2>
84
- {/if}
85
- {/if}
86
- <slot />
87
- {#if tocId}
88
- <BackLink href="#{tocId}" cls="ons-u-d-no@m" />
89
- {/if}
90
- </section>
1
+ <script>
2
+ import { onMount, onDestroy, getContext } from "svelte";
3
+ import { slugify } from "../../js/utils.js";
4
+ import BackLink from "../BackLink/BackLink.svelte";
5
+
6
+ /**
7
+ * Sets the title of the section
8
+ * @type {string}
9
+ */
10
+ export let title = "Section title";
11
+ /**
12
+ * Sets the unique ID of the section (if not set, this will be slugified from the title)
13
+ * @type {string}
14
+ */
15
+ export let id = slugify(title);
16
+ /**
17
+ * Optional: Set an additional CSS class for the section
18
+ * @type {string|null}
19
+ */
20
+ export let cls = null;
21
+ /**
22
+ * Allows the h2 title tag for the section to be visually hidden
23
+ * @type {boolean}
24
+ */
25
+ export let hideTitle = false;
26
+ /**
27
+ * Treat a section as sub-section. It will have an h3 title, and will be indented in the contents table
28
+ * @type {boolean}
29
+ */
30
+ export let subsection = false;
31
+
32
+ const sections = getContext("sections");
33
+ const observer = getContext("observer");
34
+ const tocId = getContext("tocId");
35
+
36
+ let section;
37
+ let mounted = false;
38
+ let observed = false;
39
+
40
+ // This should allow the table of contents (toc) to render before hydration
41
+ $sections = [
42
+ ...$sections.filter((s) => s.id !== id),
43
+ { id, dataset: { title, subsection: String(subsection) } }
44
+ ];
45
+
46
+ // This allows sections to be highlighted on the toc after hydration,
47
+ // and for sections to be added/removed gracefully from the DOM
48
+ function addToObserver(observer, mounted) {
49
+ if (mounted && observer && !observed) {
50
+ $sections = [...section.parentElement.getElementsByTagName("section")].filter(
51
+ (s) => s.dataset.type === "NavSection"
52
+ );
53
+ observer.observe(section);
54
+ observed = true;
55
+ }
56
+ }
57
+ $: addToObserver($observer, mounted);
58
+
59
+ onMount(() => (mounted = true));
60
+
61
+ onDestroy(() => {
62
+ if ($observer) $observer.unobserve(section);
63
+ if ($sections) $sections = $sections.filter((s) => s.id !== id);
64
+ mounted = observed = false;
65
+ });
66
+ </script>
67
+
68
+ <section
69
+ {id}
70
+ data-title={title}
71
+ data-type="NavSection"
72
+ data-subsection={subsection}
73
+ class={cls}
74
+ aria-label={title}
75
+ bind:this={section}
76
+ >
77
+ {#if title}
78
+ {#if subsection}
79
+ <h3 class="subsection-title" class:ons-u-vh={hideTitle}>{title}</h3>
80
+ {:else}
81
+ <h2 class="section-title" class:ons-u-vh={hideTitle}>
82
+ {title}
83
+ </h2>
84
+ {/if}
85
+ {/if}
86
+ <slot />
87
+ {#if tocId}
88
+ <BackLink href="#{tocId}" cls="ons-u-d-no@m" />
89
+ {/if}
90
+ </section>
@@ -1,51 +1,51 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs } from "../../js/withParams.js";
4
- import NavSections from "./NavSections.svelte";
5
- import NavSection from "./NavSection.svelte";
6
- import componentDocs from "./docs/component.md?raw";
7
- import { lipsum } from "../../js/utils.js";
8
-
9
- const parameters = { ...withComponentDocs(componentDocs), layout: "fullscreen" };
10
- parameters.docs.story = { inline: false, iframeHeight: 600 };
11
-
12
- const { Story } = defineMeta({
13
- title: "Layout/NavSections",
14
- component: NavSections,
15
- tags: ["autodocs"],
16
- argTypes: {},
17
- parameters
18
- });
19
- </script>
20
-
21
- {#snippet template(args)}
22
- <NavSections {...args}>
23
- <NavSection title="Section one">
24
- <p>
25
- {lipsum()}
26
- </p>
27
- </NavSection>
28
- <NavSection title="Subsection A" subsection>
29
- <p>
30
- {lipsum(4, 1)}
31
- </p>
32
- </NavSection>
33
- <NavSection title="Subsection B" subsection>
34
- <p>
35
- {lipsum(4, 2)}
36
- </p>
37
- </NavSection>
38
- <NavSection title="Section two">
39
- <p>
40
- {lipsum(4, 3)}
41
- </p>
42
- </NavSection>
43
- <NavSection title="Section three">
44
- <p>
45
- {lipsum()}
46
- </p>
47
- </NavSection>
48
- </NavSections>
49
- {/snippet}
50
-
51
- <Story name="Default" args={{}} {template} />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import NavSections from "./NavSections.svelte";
5
+ import NavSection from "./NavSection.svelte";
6
+ import componentDocs from "./docs/component.md?raw";
7
+ import { lipsum } from "../../js/utils.js";
8
+
9
+ const parameters = { ...withComponentDocs(componentDocs), layout: "fullscreen" };
10
+ parameters.docs.story = { inline: false, iframeHeight: 600 };
11
+
12
+ const { Story } = defineMeta({
13
+ title: "Layout/NavSections",
14
+ component: NavSections,
15
+ tags: ["autodocs"],
16
+ argTypes: {},
17
+ parameters
18
+ });
19
+ </script>
20
+
21
+ {#snippet template(args)}
22
+ <NavSections {...args}>
23
+ <NavSection title="Section one">
24
+ <p>
25
+ {lipsum()}
26
+ </p>
27
+ </NavSection>
28
+ <NavSection title="Subsection A" subsection>
29
+ <p>
30
+ {lipsum(4, 1)}
31
+ </p>
32
+ </NavSection>
33
+ <NavSection title="Subsection B" subsection>
34
+ <p>
35
+ {lipsum(4, 2)}
36
+ </p>
37
+ </NavSection>
38
+ <NavSection title="Section two">
39
+ <p>
40
+ {lipsum(4, 3)}
41
+ </p>
42
+ </NavSection>
43
+ <NavSection title="Section three">
44
+ <p>
45
+ {lipsum()}
46
+ </p>
47
+ </NavSection>
48
+ </NavSections>
49
+ {/snippet}
50
+
51
+ <Story name="Default" args={{}} {template} />
@@ -1,160 +1,160 @@
1
- <script>
2
- import { onMount, setContext } from "svelte";
3
- import { writable } from "svelte/store";
4
- import Container from "../../wrappers/Container/Container.svelte";
5
-
6
- /**
7
- * ID for back-linking to table of contents
8
- * @type {string}
9
- */
10
- export let id = "toc";
11
- /**
12
- * Optional: Set an additional CSS class for the section
13
- * @type {string|null}
14
- */
15
- export let cls = null;
16
- /**
17
- * Sets the width of the container
18
- * @type {"narrow"|"medium"|"wide"|"wider"|"full"}
19
- */
20
- export let width = "wide";
21
- /**
22
- * A label for the page contents nav
23
- * @type {string}
24
- */
25
- export let contentsLabel = "Page contents";
26
- /**
27
- * Don't include table of contents (allows for custom uses of nav panel)
28
- * @type {boolean}
29
- */
30
- export let noContents = false;
31
- /**
32
- * Adds margin above section
33
- * @type {boolean}
34
- */
35
- export let marginTop = false;
36
- /**
37
- * Adds margin below section
38
- * @type {boolean}
39
- */
40
- export let marginBottom = true;
41
-
42
- let el;
43
- let active;
44
- let mounted = false;
45
-
46
- setContext("tocId", id);
47
-
48
- const sections = writable([]);
49
- setContext("sections", sections);
50
-
51
- const observer = writable();
52
- setContext("observer", observer);
53
-
54
- function formatSections(sections) {
55
- if (sections.length === 0) return [];
56
- const secs = [];
57
- let sec = { subsections: [] };
58
- for (const section of sections) {
59
- if (section.dataset.subsection !== "true") {
60
- if (sec.title || sec.subsections.length > 0) secs.push(sec);
61
- sec = { id: section.id, title: section.dataset.title, subsections: [] };
62
- } else {
63
- sec.subsections.push({ id: section.id, title: section.dataset.title });
64
- }
65
- }
66
- return [...secs, sec];
67
- }
68
-
69
- onMount(() => {
70
- if (!noContents) {
71
- $observer = new IntersectionObserver(
72
- (entries, observer) => {
73
- for (let i = 0; i < entries.length; i++) {
74
- if (entries[i].isIntersecting) {
75
- active = entries[i].target.id;
76
- break;
77
- }
78
- }
79
- },
80
- {
81
- root: null,
82
- rootMargin: "-25% 0px -75%",
83
- threshold: 0
84
- }
85
- );
86
- }
87
- // The table of contents doesn't populate unless it's after the main content
88
- // This is a trick to flip the order when the page hydrates
89
- el.prepend(el.lastElementChild);
90
- mounted = true;
91
- });
92
- </script>
93
-
94
- <Container {cls} {width} {marginTop} {marginBottom}>
95
- <div
96
- class="ons-grid ons-grid--spaced ons-grid--loose ons-js-toc-container"
97
- class:flip-display-order={!mounted}
98
- bind:this={el}
99
- >
100
- <div class="ons-nav-sections-content ons-grid__col ons-col-8@m">
101
- <slot name="before" />
102
- <slot />
103
- <slot name="after" />
104
- </div>
105
- <div class="ons-nav-sections-toc ons-grid__col ons-grid__col--sticky@m ons-col-4@m">
106
- <aside class="ons-table-of-contents-container" role="complementary">
107
- <slot name="before-nav" />
108
- {#if !noContents}
109
- <nav class="ons-table-of-contents" aria-label="Sections in this page">
110
- {#if contentsLabel}
111
- <h2 class="ons-table-of-contents__title ons-u-fs-r--b ons-u-mb-s">Contents</h2>
112
- {/if}
113
- <ol class="ons-list ons-u-mb-l ons-list--dashed">
114
- {#each formatSections($sections) as section}
115
- <li class="ons-list__item">
116
- {#if section.id && section.title}
117
- <a
118
- href="#{section.id}"
119
- class="ons-list__link"
120
- class:ons-table-of-contents__link-active={section.id === active}
121
- >
122
- {section.title}
123
- </a>
124
- {/if}
125
- {#if section.subsections.length > 0}
126
- <ol class="ons-list ons-u-mb-no ons-list--dashed">
127
- {#each section.subsections as subsection}
128
- <li class="ons-list__item">
129
- <a
130
- href="#{subsection.id}"
131
- class="ons-list__link"
132
- class:ons-table-of-contents__link-active={subsection.id === active}
133
- >
134
- {subsection.title}
135
- </a>
136
- </li>
137
- {/each}
138
- </ol>
139
- {/if}
140
- </li>
141
- {/each}
142
- </ol>
143
- </nav>
144
- {/if}
145
- <slot name="after-nav" />
146
- </aside>
147
- </div>
148
- </div>
149
- <slot name="footer" />
150
- </Container>
151
-
152
- <style>
153
- /* These classes force the table of contents to render on the left of the page before hydration */
154
- .flip-display-order {
155
- direction: rtl;
156
- }
157
- .flip-display-order > * {
158
- direction: initial;
159
- }
160
- </style>
1
+ <script>
2
+ import { onMount, setContext } from "svelte";
3
+ import { writable } from "svelte/store";
4
+ import Container from "../../wrappers/Container/Container.svelte";
5
+
6
+ /**
7
+ * ID for back-linking to table of contents
8
+ * @type {string}
9
+ */
10
+ export let id = "toc";
11
+ /**
12
+ * Optional: Set an additional CSS class for the section
13
+ * @type {string|null}
14
+ */
15
+ export let cls = null;
16
+ /**
17
+ * Sets the width of the container
18
+ * @type {"narrow"|"medium"|"wide"|"wider"|"full"}
19
+ */
20
+ export let width = "wide";
21
+ /**
22
+ * A label for the page contents nav
23
+ * @type {string}
24
+ */
25
+ export let contentsLabel = "Page contents";
26
+ /**
27
+ * Don't include table of contents (allows for custom uses of nav panel)
28
+ * @type {boolean}
29
+ */
30
+ export let noContents = false;
31
+ /**
32
+ * Adds margin above section
33
+ * @type {boolean}
34
+ */
35
+ export let marginTop = false;
36
+ /**
37
+ * Adds margin below section
38
+ * @type {boolean}
39
+ */
40
+ export let marginBottom = true;
41
+
42
+ let el;
43
+ let active;
44
+ let mounted = false;
45
+
46
+ setContext("tocId", id);
47
+
48
+ const sections = writable([]);
49
+ setContext("sections", sections);
50
+
51
+ const observer = writable();
52
+ setContext("observer", observer);
53
+
54
+ function formatSections(sections) {
55
+ if (sections.length === 0) return [];
56
+ const secs = [];
57
+ let sec = { subsections: [] };
58
+ for (const section of sections) {
59
+ if (section.dataset.subsection !== "true") {
60
+ if (sec.title || sec.subsections.length > 0) secs.push(sec);
61
+ sec = { id: section.id, title: section.dataset.title, subsections: [] };
62
+ } else {
63
+ sec.subsections.push({ id: section.id, title: section.dataset.title });
64
+ }
65
+ }
66
+ return [...secs, sec];
67
+ }
68
+
69
+ onMount(() => {
70
+ if (!noContents) {
71
+ $observer = new IntersectionObserver(
72
+ (entries, observer) => {
73
+ for (let i = 0; i < entries.length; i++) {
74
+ if (entries[i].isIntersecting) {
75
+ active = entries[i].target.id;
76
+ break;
77
+ }
78
+ }
79
+ },
80
+ {
81
+ root: null,
82
+ rootMargin: "-25% 0px -75%",
83
+ threshold: 0
84
+ }
85
+ );
86
+ }
87
+ // The table of contents doesn't populate unless it's after the main content
88
+ // This is a trick to flip the order when the page hydrates
89
+ el.prepend(el.lastElementChild);
90
+ mounted = true;
91
+ });
92
+ </script>
93
+
94
+ <Container {cls} {width} {marginTop} {marginBottom}>
95
+ <div
96
+ class="ons-grid ons-grid--spaced ons-grid--loose ons-js-toc-container"
97
+ class:flip-display-order={!mounted}
98
+ bind:this={el}
99
+ >
100
+ <div class="ons-nav-sections-content ons-grid__col ons-col-8@m">
101
+ <slot name="before" />
102
+ <slot />
103
+ <slot name="after" />
104
+ </div>
105
+ <div class="ons-nav-sections-toc ons-grid__col ons-grid__col--sticky@m ons-col-4@m">
106
+ <aside class="ons-table-of-contents-container" role="complementary">
107
+ <slot name="before-nav" />
108
+ {#if !noContents}
109
+ <nav class="ons-table-of-contents" aria-label="Sections in this page">
110
+ {#if contentsLabel}
111
+ <h2 class="ons-table-of-contents__title ons-u-fs-r--b ons-u-mb-s">Contents</h2>
112
+ {/if}
113
+ <ol class="ons-list ons-u-mb-l ons-list--dashed">
114
+ {#each formatSections($sections) as section}
115
+ <li class="ons-list__item">
116
+ {#if section.id && section.title}
117
+ <a
118
+ href="#{section.id}"
119
+ class="ons-list__link"
120
+ class:ons-table-of-contents__link-active={section.id === active}
121
+ >
122
+ {section.title}
123
+ </a>
124
+ {/if}
125
+ {#if section.subsections.length > 0}
126
+ <ol class="ons-list ons-u-mb-no ons-list--dashed">
127
+ {#each section.subsections as subsection}
128
+ <li class="ons-list__item">
129
+ <a
130
+ href="#{subsection.id}"
131
+ class="ons-list__link"
132
+ class:ons-table-of-contents__link-active={subsection.id === active}
133
+ >
134
+ {subsection.title}
135
+ </a>
136
+ </li>
137
+ {/each}
138
+ </ol>
139
+ {/if}
140
+ </li>
141
+ {/each}
142
+ </ol>
143
+ </nav>
144
+ {/if}
145
+ <slot name="after-nav" />
146
+ </aside>
147
+ </div>
148
+ </div>
149
+ <slot name="footer" />
150
+ </Container>
151
+
152
+ <style>
153
+ /* These classes force the table of contents to render on the left of the page before hydration */
154
+ .flip-display-order {
155
+ direction: rtl;
156
+ }
157
+ .flip-display-order > * {
158
+ direction: initial;
159
+ }
160
+ </style>
@@ -1,25 +1,25 @@
1
- Use this component to allow users to quickly jump to named sections within a long page of content.
2
-
3
- As the user scrolls down the page, a table of contents will remain visible on the left of the viewport and will highlight the subheading of the section currently in view.
4
-
5
- <!-- prettier-ignore -->
6
- ```html
7
- <script>
8
- import { NavSections, NavSection } from "@onsvisual/svelte-components";
9
- </script>
10
-
11
- <NavSections>
12
- <NavSection title="Section one">
13
- <p>Contents of first section.</p>
14
- </NavSection>
15
- <NavSection title="Subsection A" subsection>
16
- <p>Contents of subsection.</p>
17
- </NavSection>
18
- <NavSection title="Subsection B" subsection>
19
- <p>Contents of subsection.</p>
20
- </NavSection>
21
- <NavSection title="Section two">
22
- <p>Contents of third section.</p>
23
- </NavSection>
24
- </NavSections>
25
- ```
1
+ Use this component to allow users to quickly jump to named sections within a long page of content.
2
+
3
+ As the user scrolls down the page, a table of contents will remain visible on the left of the viewport and will highlight the subheading of the section currently in view.
4
+
5
+ <!-- prettier-ignore -->
6
+ ```html
7
+ <script>
8
+ import { NavSections, NavSection } from "@onsvisual/svelte-components";
9
+ </script>
10
+
11
+ <NavSections>
12
+ <NavSection title="Section one">
13
+ <p>Contents of first section.</p>
14
+ </NavSection>
15
+ <NavSection title="Subsection A" subsection>
16
+ <p>Contents of subsection.</p>
17
+ </NavSection>
18
+ <NavSection title="Subsection B" subsection>
19
+ <p>Contents of subsection.</p>
20
+ </NavSection>
21
+ <NavSection title="Section two">
22
+ <p>Contents of third section.</p>
23
+ </NavSection>
24
+ </NavSections>
25
+ ```