@onsvisual/svelte-components 1.0.36 → 1.0.38

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 (227) 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 -18
  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 +147 -147
  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 -21
  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/Input.svelte.d.ts +2 -2
  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/Select.svelte.d.ts +2 -2
  80. package/dist/inputs/Select/docs/component.md +27 -27
  81. package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
  82. package/dist/inputs/Textarea/Textarea.svelte +113 -113
  83. package/dist/inputs/Textarea/Textarea.svelte.d.ts +2 -2
  84. package/dist/inputs/Textarea/docs/component.md +16 -16
  85. package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
  86. package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
  87. package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
  88. package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
  89. package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
  90. package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
  91. package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
  92. package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
  93. package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
  94. package/dist/inputs/Toolbar/docs/component.md +101 -99
  95. package/dist/intro.mdx +66 -66
  96. package/dist/js/menuOptions.js +14 -14
  97. package/dist/js/utils.js +133 -133
  98. package/dist/js/withParams.js +43 -43
  99. package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
  100. package/dist/layout/Accordion/Accordion.svelte +55 -55
  101. package/dist/layout/Accordion/AccordionItem.svelte +51 -51
  102. package/dist/layout/Accordion/accordion.js +64 -64
  103. package/dist/layout/Accordion/details.js +83 -83
  104. package/dist/layout/Accordion/docs/component.md +19 -19
  105. package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
  106. package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
  107. package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
  108. package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
  109. package/dist/layout/BackLink/BackLink.svelte +30 -30
  110. package/dist/layout/BackLink/docs/component.md +12 -12
  111. package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
  112. package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
  113. package/dist/layout/Breadcrumb/docs/component.md +15 -15
  114. package/dist/layout/Card/Card.stories.svelte +39 -39
  115. package/dist/layout/Card/Card.svelte +127 -127
  116. package/dist/layout/Card/docs/component.md +14 -14
  117. package/dist/layout/Card/docs/eg-images.md +27 -27
  118. package/dist/layout/Card/docs/eg-links.md +12 -12
  119. package/dist/layout/Card/docs/eg-spans.md +12 -12
  120. package/dist/layout/Contents/Contents.stories.svelte +27 -27
  121. package/dist/layout/Contents/Contents.svelte +51 -51
  122. package/dist/layout/Contents/docs/component.md +18 -18
  123. package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
  124. package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
  125. package/dist/layout/DescriptionList/docs/component.md +18 -18
  126. package/dist/layout/Details/Details.stories.svelte +32 -32
  127. package/dist/layout/Details/Details.svelte +75 -75
  128. package/dist/layout/Details/docs/component.md +14 -14
  129. package/dist/layout/DocumentList/Document.svelte +103 -103
  130. package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
  131. package/dist/layout/DocumentList/DocumentList.svelte +33 -33
  132. package/dist/layout/DocumentList/docs/component.md +28 -28
  133. package/dist/layout/DocumentList/docs/example.md +23 -23
  134. package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
  135. package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
  136. package/dist/layout/ErrorPage/docs/component.md +13 -13
  137. package/dist/layout/Footer/Footer.stories.svelte +24 -24
  138. package/dist/layout/Footer/Footer.svelte +366 -366
  139. package/dist/layout/Footer/docs/component.md +10 -10
  140. package/dist/layout/Grid/Grid.stories.svelte +50 -50
  141. package/dist/layout/Grid/Grid.svelte +117 -117
  142. package/dist/layout/Grid/GridCell.svelte +65 -65
  143. package/dist/layout/Grid/docs/component.md +14 -14
  144. package/dist/layout/Header/Header.stories.svelte +26 -26
  145. package/dist/layout/Header/Header.svelte +875 -875
  146. package/dist/layout/Header/docs/component.md +11 -11
  147. package/dist/layout/Hero/Hero.stories.svelte +79 -79
  148. package/dist/layout/Hero/Hero.svelte +364 -364
  149. package/dist/layout/Hero/docs/component.md +14 -14
  150. package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
  151. package/dist/layout/Highlight/Highlight.svelte +77 -77
  152. package/dist/layout/Highlight/docs/component.md +12 -12
  153. package/dist/layout/Image/Image.stories.svelte +23 -23
  154. package/dist/layout/Image/Image.svelte +29 -29
  155. package/dist/layout/Image/docs/component.md +15 -15
  156. package/dist/layout/List/Li.svelte +3 -3
  157. package/dist/layout/List/List.stories.svelte +40 -40
  158. package/dist/layout/List/List.svelte +46 -46
  159. package/dist/layout/List/docs/component.md +14 -14
  160. package/dist/layout/List/docs/example.md +12 -12
  161. package/dist/layout/NavSections/NavSection.svelte +90 -90
  162. package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
  163. package/dist/layout/NavSections/NavSections.svelte +160 -139
  164. package/dist/layout/NavSections/NavSections.svelte.d.ts +4 -4
  165. package/dist/layout/NavSections/docs/component.md +25 -25
  166. package/dist/layout/Notice/Notice.stories.svelte +61 -61
  167. package/dist/layout/Notice/Notice.svelte +56 -56
  168. package/dist/layout/Notice/docs/component.md +14 -14
  169. package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
  170. package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
  171. package/dist/layout/PhaseBanner/docs/component.md +14 -14
  172. package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
  173. package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
  174. package/dist/layout/RelatedContent/docs/component.md +16 -16
  175. package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
  176. package/dist/layout/Scroller/Scroller.svelte +368 -368
  177. package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
  178. package/dist/layout/Scroller/docs/component.md +39 -39
  179. package/dist/layout/Section/Section.stories.svelte +33 -33
  180. package/dist/layout/Section/Section.svelte +60 -60
  181. package/dist/layout/Section/docs/component.md +12 -12
  182. package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
  183. package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
  184. package/dist/layout/ShareButtons/docs/component.md +14 -14
  185. package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
  186. package/dist/layout/SkipLink/SkipLink.svelte +9 -9
  187. package/dist/layout/SkipLink/docs/component.md +11 -11
  188. package/dist/layout/Summary/Summary.stories.svelte +21 -21
  189. package/dist/layout/Summary/Summary.svelte +60 -60
  190. package/dist/layout/Summary/docs/component.md +17 -17
  191. package/dist/layout/Tabs/Tab.svelte +53 -53
  192. package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
  193. package/dist/layout/Tabs/Tabs.svelte +89 -89
  194. package/dist/layout/Tabs/docs/component.md +16 -16
  195. package/dist/layout/Tabs/tabs.js +302 -302
  196. package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
  197. package/dist/layout/Timeline/Timeline.svelte +17 -17
  198. package/dist/layout/Timeline/TimelineItem.svelte +14 -14
  199. package/dist/layout/Timeline/docs/component.md +27 -27
  200. package/dist/layout/Timeline/docs/example.md +20 -20
  201. package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
  202. package/dist/templates/EmbedArticle/docs/component.md +56 -56
  203. package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
  204. package/dist/templates/FeatureArticle/docs/component.md +125 -125
  205. package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
  206. package/dist/templates/StandardArticle/docs/component.md +76 -76
  207. package/dist/templates/intro.mdx +18 -18
  208. package/dist/wrappers/Container/Container.stories.svelte +38 -38
  209. package/dist/wrappers/Container/Container.svelte +77 -77
  210. package/dist/wrappers/Container/docs/component.md +12 -12
  211. package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
  212. package/dist/wrappers/Embed/Embed.svelte +44 -44
  213. package/dist/wrappers/Embed/docs/component.md +15 -15
  214. package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
  215. package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
  216. package/dist/wrappers/LazyLoad/docs/component.md +29 -29
  217. package/dist/wrappers/Main/Main.stories.svelte +24 -24
  218. package/dist/wrappers/Main/Main.svelte +11 -11
  219. package/dist/wrappers/Main/docs/component.md +16 -16
  220. package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
  221. package/dist/wrappers/Observe/Observe.svelte +35 -35
  222. package/dist/wrappers/Observe/docs/component.md +22 -22
  223. package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
  224. package/dist/wrappers/Theme/Theme.svelte +76 -76
  225. package/dist/wrappers/Theme/docs/component.md +10 -10
  226. package/dist/wrappers/Theme/themes.js +70 -70
  227. package/package.json +89 -89
