@onsvisual/svelte-components 1.0.44 → 1.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +24 -24
  2. package/dist/css/main.css +513 -2
  3. package/dist/datavis/BarChart/BarChart.stories.svelte +84 -84
  4. package/dist/datavis/BarChart/docs/component.md +19 -19
  5. package/dist/datavis/Chart/Chart.stories.svelte +128 -128
  6. package/dist/datavis/Chart/docs/component.md +31 -31
  7. package/dist/datavis/Chart/docs/example.md +28 -28
  8. package/dist/datavis/ColumnChart/ColumnChart.stories.svelte +84 -84
  9. package/dist/datavis/ColumnChart/docs/component.md +19 -19
  10. package/dist/datavis/DataCard/DataCard.stories.svelte +45 -45
  11. package/dist/datavis/DataCard/DataCard.svelte +70 -70
  12. package/dist/datavis/DataCard/Sparkline.svelte +117 -117
  13. package/dist/datavis/DataCard/docs/component.md +20 -20
  14. package/dist/datavis/DataCard/docs/example.md +25 -25
  15. package/dist/datavis/DotPlotChart/DotPlotChart.stories.svelte +40 -40
  16. package/dist/datavis/DotPlotChart/docs/component.md +19 -19
  17. package/dist/datavis/LineChart/LineChart.stories.svelte +64 -64
  18. package/dist/datavis/LineChart/docs/component.md +31 -31
  19. package/dist/datavis/ScatterChart/ScatterChart.stories.svelte +55 -55
  20. package/dist/datavis/ScatterChart/docs/component.md +53 -53
  21. package/dist/datavis/Table/Table.stories.svelte +48 -48
  22. package/dist/datavis/Table/Table.svelte +161 -161
  23. package/dist/datavis/Table/docs/component.md +20 -20
  24. package/dist/datavis/demo-data/data-scatter.js +40 -40
  25. package/dist/datavis/demo-data/data.js +18 -18
  26. package/dist/datavis/intro.mdx +21 -21
  27. package/dist/decorators/Blockquote/Blockquote.stories.svelte +25 -25
  28. package/dist/decorators/Blockquote/Blockquote.svelte +27 -27
  29. package/dist/decorators/Blockquote/docs/component.md +10 -10
  30. package/dist/decorators/Divider/Divider.stories.svelte +29 -29
  31. package/dist/decorators/Divider/Divider.svelte +52 -52
  32. package/dist/decorators/Divider/docs/component.md +12 -12
  33. package/dist/decorators/Em/Em.stories.svelte +30 -30
  34. package/dist/decorators/Em/Em.svelte +58 -58
  35. package/dist/decorators/Em/docs/component.md +12 -12
  36. package/dist/decorators/Icon/Icon.stories.svelte +27 -27
  37. package/dist/decorators/Icon/Icon.svelte +101 -93
  38. package/dist/decorators/Icon/Icon.svelte.d.ts +2 -2
  39. package/dist/decorators/Icon/docs/component.md +10 -10
  40. package/dist/decorators/Indent/Indent.stories.svelte +22 -22
  41. package/dist/decorators/Indent/Indent.svelte +3 -3
  42. package/dist/decorators/Indent/docs/component.md +10 -10
  43. package/dist/index.js +86 -86
  44. package/dist/inputs/Button/Button.stories.svelte +70 -70
  45. package/dist/inputs/Button/Button.svelte +152 -152
  46. package/dist/inputs/Button/Button.svelte.d.ts +2 -2
  47. package/dist/inputs/Button/docs/component.md +17 -17
  48. package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
  49. package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
  50. package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
  51. package/dist/inputs/ButtonGroup/docs/component.md +23 -23
  52. package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
  53. package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
  54. package/dist/inputs/Checkbox/docs/component.md +14 -14
  55. package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
  56. package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
  57. package/dist/inputs/Checkboxes/docs/component.md +20 -20
  58. package/dist/inputs/Checkboxes/docs/example.md +16 -16
  59. package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
  60. package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
  61. package/dist/inputs/Dropdown/docs/component.md +22 -22
  62. package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
  63. package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
  64. package/dist/inputs/ErrorPanel/docs/component.md +14 -14
  65. package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
  66. package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
  67. package/dist/inputs/ErrorSummary/docs/component.md +17 -17
  68. package/dist/inputs/ErrorSummary/docs/example.md +12 -12
  69. package/dist/inputs/Input/Input.stories.svelte +73 -73
  70. package/dist/inputs/Input/Input.svelte +151 -151
  71. package/dist/inputs/Input/docs/component.md +16 -16
  72. package/dist/inputs/Radios/Radio.svelte +90 -90
  73. package/dist/inputs/Radios/Radios.stories.svelte +51 -51
  74. package/dist/inputs/Radios/Radios.svelte +62 -62
  75. package/dist/inputs/Radios/docs/component.md +24 -24
  76. package/dist/inputs/Radios/docs/example.md +21 -21
  77. package/dist/inputs/Select/Select.stories.svelte +63 -63
  78. package/dist/inputs/Select/Select.svelte +326 -326
  79. package/dist/inputs/Select/docs/component.md +27 -27
  80. package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
  81. package/dist/inputs/Textarea/Textarea.svelte +113 -113
  82. package/dist/inputs/Textarea/docs/component.md +16 -16
  83. package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
  84. package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
  85. package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
  86. package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
  87. package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
  88. package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
  89. package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
  90. package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
  91. package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
  92. package/dist/inputs/Toolbar/docs/component.md +101 -101
  93. package/dist/intro.mdx +66 -66
  94. package/dist/js/menuOptions.js +14 -14
  95. package/dist/js/utils.js +133 -133
  96. package/dist/js/withParams.js +43 -43
  97. package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
  98. package/dist/layout/Accordion/Accordion.svelte +55 -55
  99. package/dist/layout/Accordion/AccordionItem.svelte +51 -51
  100. package/dist/layout/Accordion/accordion.js +64 -64
  101. package/dist/layout/Accordion/details.js +83 -83
  102. package/dist/layout/Accordion/docs/component.md +19 -19
  103. package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
  104. package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
  105. package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
  106. package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
  107. package/dist/layout/BackLink/BackLink.svelte +30 -30
  108. package/dist/layout/BackLink/docs/component.md +12 -12
  109. package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
  110. package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
  111. package/dist/layout/Breadcrumb/docs/component.md +15 -15
  112. package/dist/layout/Card/Card.stories.svelte +39 -39
  113. package/dist/layout/Card/Card.svelte +127 -127
  114. package/dist/layout/Card/docs/component.md +14 -14
  115. package/dist/layout/Card/docs/eg-images.md +27 -27
  116. package/dist/layout/Card/docs/eg-links.md +12 -12
  117. package/dist/layout/Card/docs/eg-spans.md +12 -12
  118. package/dist/layout/Contents/Contents.stories.svelte +27 -27
  119. package/dist/layout/Contents/Contents.svelte +51 -51
  120. package/dist/layout/Contents/docs/component.md +18 -18
  121. package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
  122. package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
  123. package/dist/layout/DescriptionList/docs/component.md +18 -18
  124. package/dist/layout/Details/Details.stories.svelte +32 -32
  125. package/dist/layout/Details/Details.svelte +75 -75
  126. package/dist/layout/Details/docs/component.md +14 -14
  127. package/dist/layout/DocumentList/Document.svelte +103 -103
  128. package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
  129. package/dist/layout/DocumentList/DocumentList.svelte +33 -33
  130. package/dist/layout/DocumentList/docs/component.md +28 -28
  131. package/dist/layout/DocumentList/docs/example.md +23 -23
  132. package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
  133. package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
  134. package/dist/layout/ErrorPage/docs/component.md +13 -13
  135. package/dist/layout/Footer/Footer.stories.svelte +24 -24
  136. package/dist/layout/Footer/Footer.svelte +366 -366
  137. package/dist/layout/Footer/docs/component.md +10 -10
  138. package/dist/layout/Grid/Grid.stories.svelte +50 -50
  139. package/dist/layout/Grid/Grid.svelte +117 -117
  140. package/dist/layout/Grid/GridCell.svelte +65 -65
  141. package/dist/layout/Grid/docs/component.md +14 -14
  142. package/dist/layout/Header/Header.stories.svelte +26 -26
  143. package/dist/layout/Header/Header.svelte +875 -875
  144. package/dist/layout/Header/docs/component.md +11 -11
  145. package/dist/layout/Hero/Hero.stories.svelte +79 -79
  146. package/dist/layout/Hero/Hero.svelte +364 -364
  147. package/dist/layout/Hero/docs/component.md +14 -14
  148. package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
  149. package/dist/layout/Highlight/Highlight.svelte +77 -77
  150. package/dist/layout/Highlight/docs/component.md +12 -12
  151. package/dist/layout/Image/Image.stories.svelte +23 -23
  152. package/dist/layout/Image/Image.svelte +29 -29
  153. package/dist/layout/Image/docs/component.md +15 -15
  154. package/dist/layout/List/Li.svelte +3 -3
  155. package/dist/layout/List/List.stories.svelte +40 -40
  156. package/dist/layout/List/List.svelte +46 -46
  157. package/dist/layout/List/docs/component.md +14 -14
  158. package/dist/layout/List/docs/example.md +12 -12
  159. package/dist/layout/NavSections/NavSection.svelte +90 -90
  160. package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
  161. package/dist/layout/NavSections/NavSections.svelte +160 -160
  162. package/dist/layout/NavSections/docs/component.md +25 -25
  163. package/dist/layout/Notice/Notice.stories.svelte +61 -61
  164. package/dist/layout/Notice/Notice.svelte +56 -56
  165. package/dist/layout/Notice/docs/component.md +14 -14
  166. package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
  167. package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
  168. package/dist/layout/PhaseBanner/docs/component.md +14 -14
  169. package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
  170. package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
  171. package/dist/layout/RelatedContent/docs/component.md +16 -16
  172. package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
  173. package/dist/layout/Scroller/Scroller.svelte +368 -368
  174. package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
  175. package/dist/layout/Scroller/docs/component.md +39 -39
  176. package/dist/layout/Section/Section.stories.svelte +33 -33
  177. package/dist/layout/Section/Section.svelte +60 -60
  178. package/dist/layout/Section/docs/component.md +12 -12
  179. package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
  180. package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
  181. package/dist/layout/ShareButtons/docs/component.md +14 -14
  182. package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
  183. package/dist/layout/SkipLink/SkipLink.svelte +9 -9
  184. package/dist/layout/SkipLink/docs/component.md +11 -11
  185. package/dist/layout/Summary/Summary.stories.svelte +21 -21
  186. package/dist/layout/Summary/Summary.svelte +60 -60
  187. package/dist/layout/Summary/docs/component.md +17 -17
  188. package/dist/layout/Tabs/Tab.svelte +53 -53
  189. package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
  190. package/dist/layout/Tabs/Tabs.svelte +89 -89
  191. package/dist/layout/Tabs/docs/component.md +16 -16
  192. package/dist/layout/Tabs/tabs.js +302 -302
  193. package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
  194. package/dist/layout/Timeline/Timeline.svelte +17 -17
  195. package/dist/layout/Timeline/TimelineItem.svelte +14 -14
  196. package/dist/layout/Timeline/docs/component.md +27 -27
  197. package/dist/layout/Timeline/docs/example.md +20 -20
  198. package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
  199. package/dist/templates/EmbedArticle/docs/component.md +56 -56
  200. package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
  201. package/dist/templates/FeatureArticle/docs/component.md +125 -125
  202. package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
  203. package/dist/templates/StandardArticle/docs/component.md +76 -76
  204. package/dist/templates/intro.mdx +18 -18
  205. package/dist/wrappers/Container/Container.stories.svelte +38 -38
  206. package/dist/wrappers/Container/Container.svelte +77 -77
  207. package/dist/wrappers/Container/docs/component.md +12 -12
  208. package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
  209. package/dist/wrappers/Embed/Embed.svelte +44 -44
  210. package/dist/wrappers/Embed/docs/component.md +15 -15
  211. package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
  212. package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
  213. package/dist/wrappers/LazyLoad/docs/component.md +29 -29
  214. package/dist/wrappers/Main/Main.stories.svelte +24 -24
  215. package/dist/wrappers/Main/Main.svelte +11 -11
  216. package/dist/wrappers/Main/docs/component.md +16 -16
  217. package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
  218. package/dist/wrappers/Observe/Observe.svelte +40 -40
  219. package/dist/wrappers/Observe/docs/component.md +22 -22
  220. package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
  221. package/dist/wrappers/Theme/Theme.svelte +76 -76
  222. package/dist/wrappers/Theme/docs/component.md +10 -10
  223. package/dist/wrappers/Theme/themes.js +70 -70
  224. package/package.json +88 -88
