@vertebr/react 0.8.0 → 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 (70) 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/theme/ThemeToggle.d.ts.map +1 -1
  50. package/dist/components/theme/ThemeToggle.js +1 -1
  51. package/dist/components/ui/icons.d.ts +2 -0
  52. package/dist/components/ui/icons.d.ts.map +1 -1
  53. package/dist/components/ui/icons.js +12 -0
  54. package/dist/styles/addon.css +540 -0
  55. package/dist/styles/base.css +1 -0
  56. package/dist/styles/font-library.css +2 -0
  57. package/dist/styles/index.css +2 -0
  58. package/dist/styles/main.css +0 -38
  59. package/dist/styles/modal.css +2 -0
  60. package/dist/styles/motion.css +55 -0
  61. package/dist/styles/nav.css +39 -4
  62. package/dist/styles/select.css +6 -0
  63. package/dist/styles/shell.css +203 -6
  64. package/dist/styles/sidebar.css +63 -3
  65. package/dist/styles/sync.css +540 -0
  66. package/dist/styles/table.css +15 -5
  67. package/dist/themes/dark.css +11 -11
  68. package/dist/themes/index.css +1 -0
  69. package/dist/themes/light.css +19 -19
  70. 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
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../../src/components/theme/ThemeToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAgChE"}
1
+ {"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../../src/components/theme/ThemeToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BA+BhE"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  export function ThemeToggle({ theme, onChange }) {
3
- return (_jsxs("div", { className: "vertebr-theme", children: [_jsx("div", { className: "vertebr-nav-label", children: "Appearance" }), _jsxs("div", { className: "vertebr-theme-toggle", role: "group", "aria-label": "Color theme", children: [_jsxs("button", { type: "button", className: "vertebr-theme-option", "data-active": theme === "light", "aria-pressed": theme === "light", onClick: () => onChange("light"), children: [_jsx(ThemeSunIcon, {}), "Light"] }), _jsxs("button", { type: "button", className: "vertebr-theme-option", "data-active": theme === "dark", "aria-pressed": theme === "dark", onClick: () => onChange("dark"), children: [_jsx(ThemeMoonIcon, {}), "Dark"] })] })] }));
3
+ return (_jsx("div", { className: "vertebr-theme", children: _jsxs("div", { className: "vertebr-theme-toggle", role: "group", "aria-label": "Appearance", children: [_jsxs("button", { type: "button", className: "vertebr-theme-option", "data-active": theme === "light", "aria-pressed": theme === "light", onClick: () => onChange("light"), children: [_jsx(ThemeSunIcon, {}), "Light"] }), _jsxs("button", { type: "button", className: "vertebr-theme-option", "data-active": theme === "dark", "aria-pressed": theme === "dark", onClick: () => onChange("dark"), children: [_jsx(ThemeMoonIcon, {}), "Dark"] })] }) }));
4
4
  }
5
5
  function ThemeSunIcon() {
6
6
  return (_jsxs("svg", { className: "vertebr-theme-icon", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("circle", { cx: "12", cy: "12", r: "4" }), _jsx("path", { d: "M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" })] }));
@@ -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;