@onsvisual/svelte-components 1.0.44 → 1.0.45

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 (224) hide show
  1. package/README.md +24 -24
  2. package/dist/css/main.css +513 -2
  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 -93
  38. package/dist/decorators/Icon/Icon.svelte.d.ts +2 -2
  39. package/dist/decorators/Icon/docs/component.md +10 -10
  40. package/dist/decorators/Indent/Indent.stories.svelte +22 -22
  41. package/dist/decorators/Indent/Indent.svelte +3 -3
  42. package/dist/decorators/Indent/docs/component.md +10 -10
  43. package/dist/index.js +86 -86
  44. package/dist/inputs/Button/Button.stories.svelte +70 -70
  45. package/dist/inputs/Button/Button.svelte +152 -152
  46. package/dist/inputs/Button/Button.svelte.d.ts +2 -2
  47. package/dist/inputs/Button/docs/component.md +17 -17
  48. package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
  49. package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
  50. package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
  51. package/dist/inputs/ButtonGroup/docs/component.md +23 -23
  52. package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
  53. package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
  54. package/dist/inputs/Checkbox/docs/component.md +14 -14
  55. package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
  56. package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
  57. package/dist/inputs/Checkboxes/docs/component.md +20 -20
  58. package/dist/inputs/Checkboxes/docs/example.md +16 -16
  59. package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
  60. package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
  61. package/dist/inputs/Dropdown/docs/component.md +22 -22
  62. package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
  63. package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
  64. package/dist/inputs/ErrorPanel/docs/component.md +14 -14
  65. package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
  66. package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
  67. package/dist/inputs/ErrorSummary/docs/component.md +17 -17
  68. package/dist/inputs/ErrorSummary/docs/example.md +12 -12
  69. package/dist/inputs/Input/Input.stories.svelte +73 -73
  70. package/dist/inputs/Input/Input.svelte +151 -151
  71. package/dist/inputs/Input/docs/component.md +16 -16
  72. package/dist/inputs/Radios/Radio.svelte +90 -90
  73. package/dist/inputs/Radios/Radios.stories.svelte +51 -51
  74. package/dist/inputs/Radios/Radios.svelte +62 -62
  75. package/dist/inputs/Radios/docs/component.md +24 -24
  76. package/dist/inputs/Radios/docs/example.md +21 -21
  77. package/dist/inputs/Select/Select.stories.svelte +63 -63
  78. package/dist/inputs/Select/Select.svelte +326 -326
  79. package/dist/inputs/Select/docs/component.md +27 -27
  80. package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
  81. package/dist/inputs/Textarea/Textarea.svelte +113 -113
  82. package/dist/inputs/Textarea/docs/component.md +16 -16
  83. package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
  84. package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
  85. package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
  86. package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
  87. package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
  88. package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
  89. package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
  90. package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
  91. package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
  92. package/dist/inputs/Toolbar/docs/component.md +101 -101
  93. package/dist/intro.mdx +66 -66
  94. package/dist/js/menuOptions.js +14 -14
  95. package/dist/js/utils.js +133 -133
  96. package/dist/js/withParams.js +43 -43
  97. package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
  98. package/dist/layout/Accordion/Accordion.svelte +55 -55
  99. package/dist/layout/Accordion/AccordionItem.svelte +51 -51
  100. package/dist/layout/Accordion/accordion.js +64 -64
  101. package/dist/layout/Accordion/details.js +83 -83
  102. package/dist/layout/Accordion/docs/component.md +19 -19
  103. package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
  104. package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
  105. package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
  106. package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
  107. package/dist/layout/BackLink/BackLink.svelte +30 -30
  108. package/dist/layout/BackLink/docs/component.md +12 -12
  109. package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
  110. package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
  111. package/dist/layout/Breadcrumb/docs/component.md +15 -15
  112. package/dist/layout/Card/Card.stories.svelte +39 -39
  113. package/dist/layout/Card/Card.svelte +127 -127
  114. package/dist/layout/Card/docs/component.md +14 -14
  115. package/dist/layout/Card/docs/eg-images.md +27 -27
  116. package/dist/layout/Card/docs/eg-links.md +12 -12
  117. package/dist/layout/Card/docs/eg-spans.md +12 -12
  118. package/dist/layout/Contents/Contents.stories.svelte +27 -27
  119. package/dist/layout/Contents/Contents.svelte +51 -51
  120. package/dist/layout/Contents/docs/component.md +18 -18
  121. package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
  122. package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
  123. package/dist/layout/DescriptionList/docs/component.md +18 -18
  124. package/dist/layout/Details/Details.stories.svelte +32 -32
  125. package/dist/layout/Details/Details.svelte +75 -75
  126. package/dist/layout/Details/docs/component.md +14 -14
  127. package/dist/layout/DocumentList/Document.svelte +103 -103
  128. package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
  129. package/dist/layout/DocumentList/DocumentList.svelte +33 -33
  130. package/dist/layout/DocumentList/docs/component.md +28 -28
  131. package/dist/layout/DocumentList/docs/example.md +23 -23
  132. package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
  133. package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
  134. package/dist/layout/ErrorPage/docs/component.md +13 -13
  135. package/dist/layout/Footer/Footer.stories.svelte +24 -24
  136. package/dist/layout/Footer/Footer.svelte +366 -366
  137. package/dist/layout/Footer/docs/component.md +10 -10
  138. package/dist/layout/Grid/Grid.stories.svelte +50 -50
  139. package/dist/layout/Grid/Grid.svelte +117 -117
  140. package/dist/layout/Grid/GridCell.svelte +65 -65
  141. package/dist/layout/Grid/docs/component.md +14 -14
  142. package/dist/layout/Header/Header.stories.svelte +26 -26
  143. package/dist/layout/Header/Header.svelte +875 -875
  144. package/dist/layout/Header/docs/component.md +11 -11
  145. package/dist/layout/Hero/Hero.stories.svelte +79 -79
  146. package/dist/layout/Hero/Hero.svelte +364 -364
  147. package/dist/layout/Hero/docs/component.md +14 -14
  148. package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
  149. package/dist/layout/Highlight/Highlight.svelte +77 -77
  150. package/dist/layout/Highlight/docs/component.md +12 -12
  151. package/dist/layout/Image/Image.stories.svelte +23 -23
  152. package/dist/layout/Image/Image.svelte +29 -29
  153. package/dist/layout/Image/docs/component.md +15 -15
  154. package/dist/layout/List/Li.svelte +3 -3
  155. package/dist/layout/List/List.stories.svelte +40 -40
  156. package/dist/layout/List/List.svelte +46 -46
  157. package/dist/layout/List/docs/component.md +14 -14
  158. package/dist/layout/List/docs/example.md +12 -12
  159. package/dist/layout/NavSections/NavSection.svelte +90 -90
  160. package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
  161. package/dist/layout/NavSections/NavSections.svelte +160 -160
  162. package/dist/layout/NavSections/docs/component.md +25 -25
  163. package/dist/layout/Notice/Notice.stories.svelte +61 -61
  164. package/dist/layout/Notice/Notice.svelte +56 -56
  165. package/dist/layout/Notice/docs/component.md +14 -14
  166. package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
  167. package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
  168. package/dist/layout/PhaseBanner/docs/component.md +14 -14
  169. package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
  170. package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
  171. package/dist/layout/RelatedContent/docs/component.md +16 -16
  172. package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
  173. package/dist/layout/Scroller/Scroller.svelte +368 -368
  174. package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
  175. package/dist/layout/Scroller/docs/component.md +39 -39
  176. package/dist/layout/Section/Section.stories.svelte +33 -33
  177. package/dist/layout/Section/Section.svelte +60 -60
  178. package/dist/layout/Section/docs/component.md +12 -12
  179. package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
  180. package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
  181. package/dist/layout/ShareButtons/docs/component.md +14 -14
  182. package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
  183. package/dist/layout/SkipLink/SkipLink.svelte +9 -9
  184. package/dist/layout/SkipLink/docs/component.md +11 -11
  185. package/dist/layout/Summary/Summary.stories.svelte +21 -21
  186. package/dist/layout/Summary/Summary.svelte +60 -60
  187. package/dist/layout/Summary/docs/component.md +17 -17
  188. package/dist/layout/Tabs/Tab.svelte +53 -53
  189. package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
  190. package/dist/layout/Tabs/Tabs.svelte +89 -89
  191. package/dist/layout/Tabs/docs/component.md +16 -16
  192. package/dist/layout/Tabs/tabs.js +302 -302
  193. package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
  194. package/dist/layout/Timeline/Timeline.svelte +17 -17
  195. package/dist/layout/Timeline/TimelineItem.svelte +14 -14
  196. package/dist/layout/Timeline/docs/component.md +27 -27
  197. package/dist/layout/Timeline/docs/example.md +20 -20
  198. package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
  199. package/dist/templates/EmbedArticle/docs/component.md +56 -56
  200. package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
  201. package/dist/templates/FeatureArticle/docs/component.md +125 -125
  202. package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
  203. package/dist/templates/StandardArticle/docs/component.md +76 -76
  204. package/dist/templates/intro.mdx +18 -18
  205. package/dist/wrappers/Container/Container.stories.svelte +38 -38
  206. package/dist/wrappers/Container/Container.svelte +77 -77
  207. package/dist/wrappers/Container/docs/component.md +12 -12
  208. package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
  209. package/dist/wrappers/Embed/Embed.svelte +44 -44
  210. package/dist/wrappers/Embed/docs/component.md +15 -15
  211. package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
  212. package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
  213. package/dist/wrappers/LazyLoad/docs/component.md +29 -29
  214. package/dist/wrappers/Main/Main.stories.svelte +24 -24
  215. package/dist/wrappers/Main/Main.svelte +11 -11
  216. package/dist/wrappers/Main/docs/component.md +16 -16
  217. package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
  218. package/dist/wrappers/Observe/Observe.svelte +40 -40
  219. package/dist/wrappers/Observe/docs/component.md +22 -22
  220. package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
  221. package/dist/wrappers/Theme/Theme.svelte +76 -76
  222. package/dist/wrappers/Theme/docs/component.md +10 -10
  223. package/dist/wrappers/Theme/themes.js +70 -70
  224. package/package.json +88 -88
