@voyant-travel/admin 0.112.0 → 0.113.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.
- package/dist/components/brand/voyant-mark.d.ts +8 -0
- package/dist/components/brand/voyant-mark.d.ts.map +1 -1
- package/dist/components/brand/voyant-mark.js +9 -1
- package/dist/components/brand/voyant-wordmark.d.ts +4 -0
- package/dist/components/brand/voyant-wordmark.d.ts.map +1 -1
- package/dist/components/brand/voyant-wordmark.js +6 -2
- package/dist/components/operator-admin-sidebar.d.ts +1 -1
- package/dist/components/operator-admin-sidebar.d.ts.map +1 -1
- package/dist/components/operator-admin-sidebar.js +3 -3
- package/dist/components/operator-admin-user-menu.d.ts.map +1 -1
- package/dist/components/operator-admin-user-menu.js +1 -1
- package/dist/dashboard/dashboard-kpi-card.d.ts.map +1 -1
- package/dist/dashboard/dashboard-kpi-card.js +1 -3
- package/dist/dashboard/dashboard-page.js +9 -9
- package/dist/dashboard/dashboard-query-options.js +12 -12
- package/package.json +3 -3
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Voyant 1.0 brand symbol (the pure mark, no container).
|
|
4
|
+
*
|
|
5
|
+
* Uses `currentColor` so it inherits its color from the surrounding
|
|
6
|
+
* element. To render the app-icon badge, wrap it in a rounded container
|
|
7
|
+
* (see the sidebar brand lockup): a `bg-foreground text-background` box
|
|
8
|
+
* with a ~6px radius gives the dark badge + paper-colored mark.
|
|
9
|
+
*/
|
|
2
10
|
export declare function VoyantMark({ className, ...props }: React.ComponentProps<"svg">): import("react/jsx-runtime").JSX.Element;
|
|
3
11
|
//# sourceMappingURL=voyant-mark.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voyant-mark.d.ts","sourceRoot":"","sources":["../../../src/components/brand/voyant-mark.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"voyant-mark.d.ts","sourceRoot":"","sources":["../../../src/components/brand/voyant-mark.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAkB9E"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Voyant 1.0 brand symbol (the pure mark, no container).
|
|
4
|
+
*
|
|
5
|
+
* Uses `currentColor` so it inherits its color from the surrounding
|
|
6
|
+
* element. To render the app-icon badge, wrap it in a rounded container
|
|
7
|
+
* (see the sidebar brand lockup): a `bg-foreground text-background` box
|
|
8
|
+
* with a ~6px radius gives the dark badge + paper-colored mark.
|
|
9
|
+
*/
|
|
2
10
|
export function VoyantMark({ className, ...props }) {
|
|
3
|
-
return (_jsx("svg", { viewBox: "0 0
|
|
11
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", "aria-label": "Voyant", role: "img", "data-slot": "voyant-mark", className: className, ...props, children: _jsx("path", { d: "M13.7139 0.0351562C16.0237 -0.117801 18.3496 0.166234 19.7334 2.2793C20.0424 2.7512 20.3056 3.32978 20.6221 3.77246C21.0861 4.42135 21.7679 4.98613 22.2383 5.64453C23.7262 7.57957 23.877 9.56376 23.749 11.9424C23.7635 12.5773 23.603 13.5473 23.6816 14.1436C24.0347 16.8223 24.5922 18.1924 22.1729 20.0762C18.4804 22.9515 15.6009 24.5012 10.7988 23.8545C8.38523 23.5239 5.04028 22.821 3.13477 21.2568C1.51051 19.9227 0.212005 17.5639 0.0322266 15.4375C-0.151416 13.266 0.490818 11.0531 0.785156 8.91113C0.982777 7.4218 0.89953 4.95644 1.99512 3.8291C4.67641 1.07088 10.0881 0.336621 13.7139 0.0351562ZM12.043 0.886719C9.28834 1.12143 6.46823 1.95743 4.68359 4.2334C2.37309 7.18044 0.318512 11.0904 0.646484 14.9648C0.987112 18.9875 4.08836 22.7471 8.30273 22.2617C9.39044 22.1364 10.2007 21.8607 11.2334 21.6416C12.8453 21.2297 14.4318 20.8261 16.042 20.5283C18.1156 20.146 21.6713 20.6066 22.915 18.4258C24.1535 16.2535 22.3754 12.8405 21.5596 10.7627C20.9307 9.19252 20.4908 7.56611 20.3359 5.87598C20.2919 5.39492 20.202 4.63515 20.0059 4.20898C19.4542 3.01091 17.9566 2.51429 16.8613 2.04395C15.2949 1.37134 13.7637 0.810511 12.043 0.886719Z", stroke: "currentColor" }) }));
|
|
4
12
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import type * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Voyant 1.0 wordmark. Uses `currentColor` so it inherits the surrounding
|
|
4
|
+
* text color (near-black on light surfaces, near-white on dark).
|
|
5
|
+
*/
|
|
2
6
|
export declare function VoyantWordmark({ className, ...props }: React.ComponentProps<"svg">): import("react/jsx-runtime").JSX.Element;
|
|
3
7
|
//# sourceMappingURL=voyant-wordmark.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voyant-wordmark.d.ts","sourceRoot":"","sources":["../../../src/components/brand/voyant-wordmark.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"voyant-wordmark.d.ts","sourceRoot":"","sources":["../../../src/components/brand/voyant-wordmark.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAelF"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Voyant 1.0 wordmark. Uses `currentColor` so it inherits the surrounding
|
|
4
|
+
* text color (near-black on light surfaces, near-white on dark).
|
|
5
|
+
*/
|
|
2
6
|
export function VoyantWordmark({ className, ...props }) {
|
|
3
|
-
return (
|
|
7
|
+
return (_jsx("svg", { viewBox: "0 0 52 14", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", "aria-label": "Voyant", role: "img", "data-slot": "voyant-wordmark", className: className, ...props, children: _jsx("path", { d: "M3.97596 10.5L-3.70964e-05 0.699999H2.09996L4.56396 6.916C4.87196 7.7 4.96996 8.218 4.96996 9.086V9.17H5.41796V9.1C5.41796 8.26 5.51596 7.742 5.83796 6.944L8.34396 0.699999H10.332L6.42596 10.5H3.97596ZM14.1417 10.71C11.7057 10.71 10.0257 9.1 10.0257 6.748C10.0257 4.424 11.7057 2.814 14.1417 2.814C16.5917 2.814 18.2717 4.424 18.2717 6.748C18.2717 9.1 16.5917 10.71 14.1417 10.71ZM14.1417 9.296C15.5417 9.296 16.5357 8.246 16.5357 6.748C16.5357 5.264 15.5417 4.228 14.1417 4.228C12.7417 4.228 11.7617 5.264 11.7617 6.748C11.7617 8.246 12.7417 9.296 14.1417 9.296ZM19.2426 13.58V12.166H20.4326C21.2166 12.166 21.6646 11.746 21.6646 10.878V10.402L18.3606 3.038H20.3066L21.8746 6.58C22.2106 7.35 22.3226 7.854 22.3226 8.722V9.016H22.7846V8.722C22.7846 7.882 22.8826 7.364 23.2326 6.58L24.7866 3.038H26.7326L23.4286 10.388V10.878C23.4286 12.894 22.2666 13.58 20.8106 13.58H19.2426ZM29.8559 10.682C28.3019 10.682 27.2939 9.548 27.2939 8.176C27.2939 7.14 27.8259 6.384 28.3439 5.922C29.4359 4.942 29.7159 4.886 30.7939 4.886H31.7879V4.452H27.3919V3.038H34.6859V10.5H32.9079V8.442H32.5439C32.3619 9.912 31.2699 10.682 29.8559 10.682ZM30.7239 9.31C32.0259 9.31 32.9079 8.204 32.9079 6.118V4.424L30.3459 6.188C29.4919 6.776 29.1839 7.266 29.1839 7.91C29.1839 8.778 29.8139 9.31 30.7239 9.31ZM36.4513 10.5V3.038H38.2293V5.068H38.5933C38.7053 3.64 39.7833 2.856 41.1553 2.856C42.7513 2.856 43.7173 3.85 43.7173 5.628V10.5H41.9533V5.964C41.9533 4.844 41.2953 4.242 40.3713 4.242C39.0693 4.242 38.2293 5.418 38.2293 7.476V10.5H36.4513ZM49.1252 10.5C47.3052 10.5 46.2972 9.492 46.2972 7.616V4.452H44.2812V3.038H46.3672V0.909999L48.0612 -8.34465e-07V3.038H51.0152V4.452H46.9972V4.872H47.2352C47.7952 4.886 48.0612 5.236 48.0612 5.74V7.462C48.0612 8.526 48.5792 9.086 49.5732 9.086H51.0152V10.5H49.1252Z" }) }));
|
|
4
8
|
}
|
|
@@ -21,7 +21,7 @@ export interface DefaultOperatorAdminBrandProps {
|
|
|
21
21
|
linkComponent?: AdminNavLinkComponent;
|
|
22
22
|
}
|
|
23
23
|
export declare function DefaultOperatorAdminBrand({ href, linkComponent: LinkComponent, }: DefaultOperatorAdminBrandProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
-
export declare function OperatorAdminSidebar({ accountHref, brand, currentPath, extensions, icons, linkComponent, navItems, onSignOut, user, ...props }: OperatorAdminSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function OperatorAdminSidebar({ accountHref, brand, currentPath, extensions, icons, linkComponent, navItems, onSignOut, user, variant, ...props }: OperatorAdminSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
25
25
|
export interface OperatorAdminWorkspaceLayoutProps {
|
|
26
26
|
accountHref?: string;
|
|
27
27
|
brand?: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-admin-sidebar.d.ts","sourceRoot":"","sources":["../../src/components/operator-admin-sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAQP,eAAe,EAGhB,MAAM,8BAA8B,CAAA;AAErC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,sCAAsC,CAAA;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAc,MAAM,aAAa,CAAA;AAOjE,OAAO,EAAE,KAAK,qBAAqB,EAAuB,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,KAAK,oBAAoB,EAAyB,MAAM,sBAAsB,CAAA;AAKvF,MAAM,WAAW,yBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC1C,KAAK,CAAC,EAAE,4BAA4B,CAAA;IACpC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,qBAAqB,CAAA;CACtC;AAED,wBAAgB,yBAAyB,CAAC,EACxC,IAAU,EACV,aAAa,EAAE,aAAmC,GACnD,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"operator-admin-sidebar.d.ts","sourceRoot":"","sources":["../../src/components/operator-admin-sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EAQP,eAAe,EAGhB,MAAM,8BAA8B,CAAA;AAErC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,sCAAsC,CAAA;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAc,MAAM,aAAa,CAAA;AAOjE,OAAO,EAAE,KAAK,qBAAqB,EAAuB,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,KAAK,oBAAoB,EAAyB,MAAM,sBAAsB,CAAA;AAKvF,MAAM,WAAW,yBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC1C,KAAK,CAAC,EAAE,4BAA4B,CAAA;IACpC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,qBAAqB,CAAA;CACtC;AAED,wBAAgB,yBAAyB,CAAC,EACxC,IAAU,EACV,aAAa,EAAE,aAAmC,GACnD,EAAE,8BAA8B,2CAuBhC;AAED,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,OAAiB,EACjB,GAAG,KAAK,EACT,EAAE,yBAAyB,2CA0C3B;AAED,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC,aAAa,CAAC,CAAA;IACzE,UAAU,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,KAAK,CAAC,EAAE,4BAA4B,CAAA;IACpC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,QAAQ,CAAC,EAAE,CAAC,oBAAoB,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,KAAK,CAAA;IAC7E,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;IACnD,YAAY,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAA;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;CAC1D;AAqBD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAC/B,MAAM,GAAG,IAAI,CAoBf;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,KAAK,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,KAAK,EACL,aAAa,EACb,aAAwB,EACxB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,kBAAyB,EACzB,IAAI,EACJ,OAAO,GACR,EAAE,iCAAiC,2CA4GnC"}
|
|
@@ -14,9 +14,9 @@ import { VoyantMark } from "./brand/voyant-mark.js";
|
|
|
14
14
|
import { VoyantWordmark } from "./brand/voyant-wordmark.js";
|
|
15
15
|
import { OperatorAdminUserMenu } from "./operator-admin-user-menu.js";
|
|
16
16
|
export function DefaultOperatorAdminBrand({ href = "/", linkComponent: LinkComponent = DefaultAdminNavLink, }) {
|
|
17
|
-
return (_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, tooltip: "Voyant", size: "lg", className: "group-data-[collapsible=icon]:justify-center", children: _jsxs(LinkComponent, { href: href, target: "_self", "aria-label": "Voyant", children: [_jsx(VoyantMark, { "aria-hidden": "true", className: "
|
|
17
|
+
return (_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, tooltip: "Voyant", size: "lg", className: "gap-2 text-foreground group-data-[collapsible=icon]:justify-center", children: _jsxs(LinkComponent, { href: href, target: "_self", "aria-label": "Voyant", children: [_jsx("span", { className: "flex size-6 shrink-0 items-center justify-center rounded-md bg-foreground text-background", children: _jsx(VoyantMark, { "aria-hidden": "true", className: "size-4!" }) }), _jsx(VoyantWordmark, { "aria-hidden": "true", className: "h-[1.125rem]! w-auto! group-data-[collapsible=icon]:hidden!" })] }) }) }) }));
|
|
18
18
|
}
|
|
19
|
-
export function OperatorAdminSidebar({ accountHref, brand, currentPath, extensions, icons, linkComponent, navItems, onSignOut, user, ...props }) {
|
|
19
|
+
export function OperatorAdminSidebar({ accountHref, brand, currentPath, extensions, icons, linkComponent, navItems, onSignOut, user, variant = "inset", ...props }) {
|
|
20
20
|
const messages = useOperatorAdminMessages();
|
|
21
21
|
const baseItems = navItems ?? createOperatorAdminNavigation({ icons, messages: messages.nav });
|
|
22
22
|
const resolvedItems = resolveAdminNavigation({ baseItems, extensions });
|
|
@@ -24,7 +24,7 @@ export function OperatorAdminSidebar({ accountHref, brand, currentPath, extensio
|
|
|
24
24
|
const LinkComponent = linkComponent ?? DefaultAdminNavLink;
|
|
25
25
|
const SettingsIcon = icons?.settings ?? DefaultSettingsIcon;
|
|
26
26
|
const settingsActive = navUrlMatchesPath("/settings", currentPath);
|
|
27
|
-
return (_jsxs(Sidebar, { collapsible: "icon", ...props, children: [_jsx(SidebarHeader, { children: resolvedBrand }), _jsx(SidebarContent, { children: _jsx(AdminNavGroup, { currentPath: currentPath, items: resolvedItems, linkComponent: linkComponent }) }), _jsxs(SidebarFooter, { children: [_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, isActive: settingsActive, tooltip: messages.nav.settings, children: _jsxs(LinkComponent, { href: "/settings", children: [_jsx(SettingsIcon, {}), _jsx("span", { children: messages.nav.settings })] }) }) }) }), user && (_jsx(OperatorAdminUserMenu, { accountHref: accountHref, linkComponent: linkComponent, onSignOut: onSignOut, user: user }))] }), _jsx(SidebarRail, {})] }));
|
|
27
|
+
return (_jsxs(Sidebar, { collapsible: "icon", variant: variant, ...props, children: [_jsx(SidebarHeader, { children: resolvedBrand }), _jsx(SidebarContent, { children: _jsx(AdminNavGroup, { currentPath: currentPath, items: resolvedItems, linkComponent: linkComponent }) }), _jsxs(SidebarFooter, { children: [_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { asChild: true, isActive: settingsActive, tooltip: messages.nav.settings, children: _jsxs(LinkComponent, { href: "/settings", children: [_jsx(SettingsIcon, {}), _jsx("span", { children: messages.nav.settings })] }) }) }) }), user && (_jsx(OperatorAdminUserMenu, { accountHref: accountHref, linkComponent: linkComponent, onSignOut: onSignOut, user: user }))] }), _jsx(SidebarRail, {})] }));
|
|
28
28
|
}
|
|
29
29
|
function normalizePath(path) {
|
|
30
30
|
const withoutHash = path.split("#")[0] ?? "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-admin-user-menu.d.ts","sourceRoot":"","sources":["../../src/components/operator-admin-user-menu.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,qBAAqB,EAAuB,MAAM,qBAAqB,CAAA;AAErF,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,WAAwB,EACxB,aAAa,EAAE,aAAmC,EAClD,SAAS,EACT,IAAI,GACL,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"operator-admin-user-menu.d.ts","sourceRoot":"","sources":["../../src/components/operator-admin-user-menu.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,qBAAqB,EAAuB,MAAM,qBAAqB,CAAA;AAErF,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,WAAwB,EACxB,aAAa,EAAE,aAAmC,EAClD,SAAS,EACT,IAAI,GACL,EAAE,0BAA0B,2CAmG5B"}
|
|
@@ -15,5 +15,5 @@ export function OperatorAdminUserMenu({ accountHref = "/account", linkComponent:
|
|
|
15
15
|
const displayName = getDisplayName(user);
|
|
16
16
|
const initials = getInitials(user.firstName, user.lastName, user.email);
|
|
17
17
|
const showEmailSeparately = Boolean(user.email && displayName !== user.email);
|
|
18
|
-
return (_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { size: "lg", className: "
|
|
18
|
+
return (_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { size: "lg", className: "border border-transparent aria-expanded:border-sidebar-border aria-expanded:bg-sidebar-accent aria-expanded:text-sidebar-accent-foreground", children: [_jsxs(Avatar, { className: "h-8 w-8 rounded-sm after:rounded-sm", children: [_jsx(AvatarImage, { src: user.avatar ?? undefined, alt: displayName, className: "rounded-sm" }), _jsx(AvatarFallback, { className: "rounded-sm", children: initials })] }), _jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [_jsx("span", { className: "truncate font-medium", children: displayName }), showEmailSeparately && _jsx("span", { className: "truncate text-xs", children: user.email })] }), _jsx(ChevronsUpDown, { className: "ml-auto size-4" })] }) }), _jsxs(DropdownMenuContent, { className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-sm", side: isMobile ? "bottom" : "right", align: "end", sideOffset: 4, children: [_jsx("div", { className: "p-0 font-normal", children: _jsxs("div", { className: "flex items-center gap-2 px-1 py-1.5 text-left text-sm", children: [_jsxs(Avatar, { className: "h-8 w-8 rounded-sm after:rounded-sm", children: [_jsx(AvatarImage, { src: user.avatar ?? undefined, alt: displayName, className: "rounded-sm" }), _jsx(AvatarFallback, { className: "rounded-sm", children: initials })] }), _jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [_jsx("span", { className: "truncate font-medium", children: displayName }), showEmailSeparately && _jsx("span", { className: "truncate text-xs", children: user.email })] })] }) }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuItem, { asChild: true, children: _jsxs(LinkComponent, { href: accountHref, children: [_jsx(BadgeCheck, {}), messages.account] }) }), _jsxs(DropdownMenuItem, { onClick: () => setTheme("light"), children: [_jsx(Sun, { className: "h-4 w-4" }), messages.light, (theme === "light" || (theme === "system" && resolvedTheme === "light")) && (_jsx(Check, { className: "ml-auto h-4 w-4" }))] }), _jsxs(DropdownMenuItem, { onClick: () => setTheme("dark"), children: [_jsx(Moon, { className: "h-4 w-4" }), messages.dark, (theme === "dark" || (theme === "system" && resolvedTheme === "dark")) && (_jsx(Check, { className: "ml-auto h-4 w-4" }))] }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuItem, { disabled: true, children: messages.language }), _jsxs(DropdownMenuItem, { onClick: () => setLocale("en"), children: [messages.english, resolvedLocale === "en" && _jsx(Check, { className: "ml-auto h-4 w-4" })] }), _jsxs(DropdownMenuItem, { onClick: () => setLocale("ro"), children: [messages.romanian, resolvedLocale === "ro" && _jsx(Check, { className: "ml-auto h-4 w-4" })] })] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: () => void onSignOut?.(), children: [_jsx(LogOut, {}), messages.logOut] })] })] }) }) }));
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-kpi-card.d.ts","sourceRoot":"","sources":["../../src/dashboard/dashboard-kpi-card.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,WAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,
|
|
1
|
+
{"version":3,"file":"dashboard-kpi-card.d.ts","sourceRoot":"","sources":["../../src/dashboard/dashboard-kpi-card.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,WAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,2CAyDA"}
|
|
@@ -6,7 +6,5 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@voya
|
|
|
6
6
|
import { ArrowDownRight, ArrowUpRight } from "lucide-react";
|
|
7
7
|
export function KpiCard({ title, value, description, icon, trend, trendLabel, empty, emptyLabel, isLoading, }) {
|
|
8
8
|
const isPositive = (trend ?? 0) >= 0;
|
|
9
|
-
return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-
|
|
10
|
-
? "bg-emerald-500/10 text-emerald-600"
|
|
11
|
-
: "bg-rose-500/10 text-rose-600"}`, children: [isPositive ? (_jsx(ArrowUpRight, { className: "h-3 w-3" })) : (_jsx(ArrowDownRight, { className: "h-3 w-3" })), Math.abs(trend).toFixed(1), "%"] }), _jsx("span", { children: trendLabel })] })) : null] })) })] }));
|
|
9
|
+
return (_jsxs(Card, { className: "gap-0", children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between space-y-0", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(CardTitle, { className: "text-base font-medium", children: title }), _jsx("p", { className: "text-sm text-muted-foreground", children: description })] }), _jsx("span", { className: "text-muted-foreground [&_svg]:size-4", children: icon })] }), _jsx(CardContent, { className: "mt-4", children: isLoading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-8 w-32" }), trendLabel ? _jsx(Skeleton, { className: "mt-3 h-5 w-28 rounded-sm" }) : null] })) : (_jsxs(_Fragment, { children: [empty ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: "font-data text-3xl font-semibold tracking-tight text-muted-foreground", "aria-label": emptyLabel ?? description, children: "-" }), _jsx(TooltipContent, { children: emptyLabel ?? description })] }) })) : (_jsx("div", { className: "font-data text-3xl font-semibold tracking-tight", children: value })), !empty && trend != null && trendLabel ? (_jsxs("div", { className: "mt-3 flex items-center gap-1.5 text-xs text-muted-foreground", children: [_jsxs("span", { className: `inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 font-medium ${isPositive ? "bg-success/12 text-success" : "bg-destructive/12 text-destructive"}`, children: [isPositive ? (_jsx(ArrowUpRight, { className: "h-3 w-3" })) : (_jsx(ArrowDownRight, { className: "h-3 w-3" })), Math.abs(trend).toFixed(1), "%"] }), _jsx("span", { children: trendLabel })] })) : null] })) })] }));
|
|
12
10
|
}
|
|
@@ -63,18 +63,18 @@ export function DashboardPage({ emptyStates = {} } = {}) {
|
|
|
63
63
|
? ((currentMonthBookings - prevMonthBookings) / prevMonthBookings) * 100
|
|
64
64
|
: 0;
|
|
65
65
|
const revenueChartConfig = {
|
|
66
|
-
revenue: { label: messages.dashboard.chartRevenueLabel, color: "
|
|
67
|
-
bookings: { label: messages.dashboard.chartBookingsLabel, color: "
|
|
66
|
+
revenue: { label: messages.dashboard.chartRevenueLabel, color: "var(--chart-1)" },
|
|
67
|
+
bookings: { label: messages.dashboard.chartBookingsLabel, color: "#86cb3c" },
|
|
68
68
|
};
|
|
69
69
|
const bookingStatusConfig = {
|
|
70
|
-
confirmed: { label: messages.dashboard.statusConfirmedLabel, color: "
|
|
71
|
-
completed: { label: messages.dashboard.statusCompletedLabel, color: "
|
|
70
|
+
confirmed: { label: messages.dashboard.statusConfirmedLabel, color: "#86cb3c" },
|
|
71
|
+
completed: { label: messages.dashboard.statusCompletedLabel, color: "#6172f3" },
|
|
72
72
|
in_progress: { label: messages.dashboard.statusInProgressLabel, color: "hsl(47 96% 53%)" },
|
|
73
|
-
draft: { label: messages.dashboard.statusDraftLabel, color: "
|
|
74
|
-
cancelled: { label: messages.dashboard.statusCancelledLabel, color: "
|
|
73
|
+
draft: { label: messages.dashboard.statusDraftLabel, color: "#efefeb" },
|
|
74
|
+
cancelled: { label: messages.dashboard.statusCancelledLabel, color: "#ff4405" },
|
|
75
75
|
};
|
|
76
76
|
const monthlyBookingsConfig = {
|
|
77
|
-
count: { label: messages.dashboard.chartBookingsLabel, color: "
|
|
77
|
+
count: { label: messages.dashboard.chartBookingsLabel, color: "var(--chart-1)" },
|
|
78
78
|
};
|
|
79
79
|
const localizedStatusBreakdown = (bookings?.countsByStatus ?? [])
|
|
80
80
|
.filter((entry) => entry.count > 0)
|
|
@@ -120,9 +120,9 @@ export function DashboardPage({ emptyStates = {} } = {}) {
|
|
|
120
120
|
}), icon: _jsx(CalendarCheck, { className: "h-4 w-4 text-muted-foreground" }), trend: bookingTrend, trendLabel: messages.dashboard.trendVsLastMonth, empty: (bookings?.total ?? 0) === 0, emptyLabel: messages.dashboard.metricUnavailable, isLoading: bookingsPending }), _jsx(KpiCard, { title: messages.dashboard.totalTravelersTitle, value: totalPax.toLocaleString(), description: messages.dashboard.totalTravelersDescription, icon: _jsx(Users, { className: "h-4 w-4 text-muted-foreground" }), empty: totalPax === 0 && (bookings?.total ?? 0) === 0, emptyLabel: messages.dashboard.metricUnavailable, isLoading: bookingsPending }), _jsx(KpiCard, { title: messages.dashboard.activeProductsTitle, value: activeProducts.toString(), description: formatMessage(messages.dashboard.activeProductsDescription, {
|
|
121
121
|
products: totalProducts,
|
|
122
122
|
suppliers: totalSuppliers,
|
|
123
|
-
}), icon: _jsx(Package, { className: "h-4 w-4 text-muted-foreground" }), empty: activeProducts === 0 && totalProducts === 0, emptyLabel: messages.dashboard.metricUnavailable, isLoading: productsPending || suppliersPending })] }), _jsx(AdminWidgetSlotRenderer, { slot: "dashboard.after-kpis", props: widgetProps }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: messages.dashboard.revenueTrendTitle }), _jsx(CardDescription, { children: messages.dashboard.revenueTrendDescription })] }), _jsx(CardContent, { children: bookingsPending ? (_jsx(DashboardAreaChartSkeleton, {})) : !hasRevenueData ? (_jsx(DashboardEmptyState, { emptyState: resolvedEmptyStates.revenueTrend })) : (_jsx(ChartContainer, { config: revenueChartConfig, className: "h-[300px] w-full", children: _jsxs(AreaChart, { data: monthlyRevenue, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "fillRevenue", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "5%", stopColor: "
|
|
123
|
+
}), icon: _jsx(Package, { className: "h-4 w-4 text-muted-foreground" }), empty: activeProducts === 0 && totalProducts === 0, emptyLabel: messages.dashboard.metricUnavailable, isLoading: productsPending || suppliersPending })] }), _jsx(AdminWidgetSlotRenderer, { slot: "dashboard.after-kpis", props: widgetProps }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: messages.dashboard.revenueTrendTitle }), _jsx(CardDescription, { children: messages.dashboard.revenueTrendDescription })] }), _jsx(CardContent, { children: bookingsPending ? (_jsx(DashboardAreaChartSkeleton, {})) : !hasRevenueData ? (_jsx(DashboardEmptyState, { emptyState: resolvedEmptyStates.revenueTrend })) : (_jsx(ChartContainer, { config: revenueChartConfig, className: "h-[300px] w-full", children: _jsxs(AreaChart, { data: monthlyRevenue, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "fillRevenue", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "5%", stopColor: "var(--chart-1)", stopOpacity: 0.3 }), _jsx("stop", { offset: "95%", stopColor: "var(--chart-1)", stopOpacity: 0 })] }) }), _jsx(CartesianGrid, { vertical: false }), _jsx(XAxis, { dataKey: "month", tickLine: false, axisLine: false, tickMargin: 8 }), _jsx(YAxis, { tickLine: false, axisLine: false, tickMargin: 8, tickFormatter: (value) => `$${(value / 1000).toFixed(0)}k` }), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, { formatter: (value) => typeof value === "number"
|
|
124
124
|
? formatCurrency(value * 100, defaultCurrency)
|
|
125
|
-
: String(value) }) }), _jsx(Area, { type: "monotone", dataKey: "revenue", stroke: "
|
|
125
|
+
: String(value) }) }), _jsx(Area, { type: "monotone", dataKey: "revenue", stroke: "var(--chart-1)", fill: "url(#fillRevenue)", strokeWidth: 2 })] }) })) })] }), _jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: messages.dashboard.monthlyBookingsTitle }), _jsx(CardDescription, { children: messages.dashboard.monthlyBookingsDescription })] }), _jsx(CardContent, { children: bookingsPending ? (_jsx(DashboardBarChartSkeleton, {})) : !hasMonthlyBookingsData ? (_jsx(DashboardEmptyState, { emptyState: resolvedEmptyStates.monthlyBookings, compact: true })) : (_jsx(ChartContainer, { config: monthlyBookingsConfig, className: "h-[250px] w-full", children: _jsxs(BarChart, { data: monthlyBookings, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx(CartesianGrid, { vertical: false }), _jsx(XAxis, { dataKey: "month", tickLine: false, axisLine: false, tickMargin: 8 }), _jsx(YAxis, { tickLine: false, axisLine: false, tickMargin: 8, allowDecimals: false }), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, {}) }), _jsx(Bar, { dataKey: "count", fill: "var(--chart-1)", radius: [4, 4, 0, 0] })] }) })) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: messages.dashboard.bookingStatusTitle }), _jsx(CardDescription, { children: messages.dashboard.bookingStatusDescription })] }), _jsx(CardContent, { children: bookingsPending ? (_jsx(DashboardPieChartSkeleton, {})) : !hasBookingStatusData ? (_jsx(DashboardEmptyState, { emptyState: resolvedEmptyStates.bookingStatus })) : (_jsx(ChartContainer, { config: bookingStatusConfig, className: "mx-auto h-[300px] w-full", children: _jsxs(PieChart, { children: [_jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, { nameKey: "status", hideLabel: true }) }), _jsx(Pie, { data: localizedStatusBreakdown, dataKey: "count", nameKey: "status", cx: "50%", cy: "50%", innerRadius: 60, outerRadius: 100, paddingAngle: 2, children: localizedStatusBreakdown.map((entry) => (_jsx(Cell, { fill: entry.fill }, entry.status))) }), _jsx(ChartLegend, { content: _jsx(ChartLegendContent, { nameKey: "status" }) })] }) })) })] })] }), _jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsxs("div", { children: [_jsx(CardTitle, { children: messages.dashboard.upcomingDeparturesTitle }), _jsx(CardDescription, { children: messages.dashboard.upcomingDeparturesDescription })] }), _jsx(Link, { to: "/bookings", className: "text-sm text-primary hover:underline", children: messages.dashboard.viewAll })] }), _jsx(CardContent, { children: bookingsPending ? (_jsx(DashboardUpcomingListSkeleton, {})) : upcoming.length === 0 ? (_jsx(DashboardEmptyState, { emptyState: resolvedEmptyStates.upcomingDepartures, compact: true })) : (_jsx("div", { className: "space-y-3", children: upcoming.map((booking) => (_jsxs(Link, { to: "/bookings/$id", params: { id: booking.id }, className: "flex items-center justify-between rounded-lg border p-3 transition-colors hover:bg-muted/50", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-sm font-medium", children: booking.bookingNumber ?? booking.id.slice(0, 8) }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [booking.startDate
|
|
126
126
|
? new Date(booking.startDate).toLocaleDateString(resolvedLocale, {
|
|
127
127
|
month: "short",
|
|
128
128
|
day: "numeric",
|
|
@@ -101,27 +101,27 @@ export function getStatusColor(status) {
|
|
|
101
101
|
// with theme palette tokens like --chart-1..5, which are general
|
|
102
102
|
// chart palette slots and may be set to a monochromatic series.
|
|
103
103
|
const map = {
|
|
104
|
-
confirmed: "
|
|
105
|
-
completed: "
|
|
104
|
+
confirmed: "#86cb3c",
|
|
105
|
+
completed: "#6172f3",
|
|
106
106
|
in_progress: "hsl(47 96% 53%)",
|
|
107
|
-
draft: "
|
|
108
|
-
cancelled: "
|
|
107
|
+
draft: "#efefeb",
|
|
108
|
+
cancelled: "#ff4405",
|
|
109
109
|
};
|
|
110
|
-
return map[status] ?? "
|
|
110
|
+
return map[status] ?? "#efefeb";
|
|
111
111
|
}
|
|
112
112
|
export const revenueChartConfig = {
|
|
113
|
-
revenue: { label: "Revenue", color: "
|
|
114
|
-
bookings: { label: "Bookings", color: "
|
|
113
|
+
revenue: { label: "Revenue", color: "#ff4405" },
|
|
114
|
+
bookings: { label: "Bookings", color: "#86cb3c" },
|
|
115
115
|
};
|
|
116
116
|
export const bookingStatusConfig = {
|
|
117
|
-
confirmed: { label: "Confirmed", color: "
|
|
118
|
-
completed: { label: "Completed", color: "
|
|
117
|
+
confirmed: { label: "Confirmed", color: "#86cb3c" },
|
|
118
|
+
completed: { label: "Completed", color: "#6172f3" },
|
|
119
119
|
in_progress: { label: "In Progress", color: "hsl(47 96% 53%)" },
|
|
120
|
-
draft: { label: "Draft", color: "
|
|
121
|
-
cancelled: { label: "Cancelled", color: "
|
|
120
|
+
draft: { label: "Draft", color: "#efefeb" },
|
|
121
|
+
cancelled: { label: "Cancelled", color: "#ff4405" },
|
|
122
122
|
};
|
|
123
123
|
export const monthlyBookingsConfig = {
|
|
124
|
-
count: { label: "Bookings", color: "
|
|
124
|
+
count: { label: "Bookings", color: "#ff4405" },
|
|
125
125
|
};
|
|
126
126
|
export function buildMonthSeries() {
|
|
127
127
|
const now = new Date();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyant-travel/admin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.113.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"react": "^19.0.0",
|
|
182
182
|
"react-dom": "^19.0.0",
|
|
183
183
|
"recharts": "^3.0.0",
|
|
184
|
-
"@voyant-travel/ui": "^0.
|
|
184
|
+
"@voyant-travel/ui": "^0.107.0"
|
|
185
185
|
},
|
|
186
186
|
"dependencies": {
|
|
187
187
|
"@voyant-travel/i18n": "^0.106.1",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"recharts": "3.8.1",
|
|
201
201
|
"typescript": "^6.0.2",
|
|
202
202
|
"vitest": "^4.1.2",
|
|
203
|
-
"@voyant-travel/ui": "^0.
|
|
203
|
+
"@voyant-travel/ui": "^0.107.0",
|
|
204
204
|
"@voyant-travel/voyant-typescript-config": "^0.1.0"
|
|
205
205
|
},
|
|
206
206
|
"files": [
|