@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.
- package/README.md +24 -24
- package/dist/css/main.css +513 -2
- package/dist/datavis/BarChart/BarChart.stories.svelte +84 -84
- package/dist/datavis/BarChart/docs/component.md +19 -19
- package/dist/datavis/Chart/Chart.stories.svelte +128 -128
- package/dist/datavis/Chart/docs/component.md +31 -31
- package/dist/datavis/Chart/docs/example.md +28 -28
- package/dist/datavis/ColumnChart/ColumnChart.stories.svelte +84 -84
- package/dist/datavis/ColumnChart/docs/component.md +19 -19
- package/dist/datavis/DataCard/DataCard.stories.svelte +45 -45
- package/dist/datavis/DataCard/DataCard.svelte +70 -70
- package/dist/datavis/DataCard/Sparkline.svelte +117 -117
- package/dist/datavis/DataCard/docs/component.md +20 -20
- package/dist/datavis/DataCard/docs/example.md +25 -25
- package/dist/datavis/DotPlotChart/DotPlotChart.stories.svelte +40 -40
- package/dist/datavis/DotPlotChart/docs/component.md +19 -19
- package/dist/datavis/LineChart/LineChart.stories.svelte +64 -64
- package/dist/datavis/LineChart/docs/component.md +31 -31
- package/dist/datavis/ScatterChart/ScatterChart.stories.svelte +55 -55
- package/dist/datavis/ScatterChart/docs/component.md +53 -53
- package/dist/datavis/Table/Table.stories.svelte +48 -48
- package/dist/datavis/Table/Table.svelte +161 -161
- package/dist/datavis/Table/docs/component.md +20 -20
- package/dist/datavis/demo-data/data-scatter.js +40 -40
- package/dist/datavis/demo-data/data.js +18 -18
- package/dist/datavis/intro.mdx +21 -21
- package/dist/decorators/Blockquote/Blockquote.stories.svelte +25 -25
- package/dist/decorators/Blockquote/Blockquote.svelte +27 -27
- package/dist/decorators/Blockquote/docs/component.md +10 -10
- package/dist/decorators/Divider/Divider.stories.svelte +29 -29
- package/dist/decorators/Divider/Divider.svelte +52 -52
- package/dist/decorators/Divider/docs/component.md +12 -12
- package/dist/decorators/Em/Em.stories.svelte +30 -30
- package/dist/decorators/Em/Em.svelte +58 -58
- package/dist/decorators/Em/docs/component.md +12 -12
- package/dist/decorators/Icon/Icon.stories.svelte +27 -27
- package/dist/decorators/Icon/Icon.svelte +101 -93
- package/dist/decorators/Icon/Icon.svelte.d.ts +2 -2
- package/dist/decorators/Icon/docs/component.md +10 -10
- package/dist/decorators/Indent/Indent.stories.svelte +22 -22
- package/dist/decorators/Indent/Indent.svelte +3 -3
- package/dist/decorators/Indent/docs/component.md +10 -10
- package/dist/index.js +86 -86
- package/dist/inputs/Button/Button.stories.svelte +70 -70
- package/dist/inputs/Button/Button.svelte +152 -152
- package/dist/inputs/Button/Button.svelte.d.ts +2 -2
- package/dist/inputs/Button/docs/component.md +17 -17
- package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
- package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
- package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
- package/dist/inputs/ButtonGroup/docs/component.md +23 -23
- package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
- package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
- package/dist/inputs/Checkbox/docs/component.md +14 -14
- package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
- package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
- package/dist/inputs/Checkboxes/docs/component.md +20 -20
- package/dist/inputs/Checkboxes/docs/example.md +16 -16
- package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
- package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
- package/dist/inputs/Dropdown/docs/component.md +22 -22
- package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
- package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
- package/dist/inputs/ErrorPanel/docs/component.md +14 -14
- package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
- package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
- package/dist/inputs/ErrorSummary/docs/component.md +17 -17
- package/dist/inputs/ErrorSummary/docs/example.md +12 -12
- package/dist/inputs/Input/Input.stories.svelte +73 -73
- package/dist/inputs/Input/Input.svelte +151 -151
- package/dist/inputs/Input/docs/component.md +16 -16
- package/dist/inputs/Radios/Radio.svelte +90 -90
- package/dist/inputs/Radios/Radios.stories.svelte +51 -51
- package/dist/inputs/Radios/Radios.svelte +62 -62
- package/dist/inputs/Radios/docs/component.md +24 -24
- package/dist/inputs/Radios/docs/example.md +21 -21
- package/dist/inputs/Select/Select.stories.svelte +63 -63
- package/dist/inputs/Select/Select.svelte +326 -326
- package/dist/inputs/Select/docs/component.md +27 -27
- package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
- package/dist/inputs/Textarea/Textarea.svelte +113 -113
- package/dist/inputs/Textarea/docs/component.md +16 -16
- package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
- package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
- package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
- package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
- package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
- package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
- package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
- package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
- package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
- package/dist/inputs/Toolbar/docs/component.md +101 -101
- package/dist/intro.mdx +66 -66
- package/dist/js/menuOptions.js +14 -14
- package/dist/js/utils.js +133 -133
- package/dist/js/withParams.js +43 -43
- package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
- package/dist/layout/Accordion/Accordion.svelte +55 -55
- package/dist/layout/Accordion/AccordionItem.svelte +51 -51
- package/dist/layout/Accordion/accordion.js +64 -64
- package/dist/layout/Accordion/details.js +83 -83
- package/dist/layout/Accordion/docs/component.md +19 -19
- package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
- package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
- package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
- package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
- package/dist/layout/BackLink/BackLink.svelte +30 -30
- package/dist/layout/BackLink/docs/component.md +12 -12
- package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
- package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
- package/dist/layout/Breadcrumb/docs/component.md +15 -15
- package/dist/layout/Card/Card.stories.svelte +39 -39
- package/dist/layout/Card/Card.svelte +127 -127
- package/dist/layout/Card/docs/component.md +14 -14
- package/dist/layout/Card/docs/eg-images.md +27 -27
- package/dist/layout/Card/docs/eg-links.md +12 -12
- package/dist/layout/Card/docs/eg-spans.md +12 -12
- package/dist/layout/Contents/Contents.stories.svelte +27 -27
- package/dist/layout/Contents/Contents.svelte +51 -51
- package/dist/layout/Contents/docs/component.md +18 -18
- package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
- package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
- package/dist/layout/DescriptionList/docs/component.md +18 -18
- package/dist/layout/Details/Details.stories.svelte +32 -32
- package/dist/layout/Details/Details.svelte +75 -75
- package/dist/layout/Details/docs/component.md +14 -14
- package/dist/layout/DocumentList/Document.svelte +103 -103
- package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
- package/dist/layout/DocumentList/DocumentList.svelte +33 -33
- package/dist/layout/DocumentList/docs/component.md +28 -28
- package/dist/layout/DocumentList/docs/example.md +23 -23
- package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
- package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
- package/dist/layout/ErrorPage/docs/component.md +13 -13
- package/dist/layout/Footer/Footer.stories.svelte +24 -24
- package/dist/layout/Footer/Footer.svelte +366 -366
- package/dist/layout/Footer/docs/component.md +10 -10
- package/dist/layout/Grid/Grid.stories.svelte +50 -50
- package/dist/layout/Grid/Grid.svelte +117 -117
- package/dist/layout/Grid/GridCell.svelte +65 -65
- package/dist/layout/Grid/docs/component.md +14 -14
- package/dist/layout/Header/Header.stories.svelte +26 -26
- package/dist/layout/Header/Header.svelte +875 -875
- package/dist/layout/Header/docs/component.md +11 -11
- package/dist/layout/Hero/Hero.stories.svelte +79 -79
- package/dist/layout/Hero/Hero.svelte +364 -364
- package/dist/layout/Hero/docs/component.md +14 -14
- package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
- package/dist/layout/Highlight/Highlight.svelte +77 -77
- package/dist/layout/Highlight/docs/component.md +12 -12
- package/dist/layout/Image/Image.stories.svelte +23 -23
- package/dist/layout/Image/Image.svelte +29 -29
- package/dist/layout/Image/docs/component.md +15 -15
- package/dist/layout/List/Li.svelte +3 -3
- package/dist/layout/List/List.stories.svelte +40 -40
- package/dist/layout/List/List.svelte +46 -46
- package/dist/layout/List/docs/component.md +14 -14
- package/dist/layout/List/docs/example.md +12 -12
- package/dist/layout/NavSections/NavSection.svelte +90 -90
- package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
- package/dist/layout/NavSections/NavSections.svelte +160 -160
- package/dist/layout/NavSections/docs/component.md +25 -25
- package/dist/layout/Notice/Notice.stories.svelte +61 -61
- package/dist/layout/Notice/Notice.svelte +56 -56
- package/dist/layout/Notice/docs/component.md +14 -14
- package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
- package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
- package/dist/layout/PhaseBanner/docs/component.md +14 -14
- package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
- package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
- package/dist/layout/RelatedContent/docs/component.md +16 -16
- package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
- package/dist/layout/Scroller/Scroller.svelte +368 -368
- package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
- package/dist/layout/Scroller/docs/component.md +39 -39
- package/dist/layout/Section/Section.stories.svelte +33 -33
- package/dist/layout/Section/Section.svelte +60 -60
- package/dist/layout/Section/docs/component.md +12 -12
- package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
- package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
- package/dist/layout/ShareButtons/docs/component.md +14 -14
- package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
- package/dist/layout/SkipLink/SkipLink.svelte +9 -9
- package/dist/layout/SkipLink/docs/component.md +11 -11
- package/dist/layout/Summary/Summary.stories.svelte +21 -21
- package/dist/layout/Summary/Summary.svelte +60 -60
- package/dist/layout/Summary/docs/component.md +17 -17
- package/dist/layout/Tabs/Tab.svelte +53 -53
- package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
- package/dist/layout/Tabs/Tabs.svelte +89 -89
- package/dist/layout/Tabs/docs/component.md +16 -16
- package/dist/layout/Tabs/tabs.js +302 -302
- package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
- package/dist/layout/Timeline/Timeline.svelte +17 -17
- package/dist/layout/Timeline/TimelineItem.svelte +14 -14
- package/dist/layout/Timeline/docs/component.md +27 -27
- package/dist/layout/Timeline/docs/example.md +20 -20
- package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
- package/dist/templates/EmbedArticle/docs/component.md +56 -56
- package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
- package/dist/templates/FeatureArticle/docs/component.md +125 -125
- package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
- package/dist/templates/StandardArticle/docs/component.md +76 -76
- package/dist/templates/intro.mdx +18 -18
- package/dist/wrappers/Container/Container.stories.svelte +38 -38
- package/dist/wrappers/Container/Container.svelte +77 -77
- package/dist/wrappers/Container/docs/component.md +12 -12
- package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
- package/dist/wrappers/Embed/Embed.svelte +44 -44
- package/dist/wrappers/Embed/docs/component.md +15 -15
- package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
- package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
- package/dist/wrappers/LazyLoad/docs/component.md +29 -29
- package/dist/wrappers/Main/Main.stories.svelte +24 -24
- package/dist/wrappers/Main/Main.svelte +11 -11
- package/dist/wrappers/Main/docs/component.md +16 -16
- package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
- package/dist/wrappers/Observe/Observe.svelte +40 -40
- package/dist/wrappers/Observe/docs/component.md +22 -22
- package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
- package/dist/wrappers/Theme/Theme.svelte +76 -76
- package/dist/wrappers/Theme/docs/component.md +10 -10
- package/dist/wrappers/Theme/themes.js +70 -70
- 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>
|