@@ -1,101 +1,101 @@
1
- <script>
2
- import { getContext } from "svelte";
3
-
4
- let { value = "", label = "" } = $props();
5
-
6
- // Get the parent ButtonGroup context
7
- const buttonGroup = getContext("buttonGroup");
8
- const { groupName, selectedValue } = buttonGroup;
9
-
10
- // Subscribe to selectedValue store
11
- const currentSelected = $derived(selectedValue);
12
- const selected = $derived($currentSelected === value);
13
-
14
- function handleClick() {
15
- selectedValue.set(value); // Update the store
16
- }
17
-
18
- let buttonRef;
19
-
20
- function handleKeydown(event) {
21
- const buttons = Array.from(document.querySelectorAll(`[name="${groupName}"]`));
22
- const currentIndex = buttons.indexOf(buttonRef);
23
-
24
- let newIndex = -1;
25
-
26
- if (event.key === "ArrowRight" || event.key === "ArrowDown") {
27
- newIndex = (currentIndex + 1) % buttons.length;
28
- } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
29
- newIndex = (currentIndex - 1 + buttons.length) % buttons.length;
30
- } else if (event.key === "Enter" || event.key === " ") {
31
- handleClick();
32
- return;
33
- }
34
-
35
- if (newIndex !== -1) {
36
- buttons[newIndex].focus();
37
- }
38
- }
39
- </script>
40
-
41
- <div class="button-container">
42
- <input
43
- type="radio"
44
- id={value}
45
- name={groupName}
46
- {value}
47
- checked={selected}
48
- class="radio-input"
49
- on:click={handleClick}
50
- on:keydown={handleKeydown}
51
- aria-checked={selected}
52
- tabindex="0"
53
- bind:this={buttonRef}
54
- />
55
- <label for={value} class="button" class:selected on:click={handleClick}>
56
- {label || value}
57
- </label>
58
- </div>
59
-
60
- <style>
61
- .button-container {
62
- display: flex;
63
- }
64
-
65
- .radio-input {
66
- position: absolute;
67
- opacity: 0;
68
- width: 0;
69
- height: 0;
70
- }
71
-
72
- .button {
73
- flex-grow: 0;
74
- padding: 4px 8px;
75
- border: none;
76
- background: transparent;
77
- font-size: 14px;
78
- cursor: pointer;
79
- border-radius: 6px;
80
- transition:
81
- background 0.2s ease,
82
- color 0.2s ease;
83
- color: #707071;
84
- text-align: center;
85
- }
86
-
87
- .button:hover {
88
- background-color: #e8e8e8;
89
- }
90
-
91
- .button:focus {
92
- box-shadow: orange 0 0 0 2px;
93
- }
94
-
95
- .button.selected {
96
- background: white;
97
- font-weight: bold;
98
- color: #206095;
99
- box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
100
- }
101
- </style>
1
+ <script>
2
+ import { getContext } from "svelte";
3
+
4
+ let { value = "", label = "" } = $props();
5
+
6
+ // Get the parent ButtonGroup context
7
+ const buttonGroup = getContext("buttonGroup");
8
+ const { groupName, selectedValue } = buttonGroup;
9
+
10
+ // Subscribe to selectedValue store
11
+ const currentSelected = $derived(selectedValue);
12
+ const selected = $derived($currentSelected === value);
13
+
14
+ function handleClick() {
15
+ selectedValue.set(value); // Update the store
16
+ }
17
+
18
+ let buttonRef;
19
+
20
+ function handleKeydown(event) {
21
+ const buttons = Array.from(document.querySelectorAll(`[name="${groupName}"]`));
22
+ const currentIndex = buttons.indexOf(buttonRef);
23
+
24
+ let newIndex = -1;
25
+
26
+ if (event.key === "ArrowRight" || event.key === "ArrowDown") {
27
+ newIndex = (currentIndex + 1) % buttons.length;
28
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
29
+ newIndex = (currentIndex - 1 + buttons.length) % buttons.length;
30
+ } else if (event.key === "Enter" || event.key === " ") {
31
+ handleClick();
32
+ return;
33
+ }
34
+
35
+ if (newIndex !== -1) {
36
+ buttons[newIndex].focus();
37
+ }
38
+ }
39
+ </script>
40
+
41
+ <div class="button-container">
42
+ <input
43
+ type="radio"
44
+ id={value}
45
+ name={groupName}
46
+ {value}
47
+ checked={selected}
48
+ class="radio-input"
49
+ on:click={handleClick}
50
+ on:keydown={handleKeydown}
51
+ aria-checked={selected}
52
+ tabindex="0"
53
+ bind:this={buttonRef}
54
+ />
55
+ <label for={value} class="button" class:selected on:click={handleClick}>
56
+ {label || value}
57
+ </label>
58
+ </div>
59
+
60
+ <style>
61
+ .button-container {
62
+ display: flex;
63
+ }
64
+
65
+ .radio-input {
66
+ position: absolute;
67
+ opacity: 0;
68
+ width: 0;
69
+ height: 0;
70
+ }
71
+
72
+ .button {
73
+ flex-grow: 0;
74
+ padding: 4px 8px;
75
+ border: none;
76
+ background: transparent;
77
+ font-size: 14px;
78
+ cursor: pointer;
79
+ border-radius: 6px;
80
+ transition:
81
+ background 0.2s ease,
82
+ color 0.2s ease;
83
+ color: #707071;
84
+ text-align: center;
85
+ }
86
+
87
+ .button:hover {
88
+ background-color: #e8e8e8;
89
+ }
90
+
91
+ .button:focus {
92
+ box-shadow: orange 0 0 0 2px;
93
+ }
94
+
95
+ .button.selected {
96
+ background: white;
97
+ font-weight: bold;
98
+ color: #206095;
99
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
100
+ }
101
+ </style>
@@ -1,21 +1,23 @@
1
- Radio inputs dressed up as a button group.
2
-
3
- <!-- prettier-ignore -->
4
- ```html
5
- <ButtonGroup name="primary" legend="Choose an option">
6
- <ButtonGroupItem value="1" label="Option 1" />
7
- <ButtonGroupItem value="2" label="Option 2" />
8
- <ButtonGroupItem value="3" label="Option 3" />
9
- </ButtonGroup>
10
- ```
11
-
12
- To see what is selected, bind `value` to a variable e.g.
13
-
14
- <!-- prettier-ignore -->
15
- ```html
16
- let selectedValue;
17
-
18
- <ButtonGroup name="primary" legend="Choose an option" bind:value="{selectedValue}">
19
- ...
20
- </ButtonGroup>
21
- ```
1
+ <span class="ons-warning">This component is experimental</span>
2
+
3
+ Radio inputs dressed up as a button group.
4
+
5
+ <!-- prettier-ignore -->
6
+ ```html
7
+ <ButtonGroup name="primary" legend="Choose an option">
8
+ <ButtonGroupItem value="1" label="Option 1" />
9
+ <ButtonGroupItem value="2" label="Option 2" />
10
+ <ButtonGroupItem value="3" label="Option 3" />
11
+ </ButtonGroup>
12
+ ```
13
+
14
+ To see what is selected, bind `value` to a variable e.g.
15
+
16
+ <!-- prettier-ignore -->
17
+ ```html
18
+ let selectedValue;
19
+
20
+ <ButtonGroup name="primary" legend="Choose an option" bind:value="{selectedValue}">
21
+ ...
22
+ </ButtonGroup>
23
+ ```
@@ -1,34 +1,34 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
- import { withComponentDocs } from "../../js/withParams.js";
4
- import Checkbox from "./Checkbox.svelte";
5
- import componentDocs from "./docs/component.md?raw";
6
-
7
- const { Story } = defineMeta({
8
- title: "Inputs/Checkbox",
9
- component: Checkbox,
10
- tags: ["autodocs"],
11
- argTypes: {},
12
- parameters: withComponentDocs(componentDocs)
13
- });
14
- </script>
15
-
16
- {#snippet template(args)}
17
- <div
18
- style:padding="12px"
19
- style:background={args?.variant === "ghost" ? "var(--ons-color-ocean-blue)" : null}
20
- style:color={args?.variant === "ghost" ? "white" : null}
21
- >
22
- <Checkbox {...args} />
23
- </div>
24
- {/snippet}
25
-
26
- <Story name="Default" args={{ id: "checkbox1", label: "Select this" }} {template} />
27
-
28
- <Story name="Compact" args={{ id: "checkbox2", label: "Select this", compact: true }} {template} />
29
-
30
- <Story
31
- name="Ghost checkbox"
32
- args={{ id: "checkbox3", label: "Select this", variant: "ghost" }}
33
- {template}
34
- />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import Checkbox from "./Checkbox.svelte";
5
+ import componentDocs from "./docs/component.md?raw";
6
+
7
+ const { Story } = defineMeta({
8
+ title: "Inputs/Checkbox",
9
+ component: Checkbox,
10
+ tags: ["autodocs"],
11
+ argTypes: {},
12
+ parameters: withComponentDocs(componentDocs)
13
+ });
14
+ </script>
15
+
16
+ {#snippet template(args)}
17
+ <div
18
+ style:padding="12px"
19
+ style:background={args?.variant === "ghost" ? "var(--ons-color-ocean-blue)" : null}
20
+ style:color={args?.variant === "ghost" ? "white" : null}
21
+ >
22
+ <Checkbox {...args} />
23
+ </div>
24
+ {/snippet}
25
+
26
+ <Story name="Default" args={{ id: "checkbox1", label: "Select this" }} {template} />
27
+
28
+ <Story name="Compact" args={{ id: "checkbox2", label: "Select this", compact: true }} {template} />
29
+
30
+ <Story
31
+ name="Ghost checkbox"
32
+ args={{ id: "checkbox3", label: "Select this", variant: "ghost" }}
33
+ {template}
34
+ />
@@ -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>