@voyant-travel/admin 0.111.5 → 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/app/extension-routes.d.ts +14 -0
- package/dist/app/extension-routes.d.ts.map +1 -1
- package/dist/app/extension-routes.js +27 -0
- package/dist/app/index.d.ts +1 -1
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- 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/dist/extensions.d.ts +20 -0
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +31 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/navigation/operator-navigation.d.ts +8 -0
- package/dist/navigation/operator-navigation.d.ts.map +1 -1
- package/dist/navigation/operator-navigation.js +25 -0
- package/package.json +4 -4
|
@@ -87,6 +87,20 @@ export interface AdminExtensionChildRoutesOptions {
|
|
|
87
87
|
* reachable via plain string navigation only.
|
|
88
88
|
*/
|
|
89
89
|
export declare function adminExtensionChildRoutes(extension: AdminExtension, parentRouteId: string, getParentRoute: () => AnyRoute, runtime: AdminExtensionRouteRuntime, options?: AdminExtensionChildRoutesOptions): Array<AnyRoute>;
|
|
90
|
+
/**
|
|
91
|
+
* Build code-based TOP-LEVEL routes for a set of admin extensions' route
|
|
92
|
+
* contributions, at runtime — for DISCOVERED (`src/admin/*`) deployment-local
|
|
93
|
+
* extensions the host's `voyant admin generate` never scanned. Mirrors the
|
|
94
|
+
* generated `admin.routes.generated.tsx` `createRoute` loop, then hand the
|
|
95
|
+
* result to {@link attachAdminExtensionRoutes} alongside the generated routes.
|
|
96
|
+
*
|
|
97
|
+
* Runtime-built routes carry NO typed-link contract (they are invisible to the
|
|
98
|
+
* host's generated typed-link maps), so they are reachable via plain string
|
|
99
|
+
* navigation only — the same trade-off as {@link adminExtensionChildRoutes}.
|
|
100
|
+
* Nested `children` are not built here (top-level pages only); a contribution
|
|
101
|
+
* needs a `page`, `component`, or `redirectTo` to count as implemented.
|
|
102
|
+
*/
|
|
103
|
+
export declare function buildAdminExtensionRoutes(extensions: ReadonlyArray<AdminExtension>, getParentRoute: () => AnyRoute, runtime: AdminExtensionRouteRuntime): Array<AnyRoute>;
|
|
90
104
|
/**
|
|
91
105
|
* Graft code-built extension routes under a file-based parent route
|
|
92
106
|
* (typically the workspace layout) and return the tree for `_addFileTypes`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-routes.d.ts","sourceRoot":"","sources":["../../src/app/extension-routes.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAKvB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD;;;;;;;;;;;;;;;;;GAiBG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,GAAG,CAAC,MAAM,iBAAiB,CAAC,CAAA;AAMtF;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,kBAAkB,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,KAAK,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,GAAG;IACpD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,OAAO,CAAA;IACxD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAA;IAC1C,cAAc,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;CAC9E;AA4ED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,0BAA0B,GAClC,0BAA0B,CAG5B;AAkCD,MAAM,WAAW,gCAAgC;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,QAAQ,EAC9B,OAAO,EAAE,0BAA0B,EACnC,OAAO,GAAE,gCAAqC,GAC7C,KAAK,CAAC,QAAQ,CAAC,CAsBjB;AAgBD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,SAAS,QAAQ,EACpE,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,GACvC,UAAU,CAaZ"}
|
|
1
|
+
{"version":3,"file":"extension-routes.d.ts","sourceRoot":"","sources":["../../src/app/extension-routes.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAKvB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD;;;;;;;;;;;;;;;;;GAiBG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,GAAG,CAAC,MAAM,iBAAiB,CAAC,CAAA;AAMtF;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,kBAAkB,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,KAAK,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,GAAG;IACpD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,MAAM,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,OAAO,CAAA;IACxD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAA;IAC1C,cAAc,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;CAC9E;AA4ED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,0BAA0B,GAClC,0BAA0B,CAG5B;AAkCD,MAAM,WAAW,gCAAgC;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,QAAQ,EAC9B,OAAO,EAAE,0BAA0B,EACnC,OAAO,GAAE,gCAAqC,GAC7C,KAAK,CAAC,QAAQ,CAAC,CAsBjB;AAgBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,EACzC,cAAc,EAAE,MAAM,QAAQ,EAC9B,OAAO,EAAE,0BAA0B,GAClC,KAAK,CAAC,QAAQ,CAAC,CAejB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,SAAS,QAAQ,EACpE,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,QAAQ,EACrB,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,GACvC,UAAU,CAaZ"}
|
|
@@ -132,6 +132,33 @@ function requireChildImplementation(extension, child) {
|
|
|
132
132
|
}
|
|
133
133
|
return child;
|
|
134
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Build code-based TOP-LEVEL routes for a set of admin extensions' route
|
|
137
|
+
* contributions, at runtime — for DISCOVERED (`src/admin/*`) deployment-local
|
|
138
|
+
* extensions the host's `voyant admin generate` never scanned. Mirrors the
|
|
139
|
+
* generated `admin.routes.generated.tsx` `createRoute` loop, then hand the
|
|
140
|
+
* result to {@link attachAdminExtensionRoutes} alongside the generated routes.
|
|
141
|
+
*
|
|
142
|
+
* Runtime-built routes carry NO typed-link contract (they are invisible to the
|
|
143
|
+
* host's generated typed-link maps), so they are reachable via plain string
|
|
144
|
+
* navigation only — the same trade-off as {@link adminExtensionChildRoutes}.
|
|
145
|
+
* Nested `children` are not built here (top-level pages only); a contribution
|
|
146
|
+
* needs a `page`, `component`, or `redirectTo` to count as implemented.
|
|
147
|
+
*/
|
|
148
|
+
export function buildAdminExtensionRoutes(extensions, getParentRoute, runtime) {
|
|
149
|
+
const routes = [];
|
|
150
|
+
for (const extension of extensions) {
|
|
151
|
+
for (const contribution of extension.routes ?? []) {
|
|
152
|
+
routes.push(createRoute({
|
|
153
|
+
getParentRoute,
|
|
154
|
+
path: contribution.path,
|
|
155
|
+
validateSearch: contribution.validateSearch,
|
|
156
|
+
...adminExtensionRouteOptions(extension, contribution.id, runtime),
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return routes;
|
|
161
|
+
}
|
|
135
162
|
/**
|
|
136
163
|
* Graft code-built extension routes under a file-based parent route
|
|
137
164
|
* (typically the workspace layout) and return the tree for `_addFileTypes`
|
package/dist/app/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { AdminExtensionChildRoutesOptions, AdminExtensionRouteLoaderArgs, AdminExtensionRouteOptions, AdminExtensionRouteRuntime, } from "./extension-routes.js";
|
|
2
|
-
export { adminExtensionChildRoutes, adminExtensionRouteOptions, attachAdminExtensionRoutes, } from "./extension-routes.js";
|
|
2
|
+
export { adminExtensionChildRoutes, adminExtensionRouteOptions, attachAdminExtensionRoutes, buildAdminExtensionRoutes, } from "./extension-routes.js";
|
|
3
3
|
export type { AdminRootErrorBoundaryProps, AdminRootHeadOptions } from "./root.js";
|
|
4
4
|
export { AdminRootErrorBoundary, AdminRootShell, adminRootHead } from "./root.js";
|
|
5
5
|
export type { AdminRouterContext, CreateAdminRouterOptions } from "./router.js";
|
package/dist/app/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACjF,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,qCAAqC,GACtC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,mBAAmB,EACnB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA"}
|
package/dist/app/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { adminExtensionChildRoutes, adminExtensionRouteOptions, attachAdminExtensionRoutes, } from "./extension-routes.js";
|
|
1
|
+
export { adminExtensionChildRoutes, adminExtensionRouteOptions, attachAdminExtensionRoutes, buildAdminExtensionRoutes, } from "./extension-routes.js";
|
|
2
2
|
export { AdminRootErrorBoundary, AdminRootShell, adminRootHead } from "./root.js";
|
|
3
3
|
export { AdminNotFound, AdminPendingFallback, createAdminQueryClient, createAdminRouter, } from "./router.js";
|
|
4
4
|
export { AdminRouterLink, AdminWorkspacePendingFallback, AdminWorkspaceShell, createAdminWorkspaceBeforeLoad, defaultAdminWorkspaceUser, } from "./workspace.js";
|
|
@@ -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/dist/extensions.d.ts
CHANGED
|
@@ -201,6 +201,26 @@ export interface AdminExtension {
|
|
|
201
201
|
widgets?: ReadonlyArray<AdminWidgetContribution>;
|
|
202
202
|
}
|
|
203
203
|
export declare function defineAdminExtension<T extends AdminExtension>(extension: T): T;
|
|
204
|
+
/**
|
|
205
|
+
* Discover deployment-local admin extensions from a Vite `import.meta.glob`
|
|
206
|
+
* (eager) of `src/admin/<name>/index.tsx` files — the admin-UI half of the
|
|
207
|
+
* "extend without forking" seam (mirrors `modulesFromGlob`/`extensionsFromGlob`
|
|
208
|
+
* on the API side). Each file's `default` export is an {@link AdminExtension}
|
|
209
|
+
* (wrap it with {@link defineAdminExtension}); append the result to the shell's
|
|
210
|
+
* extension registry so its nav, widgets, and routes auto-compose. Returns the
|
|
211
|
+
* extensions in stable (path-sorted) order; empty until a deployment adds one.
|
|
212
|
+
*
|
|
213
|
+
* Vite compiles `import.meta.glob` to static imports at build time, so this is
|
|
214
|
+
* Cloudflare-Workers-safe (no runtime module resolution).
|
|
215
|
+
*
|
|
216
|
+
* // src/lib/admin-extensions.tsx
|
|
217
|
+
* export const discoveredAdminExtensions = adminExtensionsFromGlob(
|
|
218
|
+
* import.meta.glob("../admin/*\/index.tsx", { eager: true }),
|
|
219
|
+
* )
|
|
220
|
+
*
|
|
221
|
+
* @throws if a matched file has no default export.
|
|
222
|
+
*/
|
|
223
|
+
export declare function adminExtensionsFromGlob(glob: Record<string, unknown>): AdminExtension[];
|
|
204
224
|
/**
|
|
205
225
|
* A route contribution whose `component` is guaranteed present, typed as a
|
|
206
226
|
* function component so it attaches directly to router `component:` options
|
package/dist/extensions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|
package/dist/extensions.js
CHANGED
|
@@ -13,6 +13,37 @@ export const adminWorkspaceHeaderActionsSlot = "workspace.header.actions";
|
|
|
13
13
|
export function defineAdminExtension(extension) {
|
|
14
14
|
return extension;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Discover deployment-local admin extensions from a Vite `import.meta.glob`
|
|
18
|
+
* (eager) of `src/admin/<name>/index.tsx` files — the admin-UI half of the
|
|
19
|
+
* "extend without forking" seam (mirrors `modulesFromGlob`/`extensionsFromGlob`
|
|
20
|
+
* on the API side). Each file's `default` export is an {@link AdminExtension}
|
|
21
|
+
* (wrap it with {@link defineAdminExtension}); append the result to the shell's
|
|
22
|
+
* extension registry so its nav, widgets, and routes auto-compose. Returns the
|
|
23
|
+
* extensions in stable (path-sorted) order; empty until a deployment adds one.
|
|
24
|
+
*
|
|
25
|
+
* Vite compiles `import.meta.glob` to static imports at build time, so this is
|
|
26
|
+
* Cloudflare-Workers-safe (no runtime module resolution).
|
|
27
|
+
*
|
|
28
|
+
* // src/lib/admin-extensions.tsx
|
|
29
|
+
* export const discoveredAdminExtensions = adminExtensionsFromGlob(
|
|
30
|
+
* import.meta.glob("../admin/*\/index.tsx", { eager: true }),
|
|
31
|
+
* )
|
|
32
|
+
*
|
|
33
|
+
* @throws if a matched file has no default export.
|
|
34
|
+
*/
|
|
35
|
+
export function adminExtensionsFromGlob(glob) {
|
|
36
|
+
return Object.entries(glob)
|
|
37
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
38
|
+
.map(([path, namespace]) => {
|
|
39
|
+
const declaration = namespace.default;
|
|
40
|
+
if (declaration == null) {
|
|
41
|
+
throw new Error(`[voyant-admin] deployment admin extension "${path}" has no default export — ` +
|
|
42
|
+
"add `export default defineAdminExtension(...)` to its index.tsx");
|
|
43
|
+
}
|
|
44
|
+
return declaration;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
16
47
|
/**
|
|
17
48
|
* Look up a route contribution by id and assert it carries a component.
|
|
18
49
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -34,11 +34,11 @@ export { TeamSettingsPage, type TeamSettingsPageApi, type TeamSettingsPageProps,
|
|
|
34
34
|
export type { DashboardEmptyAction, DashboardEmptyStateConfig, DashboardEmptyStateKey, DashboardPageProps, } from "./dashboard/dashboard-page.js";
|
|
35
35
|
export { type BookingsAggregates, bookingStatusConfig, buildDashboardSixMonthWindow, buildMonthSeries, DashboardApiError, type DashboardQueryClient, dashboardQueryKeys, type FinanceAggregates, formatCurrency, getDashboardBookingsAggregatesQueryOptions, getDashboardFinanceAggregatesQueryOptions, getDashboardProductsAggregatesQueryOptions, getDashboardSuppliersAggregatesQueryOptions, getStatusColor, monthlyBookingsConfig, type ProductsAggregates, pickPrimaryCurrency, revenueChartConfig, type SuppliersAggregates, } from "./dashboard/dashboard-query-options.js";
|
|
36
36
|
export { DashboardAreaChartSkeleton, DashboardBarChartSkeleton, DashboardKpiRowSkeleton, DashboardKpiSkeleton, DashboardOutstandingInvoicesSkeleton, DashboardPieChartSkeleton, DashboardSkeleton, DashboardUpcomingListSkeleton, } from "./dashboard/dashboard-skeleton.js";
|
|
37
|
-
export { type AdminExtension, type AdminNavigationContribution, type AdminRouteLoaderContext, type AdminRouteMessagesProvider, type AdminRouteMessagesProviderModule, type AdminRouteMessagesProviderProps, type AdminRoutePageComponent, type AdminRoutePageModule, type AdminRoutePageProps, type AdminRouteRuntime, type AdminUiRouteContribution, type AdminWidgetContribution, type AdminWidgetSlot, adminRoutePageModule, adminWorkspaceHeaderActionsSlot, type BindableAdminRoute, createAdminExtensionRegistry, defineAdminExtension, findAdminRouteContribution, type ImplementedAdminRoute, type ResolveAdminNavigationOptions, type ResolveAdminWidgetsOptions, requireAdminRoute, requireImplementedAdminRoute, resolveAdminNavigation, resolveAdminWidgets, } from "./extensions.js";
|
|
37
|
+
export { type AdminExtension, type AdminNavigationContribution, type AdminRouteLoaderContext, type AdminRouteMessagesProvider, type AdminRouteMessagesProviderModule, type AdminRouteMessagesProviderProps, type AdminRoutePageComponent, type AdminRoutePageModule, type AdminRoutePageProps, type AdminRouteRuntime, type AdminUiRouteContribution, type AdminWidgetContribution, type AdminWidgetSlot, adminExtensionsFromGlob, adminRoutePageModule, adminWorkspaceHeaderActionsSlot, type BindableAdminRoute, createAdminExtensionRegistry, defineAdminExtension, findAdminRouteContribution, type ImplementedAdminRoute, type ResolveAdminNavigationOptions, type ResolveAdminWidgetsOptions, requireAdminRoute, requireImplementedAdminRoute, resolveAdminNavigation, resolveAdminWidgets, } from "./extensions.js";
|
|
38
38
|
export { composeLocaleMessageDefinitions, type DeepPartial, formatMessage, type LocaleMessageDefinitions, type LocaleMessageOverrides, MessagesProvider, resolveLocaleMessages, useMessages, } from "./lib/i18n.js";
|
|
39
39
|
export { getDisplayName, getInitials } from "./lib/initials.js";
|
|
40
40
|
export { type AdminDestinationKey, type AdminDestinationNavigator, type AdminDestinationResolvers, type AdminDestinations, type AdminHrefResolver, type AdminNavigateOptions, AdminNavigationProvider, type AdminNavigationProviderProps, useAdminHref, useAdminNavigate, } from "./navigation/destinations.js";
|
|
41
|
-
export { type CreateOperatorAdminNavigationOptions, createOperatorAdminNavigation, type OperatorAdminNavigationIconName, type OperatorAdminNavigationIcons, } from "./navigation/operator-navigation.js";
|
|
41
|
+
export { type CreateOperatorAdminNavigationOptions, createOperatorAdminNavigation, defaultOperatorNavIcons, type OperatorAdminNavigationIconName, type OperatorAdminNavigationIcons, } from "./navigation/operator-navigation.js";
|
|
42
42
|
export { AdminExtensionsProvider, type AdminExtensionsProviderProps, useAdminExtensions, } from "./providers/admin-extensions.js";
|
|
43
43
|
export { AdminProvider, type AdminProviderProps } from "./providers/admin-provider.js";
|
|
44
44
|
export { DEFAULT_ADMIN_LOCALE, DEFAULT_ADMIN_LOCALES, type LocaleContextValue, LocaleProvider, type LocaleProviderProps, resolveAdminLocale, useLocale, } from "./providers/locale.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,sBAAsB,EAC3B,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,gBAAgB,GACjB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,GACvC,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,EACnC,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,4BAA4B,EAC5B,KAAK,iCAAiC,EACtC,qBAAqB,GACtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,0CAA0C,CAAA;AACjD,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,oCAAoC,CAAA;AAC3C,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,+BAA+B,CAAA;AAKtC,OAAO,EACL,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,cAAc,EACd,0CAA0C,EAC1C,yCAAyC,EACzC,0CAA0C,EAC1C,2CAA2C,EAC3C,cAAc,EACd,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,oCAAoC,EACpC,yBAAyB,EACzB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAC/B,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,+BAA+B,EAC/B,KAAK,WAAW,EAChB,aAAa,EACb,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,YAAY,EACZ,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,oCAAoC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,GAClC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,kBAAkB,GACnB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACtF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,cAAc,EACd,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,SAAS,GACV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,KAAK,2BAA2B,EAChC,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,2CAA2C,EAC3C,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,gCAAgC,EAChC,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EACL,KAAK,iBAAiB,EACtB,aAAa,EACb,KAAK,kBAAkB,EACvB,QAAQ,GACT,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,IAAI,EACJ,WAAW,EACX,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -37,11 +37,11 @@ export { TeamSettingsPage, } from "./components/team-settings-page.js";
|
|
|
37
37
|
// directly from "@voyant-travel/admin/dashboard/dashboard-page" instead.
|
|
38
38
|
export { bookingStatusConfig, buildDashboardSixMonthWindow, buildMonthSeries, DashboardApiError, dashboardQueryKeys, formatCurrency, getDashboardBookingsAggregatesQueryOptions, getDashboardFinanceAggregatesQueryOptions, getDashboardProductsAggregatesQueryOptions, getDashboardSuppliersAggregatesQueryOptions, getStatusColor, monthlyBookingsConfig, pickPrimaryCurrency, revenueChartConfig, } from "./dashboard/dashboard-query-options.js";
|
|
39
39
|
export { DashboardAreaChartSkeleton, DashboardBarChartSkeleton, DashboardKpiRowSkeleton, DashboardKpiSkeleton, DashboardOutstandingInvoicesSkeleton, DashboardPieChartSkeleton, DashboardSkeleton, DashboardUpcomingListSkeleton, } from "./dashboard/dashboard-skeleton.js";
|
|
40
|
-
export { adminRoutePageModule, adminWorkspaceHeaderActionsSlot, createAdminExtensionRegistry, defineAdminExtension, findAdminRouteContribution, requireAdminRoute, requireImplementedAdminRoute, resolveAdminNavigation, resolveAdminWidgets, } from "./extensions.js";
|
|
40
|
+
export { adminExtensionsFromGlob, adminRoutePageModule, adminWorkspaceHeaderActionsSlot, createAdminExtensionRegistry, defineAdminExtension, findAdminRouteContribution, requireAdminRoute, requireImplementedAdminRoute, resolveAdminNavigation, resolveAdminWidgets, } from "./extensions.js";
|
|
41
41
|
export { composeLocaleMessageDefinitions, formatMessage, MessagesProvider, resolveLocaleMessages, useMessages, } from "./lib/i18n.js";
|
|
42
42
|
export { getDisplayName, getInitials } from "./lib/initials.js";
|
|
43
43
|
export { AdminNavigationProvider, useAdminHref, useAdminNavigate, } from "./navigation/destinations.js";
|
|
44
|
-
export { createOperatorAdminNavigation, } from "./navigation/operator-navigation.js";
|
|
44
|
+
export { createOperatorAdminNavigation, defaultOperatorNavIcons, } from "./navigation/operator-navigation.js";
|
|
45
45
|
export { AdminExtensionsProvider, useAdminExtensions, } from "./providers/admin-extensions.js";
|
|
46
46
|
export { AdminProvider } from "./providers/admin-provider.js";
|
|
47
47
|
export { DEFAULT_ADMIN_LOCALE, DEFAULT_ADMIN_LOCALES, LocaleProvider, resolveAdminLocale, useLocale, } from "./providers/locale.js";
|
|
@@ -2,6 +2,14 @@ import type { OperatorAdminMessages } from "../providers/operator-admin-messages
|
|
|
2
2
|
import type { NavItem } from "../types.js";
|
|
3
3
|
export type OperatorAdminNavigationIconName = "availability" | "bookings" | "catalog" | "channelSync" | "dashboard" | "finance" | "flights" | "legal" | "notifications" | "organizations" | "people" | "products" | "resources" | "settings" | "suppliers";
|
|
4
4
|
export type OperatorAdminNavigationIcons = Partial<Record<OperatorAdminNavigationIconName, NavItem["icon"]>>;
|
|
5
|
+
/**
|
|
6
|
+
* The standard operator nav icon set, shipped by the framework so deployments
|
|
7
|
+
* don't hand-wire lucide imports. Use directly (`icons={defaultOperatorNavIcons}`)
|
|
8
|
+
* or spread to override a single entry
|
|
9
|
+
* (`icons={{ ...defaultOperatorNavIcons, finance: MyIcon }}`). A custom domain
|
|
10
|
+
* supplies its own icon via the override; the standard 15 come from here.
|
|
11
|
+
*/
|
|
12
|
+
export declare const defaultOperatorNavIcons: Record<OperatorAdminNavigationIconName, NavItem["icon"]>;
|
|
5
13
|
export interface CreateOperatorAdminNavigationOptions {
|
|
6
14
|
messages: OperatorAdminMessages["nav"];
|
|
7
15
|
icons?: OperatorAdminNavigationIcons;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-navigation.d.ts","sourceRoot":"","sources":["../../src/navigation/operator-navigation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"operator-navigation.d.ts","sourceRoot":"","sources":["../../src/navigation/operator-navigation.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AACpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,+BAA+B,GACvC,cAAc,GACd,UAAU,GACV,SAAS,GACT,aAAa,GACb,WAAW,GACX,SAAS,GACT,SAAS,GACT,OAAO,GACP,eAAe,GACf,eAAe,GACf,QAAQ,GACR,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,CAAA;AAEf,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,MAAM,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CACzD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,CAAC,CAgB5F,CAAA;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAA;IACtC,KAAK,CAAC,EAAE,4BAA4B,CAAA;CACrC;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,KAAU,EACV,QAAQ,GACT,EAAE,oCAAoC,GAAG,OAAO,EAAE,CA8LlD"}
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
import { Building, Building2, CalendarCheck, CalendarDays, DollarSign, LayoutDashboard, Library, Mail, Package, Plane, Radio, Scale, Settings, Users, Wrench, } from "lucide-react";
|
|
2
|
+
/**
|
|
3
|
+
* The standard operator nav icon set, shipped by the framework so deployments
|
|
4
|
+
* don't hand-wire lucide imports. Use directly (`icons={defaultOperatorNavIcons}`)
|
|
5
|
+
* or spread to override a single entry
|
|
6
|
+
* (`icons={{ ...defaultOperatorNavIcons, finance: MyIcon }}`). A custom domain
|
|
7
|
+
* supplies its own icon via the override; the standard 15 come from here.
|
|
8
|
+
*/
|
|
9
|
+
export const defaultOperatorNavIcons = {
|
|
10
|
+
availability: CalendarDays,
|
|
11
|
+
bookings: CalendarCheck,
|
|
12
|
+
catalog: Library,
|
|
13
|
+
channelSync: Radio,
|
|
14
|
+
dashboard: LayoutDashboard,
|
|
15
|
+
finance: DollarSign,
|
|
16
|
+
flights: Plane,
|
|
17
|
+
legal: Scale,
|
|
18
|
+
notifications: Mail,
|
|
19
|
+
organizations: Building,
|
|
20
|
+
people: Users,
|
|
21
|
+
products: Package,
|
|
22
|
+
resources: Wrench,
|
|
23
|
+
settings: Settings,
|
|
24
|
+
suppliers: Building2,
|
|
25
|
+
};
|
|
1
26
|
export function createOperatorAdminNavigation({ icons = {}, messages, }) {
|
|
2
27
|
return [
|
|
3
28
|
{
|
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,8 +200,8 @@
|
|
|
200
200
|
"recharts": "3.8.1",
|
|
201
201
|
"typescript": "^6.0.2",
|
|
202
202
|
"vitest": "^4.1.2",
|
|
203
|
-
"@voyant-travel/
|
|
204
|
-
"@voyant-travel/
|
|
203
|
+
"@voyant-travel/ui": "^0.107.0",
|
|
204
|
+
"@voyant-travel/voyant-typescript-config": "^0.1.0"
|
|
205
205
|
},
|
|
206
206
|
"files": [
|
|
207
207
|
"dist",
|