@voyant-travel/admin 0.111.5 → 0.112.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.
@@ -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`
@@ -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";
@@ -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,GAC3B,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"}
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";
@@ -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
@@ -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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"}
@@ -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";
@@ -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":"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"}
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":"AAAA,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,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
+ {"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.111.5",
3
+ "version": "0.112.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -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/voyant-typescript-config": "^0.1.0",
204
- "@voyant-travel/ui": "^0.106.2"
203
+ "@voyant-travel/ui": "^0.106.2",
204
+ "@voyant-travel/voyant-typescript-config": "^0.1.0"
205
205
  },
206
206
  "files": [
207
207
  "dist",