@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
package/dist/js/utils.js CHANGED
@@ -1,133 +1,133 @@
1
- import parse from "parse-color";
2
-
3
- const randomString = () => {
4
- return Math.random().toString(16).slice(2, 8);
5
- };
6
-
7
- export const slugify = (str, suffix = false) =>
8
- typeof str === "string"
9
- ? str
10
- .toString()
11
- .normalize("NFD")
12
- .replace(/[\u0300-\u036f]/g, "")
13
- .toLowerCase()
14
- .trim()
15
- .replace(/\s+/g, "-")
16
- .replace(/[^\w-]+/g, "")
17
- .replace(/--+/g, "-")
18
- .concat(suffix ? `-${randomString()}` : "")
19
- : randomString();
20
-
21
- export const isNumeric = (val) => isFinite(val) && val !== null;
22
-
23
- export const validDate = (str) => {
24
- if (!str) return false;
25
- const date = new Date(str);
26
- // @ts-ignore
27
- return !isNaN(date);
28
- };
29
-
30
- export const formatDate = (
31
- str,
32
- locale = "en-GB",
33
- opts = { year: "numeric", month: "long", day: "2-digit" }
34
- ) => {
35
- const date = new Date(str);
36
- // @ts-ignore
37
- return date.toLocaleDateString(locale, opts);
38
- };
39
-
40
- export const format = (val, dp = null) => {
41
- return Number.isInteger(dp)
42
- ? val.toLocaleString("en-GB", {
43
- minimumFractionDigits: dp,
44
- maximumFractionDigits: dp
45
- })
46
- : val.toLocaleString("en-GB");
47
- };
48
-
49
- export const formatter = (dp = null) => {
50
- return Number.isInteger(dp)
51
- ? new Intl.NumberFormat("en-GB", {
52
- minimumFractionDigits: dp,
53
- maximumFractionDigits: dp
54
- }).format
55
- : new Intl.NumberFormat("en-GB").format;
56
- };
57
-
58
- // Functions for natural sorting, regardless of type
59
- // Less performant than d3.ascending and d3.descending, but handles mixed types
60
- const collator = new Intl.Collator("en", { numeric: true });
61
- const isSortable = (a, b) =>
62
- typeof a === typeof b &&
63
- (["number", "string", "boolean"].includes(typeof a) ||
64
- (typeof a.getMonth === "function" && typeof b.getMonth === "function"));
65
-
66
- export const ascending = (a, b) =>
67
- a === b
68
- ? 0
69
- : a == null
70
- ? 1
71
- : b == null
72
- ? -1
73
- : !isSortable(a, b)
74
- ? collator.compare(a, b)
75
- : a < b
76
- ? -1
77
- : a > b
78
- ? 1
79
- : 0;
80
-
81
- export const descending = (a, b) =>
82
- a === b
83
- ? 0
84
- : a == null
85
- ? 1
86
- : b == null
87
- ? -1
88
- : !isSortable(a, b)
89
- ? collator.compare(b, a)
90
- : b < a
91
- ? -1
92
- : b > a
93
- ? 1
94
- : 0;
95
-
96
- export const sleep = (ms = 1000) => new Promise((resolve) => setTimeout(resolve, ms));
97
-
98
- export const contrastColor = (color) => {
99
- if (!color || typeof color !== "string") return "black";
100
- const rgb = parse(color).rgb;
101
- if (rgb) {
102
- const brightness = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
103
- return brightness > 125 ? "black" : "white";
104
- }
105
- return "black";
106
- };
107
-
108
- export const darkenColor = (color, factor = 0.5) => {
109
- if (!color || typeof color !== "string") return color;
110
- const hsl = parse(color).hsl;
111
- if (hsl) {
112
- hsl[2] = hsl[2] * factor;
113
- return `hsl(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%)`;
114
- }
115
- return color;
116
- };
117
-
118
- export const lipsum = (sentences = 4, offset = 0) => {
119
- const texts = [
120
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
121
- "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
122
- "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
123
- "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
124
- ];
125
- const passage = [];
126
- for (let i = 0; i < sentences; i++) {
127
- passage.push(texts[(i + offset) % 4]);
128
- }
129
- return passage.join(" ");
130
- };
131
-
132
- export const matchMedia = (query) => window.matchMedia(query);
133
- matchMedia.hasMatchMedia = () => typeof window.matchMedia === "function";
1
+ import parse from "parse-color";
2
+
3
+ const randomString = () => {
4
+ return Math.random().toString(16).slice(2, 8);
5
+ };
6
+
7
+ export const slugify = (str, suffix = false) =>
8
+ typeof str === "string"
9
+ ? str
10
+ .toString()
11
+ .normalize("NFD")
12
+ .replace(/[\u0300-\u036f]/g, "")
13
+ .toLowerCase()
14
+ .trim()
15
+ .replace(/\s+/g, "-")
16
+ .replace(/[^\w-]+/g, "")
17
+ .replace(/--+/g, "-")
18
+ .concat(suffix ? `-${randomString()}` : "")
19
+ : randomString();
20
+
21
+ export const isNumeric = (val) => isFinite(val) && val !== null;
22
+
23
+ export const validDate = (str) => {
24
+ if (!str) return false;
25
+ const date = new Date(str);
26
+ // @ts-ignore
27
+ return !isNaN(date);
28
+ };
29
+
30
+ export const formatDate = (
31
+ str,
32
+ locale = "en-GB",
33
+ opts = { year: "numeric", month: "long", day: "2-digit" }
34
+ ) => {
35
+ const date = new Date(str);
36
+ // @ts-ignore
37
+ return date.toLocaleDateString(locale, opts);
38
+ };
39
+
40
+ export const format = (val, dp = null) => {
41
+ return Number.isInteger(dp)
42
+ ? val.toLocaleString("en-GB", {
43
+ minimumFractionDigits: dp,
44
+ maximumFractionDigits: dp
45
+ })
46
+ : val.toLocaleString("en-GB");
47
+ };
48
+
49
+ export const formatter = (dp = null) => {
50
+ return Number.isInteger(dp)
51
+ ? new Intl.NumberFormat("en-GB", {
52
+ minimumFractionDigits: dp,
53
+ maximumFractionDigits: dp
54
+ }).format
55
+ : new Intl.NumberFormat("en-GB").format;
56
+ };
57
+
58
+ // Functions for natural sorting, regardless of type
59
+ // Less performant than d3.ascending and d3.descending, but handles mixed types
60
+ const collator = new Intl.Collator("en", { numeric: true });
61
+ const isSortable = (a, b) =>
62
+ typeof a === typeof b &&
63
+ (["number", "string", "boolean"].includes(typeof a) ||
64
+ (typeof a.getMonth === "function" && typeof b.getMonth === "function"));
65
+
66
+ export const ascending = (a, b) =>
67
+ a === b
68
+ ? 0
69
+ : a == null
70
+ ? 1
71
+ : b == null
72
+ ? -1
73
+ : !isSortable(a, b)
74
+ ? collator.compare(a, b)
75
+ : a < b
76
+ ? -1
77
+ : a > b
78
+ ? 1
79
+ : 0;
80
+
81
+ export const descending = (a, b) =>
82
+ a === b
83
+ ? 0
84
+ : a == null
85
+ ? 1
86
+ : b == null
87
+ ? -1
88
+ : !isSortable(a, b)
89
+ ? collator.compare(b, a)
90
+ : b < a
91
+ ? -1
92
+ : b > a
93
+ ? 1
94
+ : 0;
95
+
96
+ export const sleep = (ms = 1000) => new Promise((resolve) => setTimeout(resolve, ms));
97
+
98
+ export const contrastColor = (color) => {
99
+ if (!color || typeof color !== "string") return "black";
100
+ const rgb = parse(color).rgb;
101
+ if (rgb) {
102
+ const brightness = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
103
+ return brightness > 125 ? "black" : "white";
104
+ }
105
+ return "black";
106
+ };
107
+
108
+ export const darkenColor = (color, factor = 0.5) => {
109
+ if (!color || typeof color !== "string") return color;
110
+ const hsl = parse(color).hsl;
111
+ if (hsl) {
112
+ hsl[2] = hsl[2] * factor;
113
+ return `hsl(${hsl[0]}, ${hsl[1]}%, ${hsl[2]}%)`;
114
+ }
115
+ return color;
116
+ };
117
+
118
+ export const lipsum = (sentences = 4, offset = 0) => {
119
+ const texts = [
120
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
121
+ "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
122
+ "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
123
+ "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
124
+ ];
125
+ const passage = [];
126
+ for (let i = 0; i < sentences; i++) {
127
+ passage.push(texts[(i + offset) % 4]);
128
+ }
129
+ return passage.join(" ");
130
+ };
131
+
132
+ export const matchMedia = (query) => window.matchMedia(query);
133
+ matchMedia.hasMatchMedia = () => typeof window.matchMedia === "function";
@@ -1,43 +1,43 @@
1
- /**
2
- * Use custom source code in the "Show code" pull down.
3
- * @param {object} source Source code object, where key is the language of the source code and value is the code string.
4
- * @param {object} otherOptions Other props object options, allowing chaining with other methods like withStoryDocs
5
- * @returns props object including parameters
6
- */
7
- export const withSource = (source, otherOptions = {}) => {
8
- const language = Object.keys(source)[0];
9
- const code = source[language];
10
- const docs = {
11
- ...otherOptions?.parameters?.docs,
12
- source: { code, language }
13
- };
14
- return { docs };
15
- };
16
-
17
- /**
18
- * Add custom documentation to a story.
19
- * @param {string} storyDocs Markdown string of docs
20
- * @param {object} otherOptions Other props object options, allowing chaining with other methods like withSource
21
- * @returns props object including parameters
22
- */
23
- export const withStoryDocs = (storyDocs, otherOptions = {}) => {
24
- const docs = {
25
- ...otherOptions?.parameters?.docs,
26
- description: { story: storyDocs }
27
- };
28
- return { docs };
29
- };
30
-
31
- /**
32
- * Add custom documentation to the top of the component docs page.
33
- * @param {string} componentDocs Markdown string of docs
34
- * @param {object} otherOptions Other props object options, allowing chaining with other methods like withSource
35
- * @returns props object including parameters
36
- */
37
- export const withComponentDocs = (componentDocs, otherOptions = {}) => {
38
- const docs = {
39
- ...otherOptions?.parameters?.docs,
40
- description: { component: componentDocs }
41
- };
42
- return { docs };
43
- };
1
+ /**
2
+ * Use custom source code in the "Show code" pull down.
3
+ * @param {object} source Source code object, where key is the language of the source code and value is the code string.
4
+ * @param {object} otherOptions Other props object options, allowing chaining with other methods like withStoryDocs
5
+ * @returns props object including parameters
6
+ */
7
+ export const withSource = (source, otherOptions = {}) => {
8
+ const language = Object.keys(source)[0];
9
+ const code = source[language];
10
+ const docs = {
11
+ ...otherOptions?.parameters?.docs,
12
+ source: { code, language }
13
+ };
14
+ return { docs };
15
+ };
16
+
17
+ /**
18
+ * Add custom documentation to a story.
19
+ * @param {string} storyDocs Markdown string of docs
20
+ * @param {object} otherOptions Other props object options, allowing chaining with other methods like withSource
21
+ * @returns props object including parameters
22
+ */
23
+ export const withStoryDocs = (storyDocs, otherOptions = {}) => {
24
+ const docs = {
25
+ ...otherOptions?.parameters?.docs,
26
+ description: { story: storyDocs }
27
+ };
28
+ return { docs };
29
+ };
30
+
31
+ /**
32
+ * Add custom documentation to the top of the component docs page.
33
+ * @param {string} componentDocs Markdown string of docs
34
+ * @param {object} otherOptions Other props object options, allowing chaining with other methods like withSource
35
+ * @returns props object including parameters
36
+ */
37
+ export const withComponentDocs = (componentDocs, otherOptions = {}) => {
38
+ const docs = {
39
+ ...otherOptions?.parameters?.docs,
40
+ description: { component: componentDocs }
41
+ };
42
+ return { docs };
43
+ };
@@ -1,30 +1,30 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs } from "../../js/withParams.js";
4
- import Accordion from "./Accordion.svelte";
5
- import AccordionItem from "./AccordionItem.svelte";
6
- import componentDocs from "./docs/component.md?raw";
7
-
8
- const { Story } = defineMeta({
9
- title: "Layout/Accordion",
10
- component: Accordion,
11
- tags: ["autodocs"],
12
- argTypes: {},
13
- parameters: withComponentDocs(componentDocs)
14
- });
15
- </script>
16
-
17
- {#snippet template(args)}
18
- <Accordion {...args}>
19
- <AccordionItem title="First item">
20
- <p>Contents of first item.</p>
21
- </AccordionItem>
22
- <AccordionItem title="Second item">
23
- <p>Contents of second item.</p>
24
- </AccordionItem>
25
- </Accordion>
26
- {/snippet}
27
-
28
- <Story name="Default" args={{}} {template} />
29
-
30
- <Story name="With 'show all' toggle" args={{ showToggle: true }} {template} />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import Accordion from "./Accordion.svelte";
5
+ import AccordionItem from "./AccordionItem.svelte";
6
+ import componentDocs from "./docs/component.md?raw";
7
+
8
+ const { Story } = defineMeta({
9
+ title: "Layout/Accordion",
10
+ component: Accordion,
11
+ tags: ["autodocs"],
12
+ argTypes: {},
13
+ parameters: withComponentDocs(componentDocs)
14
+ });
15
+ </script>
16
+
17
+ {#snippet template(args)}
18
+ <Accordion {...args}>
19
+ <AccordionItem title="First item">
20
+ <p>Contents of first item.</p>
21
+ </AccordionItem>
22
+ <AccordionItem title="Second item">
23
+ <p>Contents of second item.</p>
24
+ </AccordionItem>
25
+ </Accordion>
26
+ {/snippet}
27
+
28
+ <Story name="Default" args={{}} {template} />
29
+
30
+ <Story name="With 'show all' toggle" args={{ showToggle: true }} {template} />
@@ -1,55 +1,55 @@
1
- <script>
2
- import { onMount, setContext } from "svelte";
3
- import Accordion from "./accordion.js";
4
- import Details from "./details.js";
5
- import { slugify, sleep } from "../../js/utils.js";
6
-
7
- /**
8
- * Optional: Set the unique ID of the accordion
9
- * @type {string}
10
- */
11
- export let id = slugify();
12
- /**
13
- * Optional: Set an additional CSS class for the component
14
- * @type {string|null}
15
- */
16
- export let cls = null;
17
- /**
18
- * Option to include a "show all" toggle above the accordion
19
- * @type {boolean}
20
- */
21
- export let showToggle = false;
22
-
23
- let el, buttonEl;
24
-
25
- setContext("dataGroup", id);
26
-
27
- onMount(async () => {
28
- await sleep(0);
29
- const detailsComponents = [...el.querySelectorAll(".ons-js-details")];
30
- const detailsEls = detailsComponents.map((element) => new Details(element));
31
- new Accordion(buttonEl, detailsEls);
32
- });
33
- </script>
34
-
35
- <div {id} class="ons-accordion {cls}" bind:this={el}>
36
- <button
37
- type="button"
38
- class="ons-btn ons-accordion__toggle-all ons-u-mb-s ons-u-d-no ons-btn--secondary ons-btn--small"
39
- class:hide-toggle={!showToggle}
40
- data-close-all="Hide all"
41
- data-group={id}
42
- bind:this={buttonEl}
43
- >
44
- <span class="ons-btn__inner ons-accordion__toggle-all-inner"
45
- ><span class="ons-btn__text">Show all</span></span
46
- >
47
- </button>
48
- <slot />
49
- </div>
50
-
51
- <style>
52
- button.hide-toggle {
53
- display: none;
54
- }
55
- </style>
1
+ <script>
2
+ import { onMount, setContext } from "svelte";
3
+ import Accordion from "./accordion.js";
4
+ import Details from "./details.js";
5
+ import { slugify, sleep } from "../../js/utils.js";
6
+
7
+ /**
8
+ * Optional: Set the unique ID of the accordion
9
+ * @type {string}
10
+ */
11
+ export let id = slugify();
12
+ /**
13
+ * Optional: Set an additional CSS class for the component
14
+ * @type {string|null}
15
+ */
16
+ export let cls = null;
17
+ /**
18
+ * Option to include a "show all" toggle above the accordion
19
+ * @type {boolean}
20
+ */
21
+ export let showToggle = false;
22
+
23
+ let el, buttonEl;
24
+
25
+ setContext("dataGroup", id);
26
+
27
+ onMount(async () => {
28
+ await sleep(0);
29
+ const detailsComponents = [...el.querySelectorAll(".ons-js-details")];
30
+ const detailsEls = detailsComponents.map((element) => new Details(element));
31
+ new Accordion(buttonEl, detailsEls);
32
+ });
33
+ </script>
34
+
35
+ <div {id} class="ons-accordion {cls}" bind:this={el}>
36
+ <button
37
+ type="button"
38
+ class="ons-btn ons-accordion__toggle-all ons-u-mb-s ons-u-d-no ons-btn--secondary ons-btn--small"
39
+ class:hide-toggle={!showToggle}
40
+ data-close-all="Hide all"
41
+ data-group={id}
42
+ bind:this={buttonEl}
43
+ >
44
+ <span class="ons-btn__inner ons-accordion__toggle-all-inner"
45
+ ><span class="ons-btn__text">Show all</span></span
46
+ >
47
+ </button>
48
+ <slot />
49
+ </div>
50
+
51
+ <style>
52
+ button.hide-toggle {
53
+ display: none;
54
+ }
55
+ </style>
@@ -1,51 +1,51 @@
1
- <script>
2
- import { getContext } from "svelte";
3
- import { slugify } from "../../js/utils.js";
4
-
5
- /**
6
- * Sets the title of the accordion item
7
- * @type {string|null}
8
- */
9
- export let title = null;
10
- /**
11
- * Sets the unique ID of the accordion item
12
- * @type {string}
13
- */
14
- export let id = slugify(title);
15
- /**
16
- * Set the heading level for the accordion items
17
- * @type {"h2"|"h3"}
18
- */
19
- export let headingTag = "h2";
20
-
21
- const dataGroup = getContext("dataGroup");
22
- </script>
23
-
24
- <div {id} class="ons-details ons-js-details ons-details--accordion" data-group={dataGroup}>
25
- <div class="ons-details__heading ons-js-details-heading" role="button">
26
- {#if headingTag === "h3"}
27
- <h3 class="ons-details__title ons-u-fs-r--b">{title}</h3>
28
- {:else}
29
- <h2 class="ons-details__title ons-u-fs-r--b">{title}</h2>
30
- {/if}
31
- <span class="ons-details__icon">
32
- <svg
33
- class="ons-icon"
34
- viewBox="0 0 8 13"
35
- xmlns="http://www.w3.org/2000/svg"
36
- focusable="false"
37
- fill="currentColor"
38
- role="img"
39
- title="ons-icon-chevron"
40
- >
41
- <path
42
- d="M5.74,14.28l-.57-.56a.5.5,0,0,1,0-.71h0l5-5-5-5a.5.5,0,0,1,0-.71h0l.57-.56a.5.5,0,0,1,.71,0h0l5.93,5.93a.5.5,0,0,1,0,.7L6.45,14.28a.5.5,0,0,1-.71,0Z"
43
- transform="translate(-5.02 -1.59)"
44
- />
45
- </svg></span
46
- >
47
- </div>
48
- <div id="{id}-content" class="ons-details__content ons-js-details-content">
49
- <slot />
50
- </div>
51
- </div>
1
+ <script>
2
+ import { getContext } from "svelte";
3
+ import { slugify } from "../../js/utils.js";
4
+
5
+ /**
6
+ * Sets the title of the accordion item
7
+ * @type {string|null}
8
+ */
9
+ export let title = null;
10
+ /**
11
+ * Sets the unique ID of the accordion item
12
+ * @type {string}
13
+ */
14
+ export let id = slugify(title);
15
+ /**
16
+ * Set the heading level for the accordion items
17
+ * @type {"h2"|"h3"}
18
+ */
19
+ export let headingTag = "h2";
20
+
21
+ const dataGroup = getContext("dataGroup");
22
+ </script>
23
+
24
+ <div {id} class="ons-details ons-js-details ons-details--accordion" data-group={dataGroup}>
25
+ <div class="ons-details__heading ons-js-details-heading" role="button">
26
+ {#if headingTag === "h3"}
27
+ <h3 class="ons-details__title ons-u-fs-r--b">{title}</h3>
28
+ {:else}
29
+ <h2 class="ons-details__title ons-u-fs-r--b">{title}</h2>
30
+ {/if}
31
+ <span class="ons-details__icon">
32
+ <svg
33
+ class="ons-icon"
34
+ viewBox="0 0 8 13"
35
+ xmlns="http://www.w3.org/2000/svg"
36
+ focusable="false"
37
+ fill="currentColor"
38
+ role="img"
39
+ title="ons-icon-chevron"
40
+ >
41
+ <path
42
+ d="M5.74,14.28l-.57-.56a.5.5,0,0,1,0-.71h0l5-5-5-5a.5.5,0,0,1,0-.71h0l.57-.56a.5.5,0,0,1,.71,0h0l5.93,5.93a.5.5,0,0,1,0,.7L6.45,14.28a.5.5,0,0,1-.71,0Z"
43
+ transform="translate(-5.02 -1.59)"
44
+ />
45
+ </svg></span
46
+ >
47
+ </div>
48
+ <div id="{id}-content" class="ons-details__content ons-js-details-content">
49
+ <slot />
50
+ </div>
51
+ </div>