@onsvisual/svelte-components 1.0.40 → 1.0.42

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