@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,184 +1,184 @@
1
- <script lang="ts">
2
- import { onMount, onDestroy, createEventDispatcher, getContext } from "svelte";
3
- import Icon from "./ToolbarIcon.svelte";
4
- import HelpModal from "./HelpModal.svelte";
5
- import { nanoid } from "nanoid";
6
-
7
- // Props for the ToolbarButton
8
- let {
9
- id = nanoid(6),
10
- icon = "",
11
- label = "",
12
- disabled = false,
13
- classes = "",
14
- helpText = null,
15
- selected = false,
16
- custom = false,
17
- hasAriaControls = false,
18
- sticky = false,
19
- transient = false,
20
- disableHelp = false
21
- }: {
22
- id?: string;
23
- icon?: string;
24
- label?: string;
25
- disabled?: boolean;
26
- classes?: string;
27
- helpText?: string | null;
28
- selected?: boolean;
29
- custom?: boolean;
30
- hasAriaControls?: boolean;
31
- sticky?: boolean;
32
- transient?: boolean;
33
- disableHelp?: boolean;
34
- } = $props();
35
-
36
- const dispatch = createEventDispatcher();
37
-
38
- let buttonElement: HTMLElement;
39
-
40
- // Get activeModalId store from context
41
- const activeModalId = getContext("activeModalId");
42
- const currentActiveId = $derived(activeModalId);
43
- const isActive = $derived($currentActiveId === id);
44
-
45
- // Retrieve button registry from context
46
- const { register, unregister } = getContext("buttonIds");
47
-
48
- // Register button on mount
49
- onMount(() => {
50
- register(id);
51
- });
52
-
53
- // Unregister button on destroy
54
- onDestroy(() => {
55
- unregister(id);
56
- });
57
-
58
- // Subscribe to the store to determine if this modal is active
59
- function handleClick() {
60
- if (!disabled) {
61
- if (transient) {
62
- // If it's a transient button, just trigger the action and return
63
- dispatch("click");
64
- return;
65
- }
66
-
67
- dispatch("click");
68
- if ($activeModalId === id && sticky) {
69
- // If it's already active and sticky, keep it selected
70
- return;
71
- }
72
- activeModalId.set(isActive ? null : id); // Toggle the modal
73
- }
74
- }
75
- </script>
76
-
77
- <div class="toolbar-button-wrapper">
78
- {#if custom}
79
- <div on:click={handleClick} bind:this={buttonElement}>
80
- <slot name="custom" />
81
- </div>
82
- {:else}
83
- <button
84
- type="button"
85
- aria-label={label}
86
- class={`toolbar-button ${disabled ? "disabled" : ""} ${
87
- isActive && !transient ? "selected" : ""
88
- } ${classes}`}
89
- on:click={handleClick}
90
- {disabled}
91
- bind:this={buttonElement}
92
- id={`button-${id}`}
93
- aria-controls={hasAriaControls ? `panel-${id}` : undefined}
94
- >
95
- {#if icon}
96
- <Icon type={icon} selected={!transient ? (isActive ? true : false) : false} {disabled} />
97
- {:else}
98
- {label}
99
- {/if}
100
- </button>
101
- {/if}
102
-
103
- {#if isActive}
104
- {#if helpText && !disableHelp}
105
- <HelpModal triggerElement={buttonElement} onClose={() => activeModalId.set(null)}>
106
- <p>{helpText}</p>
107
- </HelpModal>
108
- {:else if !helpText && !disableHelp}
109
- <HelpModal triggerElement={buttonElement} onClose={() => activeModalId.set(null)}>
110
- <slot />
111
- </HelpModal>
112
- {/if}
113
- {/if}
114
- </div>
115
-
116
- <!--
117
-
118
- /* /* Slightly darker gray when clicked */
119
-
120
- /*
121
- button:active {
122
- background-color: #d6d6d6;
123
- }
124
-
125
- button.active {
126
- background-color: #ddd; /* Selected button background */
127
- border: 2px solid #333; /* Active button border */
128
- }
129
-
130
- button:hover:active {
131
- background-color: #ccc; /* Slightly more contrast when active */
132
- }
133
-
134
- button:disabled {
135
- opacity: 0.5;
136
- cursor: not-allowed;
137
- background-color: #f2f2f2;
138
- border: 1px solid #ddd;
139
- }
140
-
141
- button:hover:disabled {
142
- background-color: #f2f2f2; /* Keep it the same so disabled buttons don’t change on hover */
143
- border: 1px solid #ddd;
144
- } */
145
- -->
146
-
147
- <style>
148
- .toolbar-button-wrapper {
149
- position: relative;
150
- }
151
- .toolbar-button {
152
- display: flex;
153
- align-items: center;
154
- justify-content: center;
155
- padding: 0.5rem;
156
- background: none;
157
- border: none;
158
- cursor: pointer;
159
- flex-shrink: 0;
160
- flex-grow: 0;
161
- }
162
-
163
- .toolbar-button.disabled {
164
- /* opacity: 0.5; */
165
- cursor: not-allowed;
166
- }
167
-
168
- .selected {
169
- background: #e9eff4;
170
- border-radius: 8px;
171
- }
172
-
173
- button:hover {
174
- background-color: #f5f5f6;
175
- border-radius: 8px;
176
- }
177
-
178
- button:focus {
179
- outline: 2px solid #fbc900;
180
- outline-offset: 2px;
181
- box-shadow: 0 0 2px 2px #222222;
182
- border-radius: 8px;
183
- }
184
- </style>
1
+ <script lang="ts">
2
+ import { onMount, onDestroy, createEventDispatcher, getContext } from "svelte";
3
+ import Icon from "./ToolbarIcon.svelte";
4
+ import HelpModal from "./HelpModal.svelte";
5
+ import { nanoid } from "nanoid";
6
+
7
+ // Props for the ToolbarButton
8
+ let {
9
+ id = nanoid(6),
10
+ icon = "",
11
+ label = "",
12
+ disabled = false,
13
+ classes = "",
14
+ helpText = null,
15
+ selected = false,
16
+ custom = false,
17
+ hasAriaControls = false,
18
+ sticky = false,
19
+ transient = false,
20
+ disableHelp = false
21
+ }: {
22
+ id?: string;
23
+ icon?: string;
24
+ label?: string;
25
+ disabled?: boolean;
26
+ classes?: string;
27
+ helpText?: string | null;
28
+ selected?: boolean;
29
+ custom?: boolean;
30
+ hasAriaControls?: boolean;
31
+ sticky?: boolean;
32
+ transient?: boolean;
33
+ disableHelp?: boolean;
34
+ } = $props();
35
+
36
+ const dispatch = createEventDispatcher();
37
+
38
+ let buttonElement: HTMLElement;
39
+
40
+ // Get activeModalId store from context
41
+ const activeModalId = getContext("activeModalId");
42
+ const currentActiveId = $derived(activeModalId);
43
+ const isActive = $derived($currentActiveId === id);
44
+
45
+ // Retrieve button registry from context
46
+ const { register, unregister } = getContext("buttonIds");
47
+
48
+ // Register button on mount
49
+ onMount(() => {
50
+ register(id);
51
+ });
52
+
53
+ // Unregister button on destroy
54
+ onDestroy(() => {
55
+ unregister(id);
56
+ });
57
+
58
+ // Subscribe to the store to determine if this modal is active
59
+ function handleClick() {
60
+ if (!disabled) {
61
+ if (transient) {
62
+ // If it's a transient button, just trigger the action and return
63
+ dispatch("click");
64
+ return;
65
+ }
66
+
67
+ dispatch("click");
68
+ if ($activeModalId === id && sticky) {
69
+ // If it's already active and sticky, keep it selected
70
+ return;
71
+ }
72
+ activeModalId.set(isActive ? null : id); // Toggle the modal
73
+ }
74
+ }
75
+ </script>
76
+
77
+ <div class="toolbar-button-wrapper">
78
+ {#if custom}
79
+ <div on:click={handleClick} bind:this={buttonElement}>
80
+ <slot name="custom" />
81
+ </div>
82
+ {:else}
83
+ <button
84
+ type="button"
85
+ aria-label={label}
86
+ class={`toolbar-button ${disabled ? "disabled" : ""} ${
87
+ isActive && !transient ? "selected" : ""
88
+ } ${classes}`}
89
+ on:click={handleClick}
90
+ {disabled}
91
+ bind:this={buttonElement}
92
+ id={`button-${id}`}
93
+ aria-controls={hasAriaControls ? `panel-${id}` : undefined}
94
+ >
95
+ {#if icon}
96
+ <Icon type={icon} selected={!transient ? (isActive ? true : false) : false} {disabled} />
97
+ {:else}
98
+ {label}
99
+ {/if}
100
+ </button>
101
+ {/if}
102
+
103
+ {#if isActive}
104
+ {#if helpText && !disableHelp}
105
+ <HelpModal triggerElement={buttonElement} onClose={() => activeModalId.set(null)}>
106
+ <p>{helpText}</p>
107
+ </HelpModal>
108
+ {:else if !helpText && !disableHelp}
109
+ <HelpModal triggerElement={buttonElement} onClose={() => activeModalId.set(null)}>
110
+ <slot />
111
+ </HelpModal>
112
+ {/if}
113
+ {/if}
114
+ </div>
115
+
116
+ <!--
117
+
118
+ /* /* Slightly darker gray when clicked */
119
+
120
+ /*
121
+ button:active {
122
+ background-color: #d6d6d6;
123
+ }
124
+
125
+ button.active {
126
+ background-color: #ddd; /* Selected button background */
127
+ border: 2px solid #333; /* Active button border */
128
+ }
129
+
130
+ button:hover:active {
131
+ background-color: #ccc; /* Slightly more contrast when active */
132
+ }
133
+
134
+ button:disabled {
135
+ opacity: 0.5;
136
+ cursor: not-allowed;
137
+ background-color: #f2f2f2;
138
+ border: 1px solid #ddd;
139
+ }
140
+
141
+ button:hover:disabled {
142
+ background-color: #f2f2f2; /* Keep it the same so disabled buttons don’t change on hover */
143
+ border: 1px solid #ddd;
144
+ } */
145
+ -->
146
+
147
+ <style>
148
+ .toolbar-button-wrapper {
149
+ position: relative;
150
+ }
151
+ .toolbar-button {
152
+ display: flex;
153
+ align-items: center;
154
+ justify-content: center;
155
+ padding: 0.5rem;
156
+ background: none;
157
+ border: none;
158
+ cursor: pointer;
159
+ flex-shrink: 0;
160
+ flex-grow: 0;
161
+ }
162
+
163
+ .toolbar-button.disabled {
164
+ /* opacity: 0.5; */
165
+ cursor: not-allowed;
166
+ }
167
+
168
+ .selected {
169
+ background: #e9eff4;
170
+ border-radius: 8px;
171
+ }
172
+
173
+ button:hover {
174
+ background-color: #f5f5f6;
175
+ border-radius: 8px;
176
+ }
177
+
178
+ button:focus {
179
+ outline: 2px solid #fbc900;
180
+ outline-offset: 2px;
181
+ box-shadow: 0 0 2px 2px #222222;
182
+ border-radius: 8px;
183
+ }
184
+ </style>
@@ -1,29 +1,29 @@
1
- <script lang="ts">
2
- import { getContext } from "svelte";
3
-
4
- let { classes = "" }: { classes?: string } = $props();
5
-
6
- // Get the orientation store from context
7
- const orientationStore = getContext("orientation");
8
-
9
- // Subscribe to the store to get its value
10
- const orientation = $derived(orientationStore);
11
- </script>
12
-
13
- <div class={`toolbar-divider ${$orientation} ${classes}`} aria-hidden="true"></div>
14
-
15
- <style>
16
- .toolbar-divider {
17
- background-color: #ccc;
18
- }
19
-
20
- .toolbar-divider.horizontal {
21
- width: 1px;
22
- }
23
-
24
- .toolbar-divider.vertical {
25
- width: 100%;
26
- height: 1px;
27
- margin: 0.5rem 0;
28
- }
29
- </style>
1
+ <script lang="ts">
2
+ import { getContext } from "svelte";
3
+
4
+ let { classes = "" }: { classes?: string } = $props();
5
+
6
+ // Get the orientation store from context
7
+ const orientationStore = getContext("orientation");
8
+
9
+ // Subscribe to the store to get its value
10
+ const orientation = $derived(orientationStore);
11
+ </script>
12
+
13
+ <div class={`toolbar-divider ${$orientation} ${classes}`} aria-hidden="true"></div>
14
+
15
+ <style>
16
+ .toolbar-divider {
17
+ background-color: #ccc;
18
+ }
19
+
20
+ .toolbar-divider.horizontal {
21
+ width: 1px;
22
+ }
23
+
24
+ .toolbar-divider.vertical {
25
+ width: 100%;
26
+ height: 1px;
27
+ margin: 0.5rem 0;
28
+ }
29
+ </style>
@@ -1,106 +1,106 @@
1
- <script>
2
- /**
3
- * @typedef {Object} Props
4
- * @property {string} [type]
5
- * @property {boolean} [marginLeft]
6
- * @property {boolean} [marginRight]
7
- * @property {boolean} [selected]
8
- * @property {boolean} [disabled]
9
- */
10
-
11
- /** @type {Props} */
12
- let {
13
- type = "move",
14
- marginLeft = false,
15
- marginRight = false,
16
- selected = false,
17
- disabled = false
18
- } = $props();
19
-
20
- const paths = {
21
- move: {
22
- selected: "M29 16L16 29L3 16L16 3L29 16Z",
23
- d: "M11.293 7.707a1 1 0 0 1 0-1.415l4-4a1 1 0 0 1 1.415 0l4 4a1 1 0 0 1-1.415 1.415L17 5.414V12a1 1 0 0 1-2 0V5.414l-2.293 2.293a1 1 0 0 1-1.415 0m8 16.586L17 26.586V20a1 1 0 0 0-2 0v6.586l-2.293-2.293a1 1 0 1 0-1.415 1.415l4 4a1 1 0 0 0 1.415 0l4-4a1 1 0 0 0-1.415-1.415m10.415-9-4-4a1 1 0 1 0-1.415 1.415L26.586 15H20a1 1 0 0 0 0 2h6.586l-2.293 2.293a1 1 0 1 0 1.415 1.415l4-4a1 1 0 0 0 0-1.415M5.413 17H12a1 1 0 0 0 0-2H5.414l2.293-2.293a1 1 0 1 0-1.415-1.415l-4 4a1 1 0 0 0 0 1.415l4 4a1 1 0 0 0 1.415-1.415z"
24
- },
25
- polygon: {
26
- selected: "M17.5 24L7.5 17V12.5L12.5 8.5L16 9L17.5 7.5L22.5 8.5L25 12.5L21 23L17.5 24Z",
27
- d: "M28.83 6.17a4 4 0 0 0-6.302.845L19 6.053a4 4 0 1 0-7.549 1.793L7.21 11.665a4.01 4.01 0 0 0-5.039.506 4 4 0 0 0 5.361 5.927l8.75 6.42a4 4 0 1 0 5.947-1.837l3.423-9.699q.172.015.345.016a4 4 0 0 0 2.829-6.828zM13.58 4.584a2 2 0 1 1-.433 2.18 2 2 0 0 1 .438-2.18zm-10 11.831a2 2 0 1 1 2.826-2.83 2 2 0 0 1-2.826 2.83m17.831 11a2 2 0 1 1-2.829-2.828 2 2 0 0 1 2.83 2.828m-1.069-5.398a4 4 0 0 0-2.874.886l-8.75-6.42a4.02 4.02 0 0 0-.168-3.332l4.244-3.818a4 4 0 0 0 5.683-1.352L22 8.945a4 4 0 0 0 1.765 3.375zm7.07-11.604a2 2 0 1 1-2.825-2.828 2 2 0 1 1 2.83 2.829z"
28
- },
29
- radius: {},
30
- erase: {
31
- d: "M28.125 10.05 22.95 4.875a3 3 0 0 0-4.242 0L3.874 19.708a3 3 0 0 0 0 4.242l3.758 3.758a1 1 0 0 0 .71.292H27a1 1 0 1 0 0-2H16.413l11.712-11.707a3 3 0 0 0 0-4.243M13.585 26H8.756l-3.465-3.465a1 1 0 0 1 0-1.414L12 14.414 18.586 21zM26.71 12.875 20 19.586 13.414 13l6.711-6.707a1 1 0 0 1 1.415 0l5.172 5.172a1 1 0 0 1 0 1.414z"
32
- },
33
- zoomin: {
34
- selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
35
- d: "M19 14a1 1 0 0 1-1 1h-3v3a1 1 0 0 1-2 0v-3h-3a1 1 0 0 1 0-2h3v-3a1 1 0 0 1 2 0v3h3a1 1 0 0 1 1 1m9.708 14.708a1 1 0 0 1-1.415 0l-6.258-6.26a11.014 11.014 0 1 1 1.414-1.413l6.258 6.258a1 1 0 0 1 0 1.415M14 23a9 9 0 1 0-9-9 9.01 9.01 0 0 0 9 9"
36
- },
37
- zoomout: {
38
- selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
39
- d: "M19 14a1 1 0 0 1-1 1h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 1 1m9.708 14.708a1 1 0 0 1-1.415 0l-6.258-6.26a11.014 11.014 0 1 1 1.414-1.413l6.258 6.258a1 1 0 0 1 0 1.415M14 23a9 9 0 1 0-9-9 9.01 9.01 0 0 0 9 9"
40
- },
41
- undo: {
42
- selected: "M10 5V17L4 11L10 5Z",
43
- d: "M29 18a8.01 8.01 0 0 1-8 8H10a1 1 0 1 1 0-2h11a6 6 0 1 0 0-12H6.414l4.294 4.293a1 1 0 0 1-1.416 1.415l-6-6a1 1 0 0 1 0-1.415l6-6a1 1 0 0 1 1.415 1.415L6.414 10H21a8.01 8.01 0 0 1 8 8"
44
- },
45
- redo: {
46
- selected: "M28 11L22 17V5L28 11Z",
47
- d: "M21.293 16.293 25.586 12H11a6 6 0 1 0 0 12h11a1 1 0 0 1 0 2H11a8 8 0 1 1 0-16h14.586l-4.293-4.292a1.001 1.001 0 0 1 1.415-1.415l6 6a1 1 0 0 1 0 1.415l-6 6a1 1 0 1 1-1.415-1.415"
48
- },
49
- search: {
50
- selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
51
- d: "m28.708 27.293-6.26-6.258a11.014 11.014 0 1 0-1.413 1.414l6.258 6.258a1 1 0 0 0 1.415-1.415M5 14a9 9 0 1 1 9 9 9.01 9.01 0 0 1-9-9"
52
- },
53
- download: {
54
- selected: "M27 6v20H5V6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2",
55
- d: "M28 18v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 1 1 2 0v7h20v-7a1 1 0 0 1 2 0m-12.707.707a1 1 0 0 0 1.415 0l5-5a1 1 0 0 0-1.415-1.415L17 15.587V4a1 1 0 0 0-2 0v11.586l-3.293-3.293a1 1 0 1 0-1.415 1.415z"
56
- },
57
- upload: {
58
- selected: "M27 6v20H5V6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2",
59
- d: "M28 18v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 1 1 2 0v7h20v-7a1 1 0 0 1 2 0M11.708 9.707 15 6.414V18a1 1 0 0 0 2 0V6.414l3.293 3.293a1 1 0 1 0 1.415-1.415l-5-5a1 1 0 0 0-1.415 0l-5 5a1 1 0 0 0 1.415 1.415"
60
- },
61
- help: {
62
- selected: "M28 16a12 12 0 1 1-23.999 0A12 12 0 0 1 28 16",
63
- d: "M17.5 22.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M16 9c-2.758 0-5 2.019-5 4.5v.5a1 1 0 0 0 2 0v-.5c0-1.375 1.346-2.5 3-2.5s3 1.125 3 2.5-1.346 2.5-3 2.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-.09c2.28-.419 4-2.238 4-4.41 0-2.481-2.242-4.5-5-4.5m13 7A13 13 0 1 1 16 3a13.014 13.014 0 0 1 13 13m-2 0a11 11 0 1 0-11 11 11.01 11.01 0 0 0 11-11"
64
- },
65
- bin: {
66
- selected: "M25 7v19a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V7z",
67
- d: "M27 6h-5V5a3 3 0 0 0-3-3h-6a3 3 0 0 0-3 3v1H5a1 1 0 0 0 0 2h1v18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8h1a1 1 0 1 0 0-2M12 5a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v1h-8zm12 21H8V8h16zM14 13v8a1 1 0 0 1-2 0v-8a1 1 0 0 1 2 0m6 0v8a1 1 0 0 1-2 0v-8a1 1 0 0 1 2 0"
68
- }
69
- };
70
- </script>
71
-
72
- {#if paths[type]}
73
- <svg
74
- class="ons-svg-icon ons-svg-icon--m"
75
- class:ons-u-ml-xs={marginLeft}
76
- class:ons-u-mr-xs={marginRight}
77
- class:selected
78
- viewBox="0 0 32 32"
79
- xmlns="http://www.w3.org/2000/svg"
80
- focusable="false"
81
- fill={selected ? "#206095" : disabled ? "#BCBCBD" : "currentColor"}
82
- >
83
- {#if selected}
84
- <path opacity="0.2" d={paths[type].selected}></path>
85
- {/if}
86
- {#if type != "radius"}
87
- <path d={paths[type].d}></path>
88
- {:else if type == "radius"}
89
- <circle
90
- cx="16"
91
- cy="16"
92
- r="12"
93
- stroke="currentColor"
94
- stroke-width="2"
95
- fill={selected ? "#206095" : "none"}
96
- fill-opacity={selected ? "0.2" : "0"}
97
- ></circle>
98
- {/if}
99
- </svg>
100
- {/if}
101
-
102
- <style>
103
- .selected {
104
- fill: #206095;
105
- }
106
- </style>
1
+ <script>
2
+ /**
3
+ * @typedef {Object} Props
4
+ * @property {string} [type]
5
+ * @property {boolean} [marginLeft]
6
+ * @property {boolean} [marginRight]
7
+ * @property {boolean} [selected]
8
+ * @property {boolean} [disabled]
9
+ */
10
+
11
+ /** @type {Props} */
12
+ let {
13
+ type = "move",
14
+ marginLeft = false,
15
+ marginRight = false,
16
+ selected = false,
17
+ disabled = false
18
+ } = $props();
19
+
20
+ const paths = {
21
+ move: {
22
+ selected: "M29 16L16 29L3 16L16 3L29 16Z",
23
+ d: "M11.293 7.707a1 1 0 0 1 0-1.415l4-4a1 1 0 0 1 1.415 0l4 4a1 1 0 0 1-1.415 1.415L17 5.414V12a1 1 0 0 1-2 0V5.414l-2.293 2.293a1 1 0 0 1-1.415 0m8 16.586L17 26.586V20a1 1 0 0 0-2 0v6.586l-2.293-2.293a1 1 0 1 0-1.415 1.415l4 4a1 1 0 0 0 1.415 0l4-4a1 1 0 0 0-1.415-1.415m10.415-9-4-4a1 1 0 1 0-1.415 1.415L26.586 15H20a1 1 0 0 0 0 2h6.586l-2.293 2.293a1 1 0 1 0 1.415 1.415l4-4a1 1 0 0 0 0-1.415M5.413 17H12a1 1 0 0 0 0-2H5.414l2.293-2.293a1 1 0 1 0-1.415-1.415l-4 4a1 1 0 0 0 0 1.415l4 4a1 1 0 0 0 1.415-1.415z"
24
+ },
25
+ polygon: {
26
+ selected: "M17.5 24L7.5 17V12.5L12.5 8.5L16 9L17.5 7.5L22.5 8.5L25 12.5L21 23L17.5 24Z",
27
+ d: "M28.83 6.17a4 4 0 0 0-6.302.845L19 6.053a4 4 0 1 0-7.549 1.793L7.21 11.665a4.01 4.01 0 0 0-5.039.506 4 4 0 0 0 5.361 5.927l8.75 6.42a4 4 0 1 0 5.947-1.837l3.423-9.699q.172.015.345.016a4 4 0 0 0 2.829-6.828zM13.58 4.584a2 2 0 1 1-.433 2.18 2 2 0 0 1 .438-2.18zm-10 11.831a2 2 0 1 1 2.826-2.83 2 2 0 0 1-2.826 2.83m17.831 11a2 2 0 1 1-2.829-2.828 2 2 0 0 1 2.83 2.828m-1.069-5.398a4 4 0 0 0-2.874.886l-8.75-6.42a4.02 4.02 0 0 0-.168-3.332l4.244-3.818a4 4 0 0 0 5.683-1.352L22 8.945a4 4 0 0 0 1.765 3.375zm7.07-11.604a2 2 0 1 1-2.825-2.828 2 2 0 1 1 2.83 2.829z"
28
+ },
29
+ radius: {},
30
+ erase: {
31
+ d: "M28.125 10.05 22.95 4.875a3 3 0 0 0-4.242 0L3.874 19.708a3 3 0 0 0 0 4.242l3.758 3.758a1 1 0 0 0 .71.292H27a1 1 0 1 0 0-2H16.413l11.712-11.707a3 3 0 0 0 0-4.243M13.585 26H8.756l-3.465-3.465a1 1 0 0 1 0-1.414L12 14.414 18.586 21zM26.71 12.875 20 19.586 13.414 13l6.711-6.707a1 1 0 0 1 1.415 0l5.172 5.172a1 1 0 0 1 0 1.414z"
32
+ },
33
+ zoomin: {
34
+ selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
35
+ d: "M19 14a1 1 0 0 1-1 1h-3v3a1 1 0 0 1-2 0v-3h-3a1 1 0 0 1 0-2h3v-3a1 1 0 0 1 2 0v3h3a1 1 0 0 1 1 1m9.708 14.708a1 1 0 0 1-1.415 0l-6.258-6.26a11.014 11.014 0 1 1 1.414-1.413l6.258 6.258a1 1 0 0 1 0 1.415M14 23a9 9 0 1 0-9-9 9.01 9.01 0 0 0 9 9"
36
+ },
37
+ zoomout: {
38
+ selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
39
+ d: "M19 14a1 1 0 0 1-1 1h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 1 1m9.708 14.708a1 1 0 0 1-1.415 0l-6.258-6.26a11.014 11.014 0 1 1 1.414-1.413l6.258 6.258a1 1 0 0 1 0 1.415M14 23a9 9 0 1 0-9-9 9.01 9.01 0 0 0 9 9"
40
+ },
41
+ undo: {
42
+ selected: "M10 5V17L4 11L10 5Z",
43
+ d: "M29 18a8.01 8.01 0 0 1-8 8H10a1 1 0 1 1 0-2h11a6 6 0 1 0 0-12H6.414l4.294 4.293a1 1 0 0 1-1.416 1.415l-6-6a1 1 0 0 1 0-1.415l6-6a1 1 0 0 1 1.415 1.415L6.414 10H21a8.01 8.01 0 0 1 8 8"
44
+ },
45
+ redo: {
46
+ selected: "M28 11L22 17V5L28 11Z",
47
+ d: "M21.293 16.293 25.586 12H11a6 6 0 1 0 0 12h11a1 1 0 0 1 0 2H11a8 8 0 1 1 0-16h14.586l-4.293-4.292a1.001 1.001 0 0 1 1.415-1.415l6 6a1 1 0 0 1 0 1.415l-6 6a1 1 0 1 1-1.415-1.415"
48
+ },
49
+ search: {
50
+ selected: "M24 14a10 10 0 1 1-20 0 10 10 0 0 1 20 0",
51
+ d: "m28.708 27.293-6.26-6.258a11.014 11.014 0 1 0-1.413 1.414l6.258 6.258a1 1 0 0 0 1.415-1.415M5 14a9 9 0 1 1 9 9 9.01 9.01 0 0 1-9-9"
52
+ },
53
+ download: {
54
+ selected: "M27 6v20H5V6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2",
55
+ d: "M28 18v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 1 1 2 0v7h20v-7a1 1 0 0 1 2 0m-12.707.707a1 1 0 0 0 1.415 0l5-5a1 1 0 0 0-1.415-1.415L17 15.587V4a1 1 0 0 0-2 0v11.586l-3.293-3.293a1 1 0 1 0-1.415 1.415z"
56
+ },
57
+ upload: {
58
+ selected: "M27 6v20H5V6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2",
59
+ d: "M28 18v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 1 1 2 0v7h20v-7a1 1 0 0 1 2 0M11.708 9.707 15 6.414V18a1 1 0 0 0 2 0V6.414l3.293 3.293a1 1 0 1 0 1.415-1.415l-5-5a1 1 0 0 0-1.415 0l-5 5a1 1 0 0 0 1.415 1.415"
60
+ },
61
+ help: {
62
+ selected: "M28 16a12 12 0 1 1-23.999 0A12 12 0 0 1 28 16",
63
+ d: "M17.5 22.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M16 9c-2.758 0-5 2.019-5 4.5v.5a1 1 0 0 0 2 0v-.5c0-1.375 1.346-2.5 3-2.5s3 1.125 3 2.5-1.346 2.5-3 2.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-.09c2.28-.419 4-2.238 4-4.41 0-2.481-2.242-4.5-5-4.5m13 7A13 13 0 1 1 16 3a13.014 13.014 0 0 1 13 13m-2 0a11 11 0 1 0-11 11 11.01 11.01 0 0 0 11-11"
64
+ },
65
+ bin: {
66
+ selected: "M25 7v19a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V7z",
67
+ d: "M27 6h-5V5a3 3 0 0 0-3-3h-6a3 3 0 0 0-3 3v1H5a1 1 0 0 0 0 2h1v18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8h1a1 1 0 1 0 0-2M12 5a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v1h-8zm12 21H8V8h16zM14 13v8a1 1 0 0 1-2 0v-8a1 1 0 0 1 2 0m6 0v8a1 1 0 0 1-2 0v-8a1 1 0 0 1 2 0"
68
+ }
69
+ };
70
+ </script>
71
+
72
+ {#if paths[type]}
73
+ <svg
74
+ class="ons-svg-icon ons-svg-icon--m"
75
+ class:ons-u-ml-xs={marginLeft}
76
+ class:ons-u-mr-xs={marginRight}
77
+ class:selected
78
+ viewBox="0 0 32 32"
79
+ xmlns="http://www.w3.org/2000/svg"
80
+ focusable="false"
81
+ fill={selected ? "#206095" : disabled ? "#BCBCBD" : "currentColor"}
82
+ >
83
+ {#if selected}
84
+ <path opacity="0.2" d={paths[type].selected}></path>
85
+ {/if}
86
+ {#if type != "radius"}
87
+ <path d={paths[type].d}></path>
88
+ {:else if type == "radius"}
89
+ <circle
90
+ cx="16"
91
+ cy="16"
92
+ r="12"
93
+ stroke="currentColor"
94
+ stroke-width="2"
95
+ fill={selected ? "#206095" : "none"}
96
+ fill-opacity={selected ? "0.2" : "0"}
97
+ ></circle>
98
+ {/if}
99
+ </svg>
100
+ {/if}
101
+
102
+ <style>
103
+ .selected {
104
+ fill: #206095;
105
+ }
106
+ </style>