@onsvisual/svelte-components 1.0.47 → 1.0.48

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 (222) hide show
  1. package/README.md +24 -24
  2. package/dist/css/main.css +2 -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 +101 -101
  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/docs/component.md +17 -17
  46. package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
  47. package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
  48. package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
  49. package/dist/inputs/ButtonGroup/docs/component.md +23 -23
  50. package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
  51. package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
  52. package/dist/inputs/Checkbox/docs/component.md +14 -14
  53. package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
  54. package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
  55. package/dist/inputs/Checkboxes/docs/component.md +20 -20
  56. package/dist/inputs/Checkboxes/docs/example.md +16 -16
  57. package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
  58. package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
  59. package/dist/inputs/Dropdown/docs/component.md +22 -22
  60. package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
  61. package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
  62. package/dist/inputs/ErrorPanel/docs/component.md +14 -14
  63. package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
  64. package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
  65. package/dist/inputs/ErrorSummary/docs/component.md +17 -17
  66. package/dist/inputs/ErrorSummary/docs/example.md +12 -12
  67. package/dist/inputs/Input/Input.stories.svelte +73 -73
  68. package/dist/inputs/Input/Input.svelte +151 -151
  69. package/dist/inputs/Input/docs/component.md +16 -16
  70. package/dist/inputs/Radios/Radio.svelte +90 -90
  71. package/dist/inputs/Radios/Radios.stories.svelte +51 -51
  72. package/dist/inputs/Radios/Radios.svelte +62 -62
  73. package/dist/inputs/Radios/docs/component.md +24 -24
  74. package/dist/inputs/Radios/docs/example.md +21 -21
  75. package/dist/inputs/Select/Select.stories.svelte +63 -63
  76. package/dist/inputs/Select/Select.svelte +326 -326
  77. package/dist/inputs/Select/docs/component.md +27 -27
  78. package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
  79. package/dist/inputs/Textarea/Textarea.svelte +113 -113
  80. package/dist/inputs/Textarea/docs/component.md +16 -16
  81. package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
  82. package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
  83. package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
  84. package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
  85. package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
  86. package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
  87. package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
  88. package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
  89. package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
  90. package/dist/inputs/Toolbar/docs/component.md +101 -101
  91. package/dist/intro.mdx +66 -66
  92. package/dist/js/menuOptions.js +14 -14
  93. package/dist/js/utils.js +133 -133
  94. package/dist/js/withParams.js +43 -43
  95. package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
  96. package/dist/layout/Accordion/Accordion.svelte +55 -55
  97. package/dist/layout/Accordion/AccordionItem.svelte +51 -51
  98. package/dist/layout/Accordion/accordion.js +64 -64
  99. package/dist/layout/Accordion/details.js +83 -83
  100. package/dist/layout/Accordion/docs/component.md +19 -19
  101. package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
  102. package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
  103. package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
  104. package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
  105. package/dist/layout/BackLink/BackLink.svelte +30 -30
  106. package/dist/layout/BackLink/docs/component.md +12 -12
  107. package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
  108. package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
  109. package/dist/layout/Breadcrumb/docs/component.md +15 -15
  110. package/dist/layout/Card/Card.stories.svelte +39 -39
  111. package/dist/layout/Card/Card.svelte +127 -127
  112. package/dist/layout/Card/docs/component.md +14 -14
  113. package/dist/layout/Card/docs/eg-images.md +27 -27
  114. package/dist/layout/Card/docs/eg-links.md +12 -12
  115. package/dist/layout/Card/docs/eg-spans.md +12 -12
  116. package/dist/layout/Contents/Contents.stories.svelte +27 -27
  117. package/dist/layout/Contents/Contents.svelte +51 -51
  118. package/dist/layout/Contents/docs/component.md +18 -18
  119. package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
  120. package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
  121. package/dist/layout/DescriptionList/docs/component.md +18 -18
  122. package/dist/layout/Details/Details.stories.svelte +32 -32
  123. package/dist/layout/Details/Details.svelte +75 -75
  124. package/dist/layout/Details/docs/component.md +14 -14
  125. package/dist/layout/DocumentList/Document.svelte +103 -103
  126. package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
  127. package/dist/layout/DocumentList/DocumentList.svelte +33 -33
  128. package/dist/layout/DocumentList/docs/component.md +28 -28
  129. package/dist/layout/DocumentList/docs/example.md +23 -23
  130. package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
  131. package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
  132. package/dist/layout/ErrorPage/docs/component.md +13 -13
  133. package/dist/layout/Footer/Footer.stories.svelte +24 -24
  134. package/dist/layout/Footer/Footer.svelte +366 -366
  135. package/dist/layout/Footer/docs/component.md +10 -10
  136. package/dist/layout/Grid/Grid.stories.svelte +50 -50
  137. package/dist/layout/Grid/Grid.svelte +117 -117
  138. package/dist/layout/Grid/GridCell.svelte +65 -65
  139. package/dist/layout/Grid/docs/component.md +14 -14
  140. package/dist/layout/Header/Header.stories.svelte +26 -26
  141. package/dist/layout/Header/Header.svelte +875 -875
  142. package/dist/layout/Header/docs/component.md +11 -11
  143. package/dist/layout/Hero/Hero.stories.svelte +79 -79
  144. package/dist/layout/Hero/Hero.svelte +364 -364
  145. package/dist/layout/Hero/docs/component.md +14 -14
  146. package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
  147. package/dist/layout/Highlight/Highlight.svelte +77 -77
  148. package/dist/layout/Highlight/docs/component.md +12 -12
  149. package/dist/layout/Image/Image.stories.svelte +23 -23
  150. package/dist/layout/Image/Image.svelte +29 -29
  151. package/dist/layout/Image/docs/component.md +15 -15
  152. package/dist/layout/List/Li.svelte +3 -3
  153. package/dist/layout/List/List.stories.svelte +40 -40
  154. package/dist/layout/List/List.svelte +46 -46
  155. package/dist/layout/List/docs/component.md +14 -14
  156. package/dist/layout/List/docs/example.md +12 -12
  157. package/dist/layout/NavSections/NavSection.svelte +90 -90
  158. package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
  159. package/dist/layout/NavSections/NavSections.svelte +160 -160
  160. package/dist/layout/NavSections/docs/component.md +25 -25
  161. package/dist/layout/Notice/Notice.stories.svelte +61 -61
  162. package/dist/layout/Notice/Notice.svelte +56 -56
  163. package/dist/layout/Notice/docs/component.md +14 -14
  164. package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
  165. package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
  166. package/dist/layout/PhaseBanner/docs/component.md +14 -14
  167. package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
  168. package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
  169. package/dist/layout/RelatedContent/docs/component.md +16 -16
  170. package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
  171. package/dist/layout/Scroller/Scroller.svelte +368 -368
  172. package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
  173. package/dist/layout/Scroller/docs/component.md +39 -39
  174. package/dist/layout/Section/Section.stories.svelte +33 -33
  175. package/dist/layout/Section/Section.svelte +60 -60
  176. package/dist/layout/Section/docs/component.md +12 -12
  177. package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
  178. package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
  179. package/dist/layout/ShareButtons/docs/component.md +14 -14
  180. package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
  181. package/dist/layout/SkipLink/SkipLink.svelte +9 -9
  182. package/dist/layout/SkipLink/docs/component.md +11 -11
  183. package/dist/layout/Summary/Summary.stories.svelte +21 -21
  184. package/dist/layout/Summary/Summary.svelte +60 -60
  185. package/dist/layout/Summary/docs/component.md +17 -17
  186. package/dist/layout/Tabs/Tab.svelte +53 -53
  187. package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
  188. package/dist/layout/Tabs/Tabs.svelte +89 -89
  189. package/dist/layout/Tabs/docs/component.md +16 -16
  190. package/dist/layout/Tabs/tabs.js +302 -302
  191. package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
  192. package/dist/layout/Timeline/Timeline.svelte +17 -17
  193. package/dist/layout/Timeline/TimelineItem.svelte +14 -14
  194. package/dist/layout/Timeline/docs/component.md +27 -27
  195. package/dist/layout/Timeline/docs/example.md +20 -20
  196. package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
  197. package/dist/templates/EmbedArticle/docs/component.md +56 -56
  198. package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
  199. package/dist/templates/FeatureArticle/docs/component.md +125 -125
  200. package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
  201. package/dist/templates/StandardArticle/docs/component.md +76 -76
  202. package/dist/templates/intro.mdx +18 -18
  203. package/dist/wrappers/Container/Container.stories.svelte +38 -38
  204. package/dist/wrappers/Container/Container.svelte +77 -77
  205. package/dist/wrappers/Container/docs/component.md +12 -12
  206. package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
  207. package/dist/wrappers/Embed/Embed.svelte +44 -44
  208. package/dist/wrappers/Embed/docs/component.md +15 -15
  209. package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
  210. package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
  211. package/dist/wrappers/LazyLoad/docs/component.md +29 -29
  212. package/dist/wrappers/Main/Main.stories.svelte +24 -24
  213. package/dist/wrappers/Main/Main.svelte +11 -11
  214. package/dist/wrappers/Main/docs/component.md +16 -16
  215. package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
  216. package/dist/wrappers/Observe/Observe.svelte +45 -45
  217. package/dist/wrappers/Observe/docs/component.md +22 -22
  218. package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
  219. package/dist/wrappers/Theme/Theme.svelte +76 -76
  220. package/dist/wrappers/Theme/docs/component.md +10 -10
  221. package/dist/wrappers/Theme/themes.js +70 -70
  222. 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
+ ```