@alveole/components 0.22.0 → 0.23.0

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 (114) hide show
  1. package/dist/core/Map/Map.d.ts +3 -0
  2. package/dist/core/Map/Map.d.ts.map +1 -0
  3. package/dist/core/Map/Map.js +5 -0
  4. package/dist/core/Map/Map.props.d.ts +57 -0
  5. package/dist/core/Map/Map.props.d.ts.map +1 -0
  6. package/dist/core/Map/Map.props.js +18 -0
  7. package/dist/core/Map/Map.stories.d.ts +38 -0
  8. package/dist/core/Map/Map.stories.d.ts.map +1 -0
  9. package/dist/core/Map/Map.stories.js +30 -0
  10. package/dist/core/Map/Map.styles.d.ts +9 -0
  11. package/dist/core/Map/Map.styles.d.ts.map +1 -0
  12. package/dist/core/Map/Map.styles.js +9 -0
  13. package/dist/core/Map/Map.web.d.ts +12 -0
  14. package/dist/core/Map/Map.web.d.ts.map +1 -0
  15. package/dist/core/Map/Map.web.js +134 -0
  16. package/dist/core/Map/index.d.ts +3 -0
  17. package/dist/core/Map/index.d.ts.map +1 -0
  18. package/dist/core/Map/index.js +2 -0
  19. package/dist/core/Metabase/Metabase.d.ts +1 -9
  20. package/dist/core/Metabase/Metabase.d.ts.map +1 -1
  21. package/dist/core/Metabase/Metabase.props.d.ts +10 -0
  22. package/dist/core/Metabase/Metabase.props.d.ts.map +1 -0
  23. package/dist/core/Metabase/Metabase.props.js +1 -0
  24. package/dist/core/Metabase/Metabase.stories.d.ts +1 -1
  25. package/dist/core/Metabase/Metabase.web.d.ts +1 -6
  26. package/dist/core/Metabase/Metabase.web.d.ts.map +1 -1
  27. package/dist/core/Page/PageContentScrollable.d.ts +1 -1
  28. package/dist/core/PdfViewer/PdfViewer.d.ts +3 -0
  29. package/dist/core/PdfViewer/PdfViewer.d.ts.map +1 -0
  30. package/dist/core/PdfViewer/PdfViewer.js +8 -0
  31. package/dist/core/PdfViewer/PdfViewer.props.d.ts +9 -0
  32. package/dist/core/PdfViewer/PdfViewer.props.d.ts.map +1 -0
  33. package/dist/core/PdfViewer/PdfViewer.props.js +1 -0
  34. package/dist/core/PdfViewer/PdfViewer.stories.d.ts +13 -0
  35. package/dist/core/PdfViewer/PdfViewer.stories.d.ts.map +1 -0
  36. package/dist/core/PdfViewer/PdfViewer.stories.js +16 -0
  37. package/dist/core/PdfViewer/PdfViewer.styles.d.ts +2 -0
  38. package/dist/core/PdfViewer/PdfViewer.styles.d.ts.map +1 -0
  39. package/dist/core/PdfViewer/PdfViewer.styles.js +2 -0
  40. package/dist/core/PdfViewer/PdfViewer.web.d.ts +3 -0
  41. package/dist/core/PdfViewer/PdfViewer.web.d.ts.map +1 -0
  42. package/dist/core/PdfViewer/PdfViewer.web.js +6 -0
  43. package/dist/core/PdfViewer/index.d.ts +3 -0
  44. package/dist/core/PdfViewer/index.d.ts.map +1 -0
  45. package/dist/core/PdfViewer/index.js +2 -0
  46. package/dist/core/index.d.ts +2 -0
  47. package/dist/core/index.d.ts.map +1 -1
  48. package/dist/core/index.js +2 -0
  49. package/dist/stories/index.d.ts +5 -0
  50. package/dist/stories/index.d.ts.map +1 -1
  51. package/dist/stories/index.js +5 -0
  52. package/dist/ui/Badge/Badge.d.ts +9 -0
  53. package/dist/ui/Badge/Badge.d.ts.map +1 -0
  54. package/dist/ui/Badge/Badge.js +34 -0
  55. package/dist/ui/Badge/Badge.stories.d.ts +67 -0
  56. package/dist/ui/Badge/Badge.stories.d.ts.map +1 -0
  57. package/dist/ui/Badge/Badge.stories.js +16 -0
  58. package/dist/ui/Badge/Badge.styles.d.ts +55 -0
  59. package/dist/ui/Badge/Badge.styles.d.ts.map +1 -0
  60. package/dist/ui/Badge/Badge.styles.js +49 -0
  61. package/dist/ui/Badge/index.d.ts +2 -0
  62. package/dist/ui/Badge/index.d.ts.map +1 -0
  63. package/dist/ui/Badge/index.js +1 -0
  64. package/dist/ui/Button/Button.stories.d.ts +3 -0
  65. package/dist/ui/Button/Button.stories.d.ts.map +1 -1
  66. package/dist/ui/Button/Button.styles.d.ts +3 -0
  67. package/dist/ui/Button/Button.styles.d.ts.map +1 -1
  68. package/dist/ui/Button/Button.styles.js +3 -0
  69. package/dist/ui/EmptyState/EmptyState.stories.d.ts +1 -1
  70. package/dist/ui/EmptyState/EmptyState.styles.d.ts +1 -1
  71. package/dist/ui/EmptyState/EmptyState.styles.js +1 -1
  72. package/dist/ui/Sidebar/Sidebar.d.ts +11 -0
  73. package/dist/ui/Sidebar/Sidebar.d.ts.map +1 -0
  74. package/dist/ui/Sidebar/Sidebar.js +30 -0
  75. package/dist/ui/Sidebar/Sidebar.stories.d.ts +182 -0
  76. package/dist/ui/Sidebar/Sidebar.stories.d.ts.map +1 -0
  77. package/dist/ui/Sidebar/Sidebar.stories.js +27 -0
  78. package/dist/ui/Sidebar/Sidebar.styles.d.ts +172 -0
  79. package/dist/ui/Sidebar/Sidebar.styles.d.ts.map +1 -0
  80. package/dist/ui/Sidebar/Sidebar.styles.js +148 -0
  81. package/dist/ui/Sidebar/SidebarFooter.d.ts +4 -0
  82. package/dist/ui/Sidebar/SidebarFooter.d.ts.map +1 -0
  83. package/dist/ui/Sidebar/SidebarFooter.js +7 -0
  84. package/dist/ui/Sidebar/SidebarGroup.d.ts +6 -0
  85. package/dist/ui/Sidebar/SidebarGroup.d.ts.map +1 -0
  86. package/dist/ui/Sidebar/SidebarGroup.js +20 -0
  87. package/dist/ui/Sidebar/SidebarHeader.d.ts +8 -0
  88. package/dist/ui/Sidebar/SidebarHeader.d.ts.map +1 -0
  89. package/dist/ui/Sidebar/SidebarHeader.js +26 -0
  90. package/dist/ui/Sidebar/SidebarItem.d.ts +19 -0
  91. package/dist/ui/Sidebar/SidebarItem.d.ts.map +1 -0
  92. package/dist/ui/Sidebar/SidebarItem.js +48 -0
  93. package/dist/ui/Sidebar/index.d.ts +4 -1
  94. package/dist/ui/Sidebar/index.d.ts.map +1 -1
  95. package/dist/ui/Sidebar/index.js +4 -1
  96. package/dist/ui/Tag/Tag.d.ts +10 -0
  97. package/dist/ui/Tag/Tag.d.ts.map +1 -0
  98. package/dist/ui/Tag/Tag.js +17 -0
  99. package/dist/ui/Tag/Tag.stories.d.ts +48 -0
  100. package/dist/ui/Tag/Tag.stories.d.ts.map +1 -0
  101. package/dist/ui/Tag/Tag.stories.js +15 -0
  102. package/dist/ui/Tag/Tag.styles.d.ts +37 -0
  103. package/dist/ui/Tag/Tag.styles.d.ts.map +1 -0
  104. package/dist/ui/Tag/Tag.styles.js +33 -0
  105. package/dist/ui/Tag/index.d.ts +2 -0
  106. package/dist/ui/Tag/index.d.ts.map +1 -0
  107. package/dist/ui/Tag/index.js +1 -0
  108. package/dist/ui/ToolbarTop/ToolbarTop.stories.d.ts +1 -0
  109. package/dist/ui/ToolbarTop/ToolbarTop.stories.d.ts.map +1 -1
  110. package/dist/ui/ToolbarTop/ToolbarTop.stories.js +2 -0
  111. package/dist/ui/index.d.ts +3 -0
  112. package/dist/ui/index.d.ts.map +1 -1
  113. package/dist/ui/index.js +3 -0
  114. package/package.json +3 -2
