@vertebr/react 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/components/admin/AddonEditor.d.ts +12 -0
  2. package/dist/components/admin/AddonEditor.d.ts.map +1 -0
  3. package/dist/components/admin/AddonEditor.js +25 -0
  4. package/dist/components/admin/AddonOverview.d.ts +8 -0
  5. package/dist/components/admin/AddonOverview.d.ts.map +1 -0
  6. package/dist/components/admin/AddonOverview.js +125 -0
  7. package/dist/components/admin/AddonPreviewThumb.d.ts +11 -0
  8. package/dist/components/admin/AddonPreviewThumb.d.ts.map +1 -0
  9. package/dist/components/admin/AddonPreviewThumb.js +52 -0
  10. package/dist/components/admin/AdminCommandPalette.d.ts +9 -0
  11. package/dist/components/admin/AdminCommandPalette.d.ts.map +1 -0
  12. package/dist/components/admin/AdminCommandPalette.js +68 -0
  13. package/dist/components/admin/AdminContent.d.ts.map +1 -1
  14. package/dist/components/admin/AdminContent.js +11 -3
  15. package/dist/components/admin/AdminHeader.d.ts +2 -3
  16. package/dist/components/admin/AdminHeader.d.ts.map +1 -1
  17. package/dist/components/admin/AdminHeader.js +10 -3
  18. package/dist/components/admin/AdminPoweredBy.d.ts +5 -0
  19. package/dist/components/admin/AdminPoweredBy.d.ts.map +1 -0
  20. package/dist/components/admin/AdminPoweredBy.js +8 -0
  21. package/dist/components/admin/AdminSidebar.d.ts.map +1 -1
  22. package/dist/components/admin/AdminSidebar.js +9 -7
  23. package/dist/components/admin/AdminSyncPage.d.ts +7 -0
  24. package/dist/components/admin/AdminSyncPage.d.ts.map +1 -0
  25. package/dist/components/admin/AdminSyncPage.js +169 -0
  26. package/dist/components/admin/AdminTopBar.d.ts +6 -2
  27. package/dist/components/admin/AdminTopBar.d.ts.map +1 -1
  28. package/dist/components/admin/AdminTopBar.js +3 -3
  29. package/dist/components/admin/PagePreviewPane.d.ts +3 -1
  30. package/dist/components/admin/PagePreviewPane.d.ts.map +1 -1
  31. package/dist/components/admin/PagePreviewPane.js +2 -2
  32. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  33. package/dist/components/admin/VertebrAdmin.js +76 -13
  34. package/dist/components/admin/addonLabels.d.ts +6 -0
  35. package/dist/components/admin/addonLabels.d.ts.map +1 -0
  36. package/dist/components/admin/addonLabels.js +20 -0
  37. package/dist/components/admin/adminSearch.d.ts +12 -0
  38. package/dist/components/admin/adminSearch.d.ts.map +1 -0
  39. package/dist/components/admin/adminSearch.js +111 -0
  40. package/dist/components/admin/breadcrumbs.d.ts.map +1 -1
  41. package/dist/components/admin/breadcrumbs.js +12 -0
  42. package/dist/components/admin/routes.d.ts.map +1 -1
  43. package/dist/components/admin/routes.js +31 -1
  44. package/dist/components/admin/types.d.ts +7 -0
  45. package/dist/components/admin/types.d.ts.map +1 -1
  46. package/dist/components/env/EnvMultiSelect.d.ts +20 -0
  47. package/dist/components/env/EnvMultiSelect.d.ts.map +1 -0
  48. package/dist/components/env/EnvMultiSelect.js +38 -0
  49. package/dist/components/ui/icons.d.ts +2 -0
  50. package/dist/components/ui/icons.d.ts.map +1 -1
  51. package/dist/components/ui/icons.js +12 -0
  52. package/dist/styles/addon.css +540 -0
  53. package/dist/styles/base.css +1 -0
  54. package/dist/styles/font-library.css +2 -0
  55. package/dist/styles/index.css +2 -0
  56. package/dist/styles/main.css +0 -38
  57. package/dist/styles/modal.css +2 -0
  58. package/dist/styles/motion.css +55 -0
  59. package/dist/styles/nav.css +39 -4
  60. package/dist/styles/select.css +6 -0
  61. package/dist/styles/shell.css +193 -6
  62. package/dist/styles/sidebar.css +63 -3
  63. package/dist/styles/sync.css +540 -0
  64. package/dist/styles/table.css +15 -5
  65. package/dist/themes/dark.css +11 -11
  66. package/dist/themes/index.css +1 -0
  67. package/dist/themes/light.css +19 -19
  68. package/package.json +1 -1