@@ -1,180 +1,180 @@
1
- <script>
2
- import { onMount, onDestroy, getContext, createEventDispatcher } from "svelte";
3
-
4
- const dispatch = createEventDispatcher();
5
-
6
- /**
7
- * ID for input element
8
- * @type {string}
9
- */
10
- export let id;
11
- /**
12
- * Label for input
13
- * @type {string}
14
- */
15
- export let label;
16
- /**
17
- * Optional: Extended description for element
18
- * @type {string|null}
19
- */
20
- export let description = null;
21
- /**
22
- * Binding for checked state of input
23
- * @type {boolean}
24
- */
25
- export let checked = false;
26
- /**
27
- * Option to disable input
28
- * @type {boolean}
29
- */
30
- export let disabled = false;
31
- /**
32
- * Optional: Define the item as an object in the form {id, label, description?}
33
- * @type {object}
34
- */
35
- export let item = { id, label, description, checked, disabled };
36
- /**
37
- * Optional: Name of checkbox group
38
- * @type {string|null}
39
- */
40
- export let groupName = null;
41
- /**
42
- * Binding for checked state of input
43
- * @type {object[]|null}
44
- */
45
- export let group = null;
46
- /**
47
- * Set display mode of checkbox
48
- * @type {"default"|"ghost"}
49
- */
50
- export let variant = "default";
51
- /**
52
- * Compact mode (no border)
53
- * @type {boolean}
54
- */
55
- export let compact = false;
56
- /**
57
- * Optional: Set an additional CSS class for the component
58
- * @type {string|null}
59
- */
60
- export let cls = null;
61
-
62
- const checkboxes = getContext("checkboxes");
63
-
64
- let el;
65
-
66
- function findAncestor(el, cls) {
67
- while ((el = el.parentElement) && !el.classList.contains(cls));
68
- return el;
69
- }
70
-
71
- function updateGroup() {
72
- const groupIndex = {};
73
- for (const g of group) groupIndex[g.id] = g;
74
- const newGroupIds = $checkboxes.filter((c) => c.checked).map((c) => c?.id);
75
- if (newGroupIds.length !== group.length)
76
- group = newGroupIds.map((id) => groupIndex[id] || item);
77
- }
78
-
79
- function doChange(e) {
80
- checked = _checked = item.checked;
81
- if (Array.isArray(group) && Array.isArray($checkboxes)) {
82
- updateGroup();
83
- }
84
- dispatch("change", { item, e });
85
- }
86
-
87
- // Track changes to checked from bind:checked outside component
88
- let _checked = item.checked;
89
- function trackChecked(checked) {
90
- if (_checked !== checked) {
91
- item.checked = _checked = checked;
92
- }
93
- }
94
- $: trackChecked(checked);
95
-
96
- onMount(() => {
97
- if (Array.isArray(group) && Array.isArray($checkboxes)) {
98
- const root = findAncestor(el, "ons-checkboxes__items");
99
- $checkboxes = [...root.getElementsByTagName("input")];
100
- updateGroup();
101
- }
102
- });
103
-
104
- onDestroy(() => {
105
- if (Array.isArray(group) && Array.isArray($checkboxes)) {
106
- $checkboxes = $checkboxes.filter((c) => c.id !== id);
107
- updateGroup();
108
- }
109
- });
110
- </script>
111
-
112
- <span
113
- class="ons-checkboxes__item {cls}"
114
- class:ons-checkboxes__item--ghost={variant === "ghost"}
115
- class:ons-checkboxes__item--no-border={compact}
116
- >
117
- <span class="ons-checkbox" class:ons-checkbox--no-border={compact}>
118
- <input
119
- type="checkbox"
120
- id={item.id}
121
- name={groupName}
122
- value={item}
123
- bind:checked={item.checked}
124
- class="ons-checkbox__input ons-js-checkbox"
125
- disabled={item.disabled}
126
- aria-disabled={item.disabled}
127
- on:change={doChange}
128
- bind:this={el}
129
- />
130
- <label
131
- class="ons-checkbox__label"
132
- class:ons-label--with-description={item.description}
133
- for={item.id}
134
- id="{item.id}-label"
135
- aria-describedby={item.description ? `${item.id}-label-description-hint` : null}
136
- >
137
- {item.label}
138
- {#if item.description}
139
- <span class="ons-label__aria-hidden-description" aria-hidden="true"
140
- ><span class="ons-label__description ons-radio__label--with-description">
141
- {item.description}
142
- </span></span
143
- >
144
- {/if}
145
- </label>
146
- {#if item.description}
147
- <span
148
- class="ons-label__visually-hidden-description ons-u-vh"
149
- id="{item.id}-label-description-hint"
150
- >
151
- {item.description}
152
- </span>
153
- {/if}
154
- </span>
155
- </span>
156
-
157
- <style>
158
- .ons-checkboxes__item--ghost .ons-checkbox__label::before {
159
- background: rgba(0, 0, 0, 0);
160
- border-color: var(--ons-color-text-inverse);
161
- border-width: 2px;
162
- opacity: 60%;
163
- }
164
- .ons-checkboxes__item--ghost .ons-checkbox__input,
165
- .ons-checkboxes__item--ghost .ons-checkbox__input::after {
166
- background: rgba(0, 0, 0, 0);
167
- border-color: var(--ons-color-text-inverse);
168
- }
169
- .ons-checkboxes__item--ghost .ons-checkbox__input:focus + .ons-checkbox__label::before {
170
- box-shadow:
171
- 0 0 0 1px var(--ons-color-input-border),
172
- 0 0 0 4px var(--ons-color-focus);
173
- opacity: 100%;
174
- }
175
- .ons-checkboxes__item--ghost
176
- .ons-checkbox__input:checked:not(:focus)
177
- + .ons-checkbox__label::before {
178
- box-shadow: 0 0 0 1px var(--ons-color-text-inverse);
179
- }
180
- </style>
1
+ <script>
2
+ import { onMount, onDestroy, getContext, createEventDispatcher } from "svelte";
3
+
4
+ const dispatch = createEventDispatcher();
5
+
6
+ /**
7
+ * ID for input element
8
+ * @type {string}
9
+ */
10
+ export let id;
11
+ /**
12
+ * Label for input
13
+ * @type {string}
14
+ */
15
+ export let label;
16
+ /**
17
+ * Optional: Extended description for element
18
+ * @type {string|null}
19
+ */
20
+ export let description = null;
21
+ /**
22
+ * Binding for checked state of input
23
+ * @type {boolean}
24
+ */
25
+ export let checked = false;
26
+ /**
27
+ * Option to disable input
28
+ * @type {boolean}
29
+ */
30
+ export let disabled = false;
31
+ /**
32
+ * Optional: Define the item as an object in the form {id, label, description?}
33
+ * @type {object}
34
+ */
35
+ export let item = { id, label, description, checked, disabled };
36
+ /**
37
+ * Optional: Name of checkbox group
38
+ * @type {string|null}
39
+ */
40
+ export let groupName = null;
41
+ /**
42
+ * Binding for checked state of input
43
+ * @type {object[]|null}
44
+ */
45
+ export let group = null;
46
+ /**
47
+ * Set display mode of checkbox
48
+ * @type {"default"|"ghost"}
49
+ */
50
+ export let variant = "default";
51
+ /**
52
+ * Compact mode (no border)
53
+ * @type {boolean}
54
+ */
55
+ export let compact = false;
56
+ /**
57
+ * Optional: Set an additional CSS class for the component
58
+ * @type {string|null}
59
+ */
60
+ export let cls = null;
61
+
62
+ const checkboxes = getContext("checkboxes");
63
+
64
+ let el;
65
+
66
+ function findAncestor(el, cls) {
67
+ while ((el = el.parentElement) && !el.classList.contains(cls));
68
+ return el;
69
+ }
70
+
71
+ function updateGroup() {
72
+ const groupIndex = {};
73
+ for (const g of group) groupIndex[g.id] = g;
74
+ const newGroupIds = $checkboxes.filter((c) => c.checked).map((c) => c?.id);
75
+ if (newGroupIds.length !== group.length)
76
+ group = newGroupIds.map((id) => groupIndex[id] || item);
77
+ }
78
+
79
+ function doChange(e) {
80
+ checked = _checked = item.checked;
81
+ if (Array.isArray(group) && Array.isArray($checkboxes)) {
82
+ updateGroup();
83
+ }
84
+ dispatch("change", { item, e });
85
+ }
86
+
87
+ // Track changes to checked from bind:checked outside component
88
+ let _checked = item.checked;
89
+ function trackChecked(checked) {
90
+ if (_checked !== checked) {
91
+ item.checked = _checked = checked;
92
+ }
93
+ }
94
+ $: trackChecked(checked);
95
+
96
+ onMount(() => {
97
+ if (Array.isArray(group) && Array.isArray($checkboxes)) {
98
+ const root = findAncestor(el, "ons-checkboxes__items");
99
+ $checkboxes = [...root.getElementsByTagName("input")];
100
+ updateGroup();
101
+ }
102
+ });
103
+
104
+ onDestroy(() => {
105
+ if (Array.isArray(group) && Array.isArray($checkboxes)) {
106
+ $checkboxes = $checkboxes.filter((c) => c.id !== id);
107
+ updateGroup();
108
+ }
109
+ });
110
+ </script>
111
+
112
+ <span
113
+ class="ons-checkboxes__item {cls}"
114
+ class:ons-checkboxes__item--ghost={variant === "ghost"}
115
+ class:ons-checkboxes__item--no-border={compact}
116
+ >
117
+ <span class="ons-checkbox" class:ons-checkbox--no-border={compact}>
118
+ <input
119
+ type="checkbox"
120
+ id={item.id}
121
+ name={groupName}
122
+ value={item}
123
+ bind:checked={item.checked}
124
+ class="ons-checkbox__input ons-js-checkbox"
125
+ disabled={item.disabled}
126
+ aria-disabled={item.disabled}
127
+ on:change={doChange}
128
+ bind:this={el}
129
+ />
130
+ <label
131
+ class="ons-checkbox__label"
132
+ class:ons-label--with-description={item.description}
133
+ for={item.id}
134
+ id="{item.id}-label"
135
+ aria-describedby={item.description ? `${item.id}-label-description-hint` : null}
136
+ >
137
+ {item.label}
138
+ {#if item.description}
139
+ <span class="ons-label__aria-hidden-description" aria-hidden="true"
140
+ ><span class="ons-label__description ons-radio__label--with-description">
141
+ {item.description}
142
+ </span></span
143
+ >
144
+ {/if}
145
+ </label>
146
+ {#if item.description}
147
+ <span
148
+ class="ons-label__visually-hidden-description ons-u-vh"
149
+ id="{item.id}-label-description-hint"
150
+ >
151
+ {item.description}
152
+ </span>
153
+ {/if}
154
+ </span>
155
+ </span>
156
+
157
+ <style>
158
+ .ons-checkboxes__item--ghost .ons-checkbox__label::before {
159
+ background: rgba(0, 0, 0, 0);
160
+ border-color: var(--ons-color-text-inverse);
161
+ border-width: 2px;
162
+ opacity: 60%;
163
+ }
164
+ .ons-checkboxes__item--ghost .ons-checkbox__input,
165
+ .ons-checkboxes__item--ghost .ons-checkbox__input::after {
166
+ background: rgba(0, 0, 0, 0);
167
+ border-color: var(--ons-color-text-inverse);
168
+ }
169
+ .ons-checkboxes__item--ghost .ons-checkbox__input:focus + .ons-checkbox__label::before {
170
+ box-shadow:
171
+ 0 0 0 1px var(--ons-color-input-border),
172
+ 0 0 0 4px var(--ons-color-focus);
173
+ opacity: 100%;
174
+ }
175
+ .ons-checkboxes__item--ghost
176
+ .ons-checkbox__input:checked:not(:focus)
177
+ + .ons-checkbox__label::before {
178
+ box-shadow: 0 0 0 1px var(--ons-color-text-inverse);
179
+ }
180
+ </style>
@@ -1,14 +1,14 @@
1
- A checkbox element with various styling and labelling options. Its "checked" attribute can be bound to a Svelte boolean (true/false) variable.
2
-
3
- Based on [this ONS Design System component](https://service-manual.ons.gov.uk/design-system/components/checkboxes).
4
-
5
- <!-- prettier-ignore -->
6
- ```html
7
- <script>
8
- import { Checkbox } from "@onsvisual/svelte-components";
9
-
10
- let checked = false;
11
- </script>
12
-
13
- <Checkbox id="checkbox" label="Select this" bind:checked />
14
- ```
1
+ A checkbox element with various styling and labelling options. Its "checked" attribute can be bound to a Svelte boolean (true/false) variable.
2
+
3
+ Based on [this ONS Design System component](https://service-manual.ons.gov.uk/design-system/components/checkboxes).
4
+
5
+ <!-- prettier-ignore -->
6
+ ```html
7
+ <script>
8
+ import { Checkbox } from "@onsvisual/svelte-components";
9
+
10
+ let checked = false;
11
+ </script>
12
+
13
+ <Checkbox id="checkbox" label="Select this" bind:checked />
14
+ ```
@@ -1,34 +1,34 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs, withStoryDocs } from "../../js/withParams.js";
4
- import Checkbox from "../Checkbox/Checkbox.svelte";
5
- import Checkboxes from "./Checkboxes.svelte";
6
- import componentDocs from "./docs/component.md?raw";
7
- import exampleDocs from "./docs/example.md?raw";
8
-
9
- const { Story } = defineMeta({
10
- title: "Inputs/Checkboxes",
11
- component: Checkboxes,
12
- tags: ["autodocs"],
13
- argTypes: {},
14
- parameters: withComponentDocs(componentDocs)
15
- });
16
-
17
- const items = [
18
- { id: "ice-cream", label: "Ice cream", checked: true },
19
- { id: "sprinkles", label: "Sprinkles", description: "Highly recommended!", checked: false },
20
- { id: "disabled", label: "Disabled option", checked: false, disabled: true }
21
- ];
22
- </script>
23
-
24
- <Story name="Default" args={{ label: "Select items", items }} />
25
-
26
- <Story name="Compact without label" args={{ items, compact: true }} />
27
-
28
- <Story name="Individually defined checkboxes" asChild parameters={withStoryDocs(exampleDocs)}>
29
- <Checkboxes label="Select items">
30
- <Checkbox id="ice-cream" label="Ice cream" />
31
- <Checkbox id="sprinkles" label="Sprinkles" description="Highly recommended!" />
32
- <Checkbox id="disabled" label="Disabled option" disabled />
33
- </Checkboxes>
34
- </Story>
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs, withStoryDocs } from "../../js/withParams.js";
4
+ import Checkbox from "../Checkbox/Checkbox.svelte";
5
+ import Checkboxes from "./Checkboxes.svelte";
6
+ import componentDocs from "./docs/component.md?raw";
7
+ import exampleDocs from "./docs/example.md?raw";
8
+
9
+ const { Story } = defineMeta({
10
+ title: "Inputs/Checkboxes",
11
+ component: Checkboxes,
12
+ tags: ["autodocs"],
13
+ argTypes: {},
14
+ parameters: withComponentDocs(componentDocs)
15
+ });
16
+
17
+ const items = [
18
+ { id: "ice-cream", label: "Ice cream", checked: true },
19
+ { id: "sprinkles", label: "Sprinkles", description: "Highly recommended!", checked: false },
20
+ { id: "disabled", label: "Disabled option", checked: false, disabled: true }
21
+ ];
22
+ </script>
23
+
24
+ <Story name="Default" args={{ label: "Select items", items }} />
25
+
26
+ <Story name="Compact without label" args={{ items, compact: true }} />
27
+
28
+ <Story name="Individually defined checkboxes" asChild parameters={withStoryDocs(exampleDocs)}>
29
+ <Checkboxes label="Select items">
30
+ <Checkbox id="ice-cream" label="Ice cream" />
31
+ <Checkbox id="sprinkles" label="Sprinkles" description="Highly recommended!" />
32
+ <Checkbox id="disabled" label="Disabled option" disabled />
33
+ </Checkboxes>
34
+ </Story>
@@ -1,62 +1,62 @@
1
- <script>
2
- import { setContext } from "svelte";
3
- import { writable } from "svelte/store";
4
- import Checkbox from "../Checkbox/Checkbox.svelte";
5
-
6
- /**
7
- * Title/legend for parent <fieldset>
8
- * @type {string|null}
9
- */
10
- export let title = null;
11
- /**
12
- * Visually hide the title/legend
13
- * @type {boolean}
14
- */
15
- export let hideTitle = false;
16
- /**
17
- * Descriptive "how to" label for inputs
18
- * @type {string|null}
19
- */
20
- export let label = null;
21
- /** Optional: Define the checkboxes as an array of {id, label, checked, description?}
22
- * @type {object[]|null}
23
- */
24
- export let items = null;
25
- /** Compact mode (no borders)
26
- * @type {boolean}
27
- */
28
- export let compact = false;
29
- /** Binding for selected checkboxes (if checkboxes are defined as "items")
30
- * @type {object[]}
31
- */
32
- export let value = [];
33
- /**
34
- * Optional: Set an additional CSS class for the component
35
- * @type {string|null}
36
- */
37
- export let cls = null;
38
-
39
- const checkboxes = writable([]);
40
- setContext("checkboxes", checkboxes);
41
- </script>
42
-
43
- <fieldset class="ons-fieldset {cls}">
44
- {#if title}
45
- <legend class="ons-fieldset__legend ons-u-mb-no">
46
- <span class="ons-fieldset__legend-title ons-u-pb-no" class:ons-u-vh={hideTitle}>{title}</span>
47
- </legend>
48
- {/if}
49
- <div class="ons-input-items">
50
- {#if label}
51
- <p class="ons-checkboxes__label">{label}</p>
52
- {/if}
53
- <div class="ons-checkboxes__items">
54
- <slot />
55
- {#if Array.isArray(items)}
56
- {#each items as item}
57
- <Checkbox {item} bind:group={value} {compact} on:change />
58
- {/each}
59
- {/if}
60
- </div>
61
- </div>
62
- </fieldset>
1
+ <script>
2
+ import { setContext } from "svelte";
3
+ import { writable } from "svelte/store";
4
+ import Checkbox from "../Checkbox/Checkbox.svelte";
5
+
6
+ /**
7
+ * Title/legend for parent <fieldset>
8
+ * @type {string|null}
9
+ */
10
+ export let title = null;
11
+ /**
12
+ * Visually hide the title/legend
13
+ * @type {boolean}
14
+ */
15
+ export let hideTitle = false;
16
+ /**
17
+ * Descriptive "how to" label for inputs
18
+ * @type {string|null}
19
+ */
20
+ export let label = null;
21
+ /** Optional: Define the checkboxes as an array of {id, label, checked, description?}
22
+ * @type {object[]|null}
23
+ */
24
+ export let items = null;
25
+ /** Compact mode (no borders)
26
+ * @type {boolean}
27
+ */
28
+ export let compact = false;
29
+ /** Binding for selected checkboxes (if checkboxes are defined as "items")
30
+ * @type {object[]}
31
+ */
32
+ export let value = [];
33
+ /**
34
+ * Optional: Set an additional CSS class for the component
35
+ * @type {string|null}
36
+ */
37
+ export let cls = null;
38
+
39
+ const checkboxes = writable([]);
40
+ setContext("checkboxes", checkboxes);
41
+ </script>
42
+
43
+ <fieldset class="ons-fieldset {cls}">
44
+ {#if title}
45
+ <legend class="ons-fieldset__legend ons-u-mb-no">
46
+ <span class="ons-fieldset__legend-title ons-u-pb-no" class:ons-u-vh={hideTitle}>{title}</span>
47
+ </legend>
48
+ {/if}
49
+ <div class="ons-input-items">
50
+ {#if label}
51
+ <p class="ons-checkboxes__label">{label}</p>
52
+ {/if}
53
+ <div class="ons-checkboxes__items">
54
+ <slot />
55
+ {#if Array.isArray(items)}
56
+ {#each items as item}
57
+ <Checkbox {item} bind:group={value} {compact} on:change />
58
+ {/each}
59
+ {/if}
60
+ </div>
61
+ </div>
62
+ </fieldset>
@@ -1,20 +1,20 @@
1
- A component for defining a group of [checkbox](/docs/inputs-checkbox--docs) elements, whose checked values can be bound to Svelte variables, or grouped in an array.
2
-
3
- Based on [this ONS Design System component](https://service-manual.ons.gov.uk/design-system/components/checkboxes). (Note: In some use cases, it may be preferable to use raw HTML `<input type="checkbox">` components and style these using CSS.)
4
-
5
- <!-- prettier-ignore -->
6
- ```html
7
- <script>
8
- import { Checkboxes } from "@onsvisual/svelte-components";
9
-
10
- let items = [
11
- { id: "ice-cream", label: "Ice cream", checked: true },
12
- { id: "sprinkles", label: "Sprinkles", description: "Highly recommended!", checked: false },
13
- { id: "disabled", label: "Disabled option", checked: false, disabled: true },
14
- ];
15
-
16
- let selected = []; // An array of the selected items
17
- </script>
18
-
19
- <Checkboxes {items} bind:value={selected} label="Select items">
20
- ```
1
+ A component for defining a group of [checkbox](/docs/inputs-checkbox--docs) elements, whose checked values can be bound to Svelte variables, or grouped in an array.
2
+
3
+ Based on [this ONS Design System component](https://service-manual.ons.gov.uk/design-system/components/checkboxes). (Note: In some use cases, it may be preferable to use raw HTML `<input type="checkbox">` components and style these using CSS.)
4
+
5
+ <!-- prettier-ignore -->
6
+ ```html
7
+ <script>
8
+ import { Checkboxes } from "@onsvisual/svelte-components";
9
+
10
+ let items = [
11
+ { id: "ice-cream", label: "Ice cream", checked: true },
12
+ { id: "sprinkles", label: "Sprinkles", description: "Highly recommended!", checked: false },
13
+ { id: "disabled", label: "Disabled option", checked: false, disabled: true },
14
+ ];
15
+
16
+ let selected = []; // An array of the selected items
17
+ </script>
18
+
19
+ <Checkboxes {items} bind:value={selected} label="Select items">
20
+ ```
@@ -1,16 +1,16 @@
1
- In this example, the child textboxes are defined explicitly.
2
-
3
- <!-- prettier-ignore -->
4
- ```html
5
- <script>
6
- import { Checkbox, Checkboxes } from "@onsvisual/svelte-components";
7
-
8
- let selected = []; // An array of the selected items
9
- </script>
10
-
11
- <Checkboxes label="Select items">
12
- <Checkbox id="ice-cream" label="Ice cream" bind:group={selected} />
13
- <Checkbox id="sprinkles" label="Sprinkles" description="Highly recommended!" bind:group={selected} />
14
- <Checkbox id="disabled" label="Disabled option" bind:group={selected} />
15
- </Checkboxes>
16
- ```
1
+ In this example, the child textboxes are defined explicitly.
2
+
3
+ <!-- prettier-ignore -->
4
+ ```html
5
+ <script>
6
+ import { Checkbox, Checkboxes } from "@onsvisual/svelte-components";
7
+
8
+ let selected = []; // An array of the selected items
9
+ </script>
10
+
11
+ <Checkboxes label="Select items">
12
+ <Checkbox id="ice-cream" label="Ice cream" bind:group={selected} />
13
+ <Checkbox id="sprinkles" label="Sprinkles" description="Highly recommended!" bind:group={selected} />
14
+ <Checkbox id="disabled" label="Disabled option" bind:group={selected} />
15
+ </Checkboxes>
16
+ ```