utopia-ui 3.0.83 → 3.0.84

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.
package/dist/index.d.ts CHANGED
@@ -1,42 +1,71 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { GeoJsonObject, Geometry, Point } from 'geojson';
3
3
  export { Point } from 'geojson';
4
- import { LatLng } from 'leaflet';
5
- export { Popup } from 'leaflet';
4
+ import * as react from 'react';
6
5
  import { Key } from 'react';
7
6
  export { default as SVG } from 'react-inlinesvg';
7
+ export { Popup } from 'leaflet';
8
8
 
9
9
  /**
10
- * @category Types
11
- */
12
- interface Tag {
13
- color: string
14
- id: string
15
- name: string
16
- offer_or_need?: boolean
17
- }
18
-
19
- interface UtopiaMapProps {
20
- height?: string
21
- width?: string
22
- center?: [number, number]
23
- zoom?: number
24
- tags?: Tag[]
25
- children?: React.ReactNode
26
- geo?: GeoJsonObject
27
- showFilterControl?: boolean
28
- showLayerControl?: boolean
29
- showGratitudeControl?: boolean
30
- showThemeControl?: boolean
31
- infoText?: string
32
- donationWidget?: boolean
33
- defaultTheme?: string
34
- }
35
-
36
- /**
10
+ * This component creates the map.
11
+ * ```tsx
12
+ * <UtopiaMap center={[50.6, 9.5]} zoom={5} height="100dvh" width="100dvw" />
13
+ * ```
14
+ * You can define its {@link Layer | `Layers`} as supcomponents.
15
+ * ```tsx
16
+ * <UtopiaMap center={[50.6, 15.5]} zoom={5} height="100dvh" width="100dvw">
17
+ * <Layer
18
+ * name="events"
19
+ * markerIcon="calendar"
20
+ * markerShape="square"
21
+ * markerDefaultColor="#700"
22
+ * data={events}
23
+ * />
24
+ * <Layer
25
+ * name="places"
26
+ * markerIcon="point"
27
+ * markerShape="circle"
28
+ * markerDefaultColor="#007"
29
+ * data={places}
30
+ * />
31
+ * </UtopiaMap>
32
+ * ```
33
+ * You can also pass {@link Tags | `Tags`} or {@link Permissions | `Permissions`} as subcomponents.
34
+ * ```tsx
35
+ * <UtopiaMap center={[50.6, 15.5]} zoom={5} height="100dvh" width="100dvw">
36
+ * ...
37
+ * <Tags data={tags} />
38
+ * <Permissions data={permissions} />
39
+ * </UtopiaMap>
40
+ * ```
37
41
  * @category Map
38
42
  */
39
- declare function UtopiaMap({ height, width, center, zoom, children, geo, showFilterControl, showGratitudeControl, showLayerControl, showThemeControl, defaultTheme, infoText, donationWidget, }: UtopiaMapProps): react_jsx_runtime.JSX.Element;
43
+ declare function UtopiaMap({ height, width, center, zoom, children, geo, showFilterControl, showGratitudeControl, showLayerControl, showThemeControl, defaultTheme, donationWidget, }: {
44
+ /** height of the map (default '500px') */
45
+ height?: string;
46
+ /** width of the map (default '100%') */
47
+ width?: string;
48
+ /** initial centered position of the map (default [50.6, 9.5]) */
49
+ center?: [number, number];
50
+ /** initial zoom level of the map (default 10) */
51
+ zoom?: number;
52
+ /** React child-components */
53
+ children?: React.ReactNode;
54
+ /** GeoJSON to display on the map */
55
+ geo?: GeoJsonObject;
56
+ /** show the filter control widget (default false) */
57
+ showFilterControl?: boolean;
58
+ /** show the gratitude control widget (default false) */
59
+ showLayerControl?: boolean;
60
+ /** show the layer control widget (default true) */
61
+ showGratitudeControl?: boolean;
62
+ /** show a widget to switch the theme */
63
+ showThemeControl?: boolean;
64
+ /** the defaut theme */
65
+ defaultTheme?: string;
66
+ /** ask to donate to the Utopia Project OpenCollective campaign (default false) */
67
+ donationWidget?: boolean;
68
+ }): react_jsx_runtime.JSX.Element;
40
69
 