@@ -1,48 +1,48 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs } from "../../js/withParams.js";
4
- import Table from "./Table.svelte";
5
- import componentDocs from "./docs/component.md?raw";
6
-
7
- const data = [
8
- { country: "Scotland", mountain: "Ben Nevis", height: 1345 },
9
- { country: "Wales", mountain: "Snowdon", height: 1085 },
10
- { country: "England", mountain: "Scarfell Pike", height: 978 },
11
- { country: "Northern Ireland", mountain: "Slieve Donard", height: 850 }
12
- ];
13
- const columns = [
14
- { key: "country", label: "Country" },
15
- { key: "mountain", label: "Highest mountain" },
16
- { key: "height", label: "Height in metres", numeric: true }
17
- ];
18
-
19
- const dataAlt = [
20
- { measure: "First measure", value: 1 },
21
- { measure: "Second measure", value: 2 },
22
- { measure: "Third measure", value: null },
23
- { measure: "Fourth measure", value: 3 }
24
- ];
25
- const columnsAlt = [
26
- { key: "measure", label: "Measure" },
27
- { key: "value", label: "Value", numeric: true }
28
- ];
29
-
30
- const { Story } = defineMeta({
31
- title: "Data visualisation/Table",
32
- component: Table,
33
- tags: ["autodocs"],
34
- argTypes: {},
35
- parameters: withComponentDocs(componentDocs)
36
- });
37
- </script>
38
-
39
- <Story name="Default" args={{ data, columns }} />
40
-
41
- <Story name="Fixed height with sticky header" args={{ data, columns, height: 200 }} />
42
-
43
- <Story name="Compact mode, sortable" args={{ data, columns, sortable: true, compact: true }} />
44
-
45
- <Story
46
- name="Sortable with null values"
47
- args={{ data: dataAlt, columns: columnsAlt, sortable: true }}
48
- />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import Table from "./Table.svelte";
5
+ import componentDocs from "./docs/component.md?raw";
6
+
7
+ const data = [
8
+ { country: "Scotland", mountain: "Ben Nevis", height: 1345 },
9
+ { country: "Wales", mountain: "Snowdon", height: 1085 },
10
+ { country: "England", mountain: "Scarfell Pike", height: 978 },
11
+ { country: "Northern Ireland", mountain: "Slieve Donard", height: 850 }
12
+ ];
13
+ const columns = [
14
+ { key: "country", label: "Country" },
15
+ { key: "mountain", label: "Highest mountain" },
16
+ { key: "height", label: "Height in metres", numeric: true }
17
+ ];
18
+
19
+ const dataAlt = [
20
+ { measure: "First measure", value: 1 },
21
+ { measure: "Second measure", value: 2 },
22
+ { measure: "Third measure", value: null },
23
+ { measure: "Fourth measure", value: 3 }
24
+ ];
25
+ const columnsAlt = [
26
+ { key: "measure", label: "Measure" },
27
+ { key: "value", label: "Value", numeric: true }
28
+ ];
29
+
30
+ const { Story } = defineMeta({
31
+ title: "Data visualisation/Table",
32
+ component: Table,
33
+ tags: ["autodocs"],
34
+ argTypes: {},
35
+ parameters: withComponentDocs(componentDocs)
36
+ });
37
+ </script>
38
+
39
+ <Story name="Default" args={{ data, columns }} />
40
+
41
+ <Story name="Fixed height with sticky header" args={{ data, columns, height: 200 }} />
42
+
43
+ <Story name="Compact mode, sortable" args={{ data, columns, sortable: true, compact: true }} />
44
+
45
+ <Story
46
+ name="Sortable with null values"
47
+ args={{ data: dataAlt, columns: columnsAlt, sortable: true }}
48
+ />
@@ -1,161 +1,161 @@
1
- <script>
2
- import { formatter, isNumeric, ascending, descending } from "../../js/utils.js";
3
-
4
- /**
5
- * An optional title for the table
6
- * @type {string|null}
7
- */
8
- export let title = null;
9
- /**
10
- * Make the table smaller/more compact
11
- * @type {boolean}
12
- */
13
- export let compact = false;
14
- /**
15
- * Make the table sortable
16
- * @type {boolean}
17
- */
18
- export let sortable = false;
19
- /**
20
- * Make the chart responsive (changes layout on narrow screens)
21
- * @type {boolean}
22
- */
23
- export let responsive = false;
24
- /**
25
- * Highlight rows on hover
26
- * @type {boolean}
27
- */
28
- export let rowHover = false;
29
- /**
30
- * Maximum height of table (in pixels). The header row becomes sticky unless the value is "auto" (default).
31
- * @type {number|"auto"}
32
- */
33
- export let height = "auto";
34
- /**
35
- * Rows of data
36
- * @type {object[]}
37
- */
38
- export let data = [];
39
- /**
40
- * Optional metadata for formatting columns. Array of {key, label, numeric?, dp?, formatter?} objects
41
- * @type {object[]}
42
- */
43
- export let columns =
44
- Array.isArray(data) && data[0] ? Object.keys(data[0]).map((key) => ({ key, label: key })) : [];
45
- let _data = [...data];
46
- let sort = columns.map(() => "none");
47
- /**
48
- * Optional: Set an additional CSS class for the component
49
- * @type {string|null}
50
- */
51
- export let cls = null;
52
-
53
- $: formatters = columns.map((d) => d.formatter || formatter(d.dp));
54
- </script>
55
-
56
- <div
57
- class={cls}
58
- style:overflow={typeof height === "number" ? "auto" : null}
59
- style:height={typeof height === "number" ? `${height}px` : null}
60
- style:display={typeof height !== "number" ? "contents" : null}
61
- >
62
- <table
63
- class="ons-table"
64
- class:ons-table--sortable={sortable}
65
- class:ons-table--compact={compact}
66
- class:ons-table--responsive={responsive}
67
- class:ons-table--row-hover={rowHover}
68
- class:sticky-header={typeof height === "number"}
69
- data-aria-sort={sortable ? "Sort by" : null}
70
- data-aria-asc={sortable ? "ascending" : null}
71
- data-aria-desc={sortable ? "descending" : null}
72
- >
73
- {#if title}<caption class="ons-table__caption">{title}</caption>{/if}
74
- <thead class="ons-table__head">
75
- <tr class="ons-table__row">
76
- {#each columns as col, i}
77
- {#if sortable}
78
- <th
79
- scope="col"
80
- class="ons-table__header"
81
- class:ons-table__header--numeric={col.numeric}
82
- aria-sort={sort[i]}
83
- >
84
- <button
85
- aria-label="Sort by {col.label}"
86
- type="button"
87
- data-index={i}
88
- class="ons-table__sort-button"
89
- on:click={() => {
90
- sort = sort.map((c, j) =>
91
- j === i && c === "ascending" ? "descending" : j === i ? "ascending" : "none"
92
- );
93
- _data = _data.sort((a, b) =>
94
- sort[i] === "ascending"
95
- ? ascending(a[col.key], b[col.key])
96
- : descending(a[col.key], b[col.key])
97
- );
98
- }}
99
- >
100
- {col.label}<svg
101
- id="sort-sprite-id-0"
102
- class="ons-icon"
103
- viewBox="0 0 12 19"
104
- xmlns="http://www.w3.org/2000/svg"
105
- focusable="false"
106
- fill="currentColor"
107
- role="img"
108
- title="ons-icon-sort-sprite"
109
- >
110
- <path
111
- class="ons-topTriangle"
112
- d="M6 0l6 7.2H0L6 0zm0 18.6l6-7.2H0l6 7.2zm0 3.6l6 7.2H0l6-7.2z"
113
- ></path>
114
- <path class="ons-bottomTriangle" d="M6 18.6l6-7.2H0l6 7.2zm0 3.6l6 7.2H0l6-7.2z"
115
- ></path>
116
- </svg>
117
- </button>
118
- </th>
119
- {:else}
120
- <th
121
- scope="col"
122
- class="ons-table__header"
123
- class:ons-table__header--numeric={col.numeric}
124
- >
125
- <span class="ons-table__header-text">{col.label}</span>
126
- </th>
127
- {/if}
128
- {/each}
129
- </tr>
130
- </thead>
131
- <tbody class="ons-table__body">
132
- {#each _data as row}
133
- <tr class="ons-table__row">
134
- {#each columns as col, i}
135
- <td
136
- class="ons-table__cell"
137
- class:ons-table__cell--numeric={col.numeric}
138
- data-th={col.label}
139
- >{@html col.numeric && isNumeric(row[col.key])
140
- ? formatters[i](row[col.key])
141
- : row[col.key] || "&ndash;"}</td
142
- >
143
- {/each}
144
- </tr>
145
- {/each}
146
- </tbody>
147
- </table>
148
- </div>
149
-
150
- <style>
151
- table.sticky-header thead.ons-table__head {
152
- position: sticky;
153
- top: 0;
154
- background: var(--ons-color-page-light);
155
- border-bottom: none;
156
- }
157
- table.sticky-header thead.ons-table__head th {
158
- box-shadow: 0px -2px var(--ons-color-borders) inset;
159
- border-bottom: none;
160
- }
161
- </style>
1
+ <script>
2
+ import { formatter, isNumeric, ascending, descending } from "../../js/utils.js";
3
+
4
+ /**
5
+ * An optional title for the table
6
+ * @type {string|null}
7
+ */
8
+ export let title = null;
9
+ /**
10
+ * Make the table smaller/more compact
11
+ * @type {boolean}
12
+ */
13
+ export let compact = false;
14
+ /**
15
+ * Make the table sortable
16
+ * @type {boolean}
17
+ */
18
+ export let sortable = false;
19
+ /**
20
+ * Make the chart responsive (changes layout on narrow screens)
21
+ * @type {boolean}
22
+ */
23
+ export let responsive = false;
24
+ /**
25
+ * Highlight rows on hover
26
+ * @type {boolean}
27
+ */
28
+ export let rowHover = false;
29
+ /**
30
+ * Maximum height of table (in pixels). The header row becomes sticky unless the value is "auto" (default).
31
+ * @type {number|"auto"}
32
+ */
33
+ export let height = "auto";
34
+ /**
35
+ * Rows of data
36
+ * @type {object[]}
37
+ */
38
+ export let data = [];
39
+ /**
40
+ * Optional metadata for formatting columns. Array of {key, label, numeric?, dp?, formatter?} objects
41
+ * @type {object[]}
42
+ */
43
+ export let columns =
44
+ Array.isArray(data) && data[0] ? Object.keys(data[0]).map((key) => ({ key, label: key })) : [];
45
+ let _data = [...data];
46
+ let sort = columns.map(() => "none");
47
+ /**
48
+ * Optional: Set an additional CSS class for the component
49
+ * @type {string|null}
50
+ */
51
+ export let cls = null;
52
+
53
+ $: formatters = columns.map((d) => d.formatter || formatter(d.dp));
54
+ </script>
55
+
56
+ <div
57
+ class={cls}
58
+ style:overflow={typeof height === "number" ? "auto" : null}
59
+ style:height={typeof height === "number" ? `${height}px` : null}
60
+ style:display={typeof height !== "number" ? "contents" : null}
61
+ >
62
+ <table
63
+ class="ons-table"
64
+ class:ons-table--sortable={sortable}
65
+ class:ons-table--compact={compact}
66
+ class:ons-table--responsive={responsive}
67
+ class:ons-table--row-hover={rowHover}
68
+ class:sticky-header={typeof height === "number"}
69
+ data-aria-sort={sortable ? "Sort by" : null}
70
+ data-aria-asc={sortable ? "ascending" : null}
71
+ data-aria-desc={sortable ? "descending" : null}
72
+ >
73
+ {#if title}<caption class="ons-table__caption">{title}</caption>{/if}
74
+ <thead class="ons-table__head">
75
+ <tr class="ons-table__row">
76
+ {#each columns as col, i}
77
+ {#if sortable}
78
+ <th
79
+ scope="col"
80
+ class="ons-table__header"
81
+ class:ons-table__header--numeric={col.numeric}
82
+ aria-sort={sort[i]}
83
+ >
84
+ <button
85
+ aria-label="Sort by {col.label}"
86
+ type="button"
87
+ data-index={i}
88
+ class="ons-table__sort-button"
89
+ on:click={() => {
90
+ sort = sort.map((c, j) =>
91
+ j === i && c === "ascending" ? "descending" : j === i ? "ascending" : "none"
92
+ );
93
+ _data = _data.sort((a, b) =>
94
+ sort[i] === "ascending"
95
+ ? ascending(a[col.key], b[col.key])
96
+ : descending(a[col.key], b[col.key])
97
+ );
98
+ }}
99
+ >
100
+ {col.label}<svg
101
+ id="sort-sprite-id-0"
102
+ class="ons-icon"
103
+ viewBox="0 0 12 19"
104
+ xmlns="http://www.w3.org/2000/svg"
105
+ focusable="false"
106
+ fill="currentColor"
107
+ role="img"
108
+ title="ons-icon-sort-sprite"
109
+ >
110
+ <path
111
+ class="ons-topTriangle"
112
+ d="M6 0l6 7.2H0L6 0zm0 18.6l6-7.2H0l6 7.2zm0 3.6l6 7.2H0l6-7.2z"
113
+ ></path>
114
+ <path class="ons-bottomTriangle" d="M6 18.6l6-7.2H0l6 7.2zm0 3.6l6 7.2H0l6-7.2z"
115
+ ></path>
116
+ </svg>
117
+ </button>
118
+ </th>
119
+ {:else}
120
+ <th
121
+ scope="col"
122
+ class="ons-table__header"
123
+ class:ons-table__header--numeric={col.numeric}
124
+ >
125
+ <span class="ons-table__header-text">{col.label}</span>
126
+ </th>
127
+ {/if}
128
+ {/each}
129
+ </tr>
130
+ </thead>
131
+ <tbody class="ons-table__body">
132
+ {#each _data as row}
133
+ <tr class="ons-table__row">
134
+ {#each columns as col, i}
135
+ <td
136
+ class="ons-table__cell"
137
+ class:ons-table__cell--numeric={col.numeric}
138
+ data-th={col.label}
139
+ >{@html col.numeric && isNumeric(row[col.key])
140
+ ? formatters[i](row[col.key])
141
+ : row[col.key] || "&ndash;"}</td
142
+ >
143
+ {/each}
144
+ </tr>
145
+ {/each}
146
+ </tbody>
147
+ </table>
148
+ </div>
149
+
150
+ <style>
151
+ table.sticky-header thead.ons-table__head {
152
+ position: sticky;
153
+ top: 0;
154
+ background: var(--ons-color-page-light);
155
+ border-bottom: none;
156
+ }
157
+ table.sticky-header thead.ons-table__head th {
158
+ box-shadow: 0px -2px var(--ons-color-borders) inset;
159
+ border-bottom: none;
160
+ }
161
+ </style>
@@ -1,20 +1,20 @@
1
- A table component with various customisation options.
2
-
3
- <!-- prettier-ignore -->
4
- ```html
5
- <script>
6
- import { Table } from "@onsvisual/svelte-components";
7
-
8
- const data = [
9
- { col1: "Item one", col2: 10 },
10
- { col1: "Item two", col2: 20 },
11
- { col1: "Item three", col2: 30 },
12
- ];
13
- const columns = [
14
- { key: "col1", label: "Text column" },
15
- { key: "col2", label: "Numeric column", numeric: true},
16
- ];
17
- </script>
18
-
19
- <Table {data} {columns} />
20
- ```
1
+ A table component with various customisation options.
2
+
3
+ <!-- prettier-ignore -->
4
+ ```html
5
+ <script>
6
+ import { Table } from "@onsvisual/svelte-components";
7
+
8
+ const data = [
9
+ { col1: "Item one", col2: 10 },
10
+ { col1: "Item two", col2: 20 },
11
+ { col1: "Item three", col2: 30 },
12
+ ];
13
+ const columns = [
14
+ { key: "col1", label: "Text column" },
15
+ { key: "col2", label: "Numeric column", numeric: true},
16
+ ];
17
+ </script>
18
+
19
+ <Table {data} {columns} />
20
+ ```
@@ -1,40 +1,40 @@
1
- export default [
2
- { year: 1979, value: 7.19, alt: 12, group: "apples" },
3
- { year: 1980, value: 7.83, alt: 15, group: "apples" },
4
- { year: 1981, value: 7.24, alt: 17, group: "apples" },
5
- { year: 1982, value: 7.44, alt: 28, group: "apples" },
6
- { year: 1983, value: 7.51, alt: 23, group: "apples" },
7
- { year: 1984, value: 7.1, alt: 17, group: "apples" },
8
- { year: 1985, value: 6.91, alt: 11, group: "apples" },
9
- { year: 1986, value: 7.53, alt: 13, group: "apples" },
10
- { year: 1987, value: 7.47, alt: 18, group: "apples" },
11
- { year: 1988, value: 7.48, alt: 20, group: "apples" },
12
- { year: 1989, value: 7.03, alt: 24, group: "apples" },
13
- { year: 1990, value: 6.23, alt: 26, group: "bananas" },
14
- { year: 1991, value: 6.54, alt: 16, group: "bananas" },
15
- { year: 1992, value: 7.54, alt: 25, group: "bananas" },
16
- { year: 1993, value: 6.5, alt: 28, group: "bananas" },
17
- { year: 1994, value: 7.18, alt: 11, group: "bananas" },
18
- { year: 1995, value: 6.12, alt: 19, group: "bananas" },
19
- { year: 1996, value: 7.87, alt: 14, group: "bananas" },
20
- { year: 1997, value: 6.73, alt: 22, group: "bananas" },
21
- { year: 1998, value: 6.55, alt: 13, group: "bananas" },
22
- { year: 1999, value: 6.23, alt: 30, group: "bananas" },
23
- { year: 2000, value: 6.31, alt: 27, group: "bananas" },
24
- { year: 2001, value: 6.74, alt: 13, group: "cherries" },
25
- { year: 2002, value: 5.95, alt: 18, group: "cherries" },
26
- { year: 2003, value: 6.13, alt: 15, group: "cherries" },
27
- { year: 2004, value: 6.04, alt: 11, group: "cherries" },
28
- { year: 2005, value: 5.56, alt: 29, group: "cherries" },
29
- { year: 2006, value: 5.91, alt: 26, group: "cherries" },
30
- { year: 2007, value: 4.29, alt: 10, group: "cherries" },
31
- { year: 2008, value: 4.72, alt: 14, group: "cherries" },
32
- { year: 2009, value: 5.38, alt: 21, group: "cherries" },
33
- { year: 2010, value: 4.92, alt: 20, group: "cherries" },
34
- { year: 2011, value: 4.61, alt: 24, group: "dates" },
35
- { year: 2012, value: 3.62, alt: 19, group: "dates" },
36
- { year: 2013, value: 5.35, alt: 12, group: "dates" },
37
- { year: 2014, value: 5.28, alt: 13, group: "dates" },
38
- { year: 2015, value: 4.63, alt: 28, group: "dates" },
39
- { year: 2016, value: 4.72, alt: 30, group: "dates" },
40
- ];
1
+ export default [
2
+ { year: 1979, value: 7.19, alt: 12, group: "apples" },
3
+ { year: 1980, value: 7.83, alt: 15, group: "apples" },
4
+ { year: 1981, value: 7.24, alt: 17, group: "apples" },
5
+ { year: 1982, value: 7.44, alt: 28, group: "apples" },
6
+ { year: 1983, value: 7.51, alt: 23, group: "apples" },
7
+ { year: 1984, value: 7.1, alt: 17, group: "apples" },
8
+ { year: 1985, value: 6.91, alt: 11, group: "apples" },
9
+ { year: 1986, value: 7.53, alt: 13, group: "apples" },
10
+ { year: 1987, value: 7.47, alt: 18, group: "apples" },
11
+ { year: 1988, value: 7.48, alt: 20, group: "apples" },
12
+ { year: 1989, value: 7.03, alt: 24, group: "apples" },
13
+ { year: 1990, value: 6.23, alt: 26, group: "bananas" },
14
+ { year: 1991, value: 6.54, alt: 16, group: "bananas" },
15
+ { year: 1992, value: 7.54, alt: 25, group: "bananas" },
16
+ { year: 1993, value: 6.5, alt: 28, group: "bananas" },
17
+ { year: 1994, value: 7.18, alt: 11, group: "bananas" },
18
+ { year: 1995, value: 6.12, alt: 19, group: "bananas" },
19
+ { year: 1996, value: 7.87, alt: 14, group: "bananas" },
20
+ { year: 1997, value: 6.73, alt: 22, group: "bananas" },
21
+ { year: 1998, value: 6.55, alt: 13, group: "bananas" },
22
+ { year: 1999, value: 6.23, alt: 30, group: "bananas" },
23
+ { year: 2000, value: 6.31, alt: 27, group: "bananas" },
24
+ { year: 2001, value: 6.74, alt: 13, group: "cherries" },
25
+ { year: 2002, value: 5.95, alt: 18, group: "cherries" },
26
+ { year: 2003, value: 6.13, alt: 15, group: "cherries" },
27
+ { year: 2004, value: 6.04, alt: 11, group: "cherries" },
28
+ { year: 2005, value: 5.56, alt: 29, group: "cherries" },
29
+ { year: 2006, value: 5.91, alt: 26, group: "cherries" },
30
+ { year: 2007, value: 4.29, alt: 10, group: "cherries" },
31
+ { year: 2008, value: 4.72, alt: 14, group: "cherries" },
32
+ { year: 2009, value: 5.38, alt: 21, group: "cherries" },
33
+ { year: 2010, value: 4.92, alt: 20, group: "cherries" },
34
+ { year: 2011, value: 4.61, alt: 24, group: "dates" },
35
+ { year: 2012, value: 3.62, alt: 19, group: "dates" },
36
+ { year: 2013, value: 5.35, alt: 12, group: "dates" },
37
+ { year: 2014, value: 5.28, alt: 13, group: "dates" },
38
+ { year: 2015, value: 4.63, alt: 28, group: "dates" },
39
+ { year: 2016, value: 4.72, alt: 30, group: "dates" },
40
+ ];
@@ -1,18 +1,18 @@
1
- export default [
2
- { year: 2017, value: 320, group: "apples" },
3
- { year: 2017, value: 480, group: "bananas" },
4
- { year: 2017, value: 640, group: "cherries" },
5
- { year: 2017, value: 400, group: "dates" },
6
- { year: 2018, value: 640, group: "apples" },
7
- { year: 2018, value: 960, group: "bananas" },
8
- { year: 2018, value: 640, group: "cherries" },
9
- { year: 2018, value: 400, group: "dates" },
10
- { year: 2019, value: 1600, group: "apples" },
11
- { year: 2019, value: 1440, group: "bananas" },
12
- { year: 2019, value: 960, group: "cherries" },
13
- { year: 2019, value: 400, group: "dates" },
14
- { year: 2020, value: 3840, group: "apples" },
15
- { year: 2020, value: 1920, group: "bananas" },
16
- { year: 2020, value: 960, group: "cherries" },
17
- { year: 2020, value: 400, group: "dates" },
18
- ];
1
+ export default [
2
+ { year: 2017, value: 320, group: "apples" },
3
+ { year: 2017, value: 480, group: "bananas" },
4
+ { year: 2017, value: 640, group: "cherries" },
5
+ { year: 2017, value: 400, group: "dates" },
6
+ { year: 2018, value: 640, group: "apples" },
7
+ { year: 2018, value: 960, group: "bananas" },
8
+ { year: 2018, value: 640, group: "cherries" },
9
+ { year: 2018, value: 400, group: "dates" },
10
+ { year: 2019, value: 1600, group: "apples" },
11
+ { year: 2019, value: 1440, group: "bananas" },
12
+ { year: 2019, value: 960, group: "cherries" },
13
+ { year: 2019, value: 400, group: "dates" },
14
+ { year: 2020, value: 3840, group: "apples" },
15
+ { year: 2020, value: 1920, group: "bananas" },
16
+ { year: 2020, value: 960, group: "cherries" },
17
+ { year: 2020, value: 400, group: "dates" },
18
+ ];
@@ -1,22 +1,22 @@
1
- import { Meta } from "@storybook/addon-docs/blocks";
2
-
3
- <Meta title="Data visualisation/Using svelte-charts" />
4
-
5
- # Using svelte-charts
6
-
7
- Most of the charts in this section are examples from the [@onsvisual/svelte-charts](https://github.com/onsvisual/svelte-charts/) library. To make use of the charts from that library, it is necessary to install an additional dependency in your project:
8
-
9
- ```bash
10
- npm install @onsvisual/svelte-charts --save-dev
11
- ```
12
-
13
- When using these charts, you need to make sure that you import them from the **svelte-charts** library and not the components library, for example:
14
-
15
- {/* prettier-ignore */}
16
- ```html
17
- <script>
18
- import { Chart } from "@onsvisual/svelte-charts";
19
- </script>
20
-
21
- <Chart {...chart_properties}>
1
+ import { Meta } from "@storybook/addon-docs/blocks";
2
+
3
+ <Meta title="Data visualisation/Using svelte-charts" />
4
+
5
+ # Using svelte-charts
6
+
7
+ Most of the charts in this section are examples from the [@onsvisual/svelte-charts](https://github.com/onsvisual/svelte-charts/) library. To make use of the charts from that library, it is necessary to install an additional dependency in your project:
8
+
9
+ ```bash
10
+ npm install @onsvisual/svelte-charts --save-dev
11
+ ```
12
+
13
+ When using these charts, you need to make sure that you import them from the **svelte-charts** library and not the components library, for example:
14
+
15
+ {/* prettier-ignore */}
16
+ ```html
17
+ <script>
18
+ import { Chart } from "@onsvisual/svelte-charts";
19
+ </script>
20
+
21
+ <Chart {...chart_properties}>
22
22
  ```