@@ -23,6 +23,12 @@ export function pathForSelection(selection, catalog) {
23
23
  switch (selection.kind) {
24
24
  case "overview":
25
25
  return "/overview";
26
+ case "sync":
27
+ return "/sync";
28
+ case "addons":
29
+ return "/addons";
30
+ case "addon":
31
+ return `/addons/${encodeURIComponent(selection.id)}`;
26
32
  case "gallery":
27
33
  return "/gallery";
28
34
  case "fontLibrary":
@@ -77,6 +83,17 @@ export function selectionFromPath(pathname, basePath, catalog) {
77
83
  const [head, ...tail] = parts;
78
84
  if (head === "overview")
79
85
  return { kind: "overview" };
86
+ if (head === "sync")
87
+ return { kind: "sync" };
88
+ if (head === "addons") {
89
+ if (!tail[0])
90
+ return { kind: "addons" };
91
+ const id = decodeURIComponent(tail[0]);
92
+ if (catalog && !catalog.addons?.some((item) => item.id === id)) {
93
+ return null;
94
+ }
95
+ return { kind: "addon", id };
96
+ }
80
97
  if (head === "gallery")
81
98
  return { kind: "gallery" };
82
99
  if (head === "fonts")
@@ -134,6 +151,17 @@ export function coerceSelection(selection, catalog) {
134
151
  if (selection.kind === "overview") {
135
152
  return catalog.metrics ? selection : defaultSelection(catalog);
136
153
  }
154
+ if (selection.kind === "sync") {
155
+ return catalog.sync?.enabled ? selection : defaultSelection(catalog);
156
+ }
157
+ if (selection.kind === "addons") {
158
+ return catalog.addons?.length ? selection : defaultSelection(catalog);
159
+ }
160
+ if (selection.kind === "addon") {
161
+ return catalog.addons?.some((item) => item.id === selection.id)
162
+ ? selection
163
+ : defaultSelection(catalog);
164
+ }
137
165
  if (selection.kind === "gallery") {
138
166
  return catalog.gallery ? selection : defaultSelection(catalog);
139
167
  }
@@ -162,9 +190,11 @@ export function selectionsEqual(a, b) {
162
190
  return a === b;
163
191
  if (a.kind !== b.kind)
164
192
  return false;
165
- if (a.kind === "overview" || a.kind === "gallery" || a.kind === "fontLibrary") {
193
+ if (a.kind === "overview" || a.kind === "gallery" || a.kind === "fontLibrary" || a.kind === "sync" || a.kind === "addons") {
166
194
  return true;
167
195
  }
196
+ if (a.kind === "addon" && b.kind === "addon")
197
+ return a.id === b.id;
168
198
  if (a.kind === "emails" && b.kind === "emails") {
169
199
  return (a.tab ?? "compose") === (b.tab ?? "compose");
170
200
  }
@@ -29,6 +29,13 @@ export type NavIcon = (props: {
29
29
  }) => ReactElement;
30
30
  export type Selection = {
31
31
  kind: "overview";
32
+ } | {
33
+ kind: "sync";
34
+ } | {
35
+ kind: "addons";
36
+ } | {
37
+ kind: "addon";
38
+ id: string;
32
39
  } | {
33
40
  kind: "resource";
34
41
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/admin/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MACb,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,YAAY,CAAC;AAEtE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAAC;AAET,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/admin/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MACb,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,YAAY,CAAC;AAEtE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAAC;AAET,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AdminEnvironment } from "@vertebr/client";
2
+ export type EnvMultiSelectProps = {
3
+ environments: AdminEnvironment[];
4
+ value: string[];
5
+ onChange: (next: string[]) => void;
6
+ /** Hide this env id from destination options (usually the selected source). */
7
+ excludeId?: string;
8
+ ariaLabel?: string;
9
+ placeholder?: string;
10
+ };
11
+ export declare function EnvMultiSelect({ environments, value, onChange, excludeId, ariaLabel, placeholder, }: EnvMultiSelectProps): import("react").JSX.Element;
12
+ export declare function EnvFlowBadge({ environment }: {
13
+ environment: AdminEnvironment;
14
+ }): import("react").JSX.Element;
15
+ export type SyncFlowDiagramProps = {
16
+ from?: AdminEnvironment;
17
+ to: AdminEnvironment[];
18
+ };
19
+ export declare function SyncFlowDiagram({ from, to }: SyncFlowDiagramProps): import("react").JSX.Element;
20
+ //# sourceMappingURL=EnvMultiSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/components/env/EnvMultiSelect.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAsC,EACtC,WAAmC,GACpC,EAAE,mBAAmB,+BAmFrB;AAED,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,gBAAgB,CAAA;CAAE,+BAU9E;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,EAAE,EAAE,gBAAgB,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,oBAAoB,+BA8BjE"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ export function EnvMultiSelect({ environments, value, onChange, excludeId, ariaLabel = "Destination environments", placeholder = "Select destinations", }) {
4
+ const [open, setOpen] = useState(false);
5
+ const rootRef = useRef(null);
6
+ const options = environments.filter((env) => env.id !== excludeId);
7
+ const selected = options.filter((env) => value.includes(env.id));
8
+ useEffect(() => {
9
+ if (!open)
10
+ return;
11
+ const onPointerDown = (event) => {
12
+ if (!rootRef.current?.contains(event.target))
13
+ setOpen(false);
14
+ };
15
+ document.addEventListener("mousedown", onPointerDown);
16
+ return () => document.removeEventListener("mousedown", onPointerDown);
17
+ }, [open]);
18
+ const toggle = (envId) => {
19
+ if (value.includes(envId)) {
20
+ onChange(value.filter((id) => id !== envId));
21
+ return;
22
+ }
23
+ onChange([...value, envId]);
24
+ };
25
+ return (_jsxs("div", { className: "vertebr-env-multi", ref: rootRef, children: [_jsxs("button", { type: "button", className: "vertebr-select-trigger vertebr-env-multi-trigger", "aria-label": ariaLabel, "aria-expanded": open, onClick: () => setOpen((prev) => !prev), children: [_jsx("span", { className: "vertebr-env-multi-value", children: selected.length === 0 ? (_jsx("span", { className: "vertebr-env-multi-placeholder", children: placeholder })) : (selected.map((env) => (_jsxs("span", { className: "vertebr-env-multi-chip", "data-tone": env.tone ?? "neutral", children: [_jsx("span", { className: "vertebr-select-dot", "data-tone": env.tone ?? "neutral" }), env.label] }, env.id)))) }), _jsx("span", { className: "vertebr-select-icon", "aria-hidden": "true", children: "\u25BE" })] }), open ? (_jsx("div", { className: "vertebr-env-multi-menu", role: "listbox", "aria-label": ariaLabel, children: options.map((env) => {
26
+ const checked = value.includes(env.id);
27
+ return (_jsxs("label", { className: "vertebr-env-multi-option", "data-tone": env.tone ?? "neutral", children: [_jsx("input", { type: "checkbox", checked: checked, onChange: () => toggle(env.id) }), _jsx("span", { className: "vertebr-select-dot", "data-tone": env.tone ?? "neutral" }), _jsx("span", { children: env.label })] }, env.id));
28
+ }) })) : null] }));
29
+ }
30
+ export function EnvFlowBadge({ environment }) {
31
+ return (_jsxs("span", { className: "vertebr-sync-env-badge", "data-tone": environment.tone ?? "neutral", children: [_jsx("span", { className: "vertebr-select-dot", "data-tone": environment.tone ?? "neutral" }), _jsx("span", { children: environment.label })] }));
32
+ }
33
+ export function SyncFlowDiagram({ from, to }) {
34
+ if (!from || to.length === 0) {
35
+ return (_jsx("div", { className: "vertebr-sync-flow vertebr-sync-flow-empty", children: "Select a source and at least one destination environment." }));
36
+ }
37
+ return (_jsxs("div", { className: "vertebr-sync-flow", "aria-label": "Sync direction", children: [_jsxs("div", { className: "vertebr-sync-flow-source", children: [_jsx("span", { className: "vertebr-sync-flow-label", children: "From" }), _jsx(EnvFlowBadge, { environment: from })] }), _jsx("div", { className: "vertebr-sync-flow-targets", children: to.map((destination) => (_jsxs("div", { className: "vertebr-sync-flow-row", children: [_jsx("span", { className: "vertebr-sync-flow-arrow", "aria-hidden": "true", children: "\u2192" }), _jsxs("div", { className: "vertebr-sync-flow-target", children: [_jsx("span", { className: "vertebr-sync-flow-label", children: "To" }), _jsx(EnvFlowBadge, { environment: destination })] })] }, destination.id))) })] }));
38
+ }
@@ -10,6 +10,8 @@ export declare function IconSettings(props: IconProps): import("react").JSX.Elem
10
10
  export declare function IconChart(props: IconProps): import("react").JSX.Element;
11
11
  export declare function IconChevronLeft(props: IconProps): import("react").JSX.Element;
12
12
  export declare function IconSearch(props: IconProps): import("react").JSX.Element;
13
+ export declare function IconSync(props: IconProps): import("react").JSX.Element;
14
+ export declare function IconAddon(props: IconProps): import("react").JSX.Element;
13
15
  export declare function iconForNavKey(key: string): typeof IconHome;
14
16
  export {};
15
17
  //# sourceMappingURL=icons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAiBzC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BAMxC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,+BAO5C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,+BAQ3C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAOzC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BAOxC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAOzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,+BAO5C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAMzC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,+BAM/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,+BAO1C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,mBAQxC"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAiBzC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BAMxC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,+BAO5C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,+BAQ3C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAOzC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BAOxC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAOzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,+BAO5C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BAMzC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,+BAM/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,+BAO1C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BASxC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,+BASzC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,mBAWxC"}
@@ -43,6 +43,12 @@ export function IconChevronLeft(props) {
43
43
  export function IconSearch(props) {
44
44
  return (_jsxs("svg", { ...base(props), children: [_jsx("circle", { cx: "9", cy: "9", r: "4.75" }), _jsx("path", { d: "M13 13l3.5 3.5" })] }));
45
45
  }
46
+ export function IconSync(props) {
47
+ return (_jsxs("svg", { ...base(props), children: [_jsx("path", { d: "M4 7h8" }), _jsx("path", { d: "M10 5l2 2-2 2" }), _jsx("path", { d: "M16 13H8" }), _jsx("path", { d: "M10 11l-2 2 2 2" })] }));
48
+ }
49
+ export function IconAddon(props) {
50
+ return (_jsxs("svg", { ...base(props), children: [_jsx("path", { d: "M8 3.5h4v4H8z" }), _jsx("path", { d: "M3.5 8h4v4h-4z" }), _jsx("path", { d: "M12.5 8h4v4h-4z" }), _jsx("path", { d: "M8 12.5h4v4H8z" })] }));
51
+ }
46
52
  export function iconForNavKey(key) {
47
53
  if (key === "overview")
48
54
  return IconHome;
@@ -54,6 +60,12 @@ export function iconForNavKey(key) {
54
60
  return IconFonts;
55
61
  if (key === "emails")
56
62
  return IconMail;
63
+ if (key === "sync")
64
+ return IconSync;
65
+ if (key === "addons:overview")
66
+ return IconAddon;
67
+ if (key.startsWith("addon:"))
68
+ return IconAddon;
57
69
  if (key.startsWith("config:"))
58
70
  return IconPages;
59
71
  return IconSettings;