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