41
70
  /**
42
71
  * @category Types
@@ -148,14 +177,6 @@ interface Item {
148
177
  } */
149
178
  }
150
179
 
151
- interface ItemFormPopupProps {
152
- position: LatLng
153
- layer: LayerProps
154
- item?: Item
155
- children?: React.ReactNode
156
- setItemFormPopup?: React.Dispatch<React.SetStateAction<ItemFormPopupProps | null>>
157
- }
158
-
159
180
  interface ItemType {
160
181
  name: string
161
182
  show_name_input: boolean
@@ -197,20 +218,79 @@ interface LayerProps {
197
218
  public_edit_items?: boolean
198
219
  listed?: boolean
199
220
  item_presets?: Record<string, unknown>
200
- setItemFormPopup?: React.Dispatch<React.SetStateAction<ItemFormPopupProps | null>>
201
- itemFormPopup?: ItemFormPopupProps | null
202
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
203
- clusterRef?: any
204
221
  }
205
222
 
206
223
  /**
207
- * @category Map
224
+ * Tags are used to tag items within the app and the map and to filter by keywords. Every tag has a color.
225
+ * @example
226
+ * ```ts
227
+ * export const tags: Tag[] = [
228
+ * {
229
+ * "id": "e19f46a7-77a4-4a50-99a2-a942dce843a3",
230
+ * "name": "nature",
231
+ * "color": "#9bc53d"
232
+ * },
233
+ * {
234
+ * "id": "2c2099a6-23ac-4308-b91c-86eefeff3a1d",
235
+ * "name": "utopia",
236
+ * "color": "#c3423f"
237
+ * },
238
+ * {
239
+ * "id": "48b2de97-2b9e-432b-b230-7bdc9a5fb6c0",
240
+ * "name": "map",
241
+ * "color": "#5bc0eb"
242
+ * },
243
+ * {
244
+ * "id": "c88f52e6-357b-45fb-a171-9c2b1dceeb8e",
245
+ * "name": "food",
246
+ * "color": "#6761a8"
247
+ * },
248
+ * {
249
+ * "id": "8928cb92-a3c1-4d83-9495-c2eb4fac0bbe",
250
+ * "name": "permaculture",
251
+ * "color": "#44344f"
252
+ * },
253
+ *];
254
+ ```
255
+ * @category Types
208
256
  */
209
- declare const Layer: ({ data, children, name, menuIcon, menuText, menuColor, markerIcon, markerShape, markerDefaultColor, markerDefaultColor2, api, itemType, userProfileLayer, customEditLink, customEditParameter, public_edit_items, listed, setItemFormPopup, itemFormPopup, clusterRef, }: LayerProps) => react_jsx_runtime.JSX.Element;
257
+ interface Tag {
258
+ color: string
259
+ id: string
260
+ name: string
261
+ offer_or_need?: boolean
262
+ }
210
263
 
211
264
  /**
212
265
  * @category Map
213
266
  */
267
+ declare const Layer: ({ data, children, name, menuIcon, menuText, menuColor, markerIcon, markerShape, markerDefaultColor, markerDefaultColor2, api, itemType, userProfileLayer, customEditLink, customEditParameter, public_edit_items, listed, }: LayerProps) => react_jsx_runtime.JSX.Element;
268
+
269
+ /**
270
+ * This Components injects Tags comming from an {@link ItemsApi | `API`}
271
+ * ```tsx
272
+ * <Tags api={tagsApi} />
273
+ * ```
274
+ * or from on {@link Tag| `Array`}
275
+ * ```tsx
276
+ * <Tags data={tags} />
277
+ * ```
278
+ * Can be child of {@link AppShell | `AppShell`}
279
+ * ```tsx
280
+ * <AppShell>
281
+ * ...
282
+ * <Tags api={tagsApi} />
283
+ * </AppShell>
284
+ * ```
285
+ * Or child of {@link UtopiaMap | `UtopiaMap`}
286
+ * ```tsx
287
+ * <UtopiaMap>
288
+ * ...
289
+ * <Tags api={tagsApi} />
290
+ * </UtopiaMap>
291
+ * ```
292
+ * @category Map
293
+ */
214
294
  declare function Tags({ data, api }: {
215
295
  data?: Tag[];
216
296
  api?: ItemsApi<Tag>;
@@ -242,111 +322,38 @@ interface Permission {
242
322
  }
243
323
 
244
324
  /**
245
- * @category Types
325
+ * This Components injects Permissions comming from an {@link ItemsApi | `API`}
326
+ * ```tsx
327
+ * <Permissions api={itemsApiInstance} adminRole="8141dee8-8e10-48d0-baf1-680aea271298" />
328
+ * ```
329
+ * or from on {@link Permission| `Array`}
330
+ * ```tsx
331
+ * <Permissions data={permissions} adminRole="8141dee8-8e10-48d0-baf1-680aea271298" />
332
+ * ```
333
+ * Can be child of {@link AppShell | `AppShell`}
334
+ * ```tsx
335
+ * <AppShell>
336
+ * ...
337
+ * <Permissions api={itemsApiInstance} adminRole="8141dee8-8e10-48d0-baf1-680aea271298" />
338
+ * </AppShell>
339
+ * ```
340
+ * Or child of {@link UtopiaMap | `UtopiaMap`}
341
+ * ```tsx
342
+ * <UtopiaMap>
343
+ * ...
344
+ * <Permissions api={itemsApiInstance} adminRole="8141dee8-8e10-48d0-baf1-680aea271298" />
345
+ * </UtopiaMap>
346
+ * ```
347
+ * @category Map
246
348
  */
247
- interface PermissionsProps {
349
+ declare function Permissions({ data, api, adminRole, }: {
350
+ /** Array with all the permissions inside */
248
351
  data?: Permission[];
352
+ /** API to fetch all the permissions from a server */
249
353
  api?: ItemsApi<Permission>;
354
+ /** UUID of the admin role which has always all the permissions */
250
355
  adminRole?: string;
251
- }
252
-
253
- /**
254
- * @category Map
255
- */
256
- declare function Permissions({ data, api, adminRole }: PermissionsProps): react_jsx_runtime.JSX.Element;
257
-
258
- /**
259
- * @category Map
260
- */
261
- declare const ItemForm: {
262
- ({ children, item, title, setPopupTitle, }: {
263
- children?: React.ReactNode;
264
- item?: Item;
265
- title?: string;
266
- setPopupTitle?: React.Dispatch<React.SetStateAction<string>>;
267
- }): react_jsx_runtime.JSX.Element;
268
- __TYPE: string;
269
- };
270
-
271
- /**
272
- * @category Map
273
- */
274
- declare const ItemView: {
275
- ({ children, item }: {
276
- children?: React.ReactNode;
277
- item?: Item;
278
- }): react_jsx_runtime.JSX.Element;
279
- __TYPE: string;
280
- };
281
-
282
- /**
283
- * @category Map
284
- */
285
- declare const PopupTextAreaInput: ({ dataField, placeholder, style, item, }: {
286
- dataField: string;
287
- placeholder: string;
288
- style?: string;
289
- item?: Item;
290
- }) => react_jsx_runtime.JSX.Element;
291
-
292
- interface StartEndInputProps {
293
- item?: Item;
294
- showLabels?: boolean;
295
- updateStartValue?: (value: string) => void;
296
- updateEndValue?: (value: string) => void;
297
- }
298
- /**
299
- * @category Map
300
- */
301
- declare const PopupStartEndInput: ({ item, showLabels, updateStartValue, updateEndValue, }: StartEndInputProps) => react_jsx_runtime.JSX.Element;
302
-
303
- /**
304
- * @category Map
305
- */
306
- declare const PopupTextInput: ({ dataField, placeholder, style, item, }: {
307
- dataField: string;
308
- placeholder: string;
309
- style?: string;
310
- item?: Item;
311
- }) => react_jsx_runtime.JSX.Element;
312
-
313
- /**
314
- * @category Map
315
- */
316
- declare const PopupCheckboxInput: ({ dataField, label, item, }: {
317
- dataField: string;
318
- label: string;
319
- item?: Item;
320
- }) => react_jsx_runtime.JSX.Element;
321
-
322
- /**
323
- * @category Map
324
- */
325
- declare const TextView: ({ item, itemId, text, truncate, rawText, itemTextField, }: {
326
- item?: Item;
327
- itemId?: string;
328
- text?: string;
329
- truncate?: boolean;
330
- rawText?: string;
331
- itemTextField?: string;
332
- }) => react_jsx_runtime.JSX.Element;
333
-
334
- /**
335
- * @category Map
336
- */
337
- declare const StartEndView: ({ item }: {
338
- item?: Item;
339
- }) => react_jsx_runtime.JSX.Element;
340
-
341
- /**
342
- * @category Map
343
- */
344
- declare const PopupButton: ({ url, parameterField, text, item, }: {
345
- url: string;
346
- parameterField?: string;
347
- text: string;
348
- item?: Item;
349
- }) => react_jsx_runtime.JSX.Element;
356
+ }): react_jsx_runtime.JSX.Element;
350
357
 
351
358
  /**
352
359
  * @category Types
@@ -563,6 +570,63 @@ interface InputTextProps {
563
570
  */
564
571
  declare function TextInput({ labelTitle, labelStyle, type, dataField, containerStyle, inputStyle, defaultValue, placeholder, autocomplete, pattern, required, updateFormValue, }: InputTextProps): react_jsx_runtime.JSX.Element;
565
572
 
573
+ interface StartEndInputProps {
574
+ item?: Item;
575
+ showLabels?: boolean;
576
+ updateStartValue?: (value: string) => void;
577
+ updateEndValue?: (value: string) => void;
578
+ }
579
+
580
+ /**
581
+ * @category Item
582
+ */
583
+ declare const PopupForm: ({ children }: {
584
+ children?: React.ReactNode;
585
+ }) => react_jsx_runtime.JSX.Element;
586
+
587
+ /**
588
+ * @category Item
589
+ */
590
+ declare const PopupView: ({ children }: {
591
+ children?: React.ReactNode;
592
+ }) => (react_jsx_runtime.JSX.Element | null)[];
593
+
594
+ declare const TextView: react.ComponentType<Omit<{
595
+ item?: Item;
596
+ itemId?: string;
597
+ text?: string;
598
+ truncate?: boolean;
599
+ rawText?: string;
600
+ itemTextField?: string;
601
+ }, "item">>;
602
+ declare const StartEndView: react.ComponentType<Omit<{
603
+ item?: Item;
604
+ }, "item">>;
605
+ declare const PopupTextInput: react.ComponentType<Omit<{
606
+ dataField: string;
607
+ placeholder: string;
608
+ style?: string;
609
+ item?: Item;
610
+ }, "item">>;
611
+ declare const PopupButton: react.ComponentType<Omit<{
612
+ url: string;
613
+ parameterField?: string;
614
+ text: string;
615
+ item?: Item;
616
+ }, "item">>;
617
+ declare const PopupCheckboxInput: react.ComponentType<Omit<{
618
+ dataField: string;
619
+ label: string;
620
+ item?: Item;
621
+ }, "item">>;
622
+ declare const PopupTextAreaInput: react.ComponentType<Omit<{
623
+ dataField: string;
624
+ placeholder: string;
625
+ style?: string;
626
+ item?: Item;
627
+ }, "item">>;
628
+ declare const PopupStartEndInput: react.ComponentType<Omit<StartEndInputProps, "item">>;
629
+
566
630
  declare global {
567
631
  interface Window {
568
632
  my_modal_3: {
@@ -571,4 +635,4 @@ declare global {
571
635
  }
572
636
  }
573
637
 
574
- export { AppShell, type AssetsApi, AttestationForm, AuthProvider, CardPage, Content, type Item, ItemForm, ItemView, type ItemsApi, Layer, type LayerProps, LoginPage, MapOverlayPage, MarketView, Modal, OverlayItemsIndexPage, type Permission, Permissions, type PermissionsProps, PopupButton, PopupCheckboxInput, PopupStartEndInput, PopupTextAreaInput, PopupTextInput, ProfileForm, ProfileView, Quests, RequestPasswordPage, SelectUser, SetNewPasswordPage, SideBar, SignupPage, StartEndView, type Tag, Tags, TextAreaInput, TextInput, TextView, TitleCard, type UserApi, type UserItem, UserSettings, UtopiaMap };
638
+ export { AppShell, type AssetsApi, AttestationForm, AuthProvider, CardPage, Content, type Item, type ItemsApi, Layer, type LayerProps, LoginPage, MapOverlayPage, MarketView, Modal, OverlayItemsIndexPage, type Permission, Permissions, PopupButton, PopupCheckboxInput, PopupForm, PopupStartEndInput, PopupTextAreaInput, PopupTextInput, PopupView, ProfileForm, ProfileView, Quests, RequestPasswordPage, SelectUser, SetNewPasswordPage, SideBar, SignupPage, StartEndView, type Tag, Tags, TextAreaInput, TextInput, TextView, TitleCard, type UserApi, type UserItem, UserSettings, UtopiaMap };
package/dist/index.esm.js CHANGED
@@ -72,7 +72,7 @@ styleInject(css_248z$4);
72
72
  var css_248z$3 = ".fade {\n mask-image: linear-gradient(180deg, transparent, #000 1%, #000 99%, transparent);\n}\n\n.placeholder-center::placeholder {\n text-align: center;\n}\n\ninput {\n box-sizing: border-box;\n}\n\ntextarea {\n box-sizing: border-box;\n}\n\n.crosshair-cursor-enabled {\n cursor: crosshair;\n}\n\n.marker-cluster span {\n color: #000;\n}";
73
73
  styleInject(css_248z$3);
74
74
 
75
- var css_248z$2 = ".calendar-icon {\n position: relative;\n top: -35px;\n left: 10px;\n width: 13px;\n}\n\n.user-icon {\n position: relative;\n top: -36px;\n left: 10px;\n width: 13px;\n}\n\n.circle-icon {\n position: relative;\n top: -33px;\n left: 10px;\n width: 13px;\n}\n\n.fire-icon {\n position: relative;\n top: -36px;\n left: 10px;\n width: 13px;\n}\n\n.tree-icon {\n position: relative;\n top: -38px;\n left: 4px;\n width: 24px;\n}\n\n.music-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.quest-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.drum-icon {\n position: relative;\n top: -38px;\n left: 4px;\n width: 24px;\n}\n\n.compass-icon {\n position: relative;\n top: -36.5px;\n left: 4px;\n width: 24px;\n}\n\n.group-icon {\n position: relative;\n top: -37px;\n left: 4px;\n width: 24px;\n}\n\n.liebevoll-jetzt-icon{\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.staff-snake-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.flower-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.network-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.shop-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.plant-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.circle-dot-icon {\n position: relative;\n top: -36px;\n left: 4px;\n width: 24px;\n}";
75
+ var css_248z$2 = ".calendar-icon {\n position: relative;\n top: -35px;\n left: 10px;\n width: 13px;\n}\n\n.user-icon {\n position: relative;\n top: -36px;\n left: 10px;\n width: 13px;\n}\n\n.circle-icon {\n position: relative;\n top: -33px;\n left: 10px;\n width: 13px;\n}\n\n.fire-icon {\n position: relative;\n top: -36px;\n left: 10px;\n width: 13px;\n}\n\n.tree-icon {\n position: relative;\n top: -38px;\n left: 4px;\n width: 24px;\n}\n\n.music-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.quest-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.drum-icon {\n position: relative;\n top: -38px;\n left: 4px;\n width: 24px;\n}\n\n.compass-icon {\n position: relative;\n top: -36.5px;\n left: 4px;\n width: 24px;\n}\n\n.group-icon {\n position: relative;\n top: -37px;\n left: 4px;\n width: 24px;\n}\n\n.liebevoll-jetzt-icon{\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.staff-snake-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.flower-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.network-icon {\n position: relative;\n top: -35px;\n left: 4px;\n width: 24px;\n}\n\n.shop-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.plant-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}\n\n.circle-dot-icon {\n position: relative;\n top: -36px;\n left: 4px;\n width: 24px;\n}\n\n.steps-icon {\n position: relative;\n top: -34px;\n left: 4px;\n width: 24px;\n}";
76
76
  styleInject(css_248z$2);
77
77
 
78
78
  var css_248z$1 = ".leaflet-control-attribution {\n display: none;\n}\n\n.leaflet-control-locate {\n display: none;\n}\n\n.leaflet-data-marker {\n background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAQCAYAAACcN8ZaAAAB3klEQVR42s3U4UdDURzG8czMXJnJ1Vwzc6VJZjaZJdlMlpQsKdmUFNOUspRSSqUolfQfr+fF98Vx5mwv9qbDx7LdznnO7/7Omej3+/+Ga0QMUYkhbvBgmhzCQxwxibIGrGEF8CQhU+LLtKQkQNqScUgjxRxTBIxbgfgD/BgnhM8kM5KTeclLQYqGkkMRBckzR8ic/mAgd5BAZplsUaqyIg2sDtHg2brUZJk5SmwopErJUWE8SpmTMhNvya60Zd/SNrR4bkeaskG4uiwRZk6yrJEYFibGAxn+scECHTmTnuVCzvmty3PHciB7bGKN6lQkzysPqIrHmpFhYbKUtckC1/Ioz4ZHuZdbuSLYiRxRpSZVWXZVxAzC0R4Ik5SQsu6w8yd5l2/5kg95I9SdXMoZQfYIUjeqEUrgOkXGPeN4TYRhxy8E+ZUf+eS7B7miIoeybVSjKDnm8u3+gH3pDTYwu1igATvs/pXqvBKiR4i2bNJfi1ZfUAnjgrOG8wY2quNzBKuU/ZS+uSFEl5O0xRGuUIlZCcw7xG5QPkeHYUSNV5WXGou2sC3rBC0LjenqCXGO0WEiTJa0Lr4KixdHBrDGuGGiRqCUpFk8pGIpQtCU7p4YPwxYxEMCk1aAMQZh8Ac8PfbIzYPJOwAAAABJRU5ErkJggg==') no-repeat;\n background-position: 6px 32px;\n}\n\n.leaflet-container {\n cursor: inherit;\n}\n\n.leaflet-popup-scrolled {\n overflow-x: hidden;\n}\n\n.leaflet-popup-content-wrapper, .leaflet-popup-tip{\n background-color: var(--color-base-100);\n color: var(--color-base-content);\n border-radius: var(--radius-box);\n}\n\n.leaflet-tooltip {\n background-color: var(--color-base-100);\n color: var(--color-base-content);\n border-width: 0px;\n}\n\n.leaflet-tooltip {\n border-radius: var(--radius-box);\n transition: opacity 500ms;\n transition-delay: 50ms;\n}\n\n.leaflet-tooltip::before {\n border-top-color: var(--color-base-100);\n}\n\n.leaflet-container {\n text-align: left;\n background-image: url(\"data:image/svg+xml,%3Csvg width='40' height='40' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n background-repeat: no-repeat;\n background-attachment: fixed;\n background-position: 50% 80%;\n}\n\n.leaflet-popup-close-button span {\n color: var(--color-base-content);\n opacity: 50%;\n}";
@@ -1428,6 +1428,8 @@ const addIcon = (icon) => {
1428
1428
  return '<svg class="circle-dot-icon" stroke="#fff" fill="transparent" stroke-width="2.5" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1.55em" width="1.55em" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="1"></circle></svg>';
1429
1429
  case 'cannabis':
1430
1430
  return '<svg class="network-icon" stroke="currentColor" fill="#fff" stroke-width="0" viewBox="0 0 512 512" height="1.5em" width="1.5em" xmlns="http://www.w3.org/2000/svg"><path d="M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2l0 70.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-70.8-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z"></path></svg>';
1431
+ case 'steps':
1432
+ return '<svg class="steps-icon" stroke="currentColor" fill="#fff" stroke-width="0" viewBox="0 0 512 512" height="1.4em" width="1.4em" xmlns="http://www.w3.org/2000/svg"><path d="M133.83 361.27c-22.61 0-41-8.17-54.79-24.39s-22.84-40.29-28.11-75.31c-7.76-51.61-.06-95.11 21.68-122.48 12.8-16.12 29.6-25.44 48.58-26.94 16.25-1.3 40.54 5.29 64 44 14.69 24.24 25.86 56.44 30.65 88.34 5.79 38.51 1.48 66.86-13.18 86.65-11.64 15.72-29.54 25.46-53.21 29a106.46 106.46 0 0 1-15.62 1.13zM173 496c-13.21 0-26.6-4.23-38.66-12.36a79.79 79.79 0 0 1-33.52-50.6c-2.85-14.66-1.14-26.31 5.22-35.64 10.33-15.15 28.87-18.56 48.49-22.18 2.07-.38 4.17-.76 6.3-1.17 4.52-.86 9.14-2 13.62-3.11 16.78-4.14 34.14-8.43 48.47 1.75 9.59 6.8 15 18.36 16.62 35.32 1.84 19.57-2.36 39.1-11.83 55-10.19 17.11-25.47 28.42-43 31.86A61 61 0 0 1 173 496zm205.17-230.73a106.69 106.69 0 0 1-15.6-1.2c-23.66-3.5-41.56-13.25-53.2-29-14.66-19.79-19-48.13-13.18-86.65 4.79-31.93 15.93-64.1 30.55-88.25 23.34-38.57 47.66-45.26 64-44.08 18.92 1.38 35.69 10.57 48.51 26.6 21.89 27.37 29.65 71 21.86 122.84-5.27 35-14.2 58.95-28.11 75.31s-32.22 24.43-54.83 24.43zM339 400a61 61 0 0 1-11.68-1.13c-17.56-3.44-32.84-14.75-43-31.86-9.47-15.9-13.67-35.43-11.83-55 1.6-17 7-28.52 16.62-35.33 14.33-10.17 31.69-5.89 48.47-1.74 4.48 1.1 9.1 2.24 13.62 3.11l6.29 1.17c19.63 3.61 38.17 7 48.5 22.17 6.36 9.33 8.07 21 5.22 35.64a79.78 79.78 0 0 1-33.52 50.61C365.56 395.78 352.17 400 339 400z"></path></svg>';
1431
1433
  default:
1432
1434
  return '';
1433
1435
  }