@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,234 +1,234 @@
1
- <script lang="ts">
2
- import { getContext } from "svelte";
3
- // import { get, set } from "svelte/store";
4
- import { fly } from "svelte/transition";
5
- import Checkbox from "../Checkbox/Checkbox.svelte";
6
- import Button from "../Button/Button.svelte";
7
-
8
- let {
9
- triggerElement = null,
10
- onClose = () => {}
11
- }: {
12
- triggerElement?: HTMLElement | null;
13
- onClose?: () => void;
14
- } = $props();
15
-
16
- // --- Context ---
17
- const activeModalId = getContext("activeModalId");
18
- const showHelpModals = getContext("showHelpModals");
19
- const { buttonIds } = getContext("buttonIds");
20
-
21
- // --- Derived state from stores ---
22
- const ids = $derived(buttonIds);
23
- const currentActiveId = $derived(activeModalId);
24
- const showHelp = $derived(showHelpModals);
25
-
26
- // --- Local state ---
27
- let modalPosition = $state({ top: 50, left: -5 });
28
- let notchPosition = $state({ left: 17, right: "auto" });
29
- let dontShowMeAgain = $state(false);
30
-
31
- $effect(() => {
32
- if (!triggerElement) return;
33
-
34
- const rect = triggerElement.getBoundingClientRect();
35
-
36
- // Calculate the modal's position
37
- // const spaceBelow = window.innerHeight - rect.bottom;
38
- // const spaceAbove = rect.top;
39
- const spaceRight = window.innerWidth - rect.right;
40
-
41
- let newLeft = window.scrollX - 10;
42
- let newNotchLeft: number | "auto" = 17;
43
- let newNotchRight: number | "auto" = "auto";
44
-
45
- // if (spaceBelow < 200 && spaceAbove > 200) {
46
- // newTop = rect.top + window.scrollY - 10;
47
- // }
48
-
49
- if (spaceRight < 300) {
50
- newLeft = window.scrollX - 325;
51
- newNotchLeft = "auto";
52
- newNotchRight = -350;
53
- }
54
-
55
- // modalPosition.top = newTop;
56
- modalPosition.left = newLeft;
57
- notchPosition.left = newNotchLeft;
58
- notchPosition.right = newNotchRight;
59
- });
60
-
61
- // Update localStorage if "Don't show me again" is checked
62
- function disableHelpModalsPermanently() {
63
- localStorage.setItem("showHelpModals", "false");
64
- sessionStorage.setItem("showHelpModals", "false");
65
- showHelpModals.set(false);
66
- }
67
-
68
- // Hide modals until refresh
69
- function hideHelpModalsUntilRefresh() {
70
- sessionStorage.setItem("showHelpModals", "false");
71
- showHelpModals.set(false);
72
- }
73
-
74
- // Navigate to the next modal
75
- function nextModal() {
76
- const currentIndex = $ids.indexOf($currentActiveId);
77
- if (currentIndex !== -1 && currentIndex < $ids.length - 1) {
78
- activeModalId.set($ids[currentIndex + 1]);
79
- // console.log("Navigating to next modal:", ids[currentIndex + 1]);
80
- }
81
- if (dontShowMeAgain) {
82
- disableHelpModalsPermanently(); // Disable help modals permanently
83
- }
84
- }
85
-
86
- function handleSkip() {
87
- if (dontShowMeAgain) {
88
- disableHelpModalsPermanently(); // Disable help modals permanently
89
- } else {
90
- hideHelpModalsUntilRefresh();
91
- }
92
- }
93
-
94
- // Navigate to the previous modal
95
- function previousModal() {
96
- const currentIndex = $ids.indexOf($currentActiveId);
97
- if (currentIndex > 0) {
98
- activeModalId.set($ids[currentIndex - 1]);
99
- // console.log("Navigating to previous modal:", ids[currentIndex - 1]);
100
- }
101
- if (dontShowMeAgain) {
102
- disableHelpModalsPermanently(); // Disable help modals permanently
103
- }
104
- }
105
-
106
- function handleKeydown(event: KeyboardEvent) {
107
- if (event.key === "Escape") onClose();
108
- }
109
- </script>
110
-
111
- <svelte:window on:keydown={handleKeydown} />
112
- {#if $showHelp}
113
- <div class="help-modal-wrapper" style="top: {modalPosition.top}px; left: {modalPosition.left}px;">
114
- <!-- Notch -->
115
- <div
116
- class="help-modal-notch"
117
- style="left: {notchPosition.left}px;right: {notchPosition.right}px;"
118
- ></div>
119
-
120
- <!-- Modal Content -->
121
- <div class="help-modal" role="dialog" aria-modal="true">
122
- <slot />
123
- <!-- <button class="close-button" on:click="{onClose}" aria-label="Close help">×</button> -->
124
-
125
- <div class="ons-padding-4">
126
- <Checkbox
127
- id="dontShowMeAgain"
128
- label="Don't show me again"
129
- bind:checked={dontShowMeAgain}
130
- compact
131
- />
132
- </div>
133
- <div class="ons-grid-flex ons-grid-flex--between ons-grid-flex-vertical-center">
134
- <button class="btn-link" on:click={handleSkip} aria-label="Skip instructions">Skip</button>
135
- {#if $ids.indexOf($currentActiveId) > 0}
136
- <span style="margin-left:auto; margin-right:10px">
137
- <Button variant="secondary" on:click={previousModal}>Back</Button>
138
- </span>
139
- {/if}
140
-
141
- {#if $ids.indexOf($currentActiveId) != $ids.length - 1}
142
- <Button on:click={nextModal}>Next</Button>
143
- {/if}
144
- {#if $ids.indexOf($currentActiveId) == $ids.length - 1}
145
- <Button on:click={hideHelpModalsUntilRefresh}>Get started</Button>
146
- {/if}
147
- </div>
148
- </div>
149
- </div>
150
- {/if}
151
-
152
- <style>
153
- .help-modal-wrapper {
154
- position: absolute;
155
- z-index: 10;
156
- }
157
-
158
- .help-modal-notch {
159
- position: absolute;
160
- top: -10px;
161
- width: 0;
162
- height: 0;
163
- border-left: 10px solid transparent;
164
- border-right: 10px solid transparent;
165
- border-bottom: 10px solid white;
166
- z-index: 1;
167
- }
168
-
169
- .help-modal {
170
- position: absolute;
171
- flex-direction: column;
172
- justify-content: center;
173
- align-items: flex-start;
174
- padding: 16px;
175
- isolation: isolate;
176
-
177
- width: 360px;
178
-
179
- background: #ffffff;
180
- box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.25);
181
- border-radius: 16px;
182
-
183
- /* Inside auto layout */
184
- flex: none;
185
- order: 2;
186
- flex-grow: 0;
187
- }
188
-
189
- .close-button {
190
- position: absolute;
191
- top: 0.5rem;
192
- right: 0.5rem;
193
- background: none;
194
- border: none;
195
- font-size: 1.25rem;
196
- color: #666;
197
- cursor: pointer;
198
- }
199
-
200
- .close-button:hover {
201
- color: #333;
202
- }
203
-
204
- .ons-padding-4 {
205
- padding-top: var(--4-units, 16px);
206
- padding-bottom: var(--4-units, 16px);
207
- }
208
-
209
- button.btn-link {
210
- line-height: 1.3;
211
- color: var(--link, #206095);
212
- background: none;
213
- margin: 0;
214
- padding: 0;
215
- border: none;
216
- text-decoration: underline;
217
- text-decoration-thickness: 1px;
218
- text-underline-position: under;
219
- }
220
- button.btn-link:hover {
221
- color: var(--link-hover, #003c57) !important;
222
- text-decoration-thickness: 2px;
223
- }
224
- button.btn-link:focus {
225
- background-color: #fbc900 !important;
226
- box-shadow:
227
- 0 -2px #fbc900,
228
- 0 4px #222;
229
- color: #222 !important;
230
- outline: 3px solid transparent;
231
- outline-offset: 1px;
232
- text-decoration: none;
233
- }
234
- </style>
1
+ <script lang="ts">
2
+ import { getContext } from "svelte";
3
+ // import { get, set } from "svelte/store";
4
+ import { fly } from "svelte/transition";
5
+ import Checkbox from "../Checkbox/Checkbox.svelte";
6
+ import Button from "../Button/Button.svelte";
7
+
8
+ let {
9
+ triggerElement = null,
10
+ onClose = () => {}
11
+ }: {
12
+ triggerElement?: HTMLElement | null;
13
+ onClose?: () => void;
14
+ } = $props();
15
+
16
+ // --- Context ---
17
+ const activeModalId = getContext("activeModalId");
18
+ const showHelpModals = getContext("showHelpModals");
19
+ const { buttonIds } = getContext("buttonIds");
20
+
21
+ // --- Derived state from stores ---
22
+ const ids = $derived(buttonIds);
23
+ const currentActiveId = $derived(activeModalId);
24
+ const showHelp = $derived(showHelpModals);
25
+
26
+ // --- Local state ---
27
+ let modalPosition = $state({ top: 50, left: -5 });
28
+ let notchPosition = $state({ left: 17, right: "auto" });
29
+ let dontShowMeAgain = $state(false);
30
+
31
+ $effect(() => {
32
+ if (!triggerElement) return;
33
+
34
+ const rect = triggerElement.getBoundingClientRect();
35
+
36
+ // Calculate the modal's position
37
+ // const spaceBelow = window.innerHeight - rect.bottom;
38
+ // const spaceAbove = rect.top;
39
+ const spaceRight = window.innerWidth - rect.right;
40
+
41
+ let newLeft = window.scrollX - 10;
42
+ let newNotchLeft: number | "auto" = 17;
43
+ let newNotchRight: number | "auto" = "auto";
44
+
45
+ // if (spaceBelow < 200 && spaceAbove > 200) {
46
+ // newTop = rect.top + window.scrollY - 10;
47
+ // }
48
+
49
+ if (spaceRight < 300) {
50
+ newLeft = window.scrollX - 325;
51
+ newNotchLeft = "auto";
52
+ newNotchRight = -350;
53
+ }
54
+
55
+ // modalPosition.top = newTop;
56
+ modalPosition.left = newLeft;
57
+ notchPosition.left = newNotchLeft;
58
+ notchPosition.right = newNotchRight;
59
+ });
60
+
61
+ // Update localStorage if "Don't show me again" is checked
62
+ function disableHelpModalsPermanently() {
63
+ localStorage.setItem("showHelpModals", "false");
64
+ sessionStorage.setItem("showHelpModals", "false");
65
+ showHelpModals.set(false);
66
+ }
67
+
68
+ // Hide modals until refresh
69
+ function hideHelpModalsUntilRefresh() {
70
+ sessionStorage.setItem("showHelpModals", "false");
71
+ showHelpModals.set(false);
72
+ }
73
+
74
+ // Navigate to the next modal
75
+ function nextModal() {
76
+ const currentIndex = $ids.indexOf($currentActiveId);
77
+ if (currentIndex !== -1 && currentIndex < $ids.length - 1) {
78
+ activeModalId.set($ids[currentIndex + 1]);
79
+ // console.log("Navigating to next modal:", ids[currentIndex + 1]);
80
+ }
81
+ if (dontShowMeAgain) {
82
+ disableHelpModalsPermanently(); // Disable help modals permanently
83
+ }
84
+ }
85
+
86
+ function handleSkip() {
87
+ if (dontShowMeAgain) {
88
+ disableHelpModalsPermanently(); // Disable help modals permanently
89
+ } else {
90
+ hideHelpModalsUntilRefresh();
91
+ }
92
+ }
93
+
94
+ // Navigate to the previous modal
95
+ function previousModal() {
96
+ const currentIndex = $ids.indexOf($currentActiveId);
97
+ if (currentIndex > 0) {
98
+ activeModalId.set($ids[currentIndex - 1]);
99
+ // console.log("Navigating to previous modal:", ids[currentIndex - 1]);
100
+ }
101
+ if (dontShowMeAgain) {
102
+ disableHelpModalsPermanently(); // Disable help modals permanently
103
+ }
104
+ }
105
+
106
+ function handleKeydown(event: KeyboardEvent) {
107
+ if (event.key === "Escape") onClose();
108
+ }
109
+ </script>
110
+
111
+ <svelte:window on:keydown={handleKeydown} />
112
+ {#if $showHelp}
113
+ <div class="help-modal-wrapper" style="top: {modalPosition.top}px; left: {modalPosition.left}px;">
114
+ <!-- Notch -->
115
+ <div
116
+ class="help-modal-notch"
117
+ style="left: {notchPosition.left}px;right: {notchPosition.right}px;"
118
+ ></div>
119
+
120
+ <!-- Modal Content -->
121
+ <div class="help-modal" role="dialog" aria-modal="true">
122
+ <slot />
123
+ <!-- <button class="close-button" on:click="{onClose}" aria-label="Close help">×</button> -->
124
+
125
+ <div class="ons-padding-4">
126
+ <Checkbox
127
+ id="dontShowMeAgain"
128
+ label="Don't show me again"
129
+ bind:checked={dontShowMeAgain}
130
+ compact
131
+ />
132
+ </div>
133
+ <div class="ons-grid-flex ons-grid-flex--between ons-grid-flex-vertical-center">
134
+ <button class="btn-link" on:click={handleSkip} aria-label="Skip instructions">Skip</button>
135
+ {#if $ids.indexOf($currentActiveId) > 0}
136
+ <span style="margin-left:auto; margin-right:10px">
137
+ <Button variant="secondary" on:click={previousModal}>Back</Button>
138
+ </span>
139
+ {/if}
140
+
141
+ {#if $ids.indexOf($currentActiveId) != $ids.length - 1}
142
+ <Button on:click={nextModal}>Next</Button>
143
+ {/if}
144
+ {#if $ids.indexOf($currentActiveId) == $ids.length - 1}
145
+ <Button on:click={hideHelpModalsUntilRefresh}>Get started</Button>
146
+ {/if}
147
+ </div>
148
+ </div>
149
+ </div>
150
+ {/if}
151
+
152
+ <style>
153
+ .help-modal-wrapper {
154
+ position: absolute;
155
+ z-index: 10;
156
+ }
157
+
158
+ .help-modal-notch {
159
+ position: absolute;
160
+ top: -10px;
161
+ width: 0;
162
+ height: 0;
163
+ border-left: 10px solid transparent;
164
+ border-right: 10px solid transparent;
165
+ border-bottom: 10px solid white;
166
+ z-index: 1;
167
+ }
168
+
169
+ .help-modal {
170
+ position: absolute;
171
+ flex-direction: column;
172
+ justify-content: center;
173
+ align-items: flex-start;
174
+ padding: 16px;
175
+ isolation: isolate;
176
+
177
+ width: 360px;
178
+
179
+ background: #ffffff;
180
+ box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.25);
181
+ border-radius: 16px;
182
+
183
+ /* Inside auto layout */
184
+ flex: none;
185
+ order: 2;
186
+ flex-grow: 0;
187
+ }
188
+
189
+ .close-button {
190
+ position: absolute;
191
+ top: 0.5rem;
192
+ right: 0.5rem;
193
+ background: none;
194
+ border: none;
195
+ font-size: 1.25rem;
196
+ color: #666;
197
+ cursor: pointer;
198
+ }
199
+
200
+ .close-button:hover {
201
+ color: #333;
202
+ }
203
+
204
+ .ons-padding-4 {
205
+ padding-top: var(--4-units, 16px);
206
+ padding-bottom: var(--4-units, 16px);
207
+ }
208
+
209
+ button.btn-link {
210
+ line-height: 1.3;
211
+ color: var(--link, #206095);
212
+ background: none;
213
+ margin: 0;
214
+ padding: 0;
215
+ border: none;
216
+ text-decoration: underline;
217
+ text-decoration-thickness: 1px;
218
+ text-underline-position: under;
219
+ }
220
+ button.btn-link:hover {
221
+ color: var(--link-hover, #003c57) !important;
222
+ text-decoration-thickness: 2px;
223
+ }
224
+ button.btn-link:focus {
225
+ background-color: #fbc900 !important;
226
+ box-shadow:
227
+ 0 -2px #fbc900,
228
+ 0 4px #222;
229
+ color: #222 !important;
230
+ outline: 3px solid transparent;
231
+ outline-offset: 1px;
232
+ text-decoration: none;
233
+ }
234
+ </style>
@@ -1,23 +1,23 @@
1
- <script>
2
- import { getContext } from "svelte";
3
- const activeModalId = getContext("activeModalId");
4
- const showHelpModals = getContext("showHelpModals");
5
-
6
- const currentModalId = $derived(activeModalId);
7
- const showHelp = $derived(showHelpModals);
8
-
9
- let { id = "" } = $props();
10
- </script>
11
-
12
- {#if currentModalId === id && !showHelp}
13
- <div class="tool-control" role="tabpanel" aria-labelledby={`button-${id}`} id={`panel-${id}`}>
14
- <slot />
15
- </div>
16
- {/if}
17
-
18
- <style>
19
- .tool-control {
20
- max-width: 371px;
21
- padding: 8px;
22
- }
23
- </style>
1
+ <script>
2
+ import { getContext } from "svelte";
3
+ const activeModalId = getContext("activeModalId");
4
+ const showHelpModals = getContext("showHelpModals");
5
+
6
+ const currentModalId = $derived(activeModalId);
7
+ const showHelp = $derived(showHelpModals);
8
+
9
+ let { id = "" } = $props();
10
+ </script>
11
+
12
+ {#if currentModalId === id && !showHelp}
13
+ <div class="tool-control" role="tabpanel" aria-labelledby={`button-${id}`} id={`panel-${id}`}>
14
+ <slot />
15
+ </div>
16
+ {/if}
17
+
18
+ <style>
19
+ .tool-control {
20
+ max-width: 371px;
21
+ padding: 8px;
22
+ }
23
+ </style>
@@ -1,9 +1,9 @@
1
- <script>
2
- import { getContext } from "svelte";
3
- const activeModalId = getContext("activeModalId");
4
- const id = $derived(activeModalId);
5
- </script>
6
-
7
- {#if id}
8
- <slot />
9
- {/if}
1
+ <script>
2
+ import { getContext } from "svelte";
3
+ const activeModalId = getContext("activeModalId");
4
+ const id = $derived(activeModalId);
5
+ </script>
6
+
7
+ {#if id}
8
+ <slot />
9
+ {/if}