@onsvisual/svelte-components 1.0.41 → 1.0.43

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 +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/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 +35 -35
  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,84 +1,84 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs } from "../../js/withParams.js";
4
- import { ColumnChart } from "@onsvisual/svelte-charts";
5
- import data from "../demo-data/data.js";
6
- import componentDocs from "./docs/component.md?raw";
7
-
8
- const { Story } = defineMeta({
9
- title: "Data visualisation/ColumnChart",
10
- component: ColumnChart,
11
- tags: ["autodocs"],
12
- argTypes: {
13
- mode: {
14
- options: ["default", "stacked", "grouped", "comparison", "marker"],
15
- control: { type: "select" }
16
- }
17
- },
18
- parameters: withComponentDocs(componentDocs)
19
- });
20
- </script>
21
-
22
- <Story
23
- name="Default"
24
- args={{
25
- data: data.filter((d) => d.group == "apples"),
26
- xKey: "year",
27
- yKey: "value",
28
- title: "Simple bar chart",
29
- footer: "Source: ONS.",
30
- mode: "default"
31
- }}
32
- />
33
-
34
- <Story
35
- name="Stacked columns"
36
- args={{
37
- data,
38
- xKey: "year",
39
- yKey: "value",
40
- zKey: "group",
41
- title: "Stacked bar chart",
42
- footer: "Source: ONS.",
43
- mode: "default"
44
- }}
45
- />
46
-
47
- <Story
48
- name="Grouped columns"
49
- args={{
50
- data,
51
- xKey: "year",
52
- yKey: "value",
53
- zKey: "group",
54
- title: "Grouped bar chart",
55
- footer: "Source: ONS.",
56
- mode: "grouped"
57
- }}
58
- />
59
-
60
- <Story
61
- name="Comparison markers"
62
- args={{
63
- data,
64
- xKey: "year",
65
- yKey: "value",
66
- zKey: "group",
67
- title: "Comparison marker chart",
68
- footer: "Source: ONS.",
69
- mode: "comparison"
70
- }}
71
- />
72
-
73
- <Story
74
- name="Barcode"
75
- args={{
76
- data,
77
- xKey: "year",
78
- yKey: "value",
79
- zKey: "group",
80
- title: "Barcode chart",
81
- footer: "Source: ONS.",
82
- mode: "marker"
83
- }}
84
- />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import { ColumnChart } from "@onsvisual/svelte-charts";
5
+ import data from "../demo-data/data.js";
6
+ import componentDocs from "./docs/component.md?raw";
7
+
8
+ const { Story } = defineMeta({
9
+ title: "Data visualisation/ColumnChart",
10
+ component: ColumnChart,
11
+ tags: ["autodocs"],
12
+ argTypes: {
13
+ mode: {
14
+ options: ["default", "stacked", "grouped", "comparison", "marker"],
15
+ control: { type: "select" }
16
+ }
17
+ },
18
+ parameters: withComponentDocs(componentDocs)
19
+ });
20
+ </script>
21
+
22
+ <Story
23
+ name="Default"
24
+ args={{
25
+ data: data.filter((d) => d.group == "apples"),
26
+ xKey: "year",
27
+ yKey: "value",
28
+ title: "Simple bar chart",
29
+ footer: "Source: ONS.",
30
+ mode: "default"
31
+ }}
32
+ />
33
+
34
+ <Story
35
+ name="Stacked columns"
36
+ args={{
37
+ data,
38
+ xKey: "year",
39
+ yKey: "value",
40
+ zKey: "group",
41
+ title: "Stacked bar chart",
42
+ footer: "Source: ONS.",
43
+ mode: "default"
44
+ }}
45
+ />
46
+
47
+ <Story
48
+ name="Grouped columns"
49
+ args={{
50
+ data,
51
+ xKey: "year",
52
+ yKey: "value",
53
+ zKey: "group",
54
+ title: "Grouped bar chart",
55
+ footer: "Source: ONS.",
56
+ mode: "grouped"
57
+ }}
58
+ />
59
+
60
+ <Story
61
+ name="Comparison markers"
62
+ args={{
63
+ data,
64
+ xKey: "year",
65
+ yKey: "value",
66
+ zKey: "group",
67
+ title: "Comparison marker chart",
68
+ footer: "Source: ONS.",
69
+ mode: "comparison"
70
+ }}
71
+ />
72
+
73
+ <Story
74
+ name="Barcode"
75
+ args={{
76
+ data,
77
+ xKey: "year",
78
+ yKey: "value",
79
+ zKey: "group",
80
+ title: "Barcode chart",
81
+ footer: "Source: ONS.",
82
+ mode: "marker"
83
+ }}
84
+ />
@@ -1,19 +1,19 @@
1
- A column chart component with various modes, plus animation and events.
2
-
3
- Note: This component is part of the **@onsvisual/svelte-charts** library. See [more examples here](https://onsvisual.github.io/svelte-charts/).
4
-
5
- <!-- prettier-ignore -->
6
- ```html
7
- <script>
8
- import { ColumnChart } from "@onsvisual/svelte-charts";
9
-
10
- const data = [
11
- { year: 2017, value: 320 },
12
- { year: 2018, value: 640 },
13
- { year: 2019, value: 1600 },
14
- { year: 2020, value: 3840 },
15
- ];
16
- </script>
17
-
18
- <ColumnChart {data} xKey="value" yKey="year" title="Bar chart example" footer="Source: ONS." />
19
- ```
1
+ A column chart component with various modes, plus animation and events.
2
+
3
+ Note: This component is part of the **@onsvisual/svelte-charts** library. See [more examples here](https://onsvisual.github.io/svelte-charts/).
4
+
5
+ <!-- prettier-ignore -->
6
+ ```html
7
+ <script>
8
+ import { ColumnChart } from "@onsvisual/svelte-charts";
9
+
10
+ const data = [
11
+ { year: 2017, value: 320 },
12
+ { year: 2018, value: 640 },
13
+ { year: 2019, value: 1600 },
14
+ { year: 2020, value: 3840 },
15
+ ];
16
+ </script>
17
+
18
+ <ColumnChart {data} xKey="value" yKey="year" title="Bar chart example" footer="Source: ONS." />
19
+ ```
@@ -1,45 +1,45 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs, withStoryDocs } from "../../js/withParams.js";
4
- import DataCard from "./DataCard.svelte";
5
- import componentDocs from "./docs/component.md?raw";
6
- import exampleDocs from "./docs/example.md?raw";
7
- import data from "../demo-data/data-scatter.js";
8
-
9
- const { Story } = defineMeta({
10
- title: "Data visualisation/DataCard",
11
- component: DataCard,
12
- tags: ["autodocs"],
13
- argTypes: {
14
- mode: {
15
- control: { type: "select" }
16
- }
17
- },
18
- parameters: withComponentDocs(componentDocs)
19
- });
20
- </script>
21
-
22
- <Story
23
- name="Big number"
24
- args={{
25
- title: "Consumer Price Index (CPI)",
26
- subtitle: "United Kingdom",
27
- value: "up 2.5%",
28
- caption: "in 12 months to December 2024",
29
- source: "Source: ONS"
30
- }}
31
- />
32
-
33
- <Story
34
- name="Sparkline"
35
- args={{
36
- title: "Example sparkline",
37
- subtitle: "Value in £ million",
38
- mode: "sparkline",
39
- data: data.map((d) => ({ x: d.year, y: d.value })),
40
- value: "down 2.47",
41
- caption: `Change from 1979 to 2016`,
42
- source: "Source: ONS"
43
- }}
44
- parameters={withStoryDocs(exampleDocs)}
45
- />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs, withStoryDocs } from "../../js/withParams.js";
4
+ import DataCard from "./DataCard.svelte";
5
+ import componentDocs from "./docs/component.md?raw";
6
+ import exampleDocs from "./docs/example.md?raw";
7
+ import data from "../demo-data/data-scatter.js";
8
+
9
+ const { Story } = defineMeta({
10
+ title: "Data visualisation/DataCard",
11
+ component: DataCard,
12
+ tags: ["autodocs"],
13
+ argTypes: {
14
+ mode: {
15
+ control: { type: "select" }
16
+ }
17
+ },
18
+ parameters: withComponentDocs(componentDocs)
19
+ });
20
+ </script>
21
+
22
+ <Story
23
+ name="Big number"
24
+ args={{
25
+ title: "Consumer Price Index (CPI)",
26
+ subtitle: "United Kingdom",
27
+ value: "up 2.5%",
28
+ caption: "in 12 months to December 2024",
29
+ source: "Source: ONS"
30
+ }}
31
+ />
32
+
33
+ <Story
34
+ name="Sparkline"
35
+ args={{
36
+ title: "Example sparkline",
37
+ subtitle: "Value in £ million",
38
+ mode: "sparkline",
39
+ data: data.map((d) => ({ x: d.year, y: d.value })),
40
+ value: "down 2.47",
41
+ caption: `Change from 1979 to 2016`,
42
+ source: "Source: ONS"
43
+ }}
44
+ parameters={withStoryDocs(exampleDocs)}
45
+ />
@@ -1,70 +1,70 @@
1
- <script>
2
- import Card from "../../layout/Card/Card.svelte";
3
- import Sparkline from "./Sparkline.svelte";
4
-
5
- /**
6
- * Title of card
7
- * @type {string|null}
8
- */
9
- export let title = null;
10
- /**
11
- * Optional: Subtitle of card
12
- * @type {string|null}
13
- */
14
- export let subtitle = null;
15
- /**
16
- * Optional: URL link for card title
17
- * @type {string|null}
18
- */
19
- export let href = null;
20
- /**
21
- * Big number (expects a pre-formatted text string)
22
- * @type {string|number|null}
23
- */
24
- export let value = null;
25
- /**
26
- * Mode for the data tile
27
- * @type {"number"|"sparkline"|"bar"}
28
- */
29
- export let mode = "number";
30
- /**
31
- * Text caption describing the number
32
- * @type {string|null}
33
- */
34
- export let caption = null;
35
- /**
36
- * An array of data (required for charts)
37
- * @type {object[]|null}
38
- */
39
- export let data = null;
40
- /**
41
- * Text describing the source of the data
42
- * @type {string|null}
43
- */
44
- export let source = null;
45
- /**
46
- * Optional: Set an additional CSS class for the component
47
- * @type {string|null}
48
- */
49
- export let cls = null;
50
- </script>
51
-
52
- <Card {title} {href} mode="featured" {cls}>
53
- {#if subtitle}
54
- <p class="ons-card__subtitle ons-u-fs-s">{subtitle}</p>
55
- {/if}
56
- {#if mode === "sparkline" && data}
57
- <Sparkline {data} />
58
- {/if}
59
- {#if value}
60
- <p class="ons-card__figure ons-u-fs-3xl ons-u-fw-b ons-u-mb-no">{value}</p>
61
- {/if}
62
- {#if caption}
63
- <p class="ons-card__body">
64
- {@html caption}
65
- </p>
66
- {/if}
67
- {#if source}
68
- <p class="ons-u-fs-s ons-u-mt-s ons-u-mb-no">{source}</p>
69
- {/if}
70
- </Card>
1
+ <script>
2
+ import Card from "../../layout/Card/Card.svelte";
3
+ import Sparkline from "./Sparkline.svelte";
4
+
5
+ /**
6
+ * Title of card
7
+ * @type {string|null}
8
+ */
9
+ export let title = null;
10
+ /**
11
+ * Optional: Subtitle of card
12
+ * @type {string|null}
13
+ */
14
+ export let subtitle = null;
15
+ /**
16
+ * Optional: URL link for card title
17
+ * @type {string|null}
18
+ */
19
+ export let href = null;
20
+ /**
21
+ * Big number (expects a pre-formatted text string)
22
+ * @type {string|number|null}
23
+ */
24
+ export let value = null;
25
+ /**
26
+ * Mode for the data tile
27
+ * @type {"number"|"sparkline"|"bar"}
28
+ */
29
+ export let mode = "number";
30
+ /**
31
+ * Text caption describing the number
32
+ * @type {string|null}
33
+ */
34
+ export let caption = null;
35
+ /**
36
+ * An array of data (required for charts)
37
+ * @type {object[]|null}
38
+ */
39
+ export let data = null;
40
+ /**
41
+ * Text describing the source of the data
42
+ * @type {string|null}
43
+ */
44
+ export let source = null;
45
+ /**
46
+ * Optional: Set an additional CSS class for the component
47
+ * @type {string|null}
48
+ */
49
+ export let cls = null;
50
+ </script>
51
+
52
+ <Card {title} {href} mode="featured" {cls}>
53
+ {#if subtitle}
54
+ <p class="ons-card__subtitle ons-u-fs-s">{subtitle}</p>
55
+ {/if}
56
+ {#if mode === "sparkline" && data}
57
+ <Sparkline {data} />
58
+ {/if}
59
+ {#if value}
60
+ <p class="ons-card__figure ons-u-fs-3xl ons-u-fw-b ons-u-mb-no">{value}</p>
61
+ {/if}
62
+ {#if caption}
63
+ <p class="ons-card__body">
64
+ {@html caption}
65
+ </p>
66
+ {/if}
67
+ {#if source}
68
+ <p class="ons-u-fs-s ons-u-mt-s ons-u-mb-no">{source}</p>
69
+ {/if}
70
+ </Card>
@@ -1,117 +1,117 @@
1
- <script>
2
- import { scaleLinear } from "d3-scale";
3
- import { line } from "d3-shape";
4
-
5
- /**
6
- * Array of data in the format [{x: value, y: value}, etc]
7
- * @type {object[]}
8
- */
9
- export let data;
10
- /**
11
- * Key for the X values
12
- * @type {string}
13
- */
14
- export let xKey = "x";
15
- /**
16
- * Key for the Y values
17
- * @type {string}
18
- */
19
- export let yKey = "y";
20
-
21
- function minMax(data, key) {
22
- const values = data.map((d) => d[key]);
23
- return [Math.min(...values), Math.max(...values)];
24
- }
25
-
26
- const xDomain = [data[0][xKey], data[data.length - 1][xKey]];
27
- const yDomain = minMax(data, yKey);
28
-
29
- const xScale = scaleLinear().domain(xDomain).range([0, 100]);
30
- const yScale = scaleLinear().domain(yDomain).range([100, 0]);
31
- const lineFn = line()
32
- .x((d) => xScale(d[xKey]))
33
- .y((d) => yScale(d[yKey]));
34
- </script>
35
-
36
- <div class="sparkline-container">
37
- <div
38
- class="sparkline-point"
39
- style={[data[data.length - 1]].map((d) => `right: 0; top: ${yScale(d[yKey])}%;`)[0]}
40
- ></div>
41
- <svg class="sparkline-chart" viewBox="0 0 100 100" preserveAspectRatio="none">
42
- <path class="sparkline" d={lineFn(data)} />
43
- </svg>
44
- </div>
45
- <div class="x-ticks">
46
- {#each [data[0], data[data.length - 1]] as tick, i}
47
- <div class="x-tick x-tick--{i === 0 ? 'start' : 'end'}">
48
- <span class="ons-u-fs-s">{tick[xKey]}</span><br /><span class="x-tick--value"
49
- >{tick[yKey]}</span
50
- >
51
- </div>
52
- {/each}
53
- </div>
54
-
55
- <style>
56
- .sparkline-container {
57
- display: block;
58
- height: 100px;
59
- width: 100%;
60
- position: relative;
61
- }
62
- .sparkline-chart {
63
- display: block;
64
- position: absolute;
65
- height: 100%;
66
- width: 100%;
67
- overflow: visible;
68
- }
69
- .sparkline-point {
70
- position: absolute;
71
- display: inline-block;
72
- width: 10px;
73
- height: 10px;
74
- border-radius: 50%;
75
- background: var(--ons-color-branded);
76
- transform: translate(50%, -50%);
77
- }
78
- .sparkline {
79
- fill: none;
80
- stroke: var(--ons-color-branded);
81
- stroke-width: 2.5px;
82
- vector-effect: non-scaling-stroke;
83
- }
84
- .x-ticks {
85
- display: flex;
86
- width: 100%;
87
- flex-direction: row;
88
- justify-content: space-between;
89
- margin-bottom: 6px;
90
- }
91
- .x-tick {
92
- position: relative;
93
- padding-top: 10px;
94
- line-height: 1.1;
95
- }
96
- .x-tick--value {
97
- color: var(--ons-color-branded);
98
- font-size: 1.25rem;
99
- font-weight: bold;
100
- }
101
- .x-tick::before {
102
- position: absolute;
103
- content: " ";
104
- height: 10px;
105
- top: 0;
106
- }
107
- .x-tick--end {
108
- text-align: right;
109
- }
110
- .x-tick--start::before {
111
- border-left: 1px solid var(--ons-color-borders);
112
- }
113
- .x-tick--end::before {
114
- right: 0;
115
- border-right: 1px solid var(--ons-color-borders);
116
- }
117
- </style>
1
+ <script>
2
+ import { scaleLinear } from "d3-scale";
3
+ import { line } from "d3-shape";
4
+
5
+ /**
6
+ * Array of data in the format [{x: value, y: value}, etc]
7
+ * @type {object[]}
8
+ */
9
+ export let data;
10
+ /**
11
+ * Key for the X values
12
+ * @type {string}
13
+ */
14
+ export let xKey = "x";
15
+ /**
16
+ * Key for the Y values
17
+ * @type {string}
18
+ */
19
+ export let yKey = "y";
20
+
21
+ function minMax(data, key) {
22
+ const values = data.map((d) => d[key]);
23
+ return [Math.min(...values), Math.max(...values)];
24
+ }
25
+
26
+ const xDomain = [data[0][xKey], data[data.length - 1][xKey]];
27
+ const yDomain = minMax(data, yKey);
28
+
29
+ const xScale = scaleLinear().domain(xDomain).range([0, 100]);
30
+ const yScale = scaleLinear().domain(yDomain).range([100, 0]);
31
+ const lineFn = line()
32
+ .x((d) => xScale(d[xKey]))
33
+ .y((d) => yScale(d[yKey]));
34
+ </script>
35
+
36
+ <div class="sparkline-container">
37
+ <div
38
+ class="sparkline-point"
39
+ style={[data[data.length - 1]].map((d) => `right: 0; top: ${yScale(d[yKey])}%;`)[0]}
40
+ ></div>
41
+ <svg class="sparkline-chart" viewBox="0 0 100 100" preserveAspectRatio="none">
42
+ <path class="sparkline" d={lineFn(data)} />
43
+ </svg>
44
+ </div>
45
+ <div class="x-ticks">
46
+ {#each [data[0], data[data.length - 1]] as tick, i}
47
+ <div class="x-tick x-tick--{i === 0 ? 'start' : 'end'}">
48
+ <span class="ons-u-fs-s">{tick[xKey]}</span><br /><span class="x-tick--value"
49
+ >{tick[yKey]}</span
50
+ >
51
+ </div>
52
+ {/each}
53
+ </div>
54
+
55
+ <style>
56
+ .sparkline-container {
57
+ display: block;
58
+ height: 100px;
59
+ width: 100%;
60
+ position: relative;
61
+ }
62
+ .sparkline-chart {
63
+ display: block;
64
+ position: absolute;
65
+ height: 100%;
66
+ width: 100%;
67
+ overflow: visible;
68
+ }
69
+ .sparkline-point {
70
+ position: absolute;
71
+ display: inline-block;
72
+ width: 10px;
73
+ height: 10px;
74
+ border-radius: 50%;
75
+ background: var(--ons-color-branded);
76
+ transform: translate(50%, -50%);
77
+ }
78
+ .sparkline {
79
+ fill: none;
80
+ stroke: var(--ons-color-branded);
81
+ stroke-width: 2.5px;
82
+ vector-effect: non-scaling-stroke;
83
+ }
84
+ .x-ticks {
85
+ display: flex;
86
+ width: 100%;
87
+ flex-direction: row;
88
+ justify-content: space-between;
89
+ margin-bottom: 6px;
90
+ }
91
+ .x-tick {
92
+ position: relative;
93
+ padding-top: 10px;
94
+ line-height: 1.1;
95
+ }
96
+ .x-tick--value {
97
+ color: var(--ons-color-branded);
98
+ font-size: 1.25rem;
99
+ font-weight: bold;
100
+ }
101
+ .x-tick::before {
102
+ position: absolute;
103
+ content: " ";
104
+ height: 10px;
105
+ top: 0;
106
+ }
107
+ .x-tick--end {
108
+ text-align: right;
109
+ }
110
+ .x-tick--start::before {
111
+ border-left: 1px solid var(--ons-color-borders);
112
+ }
113
+ .x-tick--end::before {
114
+ right: 0;
115
+ border-right: 1px solid var(--ons-color-borders);
116
+ }
117
+ </style>