@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,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>