@@ -0,0 +1,3 @@
1
+ import { MapProps } from './Map.props';
2
+ export declare const Map: (_: MapProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../src/core/Map/Map.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,eAAO,MAAM,GAAG,GAAI,GAAG,QAAQ,4CAM9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Typography } from '../../core';
3
+ export const Map = (_) => {
4
+ return (_jsx(Box, { p: '075', children: _jsx(Typography, { textAlign: 'center', children: "La carte n\u2019est pas disponible sur le mobile" }) }));
5
+ };
@@ -0,0 +1,57 @@
1
+ import type * as React from 'react';
2
+ import { z } from 'zod';
3
+ export declare const LatLngSchema: z.ZodObject<{
4
+ lat: z.ZodNumber;
5
+ lng: z.ZodNumber;
6
+ }, z.core.$strip>;
7
+ export type LatLng = z.infer<typeof LatLngSchema>;
8
+ export declare const MarkerSchema: z.ZodObject<{
9
+ id: z.ZodOptional<z.ZodString>;
10
+ position: z.ZodObject<{
11
+ lat: z.ZodNumber;
12
+ lng: z.ZodNumber;
13
+ }, z.core.$strip>;
14
+ title: z.ZodOptional<z.ZodString>;
15
+ iconUrl: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ export type Marker = z.infer<typeof MarkerSchema>;
18
+ export declare const MapPropsSchema: z.ZodObject<{
19
+ markers: z.ZodArray<z.ZodObject<{
20
+ id: z.ZodOptional<z.ZodString>;
21
+ position: z.ZodObject<{
22
+ lat: z.ZodNumber;
23
+ lng: z.ZodNumber;
24
+ }, z.core.$strip>;
25
+ title: z.ZodOptional<z.ZodString>;
26
+ iconUrl: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>>;
28
+ center: z.ZodOptional<z.ZodObject<{
29
+ lat: z.ZodNumber;
30
+ lng: z.ZodNumber;
31
+ }, z.core.$strip>>;
32
+ zoom: z.ZodOptional<z.ZodNumber>;
33
+ fitToMarkers: z.ZodOptional<z.ZodBoolean>;
34
+ }, z.core.$strip>;
35
+ export type MapProps = z.infer<typeof MapPropsSchema> & {
36
+ style?: React.CSSProperties;
37
+ mapOptions?: Record<string, unknown>;
38
+ onMarkerClick?: (marker: Marker) => void;
39
+ };
40
+ export declare const MapPropsJSON: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
41
+ markers: z.ZodArray<z.ZodObject<{
42
+ id: z.ZodOptional<z.ZodString>;
43
+ position: z.ZodObject<{
44
+ lat: z.ZodNumber;
45
+ lng: z.ZodNumber;
46
+ }, z.core.$strip>;
47
+ title: z.ZodOptional<z.ZodString>;
48
+ iconUrl: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strip>>;
50
+ center: z.ZodOptional<z.ZodObject<{
51
+ lat: z.ZodNumber;
52
+ lng: z.ZodNumber;
53
+ }, z.core.$strip>>;
54
+ zoom: z.ZodOptional<z.ZodNumber>;
55
+ fitToMarkers: z.ZodOptional<z.ZodBoolean>;
56
+ }, z.core.$strip>>;
57
+ //# sourceMappingURL=Map.props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.props.d.ts","sourceRoot":"","sources":["../../../src/core/Map/Map.props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,YAAY;;;;;;;;iBAKvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG;IACtD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AACF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;kBAAiC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export const LatLngSchema = z.object({
3
+ lat: z.number(),
4
+ lng: z.number(),
5
+ });
6
+ export const MarkerSchema = z.object({
7
+ id: z.string().optional(),
8
+ position: LatLngSchema,
9
+ title: z.string().optional(),
10
+ iconUrl: z.string().optional(),
11
+ });
12
+ export const MapPropsSchema = z.object({
13
+ markers: MarkerSchema.array(),
14
+ center: LatLngSchema.optional().describe('Si omis, on fit les bounds des markers'),
15
+ zoom: z.number().optional().describe('Ignoré si on fit bounds'),
16
+ fitToMarkers: z.boolean().optional().describe('Par défaut: true si pas de center'),
17
+ });
18
+ export const MapPropsJSON = z.toJSONSchema(MapPropsSchema);
@@ -0,0 +1,38 @@
1
+ declare const _default: {
2
+ title: string;
3
+ tags: ["Kit"];
4
+ experimental: true;
5
+ webOnly: true;
6
+ description: string;
7
+ props: import("zod/v4/core").ZodStandardJSONSchemaPayload<import("zod").ZodObject<{
8
+ markers: import("zod").ZodArray<import("zod").ZodObject<{
9
+ id: import("zod").ZodOptional<import("zod").ZodString>;
10
+ position: import("zod").ZodObject<{
11
+ lat: import("zod").ZodNumber;
12
+ lng: import("zod").ZodNumber;
13
+ }, import("zod/v4/core").$strip>;
14
+ title: import("zod").ZodOptional<import("zod").ZodString>;
15
+ iconUrl: import("zod").ZodOptional<import("zod").ZodString>;
16
+ }, import("zod/v4/core").$strip>>;
17
+ center: import("zod").ZodOptional<import("zod").ZodObject<{
18
+ lat: import("zod").ZodNumber;
19
+ lng: import("zod").ZodNumber;
20
+ }, import("zod/v4/core").$strip>>;
21
+ zoom: import("zod").ZodOptional<import("zod").ZodNumber>;
22
+ fitToMarkers: import("zod").ZodOptional<import("zod").ZodBoolean>;
23
+ }, import("zod/v4/core").$strip>>;
24
+ component: (_: import("./Map.props").MapProps) => import("react/jsx-runtime").JSX.Element;
25
+ styleFn: () => {
26
+ container: {
27
+ width: "100%";
28
+ height: "100%";
29
+ borderRadius: number;
30
+ overflow: "hidden";
31
+ };
32
+ };
33
+ };
34
+ export default _default;
35
+ export declare function ParisMap(): import("react/jsx-runtime").JSX.Element;
36
+ export declare function MapMarker(): import("react/jsx-runtime").JSX.Element;
37
+ export declare function MapCenterZoomMarker(): import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=Map.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.stories.d.ts","sourceRoot":"","sources":["../../../src/core/Map/Map.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBASkB;AAElB,wBAAgB,QAAQ,4CAOvB;AAED,wBAAgB,SAAS,4CAIxB;AAED,wBAAgB,mBAAmB,4CAQlC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from '../../core';
3
+ import { Map } from './index';
4
+ import { MapPropsJSON } from './Map.props';
5
+ import { useStyles } from './Map.styles';
6
+ export default {
7
+ title: 'Map',
8
+ tags: ['Kit'],
9
+ experimental: true,
10
+ webOnly: true,
11
+ description: 'Carte interactive (Google Map)',
12
+ props: MapPropsJSON,
13
+ component: Map,
14
+ styleFn: useStyles,
15
+ };
16
+ export function ParisMap() {
17
+ const markers = [
18
+ { id: 'a', position: { lat: 48.85837, lng: 2.294481 }, title: 'Tour Eiffel' },
19
+ { id: 'b', position: { lat: 48.8606, lng: 2.3376 }, title: 'Louvre' },
20
+ ];
21
+ return _jsx(Box, { style: { height: 400 }, children: markers && _jsx(Map, { markers: markers }) });
22
+ }
23
+ export function MapMarker() {
24
+ const marker = { id: 'mon-id', position: { lat: 48.85837, lng: 2.294481 }, title: 'Tour Eiffel' };
25
+ return _jsx(Box, { style: { height: 400 }, children: marker && _jsx(Map, { markers: [marker], onMarkerClick: console.log }) });
26
+ }
27
+ export function MapCenterZoomMarker() {
28
+ const marker = { id: '123', position: { lat: 48.85837, lng: 2.294481 }, title: 'Tour Eiffel' };
29
+ return (_jsx(Box, { style: { height: 400 }, children: marker && _jsx(Map, { markers: [marker], center: marker.position, onMarkerClick: console.log, zoom: 4 }) }));
30
+ }
@@ -0,0 +1,9 @@
1
+ export declare const useStyles: () => {
2
+ container: {
3
+ width: "100%";
4
+ height: "100%";
5
+ borderRadius: number;
6
+ overflow: "hidden";
7
+ };
8
+ };
9
+ //# sourceMappingURL=Map.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.styles.d.ts","sourceRoot":"","sources":["../../../src/core/Map/Map.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;CAOnB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { makeStyles } from '@alveole/theme';
2
+ export const useStyles = makeStyles(() => ({
3
+ container: {
4
+ width: '100%',
5
+ height: '100%',
6
+ borderRadius: 8,
7
+ overflow: 'hidden',
8
+ },
9
+ }));
@@ -0,0 +1,12 @@
1
+ import { MapProps } from './Map.props';
2
+ type GoogleNamespace = {
3
+ maps: any;
4
+ };
5
+ declare global {
6
+ interface Window {
7
+ google?: GoogleNamespace;
8
+ }
9
+ }
10
+ export declare const Map: (props: MapProps) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=Map.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.web.d.ts","sourceRoot":"","sources":["../../../src/core/Map/Map.web.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAU,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B;CACF;AAqCD,eAAO,MAAM,GAAG,GAAI,OAAO,QAAQ,4CAuGlC,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Constants from 'expo-constants';
3
+ import * as React from 'react';
4
+ import { Box } from '../Box';
5
+ const GOOGLE_MAPS_WEB_URL = 'https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=marker';
6
+ const GOOGLE_MAPS_URL = (() => {
7
+ const key = Constants.expoConfig?.extra?.GOOGLE_MAPS_API_KEY;
8
+ if (!key)
9
+ console.warn('EXPO_PUBLIC_GOOGLE_MAPS_API_KEY manquant');
10
+ return key ? `${GOOGLE_MAPS_WEB_URL}&key=${key}` : GOOGLE_MAPS_WEB_URL;
11
+ })();
12
+ let loaderPromise = null;
13
+ function loadGoogleMaps() {
14
+ if (typeof window === 'undefined')
15
+ return Promise.resolve();
16
+ if (window.google?.maps)
17
+ return Promise.resolve();
18
+ if (loaderPromise)
19
+ return loaderPromise;
20
+ loaderPromise = new Promise((resolve, reject) => {
21
+ const existing = document.querySelector('script[data-map-loader="google"]');
22
+ if (existing) {
23
+ existing.addEventListener('load', () => resolve());
24
+ existing.addEventListener('error', () => reject(new Error('Failed to load Google Maps')));
25
+ return;
26
+ }
27
+ const script = document.createElement('script');
28
+ script.src = GOOGLE_MAPS_URL;
29
+ script.async = true;
30
+ script.defer = true;
31
+ script.dataset.mapLoader = 'google';
32
+ script.onload = () => resolve();
33
+ script.onerror = () => reject(new Error('Failed to load Google Maps'));
34
+ document.head.appendChild(script);
35
+ });
36
+ return loaderPromise;
37
+ }
38
+ export const Map = (props) => {
39
+ const { markers = [], center, zoom = 12, fitToMarkers, mapOptions, onMarkerClick } = props;
40
+ const containerRef = React.useRef(null);
41
+ const mapRef = React.useRef(null);
42
+ const gMarkersRef = React.useRef([]);
43
+ const initMap = async (cancelled) => {
44
+ try {
45
+ await loadGoogleMaps();
46
+ if (cancelled)
47
+ return;
48
+ if (!containerRef.current)
49
+ return;
50
+ const google = window.google;
51
+ if (!google?.maps)
52
+ throw new Error('Google Maps not available on window');
53
+ const initialCenter = center ?? markers[0]?.position ?? { lat: 48.8566, lng: 2.3522 };
54
+ mapRef.current = new google.maps.Map(containerRef.current, {
55
+ center: initialCenter,
56
+ zoom,
57
+ clickableIcons: false,
58
+ streetViewControl: false,
59
+ mapTypeControl: false,
60
+ fullscreenControl: false,
61
+ ...mapOptions,
62
+ });
63
+ refreshMarkers();
64
+ fitBoundsIfNeeded();
65
+ }
66
+ catch (e) {
67
+ console.error(e);
68
+ }
69
+ };
70
+ // Init map
71
+ React.useEffect(() => {
72
+ let cancelled = false;
73
+ initMap(cancelled);
74
+ return () => {
75
+ cancelled = true;
76
+ gMarkersRef.current.forEach(m => m.setMap(null));
77
+ gMarkersRef.current = [];
78
+ mapRef.current = null;
79
+ };
80
+ }, []);
81
+ // Au changement d'options, on refresh markers et zoom
82
+ React.useEffect(() => {
83
+ if (!mapRef.current || !window.google?.maps)
84
+ return;
85
+ if (mapOptions)
86
+ mapRef.current.setOptions(mapOptions);
87
+ refreshMarkers();
88
+ fitBoundsIfNeeded();
89
+ }, [JSON.stringify(markers), JSON.stringify(center), zoom, fitToMarkers, JSON.stringify(mapOptions)]);
90
+ function refreshMarkers() {
91
+ if (!mapRef.current)
92
+ return;
93
+ const g = window.google;
94
+ if (!g?.maps)
95
+ return;
96
+ gMarkersRef.current.forEach(m => m.setMap(null));
97
+ gMarkersRef.current = [];
98
+ gMarkersRef.current = markers.map(mk => {
99
+ const marker = new g.maps.Marker({
100
+ position: mk.position,
101
+ map: mapRef.current,
102
+ title: mk.title,
103
+ ...(mk.iconUrl ? { icon: { url: mk.iconUrl } } : {}),
104
+ });
105
+ if (onMarkerClick)
106
+ marker.addListener('click', () => onMarkerClick(mk));
107
+ return marker;
108
+ });
109
+ }
110
+ function fitBoundsIfNeeded() {
111
+ const shouldFit = (fitToMarkers ?? !center) && markers.length > 0 && mapRef.current;
112
+ if (!shouldFit || !mapRef.current) {
113
+ if (center && mapRef.current) {
114
+ mapRef.current.setCenter(center);
115
+ mapRef.current.setZoom(zoom);
116
+ }
117
+ return;
118
+ }
119
+ const g = window.google;
120
+ if (!g?.maps)
121
+ return;
122
+ const bounds = new g.maps.LatLngBounds();
123
+ markers.forEach(m => bounds.extend(m.position));
124
+ if (!bounds.isEmpty())
125
+ mapRef.current.fitBounds(bounds, 24);
126
+ }
127
+ return (_jsx(Box, { ref: containerRef, style: {
128
+ width: '100%',
129
+ height: '100%',
130
+ minHeight: 240,
131
+ borderRadius: 12,
132
+ overflow: 'hidden',
133
+ } }));
134
+ };
@@ -0,0 +1,3 @@
1
+ export * from './Map';
2
+ export * from './Map.props';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/Map/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Map';
2
+ export * from './Map.props';
@@ -1,11 +1,3 @@
1
- import { BoxProps } from '../Box';
2
- export type MetabaseProps = {
3
- source: string;
4
- style?: BoxProps['style'];
5
- } | {
6
- token: string;
7
- instanceUrl: string;
8
- style?: BoxProps['style'];
9
- };
1
+ import { MetabaseProps } from './Metabase.props';
10
2
  export declare const Metabase: (props: MetabaseProps) => import("react/jsx-runtime").JSX.Element | null;
