@dyrected/admin 2.5.60 → 2.5.62
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/admin.css +53 -0
- package/dist/components/document-meta.d.ts +9 -0
- package/dist/components/forms/form-engine.d.ts +5 -0
- package/dist/components/live-preview/LivePreviewPane.d.ts +5 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/command.d.ts +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.mjs +1076 -231
- package/dist/lib/format.d.ts +77 -0
- package/dist/lib/format.test.d.ts +1 -0
- package/dist/providers/dyrected-provider.d.ts +2 -2
- package/dist/types/admin-components.d.ts +21 -11
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -3,9 +3,9 @@ import React, { Component, StrictMode, createContext, createElement, useCallback
|
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
4
|
import { HashRouter, Link, MemoryRouter, Route, Routes, useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom";
|
|
5
5
|
import { QueryClient, QueryClientProvider, keepPreviousData, useInfiniteQuery, useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
6
|
-
import { createClient } from "@dyrected/sdk";
|
|
6
|
+
import { DyrectedError, PREVIEW_TOKEN_PARAM, createClient } from "@dyrected/sdk";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { AlertCircle, AlertTriangle, AlignCenter, AlignLeft, AlignRight, Archive, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpRight, Bold, Braces, Calendar, Check, CheckCircle, CheckCircle2, ChevronDown, ChevronLeft, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronUp, ChevronsUpDown, Circle, Clock, Clock3, Code, Copy, Database, Download, ExternalLink, Eye, EyeOff, FileDown, FileIcon, FileText, FileUp, Filter, Globe, GripVertical, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, Home, Image as Image$1, Info, Italic, KeyRound, Layers, LayoutDashboard, LayoutGrid, Library, Link as Link$1, List, ListOrdered, Loader2, Lock, LogOut, Mail, Menu, Monitor, Moon, MoreHorizontal, MousePointer2, PanelLeftClose, PanelLeftOpen, Pencil, Play, Plus, Quote, RotateCcw, Save, Scissors, Search, Settings, Settings2, Share2, Shield, Smartphone, Sparkles, Strikethrough, Sun, Table, Trash2, Underline, Undo2, Upload, UploadCloud, Users, Video, Volume2, Workflow, X, XCircle, icons } from "lucide-react";
|
|
8
|
+
import { AlertCircle, AlertTriangle, AlignCenter, AlignLeft, AlignRight, Archive, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpRight, Bold, Braces, Calendar, Check, CheckCircle, CheckCircle2, ChevronDown, ChevronLeft, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronUp, ChevronsUpDown, Circle, Clock, Clock3, Code, Copy, Database, Download, ExternalLink, Eye, EyeOff, FileDown, FileIcon, FileText, FileUp, Filter, Globe, GripVertical, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, History, Home, Image as Image$1, Info, Italic, KeyRound, Layers, LayoutDashboard, LayoutGrid, Library, Link as Link$1, List, ListOrdered, Loader2, Lock, LogOut, Mail, Menu, Monitor, Moon, MoreHorizontal, MousePointer2, PanelLeftClose, PanelLeftOpen, Pencil, Play, Plus, Quote, RotateCcw, Save, Scissors, Search, Settings, Settings2, Share2, Shield, Smartphone, Sparkles, Star, Strikethrough, Sun, Table, Trash2, Underline, Undo2, Upload, UploadCloud, Users, Video, Volume2, Workflow, X, XCircle, icons } from "lucide-react";
|
|
9
9
|
import { clsx } from "clsx";
|
|
10
10
|
import { extendTailwindMerge } from "tailwind-merge";
|
|
11
11
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
@@ -67,6 +67,35 @@ function useDyrected() {
|
|
|
67
67
|
}
|
|
68
68
|
//#endregion
|
|
69
69
|
//#region src/providers/dyrected-provider.tsx
|
|
70
|
+
function resolveBlock(block, registry) {
|
|
71
|
+
return {
|
|
72
|
+
...block,
|
|
73
|
+
fields: block.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function resolveFieldBlocks(field, registry) {
|
|
77
|
+
const next = { ...field };
|
|
78
|
+
if (next.fields) next.fields = next.fields.map((child) => resolveFieldBlocks(child, registry));
|
|
79
|
+
if (next.type === "blocks" && next.blockReferences?.length) {
|
|
80
|
+
next.blocks = next.blockReferences.map((slug) => registry.get(slug)).filter((block) => !!block);
|
|
81
|
+
next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
|
|
82
|
+
} else if (next.blocks) next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
|
|
83
|
+
return next;
|
|
84
|
+
}
|
|
85
|
+
function resolveSchemas(schema) {
|
|
86
|
+
const registry = new Map((schema.blocks ?? []).map((block) => [block.slug, block]));
|
|
87
|
+
return {
|
|
88
|
+
...schema,
|
|
89
|
+
collections: schema.collections.map((collection) => ({
|
|
90
|
+
...collection,
|
|
91
|
+
fields: collection.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
92
|
+
})),
|
|
93
|
+
globals: schema.globals.map((global) => ({
|
|
94
|
+
...global,
|
|
95
|
+
fields: global.fields.map((field) => resolveFieldBlocks(field, registry))
|
|
96
|
+
}))
|
|
97
|
+
};
|
|
98
|
+
}
|
|
70
99
|
function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBaseUrl, siteId: initialSiteId, initialToken, defaultTechStack, components }) {
|
|
71
100
|
const [baseUrl, setBaseUrl] = useState(() => initialBaseUrl || (typeof window !== "undefined" ? localStorage.getItem("dyrected_url") : null) || "");
|
|
72
101
|
const [apiKey, setApiKey] = useState(() => initialApiKey || (typeof window !== "undefined" ? localStorage.getItem("dyrected_key") : null) || void 0);
|
|
@@ -94,7 +123,8 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
94
123
|
};
|
|
95
124
|
client.getSchemas().then((nextSchemas) => {
|
|
96
125
|
if (cancelled) return;
|
|
97
|
-
|
|
126
|
+
const resolved = resolveSchemas(nextSchemas);
|
|
127
|
+
setSchemas((prev) => prev === resolved ? prev : resolved);
|
|
98
128
|
}, (err) => {
|
|
99
129
|
if (cancelled) return;
|
|
100
130
|
console.error("Failed to fetch schemas:", err);
|
|
@@ -108,6 +138,16 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
108
138
|
useEffect(() => {
|
|
109
139
|
if (initialToken && client) client.setToken(initialToken);
|
|
110
140
|
}, [initialToken, client]);
|
|
141
|
+
const clearPersistedAuthState = useCallback((nextClient) => {
|
|
142
|
+
localStorage.removeItem("dyrected_token");
|
|
143
|
+
localStorage.removeItem("dyrected_admin_auth_collection");
|
|
144
|
+
(nextClient ?? client)?.clearToken();
|
|
145
|
+
setAuthCollectionSlug(null);
|
|
146
|
+
setUser(null);
|
|
147
|
+
}, [client]);
|
|
148
|
+
const shouldClearStoredAuth = useCallback((error) => {
|
|
149
|
+
return error instanceof DyrectedError && (error.statusCode === 401 || error.statusCode === 404);
|
|
150
|
+
}, []);
|
|
111
151
|
const setAuth = useCallback((newUrl, newKey, newSiteId) => {
|
|
112
152
|
localStorage.setItem("dyrected_url", newUrl);
|
|
113
153
|
localStorage.setItem("dyrected_key", newKey);
|
|
@@ -119,11 +159,7 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
119
159
|
}, []);
|
|
120
160
|
const setToken = useCallback((token, collectionSlug) => {
|
|
121
161
|
if (!token) {
|
|
122
|
-
|
|
123
|
-
localStorage.removeItem("dyrected_admin_auth_collection");
|
|
124
|
-
if (client) client.clearToken();
|
|
125
|
-
setAuthCollectionSlug(null);
|
|
126
|
-
setUser(null);
|
|
162
|
+
clearPersistedAuthState(client);
|
|
127
163
|
return;
|
|
128
164
|
}
|
|
129
165
|
const resolvedCollectionSlug = collectionSlug || authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
@@ -134,12 +170,20 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
134
170
|
}
|
|
135
171
|
if (client) {
|
|
136
172
|
client.setToken(token);
|
|
137
|
-
if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () =>
|
|
173
|
+
if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
|
|
174
|
+
if (shouldClearStoredAuth(error)) {
|
|
175
|
+
clearPersistedAuthState(client);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
setUser(null);
|
|
179
|
+
});
|
|
138
180
|
}
|
|
139
181
|
}, [
|
|
140
182
|
authCollectionSlug,
|
|
183
|
+
clearPersistedAuthState,
|
|
141
184
|
client,
|
|
142
|
-
schemas
|
|
185
|
+
schemas,
|
|
186
|
+
shouldClearStoredAuth
|
|
143
187
|
]);
|
|
144
188
|
useEffect(() => {
|
|
145
189
|
if (initialToken || !client || !schemas || activeUser) return;
|
|
@@ -147,21 +191,39 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
|
|
|
147
191
|
const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
148
192
|
if (!token || !resolvedCollectionSlug) return;
|
|
149
193
|
client.setToken(token);
|
|
150
|
-
client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () =>
|
|
194
|
+
client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
|
|
195
|
+
if (shouldClearStoredAuth(error)) {
|
|
196
|
+
clearPersistedAuthState(client);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
setUser(null);
|
|
200
|
+
});
|
|
151
201
|
}, [
|
|
152
202
|
activeUser,
|
|
153
203
|
authCollectionSlug,
|
|
204
|
+
clearPersistedAuthState,
|
|
154
205
|
client,
|
|
155
206
|
initialToken,
|
|
156
|
-
schemas
|
|
207
|
+
schemas,
|
|
208
|
+
shouldClearStoredAuth
|
|
157
209
|
]);
|
|
158
210
|
const logout = useCallback(() => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
211
|
+
(async () => {
|
|
212
|
+
const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
|
|
213
|
+
try {
|
|
214
|
+
if (client && resolvedCollectionSlug) await client.collection(resolvedCollectionSlug).logout();
|
|
215
|
+
} catch (error) {
|
|
216
|
+
console.warn("Failed to revoke admin session during logout:", error);
|
|
217
|
+
} finally {
|
|
218
|
+
clearPersistedAuthState(client);
|
|
219
|
+
}
|
|
220
|
+
})();
|
|
221
|
+
}, [
|
|
222
|
+
authCollectionSlug,
|
|
223
|
+
clearPersistedAuthState,
|
|
224
|
+
client,
|
|
225
|
+
schemas
|
|
226
|
+
]);
|
|
165
227
|
return /* @__PURE__ */ jsx(DyrectedContext.Provider, {
|
|
166
228
|
value: {
|
|
167
229
|
client,
|
|
@@ -387,26 +449,36 @@ function BrandingProvider({ children }) {
|
|
|
387
449
|
const branding = schemas?.admin?.branding;
|
|
388
450
|
return /* @__PURE__ */ jsxs(Fragment, { children: [useMemo(() => {
|
|
389
451
|
const hasCustomPrimary = Boolean(branding?.primaryColor);
|
|
452
|
+
const hasCustomAccent = Boolean(branding?.accentColor);
|
|
390
453
|
const primaryHsl = toRawHsl(branding?.primaryColor || "#B6FF2E");
|
|
391
|
-
const
|
|
454
|
+
const accentHsl = hasCustomAccent ? toRawHsl(branding.accentColor) : hasCustomPrimary ? primaryHsl : "259 100% 62%";
|
|
392
455
|
const fg = primaryForeground(primaryHsl);
|
|
456
|
+
const tokens = `
|
|
457
|
+
--primary: ${primaryHsl};
|
|
458
|
+
--primary-foreground: ${fg};
|
|
459
|
+
--intelligence: ${accentHsl};
|
|
460
|
+
--accent-foreground: ${accentHsl};
|
|
461
|
+
--sidebar-primary: ${primaryHsl};
|
|
462
|
+
--sidebar-primary-foreground: ${fg};
|
|
463
|
+
--sidebar-accent-foreground: ${accentHsl};
|
|
464
|
+
--sidebar-ring: ${accentHsl};
|
|
465
|
+
--ring: ${accentHsl} / 0.24;
|
|
466
|
+
${branding?.fontSans ? `--font-sans: ${branding.fontSans};` : ""}
|
|
467
|
+
${branding?.fontSerif ? `--font-serif: ${branding.fontSerif};` : ""}
|
|
468
|
+
`;
|
|
393
469
|
return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: `
|
|
394
|
-
.dy-admin-ui {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
--sidebar-ring: ${intelligenceHsl};
|
|
403
|
-
--ring: ${intelligenceHsl} / 0.24;
|
|
404
|
-
${branding?.fontSans ? `--font-sans: ${branding.fontSans};` : ""}
|
|
405
|
-
${branding?.fontSerif ? `--font-serif: ${branding.fontSerif};` : ""}
|
|
406
|
-
}
|
|
470
|
+
.dy-admin-ui { ${tokens} }
|
|
471
|
+
/* Repeat under the dark selectors so brand colours also apply in dark
|
|
472
|
+
mode. The base stylesheet's \`.dy-admin-ui.dark\` sets its own
|
|
473
|
+
--primary/--intelligence at the same specificity; matching that
|
|
474
|
+
specificity here (and coming later in source order) lets the brand
|
|
475
|
+
colours win in dark mode too. */
|
|
476
|
+
.dy-admin-ui.dark,
|
|
477
|
+
.dy-admin-ui[data-theme="dark"] { ${tokens} }
|
|
407
478
|
` } });
|
|
408
479
|
}, [
|
|
409
480
|
branding?.primaryColor,
|
|
481
|
+
branding?.accentColor,
|
|
410
482
|
branding?.fontSans,
|
|
411
483
|
branding?.fontSerif
|
|
412
484
|
]), children] });
|
|
@@ -744,7 +816,8 @@ function SidebarInner({ schemas, isLoading, location, logout, isEmbedded, collap
|
|
|
744
816
|
className: "dy-px-3 dy-mb-1.5 dy-text-[10px] dy-font-semibold dy-uppercase dy-tracking-widest dy-text-muted-foreground/50",
|
|
745
817
|
children: text
|
|
746
818
|
}) : /* @__PURE__ */ jsx("div", { className: "dy-my-2 dy-mx-3 dy-h-px dy-bg-border" });
|
|
747
|
-
const branding =
|
|
819
|
+
const branding = schemas?.admin?.branding;
|
|
820
|
+
const meta = schemas?.admin?.meta;
|
|
748
821
|
return /* @__PURE__ */ jsxs("div", {
|
|
749
822
|
className: "dy-flex dy-flex-col dy-min-h-screen",
|
|
750
823
|
children: [
|
|
@@ -775,7 +848,7 @@ function SidebarInner({ schemas, isLoading, location, logout, isEmbedded, collap
|
|
|
775
848
|
})
|
|
776
849
|
}), !collapsed && !branding?.logoText && /* @__PURE__ */ jsx("span", {
|
|
777
850
|
className: "dy-font-serif dy-text-lg dy-tracking-tight dy-text-foreground dy-flex-1 dy-truncate",
|
|
778
|
-
children:
|
|
851
|
+
children: meta?.titleSuffix?.replace(/^- /, "") || ""
|
|
779
852
|
})] }) })
|
|
780
853
|
}),
|
|
781
854
|
/* @__PURE__ */ jsxs("nav", {
|
|
@@ -965,7 +1038,7 @@ function isNewerVersion(latest, current) {
|
|
|
965
1038
|
return false;
|
|
966
1039
|
}
|
|
967
1040
|
function useUpdateCheck() {
|
|
968
|
-
const currentVersion = "2.5.
|
|
1041
|
+
const currentVersion = "2.5.62";
|
|
969
1042
|
const [updateInfo, setUpdateInfo] = useState(() => {
|
|
970
1043
|
if (typeof window === "undefined") return null;
|
|
971
1044
|
const cacheKey = "dyrected_latest_release";
|
|
@@ -1011,7 +1084,7 @@ function useUpdateCheck() {
|
|
|
1011
1084
|
return updateInfo;
|
|
1012
1085
|
}
|
|
1013
1086
|
function AdminShell({ children, isEmbedded = false }) {
|
|
1014
|
-
const { client, logout
|
|
1087
|
+
const { client, logout } = useDyrected();
|
|
1015
1088
|
const location = useLocation();
|
|
1016
1089
|
const updateInfo = useUpdateCheck();
|
|
1017
1090
|
const [collapsed, setCollapsed] = useState(false);
|
|
@@ -1043,7 +1116,6 @@ function AdminShell({ children, isEmbedded = false }) {
|
|
|
1043
1116
|
},
|
|
1044
1117
|
enabled: !!client
|
|
1045
1118
|
});
|
|
1046
|
-
const mobileBranding = (schemas?.admin)?.branding;
|
|
1047
1119
|
return /* @__PURE__ */ jsx(BrandingProvider, { children: /* @__PURE__ */ jsx(SidebarControlProvider, {
|
|
1048
1120
|
value: sidebarControl,
|
|
1049
1121
|
children: /* @__PURE__ */ jsxs("div", {
|
|
@@ -1094,39 +1166,12 @@ function AdminShell({ children, isEmbedded = false }) {
|
|
|
1094
1166
|
}),
|
|
1095
1167
|
/* @__PURE__ */ jsxs("main", {
|
|
1096
1168
|
className: "dy-flex-1 dy-min-w-0 dy-overflow-auto dy-flex dy-flex-col dy-relative dy-bg-background/95",
|
|
1097
|
-
children: [!isEmbedded && /* @__PURE__ */
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
children: mobileBranding.logoText
|
|
1104
|
-
}) : mobileBranding?.logo ? /* @__PURE__ */ jsx("img", {
|
|
1105
|
-
src: getMediaUrl(mobileBranding.logo, client?.getBaseUrl() || ""),
|
|
1106
|
-
alt: "Logo",
|
|
1107
|
-
className: "dy-h-7 dy-w-auto dy-object-contain"
|
|
1108
|
-
}) : /* @__PURE__ */ jsx("img", {
|
|
1109
|
-
src: "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='75%20408%20880%20200'%20width='1024'%20height='320'%3e%3cpath%20d='M0%200%20C80.77777778%200%2080.77777778%200%20104.25%2016.25%20C110.41149028%2022.41149028%20115.8130796%2029.84774381%20119%2038%20C119.37125%2038.93457031%20119.7425%2039.86914062%20120.125%2040.83203125%20C125.97853191%2057.96580693%20124.38837118%2076.7725057%20116.9375%2093.0625%20C109.56325726%20107.53398146%2097.58992255%20116.7156145%2082.375%20121.875%20C71.26222779%20125.44607062%2060.56671647%20126.28755488%2048.92578125%20126.1953125%20C47.67873413%20126.19329834%2046.43168701%20126.19128418%2045.14685059%20126.18920898%20C40.53536241%20126.17882812%2035.9239271%20126.15090625%2031.3125%20126.125%20C20.979375%20126.08375%2010.64625%20126.0425%200%20126%20C0%2084.42%200%2042.84%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(94,437)'/%3e%3cpath%20d='M0%200%20C2.71975521%200.35943901%203.84341638%200.83999752%205.7890625%202.828125%20C6.39492188%203.62734375%207.00078125%204.4265625%207.625%205.25%20C8.3159375%206.14847656%209.006875%207.04695313%209.71875%207.97265625%20C10.4715625%208.97167969%2011.224375%209.97070312%2012%2011%20C13.27334297%2012.66801941%2014.55020731%2014.33328608%2015.828125%2015.99780273%20C16.68920631%2017.1197048%2017.54859726%2018.24290639%2018.40625%2019.36743164%20C20.72359821%2022.39401514%2023.10162467%2025.33084868%2025.625%2028.1875%20C28%2031%2028%2031%2028%2033%20C24.04%2033%2020.08%2033%2016%2033%20C16%2036.96%2016%2040.92%2016%2045%20C23.92%2045%2031.84%2045%2040%2045%20C40%2052.26%2040%2059.52%2040%2067%20C32.08%2067%2024.16%2067%2016%2067%20C16.05110565%2073.01513491%2016.11411805%2079.02770699%2016.20751953%2085.04199219%20C16.23569066%2087.08650395%2016.25692435%2089.13112384%2016.27099609%2091.17578125%20C16.29247887%2094.12035322%2016.3391569%2097.06363041%2016.390625%20100.0078125%20C16.39185364%20100.9174173%2016.39308228%20101.82702209%2016.39434814%20102.76419067%20C16.52453003%20108.44478815%2017.27045802%20111.64305028%2021%20116%20C25.45146778%20118.22573389%2031.49130269%20117.61284521%2036.22265625%20116.45703125%20C43.02192732%20113.57781706%2047.39900966%20107.25297069%2051.15625%20101.109375%20C56.12293503%2093.05732503%2066.02505874%2086.96170223%2075%2084.4375%20C75.99%2084.2209375%2075.99%2084.2209375%2077%2084%20C77.76934372%2083.82831802%2078.53868744%2083.65663605%2079.3313446%2083.47975159%20C81.85956507%2083.02524638%2084.13490112%2082.87925324%2086.69848633%2082.88647461%20C88.0493206%2082.88658791%2088.0493206%2082.88658791%2089.42744446%2082.88670349%20C90.3859581%2082.89186478%2091.34447174%2082.89702606%2092.33203125%2082.90234375%20C93.32377853%2082.9037587%2094.31552582%2082.90517365%2095.33732605%2082.90663147%20C98.49574843%2082.91221582%20101.65409915%2082.92476548%20104.8125%2082.9375%20C106.95768127%2082.94251702%20109.10286365%2082.94707958%20111.24804688%2082.95117188%20C116.49872224%2082.96218012%20121.749356%2082.9789027%20127%2083%20C126.41627107%2081.40206803%20125.81844039%2079.8092836%20125.21484375%2078.21875%20C124.88347412%2077.33123047%20124.55210449%2076.44371094%20124.21069336%2075.52929688%20C121.96215073%2070.83179705%20118.27353717%2068.10625131%20113.671875%2065.8671875%20C107.40145998%2063.8320528%2099.62475654%2063.83565488%2093.5625%2066.5625%20C90.74762291%2068.18758368%2089.23412527%2069.92734346%2087.375%2072.5625%20C83.79694231%2077.15174791%2079.16997757%2077.25826651%2073.6875%2078.1875%20C67.93513917%2079.45496934%2063.11247292%2082.15885793%2058%2085%20C56.67024353%2085.67377293%2055.33832199%2086.34340541%2054%2087%20C54.53283313%2074.23864658%2059.85622582%2063.62873005%2069.125%2054.8125%20C79.48783101%2046.05739319%2090.98874912%2042.60318009%20104.3125%2042.6875%20C105.24167236%2042.69313965%20106.17084473%2042.6987793%20107.12817383%2042.70458984%20C120.80891332%2042.94676927%20132.08138441%2047.30179809%20142%2057%20C150.69408674%2067.01964256%20154.41434505%2078.42703622%20154.12890625%2091.5%20C154.11960083%2092.32242188%20154.11029541%2093.14484375%20154.10070801%2093.9921875%20C154.07669258%2095.99492902%20154.03971288%2097.99750824%20154%20100%20C153.20788116%20100.00142502%20152.41576233%20100.00285004%20151.59963989%20100.00431824%20C144.09719277%20100.0222236%20136.5954255%20100.06405798%20129.09327888%20100.13209057%20C125.23723861%20100.16623308%20121.38158914%20100.19145048%20117.52539062%20100.19555664%20C113.79674299%20100.1998673%20110.06897502%20100.22855506%20106.34060287%20100.27343178%20C104.9254661%20100.2863193%20103.51022356%20100.29074578%20102.09503555%20100.28615379%20C90.97909255%20100.25851196%2082.24496399%20102.13674731%2074%20110%20C72.693186%20111.68664002%2071.44412084%20113.4192826%2070.25%20115.1875%20C60.98713546%20128.13484969%2049.31550166%20137.60492408%2033.359375%20140.6015625%20C22.09111259%20141.93803083%2011.94495066%20141.67673859%201.8125%20136.3125%20C-6.21093351%20129.71545467%20-11.15550672%20122.32419258%20-13%20112%20C-13.25198192%20108.45441218%20-13.23420464%20104.92803422%20-13.1953125%20101.375%20C-13.1924826%20100.38749756%20-13.18965271%2099.39999512%20-13.18673706%2098.38256836%20C-13.1756182%2095.25491785%20-13.15052916%2092.12756272%20-13.125%2089%20C-13.11495948%2086.86849374%20-13.10583551%2084.73698296%20-13.09765625%2082.60546875%20C-13.07570607%2077.4035335%20-13.04123391%2072.20181669%20-13%2067%20C-17.95%2067%20-22.9%2067%20-28%2067%20C-28%2059.74%20-28%2052.48%20-28%2045%20C-25.11584117%2043.55792059%20-22.58278472%2043.90605113%20-19.375%2043.9375%20C-18.18648437%2043.94652344%20-16.99796875%2043.95554687%20-15.7734375%2043.96484375%20C-14.85820313%2043.97644531%20-13.94296875%2043.98804688%20-13%2044%20C-13%2040.37%20-13%2036.74%20-13%2033%20C-16.63%2033%20-20.26%2033%20-24%2033%20C-22.47026072%2029.1756518%20-21.7364866%2027.36138218%20-19.27734375%2024.43359375%20C-18.74262451%2023.78841797%20-18.20790527%2023.14324219%20-17.65698242%2022.47851562%20C-16.80583862%2021.46821289%20-16.80583862%2021.46821289%20-15.9375%2020.4375%20C-10.41141017%2013.76832013%20-5.12012996%206.98560367%200%200%20Z%20'%20fill='%23B6FF2E'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C29.59839035%2022.9781895%2028.74526871%2040.62390375%2012.65625%2058.3359375%20C11%2060%2011%2060%208.4375%2062%20C5.46025693%2064.44286611%203.51309236%2067.23700629%201.33203125%2070.390625%20C0.89246094%2070.92171875%200.45289063%2071.4528125%200%2072%20C-0.66%2072%20-1.32%2072%20-2%2072%20C-2.93987733%2070.55661697%20-3.87796552%2069.11202069%20-4.8046875%2067.66015625%20C-8.25891165%2062.86262271%20-12.44079328%2060.54083019%20-18%2059%20C-25.38567118%2058.11965024%20-31.79640485%2058.30895235%20-38.12890625%2062.45703125%20C-43.93075089%2067.24143341%20-46.08004443%2072.64035542%20-47%2080%20C-47.62384022%2087.86038675%20-46.29060096%2095.4983732%20-41.375%20101.875%20C-36.78559554%20106.66837799%20-31.1204383%20109.16020416%20-24.5%20109.4375%20C-17.63097442%20109.06652475%20-10.76252345%20107.03884639%20-5.6171875%20102.3203125%20C-2.88904376%2098.40601931%20-1.66280214%2093.9535236%20-0.1809082%2089.45141602%20C3.35486261%2078.72166264%208.74872668%2071.79757179%2016.88671875%2064.08325195%20C20.82961215%2060.32870988%2023.90074122%2056.47544342%2027%2052%20C27.33%2052%2027.66%2052%2028%2052%20C28%2078.4%2028%20104.8%2028%20132%20C19.42%20132%2010.84%20132%202%20132%20C2%20128.37%202%20124.74%202%20121%20C1.34%20121%200.68%20121%200%20121%20C-0.495%20122.485%20-0.495%20122.485%20-1%20124%20C-12.73711711%20132.94256542%20-25.06338231%20134.43156199%20-39.3125%20132.56640625%20C-51.92494538%20129.92239101%20-62.18469132%20122.09849232%20-69.1875%20111.4375%20C-76.64035884%2098.17021241%20-78.4709381%2082.69085036%20-74.375%2068.0625%20C-69.54605076%2054.5211808%20-61.09321667%2044.22524607%20-48%2038%20C-41.32156484%2035.17823273%20-35.2722462%2034.50746377%20-28.0625%2034.5625%20C-27.13759766%2034.54251953%20-26.21269531%2034.52253906%20-25.25976562%2034.50195312%20C-15.04309922%2034.50911267%20-8.83524108%2037.47063244%20-1%2044%20C-0.67%2029.48%20-0.34%2014.96%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(902,431)'/%3e%3cpath%20d='M0%200%20C1.98755052%201.41100915%203.72130576%202.89802373%205.484375%204.578125%20C6.38349609%205.34576172%206.38349609%205.34576172%207.30078125%206.12890625%20C15.92373572%2013.93240069%2020.74453573%2025.07362429%2021.484375%2036.578125%20C21.60509121%2040.91384903%2021.70071786%2045.24490485%2021.484375%2049.578125%20C20.484375%2050.578125%2020.484375%2050.578125%2017.63072205%2050.69837952%20C16.35387039%2050.69615891%2015.07701874%2050.69393829%2013.76147461%2050.69165039%20C13.0590715%2050.69179642%2012.3566684%2050.69194244%2011.63298035%2050.6920929%20C9.30086222%2050.69139372%206.968823%2050.68360117%204.63671875%2050.67578125%20C3.02389062%2050.67391708%201.41106193%2050.67249318%20-0.20176697%2050.67149353%20C-4.45477857%2050.66766823%20-8.70775624%2050.65783785%20-12.96075439%2050.64678955%20C-17.2973993%2050.63657569%20-21.63404967%2050.63199596%20-25.97070312%2050.62695312%20C-34.48569269%2050.61621559%20-43.00065463%2050.59913903%20-51.515625%2050.578125%20C-50.76310085%2052.01068418%20-50.00072966%2053.43807287%20-49.234375%2054.86328125%20C-48.81091797%2055.65871338%20-48.38746094%2056.45414551%20-47.95117188%2057.27368164%20C-44.77728619%2062.36863181%20-40.24267716%2065.83885608%20-34.515625%2067.578125%20C-24.44648111%2068.75306138%20-13.88210791%2068.97920567%20-5.515625%2062.578125%20C-4.49191978%2061.60240597%20-3.48336669%2060.60937474%20-2.515625%2059.578125%20C0.41667693%2060.89933328%202.47102399%2062.32450697%204.71875%2064.6171875%20C5.29238281%2065.19726562%205.86601562%2065.77734375%206.45703125%2066.375%20C7.04355469%2066.97828125%207.63007813%2067.5815625%208.234375%2068.203125%20C8.83636719%2068.81414062%209.43835938%2069.42515625%2010.05859375%2070.0546875%20C11.53842805%2071.55801124%2013.01202176%2073.06747356%2014.484375%2074.578125%20C6.88082899%2084.58279081%20-3.31152864%2089.39611981%20-15.515625%2091.578125%20C-19.0759833%2091.8143607%20-22.63564692%2091.80900924%20-26.203125%2091.828125%20C-27.61754883%2091.8590625%20-27.61754883%2091.8590625%20-29.06054688%2091.890625%20C-43.17549414%2091.96823296%20-55.10728015%2086.56442315%20-65.26171875%2076.88671875%20C-75.61516851%2066.28205877%20-79.89439154%2053.46530582%20-79.73046875%2038.73046875%20C-78.80311822%2025.12370731%20-72.27652509%2013.81184063%20-62.515625%204.578125%20C-45.29287927%20-9.47756591%20-19.26149726%20-10.88693323%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(493.515625,472.421875)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C31.88545714%206.3480057%2034.74623297%2012.64267461%2037.375%2019.08984375%20C37.66681152%2019.80048477%2037.95862305%2020.51112579%2038.25927734%2021.24330139%20C39.17479456%2023.47391024%2040.08751229%2025.70565039%2041%2027.9375%20C41.60917627%2029.42390959%2042.2185503%2030.91023814%2042.828125%2032.39648438%20C43.27551025%2033.48759018%2043.27551025%2033.48759018%2043.73193359%2034.60073853%20C44.32289018%2036.04103366%2044.91435386%2037.48112086%2045.50634766%2038.92098999%20C46.83058613%2042.14243669%2048.14705044%2045.36608605%2049.4453125%2048.59814453%20C49.87585938%2049.6601709%2050.30640625%2050.72219727%2050.75%2051.81640625%20C51.11609375%2052.7297876%2051.4821875%2053.64316895%2051.859375%2054.58422852%20C52.99948383%2056.99890679%2054.32194326%2058.93105971%2056%2061%20C63.85224401%2042.59935141%2063.85224401%2042.59935141%2071.375%2024.0625%20C74.61034321%2015.88404588%2078.06515289%207.86969422%2082%200%20C90.91%200%2099.82%200%20109%200%20C105.62156917%2011.2614361%20105.62156917%2011.2614361%20103.94921875%2015.33203125%20C103.57990234%2016.23373047%20103.21058594%2017.13542969%20102.83007812%2018.06445312%20C102.45302734%2018.97130859%20102.07597656%2019.87816406%20101.6875%2020.8125%20C101.13932617%2022.15538086%20101.13932617%2022.15538086%20100.58007812%2023.52539062%20C98.52888864%2028.50280206%2096.36531611%2033.41002468%2094.08984375%2038.2890625%20C91.12034683%2044.67044212%2088.37355778%2051.13053761%2085.67678833%2057.63122559%20C84.27693812%2061.00305678%2082.86621358%2064.37034217%2081.45703125%2067.73828125%20C81.17043137%2068.42368988%2080.88383148%2069.10909851%2080.58854675%2069.8152771%20C77.59723903%2076.96761949%2074.59243132%2084.11392962%2071.5625%2091.25%20C71.09118652%2092.37220947%2070.61987305%2093.49441895%2070.13427734%2094.65063477%20C64.14372759%20108.71158026%2057.88097216%20122.54500294%2043.26171875%20129.16015625%20C32.99566383%20132.97224918%2018.99532524%20132.39132855%209%20128%20C6.27254605%20126.74842163%203.64641133%20125.4212209%201%20124%20C1.6411928%20121.09325931%202.56662682%20118.57468666%203.84765625%20115.890625%20C4.38422852%20114.75947266%204.38422852%20114.75947266%204.93164062%20113.60546875%20C5.30482422%20112.82816406%205.67800781%20112.05085937%206.0625%20111.25%20C6.62807617%20110.06083984%206.62807617%20110.06083984%207.20507812%20108.84765625%20C8.13345839%20106.89688254%209.06629544%20104.94823094%2010%20103%20C12.57030771%20104.02467879%2015.13501673%20105.05651863%2017.6875%20106.125%20C23.13926051%20107.56508768%2028.53393046%20107.91137353%2033.875%20105.9375%20C36.67992585%20103.3800676%2038.90092755%20100.67546954%2040%2097%20C39.51255272%2092.02739581%2037.81323979%2087.84336435%2035.75390625%2083.34765625%20C35.42739075%2082.61970352%2035.10087524%2081.89175079%2034.76446533%2081.14173889%20C34.06574374%2079.58604999%2033.36386031%2078.03177798%2032.65908813%2076.4788208%20C31.54929238%2074.03339714%2030.44768068%2071.58443912%2029.34838867%2069.13427734%20C28.24699442%2066.67954634%2027.14520032%2064.22500817%2026.04084778%2061.77160645%20C22.05427867%2052.9145598%2018.19057599%2044.00588863%2014.33935547%2035.08935547%20C13.03927819%2032.09059902%2011.73151205%2029.09532776%2010.42124939%2026.10101318%20C9.20378396%2023.3178069%207.98924352%2020.53332878%206.7749939%2017.74871826%20C6.17859872%2016.3828194%205.58097738%2015.01745522%204.98208618%2013.65264893%20C4.14875742%2011.75295298%203.31997874%209.85133284%202.4921875%207.94921875%20C2.01120605%206.84924561%201.53022461%205.74927246%201.03466797%204.6159668%20C0%202%200%202%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(224,467)'/%3e%3cpath%20d='M0%200%20C4.6456294%203.80490916%208.23887006%207.95463812%2010.84375%2013.40234375%20C10.84375%2014.06234375%2010.84375%2014.72234375%2010.84375%2015.40234375%20C0.44875%2020.84734375%200.44875%2020.84734375%20-10.15625%2026.40234375%20C-15.15625%2022.40234375%20-15.15625%2022.40234375%20-17.59375%2019.83984375%20C-23.69448695%2014.03670372%20-29.49135908%2013.8685058%20-37.5859375%2014.05859375%20C-44.66458696%2014.74012674%20-48.35592604%2018.17840756%20-52.89453125%2023.42578125%20C-57.35750661%2030.4173154%20-57.05559365%2039.03898526%20-55.7265625%2046.96484375%20C-53.69407611%2054.19146201%20-49.25238278%2059.49703127%20-42.90625%2063.40234375%20C-35.21481566%2065.45339291%20-27.19943303%2065.45458604%20-20.15625%2061.40234375%20C-17.38502725%2059.04807876%20-17.38502725%2059.04807876%20-15.15625%2056.40234375%20C-13.82291667%2055.06901042%20-12.48958333%2053.73567708%20-11.15625%2052.40234375%20C-3.48829498%2054.74171986%203.61512274%2057.95003181%2010.84375%2061.40234375%20C9.71301894%2068.83286216%205.25630274%2073.41753074%20-0.15625%2078.40234375%20C-14.27515309%2088.65893292%20-29.58374274%2090.22229359%20-46.59375%2087.94140625%20C-59.50522416%2084.75107107%20-71.47879005%2076.68814229%20-78.59375%2065.40234375%20C-85.12640699%2053.53652894%20-87.70329542%2038.76522142%20-84.28515625%2025.4921875%20C-81.80476638%2018.01848819%20-78.48663047%2012.17115378%20-73.15625%206.40234375%20C-72.35574219%205.46648437%20-72.35574219%205.46648437%20-71.5390625%204.51171875%20C-54.14361329%20-14.63159857%20-19.9950983%20-14.8152087%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(612.15625,475.59765625)'/%3e%3cpath%20d='M0%200%20C0.92917236%200.00563965%201.85834473%200.0112793%202.81567383%200.01708984%20C16.49641332%200.25926927%2027.76888441%204.61429809%2037.6875%2014.3125%20C46.38158674%2024.33214256%2050.10184505%2035.73953622%2049.81640625%2048.8125%20C49.80710083%2049.63492188%2049.79779541%2050.45734375%2049.78820801%2051.3046875%20C49.76419258%2053.30742902%2049.72721288%2055.31000824%2049.6875%2057.3125%20C48.89538116%2057.31392502%2048.10326233%2057.31535004%2047.28713989%2057.31681824%20C39.78469277%2057.3347236%2032.2829255%2057.37655798%2024.78077888%2057.44459057%20C20.92473861%2057.47873308%2017.06908914%2057.50395048%2013.21289062%2057.50805664%20C9.48424299%2057.5123673%205.75647502%2057.54105506%202.02810287%2057.58593178%20C0.6129661%2057.5988193%20-0.80227644%2057.60324578%20-2.21746445%2057.59865379%20C-13.33340745%2057.57101196%20-22.06753601%2059.44924731%20-30.3125%2067.3125%20C-31.619314%2068.99914002%20-32.86837916%2070.7317826%20-34.0625%2072.5%20C-39.27138551%2079.83175205%20-44.31888353%2086.93254032%20-53.3125%2089.3125%20C-59.27605196%2089.97511688%20-63.4418563%2088.64128375%20-68.3125%2085.3125%20C-71.47815211%2082.38915707%20-73.44158139%2079.56624985%20-74.3125%2075.3125%20C-73.64863281%2075.07015625%20-72.98476563%2074.8278125%20-72.30078125%2074.578125%20C-70.97626953%2074.07539062%20-70.97626953%2074.07539062%20-69.625%2073.5625%20C-68.31982422%2073.07523438%20-68.31982422%2073.07523438%20-66.98828125%2072.578125%20C-61.914668%2070.17834297%20-58.99832299%2067.14164616%20-55.97827148%2062.4387207%20C-49.17329509%2051.85146005%20-39.91704612%2044.06974446%20-27.3125%2041.3125%20C-26.54315628%2041.14081802%20-25.77381256%2040.96913605%20-24.9811554%2040.79225159%20C-22.45293493%2040.33774638%20-20.17759888%2040.19175324%20-17.61401367%2040.19897461%20C-16.2631794%2040.19908791%20-16.2631794%2040.19908791%20-14.88505554%2040.19920349%20C-13.44728508%2040.20694542%20-13.44728508%2040.20694542%20-11.98046875%2040.21484375%20C-10.49284782%2040.21696617%20-10.49284782%2040.21696617%20-8.97517395%2040.21913147%20C-5.81675157%2040.22471582%20-2.65840085%2040.23726548%200.5%2040.25%20C2.64518127%2040.25501702%204.79036365%2040.25957958%206.93554688%2040.26367188%20C12.18622224%2040.27468012%2017.436856%2040.2914027%2022.6875%2040.3125%20C22.10377107%2038.71456803%2021.50594039%2037.1217836%2020.90234375%2035.53125%20C20.57097412%2034.64373047%2020.23960449%2033.75621094%2019.89819336%2032.84179688%20C17.64965073%2028.14429705%2013.96103717%2025.41875131%209.359375%2023.1796875%20C3.08895998%2021.1445528%20-4.68774346%2021.14815488%20-10.75%2023.875%20C-13.56487709%2025.50008368%20-15.07837473%2027.23984346%20-16.9375%2029.875%20C-20.51555769%2034.46424791%20-25.14252243%2034.57076651%20-30.625%2035.5%20C-36.37736083%2036.76746934%20-41.20002708%2039.47135793%20-46.3125%2042.3125%20C-47.64225647%2042.98627293%20-48.97417801%2043.65590541%20-50.3125%2044.3125%20C-49.77966687%2031.55114658%20-44.45627418%2020.94123005%20-35.1875%2012.125%20C-24.82466899%203.36989319%20-13.32375088%20-0.08431991%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(764.3125,465.6875)'/%3e%3cpath%20d='M0%200%20C44.84375%200%2044.84375%200%2055%2010%20C63.50692661%2020.10567615%2066.02395277%2031.00367642%2065%2044%20C63.92164324%2052.75980221%2059.27536689%2061.86408571%2053%2068%20C36.90761972%2079.76525518%2020.54677762%2076%200%2076%20C0%2050.92%200%2025.84%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(123,462)'/%3e%3cpath%20d='M0%200%20C0%208.58%200%2017.16%200%2026%20C-2.475%2026.0825%20-4.95%2026.165%20-7.5%2026.25%20C-15.58592043%2026.68028387%20-20.78770187%2028.00185508%20-26.8125%2033.625%20C-32.18698591%2040.84882192%20-32.45755497%2050.04763218%20-32.51171875%2058.6953125%20C-32.52966995%2059.76876923%20-32.54762115%2060.84222595%20-32.56611633%2061.94821167%20C-32.61983039%2065.34043577%20-32.65398988%2068.73252235%20-32.6875%2072.125%20C-32.72070741%2074.44012315%20-32.75520018%2076.75522823%20-32.79101562%2079.0703125%20C-32.87792806%2084.71355721%20-32.93833073%2090.35619859%20-33%2096%20C-42.24%2096%20-51.48%2096%20-61%2096%20C-61.11629021%2091.57321943%20-61.21532635%2087.15195899%20-61.2746582%2082.72485352%20C-61.29944483%2081.22662179%20-61.33328586%2079.72850609%20-61.37719727%2078.23071289%20C-61.84659218%2061.77980184%20-58.18723461%2049.29745852%20-47.64160156%2036.32958984%20C-46.11388537%2034.44998397%20-44.58793536%2032.56895731%20-43.0625%2030.6875%20C-42.54276611%2030.05078369%20-42.02303223%2029.41406738%20-41.48754883%2028.75805664%20C-38.17466035%2024.64362091%20-35.32555694%2020.47816771%20-32.625%2015.9375%20C-27.24219449%206.99173768%20-23.75743907%203.76906718%20-13.609375%200.6640625%20C-10%200%20-10%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(406,466)'/%3e%3cpath%20d='M0%200%20C5.66129431%204.69766975%2010.85228904%209.74723372%2016%2015%20C11.92304775%2022.70385133%204.05433775%2027.16606635%20-4%2030%20C-19.29250715%2034.53548448%20-36.16315756%2033.34402642%20-50.4140625%2026.31640625%20C-58.66486514%2021.8238732%20-58.66486514%2021.8238732%20-59.77929688%2019.08422852%20C-60%2017%20-60%2017%20-57.796875%2013.87109375%20C-56.79405635%2012.71532531%20-55.77778517%2011.57112409%20-54.75%2010.4375%20C-54.24597656%209.86064453%20-53.74195313%209.28378906%20-53.22265625%208.68945312%20C-50.89341628%206.03925489%20-48.51068548%203.47978615%20-46%201%20C-42.31120701%202.80247839%20-38.77349917%204.8276212%20-35.21875%206.87890625%20C-27.51820571%2010.76985028%20-18.90673806%209.19207078%20-10.88671875%207.06640625%20C-6.60864698%205.48600897%20-3.35300014%203.04728542%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(791,532)'/%3e%3cpath%20d='M0%200%20C4.56326885%202.95860288%208.00828055%206.6679148%209.9375%2011.8125%20C9.9375%2013.4625%209.9375%2015.1125%209.9375%2016.8125%20C-4.9125%2016.8125%20-19.7625%2016.8125%20-35.0625%2016.8125%20C-33.85907282%209.59193695%20-31.77484523%205.59340843%20-25.8984375%201.19140625%20C-17.83251928%20-3.44583989%20-8.3946856%20-4.34922034%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(477.0625,489.1875)'/%3e%3cpath%20d='M0%200%20C2.71975521%200.35943901%203.84341638%200.83999752%205.7890625%202.828125%20C6.39492188%203.62734375%207.00078125%204.4265625%207.625%205.25%20C8.3159375%206.14847656%209.006875%207.04695313%209.71875%207.97265625%20C10.4715625%208.97167969%2011.224375%209.97070312%2012%2011%20C13.27334297%2012.66801941%2014.55020731%2014.33328608%2015.828125%2015.99780273%20C16.68920631%2017.1197048%2017.54859726%2018.24290639%2018.40625%2019.36743164%20C20.72359821%2022.39401514%2023.10162467%2025.33084868%2025.625%2028.1875%20C28%2031%2028%2031%2028%2033%20C24.04%2033%2020.08%2033%2016%2033%20C16%2036.96%2016%2040.92%2016%2045%20C15.01%2044.505%2015.01%2044.505%2014%2044%20C13.5859375%2041.27734375%2013.5859375%2041.27734375%2013.375%2037.9375%20C13.30023437%2036.83277344%2013.22546875%2035.72804688%2013.1484375%2034.58984375%20C13.09945312%2033.73519531%2013.05046875%2032.88054687%2013%2032%20C14.134375%2031.54625%2015.26875%2031.0925%2016.4375%2030.625%20C20.04721692%2029.42904194%2020.04721692%2029.42904194%2021%2027%20C20.34%2027%2019.68%2027%2019%2027%20C18.608125%2025.9275%2018.21625%2024.855%2017.8125%2023.75%20C16.27259896%2020.08533167%2014.21849461%2018.3486312%2011%2016%20C11%2015.34%2011%2014.68%2011%2014%20C10.34%2014%209.68%2014%209%2014%20C7.4921875%2012.25%207.4921875%2012.25%205.875%2010%20C5.33617187%209.2575%204.79734375%208.515%204.2421875%207.75%20C3.83226562%207.1725%203.42234375%206.595%203%206%20C-3.93710167%209.15322803%20-9.63269943%2014.06474733%20-12.375%2021.25%20C-12.63023437%2022.05953125%20-12.88546875%2022.8690625%20-13.1484375%2023.703125%20C-14.07536523%2026.20327869%20-15.31553255%2027.94852568%20-17%2030%20C-15.02%2030.33%20-13.04%2030.66%20-11%2031%20C-9.51119807%2035.4664058%20-9.31090749%2039.30056546%20-11.09765625%2043.70703125%20C-13%2046%20-13%2046%20-16.13671875%2046.48828125%20C-19.42447917%2046.32552083%20-22.71223958%2046.16276042%20-26%2046%20C-26%2052.27%20-26%2058.54%20-26%2065%20C-24.1025%2064.95875%20-22.205%2064.9175%20-20.25%2064.875%20C-16.10895658%2064.78497732%20-13.61590012%2065.02831107%20-10%2067%20C-9.98786972%2067.91628929%20-9.98786972%2067.91628929%20-9.97549438%2068.85108948%20C-9.88922875%2075.22686062%20-9.78971604%2081.60232871%20-9.68261719%2087.9777832%20C-9.644408%2090.35500995%20-9.60954125%2092.73229292%20-9.578125%2095.10961914%20C-9.53229961%2098.53291881%20-9.47433332%20101.95583411%20-9.4140625%20105.37890625%20C-9.40251129%20106.43646622%20-9.39096008%20107.49402618%20-9.37905884%20108.58363342%20C-9.26966133%20114.09218328%20-8.82932532%20118.79123684%20-7%20124%20C-6.34%20124%20-5.68%20124%20-5%20124%20C-4.9071875%20124.928125%20-4.9071875%20124.928125%20-4.8125%20125.875%20C-4.19124685%20128.2501999%20-4.19124685%20128.2501999%20-1.625%20129.0625%20C-0.75875%20129.371875%200.1075%20129.68125%201%20130%20C2.6875%20131.5625%202.6875%20131.5625%204%20133%20C4.66%20133.33%205.32%20133.66%206%20134%20C6.625%20136.0625%206.625%20136.0625%207%20138%20C0.64042919%20136.72808584%20-3.00409013%20132.83266023%20-7%20128%20C-12.40978943%20119.7580267%20-13.30059906%20110.99356957%20-13.1953125%20101.375%20C-13.1924826%20100.38749756%20-13.18965271%2099.39999512%20-13.18673706%2098.38256836%20C-13.1756182%2095.25491785%20-13.15052916%2092.12756272%20-13.125%2089%20C-13.11495948%2086.86849374%20-13.10583551%2084.73698296%20-13.09765625%2082.60546875%20C-13.07570607%2077.4035335%20-13.04123391%2072.20181669%20-13%2067%20C-17.95%2067%20-22.9%2067%20-28%2067%20C-28%2059.74%20-28%2052.48%20-28%2045%20C-25.11584117%2043.55792059%20-22.58278472%2043.90605113%20-19.375%2043.9375%20C-18.18648437%2043.94652344%20-16.99796875%2043.95554687%20-15.7734375%2043.96484375%20C-14.85820313%2043.97644531%20-13.94296875%2043.98804688%20-13%2044%20C-13%2040.37%20-13%2036.74%20-13%2033%20C-16.63%2033%20-20.26%2033%20-24%2033%20C-22.47026072%2029.1756518%20-21.7364866%2027.36138218%20-19.27734375%2024.43359375%20C-18.74262451%2023.78841797%20-18.20790527%2023.14324219%20-17.65698242%2022.47851562%20C-16.80583862%2021.46821289%20-16.80583862%2021.46821289%20-15.9375%2020.4375%20C-10.41141017%2013.76832013%20-5.12012996%206.98560367%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C0.68078561%2010.15126993%20-6.26162995%2018.50517827%20-12.625%2025.8125%20C-13.10155029%2026.35165039%20-13.57810059%2026.89080078%20-14.0690918%2027.44628906%20C-17.57519453%2031.41656971%20-20.32199043%2035.44738374%20-23%2040%20C-23.33%2040%20-23.66%2040%20-24%2040%20C-24%2027.13%20-24%2014.26%20-24%201%20C-20.225625%200.835%20-16.45125%200.67%20-12.5625%200.5%20C-11.37084229%200.44779297%20-10.17918457%200.39558594%20-8.95141602%200.34179688%20C-7.55427368%200.28088867%20-7.55427368%200.28088867%20-6.12890625%200.21875%20C-5.17056885%200.17685547%20-4.21223145%200.13496094%20-3.22485352%200.09179688%20C-1%200%20-1%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(369,467)'/%3e%3cpath%20d='M0%200%20C2.00720923%200.28674418%204.0085944%200.61866701%206%201%20C6.495%202.485%206.495%202.485%207%204%20C7.66%204%208.32%204%209%204%20C9.495%205.98%209.495%205.98%2010%208%20C10.66%208%2011.32%208%2012%208%20C12.474375%208.639375%2012.94875%209.27875%2013.4375%209.9375%20C14.9091365%2012.28372963%2014.9091365%2012.28372963%2018%2013%20C18.495%2015.97%2018.495%2015.97%2019%2019%20C19.66%2019%2020.32%2019%2021%2019%20C22.0625%2020.8125%2022.0625%2020.8125%2023%2023%20C22.505%2024.485%2022.505%2024.485%2022%2026%20C21.3709375%2025.17757813%2020.741875%2024.35515625%2020.09375%2023.5078125%20C17.8531051%2020.58200082%2015.60149285%2017.6647905%2013.34716797%2014.74951172%20C12.10990021%2013.14272289%2010.88443769%2011.52686179%209.66015625%209.91015625%20C8.96792969%209.01167969%208.27570312%208.11320312%207.5625%207.1875%20C6.63630859%205.97126953%206.63630859%205.97126953%205.69140625%204.73046875%20C5.13324219%204.15941406%204.57507813%203.58835937%204%203%20C3.01%203%202.02%203%201%203%20C-1.1667738%205.33134682%20-1.1667738%205.33134682%20-3.375%208.4375%20C-4.25611385%209.62008724%20-5.13764692%2010.80236221%20-6.01953125%2011.984375%20C-6.49342285%2012.62568359%20-6.96731445%2013.26699219%20-7.45556641%2013.92773438%20C-9.12007314%2016.16110984%20-10.81214938%2018.37132519%20-12.51171875%2020.578125%20C-13.10098145%2021.34326416%20-13.69024414%2022.10840332%20-14.29736328%2022.89672852%20C-15.46363033%2024.41029473%20-16.62997013%2025.92380488%20-17.79638672%2027.43725586%20C-18.32893066%2028.13214111%20-18.86147461%2028.82702637%20-19.41015625%2029.54296875%20C-19.88590088%2030.16196045%20-20.36164551%2030.78095215%20-20.85180664%2031.41870117%20C-22.07331217%2033.0102519%20-22.07331217%2033.0102519%20-23%2035%20C-19.37%2035%20-15.74%2035%20-12%2035%20C-12%2038.63%20-12%2042.26%20-12%2046%20C-16.95%2046.33%20-21.9%2046.66%20-27%2047%20C-27%2054.26%20-27%2061.52%20-27%2069%20C-22.05%2069%20-17.1%2069%20-12%2069%20C-11.98541748%2070.31081543%20-11.97083496%2071.62163086%20-11.95581055%2072.97216797%20C-11.89747545%2077.87396394%20-11.82024648%2082.77531735%20-11.73754883%2087.67675781%20C-11.70446426%2089.7909421%20-11.67638204%2091.90521123%20-11.65356445%2094.01953125%20C-11.61971392%2097.07328159%20-11.56738455%20100.12626594%20-11.51171875%20103.1796875%20C-11.50532883%20104.11239471%20-11.4989389%20105.04510193%20-11.49235535%20106.006073%20C-11.26437364%20116.37399184%20-8.63724873%20126.05256773%20-1.3671875%20133.72265625%20C6.92807918%20141.29255208%2016.09690889%20142.40300166%2027.015625%20142.2109375%20C37.64372477%20141.64827339%2045.9753421%20138.49041118%2055%20133%20C55.66%20132.67%2056.32%20132.34%2057%20132%20C56.17631135%20135.60363786%2054.73164913%20137.5598772%2051.8125%20139.6875%20C43.36448472%20144.51927852%2032.57412865%20144.15231016%2023.0625%20144.25%20C22.03491577%20144.2641394%2022.03491577%20144.2641394%2020.98657227%20144.27856445%20C16.010662%20144.24659412%2011.7517971%20143.33793617%207%20142%20C6.67%20142.66%206.34%20143.32%206%20144%20C6%20143.34%206%20142.68%206%20142%20C5.2575%20141.731875%204.515%20141.46375%203.75%20141.1875%20C1.10938051%20140.04723249%20-0.85552844%20138.90619694%20-3%20137%20C-3%20136.34%20-3%20135.68%20-3%20135%20C-4.32%20134.67%20-5.64%20134.34%20-7%20134%20C-7.495%20132.02%20-7.495%20132.02%20-8%20130%20C-8.66%20130%20-9.32%20130%20-10%20130%20C-13.3917714%20117.17092103%20-13.35377076%20104.75435973%20-13.1875%2091.5625%20C-13.17241597%2089.4629003%20-13.15873419%2087.36329003%20-13.14648438%2085.26367188%20C-13.1137965%2080.17551518%20-13.0622224%2075.0878777%20-13%2070%20C-17.95%2070%20-22.9%2070%20-28%2070%20C-29.81226714%2066.37546571%20-29.18470181%2062.11521368%20-29.1875%2058.125%20C-29.19974609%2057.21363281%20-29.21199219%2056.30226563%20-29.22460938%2055.36328125%20C-29.22654297%2054.48285156%20-29.22847656%2053.60242188%20-29.23046875%2052.6953125%20C-29.23457764%2051.89109863%20-29.23868652%2051.08688477%20-29.24291992%2050.25830078%20C-28.96966064%2047.71795063%20-28.41516433%2046.12497675%20-27%2044%20C-24.1796875%2043.390625%20-24.1796875%2043.390625%20-20.875%2043.25%20C-19.77929688%2043.19328125%20-18.68359375%2043.1365625%20-17.5546875%2043.078125%20C-16.71164062%2043.05234375%20-15.86859375%2043.0265625%20-15%2043%20C-14.505%2040.03%20-14.505%2040.03%20-14%2037%20C-14.721875%2037.20625%20-15.44375%2037.4125%20-16.1875%2037.625%20C-19.54297056%2038.07239607%20-21.11604375%2037.76241771%20-24%2036%20C-24.875%2033.7421875%20-24.875%2033.7421875%20-25%2031%20C-23.453125%2028.359375%20-23.453125%2028.359375%20-21.25%2025.75%20C-20.53328125%2024.87859375%20-19.8165625%2024.0071875%20-19.078125%2023.109375%20C-17%2021%20-17%2021%20-14%2020%20C-14%2019.34%20-14%2018.68%20-14%2018%20C-13.34%2018%20-12.68%2018%20-12%2018%20C-12%2017.01%20-12%2016.02%20-12%2015%20C-11.34%2015%20-10.68%2015%20-10%2015%20C-9.938125%2014.46375%20-9.87625%2013.9275%20-9.8125%2013.375%20C-8.59964736%209.82973843%20-6.55389074%207.7407608%20-4%205%20C-3.34%205%20-2.68%205%20-2%205%20C-1.855625%204.360625%20-1.71125%203.72125%20-1.5625%203.0625%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(659,421)'/%3e%3cpath%20d='M0%200%20C7.92%200%2015.84%200%2024%200%20C24%207.26%2024%2014.52%2024%2022%20C16.08%2022%208.16%2022%200%2022%20C0.05110565%2028.01513491%200.11411805%2034.02770699%200.20751953%2040.04199219%20C0.23569066%2042.08650395%200.25692435%2044.13112384%200.27099609%2046.17578125%20C0.29247887%2049.12035322%200.3391569%2052.06363041%200.390625%2055.0078125%20C0.39185364%2055.9174173%200.39308228%2056.82702209%200.39434814%2057.76419067%20C0.52424586%2063.4323883%201.24752639%2066.66904733%205%2071%20C7.15616421%2071.84067552%207.15616421%2071.84067552%209.4375%2071.875%20C13.59953049%2072.52786753%2013.59953049%2072.52786753%2015.484375%2074.75%20C16.28446347%2076.16314328%2017.06211601%2077.58923329%2017.81640625%2079.02734375%20C20.15058208%2082.91763679%2023.83300287%2084.61100096%2028%2086%20C29.72795352%2086.06802967%2031.45835365%2086.08495645%2033.1875%2086.0625%20C34.08855469%2086.05347656%2034.98960937%2086.04445313%2035.91796875%2086.03515625%20C36.60503906%2086.02355469%2037.29210937%2086.01195312%2038%2086%20C28.4198669%2094.94145756%2015.04998512%2096.35397366%202.5546875%2096.203125%20C-1.58388881%2095.96663493%20-5.07173198%2095.28269976%20-9%2094%20C-6.13129876%2093.17066175%20-3.67877335%2092.90857069%20-0.69921875%2093.0078125%20C0.51991211%2093.03294922%200.51991211%2093.03294922%201.76367188%2093.05859375%20C3.45140273%2093.10256528%205.13894568%2093.15453885%206.82617188%2093.21484375%20C12.36551383%2093.31102806%2016.06333211%2092.5449489%2021%2090%20C21%2089.01%2021%2088.02%2021%2087%20C19.5459375%2086.0409375%2019.5459375%2086.0409375%2018.0625%2085.0625%20C15%2083%2015%2083%2014.125%2080.75%20C14.08375%2080.1725%2014.0425%2079.595%2014%2079%20C13.34%2079%2012.68%2079%2012%2079%20C12%2078.34%2012%2077.68%2012%2077%20C11.278125%2076.896875%2010.55625%2076.79375%209.8125%2076.6875%20C5.46614904%2075.62505865%202.79905402%2074.21337832%200.3125%2070.4375%20C-0.120625%2069.633125%20-0.55375%2068.82875%20-1%2068%20C-1.66%2067.34%20-2.32%2066.68%20-3%2066%20C-4.56682324%2055.65896659%20-4.02187183%2044.9749078%20-3.6875%2034.5625%20C-3.65293701%2033.35924072%20-3.61837402%2032.15598145%20-3.58276367%2030.91625977%20C-3.53869385%2029.79018311%20-3.49462402%2028.66410645%20-3.44921875%2027.50390625%20C-3.41143311%2026.49142822%20-3.37364746%2025.4789502%20-3.3347168%2024.43579102%20C-3%2022%20-3%2022%20-1%2020%20C1.15478516%2019.68115234%201.15478516%2019.68115234%203.7890625%2019.5859375%20C5.20058594%2019.52792969%205.20058594%2019.52792969%206.640625%2019.46875%20C7.62546875%2019.4378125%208.6103125%2019.406875%209.625%2019.375%20C11.11386719%2019.31699219%2011.11386719%2019.31699219%2012.6328125%2019.2578125%20C15.08835385%2019.1633686%2017.5438841%2019.07780125%2020%2019%20C19.98839844%2018.18015625%2019.97679687%2017.3603125%2019.96484375%2016.515625%20C19.95582031%2015.43796875%2019.94679688%2014.3603125%2019.9375%2013.25%20C19.92589844%2012.18265625%2019.91429687%2011.1153125%2019.90234375%2010.015625%20C19.98489913%207.46631499%2020.25382442%205.42066409%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%239BE600'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C3%203%203%203%203.2578125%205.3046875%20C3.21398437%206.15289062%203.17015625%207.00109375%203.125%207.875%20C3.00502835%2011.46371724%203.2754511%2014.48076247%204%2018%20C3.60976365%2021.31700894%202.61164065%2022.93522445%200%2025%20C-2.36010742%2025.34057617%20-2.36010742%2025.34057617%20-5.10546875%2025.29296875%20C-6.08837891%2025.28330078%20-7.07128906%2025.27363281%20-8.08398438%2025.26367188%20C-9.10814453%2025.23853516%20-10.13230469%2025.21339844%20-11.1875%2025.1875%20C-12.22326172%2025.17396484%20-13.25902344%2025.16042969%20-14.32617188%2025.14648438%20C-16.88463699%2025.11111389%20-19.4420578%2025.06175544%20-22%2025%20C-21.93433838%2025.60046143%20-21.86867676%2026.20092285%20-21.80102539%2026.81958008%20C-20.93290834%2035.43139683%20-20.67409758%2044.04154841%20-20.4375%2052.6875%20C-20.39418922%2054.17904546%20-20.35057152%2055.67058205%20-20.30664062%2057.16210938%20C-20.20089527%2060.77464429%20-20.09928034%2064.38728094%20-20%2068%20C-19.05898438%2068.29648437%20-18.11796875%2068.59296875%20-17.1484375%2068.8984375%20C-14.2055568%2069.92808062%20-12.3554191%2071.00695307%20-10%2073%20C-14.03645882%2073.31658501%20-16.32333195%2073.4210379%20-19.8125%2071.25%20C-23.0830854%2067.88596931%20-24.25459399%2065.28097814%20-24.22705078%2060.59863281%20C-24.22689972%2059.7380426%20-24.22674866%2058.87745239%20-24.22659302%2057.99078369%20C-24.21627045%2057.07085632%20-24.20594788%2056.15092896%20-24.1953125%2055.203125%20C-24.1924826%2054.25435486%20-24.18965271%2053.30558472%20-24.18673706%2052.32806396%20C-24.17555448%2049.30191361%20-24.1504533%2046.2760607%20-24.125%2043.25%20C-24.11496772%2041.19661886%20-24.1058423%2039.14323308%20-24.09765625%2037.08984375%20C-24.07732418%2032.05968942%20-24.03817166%2027.03017714%20-24%2022%20C-16.08%2022%20-8.16%2022%200%2022%20C0%2014.74%200%207.48%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(700,468)'/%3e%3cpath%20d='M0%200%20C4.62%200%209.24%200%2014%200%20C14.01458252%201.31081543%2014.02916504%202.62163086%2014.04418945%203.97216797%20C14.10252455%208.87396394%2014.17975352%2013.77531735%2014.26245117%2018.67675781%20C14.29553574%2020.7909421%2014.32361796%2022.90521123%2014.34643555%2025.01953125%20C14.38028608%2028.07328159%2014.43261545%2031.12626594%2014.48828125%2034.1796875%20C14.49467117%2035.11239471%2014.5010611%2036.04510193%2014.50764465%2037.006073%20C14.73562636%2047.37399184%2017.36275127%2057.05256773%2024.6328125%2064.72265625%20C32.92807918%2072.29255208%2042.09690889%2073.40300166%2053.015625%2073.2109375%20C63.64372477%2072.64827339%2071.9753421%2069.49041118%2081%2064%20C81.66%2063.67%2082.32%2063.34%2083%2063%20C82.17631135%2066.60363786%2080.73164913%2068.5598772%2077.8125%2070.6875%20C69.36448472%2075.51927852%2058.57412865%2075.15231016%2049.0625%2075.25%20C48.03491577%2075.2641394%2048.03491577%2075.2641394%2046.98657227%2075.27856445%20C42.010662%2075.24659412%2037.7517971%2074.33793617%2033%2073%20C32.67%2073.66%2032.34%2074.32%2032%2075%20C32%2074.34%2032%2073.68%2032%2073%20C31.2575%2072.731875%2030.515%2072.46375%2029.75%2072.1875%20C27.10938051%2071.04723249%2025.14447156%2069.90619694%2023%2068%20C23%2067.34%2023%2066.68%2023%2066%20C21.68%2065.67%2020.36%2065.34%2019%2065%20C18.67%2063.68%2018.34%2062.36%2018%2061%20C17.34%2061%2016.68%2061%2016%2061%20C12.6082286%2048.17092103%2012.64622924%2035.75435973%2012.8125%2022.5625%20C12.82758403%2020.4629003%2012.84126581%2018.36329003%2012.85351562%2016.26367188%20C12.8862035%2011.17551518%2012.9377776%206.0878777%2013%201%20C8.71%201%204.42%201%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(633,490)'/%3e%3cpath%20d='M0%200%20C0.81434143%202.85160391%201.11881242%205.36626131%201.09765625%208.328125%20C1.09443359%209.12734375%201.09121094%209.9265625%201.08789062%2010.75%20C1.07951172%2011.575%201.07113281%2012.4%201.0625%2013.25%20C1.05798828%2014.09046875%201.05347656%2014.9309375%201.04882812%2015.796875%20C1.03707961%2017.86461401%201.01914522%2019.93231624%201%2022%20C1.99%2022%202.98%2022%204%2022%20C4%2028.27%204%2034.54%204%2041%20C-5.24%2041%20-14.48%2041%20-24%2041%20C-24%2040.67%20-24%2040.34%20-24%2040%20C-22.35%2040%20-20.7%2040%20-19%2040%20C-19%2028.12%20-19%2016.24%20-19%204%20C-18.34%203.67%20-17.68%203.34%20-17%203%20C-17%2015.21%20-17%2027.42%20-17%2040%20C-11.72%2040%20-6.44%2040%20-1%2040%20C-1.00523682%2038.82381104%20-1.01047363%2037.64762207%20-1.01586914%2036.43579102%20C-1.03391663%2032.08797969%20-1.04543108%2027.7401717%20-1.05493164%2023.39233398%20C-1.05997244%2021.5075627%20-1.06680498%2019.62279535%20-1.07543945%2017.73803711%20C-1.08751617%2015.03498364%20-1.09323068%2012.33198169%20-1.09765625%209.62890625%20C-1.10281754%208.78099014%20-1.10797882%207.93307404%20-1.11329651%207.0594635%20C-1.11349195%205.03928932%20-1.06206211%203.01922066%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(369,521)'/%3e%3cpath%20d='M0%200%20C7.92%200%2015.84%200%2024%200%20C24%207.26%2024%2014.52%2024%2022%20C11.625%2022.495%2011.625%2022.495%20-1%2023%20C-1.33%2036.2%20-1.66%2049.4%20-2%2063%20C-2.33%2063%20-2.66%2063%20-3%2063%20C-4.13448821%2053.55756734%20-4.00188302%2044.23836711%20-3.6875%2034.75%20C-3.65277588%2033.53530029%20-3.61805176%2032.32060059%20-3.58227539%2031.0690918%20C-3.5383667%2029.92738525%20-3.49445801%2028.78567871%20-3.44921875%2027.609375%20C-3.41143311%2026.57780273%20-3.37364746%2025.54623047%20-3.3347168%2024.48339844%20C-3%2022%20-3%2022%20-1%2020%20C1.15478516%2019.68115234%201.15478516%2019.68115234%203.7890625%2019.5859375%20C5.20058594%2019.52792969%205.20058594%2019.52792969%206.640625%2019.46875%20C7.62546875%2019.4378125%208.6103125%2019.406875%209.625%2019.375%20C11.11386719%2019.31699219%2011.11386719%2019.31699219%2012.6328125%2019.2578125%20C15.08835385%2019.1633686%2017.5438841%2019.07780125%2020%2019%20C19.98839844%2018.18015625%2019.97679687%2017.3603125%2019.96484375%2016.515625%20C19.95582031%2015.43796875%2019.94679688%2014.3603125%2019.9375%2013.25%20C19.92589844%2012.18265625%2019.91429687%2011.1153125%2019.90234375%2010.015625%20C19.98489913%207.46631499%2020.25382442%205.42066409%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C6.96345149%205.39532832%206.9764649%2010.29708307%206.5625%2015.75%20C6.15134315%2021.36947121%206.15134315%2021.36947121%206%2027%20C4.94140625%2029.04296875%204.94140625%2029.04296875%203.5625%2031.1875%20C2.88380859%2032.26064453%202.88380859%2032.26064453%202.19140625%2033.35546875%20C1.79824219%2033.89816406%201.40507812%2034.44085938%201%2035%20C0.67%2035%200.34%2035%200%2035%20C0%2023.45%200%2011.9%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(345,472)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%2025.74%201%2051.48%201%2078%20C0.01%2077.67%20-0.98%2077.34%20-2%2077%20C-1.83734146%2076.29841263%20-1.67468292%2075.59682526%20-1.50709534%2074.87397766%20C-0.97453003%2071.8556482%20-0.87991379%2069.08025882%20-0.88647461%2066.01635742%20C-0.88655014%2064.83551071%20-0.88662567%2063.654664%20-0.88670349%2062.43803406%20C-0.89186478%2061.17328751%20-0.89702606%2059.90854095%20-0.90234375%2058.60546875%20C-0.9037587%2057.30297684%20-0.90517365%2056.00048492%20-0.90663147%2054.65852356%20C-0.91043645%2051.20783546%20-0.92024936%2047.75718992%20-0.93133545%2044.30651855%20C-0.94159311%2040.78052343%20-0.9461384%2037.25452139%20-0.95117188%2033.72851562%20C-0.96187356%2026.81899301%20-0.97892557%2019.90949855%20-1%2013%20C-1.99%2012.67%20-2.98%2012.34%20-4%2012%20C-3.649375%2011.236875%20-3.29875%2010.47375%20-2.9375%209.6875%20C-1.67639116%206.95240621%20-1.67639116%206.95240621%20-3%204%20C-1.625%201.8125%20-1.625%201.8125%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(929,483)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C3.78043103%208.12172411%203%2015.65909482%203%2023%20C-16.47%2023%20-35.94%2023%20-56%2023%20C-56%2022.67%20-56%2022.34%20-56%2022%20C-28.775%2021.505%20-28.775%2021.505%20-1%2021%20C-1.66%2018.03%20-2.32%2015.06%20-3%2012%20C-2.70676058%207.60140869%20-1.82135506%204.00698114%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(811,500)'/%3e%3cpath%20d='M0%200%20C10.89%200%2021.78%200%2033%200%20C32%202%2032%202%2028.9375%203.125%20C27.968125%203.41375%2026.99875%203.7025%2026%204%20C26%204.33%2026%204.66%2026%205%20C22.9166866%205.02911321%2019.83340875%205.04683682%2016.75%205.0625%20C15.87730469%205.07087891%2015.00460938%205.07925781%2014.10546875%205.08789062%20C13.26113281%205.09111328%2012.41679687%205.09433594%2011.546875%205.09765625%20C10.38430176%205.10551147%2010.38430176%205.10551147%209.19824219%205.11352539%20C6.99642569%204.99981541%205.11528675%204.60281778%203%204%20C2.2575%203.814375%201.515%203.62875%200.75%203.4375%20C0.1725%203.293125%20-0.405%203.14875%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(127,456)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.00808685%200.61085953%201.01617371%201.22171906%201.02450562%201.85108948%20C1.11077125%208.22686062%201.21028396%2014.60232871%201.31738281%2020.9777832%20C1.355592%2023.35500995%201.39045875%2025.73229292%201.421875%2028.10961914%20C1.46770039%2031.53291881%201.52566668%2034.95583411%201.5859375%2038.37890625%20C1.60326431%2039.9652462%201.60326431%2039.9652462%201.62094116%2041.58363342%20C1.73033867%2047.09218328%202.17067468%2051.79123684%204%2057%20C4.66%2057%205.32%2057%206%2057%20C6.061875%2057.61875%206.12375%2058.2375%206.1875%2058.875%20C6.80875315%2061.2501999%206.80875315%2061.2501999%209.375%2062.0625%20C10.24125%2062.371875%2011.1075%2062.68125%2012%2063%20C13.6875%2064.5625%2013.6875%2064.5625%2015%2066%20C15.66%2066.33%2016.32%2066.66%2017%2067%20C17.625%2069.0625%2017.625%2069.0625%2018%2071%20C11.64674292%2069.72934858%207.98595005%2065.83583279%204%2061%20C-0.20320088%2054.43626224%20-1.13694835%2048.50999461%20-1.09375%2040.75%20C-1.09016479%2040.05398682%20-1.08657959%2039.35797363%20-1.08288574%2038.64086914%20C-1.02339219%2030.75687156%20-0.77025329%2022.87906229%20-0.5%2015%20C-0.4515835%2013.53125787%20-0.40340556%2012.06250786%20-0.35546875%2010.59375%20C-0.23971031%207.06240545%20-0.12078988%203.53117647%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(649,490)'/%3e%3cpath%20d='M0%200%20C6.93%200%2013.86%200%2021%200%20C21%200.66%2021%201.32%2021%202%20C23.475%202.99%2023.475%202.99%2026%204%20C26%204.33%2026%204.66%2026%205%20C14.78%205%203.56%205%20-8%205%20C-4%203%20-4%203%20-1%202%20C-0.67%201.34%20-0.34%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(132,539)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.0093457%201.27117676%201.01869141%202.54235352%201.02832031%203.85205078%20C1.0682865%208.58238362%201.13406414%2013.31207062%201.20751953%2018.04199219%20C1.23569066%2020.08650395%201.25692435%2022.13112384%201.27099609%2024.17578125%20C1.29247887%2027.12035322%201.3391569%2030.06363041%201.390625%2033.0078125%20C1.39246796%2034.3722197%201.39246796%2034.3722197%201.39434814%2035.76419067%20C1.52438447%2041.4384366%202.24925859%2044.66233702%206%2049%20C8.30476633%2050.12133721%208.30476633%2050.12133721%2010.75%2050.375%20C11.54921875%2050.50648438%2012.3484375%2050.63796875%2013.171875%2050.7734375%20C13.77515625%2050.84820313%2014.3784375%2050.92296875%2015%2051%20C15%2051.33%2015%2051.66%2015%2052%20C13.22992286%2052.08114106%2011.45877902%2052.13925505%209.6875%2052.1875%20C8.70136719%2052.22230469%207.71523438%2052.25710938%206.69921875%2052.29296875%20C4%2052%204%2052%202.20703125%2050.67578125%20C1%2049%201%2049%200%2046%20C-0.66%2045.34%20-1.32%2044.68%20-2%2044%20C-2.20927429%2042.1337738%20-2.20927429%2042.1337738%20-2.15112305%2039.84155273%20C-2.13417892%2038.98403915%20-2.1172348%2038.12652557%20-2.09977722%2037.24302673%20C-2.07071793%2036.31591385%20-2.04165863%2035.38880096%20-2.01171875%2034.43359375%20C-1.98906448%2033.48436539%20-1.96641022%2032.53513702%20-1.94306946%2031.55714417%20C-1.8930653%2029.54879358%20-1.83809315%2027.54056154%20-1.77856445%2025.5324707%20C-1.68777846%2022.4469639%20-1.61311485%2019.36138491%20-1.54101562%2016.27539062%20C-1.49053325%2014.32810014%20-1.43913222%2012.38083321%20-1.38671875%2010.43359375%20C-1.36373215%209.50445663%20-1.34074554%208.57531952%20-1.31706238%207.61802673%20C-1.29066177%206.76366531%20-1.26426117%205.90930389%20-1.23706055%205.02905273%20C-1.21548386%204.27341537%20-1.19390717%203.51777802%20-1.17167664%202.73924255%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(675,490)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%2014.85%201%2029.7%201%2045%20C-1%2043%20-1%2043%20-1.125%2040.72265625%20C-1.04178877%2038.95181718%20-0.95845579%2037.18098382%20-0.875%2035.41015625%20C-0.80800597%2032.73455911%20-0.80800597%2032.73455911%20-3%2030%20C-2.505%2028.515%20-2.505%2028.515%20-2%2027%20C-2.31050297%2025.32892945%20-2.64717051%2023.66264856%20-3%2022%20C-3.09035285%2020.00160753%20-3.13010313%2018.00042747%20-3.125%2016%20C-3.12757813%2014.989375%20-3.13015625%2013.97875%20-3.1328125%2012.9375%20C-3.00826727%2010.18285256%20-2.62110865%207.68161197%20-2%205%20C-1.34%205%20-0.68%205%200%205%20C0%203.35%200%201.7%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(901,431)'/%3e%3cpath%20d='M0%200%20C2.57069617%203.85604425%202.35065056%207.12746343%202.4140625%2011.60546875%20C2.43342865%2012.44467361%202.4527948%2013.28387848%202.4727478%2014.14851379%20C2.53251213%2016.82807258%202.57891612%2019.5076744%202.625%2022.1875%20C2.6631827%2024.00457599%202.70223461%2025.82163394%202.7421875%2027.63867188%20C2.83821103%2032.09230132%202.92225359%2036.54601551%203%2041%20C3.94101562%2041.29648437%204.88203125%2041.59296875%205.8515625%2041.8984375%20C8.7944432%2042.92808062%2010.6445809%2044.00695307%2013%2046%20C8.86001651%2046.32470459%206.66000999%2046.4304413%203.125%2044.125%20C0.12481839%2041.12481839%200.01401021%2040.48116775%20-0.11352539%2036.10107422%20C-0.11336671%2034.418937%20-0.10769737%2032.73679475%20-0.09765625%2031.0546875%20C-0.0962413%2030.1696756%20-0.09482635%2029.2846637%20-0.09336853%2028.37283325%20C-0.0877614%2025.54018809%20-0.07520771%2022.70762136%20-0.0625%2019.875%20C-0.05748592%2017.95703239%20-0.05292285%2016.03906354%20-0.04882812%2014.12109375%20C-0.03778966%209.41403218%20-0.02052025%204.7070294%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(677,495)'/%3e%3cpath%20d='M0%200%20C0.82200425%206.24723226%20-2.07448606%2010.71317837%20-5%2016%20C-6.95100616%2014.37586398%20-7.92782782%2013.56206818%20-8.2578125%2010.9921875%20C-8.21398437%2010.29351562%20-8.17015625%209.59484375%20-8.125%208.875%20C-8.08375%207.59625%20-8.0425%206.3175%20-8%205%20C-8.98267859%203.79438816%20-8.98267859%203.79438816%20-10.84765625%203.90234375%20C-12.8984375%203.93489583%20-14.94921875%203.96744792%20-17%204%20C-17%203.01%20-17%202.02%20-17%201%20C-14.3541898%200.832959%20-11.70835369%200.66634934%20-9.0625%200.5%20C-8.30775391%200.45230469%20-7.55300781%200.40460938%20-6.77539062%200.35546875%20C-1.11328125%200%20-1.11328125%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(369,467)'/%3e%3cpath%20d='M0%200%20C4.29%200%208.58%200%2013%200%20C13.02505615%201.34747314%2013.0501123%202.69494629%2013.07592773%204.08325195%20C13.17000223%209.07602678%2013.27022294%2014.06866249%2013.37231445%2019.0612793%20C13.41566313%2021.2233556%2013.45733825%2023.38546613%2013.49731445%2025.54760742%20C13.55501844%2028.65293702%2013.61871272%2031.75809436%2013.68359375%2034.86328125%20C13.70030624%2035.83211746%2013.71701874%2036.80095367%2013.73423767%2037.79914856%20C13.75418289%2038.6998558%2013.77412811%2039.60056305%2013.79467773%2040.52856445%20C13.81022202%2041.32132278%2013.8257663%2042.11408112%2013.84178162%2042.93086243%20C13.93081226%2045.19739774%2013.93081226%2045.19739774%2015%2048%20C15.12781786%2050.67394964%2015.04391871%2053.32095857%2015%2056%20C14.67%2056%2014.34%2056%2014%2056%20C13.29066112%2053.54623548%2012.60781467%2051.08945724%2011.9375%2048.625%20C11.73833984%2047.94566406%2011.53917969%2047.26632812%2011.33398438%2046.56640625%20C10.04560625%2041.72933752%2010.02964032%2037.78697173%2010.67358398%2032.84228516%20C11.33901124%2027.04804123%2011.37950304%2021.20090331%2011.5625%2015.375%20C11.60568359%2014.08464844%2011.64886719%2012.79429687%2011.69335938%2011.46484375%20C11.79852148%208.30998067%2011.90066604%205.15505105%2012%202%20C11.25363281%202.17402344%2010.50726562%202.34804688%209.73828125%202.52734375%20C6.30488867%203.11998355%203.41085419%202.60191545%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(633,491)'/%3e%3cpath%20d='M0%200%20C7.26%200%2014.52%200%2022%200%20C21.34%200.66%2020.68%201.32%2020%202%20C20.33%202.66%2020.66%203.32%2021%204%20C14.73%204%208.46%204%202%204%20C2%206.64%202%209.28%202%2012%20C1.34%2012.66%200.68%2013.32%200%2014%20C0.01160156%2013.30132812%200.02320313%2012.60265625%200.03515625%2011.8828125%20C0.04417969%2010.97273438%200.05320313%2010.06265625%200.0625%209.125%20C0.07410156%208.22007812%200.08570313%207.31515625%200.09765625%206.3828125%20C0.16249257%203.9831415%200.16249257%203.9831415%20-1%202%20C-0.67%201.34%20-0.34%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(230,468)'/%3e%3cpath%20d='M0%200%20C3.26587942%200.14550948%206.38789358%200.49324673%209.5625%201.3125%20C9.2325%202.3025%208.9025%203.2925%208.5625%204.3125%20C9.2225%204.6425%209.8825%204.9725%2010.5625%205.3125%20C9.5625%206.3125%209.5625%206.3125%206.87866211%206.42602539%20C5.71085205%206.42078857%204.54304199%206.41555176%203.33984375%206.41015625%20C2.07978516%206.40693359%200.81972656%206.40371094%20-0.47851562%206.40039062%20C-1.81901109%206.39203403%20-3.15950588%206.38356907%20-4.5%206.375%20C-5.84439942%206.3699866%20-7.1888006%206.36542342%20-8.53320312%206.36132812%20C-11.83467941%206.34949488%20-15.13606803%206.33300971%20-18.4375%206.3125%20C-15.4375%204.3125%20-15.4375%204.3125%20-12%204.4375%20C-8.38721028%204.72990718%20-8.38721028%204.72990718%20-6.5625%202.3125%20C-4.04895307%20-0.05319123%20-3.34014743%200.01650814%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(584.4375,465.6875)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%200.66%204%201.32%204%202%20C4.73605469%201.855625%205.47210937%201.71125%206.23046875%201.5625%20C7.20628906%201.376875%208.18210937%201.19125%209.1875%201%20C10.15042969%200.814375%2011.11335937%200.62875%2012.10546875%200.4375%20C18.83937824%20-0.58031088%2018.83937824%20-0.58031088%2022%201%20C22.99%200.67%2023.98%200.34%2025%200%20C25.33%200.33%2025.66%200.66%2026%201%20C27.99964982%201.08758003%2030.0023611%201.10696576%2032.00390625%201.09765625%20C33.82631836%201.09282227%2033.82631836%201.09282227%2035.68554688%201.08789062%20C36.96494141%201.07951172%2038.24433594%201.07113281%2039.5625%201.0625%20C41.48739258%201.05573242%2041.48739258%201.05573242%2043.45117188%201.04882812%20C46.63416022%201.03699545%2049.81705762%201.02051068%2053%201%20C53.495%201.99%2053.495%201.99%2054%203%20C36.18%203%2018.36%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(731,509)'/%3e%3cpath%20d='M0%200%20C3.3%200%206.6%200%2010%200%20C10%200.33%2010%200.66%2010%201%20C7.69%201.33%205.38%201.66%203%202%20C3%204.64%203%207.28%203%2010%20C3.66%209.67%204.32%209.34%205%209%20C6.44848582%208.91657841%207.90070869%208.89267139%209.3515625%208.90234375%20C10.20234375%208.90556641%2011.053125%208.90878906%2011.9296875%208.91210938%20C12.81914063%208.92048828%2013.70859375%208.92886719%2014.625%208.9375%20C15.5221875%208.94201172%2016.419375%208.94652344%2017.34375%208.95117188%20C19.56256648%208.96297409%2021.78125018%208.97943845%2024%209%20C24%209.99%2024%2010.98%2024%2012%20C16.08%2012%208.16%2012%200%2012%20C0%208.04%200%204.08%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(676,456)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.02893932%203.62498334%201.04677792%207.24993713%201.0625%2010.875%20C1.07087891%2011.90753906%201.07925781%2012.94007813%201.08789062%2014.00390625%20C1.09111328%2014.99003906%201.09433594%2015.97617187%201.09765625%2016.9921875%20C1.10289307%2017.90339355%201.10812988%2018.81459961%201.11352539%2019.75341797%20C1%2022%201%2022%200%2024%20C-0.99%2023.67%20-1.98%2023.34%20-3%2023%20C-5.01862148%2017.75866703%20-4.98056566%2010.73616357%20-3.10546875%205.50390625%20C-2.15670432%203.62314001%20-1.08879621%201.80331872%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(831,508)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C5.67%200.99%205.34%201.98%205%203%20C5.99%203.33%206.98%203.66%208%204%20C7.34%204%206.68%204%206%204%20C6.66%205.65%207.32%207.3%208%209%20C9.65%208.67%2011.3%208.34%2013%208%20C13.33%209.32%2013.66%2010.64%2014%2012%20C16.31%2012%2018.62%2012%2021%2012%20C21%2011.34%2021%2010.68%2021%2010%20C21.66%2010%2022.32%2010%2023%2010%20C23.33%2010.99%2023.66%2011.98%2024%2013%20C18.94576102%2014.68474633%2014.71544468%2014.58019314%209.875%2012.375%20C5.29909504%209.86935884%201.9168134%206.67991608%200.1875%201.625%20C0.125625%201.08875%200.06375%200.5525%200%200%20Z%20'%20fill='%236F9300'%20transform='translate(690,541)'/%3e%3cpath%20d='M0%200%20C6.93%200.33%2013.86%200.66%2021%201%20C20.34%201.66%2019.68%202.32%2019%203%20C19.33%203.66%2019.66%204.32%2020%205%20C17.10410348%205.02706445%2014.20846205%205.04687029%2011.3125%205.0625%20C10.08756836%205.07506836%2010.08756836%205.07506836%208.83789062%205.08789062%20C4.75500916%205.10442051%200.98348293%205.03035098%20-3%204%20C-2.34%203.67%20-1.68%203.34%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(241,593)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%208.25%201%2016.5%201%2025%20C0.34%2025%20-0.32%2025%20-1%2025%20C-3.52775351%2021.20836973%20-3.22443035%2018.19125969%20-3.125%2013.8125%20C-3.11597656%2013.06291016%20-3.10695312%2012.31332031%20-3.09765625%2011.54101562%20C-3.07412578%209.69387346%20-3.03825561%207.84689588%20-3%206%20C-2.67%206%20-2.34%206%20-2%206%20C-1.34%204.02%20-0.68%202.04%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(191,487)'/%3e%3cpath%20d='M0%200%20C0.66%200.66%201.32%201.32%202%202%20C1.525625%202.845625%201.05125%203.69125%200.5625%204.5625%20C-1.69167803%209.67126796%20-1.51097377%2015.18235336%20-1.69140625%2020.671875%20C-2%2024%20-2%2024%20-4%2027%20C-4.39387788%2029.32387947%20-4.73486085%2031.65793749%20-5%2034%20C-5.33%2034%20-5.66%2034%20-6%2034%20C-6.52846015%2021.74266038%20-5.86678537%2011.12575063%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(832,489)'/%3e%3cpath%20d='M0%200%20C0.98742187%200.16242187%201.97484375%200.32484375%202.9921875%200.4921875%20C7.03537925%201.06688527%2011.04640663%201.15126811%2015.125%201.125%20C15.858396%201.12306641%2016.59179199%201.12113281%2017.34741211%201.11914062%20C23.93030125%201.06771738%2030.4468302%200.63822175%2037%200%20C33.42278921%202.9386979%2031.63341748%203.18911908%2027%203%20C22.9008693%203.63063549%2018.97489026%204.83091463%2015%206%20C15%205.34%2015%204.68%2015%204%20C13.02%204.66%2011.04%205.32%209%206%20C8.67%205.34%208.34%204.68%208%204%20C6.8553125%204.12375%206.8553125%204.12375%205.6875%204.25%20C3%204%203%204%201.1875%202%20C0.5996875%201.01%200.5996875%201.01%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(667,563)'/%3e%3cpath%20d='M0%200%20C-1.70577342%200.65256456%20-3.41476089%201.29673041%20-5.125%201.9375%20C-6.07632813%202.29714844%20-7.02765625%202.65679688%20-8.0078125%203.02734375%20C-18.08362171%206.30263943%20-29.94180625%206.28430816%20-40%203%20C-37.09031691%202.16087482%20-34.5469594%201.89148572%20-31.5234375%201.9375%20C-30.27046875%201.94910156%20-30.27046875%201.94910156%20-28.9921875%201.9609375%20C-28.12851562%201.97382812%20-27.26484375%201.98671875%20-26.375%202%20C-24.65370809%202.0254629%20-22.93234349%202.04651171%20-21.2109375%202.0625%20C-20.45087402%202.07410156%20-19.69081055%202.08570313%20-18.90771484%202.09765625%20C-16.91256704%202.12332635%20-16.91256704%202.12332635%20-15%201%20C-12.70190464%200.69130062%20-10.40279871%200.49116352%20-8.09375%200.28125%20C-1.8556701%20-0.55670103%20-1.8556701%20-0.55670103%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(707,559)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C29%200.33%2029%200.66%2029%201%20C21.41%201%2013.82%201%206%201%20C6.33%202.32%206.66%203.64%207%205%20C6.87890625%207.359375%206.87890625%207.359375%206.5625%209.75%20C6.46066406%2010.54921875%206.35882813%2011.3484375%206.25390625%2012.171875%20C6.12822266%2013.07679688%206.12822266%2013.07679688%206%2014%20C4.31821339%2011.47732009%203.09893258%209.18908177%201.875%206.4375%20C1.52179688%205.65246094%201.16859375%204.86742187%200.8046875%204.05859375%20C0%202%200%202%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(224,467)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%207.59%201%2015.18%201%2023%20C0.01%2023%20-0.98%2023%20-2%2023%20C-3.53887884%208.19349005%20-3.53887884%208.19349005%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(372,520)'/%3e%3cpath%20d='M0%200%20C6.93%200%2013.86%200%2021%200%20C19.02%200.99%2019.02%200.99%2017%202%20C16.37609375%202.53238281%2015.7521875%203.06476563%2015.109375%203.61328125%20C12.34672115%205.42947035%2010.52244363%205.30437299%207.25%205.1875%20C5.77273438%205.14689453%205.77273438%205.14689453%204.265625%205.10546875%20C3.14414062%205.05326172%203.14414062%205.05326172%202%205%20C2.33%204.01%202.66%203.02%203%202%20C2.01%201.34%201.02%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(454,466)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.97%201%205.94%201%209%20C2.32451172%208.87431641%202.32451172%208.87431641%203.67578125%208.74609375%20C11.27709596%208.10108423%2018.43413122%207.99636435%2026%209%20C26%209.66%2026%2010.32%2026%2011%20C17.42%2011%208.84%2011%200%2011%20C0%207.37%200%203.74%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(904,552)'/%3e%3cpath%20d='M0%200%20C1.28132812%200.00902344%202.56265625%200.01804687%203.8828125%200.02734375%20C4.87023437%200.03894531%205.85765625%200.05054688%206.875%200.0625%20C6.875%200.7225%206.875%201.3825%206.875%202.0625%20C7.535%202.3925%208.195%202.7225%208.875%203.0625%20C7.875%204.0625%207.875%204.0625%204.27734375%204.16015625%20C2.78903133%204.1534822%201.30073568%204.14152183%20-0.1875%204.125%20C-0.94611328%204.12048828%20-1.70472656%204.11597656%20-2.48632812%204.11132812%20C-4.36591871%204.0995068%20-6.24546899%204.08157078%20-8.125%204.0625%20C-8.455%203.0725%20-8.785%202.0825%20-9.125%201.0625%20C-6.12186252%20-0.43906874%20-3.33432478%20-0.03031204%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(874.125,559.9375)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.97%201%205.94%201%209%20C3.31%209%205.62%209%208%209%20C6.47291037%2012.43595166%204.40072955%2015.11912454%202%2018%20C1.01%2017.67%200.02%2017.34%20-1%2017%20C-0.67%2011.39%20-0.34%205.78%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(351,479)'/%3e%3cpath%20d='M0%200%20C6.6%200%2013.2%200%2020%200%20C20%200.99%2020%201.98%2020%203%20C15.38%203.33%2010.76%203.66%206%204%20C6%203.67%206%203.34%206%203%20C3.03%202.505%203.03%202.505%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(384,488)'/%3e%3cpath%20d='M0%200%20C14.7664042%20-0.22834646%2014.7664042%20-0.22834646%2022%201%20C23%202%2023%202%2023.09765625%204.50390625%20C23.08605469%205.51324219%2023.07445312%206.52257812%2023.0625%207.5625%20C23.05347656%208.57441406%2023.04445313%209.58632813%2023.03515625%2010.62890625%20C23.02355469%2011.41136719%2023.01195312%2012.19382812%2023%2013%20C22.67%2013%2022.34%2013%2022%2013%20C21.505%208.05%2021.505%208.05%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23B6FF2E'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C5.61%200.33%2011.22%200.66%2017%201%20C14%204%2014%204%2010.64453125%204.29296875%20C9.37996094%204.25816406%208.11539063%204.22335937%206.8125%204.1875%20C5.54019531%204.16042969%204.26789062%204.13335938%202.95703125%204.10546875%20C1.98121094%204.07066406%201.00539063%204.03585937%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(569,540)'/%3e%3cpath%20d='M0%200%20C6.27%200%2012.54%200%2019%200%20C18.01%200.495%2018.01%200.495%2017%201%20C17%201.66%2017%202.32%2017%203%20C11.39%203%205.78%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(761,523)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.33%209.24%201.66%2018.48%202%2028%20C2.99%2028.33%203.98%2028.66%205%2029%20C3.69593116%2031.01920337%202.36176581%2033.01924973%201%2035%20C0.67%2035%200.34%2035%200%2035%20C0%2023.45%200%2011.9%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(345,472)'/%3e%3cpath%20d='M0%200%20C0%201.65%200%203.3%200%205%20C-1.134375%205.28875%20-2.26875%205.5775%20-3.4375%205.875%20C-4.613125%206.24625%20-5.78875%206.6175%20-7%207%20C-8.2981424%209.2236068%20-8.2981424%209.2236068%20-8%2013%20C-8.66%2013%20-9.32%2013%20-10%2013%20C-11%2010.4375%20-11%2010.4375%20-11%207%20C-7.98890645%203.33845177%20-4.8796426%200%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(736,475)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%200.66%202%201.32%202%202%20C3.36125%202.37125%203.36125%202.37125%204.75%202.75%20C8.13493865%204.05189948%209.60793414%205.35164137%2012%208%20C12.66%208.33%2013.32%208.66%2014%209%20C14.625%2011.0625%2014.625%2011.0625%2015%2013%20C8.7298413%2011.74596826%204.95911962%207.77173128%201%203%20C0.67%202.01%200.34%201.02%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(652,548)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%204.62%201%209.24%201%2014%20C0.01%2014.495%200.01%2014.495%20-1%2015%20C-1%2014.01%20-1%2013.02%20-1%2012%20C-1.99%2012%20-2.98%2012%20-4%2012%20C-3.53439347%207.25081338%20-2.83067342%203.89217595%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(287,513)'/%3e%3cpath%20d='M0%200%20C2.4375%200.8125%202.4375%200.8125%205%202%20C5.33%202.99%205.66%203.98%206%205%20C7.49985609%206.66710346%207.49985609%206.66710346%209%208%20C5.68585212%2012.10954337%203.12159208%2012.43093421%20-2%2013%20C-2.66%2013.66%20-3.32%2014.32%20-4%2015%20C-3.67%2013.35%20-3.34%2011.7%20-3%2010%20C1.455%209.505%201.455%209.505%206%209%20C5.566875%208.43410156%205.13375%207.86820312%204.6875%207.28515625%20C3.8521875%206.18494141%203.8521875%206.18494141%203%205.0625%20C2.1646875%203.96615234%202.1646875%203.96615234%201.3125%202.84765625%20C0%201%200%201%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(682,447)'/%3e%3cpath%20d='M0%200%20C2.31%200%204.62%200%207%200%20C6.67%201.32%206.34%202.64%206%204%20C-1.26%204%20-8.52%204%20-16%204%20C-16%203.67%20-16%203.34%20-16%203%20C-11.05%203%20-6.1%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(472,560)'/%3e%3cpath%20d='M0%200%20C3.63%200%207.26%200%2011%200%20C9%204%209%204%207.25%204.8125%20C4.36824559%205.0526462%201.82252185%204.57733402%20-1%204%20C-0.67%202.68%20-0.34%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(449,506)'/%3e%3cpath%20d='M0%200%20C3.3%200.33%206.6%200.66%2010%201%20C10.33%202.32%2010.66%203.64%2011%205%20C9.58376784%205.05447047%208.16691809%205.09300508%206.75%205.125%20C5.96109375%205.14820313%205.1721875%205.17140625%204.359375%205.1953125%20C1.79268059%204.9828378%200.2083933%204.28654105%20-2%203%20C-1.34%202.01%20-0.68%201.02%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(760,537)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%201.99%201.34%202.98%201%204%20C1.74765625%203.97679687%202.4953125%203.95359375%203.265625%203.9296875%20C4.25046875%203.91164063%205.2353125%203.89359375%206.25%203.875%20C7.22453125%203.85179687%208.1990625%203.82859375%209.203125%203.8046875%20C12%204%2012%204%2016%206%20C9.73%206%203.46%206%20-3%206%20C-3%204.68%20-3%203.36%20-3%202%20C-2.01%202%20-1.02%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(447,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.22212255%202.74951693%201.42815588%205.49865612%201.625%208.25%20C1.68945312%209.02730469%201.75390625%209.80460937%201.8203125%2010.60546875%20C2.30707097%2017.72431144%202.30707097%2017.72431144%200%2021%20C-0.86860031%2016.51223172%20-1.13464852%2012.25607233%20-1.125%207.6875%20C-1.12757813%206.45386719%20-1.13015625%205.22023438%20-1.1328125%203.94921875%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(553,496)'/%3e%3cpath%20d='M0%200%20C0%201.65%200%203.3%200%205%20C-3.63%205%20-7.26%205%20-11%205%20C-11.33%204.34%20-11.66%203.68%20-12%203%20C-10.75336669%202.49166409%20-9.50250613%201.99368855%20-8.25%201.5%20C-7.55390625%201.2215625%20-6.8578125%200.943125%20-6.140625%200.65625%20C-4%200%20-4%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(454,467)'/%3e%3cpath%20d='M0%200%20C0.98613281%200.03480469%201.97226562%200.06960938%202.98828125%200.10546875%20C3.98214844%200.13253906%204.97601563%200.15960937%206%200.1875%20C7.13888672%200.23970703%207.13888672%200.23970703%208.30078125%200.29296875%20C8.63078125%201.28296875%208.96078125%202.27296875%209.30078125%203.29296875%20C4.35078125%203.29296875%20-0.59921875%203.29296875%20-5.69921875%203.29296875%20C-2.69921875%200.29296875%20-2.69921875%200.29296875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(461.69921875,559.70703125)'/%3e%3cpath%20d='M0%200%20C0.56203125%200.30679688%201.1240625%200.61359375%201.703125%200.9296875%20C4.06346934%202.02957585%206.20465562%202.60095851%208.75%203.125%20C9.54921875%203.29257812%2010.3484375%203.46015625%2011.171875%203.6328125%20C11.77515625%203.75398437%2012.3784375%203.87515625%2013%204%20C13%204.66%2013%205.32%2013%206%20C8.126739%207.5912689%204.19209404%208.21192221%20-1%208%20C0.32%207.34%201.64%206.68%203%206%20C2.690625%205.38125%202.38125%204.7625%202.0625%204.125%20C1.375%202.75%200.6875%201.375%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(695,552)'/%3e%3cpath%20d='M0%200%20C-0.99%201.485%20-0.99%201.485%20-2%203%20C-4.8984375%203.36328125%20-4.8984375%203.36328125%20-8.375%203.3125%20C-9.51710938%203.30863281%20-10.65921875%203.30476562%20-11.8359375%203.30078125%20C-14.80057739%203.01895746%20-16.49947121%202.54589341%20-19%201%20C-12.65758005%20-0.15316726%20-6.43311296%20-0.09507063%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(884,541)'/%3e%3cpath%20d='M0%200%20C1.58323688%20-0.027193%203.16661062%20-0.04648306%204.75%20-0.0625%20C6.07257812%20-0.07990234%206.07257812%20-0.07990234%207.421875%20-0.09765625%20C9.7818838%20-0.00826198%2011.74498524%200.33087179%2014%201%20C14%201.66%2014%202.32%2014%203%20C9.05%203%204.1%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(581,560)'/%3e%3cpath%20d='M0%200%20C0%200.99%200%201.98%200%203%20C-5.28%203%20-10.56%203%20-16%203%20C-16%202.34%20-16%201.68%20-16%201%20C-10.62915894%200.31798844%20-5.41499441%20-0.11521265%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(479,541)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%205.28%201%2010.56%201%2016%20C-2.37152003%2012.62847997%20-2.82142723%2011.64289204%20-3%207%20C-2.21181089%204.49988422%20-1.17946058%202.35892116%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(247,504)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2.08082094%202.95766281%202.13910778%204.91626728%202.1875%206.875%20C2.23970703%208.51082031%202.23970703%208.51082031%202.29296875%2010.1796875%20C2.19628906%2011.11039062%202.09960938%2012.04109375%202%2013%20C1.01%2013.66%200.02%2014.32%20-1%2015%20C-1.02685412%2012.68756208%20-1.04632841%2010.3750373%20-1.0625%208.0625%20C-1.07410156%206.77472656%20-1.08570312%205.48695313%20-1.09765625%204.16015625%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(121,466)'/%3e%3cpath%20d='M0%200%20C0%202.97%200%205.94%200%209%20C-0.99%209.495%20-0.99%209.495%20-2%2010%20C-3.32%206.7%20-4.64%203.4%20-6%200%20C-2%20-1%20-2%20-1%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(254,523)'/%3e%3cpath%20d='M0%200%20C2.64%200.33%205.28%200.66%208%201%20C7.34%202.32%206.68%203.64%206%205%20C3.69%205%201.38%205%20-1%205%20C-0.67%203.35%20-0.34%201.7%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(880,489)'/%3e%3cpath%20d='M0%200%20C1.953125%200.390625%203.90625%200.78125%205.859375%201.171875%20C5.859375%202.161875%205.859375%203.151875%205.859375%204.171875%20C1.899375%204.171875%20-2.060625%204.171875%20-6.140625%204.171875%20C-2.140625%200.171875%20-2.140625%200.171875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(780.140625,467.828125)'/%3e%3cpath%20d='M0%200%20C0.598125%200.20625%201.19625%200.4125%201.8125%200.625%20C0.8225%200.955%20-0.1675%201.285%20-1.1875%201.625%20C-1.5175%205.915%20-1.8475%2010.205%20-2.1875%2014.625%20C-2.8475%2014.295%20-3.5075%2013.965%20-4.1875%2013.625%20C-4.6015625%2010.90234375%20-4.6015625%2010.90234375%20-4.8125%207.5625%20C-4.88726563%206.45777344%20-4.96203125%205.35304688%20-5.0390625%204.21484375%20C-5.08804688%203.36019531%20-5.13703125%202.50554687%20-5.1875%201.625%20C-2.1875%20-0.375%20-2.1875%20-0.375%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(678.1875,453.375)'/%3e%3cpath%20d='M0%200%20C3%203.75%203%203.75%203%206%20C0.03%206%20-2.94%206%20-6%206%20C-5.67%204.68%20-5.34%203.36%20-5%202%20C-2.4375%200.75%20-2.4375%200.75%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(743,538)'/%3e%3cpath%20d='M0%200%20C3.63%200%207.26%200%2011%200%20C9.515%201.98%209.515%201.98%208%204%20C4.8125%204.25%204.8125%204.25%202%204%20C1.34%202.68%200.68%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(473,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C2.62227918%205.43940666%203.3864587%209.33862697%202%2015%20C1.01%2015.495%201.01%2015.495%200%2016%20C0%2013.36%200%2010.72%200%208%20C-0.66%207.67%20-1.32%207.34%20-2%207%20C-1.125%202.25%20-1.125%202.25%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(294,496)'/%3e%3cpath%20d='M0%200%20C1.134375%200.020625%202.26875%200.04125%203.4375%200.0625%20C4.0975%202.0425%204.7575%204.0225%205.4375%206.0625%20C4.4475%206.7225%203.4575%207.3825%202.4375%208.0625%20C0.10416667%205.72916667%20-2.22916667%203.39583333%20-4.5625%201.0625%20C-3.5625%200.0625%20-3.5625%200.0625%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(594.5625,489.9375)'/%3e%3cpath%20d='M0%200%20C0%200.33%200%200.66%200%201%20C-2.31%201%20-4.62%201%20-7%201%20C-7%201.66%20-7%202.32%20-7%203%20C-7.99%203%20-8.98%203%20-10%203%20C-10%203.66%20-10%204.32%20-10%205%20C-11.65%205%20-13.3%205%20-15%205%20C-15%204.34%20-15%203.68%20-15%203%20C-15.66%202.67%20-16.32%202.34%20-17%202%20C-11.19233704%200.4943096%20-6.0018137%20-0.21824777%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(750,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%203.63%201%207.26%201%2011%20C0.34%209.68%20-0.32%208.36%20-1%207%20C-2.32%207.33%20-3.64%207.66%20-5%208%20C-4.67%206.35%20-4.34%204.7%20-4%203%20C-3.01%203%20-2.02%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(303,481)'/%3e%3cpath%20d='M0%200%20C4.62%200%209.24%200%2014%200%20C14%200.66%2014%201.32%2014%202%20C11%203%2011%203%208.625%202.4375%20C5.45352412%201.90892069%203.84890119%202.61624799%201%204%20C0.67%202.68%200.34%201.36%200%200%20Z%20'%20fill='%2394D600'%20transform='translate(634,469)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.64%201%205.28%201%208%20C-5.27%207.67%20-11.54%207.34%20-18%207%20C-18%206.67%20-18%206.34%20-18%206%20C-9.585%205.505%20-9.585%205.505%20-1%205%20C-0.67%203.35%20-0.34%201.7%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(931,557)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.34%203.31%200.68%205.62%200%208%20C-0.99%208%20-1.98%208%20-3%208%20C-3%205.69%20-3%203.38%20-3%201%20C-2.01%200.67%20-1.02%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(621,536)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.66%202.97%202.32%205.94%203%209%20C-0.96%209%20-4.92%209%20-9%209%20C-8.67%208.34%20-8.34%207.68%20-8%207%20C-5.69%207%20-3.38%207%20-1%207%20C-0.67%204.69%20-0.34%202.38%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(808,513)'/%3e%3cpath%20d='M0%200%20C0%203.73675706%20-1.26051811%205.72174568%20-3%209%20C-3.391875%209.78375%20-3.78375%2010.5675%20-4.1875%2011.375%20C-4.455625%2011.91125%20-4.72375%2012.4475%20-5%2013%20C-5.99%2013%20-6.98%2013%20-8%2013%20C-7.51294002%208.6164602%20-6.21626567%206.93247752%20-3%204%20C-1.97676564%202.68441297%20-0.96873032%201.35622245%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(648,441)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2.36923077%206.53846154%202.36923077%206.53846154%200.5%208.875%20C-0.2425%209.431875%20-0.2425%209.431875%20-1%2010%20C-1.66%209.67%20-2.32%209.34%20-3%209%20C-2.30058404%205.85262818%20-1.23921302%202.97411124%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(228,582)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2.125%205.75%202.125%205.75%201%208%20C0.34%208%20-0.32%208%20-1%208%20C-1.33%208.99%20-1.66%209.98%20-2%2011%20C-3.13643966%207.59068103%20-2.86747764%206.99664544%20-1.5625%203.8125%20C-1.13130859%202.73935547%20-1.13130859%202.73935547%20-0.69140625%201.64453125%20C-0.46324219%201.10183594%20-0.23507812%200.55914063%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(350,514)'/%3e%3cpath%20d='M0%200%20C3.3%200%206.6%200%2010%200%20C10.33%201.32%2010.66%202.64%2011%204%20C9.35%204%207.7%204%206%204%20C6%203.67%206%203.34%206%203%20C3.03%202.505%203.03%202.505%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(384,488)'/%3e%3cpath%20d='M0%200%20C0.845625%200.804375%201.69125%201.60875%202.5625%202.4375%20C5.8515158%205.21628662%208.68629604%205.74117776%2013%206%20C13%206.33%2013%206.66%2013%207%20C11.20866022%207.05391993%209.41686101%207.09275571%207.625%207.125%20C6.62726562%207.14820313%205.62953125%207.17140625%204.6015625%207.1953125%20C2%207%202%207%200%205%20C-0.125%202.375%20-0.125%202.375%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(677,535)'/%3e%3cpath%20d='M0%200%20C0.33%201.65%200.66%203.3%201%205%20C-1.97%205%20-4.94%205%20-8%205%20C-3%200%20-3%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(175,531)'/%3e%3cpath%20d='M0%200%20C2.97%200%205.94%200%209%200%20C9.33%200.66%209.66%201.32%2010%202%20C3.71428571%204.42857143%203.71428571%204.42857143%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(739,522)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2.33%203.63%202.66%207.26%203%2011%20C2.01%2011%201.02%2011%200%2011%20C0%207.37%200%203.74%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(304,520)'/%3e%3cpath%20d='M0%200%20C0%200.66%200%201.32%200%202%20C-4.95%202%20-9.9%202%20-15%202%20C-11.5998228%200.2999114%20-9.96676075%20-0.32111638%20-6.375%20-0.6875%20C-5.21097656%20-0.81705078%20-5.21097656%20-0.81705078%20-4.0234375%20-0.94921875%20C-2%20-1%20-2%20-1%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(507,520)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.33%202.97%201.66%205.94%202%209%20C1.01%209.33%200.02%209.66%20-1%2010%20C-2.1875%207.8125%20-2.1875%207.8125%20-3%205%20C-1.6875%202.1875%20-1.6875%202.1875%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(421,489)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%203.96%202%207.92%202%2012%20C1.01%2011.67%200.02%2011.34%20-1%2011%20C-0.67%207.37%20-0.34%203.74%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(238,488)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%200.99%204%201.98%204%203%20C4.66%203%205.32%203%206%203%20C7.0625%204.8125%207.0625%204.8125%208%207%20C7.67%207.99%207.34%208.98%207%2010%20C5.83043409%208.52312468%204.66441854%207.04343707%203.5%205.5625%20C2.8503125%204.73878906%202.200625%203.91507812%201.53125%203.06640625%20C0%201%200%201%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(674,437)'/%3e%3cpath%20d='M0%200%20C3.23739279%201.6186964%204.42244771%204.84489543%206%208%20C2.31245243%207.50168276%200.39509338%206.89932357%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(230,587)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%203.3%201%206.6%201%2010%20C0.01%2010.495%200.01%2010.495%20-1%2011%20C-2.1875%208.3125%20-2.1875%208.3125%20-3%205%20C-1.6875%202.125%20-1.6875%202.125%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(533,527)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.22151549%201.79008467%201.42682213%203.58218162%201.625%205.375%20C1.74101563%206.37273438%201.85703125%207.37046875%201.9765625%208.3984375%20C1.98429688%209.25695312%201.99203125%2010.11546875%202%2011%20C1.34%2011.66%200.68%2012.32%200%2013%20C-0.66%2010.03%20-1.32%207.06%20-2%204%20C-1.34%204%20-0.68%204%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(554,513)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C-3.51718381%203.36884358%20-6.58774263%202.47075246%20-11%201%20C-6.78915963%20-1.80722691%20-4.88445782%20-0.94537893%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(399,468)'/%3e%3cpath%20d='M0%200%20C-0.66%200.66%20-1.32%201.32%20-2%202%20C-1.34%202.66%20-0.68%203.32%200%204%20C-3.96%203.67%20-7.92%203.34%20-12%203%20C-7.27030266%20-0.54727301%20-5.56673301%20-1.35407019%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(167,435)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C0.0625%204.625%200.0625%204.625%20-1%207%20C-1.33%206.34%20-1.66%205.68%20-2%205%20C-4.32156597%204.59270772%20-6.6568787%204.25561323%20-9%204%20C-9%203.67%20-9%203.34%20-9%203%20C-6.03%202.01%20-3.06%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(891,537)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%202.31%202%204.62%202%207%20C2.66%207%203.32%207%204%207%20C4%207.99%204%208.98%204%2010%20C2.68%2010%201.36%2010%200%2010%20C0%206.7%200%203.4%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(296,537)'/%3e%3cpath%20d='M0%200%20C1.7074998%201.28062485%203.37373596%202.61767557%205%204%20C5%204.66%205%205.32%205%206%20C1.04%206%20-2.92%206%20-7%206%20C-7%205.67%20-7%205.34%20-7%205%20C-3.535%204.505%20-3.535%204.505%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(683,450)'/%3e%3cpath%20d='M0%200%20C5.94%200.99%205.94%200.99%2012%202%20C12%202.66%2012%203.32%2012%204%20C10.56416999%204.10836453%209.1259798%204.18576167%207.6875%204.25%20C6.48673828%204.31960938%206.48673828%204.31960938%205.26171875%204.390625%20C3%204%203%204%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(667,563)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5.33%201.98%205.66%203.96%206%206%20C3.69%205.01%201.38%204.02%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(848,554)'/%3e%3cpath%20d='M0%200%20C3%204%203%204%204%207%20C0.25%2010%200.25%2010%20-2%2010%20C-1.34%206.7%20-0.68%203.4%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(187,506)'/%3e%3cpath%20d='M0%200%20C1.9451%202.91765%202.45276317%204.62537285%203%208%20C1.02%208.99%201.02%208.99%20-1%2010%20C-0.67%206.7%20-0.34%203.4%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(715,500)'/%3e%3cpath%20d='M0%200%20C2.9375%201.1875%202.9375%201.1875%203.9375%203.1875%20C1.02267222%203.99717438%20-0.52363217%204.40595993%20-3.375%203.25%20C-3.931875%202.899375%20-4.48875%202.54875%20-5.0625%202.1875%20C-5.0625%201.5275%20-5.0625%200.8675%20-5.0625%200.1875%20C-3.0625%20-0.8125%20-3.0625%20-0.8125%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(606.0625,467.8125)'/%3e%3cpath%20d='M0%200%20C0.5625%201.9375%200.5625%201.9375%201%204%20C0%205%200%205%20-3.0625%205.0625%20C-4.031875%205.041875%20-5.00125%205.02125%20-6%205%20C-6.33%204.34%20-6.66%203.68%20-7%203%20C-4.69%202.01%20-2.38%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(485,537)'/%3e%3cpath%20d='M0%200%20C0.99%200.33%201.98%200.66%203%201%20C2.01%203.97%201.02%206.94%200%2010%20C-0.33%2010%20-0.66%2010%20-1%2010%20C-1.125%202.25%20-1.125%202.25%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(322,486)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5%200.99%205%201.98%205%203%20C3.35%203.66%201.7%204.32%200%205%20C0%203.35%200%201.7%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(738,552)'/%3e%3cpath%20d='M0%200%20C0.91007813%200.00902344%201.82015625%200.01804687%202.7578125%200.02734375%20C3.45648438%200.03894531%204.15515625%200.05054688%204.875%200.0625%20C5.205%200.7225%205.535%201.3825%205.875%202.0625%20C4.82699219%202.15337891%204.82699219%202.15337891%203.7578125%202.24609375%20C2.84773437%202.32988281%201.93765625%202.41367187%201%202.5%20C0.09507812%202.58121094%20-0.80984375%202.66242188%20-1.7421875%202.74609375%20C-4.13610861%202.93239285%20-4.13610861%202.93239285%20-6.125%204.0625%20C-6.455%203.0725%20-6.785%202.0825%20-7.125%201.0625%20C-4.60024538%20-0.19987731%20-2.81299534%20-0.03606404%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(128.125,458.9375)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C0.515%204.465%200.515%204.465%20-1%208%20C-1.66%208%20-2.32%208%20-3%208%20C-3%206.02%20-3%204.04%20-3%202%20C-2.01%202%20-1.02%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(294,556)'/%3e%3cpath%20d='M0%200%20C1.51400391%200.01740234%201.51400391%200.01740234%203.05859375%200.03515625%20C4.07050781%200.04417969%205.08242188%200.05320312%206.125%200.0625%20C7.29869141%200.07990234%207.29869141%200.07990234%208.49609375%200.09765625%20C8.49609375%200.42765625%208.49609375%200.75765625%208.49609375%201.09765625%20C5.52609375%201.09765625%202.55609375%201.09765625%20-0.50390625%201.09765625%20C-0.50390625%201.75765625%20-0.50390625%202.41765625%20-0.50390625%203.09765625%20C-2.81390625%203.09765625%20-5.12390625%203.09765625%20-7.50390625%203.09765625%20C-6.86453125%202.78828125%20-6.22515625%202.47890625%20-5.56640625%202.16015625%20C-1.48563778%200.05794219%20-1.48563778%200.05794219%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(463.50390625,540.90234375)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C2.32%201.67%203.64%201.34%205%201%20C3.9024777%203.99324263%203.32317108%204.84610901%200.375%206.25%20C-0.40875%206.4975%20-1.1925%206.745%20-2%207%20C-1.34%204.69%20-0.68%202.38%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(306,531)'/%3e%3cpath%20d='M0%200%20C0.33%200.99%200.66%201.98%201%203%20C-0.98%204.98%20-2.96%206.96%20-5%209%20C-5.99%208.67%20-6.98%208.34%20-8%208%20C-5.33333333%205.33333333%20-2.66666667%202.66666667%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(601,528)'/%3e%3cpath%20d='M0%200%20C0.99%200%201.98%200%203%200%20C3.125%202.875%203.125%202.875%203%206%20C2.34%206.66%201.68%207.32%201%208%20C0%207%200%207%20-0.0625%203.4375%20C-0.041875%202.303125%20-0.02125%201.16875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(272,520)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%201.66%201.34%202.32%201%203%20C0.95977609%205.3329866%200.95679753%207.66706666%201%2010%20C0.34%2010%20-0.32%2010%20-1%2010%20C-1.9765625%203.9453125%20-1.9765625%203.9453125%20-2%202%20C-1.34%201.34%20-0.68%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(359,502)'/%3e%3cpath%20d='M0%200%20C3.63%200.66%207.26%201.32%2011%202%20C11%202.33%2011%202.66%2011%203%20C7.37%203%203.74%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(387,469)'/%3e%3cpath%20d='M0%200%20C2.31%200.33%204.62%200.66%207%201%20C6.67%201.66%206.34%202.32%206%203%20C4.35%203%202.7%203%201%203%20C1%203.99%201%204.98%201%206%20C0.01%206%20-0.98%206%20-2%206%20C-1.34%204.02%20-0.68%202.04%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(305,468)'/%3e%3cpath%20d='M0%200%20C1.65%200.33%203.3%200.66%205%201%20C5%201.99%205%202.98%205%204%20C3.35%204%201.7%204%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(549,552)'/%3e%3cpath%20d='M0%200%20C0.94875%200.04125%201.8975%200.0825%202.875%200.125%20C2.875%200.785%202.875%201.445%202.875%202.125%20C0.895%202.785%20-1.085%203.445%20-3.125%204.125%20C-3.785%203.465%20-4.445%202.805%20-5.125%202.125%20C-3.125%200.125%20-3.125%200.125%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(181.125,553.875)'/%3e%3cpath%20d='M0%200%20C1.9375%200.3125%201.9375%200.3125%204%201%20C4.33%201.99%204.66%202.98%205%204%20C2.69%204%200.38%204%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(587,540)'/%3e%3cpath%20d='M0%200%20C0%202.31%200%204.62%200%207%20C-0.99%207.495%20-0.99%207.495%20-2%208%20C-2%207.01%20-2%206.02%20-2%205%20C-2.66%205%20-3.32%205%20-4%205%20C-3.625%203.0625%20-3.625%203.0625%20-3%201%20C-1%200%20-1%200%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(185,520)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C1.67%202.64%201.34%205.28%201%208%20C0.01%207.67%20-0.98%207.34%20-2%207%20C-1.34%207%20-0.68%207%200%207%20C0%206.01%200%205.02%200%204%20C-1.32%203.67%20-2.64%203.34%20-4%203%20C-2.68%202.67%20-1.36%202.34%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(616,486)'/%3e%3cpath%20d='M0%200%20C3.125%20-0.1875%203.125%20-0.1875%206%200%20C6%200.99%206%201.98%206%203%20C3.36%203%200.72%203%20-2%203%20C-1.34%202.01%20-0.68%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(842,477)'/%3e%3cpath%20d='M0%200%20C2.475%200.495%202.475%200.495%205%201%20C4.67%202.32%204.34%203.64%204%205%20C2.68%205.33%201.36%205.66%200%206%20C0%204.02%200%202.04%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(920,472)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5.33%200.99%205.66%201.98%206%203%20C3.69%203%201.38%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(568,560)'/%3e%3cpath%20d='M0%200%20C3.39609044%201.19322096%205.62433927%202.28495916%208%205%20C8.66%205.66%209.32%206.32%2010%207%20C7.29068581%206.84518205%205.53415961%206.51827919%203.5546875%204.59765625%20C2.32320358%203.10228292%201.1570163%201.5537076%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(656,551)'/%3e%3cpath%20d='M0%200%20C-3.6441774%202.4294516%20-5.71241272%202.16179575%20-10%202%20C-10%201.34%20-10%200.68%20-10%200%20C-6.33694766%20-0.74926071%20-3.57644848%20-1.2380014%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(762,542)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%201.65%204%203.3%204%205%20C3.01%205%202.02%205%201%205%20C0.34%203.68%20-0.32%202.36%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(780,539)'/%3e%3cpath%20d='M0%200%20C0%201.98%200%203.96%200%206%20C-0.99%206%20-1.98%206%20-3%206%20C-3.66%204.68%20-4.32%203.36%20-5%202%20C-1.125%200%20-1.125%200%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(611,497)'/%3e%3cpath%20d='M0%200%20C2%203%202%203%201.625%205.1875%20C1.41875%205.785625%201.2125%206.38375%201%207%20C0.01%207%20-0.98%207%20-2%207%20C-2%205.35%20-2%203.7%20-2%202%20C-1.34%202%20-0.68%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(260,485)'/%3e%3cpath%20d='M0%200%20C0.99%200.33%201.98%200.66%203%201%20C3.33%202.98%203.66%204.96%204%207%20C2.35%206.01%200.7%205.02%20-1%204%20C-0.67%202.68%20-0.34%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(896,467)'/%3e%3cpath%20d='M0%200%20C2.97%200%205.94%200%209%200%20C9%201.32%209%202.64%209%204%20C8.01%204%207.02%204%206%204%20C5.67%203.34%205.34%202.68%205%202%20C2.47266765%201.34444881%202.47266765%201.34444881%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(396,466)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4%201.99%204%202.98%204%204%20C1.69%204.33%20-0.62%204.66%20-3%205%20C-2.01%203.35%20-1.02%201.7%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4.33%202.65%204.66%204.3%205%206%20C4.01%206%203.02%206%202%206%20C1.34%204.02%200.68%202.04%200%200%20Z%20'%20fill='%236F9300'%20transform='translate(690,541)'/%3e%3cpath%20d='M0%200%20C1.32%200.99%202.64%201.98%204%203%20C3.67%203.66%203.34%204.32%203%205%20C1.35%205%20-0.3%205%20-2%205%20C-1.34%203.35%20-0.68%201.7%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(858,531)'/%3e%3cpath%20d='M0%200%20C0.66%200.99%201.32%201.98%202%203%20C1.67%203.99%201.34%204.98%201%206%20C-1.5625%207.1875%20-1.5625%207.1875%20-4%208%20C-2.68%205.36%20-1.36%202.72%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(373,482)'/%3e%3cpath%20d='M0%200%20C1.74959319%202.62438979%202.62068453%203.96547627%203%207%20C2.01%208.485%202.01%208.485%201%2010%20C0.34%209.67%20-0.32%209.34%20-1%209%20C-0.67%208.34%20-0.34%207.68%200%207%20C0.04022391%204.6670134%200.04320247%202.33293334%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(360,477)'/%3e%3cpath%20d='M0%200%20C0%200.66%200%201.32%200%202%20C-0.66%202%20-1.32%202%20-2%202%20C-2%202.99%20-2%203.98%20-2%205%20C-3.32%205%20-4.64%205%20-6%205%20C-5.6875%203.0625%20-5.6875%203.0625%20-5%201%20C-2%200%20-2%200%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(891,561)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C0.01%203.32%20-0.98%204.64%20-2%206%20C-3.32%205.34%20-4.64%204.68%20-6%204%20C-4.02%202.68%20-2.04%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(715,553)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C6.33%201.65%206.66%203.3%207%205%20C3.535%203.02%203.535%203.02%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(432,552)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.60196439%203.88575819%201.20990931%204.82189513%20-1.0625%206.75%20C-1.701875%207.1625%20-2.34125%207.575%20-3%208%20C-1.125%201.125%20-1.125%201.125%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(299,549)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2%201.99%202%202.98%202%204%20C-1.13349732%205.04449911%20-1.98968256%204.93423645%20-5%204%20C-3.35%202.68%20-1.7%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(198,546)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4%204%204%204%202.5%205.6875%20C2.005%206.120625%201.51%206.55375%201%207%20C0.67%204.69%200.34%202.38%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(802,545)'/%3e%3cpath%20d='M0%200%20C2%201.3125%202%201.3125%204%203%20C4%203.99%204%204.98%204%206%20C2.02%205.34%200.04%204.68%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(617,530)'/%3e%3cpath%20d='M0%200%20C2%201.8125%202%201.8125%204%204%20C4%204.99%204%205.98%204%207%20C2.68%207.33%201.36%207.66%200%208%20C0%205.36%200%202.72%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(552,520)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C0.1875%204%200.1875%204%20-2%207%20C-2.99%207%20-3.98%207%20-5%207%20C-3.35%204.69%20-1.7%202.38%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(715,519)'/%3e%3cpath%20d='M0%200%20C2.50037734%202.17424117%203.43628586%203.73045798%204%207%20C2.68%206.67%201.36%206.34%200%206%20C0%204.02%200%202.04%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(483,496)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%202.98%201.34%204.96%201%207%20C0.34%206.67%20-0.32%206.34%20-1%206%20C-1.625%203.4375%20-1.625%203.4375%20-2%201%20C-1.34%200.67%20-0.68%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(182,471)'/%3e%3cpath%20d='M0%200%20C0.33%201.32%200.66%202.64%201%204%20C3.31%204%205.62%204%208%204%20C8%204.33%208%204.66%208%205%20C4.7%205%201.4%205%20-2%205%20C-1.34%203.35%20-0.68%201.7%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(638,451)'/%3e%3c/svg%3e",
|
|
1110
|
-
alt: "Dyrected",
|
|
1111
|
-
className: "dy-h-7 dy-w-auto"
|
|
1112
|
-
})
|
|
1113
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
1114
|
-
className: "dy-ml-auto dy-flex dy-items-center dy-gap-1.5",
|
|
1115
|
-
children: [
|
|
1116
|
-
/* @__PURE__ */ jsx(ThemeSelector, { mobile: true }),
|
|
1117
|
-
user && /* @__PURE__ */ jsx("div", {
|
|
1118
|
-
className: "dy-flex dy-h-8 dy-w-8 dy-items-center dy-justify-center dy-rounded-full dy-bg-primary/10 dy-text-primary dy-font-semibold dy-text-xs dy-shrink-0",
|
|
1119
|
-
children: (user.name || user.email || "?").charAt(0).toUpperCase()
|
|
1120
|
-
}),
|
|
1121
|
-
/* @__PURE__ */ jsx("button", {
|
|
1122
|
-
type: "button",
|
|
1123
|
-
onClick: () => setMobileOpen(true),
|
|
1124
|
-
className: "dy-flex dy-h-9 dy-w-9 dy-items-center dy-justify-center dy-rounded-md dy-text-muted-foreground hover:dy-bg-accent hover:dy-text-foreground dy-transition-colors",
|
|
1125
|
-
"aria-label": "Open menu",
|
|
1126
|
-
children: /* @__PURE__ */ jsx(Menu, { className: "dy-h-5 dy-w-5" })
|
|
1127
|
-
})
|
|
1128
|
-
]
|
|
1129
|
-
})]
|
|
1169
|
+
children: [!isEmbedded && /* @__PURE__ */ jsx("button", {
|
|
1170
|
+
type: "button",
|
|
1171
|
+
onClick: () => setMobileOpen(true),
|
|
1172
|
+
className: "dy-fixed md:dy-hidden dy-z-10 dy-top-2 dy-right-2 dy-flex dy-h-9 dy-w-9 dy-items-center dy-justify-center dy-rounded-md dy-text-muted-foreground dy-bg-background hover:dy-bg-accent hover:dy-text-foreground dy-transition-colors",
|
|
1173
|
+
"aria-label": "Open menu",
|
|
1174
|
+
children: /* @__PURE__ */ jsx(Menu, { className: "dy-h-5 dy-w-5" })
|
|
1130
1175
|
}), /* @__PURE__ */ jsx("div", {
|
|
1131
1176
|
className: "dy-flex-1 dy-py-6 dy-px-4 lg:dy-py-10 lg:dy-px-6",
|
|
1132
1177
|
children
|
|
@@ -1219,7 +1264,7 @@ function getStatusLabel(doc) {
|
|
|
1219
1264
|
}
|
|
1220
1265
|
function Dashboard() {
|
|
1221
1266
|
const { client, components, user } = useDyrected();
|
|
1222
|
-
const currentVersion = "2.5.
|
|
1267
|
+
const currentVersion = "2.5.62";
|
|
1223
1268
|
const [latestVersion, setLatestVersion] = useState(() => {
|
|
1224
1269
|
if (typeof window === "undefined") return null;
|
|
1225
1270
|
return localStorage.getItem("dyrected_latest_release");
|
|
@@ -2985,26 +3030,357 @@ function CsvImporter({ slug, schema, onClose }) {
|
|
|
2985
3030
|
});
|
|
2986
3031
|
}
|
|
2987
3032
|
//#endregion
|
|
3033
|
+
//#region src/lib/format.ts
|
|
3034
|
+
/** Normalize the shorthand string form into the object form. */
|
|
3035
|
+
function resolveNumberFormat(format) {
|
|
3036
|
+
if (!format) return null;
|
|
3037
|
+
return typeof format === "string" ? { type: format } : format;
|
|
3038
|
+
}
|
|
3039
|
+
/** Normalize the shorthand string form into the object form. */
|
|
3040
|
+
function resolveDateFormat(format) {
|
|
3041
|
+
if (!format) return null;
|
|
3042
|
+
return typeof format === "string" ? { type: format } : format;
|
|
3043
|
+
}
|
|
3044
|
+
function toNumber(value) {
|
|
3045
|
+
if (typeof value === "number") return Number.isFinite(value) ? value : null;
|
|
3046
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
3047
|
+
const parsed = Number(value);
|
|
3048
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
3049
|
+
}
|
|
3050
|
+
return null;
|
|
3051
|
+
}
|
|
3052
|
+
/**
|
|
3053
|
+
* When the field uses the `rating` format, return the numeric value and star
|
|
3054
|
+
* count so the caller can render stars. Returns `null` for every other format,
|
|
3055
|
+
* signalling that {@link formatNumber} should be used instead.
|
|
3056
|
+
*/
|
|
3057
|
+
function getRatingSpec(value, format) {
|
|
3058
|
+
const resolved = resolveNumberFormat(format);
|
|
3059
|
+
if (!resolved || resolved.type !== "rating") return null;
|
|
3060
|
+
const num = toNumber(value);
|
|
3061
|
+
if (num === null) return null;
|
|
3062
|
+
const max = typeof resolved.max === "number" && resolved.max > 0 ? Math.floor(resolved.max) : 5;
|
|
3063
|
+
return {
|
|
3064
|
+
value: Math.max(0, Math.min(num, max)),
|
|
3065
|
+
max
|
|
3066
|
+
};
|
|
3067
|
+
}
|
|
3068
|
+
var BYTE_UNITS_DECIMAL = [
|
|
3069
|
+
"B",
|
|
3070
|
+
"KB",
|
|
3071
|
+
"MB",
|
|
3072
|
+
"GB",
|
|
3073
|
+
"TB",
|
|
3074
|
+
"PB",
|
|
3075
|
+
"EB"
|
|
3076
|
+
];
|
|
3077
|
+
var BYTE_UNITS_BINARY = [
|
|
3078
|
+
"B",
|
|
3079
|
+
"KiB",
|
|
3080
|
+
"MiB",
|
|
3081
|
+
"GiB",
|
|
3082
|
+
"TiB",
|
|
3083
|
+
"PiB",
|
|
3084
|
+
"EiB"
|
|
3085
|
+
];
|
|
3086
|
+
function formatBytes$1(bytes, binary, maximumFractionDigits) {
|
|
3087
|
+
const base = binary ? 1024 : 1e3;
|
|
3088
|
+
const units = binary ? BYTE_UNITS_BINARY : BYTE_UNITS_DECIMAL;
|
|
3089
|
+
const sign = bytes < 0 ? "-" : "";
|
|
3090
|
+
let amount = Math.abs(bytes);
|
|
3091
|
+
let unitIndex = 0;
|
|
3092
|
+
while (amount >= base && unitIndex < units.length - 1) {
|
|
3093
|
+
amount /= base;
|
|
3094
|
+
unitIndex += 1;
|
|
3095
|
+
}
|
|
3096
|
+
const digits = unitIndex === 0 ? 0 : maximumFractionDigits;
|
|
3097
|
+
return `${sign}${amount.toFixed(digits).replace(/\.?0+$/, "")} ${units[unitIndex]}`;
|
|
3098
|
+
}
|
|
3099
|
+
/**
|
|
3100
|
+
* Format a numeric field value for display. Returns a plain string for every
|
|
3101
|
+
* format except `rating` (use {@link getRatingSpec} for that). Non-numeric input
|
|
3102
|
+
* is stringified unchanged.
|
|
3103
|
+
*/
|
|
3104
|
+
function formatNumber(value, format) {
|
|
3105
|
+
const resolved = resolveNumberFormat(format);
|
|
3106
|
+
const num = toNumber(value);
|
|
3107
|
+
if (!resolved || num === null) return value == null ? "" : String(value);
|
|
3108
|
+
try {
|
|
3109
|
+
switch (resolved.type) {
|
|
3110
|
+
case "decimal": return new Intl.NumberFormat(resolved.locale, {
|
|
3111
|
+
minimumFractionDigits: resolved.minimumFractionDigits,
|
|
3112
|
+
maximumFractionDigits: resolved.maximumFractionDigits
|
|
3113
|
+
}).format(num);
|
|
3114
|
+
case "currency": return new Intl.NumberFormat(resolved.locale, {
|
|
3115
|
+
style: "currency",
|
|
3116
|
+
currency: resolved.currency ?? "USD",
|
|
3117
|
+
minimumFractionDigits: resolved.minimumFractionDigits,
|
|
3118
|
+
maximumFractionDigits: resolved.maximumFractionDigits
|
|
3119
|
+
}).format(num);
|
|
3120
|
+
case "percent": {
|
|
3121
|
+
const ratio = resolved.scale === false ? num / 100 : num;
|
|
3122
|
+
return new Intl.NumberFormat(resolved.locale, {
|
|
3123
|
+
style: "percent",
|
|
3124
|
+
minimumFractionDigits: resolved.minimumFractionDigits,
|
|
3125
|
+
maximumFractionDigits: resolved.maximumFractionDigits
|
|
3126
|
+
}).format(ratio);
|
|
3127
|
+
}
|
|
3128
|
+
case "unit": return new Intl.NumberFormat(resolved.locale, {
|
|
3129
|
+
style: "unit",
|
|
3130
|
+
unit: resolved.unit,
|
|
3131
|
+
unitDisplay: resolved.unitDisplay,
|
|
3132
|
+
maximumFractionDigits: resolved.maximumFractionDigits
|
|
3133
|
+
}).format(num);
|
|
3134
|
+
case "compact": return new Intl.NumberFormat(resolved.locale, {
|
|
3135
|
+
notation: "compact",
|
|
3136
|
+
maximumFractionDigits: resolved.maximumFractionDigits ?? 1
|
|
3137
|
+
}).format(num);
|
|
3138
|
+
case "bytes": return formatBytes$1(num, resolved.binary === true, resolved.maximumFractionDigits ?? 1);
|
|
3139
|
+
case "rating": return `${num}/${typeof resolved.max === "number" ? resolved.max : 5}`;
|
|
3140
|
+
default: return String(num);
|
|
3141
|
+
}
|
|
3142
|
+
} catch {
|
|
3143
|
+
return String(num);
|
|
3144
|
+
}
|
|
3145
|
+
}
|
|
3146
|
+
var RELATIVE_DIVISIONS = [
|
|
3147
|
+
{
|
|
3148
|
+
amount: 60,
|
|
3149
|
+
unit: "second"
|
|
3150
|
+
},
|
|
3151
|
+
{
|
|
3152
|
+
amount: 60,
|
|
3153
|
+
unit: "minute"
|
|
3154
|
+
},
|
|
3155
|
+
{
|
|
3156
|
+
amount: 24,
|
|
3157
|
+
unit: "hour"
|
|
3158
|
+
},
|
|
3159
|
+
{
|
|
3160
|
+
amount: 7,
|
|
3161
|
+
unit: "day"
|
|
3162
|
+
},
|
|
3163
|
+
{
|
|
3164
|
+
amount: 4.34524,
|
|
3165
|
+
unit: "week"
|
|
3166
|
+
},
|
|
3167
|
+
{
|
|
3168
|
+
amount: 12,
|
|
3169
|
+
unit: "month"
|
|
3170
|
+
},
|
|
3171
|
+
{
|
|
3172
|
+
amount: Number.POSITIVE_INFINITY,
|
|
3173
|
+
unit: "year"
|
|
3174
|
+
}
|
|
3175
|
+
];
|
|
3176
|
+
function formatRelative(date, locale, now) {
|
|
3177
|
+
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
|
|
3178
|
+
let duration = (date.getTime() - now) / 1e3;
|
|
3179
|
+
for (const division of RELATIVE_DIVISIONS) {
|
|
3180
|
+
if (Math.abs(duration) < division.amount) return rtf.format(Math.round(duration), division.unit);
|
|
3181
|
+
duration /= division.amount;
|
|
3182
|
+
}
|
|
3183
|
+
return rtf.format(Math.round(duration), "year");
|
|
3184
|
+
}
|
|
3185
|
+
/**
|
|
3186
|
+
* Format a date/datetime/time field value for display. `now` is injected so the
|
|
3187
|
+
* `relative` format stays deterministic and testable. Unparseable input is
|
|
3188
|
+
* stringified unchanged.
|
|
3189
|
+
*/
|
|
3190
|
+
function formatDate(value, format, fieldType, now = Date.now()) {
|
|
3191
|
+
const resolved = resolveDateFormat(format);
|
|
3192
|
+
if (value == null || value === "") return "";
|
|
3193
|
+
const raw = String(value);
|
|
3194
|
+
const date = fieldType === "time" && /^\d{1,2}:\d{2}/.test(raw) ? /* @__PURE__ */ new Date(`1970-01-01T${raw}`) : new Date(raw);
|
|
3195
|
+
if (Number.isNaN(date.getTime())) return raw;
|
|
3196
|
+
const type = resolved?.type ?? fieldType;
|
|
3197
|
+
try {
|
|
3198
|
+
switch (type) {
|
|
3199
|
+
case "relative": return formatRelative(date, resolved && "locale" in resolved ? resolved.locale : void 0, now);
|
|
3200
|
+
case "time": return date.toLocaleTimeString(resolved?.locale, resolved?.type === "time" ? { timeStyle: resolved.timeStyle ?? "short" } : { timeStyle: "short" });
|
|
3201
|
+
case "datetime": return date.toLocaleString(resolved?.locale, resolved?.type === "datetime" ? {
|
|
3202
|
+
dateStyle: resolved.dateStyle ?? "medium",
|
|
3203
|
+
timeStyle: resolved.timeStyle ?? "short"
|
|
3204
|
+
} : {
|
|
3205
|
+
dateStyle: "medium",
|
|
3206
|
+
timeStyle: "short"
|
|
3207
|
+
});
|
|
3208
|
+
default: return date.toLocaleDateString(resolved?.locale, resolved?.type === "date" ? { dateStyle: resolved.dateStyle ?? "medium" } : { dateStyle: "medium" });
|
|
3209
|
+
}
|
|
3210
|
+
} catch {
|
|
3211
|
+
return date.toLocaleString();
|
|
3212
|
+
}
|
|
3213
|
+
}
|
|
3214
|
+
/**
|
|
3215
|
+
* Soft pill classes per {@link DisplayTone}. Kept here (not as JSX) so the same
|
|
3216
|
+
* mapping can drive list cells, previews, and tests. Composed with the base pill
|
|
3217
|
+
* classes by the caller.
|
|
3218
|
+
*/
|
|
3219
|
+
var DISPLAY_TONE_CLASS = {
|
|
3220
|
+
neutral: "dy-border-border dy-bg-muted dy-text-muted-foreground",
|
|
3221
|
+
primary: "dy-border-primary/20 dy-bg-primary/10 dy-text-primary",
|
|
3222
|
+
success: "dy-border-emerald-500/20 dy-bg-emerald-500/10 dy-text-emerald-600",
|
|
3223
|
+
warning: "dy-border-amber-500/20 dy-bg-amber-500/10 dy-text-amber-600",
|
|
3224
|
+
danger: "dy-border-red-500/20 dy-bg-red-500/10 dy-text-red-600",
|
|
3225
|
+
info: "dy-border-blue-500/20 dy-bg-blue-500/10 dy-text-blue-600"
|
|
3226
|
+
};
|
|
3227
|
+
/** The color classes for a tone, falling back to `neutral`. */
|
|
3228
|
+
function displayToneClass(tone) {
|
|
3229
|
+
return DISPLAY_TONE_CLASS[tone ?? "neutral"] ?? DISPLAY_TONE_CLASS.neutral;
|
|
3230
|
+
}
|
|
3231
|
+
function resolveOptionFormat(format) {
|
|
3232
|
+
if (!format) return null;
|
|
3233
|
+
return typeof format === "string" ? { type: format } : format;
|
|
3234
|
+
}
|
|
3235
|
+
function optionLabel(value, options) {
|
|
3236
|
+
if (Array.isArray(options)) {
|
|
3237
|
+
for (const option of options) if (typeof option === "string") {
|
|
3238
|
+
if (option === value) return option;
|
|
3239
|
+
} else if (option && option.value === value) return option.label ?? String(option.value);
|
|
3240
|
+
}
|
|
3241
|
+
return value == null ? "" : String(value);
|
|
3242
|
+
}
|
|
3243
|
+
/**
|
|
3244
|
+
* Resolve a single option value into a badge label + tone. Returns `null` when
|
|
3245
|
+
* the field has no badge format, signalling the caller to render plainly.
|
|
3246
|
+
*/
|
|
3247
|
+
function getOptionBadge(value, format, options) {
|
|
3248
|
+
const resolved = resolveOptionFormat(format);
|
|
3249
|
+
if (!resolved || resolved.type !== "badge") return null;
|
|
3250
|
+
const key = value == null ? "" : String(value);
|
|
3251
|
+
return {
|
|
3252
|
+
label: resolved.labels?.[key] ?? optionLabel(value, options),
|
|
3253
|
+
tone: resolved.tones?.[key] ?? resolved.defaultTone ?? "neutral"
|
|
3254
|
+
};
|
|
3255
|
+
}
|
|
3256
|
+
/**
|
|
3257
|
+
* Resolve a boolean value into a custom label + tone. Returns `null` when the
|
|
3258
|
+
* field has no boolean format, so the caller keeps the default Yes/No badge.
|
|
3259
|
+
*/
|
|
3260
|
+
function getBooleanBadge(value, format) {
|
|
3261
|
+
if (!format || format.type !== "boolean") return null;
|
|
3262
|
+
const side = value ? format.true : format.false;
|
|
3263
|
+
return {
|
|
3264
|
+
label: side?.label ?? (value ? "Yes" : "No"),
|
|
3265
|
+
tone: side?.tone ?? (value ? "success" : "neutral")
|
|
3266
|
+
};
|
|
3267
|
+
}
|
|
3268
|
+
function resolveTextFormat(format) {
|
|
3269
|
+
if (!format) return null;
|
|
3270
|
+
return typeof format === "string" ? { type: format } : format;
|
|
3271
|
+
}
|
|
3272
|
+
function capitalizeWords(text) {
|
|
3273
|
+
return text.replace(/\b\w/g, (char) => char.toUpperCase());
|
|
3274
|
+
}
|
|
3275
|
+
/** Apply a display-only transform to a text value. */
|
|
3276
|
+
function formatText(value, format) {
|
|
3277
|
+
const resolved = resolveTextFormat(format);
|
|
3278
|
+
const text = value == null ? "" : String(value);
|
|
3279
|
+
if (!resolved) return text;
|
|
3280
|
+
switch (resolved.type) {
|
|
3281
|
+
case "uppercase": return text.toUpperCase();
|
|
3282
|
+
case "lowercase": return text.toLowerCase();
|
|
3283
|
+
case "capitalize": return capitalizeWords(text);
|
|
3284
|
+
case "code": return text;
|
|
3285
|
+
case "truncate": return text.length > resolved.length ? `${text.slice(0, resolved.length)}…` : text;
|
|
3286
|
+
case "mask": {
|
|
3287
|
+
const reveal = typeof resolved.reveal === "number" ? Math.max(0, resolved.reveal) : 4;
|
|
3288
|
+
const char = resolved.character ?? "•";
|
|
3289
|
+
if (text.length <= reveal) return text;
|
|
3290
|
+
return `${char.repeat(Math.min(text.length - reveal, 8))}${text.slice(text.length - reveal)}`;
|
|
3291
|
+
}
|
|
3292
|
+
default: return text;
|
|
3293
|
+
}
|
|
3294
|
+
}
|
|
3295
|
+
/** Whether a text format should render in a monospace pill. */
|
|
3296
|
+
function isCodeText(format) {
|
|
3297
|
+
return resolveTextFormat(format)?.type === "code";
|
|
3298
|
+
}
|
|
3299
|
+
/**
|
|
3300
|
+
* Resolve a url/email value into a link spec. Returns `null` when the field has
|
|
3301
|
+
* no link format. `fieldType` selects between an `http` link and a `mailto:`.
|
|
3302
|
+
*/
|
|
3303
|
+
function getLinkSpec(value, format, fieldType) {
|
|
3304
|
+
if (!format) return null;
|
|
3305
|
+
const resolved = typeof format === "string" ? { type: "link" } : format;
|
|
3306
|
+
if (resolved.type !== "link") return null;
|
|
3307
|
+
const raw = value == null ? "" : String(value);
|
|
3308
|
+
if (!raw) return null;
|
|
3309
|
+
return {
|
|
3310
|
+
href: fieldType === "email" ? `mailto:${raw}` : raw,
|
|
3311
|
+
label: raw,
|
|
3312
|
+
newTab: resolved.newTab !== false && fieldType === "url"
|
|
3313
|
+
};
|
|
3314
|
+
}
|
|
3315
|
+
/** Format a JSON value as a compact summary or truncated code preview. */
|
|
3316
|
+
function formatJson(value, format) {
|
|
3317
|
+
if ((typeof format === "string" ? { type: format } : format)?.type === "summary" && value && typeof value === "object") {
|
|
3318
|
+
const count = Array.isArray(value) ? value.length : Object.keys(value).length;
|
|
3319
|
+
return Array.isArray(value) ? `[ ${count} items ]` : `{ ${count} keys }`;
|
|
3320
|
+
}
|
|
3321
|
+
const json = JSON.stringify(value);
|
|
3322
|
+
if (!json) return "";
|
|
3323
|
+
return json.length > 40 ? `${json.slice(0, 40)}…` : json;
|
|
3324
|
+
}
|
|
3325
|
+
//#endregion
|
|
2988
3326
|
//#region src/components/ui/render-cell.tsx
|
|
3327
|
+
var PILL_BASE = "dy-inline-flex dy-items-center dy-rounded-full dy-border dy-px-2.5 dy-py-0.5 dy-text-xs dy-font-medium";
|
|
3328
|
+
function TonePill({ spec }) {
|
|
3329
|
+
return /* @__PURE__ */ jsx("span", {
|
|
3330
|
+
className: cn(PILL_BASE, displayToneClass(spec.tone)),
|
|
3331
|
+
children: spec.label
|
|
3332
|
+
});
|
|
3333
|
+
}
|
|
2989
3334
|
function RenderCell({ value, field, client, schemas }) {
|
|
2990
3335
|
if (value === null || value === void 0) return /* @__PURE__ */ jsx("span", {
|
|
2991
3336
|
className: "dy-text-muted-foreground",
|
|
2992
3337
|
children: "-"
|
|
2993
3338
|
});
|
|
2994
|
-
if (field.type === "boolean" || typeof value === "boolean")
|
|
2995
|
-
|
|
2996
|
-
|
|
3339
|
+
if (field.type === "boolean" || typeof value === "boolean") {
|
|
3340
|
+
const badge = getBooleanBadge(value, field.admin?.format);
|
|
3341
|
+
if (badge) return /* @__PURE__ */ jsx(TonePill, { spec: badge });
|
|
3342
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
3343
|
+
variant: value ? "default" : "secondary",
|
|
3344
|
+
children: value ? "Yes" : "No"
|
|
3345
|
+
});
|
|
3346
|
+
}
|
|
3347
|
+
if (field.type === "select" || field.type === "radio") {
|
|
3348
|
+
const badge = getOptionBadge(value, field.admin?.format, field.options);
|
|
3349
|
+
if (badge) return /* @__PURE__ */ jsx(TonePill, { spec: badge });
|
|
3350
|
+
}
|
|
3351
|
+
if (field.type === "multiSelect" && Array.isArray(value) && field.admin?.format) return /* @__PURE__ */ jsxs("div", {
|
|
3352
|
+
className: "dy-flex dy-flex-wrap dy-gap-1",
|
|
3353
|
+
children: [value.slice(0, 3).map((item, i) => {
|
|
3354
|
+
const badge = getOptionBadge(item, field.admin?.format, field.options);
|
|
3355
|
+
return badge ? /* @__PURE__ */ jsx(TonePill, { spec: badge }, i) : null;
|
|
3356
|
+
}), value.length > 3 && /* @__PURE__ */ jsxs("span", {
|
|
3357
|
+
className: "dy-text-[10px] dy-text-muted-foreground",
|
|
3358
|
+
children: [
|
|
3359
|
+
"+",
|
|
3360
|
+
value.length - 3,
|
|
3361
|
+
" more"
|
|
3362
|
+
]
|
|
3363
|
+
})]
|
|
2997
3364
|
});
|
|
2998
|
-
if (field.type === "
|
|
2999
|
-
const
|
|
3000
|
-
return /* @__PURE__ */
|
|
3001
|
-
className: "dy-flex dy-items-center dy-gap-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3365
|
+
if (field.type === "number") {
|
|
3366
|
+
const rating = getRatingSpec(value, field.admin?.format);
|
|
3367
|
+
if (rating) return /* @__PURE__ */ jsx("div", {
|
|
3368
|
+
className: "dy-flex dy-items-center dy-gap-0.5",
|
|
3369
|
+
title: `${rating.value} / ${rating.max}`,
|
|
3370
|
+
children: Array.from({ length: rating.max }, (_, i) => /* @__PURE__ */ jsx(Star, { className: i < Math.round(rating.value) ? "dy-h-3.5 dy-w-3.5 dy-fill-amber-400 dy-text-amber-400" : "dy-h-3.5 dy-w-3.5 dy-text-muted-foreground/30" }, i))
|
|
3371
|
+
});
|
|
3372
|
+
return /* @__PURE__ */ jsx("span", {
|
|
3373
|
+
className: "dy-text-sm dy-font-medium dy-tabular-nums",
|
|
3374
|
+
children: formatNumber(value, field.admin?.format)
|
|
3006
3375
|
});
|
|
3007
3376
|
}
|
|
3377
|
+
if (field.type === "date" || field.type === "datetime" || field.type === "time") return /* @__PURE__ */ jsxs("div", {
|
|
3378
|
+
className: "dy-flex dy-items-center dy-gap-1.5 dy-text-muted-foreground",
|
|
3379
|
+
children: [/* @__PURE__ */ jsx(Calendar, { className: "dy-h-3 dy-w-3" }), /* @__PURE__ */ jsx("span", {
|
|
3380
|
+
className: "dy-text-xs",
|
|
3381
|
+
children: formatDate(value, field.admin?.format, field.type)
|
|
3382
|
+
})]
|
|
3383
|
+
});
|
|
3008
3384
|
const relationTo = field.relationTo || field.collection;
|
|
3009
3385
|
if (field.type === "image" || field.type === "relationship" && isUploadCollection(relationTo, schemas)) {
|
|
3010
3386
|
if (!value) return /* @__PURE__ */ jsx("span", {
|
|
@@ -3037,6 +3413,10 @@ function RenderCell({ value, field, client, schemas }) {
|
|
|
3037
3413
|
})
|
|
3038
3414
|
});
|
|
3039
3415
|
}
|
|
3416
|
+
if (field.type === "json" && typeof value === "object") return /* @__PURE__ */ jsx("span", {
|
|
3417
|
+
className: "dy-text-[11px] dy-text-muted-foreground dy-font-mono dy-bg-muted/30 dy-px-1.5 dy-py-0.5 dy-rounded",
|
|
3418
|
+
children: formatJson(value, field.admin?.format)
|
|
3419
|
+
});
|
|
3040
3420
|
if (Array.isArray(value)) return /* @__PURE__ */ jsxs("div", {
|
|
3041
3421
|
className: "dy-flex dy-flex-wrap dy-gap-1",
|
|
3042
3422
|
children: [value.slice(0, 2).map((item, i) => /* @__PURE__ */ jsx(Badge, {
|
|
@@ -3053,7 +3433,7 @@ function RenderCell({ value, field, client, schemas }) {
|
|
|
3053
3433
|
})]
|
|
3054
3434
|
});
|
|
3055
3435
|
if (typeof value === "object" && !Array.isArray(value)) {
|
|
3056
|
-
const entries = Object.entries(value).filter(([
|
|
3436
|
+
const entries = Object.entries(value).filter(([, v]) => typeof v !== "object" && v !== null && v !== void 0).slice(0, 3);
|
|
3057
3437
|
if (entries.length > 0) return /* @__PURE__ */ jsxs("span", {
|
|
3058
3438
|
className: "dy-text-[11px] dy-text-muted-foreground dy-font-medium dy-leading-tight",
|
|
3059
3439
|
children: [entries.map(([k, v]) => `${k}: ${String(v)}`).join(", "), Object.keys(value).length > 3 ? "..." : ""]
|
|
@@ -3063,6 +3443,29 @@ function RenderCell({ value, field, client, schemas }) {
|
|
|
3063
3443
|
children: [JSON.stringify(value).slice(0, 30), JSON.stringify(value).length > 30 ? "..." : ""]
|
|
3064
3444
|
});
|
|
3065
3445
|
}
|
|
3446
|
+
if ((field.type === "url" || field.type === "email") && field.admin?.format) {
|
|
3447
|
+
const link = getLinkSpec(value, field.admin.format, field.type);
|
|
3448
|
+
if (link) return /* @__PURE__ */ jsxs("a", {
|
|
3449
|
+
href: link.href,
|
|
3450
|
+
target: link.newTab ? "_blank" : void 0,
|
|
3451
|
+
rel: link.newTab ? "noreferrer" : void 0,
|
|
3452
|
+
onClick: (e) => e.stopPropagation(),
|
|
3453
|
+
className: "dy-inline-flex dy-items-center dy-gap-1 dy-text-sm dy-font-medium dy-text-primary hover:dy-underline",
|
|
3454
|
+
children: [link.label, field.type === "url" && /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3 dy-w-3 dy-opacity-60" })]
|
|
3455
|
+
});
|
|
3456
|
+
}
|
|
3457
|
+
if ((field.type === "text" || field.type === "textarea") && field.admin?.format) {
|
|
3458
|
+
const formatted = formatText(value, field.admin.format);
|
|
3459
|
+
if (isCodeText(field.admin.format)) return /* @__PURE__ */ jsx("span", {
|
|
3460
|
+
className: "dy-text-xs dy-font-mono dy-bg-muted/50 dy-px-1.5 dy-py-0.5 dy-rounded dy-border",
|
|
3461
|
+
children: formatted
|
|
3462
|
+
});
|
|
3463
|
+
return /* @__PURE__ */ jsx("span", {
|
|
3464
|
+
className: "dy-text-sm dy-font-medium",
|
|
3465
|
+
title: String(value),
|
|
3466
|
+
children: formatted
|
|
3467
|
+
});
|
|
3468
|
+
}
|
|
3066
3469
|
let text = String(value);
|
|
3067
3470
|
if (field.type === "richText") text = text.replace(/<[^>]*>/g, "");
|
|
3068
3471
|
const truncated = text.slice(0, 30);
|
|
@@ -6059,6 +6462,21 @@ function TextField({ schema, field, disabled }) {
|
|
|
6059
6462
|
});
|
|
6060
6463
|
}
|
|
6061
6464
|
})();
|
|
6465
|
+
const numberFormat = schema.type === "number" ? schema.admin?.format : void 0;
|
|
6466
|
+
if (numberFormat && field.value !== null && field.value !== void 0 && field.value !== "") {
|
|
6467
|
+
const rating = getRatingSpec(field.value, numberFormat);
|
|
6468
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
6469
|
+
className: "dy-space-y-1",
|
|
6470
|
+
children: [inputEl, rating ? /* @__PURE__ */ jsx("div", {
|
|
6471
|
+
className: "dy-flex dy-items-center dy-gap-0.5",
|
|
6472
|
+
title: `${rating.value} / ${rating.max}`,
|
|
6473
|
+
children: Array.from({ length: rating.max }, (_, i) => /* @__PURE__ */ jsx(Star, { className: i < Math.round(rating.value) ? "dy-h-4 dy-w-4 dy-fill-amber-400 dy-text-amber-400" : "dy-h-4 dy-w-4 dy-text-muted-foreground/30" }, i))
|
|
6474
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
6475
|
+
className: "dy-text-xs dy-text-muted-foreground",
|
|
6476
|
+
children: formatNumber(field.value, numberFormat)
|
|
6477
|
+
})]
|
|
6478
|
+
});
|
|
6479
|
+
}
|
|
6062
6480
|
const hasMaxLength = maxLength && typeof maxLength === "number";
|
|
6063
6481
|
const hasMaxWords = maxWords && typeof maxWords === "number";
|
|
6064
6482
|
if (hasMaxLength || hasMaxWords) return /* @__PURE__ */ jsxs("div", {
|
|
@@ -9109,7 +9527,7 @@ function FormFieldRendererInner({ schema, basePath, control, collection, canUpda
|
|
|
9109
9527
|
//#region src/components/forms/form-engine.tsx
|
|
9110
9528
|
/** Query-string key holding the active form tab (replace-navigated). */
|
|
9111
9529
|
var TAB_PARAM = "tab";
|
|
9112
|
-
function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onChange, isLoading, submitLabel = "Save", readOnly, onDataChange, passwordChangeMode = null, documentId, defaultTabLabel }) {
|
|
9530
|
+
function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onChange, isLoading, submitLabel = "Save", hideSubmit = false, readOnly, onDataChange, passwordChangeMode = null, documentId, defaultTabLabel }) {
|
|
9113
9531
|
const { activePath, navigateToPath, getStableId } = useNestedEditor();
|
|
9114
9532
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
9115
9533
|
const isDrilledIn = activePath.length > 0;
|
|
@@ -9573,7 +9991,7 @@ function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onC
|
|
|
9573
9991
|
})
|
|
9574
9992
|
]
|
|
9575
9993
|
}),
|
|
9576
|
-
/* @__PURE__ */ jsx("div", {
|
|
9994
|
+
!hideSubmit && /* @__PURE__ */ jsx("div", {
|
|
9577
9995
|
className: "dy-flex dy-justify-end dy-gap-4",
|
|
9578
9996
|
children: !readOnly && /* @__PURE__ */ jsx(Button, {
|
|
9579
9997
|
type: "submit",
|
|
@@ -10728,24 +11146,53 @@ function CollectionListPage({ slug }) {
|
|
|
10728
11146
|
}
|
|
10729
11147
|
});
|
|
10730
11148
|
const [exporting, setExporting] = React$1.useState(false);
|
|
11149
|
+
const exportDocsToCsv = React$1.useCallback((docs, filenameSuffix = "") => {
|
|
11150
|
+
if (!schema || !client) return;
|
|
11151
|
+
const csvColumns = [
|
|
11152
|
+
{
|
|
11153
|
+
key: "id",
|
|
11154
|
+
label: "ID"
|
|
11155
|
+
},
|
|
11156
|
+
...schema.fields.filter((f) => f.name !== "password" && !f.admin?.hidden && f.type !== "row" && f.type !== "join").filter((f) => !!f.name).map((f) => ({
|
|
11157
|
+
key: f.name,
|
|
11158
|
+
label: f.label || f.name
|
|
11159
|
+
})),
|
|
11160
|
+
{
|
|
11161
|
+
key: "updatedAt",
|
|
11162
|
+
label: "Last Updated"
|
|
11163
|
+
}
|
|
11164
|
+
];
|
|
11165
|
+
const flattenForCsv = (val) => {
|
|
11166
|
+
if (val === null || val === void 0) return "";
|
|
11167
|
+
if (typeof val === "boolean") return val ? "true" : "false";
|
|
11168
|
+
if (typeof val === "number" || typeof val === "string") return String(val);
|
|
11169
|
+
if (Array.isArray(val)) return val.map((item) => flattenForCsv(item)).filter(Boolean).join("; ");
|
|
11170
|
+
if (typeof val === "object" && val !== null) {
|
|
11171
|
+
const obj = val;
|
|
11172
|
+
if (obj.url || obj.filename) return getMediaUrl(obj, client?.getBaseUrl() || "");
|
|
11173
|
+
if (obj.id) return String(obj.title || obj.name || obj.label || obj.id);
|
|
11174
|
+
return JSON.stringify(val);
|
|
11175
|
+
}
|
|
11176
|
+
return String(val);
|
|
11177
|
+
};
|
|
11178
|
+
const escapeCsv = (val) => /[",\n\r]/.test(val) ? `"${val.replace(/"/g, "\"\"")}"` : val;
|
|
11179
|
+
const csv = [csvColumns.map((c) => escapeCsv(flattenForCsv(c.label))).join(","), ...docs.map((doc) => csvColumns.map((c) => escapeCsv(flattenForCsv(doc[c.key]))).join(","))].join("\n");
|
|
11180
|
+
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
|
|
11181
|
+
const url = URL.createObjectURL(blob);
|
|
11182
|
+
const link = document.createElement("a");
|
|
11183
|
+
link.href = url;
|
|
11184
|
+
link.download = `${slug}-export${filenameSuffix}.csv`;
|
|
11185
|
+
link.click();
|
|
11186
|
+
URL.revokeObjectURL(url);
|
|
11187
|
+
}, [
|
|
11188
|
+
schema,
|
|
11189
|
+
client,
|
|
11190
|
+
slug
|
|
11191
|
+
]);
|
|
10731
11192
|
const handleExportCsv = React$1.useCallback(async () => {
|
|
10732
11193
|
if (!schema || !client) return;
|
|
10733
11194
|
setExporting(true);
|
|
10734
11195
|
try {
|
|
10735
|
-
const csvColumns = [
|
|
10736
|
-
{
|
|
10737
|
-
key: "id",
|
|
10738
|
-
label: "ID"
|
|
10739
|
-
},
|
|
10740
|
-
...schema.fields.filter((f) => f.name !== "password" && !f.admin?.hidden && f.type !== "row" && f.type !== "join").filter((f) => !!f.name).map((f) => ({
|
|
10741
|
-
key: f.name,
|
|
10742
|
-
label: f.label || f.name
|
|
10743
|
-
})),
|
|
10744
|
-
{
|
|
10745
|
-
key: "updatedAt",
|
|
10746
|
-
label: "Last Updated"
|
|
10747
|
-
}
|
|
10748
|
-
];
|
|
10749
11196
|
const allDocs = [];
|
|
10750
11197
|
let pg = 1;
|
|
10751
11198
|
let totalPages = 1;
|
|
@@ -10759,27 +11206,7 @@ function CollectionListPage({ slug }) {
|
|
|
10759
11206
|
totalPages = res.totalPages ?? 1;
|
|
10760
11207
|
pg++;
|
|
10761
11208
|
}
|
|
10762
|
-
|
|
10763
|
-
if (val === null || val === void 0) return "";
|
|
10764
|
-
if (typeof val === "boolean") return val ? "true" : "false";
|
|
10765
|
-
if (typeof val === "number" || typeof val === "string") return String(val);
|
|
10766
|
-
if (Array.isArray(val)) return val.map((item) => flattenForCsv(item)).filter(Boolean).join("; ");
|
|
10767
|
-
if (typeof val === "object" && val !== null) {
|
|
10768
|
-
const obj = val;
|
|
10769
|
-
if (obj.url || obj.filename) return getMediaUrl(obj, client?.getBaseUrl() || "");
|
|
10770
|
-
if (obj.id) return String(obj.title || obj.name || obj.label || obj.id);
|
|
10771
|
-
return JSON.stringify(val);
|
|
10772
|
-
}
|
|
10773
|
-
return String(val);
|
|
10774
|
-
};
|
|
10775
|
-
const csv = [csvColumns.map((c) => flattenForCsv(c.label)).join(","), ...allDocs.map((doc) => csvColumns.map((c) => flattenForCsv(doc[c.key])).join(","))].join("\n");
|
|
10776
|
-
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
|
|
10777
|
-
const url = URL.createObjectURL(blob);
|
|
10778
|
-
const link = document.createElement("a");
|
|
10779
|
-
link.href = url;
|
|
10780
|
-
link.download = `${slug}-export.csv`;
|
|
10781
|
-
link.click();
|
|
10782
|
-
URL.revokeObjectURL(url);
|
|
11209
|
+
exportDocsToCsv(allDocs);
|
|
10783
11210
|
toast.success(`Exported ${allDocs.length} entries`);
|
|
10784
11211
|
} catch (err) {
|
|
10785
11212
|
toast.error("Export failed", { description: err instanceof Error ? err.message : String(err) });
|
|
@@ -10789,8 +11216,15 @@ function CollectionListPage({ slug }) {
|
|
|
10789
11216
|
}, [
|
|
10790
11217
|
schema,
|
|
10791
11218
|
client,
|
|
10792
|
-
slug
|
|
11219
|
+
slug,
|
|
11220
|
+
exportDocsToCsv
|
|
10793
11221
|
]);
|
|
11222
|
+
const handleExportSelected = React$1.useCallback((ids) => {
|
|
11223
|
+
const selectedDocs = ids.map((id) => response?.docs?.find((d) => d.id === id)).filter((d) => !!d);
|
|
11224
|
+
if (selectedDocs.length === 0) return;
|
|
11225
|
+
exportDocsToCsv(selectedDocs, "-selected");
|
|
11226
|
+
toast.success(`Exported ${selectedDocs.length} selected ${selectedDocs.length === 1 ? "entry" : "entries"}`);
|
|
11227
|
+
}, [response, exportDocsToCsv]);
|
|
10794
11228
|
const handleDelete = React$1.useCallback((id) => {
|
|
10795
11229
|
if (schema?.auth && id === user?.id) {
|
|
10796
11230
|
toast.error("Action not allowed", { description: "You cannot delete your own account." });
|
|
@@ -11362,7 +11796,19 @@ function CollectionListPage({ slug }) {
|
|
|
11362
11796
|
}
|
|
11363
11797
|
return canDelete;
|
|
11364
11798
|
});
|
|
11365
|
-
return /* @__PURE__ */ jsxs(Button, {
|
|
11799
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Button, {
|
|
11800
|
+
variant: "outline",
|
|
11801
|
+
size: "sm",
|
|
11802
|
+
className: "dy-h-8",
|
|
11803
|
+
onClick: () => handleExportSelected(selectedIds),
|
|
11804
|
+
disabled: selectedIds.length === 0,
|
|
11805
|
+
children: [
|
|
11806
|
+
/* @__PURE__ */ jsx(FileDown, { className: "dy-h-4 dy-w-4 dy-mr-2" }),
|
|
11807
|
+
"Export Selected (",
|
|
11808
|
+
selectedIds.length,
|
|
11809
|
+
")"
|
|
11810
|
+
]
|
|
11811
|
+
}), /* @__PURE__ */ jsxs(Button, {
|
|
11366
11812
|
variant: "destructive",
|
|
11367
11813
|
size: "sm",
|
|
11368
11814
|
className: "dy-h-8",
|
|
@@ -11374,7 +11820,7 @@ function CollectionListPage({ slug }) {
|
|
|
11374
11820
|
deletableIds.length,
|
|
11375
11821
|
")"
|
|
11376
11822
|
]
|
|
11377
|
-
});
|
|
11823
|
+
})] });
|
|
11378
11824
|
}
|
|
11379
11825
|
}, slug),
|
|
11380
11826
|
/* @__PURE__ */ jsx(AdminComponentSlot, {
|
|
@@ -11404,12 +11850,67 @@ function CollectionListPage({ slug }) {
|
|
|
11404
11850
|
}
|
|
11405
11851
|
//#endregion
|
|
11406
11852
|
//#region src/components/live-preview/LivePreviewPane.tsx
|
|
11407
|
-
|
|
11853
|
+
/** Append the preview token to a resolved (absolute) preview URL. */
|
|
11854
|
+
function withPreviewToken(url, token) {
|
|
11855
|
+
try {
|
|
11856
|
+
const u = new URL(url);
|
|
11857
|
+
u.searchParams.set(PREVIEW_TOKEN_PARAM, token);
|
|
11858
|
+
return u.toString();
|
|
11859
|
+
} catch {
|
|
11860
|
+
return `${url}${url.includes("?") ? "&" : "?"}${PREVIEW_TOKEN_PARAM}=${encodeURIComponent(token)}`;
|
|
11861
|
+
}
|
|
11862
|
+
}
|
|
11863
|
+
function safeStringify(value) {
|
|
11864
|
+
try {
|
|
11865
|
+
return JSON.stringify(value) ?? "";
|
|
11866
|
+
} catch {
|
|
11867
|
+
return "";
|
|
11868
|
+
}
|
|
11869
|
+
}
|
|
11870
|
+
function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlug, documentId, onFieldFocus }) {
|
|
11408
11871
|
const iframeRef = useRef(null);
|
|
11872
|
+
const { client } = useDyrected();
|
|
11409
11873
|
const [isReady, setIsReady] = useState(false);
|
|
11410
11874
|
const [viewMode, setViewMode] = useState("desktop");
|
|
11411
11875
|
const [zoom, setZoom] = useState(.75);
|
|
11412
11876
|
const [editMode, setEditMode] = useState(true);
|
|
11877
|
+
const [tokenSrc, setTokenSrc] = useState(null);
|
|
11878
|
+
const [tokenError, setTokenError] = useState(null);
|
|
11879
|
+
const lastDataKeyRef = useRef(null);
|
|
11880
|
+
const dataKey = safeStringify(data);
|
|
11881
|
+
useEffect(() => {
|
|
11882
|
+
if (mode !== "token" || !client || !collectionSlug) return;
|
|
11883
|
+
if (dataKey === lastDataKeyRef.current) return;
|
|
11884
|
+
let cancelled = false;
|
|
11885
|
+
const timer = setTimeout(async () => {
|
|
11886
|
+
try {
|
|
11887
|
+
const { token } = await client.createPreviewToken({
|
|
11888
|
+
collectionSlug,
|
|
11889
|
+
documentId,
|
|
11890
|
+
data
|
|
11891
|
+
});
|
|
11892
|
+
if (cancelled) return;
|
|
11893
|
+
lastDataKeyRef.current = dataKey;
|
|
11894
|
+
setTokenSrc(withPreviewToken(previewUrl, token));
|
|
11895
|
+
setTokenError(null);
|
|
11896
|
+
} catch (err) {
|
|
11897
|
+
if (cancelled) return;
|
|
11898
|
+
setTokenError(err instanceof Error ? err.message : "Failed to create preview token.");
|
|
11899
|
+
}
|
|
11900
|
+
}, 800);
|
|
11901
|
+
return () => {
|
|
11902
|
+
cancelled = true;
|
|
11903
|
+
clearTimeout(timer);
|
|
11904
|
+
};
|
|
11905
|
+
}, [
|
|
11906
|
+
mode,
|
|
11907
|
+
client,
|
|
11908
|
+
collectionSlug,
|
|
11909
|
+
documentId,
|
|
11910
|
+
previewUrl,
|
|
11911
|
+
dataKey
|
|
11912
|
+
]);
|
|
11913
|
+
const iframeSrc = mode === "token" ? tokenSrc ?? previewUrl : previewUrl;
|
|
11413
11914
|
useEffect(() => {
|
|
11414
11915
|
if (mode !== "postMessage") return;
|
|
11415
11916
|
const handleMessage = (event) => {
|
|
@@ -11445,7 +11946,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
|
|
|
11445
11946
|
}, [editMode, isReady]);
|
|
11446
11947
|
const reload = () => {
|
|
11447
11948
|
if (iframeRef.current) {
|
|
11448
|
-
iframeRef.current.src =
|
|
11949
|
+
iframeRef.current.src = iframeSrc;
|
|
11449
11950
|
setIsReady(false);
|
|
11450
11951
|
}
|
|
11451
11952
|
};
|
|
@@ -11504,24 +12005,32 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
|
|
|
11504
12005
|
]
|
|
11505
12006
|
}), /* @__PURE__ */ jsxs("div", {
|
|
11506
12007
|
className: "dy-flex dy-items-center dy-gap-2",
|
|
11507
|
-
children: [
|
|
11508
|
-
|
|
11509
|
-
|
|
11510
|
-
|
|
11511
|
-
|
|
11512
|
-
|
|
11513
|
-
|
|
11514
|
-
|
|
11515
|
-
|
|
11516
|
-
|
|
11517
|
-
|
|
11518
|
-
|
|
11519
|
-
|
|
11520
|
-
|
|
11521
|
-
|
|
11522
|
-
|
|
12008
|
+
children: [
|
|
12009
|
+
mode === "token" && tokenError && /* @__PURE__ */ jsx("span", {
|
|
12010
|
+
className: "dy-text-[11px] dy-font-medium dy-text-destructive dy-truncate dy-max-w-[220px]",
|
|
12011
|
+
title: tokenError,
|
|
12012
|
+
children: "Preview token failed"
|
|
12013
|
+
}),
|
|
12014
|
+
/* @__PURE__ */ jsx(Button, {
|
|
12015
|
+
variant: "ghost",
|
|
12016
|
+
size: "icon",
|
|
12017
|
+
className: "dy-h-8 dy-w-8",
|
|
12018
|
+
onClick: reload,
|
|
12019
|
+
children: /* @__PURE__ */ jsx(RotateCcw, { className: "dy-h-3.5 dy-w-3.5" })
|
|
12020
|
+
}),
|
|
12021
|
+
/* @__PURE__ */ jsx(Button, {
|
|
12022
|
+
variant: "ghost",
|
|
12023
|
+
size: "icon",
|
|
12024
|
+
className: "dy-h-8 dy-w-8",
|
|
12025
|
+
asChild: true,
|
|
12026
|
+
children: /* @__PURE__ */ jsx("a", {
|
|
12027
|
+
href: previewUrl,
|
|
12028
|
+
target: "_blank",
|
|
12029
|
+
rel: "noreferrer",
|
|
12030
|
+
children: /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3.5 dy-w-3.5" })
|
|
12031
|
+
})
|
|
11523
12032
|
})
|
|
11524
|
-
|
|
12033
|
+
]
|
|
11525
12034
|
})]
|
|
11526
12035
|
}), /* @__PURE__ */ jsx("div", {
|
|
11527
12036
|
className: "dy-flex-1 dy-flex dy-items-center dy-justify-center dy-p-0 dy-overflow-hidden dy-bg-muted/5",
|
|
@@ -11529,7 +12038,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
|
|
|
11529
12038
|
className: `dy-bg-background dy-shadow-[0_20px_50px_rgba(0,0,0,0.1)] dy-transition-all dy-duration-500 dy-overflow-hidden dy-border dy-border-border/40 ${viewMode === "mobile" ? "dy-w-[375px] dy-h-[667px]" : "dy-w-full dy-h-full"}`,
|
|
11530
12039
|
children: /* @__PURE__ */ jsx("iframe", {
|
|
11531
12040
|
ref: iframeRef,
|
|
11532
|
-
src:
|
|
12041
|
+
src: iframeSrc,
|
|
11533
12042
|
className: cn("dy-border-none dy-transition-transform dy-duration-300", editMode && "dy-cursor-crosshair"),
|
|
11534
12043
|
style: viewMode === "desktop" ? {
|
|
11535
12044
|
width: `${100 / zoom}%`,
|
|
@@ -11960,7 +12469,7 @@ function HeaderAction({ icon: Icon, label, onClick, active, disabled, busy, titl
|
|
|
11960
12469
|
* the editor into that block, then (one tick later, once the sub-form mounts)
|
|
11961
12470
|
* scrolls to and focuses the specific input.
|
|
11962
12471
|
*/
|
|
11963
|
-
function PreviewPaneWithNav({ previewUrl, data, mode, fields, active, onFieldNavigate }) {
|
|
12472
|
+
function PreviewPaneWithNav({ previewUrl, data, mode, collectionSlug, documentId, fields, active, onFieldNavigate }) {
|
|
11964
12473
|
const { navigateToPath, getStableId } = useNestedEditor();
|
|
11965
12474
|
const sidebar = useSidebarControl();
|
|
11966
12475
|
const setCollapsed = sidebar?.setCollapsed;
|
|
@@ -12007,9 +12516,25 @@ function PreviewPaneWithNav({ previewUrl, data, mode, fields, active, onFieldNav
|
|
|
12007
12516
|
previewUrl,
|
|
12008
12517
|
data,
|
|
12009
12518
|
mode,
|
|
12519
|
+
collectionSlug,
|
|
12520
|
+
documentId,
|
|
12010
12521
|
onFieldFocus: handleFieldFocus
|
|
12011
12522
|
});
|
|
12012
12523
|
}
|
|
12524
|
+
function getEntryTitle(entry, schema) {
|
|
12525
|
+
if (!entry) return "";
|
|
12526
|
+
const titleField = schema?.admin?.useAsTitle || "title";
|
|
12527
|
+
if (entry[titleField]) return String(entry[titleField]);
|
|
12528
|
+
for (const f of [
|
|
12529
|
+
"title",
|
|
12530
|
+
"name",
|
|
12531
|
+
"label",
|
|
12532
|
+
"heading",
|
|
12533
|
+
"email",
|
|
12534
|
+
"subject"
|
|
12535
|
+
]) if (entry[f]) return String(entry[f]);
|
|
12536
|
+
return String(entry.id);
|
|
12537
|
+
}
|
|
12013
12538
|
function EditEntryPage() {
|
|
12014
12539
|
const { slug, id } = useParams();
|
|
12015
12540
|
const [searchParams] = useSearchParams();
|
|
@@ -12017,7 +12542,7 @@ function EditEntryPage() {
|
|
|
12017
12542
|
const navigate = useNavigate();
|
|
12018
12543
|
const queryClient = useQueryClient();
|
|
12019
12544
|
const [showPreview, setShowPreview] = useState(false);
|
|
12020
|
-
const [
|
|
12545
|
+
const [activeTab, setActiveTab] = useState("edit");
|
|
12021
12546
|
const [mobilePreview, setMobilePreview] = useState(false);
|
|
12022
12547
|
const [isDirty, setIsDirty] = useState(false);
|
|
12023
12548
|
const [previewData, setPreviewData] = useState(null);
|
|
@@ -12128,7 +12653,7 @@ function EditEntryPage() {
|
|
|
12128
12653
|
]);
|
|
12129
12654
|
const hasWorkflow = !!schema?.workflow;
|
|
12130
12655
|
const syncShowWorkflow = useState(() => (next) => {
|
|
12131
|
-
|
|
12656
|
+
setActiveTab((prev) => next ? "versions" : prev === "versions" ? "edit" : prev);
|
|
12132
12657
|
})[0];
|
|
12133
12658
|
useEffect(() => {
|
|
12134
12659
|
if (!hasWorkflow || schemaPreviewUrl) return;
|
|
@@ -12147,6 +12672,29 @@ function EditEntryPage() {
|
|
|
12147
12672
|
queryFn: () => client.collection(slug).findOne(id),
|
|
12148
12673
|
enabled: !!client && isEdit
|
|
12149
12674
|
});
|
|
12675
|
+
const [switcherOpen, setSwitcherOpen] = useState(false);
|
|
12676
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
12677
|
+
const [debouncedSearchQuery, setDebouncedSearchQuery] = useState("");
|
|
12678
|
+
useEffect(() => {
|
|
12679
|
+
const timer = setTimeout(() => {
|
|
12680
|
+
setDebouncedSearchQuery(searchQuery);
|
|
12681
|
+
}, 300);
|
|
12682
|
+
return () => clearTimeout(timer);
|
|
12683
|
+
}, [searchQuery]);
|
|
12684
|
+
const { data: siblingEntries, isLoading: isSiblingsLoading } = useQuery({
|
|
12685
|
+
queryKey: [
|
|
12686
|
+
"collection-siblings",
|
|
12687
|
+
slug,
|
|
12688
|
+
debouncedSearchQuery
|
|
12689
|
+
],
|
|
12690
|
+
queryFn: async () => {
|
|
12691
|
+
const displayField = schema?.admin?.useAsTitle || "title";
|
|
12692
|
+
let qb = client.collection(slug).find({ limit: 50 });
|
|
12693
|
+
if (debouncedSearchQuery) qb = qb.where({ [displayField]: { like: `%${debouncedSearchQuery}%` } });
|
|
12694
|
+
return qb.exec();
|
|
12695
|
+
},
|
|
12696
|
+
enabled: !!client && !!slug && isEdit && switcherOpen
|
|
12697
|
+
});
|
|
12150
12698
|
const syncPreviewData = useState(() => (next) => {
|
|
12151
12699
|
setPreviewData((prev) => prev === next ? prev : next);
|
|
12152
12700
|
})[0];
|
|
@@ -12210,6 +12758,9 @@ function EditEntryPage() {
|
|
|
12210
12758
|
const workflowMeta = isEdit && entry ? entry._workflow ?? null : null;
|
|
12211
12759
|
const hasStatus = schema?.fields.some((f) => f.name === "status");
|
|
12212
12760
|
const currentStatus = entry?.status || "draft";
|
|
12761
|
+
const workflowState = workflowConfig && workflowMeta ? workflowConfig.states?.find((s) => s.name === workflowMeta.state) : null;
|
|
12762
|
+
const isPublished = workflowState ? !!workflowState.published : currentStatus === "published";
|
|
12763
|
+
const showStatusBadge = workflowConfig ? !!workflowMeta : hasStatus;
|
|
12213
12764
|
const siteUrl = getSiteUrl(schemas?.admin?.siteUrl);
|
|
12214
12765
|
const previewUrl = resolvePreviewUrl(schema.admin?.previewUrl, previewData || entry, siteUrl);
|
|
12215
12766
|
const readAccess = schema.access?.read;
|
|
@@ -12262,15 +12813,26 @@ function EditEntryPage() {
|
|
|
12262
12813
|
} catch (e) {
|
|
12263
12814
|
console.warn("Update access eval failed:", e);
|
|
12264
12815
|
}
|
|
12816
|
+
const auditAccess = schema.access?.readAudit ?? readAccess;
|
|
12817
|
+
let canReadAudit = true;
|
|
12818
|
+
if (auditAccess === false) canReadAudit = false;
|
|
12819
|
+
else if (typeof auditAccess === "string") try {
|
|
12820
|
+
canReadAudit = jexl.evalSync(auditAccess, {
|
|
12821
|
+
user,
|
|
12822
|
+
...previewData || entry || {}
|
|
12823
|
+
});
|
|
12824
|
+
} catch {
|
|
12825
|
+
canReadAudit = false;
|
|
12826
|
+
}
|
|
12265
12827
|
const workflowAvailable = !!(workflowConfig && isEdit && workflowMeta);
|
|
12266
|
-
const showLivePreview = showPreview && !!previewUrl;
|
|
12267
|
-
const
|
|
12828
|
+
const showLivePreview = activeTab === "edit" && showPreview && !!previewUrl;
|
|
12829
|
+
const docsToDisplay = debouncedSearchQuery ? siblingEntries?.docs || [] : siblingEntries?.docs?.filter((d) => String(d.id) !== id).slice(0, 4) || [];
|
|
12268
12830
|
return /* @__PURE__ */ jsx(NestedEditorProvider, {
|
|
12269
12831
|
drillInEnabled: !!showLivePreview,
|
|
12270
12832
|
children: /* @__PURE__ */ jsxs("div", {
|
|
12271
12833
|
className: cn("dy-flex dy-flex-col dy--mt-6 dy--mb-6 dy--mx-4 lg:dy--mt-10 lg:dy--mb-10 lg:dy--mx-6", showLivePreview ? "dy-h-screen" : ""),
|
|
12272
12834
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
12273
|
-
className: "dy-flex dy-shrink-0 dy-items-center dy-gap-2 dy-border-b dy-border-border/50 dy-bg-background dy-px-3 dy-py-2",
|
|
12835
|
+
className: "dy-flex dy-flex-wrap dy-shrink-0 dy-items-center dy-gap-2 dy-border-b dy-border-border/50 dy-bg-background dy-px-3 dy-py-2",
|
|
12274
12836
|
children: [
|
|
12275
12837
|
/* @__PURE__ */ jsx(Button, {
|
|
12276
12838
|
variant: "ghost",
|
|
@@ -12282,13 +12844,52 @@ function EditEntryPage() {
|
|
|
12282
12844
|
}),
|
|
12283
12845
|
/* @__PURE__ */ jsxs("div", {
|
|
12284
12846
|
className: "dy-flex dy-items-center dy-gap-2 dy-min-w-0",
|
|
12285
|
-
children: [/* @__PURE__ */ jsx("
|
|
12847
|
+
children: [isEdit ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
12848
|
+
className: "dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground dy-mr-0.5",
|
|
12849
|
+
children: "Edit"
|
|
12850
|
+
}), /* @__PURE__ */ jsxs(Popover, {
|
|
12851
|
+
open: switcherOpen,
|
|
12852
|
+
onOpenChange: setSwitcherOpen,
|
|
12853
|
+
children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
|
|
12854
|
+
className: "dy-flex dy-items-center dy-gap-1 dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground hover:dy-bg-muted/80 dy-px-2 dy-py-1 dy-rounded-lg dy-transition-all dy-outline-none dy-min-w-0",
|
|
12855
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
12856
|
+
className: "dy-truncate dy-max-w-[150px] sm:dy-max-w-none dy-inline-block",
|
|
12857
|
+
children: isEdit && entry ? getEntryTitle(entry, schema) : "..."
|
|
12858
|
+
}), /* @__PURE__ */ jsx(ChevronDown, { className: "dy-h-4 dy-w-4 dy-text-muted-foreground/80 dy-shrink-0" })]
|
|
12859
|
+
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
12860
|
+
align: "start",
|
|
12861
|
+
className: "dy-w-64 dy-p-0 dy-z-[101]",
|
|
12862
|
+
children: /* @__PURE__ */ jsxs(Command$1, {
|
|
12863
|
+
shouldFilter: false,
|
|
12864
|
+
children: [/* @__PURE__ */ jsx(CommandInput, {
|
|
12865
|
+
placeholder: "Search entries...",
|
|
12866
|
+
value: searchQuery,
|
|
12867
|
+
onValueChange: setSearchQuery
|
|
12868
|
+
}), /* @__PURE__ */ jsx(CommandList, { children: isSiblingsLoading ? /* @__PURE__ */ jsx("div", {
|
|
12869
|
+
className: "dy-py-6 dy-text-center dy-text-sm dy-text-muted-foreground",
|
|
12870
|
+
children: "Loading..."
|
|
12871
|
+
}) : docsToDisplay.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, { children: "No entries found." }) : /* @__PURE__ */ jsx(CommandGroup, { children: docsToDisplay.map((sibling) => /* @__PURE__ */ jsx(CommandItem, {
|
|
12872
|
+
value: sibling.id,
|
|
12873
|
+
onSelect: (val) => {
|
|
12874
|
+
navigate(`/collections/${slug}/edit/${val}`);
|
|
12875
|
+
setSwitcherOpen(false);
|
|
12876
|
+
setSearchQuery("");
|
|
12877
|
+
},
|
|
12878
|
+
className: "dy-cursor-pointer dy-py-2 dy-px-3 dy-rounded-lg",
|
|
12879
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
12880
|
+
className: "dy-text-sm dy-text-foreground",
|
|
12881
|
+
children: getEntryTitle(sibling, schema)
|
|
12882
|
+
})
|
|
12883
|
+
}, sibling.id)) }) })]
|
|
12884
|
+
})
|
|
12885
|
+
})]
|
|
12886
|
+
})] }) : /* @__PURE__ */ jsxs("h1", {
|
|
12286
12887
|
className: "dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground dy-truncate",
|
|
12287
|
-
children:
|
|
12288
|
-
}),
|
|
12289
|
-
className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0",
|
|
12888
|
+
children: ["New ", schema?.labels?.singular || schema?.slug]
|
|
12889
|
+
}), showStatusBadge && /* @__PURE__ */ jsx(Badge, {
|
|
12890
|
+
className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0", isPublished ? "dy-bg-emerald-100 dy-text-emerald-700 dy-border-emerald-200" : "dy-bg-amber-100 dy-text-amber-700 dy-border-amber-200"),
|
|
12290
12891
|
variant: "outline",
|
|
12291
|
-
children:
|
|
12892
|
+
children: isPublished ? "Live" : "Draft"
|
|
12292
12893
|
})]
|
|
12293
12894
|
}),
|
|
12294
12895
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -12317,12 +12918,19 @@ function EditEntryPage() {
|
|
|
12317
12918
|
}),
|
|
12318
12919
|
workflowAvailable && /* @__PURE__ */ jsx(HeaderAction, {
|
|
12319
12920
|
icon: Workflow,
|
|
12320
|
-
label: "
|
|
12321
|
-
active:
|
|
12322
|
-
title:
|
|
12323
|
-
onClick: () =>
|
|
12921
|
+
label: "Versions",
|
|
12922
|
+
active: activeTab === "versions",
|
|
12923
|
+
title: activeTab === "versions" ? "Hide Version History" : "Show Version History",
|
|
12924
|
+
onClick: () => setActiveTab((tab) => tab === "versions" ? "edit" : "versions")
|
|
12324
12925
|
}),
|
|
12325
|
-
|
|
12926
|
+
schema?.audit && isEdit && canReadAudit && /* @__PURE__ */ jsx(HeaderAction, {
|
|
12927
|
+
icon: History,
|
|
12928
|
+
label: "Audit Log",
|
|
12929
|
+
active: activeTab === "audit",
|
|
12930
|
+
title: activeTab === "audit" ? "Hide Audit Log" : "Show Audit Log",
|
|
12931
|
+
onClick: () => setActiveTab((tab) => tab === "audit" ? "edit" : "audit")
|
|
12932
|
+
}),
|
|
12933
|
+
previewUrl && activeTab === "edit" && /* @__PURE__ */ jsx(HeaderAction, {
|
|
12326
12934
|
icon: showPreview ? Eye : EyeOff,
|
|
12327
12935
|
label: "Preview",
|
|
12328
12936
|
active: showPreview,
|
|
@@ -12380,45 +12988,65 @@ function EditEntryPage() {
|
|
|
12380
12988
|
})]
|
|
12381
12989
|
})] })]
|
|
12382
12990
|
})] }),
|
|
12383
|
-
(isEdit ? canUpdate : canCreate) &&
|
|
12384
|
-
|
|
12385
|
-
|
|
12386
|
-
|
|
12387
|
-
|
|
12388
|
-
|
|
12389
|
-
|
|
12390
|
-
|
|
12391
|
-
children:
|
|
12392
|
-
|
|
12393
|
-
|
|
12394
|
-
|
|
12395
|
-
|
|
12396
|
-
|
|
12991
|
+
(isEdit ? canUpdate : canCreate) && activeTab === "edit" && /* @__PURE__ */ jsxs("div", {
|
|
12992
|
+
className: "dy-hidden md:dy-flex dy-items-center",
|
|
12993
|
+
children: [/* @__PURE__ */ jsx("div", { className: "dy-mx-1 dy-h-6 dy-w-px dy-bg-border/60" }), /* @__PURE__ */ jsx(Button, {
|
|
12994
|
+
size: "sm",
|
|
12995
|
+
className: "dy-h-9 dy-rounded-lg dy-px-4 dy-font-bold dy-bg-primary dy-text-primary-foreground hover:dy-bg-primary/90 dy-shadow-sm dy-shrink-0",
|
|
12996
|
+
onClick: () => document.getElementById("dyrected-form-submit")?.click(),
|
|
12997
|
+
disabled: saveMutation.isPending,
|
|
12998
|
+
title: isEdit ? "Save Changes (⌘S)" : "Create Entry (⌘S)",
|
|
12999
|
+
children: saveMutation.isPending ? /* @__PURE__ */ jsxs("span", {
|
|
13000
|
+
className: "dy-flex dy-items-center dy-gap-2",
|
|
13001
|
+
children: [/* @__PURE__ */ jsx("span", { className: "dy-h-3.5 dy-w-3.5 dy-animate-spin dy-rounded-full dy-border-2 dy-border-current dy-border-t-transparent" }), "Saving…"]
|
|
13002
|
+
}) : /* @__PURE__ */ jsxs("span", {
|
|
13003
|
+
className: "dy-flex dy-items-center dy-gap-2",
|
|
13004
|
+
children: [/* @__PURE__ */ jsx(Save, { className: "dy-h-3.5 dy-w-3.5" }), isEdit ? "Save" : "Create"]
|
|
13005
|
+
})
|
|
13006
|
+
})]
|
|
13007
|
+
})
|
|
12397
13008
|
]
|
|
12398
13009
|
})
|
|
12399
13010
|
]
|
|
12400
13011
|
}), /* @__PURE__ */ jsxs("div", {
|
|
12401
13012
|
className: "dy-flex dy-flex-1 dy-min-h-0",
|
|
12402
|
-
children: [
|
|
12403
|
-
|
|
12404
|
-
|
|
12405
|
-
|
|
12406
|
-
|
|
12407
|
-
|
|
12408
|
-
|
|
12409
|
-
|
|
12410
|
-
|
|
12411
|
-
|
|
12412
|
-
|
|
12413
|
-
|
|
12414
|
-
|
|
13013
|
+
children: [previewUrl && /* @__PURE__ */ jsx("div", {
|
|
13014
|
+
className: cn("dy-border-r dy-border-border/50 dy-bg-muted/5 dy-transition-all dy-duration-500 dy-overflow-hidden lg:dy-block", showLivePreview ? "lg:dy-flex-1 lg:dy-opacity-100" : "lg:dy-w-0 lg:dy-opacity-0 lg:dy-border-r-0", mobilePreview && showLivePreview ? "dy-flex-1 dy-opacity-100" : "dy-hidden"),
|
|
13015
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
13016
|
+
className: "dy-h-full",
|
|
13017
|
+
children: /* @__PURE__ */ jsx(PreviewPaneWithNav, {
|
|
13018
|
+
previewUrl,
|
|
13019
|
+
data: previewData || entry,
|
|
13020
|
+
mode: schema.admin?.previewMode,
|
|
13021
|
+
collectionSlug: slug,
|
|
13022
|
+
documentId: id && id !== "new" ? id : void 0,
|
|
13023
|
+
fields: orderedFields,
|
|
13024
|
+
active: !!showLivePreview,
|
|
13025
|
+
onFieldNavigate: () => setMobilePreview(false)
|
|
12415
13026
|
})
|
|
12416
|
-
})
|
|
12417
|
-
|
|
12418
|
-
|
|
12419
|
-
|
|
12420
|
-
|
|
12421
|
-
|
|
13027
|
+
})
|
|
13028
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13029
|
+
className: cn("dy-px-4 dy-py-6 md:dy-px-4 lg:dy-px-4 lg:dy-py-6 dy-transition-all dy-duration-500", showLivePreview ? "dy-flex-none dy-w-full lg:dy-w-2/6 xl:dy-w-2/7 dy-min-w-0 dy-overflow-y-auto" : "dy-flex-1 dy-max-w-4xl xl:dy-max-w-5xl dy-mx-auto dy-w-full dy-overflow-y-auto", mobilePreview && showLivePreview ? "dy-hidden lg:dy-block" : ""),
|
|
13030
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
13031
|
+
className: "dy-space-y-4",
|
|
13032
|
+
children: [
|
|
13033
|
+
activeTab === "versions" && workflowAvailable && /* @__PURE__ */ jsx("div", {
|
|
13034
|
+
className: "dy-animate-in dy-fade-in dy-duration-200 dy-max-w-3xl dy-mx-auto dy-py-6",
|
|
13035
|
+
children: /* @__PURE__ */ jsx(WorkflowPanel, {
|
|
13036
|
+
collection: slug,
|
|
13037
|
+
documentId: id,
|
|
13038
|
+
workflowMeta,
|
|
13039
|
+
workflowConfig
|
|
13040
|
+
})
|
|
13041
|
+
}),
|
|
13042
|
+
activeTab === "audit" && /* @__PURE__ */ jsx("div", {
|
|
13043
|
+
className: "dy-animate-in dy-fade-in dy-duration-200 dy-max-w-3xl dy-mx-auto dy-py-6",
|
|
13044
|
+
children: /* @__PURE__ */ jsx(AuditPanel, {
|
|
13045
|
+
collection: slug,
|
|
13046
|
+
documentId: id
|
|
13047
|
+
})
|
|
13048
|
+
}),
|
|
13049
|
+
activeTab === "edit" && /* @__PURE__ */ jsxs("div", {
|
|
12422
13050
|
className: "dy-animate-in dy-space-y-8 dy-pb-32",
|
|
12423
13051
|
children: [
|
|
12424
13052
|
!canUpdate && isEdit && /* @__PURE__ */ jsxs("div", {
|
|
@@ -12599,6 +13227,7 @@ function EditEntryPage() {
|
|
|
12599
13227
|
onChange: (dirty) => setIsDirty(dirty),
|
|
12600
13228
|
isLoading: saveMutation.isPending || isPreferenceLoading,
|
|
12601
13229
|
submitLabel: isEdit ? "Save Changes" : "Create Entry",
|
|
13230
|
+
hideSubmit: true,
|
|
12602
13231
|
readOnly: isEdit ? !canUpdate : !canCreate,
|
|
12603
13232
|
passwordChangeMode: isEdit ? passwordChangeMode : null,
|
|
12604
13233
|
documentId: id,
|
|
@@ -12612,7 +13241,7 @@ function EditEntryPage() {
|
|
|
12612
13241
|
className: "dy-hidden"
|
|
12613
13242
|
}),
|
|
12614
13243
|
(isDirty || !isEdit) && (isEdit ? canUpdate : canCreate) && /* @__PURE__ */ jsx("div", {
|
|
12615
|
-
className: "dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-pointer-events-none",
|
|
13244
|
+
className: "dy-hidden md:dy-block dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-pointer-events-none",
|
|
12616
13245
|
children: /* @__PURE__ */ jsx("div", {
|
|
12617
13246
|
className: "dy-pointer-events-auto dy-mx-auto dy-max-w-2xl dy-px-4 dy-pb-4",
|
|
12618
13247
|
children: /* @__PURE__ */ jsxs("div", {
|
|
@@ -12635,25 +13264,158 @@ function EditEntryPage() {
|
|
|
12635
13264
|
})]
|
|
12636
13265
|
})
|
|
12637
13266
|
})
|
|
13267
|
+
}),
|
|
13268
|
+
(isEdit ? canUpdate : canCreate) && /* @__PURE__ */ jsx("div", {
|
|
13269
|
+
className: "md:dy-hidden dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-border-t dy-border-border dy-bg-background/95 dy-backdrop-blur-sm dy-px-4 dy-py-3",
|
|
13270
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
13271
|
+
className: "dy-w-full dy-h-11 dy-rounded-xl dy-font-bold dy-bg-primary dy-text-primary-foreground hover:dy-bg-primary/90 dy-shadow-sm",
|
|
13272
|
+
onClick: () => document.getElementById("dyrected-form-submit")?.click(),
|
|
13273
|
+
disabled: saveMutation.isPending || !(isDirty || !isEdit),
|
|
13274
|
+
children: saveMutation.isPending ? /* @__PURE__ */ jsxs("span", {
|
|
13275
|
+
className: "dy-flex dy-items-center dy-gap-2",
|
|
13276
|
+
children: [/* @__PURE__ */ jsx("span", { className: "dy-h-4 dy-w-4 dy-animate-spin dy-border-2 dy-border-current dy-border-t-transparent dy-rounded-full" }), "Saving..."]
|
|
13277
|
+
}) : /* @__PURE__ */ jsxs("span", {
|
|
13278
|
+
className: "dy-flex dy-items-center dy-gap-2",
|
|
13279
|
+
children: [/* @__PURE__ */ jsx(Save, { className: "dy-h-4 dy-w-4" }), isEdit ? "Save Changes" : "Create Entry"]
|
|
13280
|
+
})
|
|
13281
|
+
})
|
|
12638
13282
|
})
|
|
12639
13283
|
]
|
|
12640
13284
|
})
|
|
12641
|
-
|
|
12642
|
-
}),
|
|
12643
|
-
showWorkflowSidebar && /* @__PURE__ */ jsx("div", {
|
|
12644
|
-
className: "dy-hidden lg:dy-block dy-w-72 dy-shrink-0 dy-border-l dy-border-border/50 dy-bg-muted/5 dy-px-4 dy-py-8 dy-overflow-y-auto",
|
|
12645
|
-
children: /* @__PURE__ */ jsx(WorkflowPanel, {
|
|
12646
|
-
collection: slug,
|
|
12647
|
-
documentId: id,
|
|
12648
|
-
workflowMeta,
|
|
12649
|
-
workflowConfig
|
|
12650
|
-
})
|
|
13285
|
+
]
|
|
12651
13286
|
})
|
|
12652
|
-
]
|
|
13287
|
+
})]
|
|
12653
13288
|
})]
|
|
12654
13289
|
}, id || "new")
|
|
12655
13290
|
});
|
|
12656
13291
|
}
|
|
13292
|
+
function AuditPanel({ collection, documentId }) {
|
|
13293
|
+
const { client } = useDyrected();
|
|
13294
|
+
const { data: auditData, isLoading } = useQuery({
|
|
13295
|
+
queryKey: [
|
|
13296
|
+
"audit-log",
|
|
13297
|
+
collection,
|
|
13298
|
+
documentId
|
|
13299
|
+
],
|
|
13300
|
+
queryFn: async () => {
|
|
13301
|
+
return await client.collectionAudit(collection, { where: { documentId } });
|
|
13302
|
+
}
|
|
13303
|
+
});
|
|
13304
|
+
if (isLoading) return /* @__PURE__ */ jsx("div", {
|
|
13305
|
+
className: "dy-flex dy-items-center dy-justify-center dy-py-12",
|
|
13306
|
+
children: /* @__PURE__ */ jsx(Loader2, { className: "dy-h-6 dy-w-6 dy-animate-spin dy-text-muted-foreground" })
|
|
13307
|
+
});
|
|
13308
|
+
const logs = auditData?.docs || [];
|
|
13309
|
+
if (logs.length === 0) return /* @__PURE__ */ jsx("div", {
|
|
13310
|
+
className: "dy-text-center dy-py-12 dy-text-muted-foreground dy-text-sm",
|
|
13311
|
+
children: "No audit logs found for this document."
|
|
13312
|
+
});
|
|
13313
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13314
|
+
className: "dy-space-y-6",
|
|
13315
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
13316
|
+
className: "dy-flex dy-items-center dy-justify-between",
|
|
13317
|
+
children: /* @__PURE__ */ jsx("h2", {
|
|
13318
|
+
className: "dy-text-lg dy-font-bold",
|
|
13319
|
+
children: "Audit History"
|
|
13320
|
+
})
|
|
13321
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13322
|
+
className: "dy-space-y-4",
|
|
13323
|
+
children: logs.map((log) => {
|
|
13324
|
+
let changeDetails = null;
|
|
13325
|
+
try {
|
|
13326
|
+
const parsed = JSON.parse(log.changes);
|
|
13327
|
+
const before = parsed.before || {};
|
|
13328
|
+
const after = parsed.after || {};
|
|
13329
|
+
const diffs = [];
|
|
13330
|
+
const allKeys = Array.from(/* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)]));
|
|
13331
|
+
for (const key of allKeys) {
|
|
13332
|
+
if ([
|
|
13333
|
+
"updatedAt",
|
|
13334
|
+
"updatedBy",
|
|
13335
|
+
"createdAt",
|
|
13336
|
+
"createdBy",
|
|
13337
|
+
"id"
|
|
13338
|
+
].includes(key)) continue;
|
|
13339
|
+
if (JSON.stringify(before[key]) !== JSON.stringify(after[key])) diffs.push({
|
|
13340
|
+
field: key,
|
|
13341
|
+
from: before[key],
|
|
13342
|
+
to: after[key]
|
|
13343
|
+
});
|
|
13344
|
+
}
|
|
13345
|
+
if (diffs.length > 0) changeDetails = /* @__PURE__ */ jsx("div", {
|
|
13346
|
+
className: "dy-mt-3 dy-overflow-x-auto dy-rounded-lg dy-border dy-border-border/40",
|
|
13347
|
+
children: /* @__PURE__ */ jsxs("table", {
|
|
13348
|
+
className: "dy-w-full dy-text-left dy-text-xs",
|
|
13349
|
+
children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", {
|
|
13350
|
+
className: "dy-bg-muted/40 dy-border-b dy-border-border/40",
|
|
13351
|
+
children: [
|
|
13352
|
+
/* @__PURE__ */ jsx("th", {
|
|
13353
|
+
className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
|
|
13354
|
+
children: "Field"
|
|
13355
|
+
}),
|
|
13356
|
+
/* @__PURE__ */ jsx("th", {
|
|
13357
|
+
className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
|
|
13358
|
+
children: "Before"
|
|
13359
|
+
}),
|
|
13360
|
+
/* @__PURE__ */ jsx("th", {
|
|
13361
|
+
className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
|
|
13362
|
+
children: "After"
|
|
13363
|
+
})
|
|
13364
|
+
]
|
|
13365
|
+
}) }), /* @__PURE__ */ jsx("tbody", {
|
|
13366
|
+
className: "dy-divide-y dy-divide-border/30",
|
|
13367
|
+
children: diffs.map((diff) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
13368
|
+
/* @__PURE__ */ jsx("td", {
|
|
13369
|
+
className: "dy-px-3 dy-py-2 dy-font-mono dy-font-semibold dy-text-foreground",
|
|
13370
|
+
children: diff.field
|
|
13371
|
+
}),
|
|
13372
|
+
/* @__PURE__ */ jsx("td", {
|
|
13373
|
+
className: "dy-px-3 dy-py-2 dy-text-muted-foreground dy-max-w-[200px] dy-truncate",
|
|
13374
|
+
title: JSON.stringify(diff.from),
|
|
13375
|
+
children: diff.from === null || diff.from === void 0 ? /* @__PURE__ */ jsx("span", {
|
|
13376
|
+
className: "dy-italic dy-text-muted-foreground/40",
|
|
13377
|
+
children: "empty"
|
|
13378
|
+
}) : typeof diff.from === "object" ? JSON.stringify(diff.from) : String(diff.from)
|
|
13379
|
+
}),
|
|
13380
|
+
/* @__PURE__ */ jsx("td", {
|
|
13381
|
+
className: "dy-px-3 dy-py-2 dy-text-foreground dy-max-w-[200px] dy-truncate",
|
|
13382
|
+
title: JSON.stringify(diff.to),
|
|
13383
|
+
children: diff.to === null || diff.to === void 0 ? /* @__PURE__ */ jsx("span", {
|
|
13384
|
+
className: "dy-italic dy-text-muted-foreground/40",
|
|
13385
|
+
children: "empty"
|
|
13386
|
+
}) : typeof diff.to === "object" ? JSON.stringify(diff.to) : String(diff.to)
|
|
13387
|
+
})
|
|
13388
|
+
] }, diff.field))
|
|
13389
|
+
})]
|
|
13390
|
+
})
|
|
13391
|
+
});
|
|
13392
|
+
} catch {}
|
|
13393
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13394
|
+
className: "dy-p-5 dy-rounded-2xl dy-border dy-border-border/60 dy-bg-card dy-shadow-sm dy-space-y-2",
|
|
13395
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
13396
|
+
className: "dy-flex dy-items-center dy-justify-between",
|
|
13397
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
13398
|
+
className: "dy-flex dy-items-center dy-gap-2",
|
|
13399
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
13400
|
+
className: cn("dy-px-2 dy-py-0.5 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider", log.operation === "create" ? "dy-bg-emerald-50 dy-text-emerald-700 dy-border dy-border-emerald-200" : log.operation === "delete" ? "dy-bg-red-50 dy-text-red-700 dy-border dy-border-red-200" : "dy-bg-blue-50 dy-text-blue-700 dy-border dy-border-blue-200"),
|
|
13401
|
+
children: log.operation
|
|
13402
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
13403
|
+
className: "dy-text-xs dy-text-muted-foreground",
|
|
13404
|
+
children: ["by ", /* @__PURE__ */ jsx("span", {
|
|
13405
|
+
className: "dy-font-mono dy-text-foreground",
|
|
13406
|
+
children: log.user || "System"
|
|
13407
|
+
})]
|
|
13408
|
+
})]
|
|
13409
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
13410
|
+
className: "dy-text-xs dy-text-muted-foreground",
|
|
13411
|
+
children: new Date(log.timestamp).toLocaleString()
|
|
13412
|
+
})]
|
|
13413
|
+
}), changeDetails]
|
|
13414
|
+
}, log.id);
|
|
13415
|
+
})
|
|
13416
|
+
})]
|
|
13417
|
+
});
|
|
13418
|
+
}
|
|
12657
13419
|
//#endregion
|
|
12658
13420
|
//#region src/components/ui/card.tsx
|
|
12659
13421
|
var Card = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
|
|
@@ -13972,7 +14734,7 @@ function SetupPromptUI({ config }) {
|
|
|
13972
14734
|
setCopied(true);
|
|
13973
14735
|
window.setTimeout(() => setCopied(false), 1800);
|
|
13974
14736
|
}
|
|
13975
|
-
const currentVersion = "2.5.
|
|
14737
|
+
const currentVersion = "2.5.62";
|
|
13976
14738
|
const [latestVersion, setLatestVersion] = useState(() => {
|
|
13977
14739
|
if (typeof window === "undefined") return null;
|
|
13978
14740
|
return localStorage.getItem("dyrected_latest_release");
|
|
@@ -14146,6 +14908,85 @@ function SetupPromptUI({ config }) {
|
|
|
14146
14908
|
});
|
|
14147
14909
|
}
|
|
14148
14910
|
//#endregion
|
|
14911
|
+
//#region src/components/document-meta.tsx
|
|
14912
|
+
/** Turn a slug like `blog-posts` into a readable `Blog Posts` fallback. */
|
|
14913
|
+
function humanize(slug) {
|
|
14914
|
+
return slug.split(/[-_]/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
14915
|
+
}
|
|
14916
|
+
/**
|
|
14917
|
+
* Derive a human page label from the current admin path, e.g. "Posts",
|
|
14918
|
+
* "New Post", "Edit Post", or "Dashboard". Uses the collection/global labels
|
|
14919
|
+
* from the loaded schemas, falling back to a humanized slug.
|
|
14920
|
+
*/
|
|
14921
|
+
function pageLabel(pathname, collections, globals) {
|
|
14922
|
+
const segments = pathname.split("/").filter(Boolean);
|
|
14923
|
+
if (segments.length === 0) return "Dashboard";
|
|
14924
|
+
if (segments[0] === "setup") return "Setup";
|
|
14925
|
+
if (segments[0] === "collections" && segments[1]) {
|
|
14926
|
+
const slug = segments[1];
|
|
14927
|
+
const collection = collections.find((c) => c.slug === slug);
|
|
14928
|
+
const singular = collection?.labels?.singular ?? humanize(slug);
|
|
14929
|
+
const plural = collection?.labels?.plural ?? humanize(slug);
|
|
14930
|
+
if (segments[2] === "new") return `New ${singular}`;
|
|
14931
|
+
if (segments[2] === "edit") return `Edit ${singular}`;
|
|
14932
|
+
return plural;
|
|
14933
|
+
}
|
|
14934
|
+
if (segments[0] === "globals" && segments[1]) {
|
|
14935
|
+
const slug = segments[1];
|
|
14936
|
+
return globals.find((g) => g.slug === slug)?.label ?? humanize(slug);
|
|
14937
|
+
}
|
|
14938
|
+
return "";
|
|
14939
|
+
}
|
|
14940
|
+
/**
|
|
14941
|
+
* Keeps the browser tab in sync with the admin: sets `document.title` from the
|
|
14942
|
+
* current page plus `admin.meta.titleSuffix`, updating on every route change,
|
|
14943
|
+
* and applies `admin.branding.favicon` to the page favicon.
|
|
14944
|
+
*
|
|
14945
|
+
* Renders nothing. Must be mounted inside the router (needs `useLocation`) and
|
|
14946
|
+
* inside `DyrectedProvider` (needs the loaded schemas).
|
|
14947
|
+
*/
|
|
14948
|
+
function DocumentMeta() {
|
|
14949
|
+
const location = useLocation();
|
|
14950
|
+
const { schemas } = useDyrected();
|
|
14951
|
+
const admin = schemas?.admin;
|
|
14952
|
+
const titleSuffix = admin?.meta?.titleSuffix ?? "- Dyrected";
|
|
14953
|
+
const favicon = admin?.branding?.favicon;
|
|
14954
|
+
const originalTitleRef = useRef(null);
|
|
14955
|
+
useEffect(() => {
|
|
14956
|
+
if (typeof document === "undefined") return;
|
|
14957
|
+
if (originalTitleRef.current === null) originalTitleRef.current = document.title;
|
|
14958
|
+
return () => {
|
|
14959
|
+
if (originalTitleRef.current !== null) document.title = originalTitleRef.current;
|
|
14960
|
+
};
|
|
14961
|
+
}, []);
|
|
14962
|
+
useEffect(() => {
|
|
14963
|
+
if (typeof document === "undefined") return;
|
|
14964
|
+
const next = [pageLabel(location.pathname, schemas?.collections ?? [], schemas?.globals ?? []), titleSuffix].filter(Boolean).join(" ");
|
|
14965
|
+
if (next && document.title !== next) document.title = next;
|
|
14966
|
+
}, [
|
|
14967
|
+
location.pathname,
|
|
14968
|
+
schemas,
|
|
14969
|
+
titleSuffix
|
|
14970
|
+
]);
|
|
14971
|
+
useEffect(() => {
|
|
14972
|
+
if (typeof document === "undefined" || !favicon) return;
|
|
14973
|
+
let link = document.querySelector("link[rel~=\"icon\"]");
|
|
14974
|
+
const created = !link;
|
|
14975
|
+
if (!link) {
|
|
14976
|
+
link = document.createElement("link");
|
|
14977
|
+
link.rel = "icon";
|
|
14978
|
+
document.head.appendChild(link);
|
|
14979
|
+
}
|
|
14980
|
+
const previousHref = link.getAttribute("href");
|
|
14981
|
+
link.setAttribute("href", favicon);
|
|
14982
|
+
return () => {
|
|
14983
|
+
if (created) link?.remove();
|
|
14984
|
+
else if (previousHref !== null) link?.setAttribute("href", previousHref);
|
|
14985
|
+
};
|
|
14986
|
+
}, [favicon]);
|
|
14987
|
+
return null;
|
|
14988
|
+
}
|
|
14989
|
+
//#endregion
|
|
14149
14990
|
//#region src/pages/auth/login-page.tsx
|
|
14150
14991
|
function LoginPage({ collectionSlug, onLogin }) {
|
|
14151
14992
|
const { client } = useDyrected();
|
|
@@ -14907,32 +15748,36 @@ function NavigationSync({ onNavigate }) {
|
|
|
14907
15748
|
function AdminRoutes({ onNavigate, isEmbedded = false }) {
|
|
14908
15749
|
return /* @__PURE__ */ jsx(AuthGate, { children: /* @__PURE__ */ jsxs(AdminShell, {
|
|
14909
15750
|
isEmbedded,
|
|
14910
|
-
children: [
|
|
14911
|
-
/* @__PURE__ */ jsx(
|
|
14912
|
-
|
|
14913
|
-
|
|
14914
|
-
|
|
14915
|
-
|
|
14916
|
-
|
|
14917
|
-
|
|
14918
|
-
|
|
14919
|
-
|
|
14920
|
-
|
|
14921
|
-
|
|
14922
|
-
|
|
14923
|
-
|
|
14924
|
-
|
|
14925
|
-
|
|
14926
|
-
|
|
14927
|
-
|
|
14928
|
-
|
|
14929
|
-
|
|
14930
|
-
|
|
14931
|
-
|
|
14932
|
-
|
|
14933
|
-
|
|
14934
|
-
|
|
14935
|
-
|
|
15751
|
+
children: [
|
|
15752
|
+
/* @__PURE__ */ jsx(NavigationSync, { onNavigate }),
|
|
15753
|
+
/* @__PURE__ */ jsx(DocumentMeta, {}),
|
|
15754
|
+
/* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxs(Routes, { children: [
|
|
15755
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15756
|
+
path: "/",
|
|
15757
|
+
element: /* @__PURE__ */ jsx(Dashboard, {})
|
|
15758
|
+
}),
|
|
15759
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15760
|
+
path: "/collections/:slug",
|
|
15761
|
+
element: /* @__PURE__ */ jsx(CollectionRoute, {})
|
|
15762
|
+
}),
|
|
15763
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15764
|
+
path: "/collections/:slug/new",
|
|
15765
|
+
element: /* @__PURE__ */ jsx(EditEntryPage, {})
|
|
15766
|
+
}),
|
|
15767
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15768
|
+
path: "/collections/:slug/edit/:id",
|
|
15769
|
+
element: /* @__PURE__ */ jsx(EditEntryPage, {})
|
|
15770
|
+
}),
|
|
15771
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15772
|
+
path: "/globals/:slug",
|
|
15773
|
+
element: /* @__PURE__ */ jsx(GlobalEditorPage, {})
|
|
15774
|
+
}),
|
|
15775
|
+
/* @__PURE__ */ jsx(Route, {
|
|
15776
|
+
path: "/setup",
|
|
15777
|
+
element: /* @__PURE__ */ jsx(SetupPage, {})
|
|
15778
|
+
})
|
|
15779
|
+
] }) })
|
|
15780
|
+
]
|
|
14936
15781
|
}) });
|
|
14937
15782
|
}
|
|
14938
15783
|
/**
|