11
3
  //# sourceMappingURL=Metabase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Metabase.d.ts","sourceRoot":"","sources":["../../../src/core/Metabase/Metabase.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC3B,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC3B,CAAC;AAEN,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,mDAiB5C,CAAC"}
1
+ {"version":3,"file":"Metabase.d.ts","sourceRoot":"","sources":["../../../src/core/Metabase/Metabase.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,mDAiB5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { BoxProps } from '../Box';
2
+ export type MetabaseProps = {
3
+ source: string;
4
+ style?: BoxProps['style'];
5
+ } | {
6
+ token: string;
7
+ instanceUrl: string;
8
+ style?: BoxProps['style'];
9
+ };
10
+ //# sourceMappingURL=Metabase.props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Metabase.props.d.ts","sourceRoot":"","sources":["../../../src/core/Metabase/Metabase.props.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC3B,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC3B,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -3,7 +3,7 @@ declare const _default: {
3
3
  tags: ["Kit"];
4
4
  experimental: true;
5
5
  description: string;
6
- component: (props: import("./Metabase").MetabaseProps) => import("react/jsx-runtime").JSX.Element | null;
6
+ component: (props: import("./Metabase.props").MetabaseProps) => import("react/jsx-runtime").JSX.Element | null;
7
7
  styleFn: () => {
8
8
  metabase: {
9
9
  height: 600 | "100%";
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { MetabaseProps } from './Metabase.props';
2
3
  declare global {
3
4
  namespace JSX {
4
5
  interface IntrinsicElements {
@@ -10,11 +11,5 @@ declare global {
10
11
  }
11
12
  }
12
13
  }
13
- export type MetabaseProps = {
14
- source: string;
15
- } | {
16
- token: string;
17
- instanceUrl: string;
18
- };
19
14
  export declare const Metabase: (props: MetabaseProps) => import("react/jsx-runtime").JSX.Element | null;
20
15
  //# sourceMappingURL=Metabase.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Metabase.web.d.ts","sourceRoot":"","sources":["../../../src/core/Metabase/Metabase.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,oBAAoB,EAAE,KAAK,CAAC,iBAAiB,CAC3C,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;gBAClC,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;aAC3B,EACD,WAAW,CACZ,CAAC;SACH;KACF;CACF;AAED,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEN,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,mDAoE5C,CAAC"}
1
+ {"version":3,"file":"Metabase.web.d.ts","sourceRoot":"","sources":["../../../src/core/Metabase/Metabase.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,oBAAoB,EAAE,KAAK,CAAC,iBAAiB,CAC3C,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;gBAClC,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;aAC3B,EACD,WAAW,CACZ,CAAC;SACH;KACF;CACF;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,mDAoE5C,CAAC"}
@@ -23,7 +23,7 @@ export declare const PageContentScrollable: React.ForwardRefExoticComponent<Pick
23
23
  scrollable?: boolean | "mobile-only" | "desktop-only";
24
24
  sidebar?: React.ReactNode;
25
25
  beforeContent?: React.ReactNode;
26
- sideBarController?: import("../../ui/Sidebar").SidebarController;
26
+ sideBarController?: import("../..").SidebarController;
27
27
  renderToolbar?: (options?: {
28
28
  isScrolled: boolean;
29
29
  }) => React.ReactNode;
@@ -0,0 +1,3 @@
1
+ import type { PdfViewerProps } from './PdfViewer.props';
2
+ export declare const PdfViewer: (props: PdfViewerProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=PdfViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/PdfViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,SAAS,GAAI,OAAO,cAAc,4CAiB9C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ActivityIndicator } from 'react-native';
3
+ import WebView from 'react-native-webview';
4
+ import { Box } from '../Box';
5
+ export const PdfViewer = (props) => {
6
+ const { source, headers } = props;
7
+ return (_jsx(Box, { flex: 1, children: _jsx(WebView, { source: { uri: source, headers }, startInLoadingState: true, renderLoading: () => (_jsx(Box, { flex: 1, "align-items": "center", "justify-content": "center", children: _jsx(ActivityIndicator, { size: "large" }) })), style: { flex: 1 } }) }));
8
+ };
@@ -0,0 +1,9 @@
1
+ export type PdfViewerProps = {
2
+ /** Source du PDF (URL ou blob URL) */
3
+ source: string;
4
+ /** Headers à passer pour l'authentification (uniquement pour mobile) */
5
+ headers?: Record<string, string>;
6
+ /** Titre du document (pour l'accessibilité) */
7
+ title?: string;
8
+ };
9
+ //# sourceMappingURL=PdfViewer.props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.props.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/PdfViewer.props.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ title: string;
3
+ tags: ["Composant"];
4
+ experimental: false;
5
+ description: string;
6
+ component: (props: import("./PdfViewer.props").PdfViewerProps) => import("react/jsx-runtime").JSX.Element;
7
+ styleFn: () => {};
8
+ };
9
+ export default _default;
10
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const WithHeaders: () => import("react/jsx-runtime").JSX.Element;
12
+ export declare const CustomTitle: () => import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=PdfViewer.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.stories.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/PdfViewer.stories.tsx"],"names":[],"mappings":";;;;;;;;AAKA,wBAOkB;AAIlB,eAAO,MAAM,OAAO,+CAInB,CAAC;AAEF,eAAO,MAAM,WAAW,+CAQvB,CAAC;AAEF,eAAO,MAAM,WAAW,+CAIvB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from '../Box';
3
+ import { PdfViewer } from './PdfViewer';
4
+ import { useStyles } from './PdfViewer.styles';
5
+ export default {
6
+ title: 'PdfViewer',
7
+ tags: ['Composant'],
8
+ experimental: false,
9
+ description: "Affichage d'un document PDF. Utilise un iframe sur web et WebView sur mobile.",
10
+ component: PdfViewer,
11
+ styleFn: useStyles,
12
+ };
13
+ const samplePdfUrl = 'https://upload.wikimedia.org/wikipedia/commons/1/13/Example.pdf';
14
+ export const Default = () => (_jsx(Box, { width: '100%', height: 600, children: _jsx(PdfViewer, { source: samplePdfUrl, title: "Document PDF exemple" }) }));
15
+ export const WithHeaders = () => (_jsx(Box, { width: '100%', height: 600, children: _jsx(PdfViewer, { source: samplePdfUrl, headers: { Authorization: 'Bearer example-token' }, title: "Document PDF avec headers" }) }));
16
+ export const CustomTitle = () => (_jsx(Box, { width: '100%', height: 600, children: _jsx(PdfViewer, { source: samplePdfUrl, title: "Mon document personnalis\u00E9" }) }));
@@ -0,0 +1,2 @@
1
+ export declare const useStyles: () => {};
2
+ //# sourceMappingURL=PdfViewer.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.styles.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/PdfViewer.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,UAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { makeStyles } from '@alveole/theme';
2
+ export const useStyles = makeStyles(() => ({}));
@@ -0,0 +1,3 @@
1
+ import type { PdfViewerProps } from './PdfViewer.props';
2
+ export declare const PdfViewer: (props: PdfViewerProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=PdfViewer.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.web.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/PdfViewer.web.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,SAAS,GAAI,OAAO,cAAc,4CAQ9C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from '../Box';
3
+ export const PdfViewer = (props) => {
4
+ const { source, title = 'Document PDF' } = props;
5
+ return (_jsx(Box, { flex: 1, children: _jsx("iframe", { src: source, style: { width: '100%', height: '100%', border: 'none' }, title: title }) }));
6
+ };
@@ -0,0 +1,3 @@
1
+ export * from './PdfViewer';
2
+ export * from './PdfViewer.props';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/PdfViewer/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './PdfViewer';
2
+ export * from './PdfViewer.props';
@@ -1,8 +1,10 @@
1
1
  export * from './A';
2
2
  export * from './Box';
3
3
  export * from './Image';
4
+ export * from './Map';
4
5
  export * from './Metabase';
5
6
  export * from './Page';
7
+ export * from './PdfViewer';
6
8
  export * from './Section';
7
9
  export * from './Typography';
8
10
  export * from './Version';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,KAAK,CAAC;AACpB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,KAAK,CAAC;AACpB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -1,8 +1,10 @@
1
1
  export * from './A';
2
2
  export * from './Box';
3
3
  export * from './Image';
4
+ export * from './Map';
4
5
  export * from './Metabase';
5
6
  export * from './Page';
7
+ export * from './PdfViewer';
6
8
  export * from './Section';
7
9
  export * from './Typography';
8
10
  export * from './Version';
@@ -1,12 +1,15 @@
1
1
  export * as AStory from '../core/A/A.stories';
2
2
  export * as BoxStory from '../core/Box/Box.stories';
3
3
  export * as ImageStory from '../core/Image/Image.stories';
4
+ export * as MapStory from '../core/Map/Map.stories';
4
5
  export * as MetabaseStory from '../core/Metabase/Metabase.stories';
5
6
  export * as PageStory from '../core/Page/Page.stories';
7
+ export * as PdfViewerStory from '../core/PdfViewer/PdfViewer.stories';
6
8
  export * as SectionStory from '../core/Section/Section.stories';
7
9
  export * as TypographyStory from '../core/Typography/Typography.stories';
8
10
  export * as VersionStory from '../core/Version/Version.stories';
9
11
  export * as AvatarStory from '../ui/Avatar/Avatar.stories';
12
+ export * as BadgeStory from '../ui/Badge/Badge.stories';
10
13
  export * as BreadcrumbsStory from '../ui/Breadcrumbs/Breadcrumbs.stories';
11
14
  export * as ButtonStory from '../ui/Button/Button.stories';
12
15
  export * as CardStory from '../ui/Card/Card.stories';
@@ -16,6 +19,8 @@ export * as ListItemStory from '../ui/ListItem/ListItem.stories';
16
19
  export * as LucideIconStory from '../ui/LucideIcon/LucideIcon.stories';
17
20
  export * as PageHeaderStory from '../ui/PageHeader/PageHeader.stories';
18
21
  export * as ResourceListStory from '../ui/ResourceList/ResourceList.stories';
22
+ export * as SidebarStory from '../ui/Sidebar/Sidebar.stories';
23
+ export * as TagStory from '../ui/Tag/Tag.stories';
19
24
  export * as ToolbarBottomNavStory from '../ui/ToolbarBottomNav/ToolbarBottomNav.stories';
20
25
  export * as ToolbarTopStory from '../ui/ToolbarTop/ToolbarTop.stories';
21
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stories/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,eAAe,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAGhE,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,gBAAgB,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,aAAa,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,qBAAqB,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stories/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,eAAe,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAGhE,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,gBAAgB,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,aAAa,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,qBAAqB,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC"}