@voyant-travel/admin 0.111.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/LICENSE +201 -0
- package/README.md +285 -0
- package/dist/app/extension-routes.d.ts +99 -0
- package/dist/app/extension-routes.d.ts.map +1 -0
- package/dist/app/extension-routes.js +134 -0
- package/dist/app/index.d.ts +9 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +4 -0
- package/dist/app/root.d.ts +47 -0
- package/dist/app/root.d.ts.map +1 -0
- package/dist/app/root.js +55 -0
- package/dist/app/router.d.ts +30 -0
- package/dist/app/router.d.ts.map +1 -0
- package/dist/app/router.js +51 -0
- package/dist/app/workspace.d.ts +84 -0
- package/dist/app/workspace.d.ts.map +1 -0
- package/dist/app/workspace.js +87 -0
- package/dist/components/admin-breadcrumbs.d.ts +18 -0
- package/dist/components/admin-breadcrumbs.d.ts.map +1 -0
- package/dist/components/admin-breadcrumbs.js +84 -0
- package/dist/components/admin-nav-group.d.ts +11 -0
- package/dist/components/admin-nav-group.d.ts.map +1 -0
- package/dist/components/admin-nav-group.js +49 -0
- package/dist/components/admin-nav-link.d.ts +10 -0
- package/dist/components/admin-nav-link.d.ts.map +1 -0
- package/dist/components/admin-nav-link.js +5 -0
- package/dist/components/admin-page-head.d.ts +17 -0
- package/dist/components/admin-page-head.d.ts.map +1 -0
- package/dist/components/admin-page-head.js +107 -0
- package/dist/components/admin-widget-slot.d.ts +8 -0
- package/dist/components/admin-widget-slot.d.ts.map +1 -0
- package/dist/components/admin-widget-slot.js +19 -0
- package/dist/components/brand/voyant-mark.d.ts +3 -0
- package/dist/components/brand/voyant-mark.d.ts.map +1 -0
- package/dist/components/brand/voyant-mark.js +4 -0
- package/dist/components/brand/voyant-wordmark.d.ts +3 -0
- package/dist/components/brand/voyant-wordmark.d.ts.map +1 -0
- package/dist/components/brand/voyant-wordmark.js +4 -0
- package/dist/components/operator-admin-bootstrap-gate.d.ts +26 -0
- package/dist/components/operator-admin-bootstrap-gate.d.ts.map +1 -0
- package/dist/components/operator-admin-bootstrap-gate.js +22 -0
- package/dist/components/operator-admin-page-shell.d.ts +13 -0
- package/dist/components/operator-admin-page-shell.d.ts.map +1 -0
- package/dist/components/operator-admin-page-shell.js +6 -0
- package/dist/components/operator-admin-sidebar.d.ts +57 -0
- package/dist/components/operator-admin-sidebar.d.ts.map +1 -0
- package/dist/components/operator-admin-sidebar.js +104 -0
- package/dist/components/operator-admin-user-menu.d.ts +10 -0
- package/dist/components/operator-admin-user-menu.d.ts.map +1 -0
- package/dist/components/operator-admin-user-menu.js +19 -0
- package/dist/components/team-settings-page.d.ts +10 -0
- package/dist/components/team-settings-page.d.ts.map +1 -0
- package/dist/components/team-settings-page.js +149 -0
- package/dist/dashboard/dashboard-empty-states.d.ts +67 -0
- package/dist/dashboard/dashboard-empty-states.d.ts.map +1 -0
- package/dist/dashboard/dashboard-empty-states.js +65 -0
- package/dist/dashboard/dashboard-kpi-card.d.ts +13 -0
- package/dist/dashboard/dashboard-kpi-card.d.ts.map +1 -0
- package/dist/dashboard/dashboard-kpi-card.js +12 -0
- package/dist/dashboard/dashboard-page.d.ts +7 -0
- package/dist/dashboard/dashboard-page.d.ts.map +1 -0
- package/dist/dashboard/dashboard-page.js +150 -0
- package/dist/dashboard/dashboard-query-options.d.ts +224 -0
- package/dist/dashboard/dashboard-query-options.d.ts.map +1 -0
- package/dist/dashboard/dashboard-query-options.js +153 -0
- package/dist/dashboard/dashboard-skeleton.d.ts +13 -0
- package/dist/dashboard/dashboard-skeleton.d.ts.map +1 -0
- package/dist/dashboard/dashboard-skeleton.js +28 -0
- package/dist/extensions.d.ts +254 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +139 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/lib/i18n.d.ts +2 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +1 -0
- package/dist/lib/initials.d.ts +24 -0
- package/dist/lib/initials.d.ts.map +1 -0
- package/dist/lib/initials.js +45 -0
- package/dist/navigation/destinations.d.ts +83 -0
- package/dist/navigation/destinations.d.ts.map +1 -0
- package/dist/navigation/destinations.js +65 -0
- package/dist/navigation/operator-navigation.d.ts +10 -0
- package/dist/navigation/operator-navigation.d.ts.map +1 -0
- package/dist/navigation/operator-navigation.js +191 -0
- package/dist/providers/admin-extensions.d.ts +9 -0
- package/dist/providers/admin-extensions.d.ts.map +1 -0
- package/dist/providers/admin-extensions.js +10 -0
- package/dist/providers/admin-provider.d.ts +53 -0
- package/dist/providers/admin-provider.d.ts.map +1 -0
- package/dist/providers/admin-provider.js +26 -0
- package/dist/providers/locale-preferences.d.ts +12 -0
- package/dist/providers/locale-preferences.d.ts.map +1 -0
- package/dist/providers/locale-preferences.js +32 -0
- package/dist/providers/locale.d.ts +23 -0
- package/dist/providers/locale.d.ts.map +1 -0
- package/dist/providers/locale.js +98 -0
- package/dist/providers/operator-admin-messages.d.ts +14 -0
- package/dist/providers/operator-admin-messages.d.ts.map +1 -0
- package/dist/providers/operator-admin-messages.js +16 -0
- package/dist/providers/operator-admin-shell.d.ts +35 -0
- package/dist/providers/operator-admin-shell.d.ts.map +1 -0
- package/dist/providers/operator-admin-shell.js +20 -0
- package/dist/providers/query-client.d.ts +19 -0
- package/dist/providers/query-client.d.ts.map +1 -0
- package/dist/providers/query-client.js +34 -0
- package/dist/providers/theme.d.ts +29 -0
- package/dist/providers/theme.d.ts.map +1 -0
- package/dist/providers/theme.js +63 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/package.json +222 -0
- package/src/styles.css +11 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type LocaleMessageOverrides, type OperatorAdminMessages } from "@voyant-travel/i18n";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
export type { OperatorAdminMessages };
|
|
4
|
+
export type OperatorAdminMessageOverrides = LocaleMessageOverrides<OperatorAdminMessages>;
|
|
5
|
+
export declare function getOperatorAdminMessageOverridesFromUiPrefs(uiPrefs: unknown): OperatorAdminMessageOverrides | undefined;
|
|
6
|
+
export declare function OperatorAdminMessagesProvider({ children, overrides, }: {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
overrides?: OperatorAdminMessageOverrides | null;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const useOperatorAdminI18n: () => import("@voyant-travel/i18n").PackageI18nValue<OperatorAdminMessages>;
|
|
11
|
+
export declare const useOptionalOperatorAdminI18n: () => import("@voyant-travel/i18n").PackageI18nValue<OperatorAdminMessages> | undefined;
|
|
12
|
+
export declare const useOperatorAdminMessages: () => OperatorAdminMessages;
|
|
13
|
+
export declare const useOptionalOperatorAdminMessages: () => OperatorAdminMessages | undefined;
|
|
14
|
+
//# sourceMappingURL=operator-admin-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator-admin-messages.d.ts","sourceRoot":"","sources":["../../src/providers/operator-admin-messages.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAE3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,YAAY,EAAE,qBAAqB,EAAE,CAAA;AAErC,MAAM,MAAM,6BAA6B,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,CAAA;AAKzF,wBAAgB,2CAA2C,CACzD,OAAO,EAAE,OAAO,GACf,6BAA6B,GAAG,SAAS,CAE3C;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAA;CACjD,2CAaA;AAED,eAAO,MAAM,oBAAoB,6EAAuC,CAAA;AACxE,eAAO,MAAM,4BAA4B,yFAA+C,CAAA;AACxF,eAAO,MAAM,wBAAwB,6BAA2C,CAAA;AAChF,eAAO,MAAM,gCAAgC,yCAAmD,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createPackageMessagesContext, getLocaleMessageOverridesFromUiPrefs, operatorAdminMessageDefinitions, } from "@voyant-travel/i18n";
|
|
4
|
+
import { DEFAULT_ADMIN_LOCALE, useLocale } from "./locale.js";
|
|
5
|
+
const operatorAdminMessagesContext = createPackageMessagesContext("OperatorAdminMessages");
|
|
6
|
+
export function getOperatorAdminMessageOverridesFromUiPrefs(uiPrefs) {
|
|
7
|
+
return getLocaleMessageOverridesFromUiPrefs(uiPrefs);
|
|
8
|
+
}
|
|
9
|
+
export function OperatorAdminMessagesProvider({ children, overrides, }) {
|
|
10
|
+
const { resolvedLocale } = useLocale();
|
|
11
|
+
return (_jsx(operatorAdminMessagesContext.ResolvedMessagesProvider, { definitions: operatorAdminMessageDefinitions, fallbackLocale: DEFAULT_ADMIN_LOCALE, locale: resolvedLocale, overrides: overrides, children: children }));
|
|
12
|
+
}
|
|
13
|
+
export const useOperatorAdminI18n = operatorAdminMessagesContext.useI18n;
|
|
14
|
+
export const useOptionalOperatorAdminI18n = operatorAdminMessagesContext.useOptionalI18n;
|
|
15
|
+
export const useOperatorAdminMessages = operatorAdminMessagesContext.useMessages;
|
|
16
|
+
export const useOptionalOperatorAdminMessages = operatorAdminMessagesContext.useOptionalMessages;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type VoyantReactProviderProps } from "@voyant-travel/react";
|
|
2
|
+
import type * as React from "react";
|
|
3
|
+
import { type AdminProviderProps } from "./admin-provider.js";
|
|
4
|
+
import { type OperatorAdminMessageOverrides } from "./operator-admin-messages.js";
|
|
5
|
+
export type AdminChildProvider = React.ComponentType<React.PropsWithChildren<Record<string, unknown>>>;
|
|
6
|
+
export interface AdminDomainMessagesProviderProps {
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
locale: string | null | undefined;
|
|
9
|
+
}
|
|
10
|
+
export type AdminDomainMessagesProvider = React.ComponentType<AdminDomainMessagesProviderProps & Record<string, unknown>>;
|
|
11
|
+
export interface AdminProviderSequenceProps {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
providers?: ReadonlyArray<AdminChildProvider>;
|
|
14
|
+
}
|
|
15
|
+
export declare function AdminProviderSequence({ children, providers }: AdminProviderSequenceProps): React.ReactNode;
|
|
16
|
+
export interface AdminDomainMessagesProviderStackProps {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
providers?: ReadonlyArray<AdminDomainMessagesProvider>;
|
|
19
|
+
}
|
|
20
|
+
export declare function AdminDomainMessagesProviderStack({ children, providers, }: AdminDomainMessagesProviderStackProps): React.ReactNode;
|
|
21
|
+
export interface OperatorAdminShellProviderProps extends Omit<AdminProviderProps, "children">, Pick<VoyantReactProviderProps, "baseUrl" | "fetcher"> {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* App-level providers that do not need locale props, such as tooltip or
|
|
25
|
+
* feature-flag providers.
|
|
26
|
+
*/
|
|
27
|
+
providers?: ReadonlyArray<AdminChildProvider>;
|
|
28
|
+
/**
|
|
29
|
+
* Domain UI i18n providers that accept `{ locale, children }`.
|
|
30
|
+
*/
|
|
31
|
+
domainMessageProviders?: ReadonlyArray<AdminDomainMessagesProvider>;
|
|
32
|
+
messageOverrides?: OperatorAdminMessageOverrides | null;
|
|
33
|
+
}
|
|
34
|
+
export declare function OperatorAdminShellProvider({ baseUrl, children, domainMessageProviders, fetcher, messageOverrides, providers, ...adminProviderProps }: OperatorAdminShellProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=operator-admin-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator-admin-shell.d.ts","sourceRoot":"","sources":["../../src/providers/operator-admin-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AACzF,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EACL,KAAK,6BAA6B,EAEnC,MAAM,8BAA8B,CAAA;AAErC,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAClD,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACjD,CAAA;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAClC;AAED,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAC3D,gCAAgC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC3D,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;CAC9C;AAOD,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,0BAA0B,mBAK7F;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAA;CACvD;AAED,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,SAAc,GACf,EAAE,qCAAqC,mBAWvC;AAED,MAAM,WAAW,+BACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAC1C,IAAI,CAAC,wBAAwB,EAAE,SAAS,GAAG,SAAS,CAAC;IACvD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC7C;;OAEG;IACH,sBAAsB,CAAC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAA;IACnE,gBAAgB,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAA;CACxD;AAED,wBAAgB,0BAA0B,CAAC,EACzC,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,OAAO,EACP,gBAAgB,EAChB,SAAS,EACT,GAAG,kBAAkB,EACtB,EAAE,+BAA+B,2CAcjC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { VoyantReactProvider } from "@voyant-travel/react";
|
|
4
|
+
import { AdminProvider } from "./admin-provider.js";
|
|
5
|
+
import { useLocale } from "./locale.js";
|
|
6
|
+
import { OperatorAdminMessagesProvider, } from "./operator-admin-messages.js";
|
|
7
|
+
function getProviderKey(Provider) {
|
|
8
|
+
const namedProvider = Provider;
|
|
9
|
+
return namedProvider.displayName ?? namedProvider.name;
|
|
10
|
+
}
|
|
11
|
+
export function AdminProviderSequence({ children, providers = [] }) {
|
|
12
|
+
return providers.reduceRight((content, Provider) => _jsx(Provider, { children: content }, getProviderKey(Provider)), children);
|
|
13
|
+
}
|
|
14
|
+
export function AdminDomainMessagesProviderStack({ children, providers = [], }) {
|
|
15
|
+
const { resolvedLocale } = useLocale();
|
|
16
|
+
return providers.reduceRight((content, Provider) => (_jsx(Provider, { locale: resolvedLocale, children: content }, getProviderKey(Provider))), children);
|
|
17
|
+
}
|
|
18
|
+
export function OperatorAdminShellProvider({ baseUrl, children, domainMessageProviders, fetcher, messageOverrides, providers, ...adminProviderProps }) {
|
|
19
|
+
return (_jsx(AdminProvider, { ...adminProviderProps, children: _jsx(VoyantReactProvider, { baseUrl: baseUrl, fetcher: fetcher, children: _jsx(OperatorAdminMessagesProvider, { overrides: messageOverrides, children: _jsx(AdminProviderSequence, { providers: providers, children: _jsx(AdminDomainMessagesProviderStack, { providers: domainMessageProviders, children: children }) }) }) }) }));
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a React Query client with Voyant's admin-dashboard defaults.
|
|
4
|
+
*
|
|
5
|
+
* - `refetchOnWindowFocus: false` — dashboards typically don't need to refetch
|
|
6
|
+
* on every tab-switch; revalidation is explicit via invalidateQueries.
|
|
7
|
+
* - `retry: 1` on queries, `retry: 0` on mutations — avoid hammering APIs on
|
|
8
|
+
* transient failures but don't retry destructive mutations silently.
|
|
9
|
+
*
|
|
10
|
+
* Callers can override any of these by passing a `defaultOptions` object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const client = makeQueryClient()
|
|
14
|
+
* const clientWithLongStaleTime = makeQueryClient({
|
|
15
|
+
* defaultOptions: { queries: { staleTime: 60_000 } },
|
|
16
|
+
* })
|
|
17
|
+
*/
|
|
18
|
+
export declare function makeQueryClient(config?: QueryClientConfig): QueryClient;
|
|
19
|
+
//# sourceMappingURL=query-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-client.d.ts","sourceRoot":"","sources":["../../src/providers/query-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAgBvE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a React Query client with Voyant's admin-dashboard defaults.
|
|
4
|
+
*
|
|
5
|
+
* - `refetchOnWindowFocus: false` — dashboards typically don't need to refetch
|
|
6
|
+
* on every tab-switch; revalidation is explicit via invalidateQueries.
|
|
7
|
+
* - `retry: 1` on queries, `retry: 0` on mutations — avoid hammering APIs on
|
|
8
|
+
* transient failures but don't retry destructive mutations silently.
|
|
9
|
+
*
|
|
10
|
+
* Callers can override any of these by passing a `defaultOptions` object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const client = makeQueryClient()
|
|
14
|
+
* const clientWithLongStaleTime = makeQueryClient({
|
|
15
|
+
* defaultOptions: { queries: { staleTime: 60_000 } },
|
|
16
|
+
* })
|
|
17
|
+
*/
|
|
18
|
+
export function makeQueryClient(config) {
|
|
19
|
+
return new QueryClient({
|
|
20
|
+
...config,
|
|
21
|
+
defaultOptions: {
|
|
22
|
+
...config?.defaultOptions,
|
|
23
|
+
queries: {
|
|
24
|
+
refetchOnWindowFocus: false,
|
|
25
|
+
retry: 1,
|
|
26
|
+
...config?.defaultOptions?.queries,
|
|
27
|
+
},
|
|
28
|
+
mutations: {
|
|
29
|
+
retry: 0,
|
|
30
|
+
...config?.defaultOptions?.mutations,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { ThemeMode } from "../types.js";
|
|
3
|
+
export interface ThemeContextValue {
|
|
4
|
+
theme: ThemeMode;
|
|
5
|
+
setTheme: (theme: ThemeMode) => void;
|
|
6
|
+
resolvedTheme: "light" | "dark";
|
|
7
|
+
}
|
|
8
|
+
export interface ThemeProviderProps {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/** Initial theme when no persisted value exists. Defaults to "system". */
|
|
11
|
+
defaultTheme?: ThemeMode;
|
|
12
|
+
/**
|
|
13
|
+
* localStorage key used to persist the user's selection. Defaults to "theme".
|
|
14
|
+
* Set to `null` to disable persistence (useful for tests).
|
|
15
|
+
*/
|
|
16
|
+
storageKey?: string | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lightweight theme provider. Mirrors next-themes semantics but has zero deps:
|
|
20
|
+
* stores selection in localStorage, toggles the `light`/`dark` class on
|
|
21
|
+
* `document.documentElement`, and honors `prefers-color-scheme` when mode
|
|
22
|
+
* is "system".
|
|
23
|
+
*/
|
|
24
|
+
export declare function ThemeProvider({ children, defaultTheme, storageKey, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
/**
|
|
26
|
+
* Reads the current theme. Throws if used outside `<ThemeProvider>`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function useTheme(): ThemeContextValue;
|
|
29
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/providers/theme.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAgD,MAAM,OAAO,CAAA;AAEnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAA;CAChC;AASD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAA;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAAuB,EACvB,UAAoB,GACrB,EAAE,kBAAkB,2CA4CpB;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useCallback, useContext, useEffect, useState } from "react";
|
|
4
|
+
const ThemeContext = createContext(undefined);
|
|
5
|
+
function getSystemTheme() {
|
|
6
|
+
if (typeof window === "undefined")
|
|
7
|
+
return "light";
|
|
8
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Lightweight theme provider. Mirrors next-themes semantics but has zero deps:
|
|
12
|
+
* stores selection in localStorage, toggles the `light`/`dark` class on
|
|
13
|
+
* `document.documentElement`, and honors `prefers-color-scheme` when mode
|
|
14
|
+
* is "system".
|
|
15
|
+
*/
|
|
16
|
+
export function ThemeProvider({ children, defaultTheme = "system", storageKey = "theme", }) {
|
|
17
|
+
const [theme, setThemeState] = useState(() => {
|
|
18
|
+
if (typeof window === "undefined")
|
|
19
|
+
return defaultTheme;
|
|
20
|
+
if (storageKey === null)
|
|
21
|
+
return defaultTheme;
|
|
22
|
+
return localStorage.getItem(storageKey) ?? defaultTheme;
|
|
23
|
+
});
|
|
24
|
+
const resolvedTheme = theme === "system" ? getSystemTheme() : theme;
|
|
25
|
+
const setTheme = useCallback((newTheme) => {
|
|
26
|
+
setThemeState(newTheme);
|
|
27
|
+
if (typeof window !== "undefined" && storageKey !== null) {
|
|
28
|
+
localStorage.setItem(storageKey, newTheme);
|
|
29
|
+
}
|
|
30
|
+
}, [storageKey]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (typeof document === "undefined")
|
|
33
|
+
return;
|
|
34
|
+
const root = document.documentElement;
|
|
35
|
+
root.classList.remove("light", "dark");
|
|
36
|
+
root.classList.add(resolvedTheme);
|
|
37
|
+
}, [resolvedTheme]);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (theme !== "system")
|
|
40
|
+
return;
|
|
41
|
+
if (typeof window === "undefined")
|
|
42
|
+
return;
|
|
43
|
+
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
44
|
+
const handler = () => {
|
|
45
|
+
const root = document.documentElement;
|
|
46
|
+
root.classList.remove("light", "dark");
|
|
47
|
+
root.classList.add(getSystemTheme());
|
|
48
|
+
};
|
|
49
|
+
mq.addEventListener("change", handler);
|
|
50
|
+
return () => mq.removeEventListener("change", handler);
|
|
51
|
+
}, [theme]);
|
|
52
|
+
return (_jsx(ThemeContext.Provider, { value: { theme, setTheme, resolvedTheme }, children: children }));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reads the current theme. Throws if used outside `<ThemeProvider>`.
|
|
56
|
+
*/
|
|
57
|
+
export function useTheme() {
|
|
58
|
+
const ctx = useContext(ThemeContext);
|
|
59
|
+
if (!ctx) {
|
|
60
|
+
throw new Error("useTheme must be used within <ThemeProvider>");
|
|
61
|
+
}
|
|
62
|
+
return ctx;
|
|
63
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal user shape the admin shell needs to render its user menu.
|
|
4
|
+
* Starters can pass their own richer user object — only these fields matter.
|
|
5
|
+
*/
|
|
6
|
+
export interface AdminUser {
|
|
7
|
+
id?: string;
|
|
8
|
+
email: string;
|
|
9
|
+
firstName?: string | null;
|
|
10
|
+
lastName?: string | null;
|
|
11
|
+
locale?: string | null;
|
|
12
|
+
timeZone?: string | null;
|
|
13
|
+
/** Legacy combined name field. `firstName`/`lastName` take precedence. */
|
|
14
|
+
name?: string;
|
|
15
|
+
avatar?: string | null;
|
|
16
|
+
}
|
|
17
|
+
export declare const COMING_SOON: "COMING_SOON";
|
|
18
|
+
export declare const BETA: "BETA";
|
|
19
|
+
export type NavItemStatus = typeof COMING_SOON | typeof BETA;
|
|
20
|
+
/**
|
|
21
|
+
* Nav tree item. Icons are passed as React components (from `lucide-react`
|
|
22
|
+
* or elsewhere) so starters control the icon set.
|
|
23
|
+
*/
|
|
24
|
+
export interface NavItem {
|
|
25
|
+
/** Stable identifier for extension merging and UI keys. */
|
|
26
|
+
id?: string;
|
|
27
|
+
title: string;
|
|
28
|
+
url: string;
|
|
29
|
+
icon?: React.ComponentType<{
|
|
30
|
+
className?: string;
|
|
31
|
+
}>;
|
|
32
|
+
status?: NavItemStatus;
|
|
33
|
+
/** Link target attribute for external URLs. Defaults to "_self". */
|
|
34
|
+
target?: "_self" | "_blank";
|
|
35
|
+
/** Collapsible sub-items. */
|
|
36
|
+
items?: ReadonlyArray<NavSubItem>;
|
|
37
|
+
}
|
|
38
|
+
export interface NavSubItem {
|
|
39
|
+
id?: string;
|
|
40
|
+
title: string;
|
|
41
|
+
url: string;
|
|
42
|
+
icon?: React.ComponentType<{
|
|
43
|
+
className?: string;
|
|
44
|
+
}>;
|
|
45
|
+
status?: NavItemStatus;
|
|
46
|
+
target?: "_self" | "_blank";
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Actions the admin shell delegates back to the starter's auth layer.
|
|
50
|
+
* Starters wire these up to their chosen auth stack (Better Auth, etc).
|
|
51
|
+
*/
|
|
52
|
+
export interface AuthActions {
|
|
53
|
+
/** Fired when the user clicks "Log out" in the user menu. */
|
|
54
|
+
signOut: () => void | Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Theme mode. "system" follows `prefers-color-scheme`.
|
|
58
|
+
*/
|
|
59
|
+
export type ThemeMode = "light" | "dark" | "system";
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAA;AACjD,eAAO,MAAM,IAAI,EAAG,MAAe,CAAA;AACnC,MAAM,MAAM,aAAa,GAAG,OAAO,WAAW,GAAG,OAAO,IAAI,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,2DAA2D;IAC3D,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC3B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA"}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@voyant-travel/admin",
|
|
3
|
+
"version": "0.111.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./styles.css": {
|
|
14
|
+
"default": "./src/styles.css"
|
|
15
|
+
},
|
|
16
|
+
"./app": {
|
|
17
|
+
"types": "./dist/app/index.d.ts",
|
|
18
|
+
"import": "./dist/app/index.js",
|
|
19
|
+
"default": "./dist/app/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./app/root": {
|
|
22
|
+
"types": "./dist/app/root.d.ts",
|
|
23
|
+
"import": "./dist/app/root.js",
|
|
24
|
+
"default": "./dist/app/root.js"
|
|
25
|
+
},
|
|
26
|
+
"./app/router": {
|
|
27
|
+
"types": "./dist/app/router.d.ts",
|
|
28
|
+
"import": "./dist/app/router.js",
|
|
29
|
+
"default": "./dist/app/router.js"
|
|
30
|
+
},
|
|
31
|
+
"./app/workspace": {
|
|
32
|
+
"types": "./dist/app/workspace.d.ts",
|
|
33
|
+
"import": "./dist/app/workspace.js",
|
|
34
|
+
"default": "./dist/app/workspace.js"
|
|
35
|
+
},
|
|
36
|
+
"./app/extension-routes": {
|
|
37
|
+
"types": "./dist/app/extension-routes.d.ts",
|
|
38
|
+
"import": "./dist/app/extension-routes.js",
|
|
39
|
+
"default": "./dist/app/extension-routes.js"
|
|
40
|
+
},
|
|
41
|
+
"./components/admin-nav-group": {
|
|
42
|
+
"types": "./dist/components/admin-nav-group.d.ts",
|
|
43
|
+
"import": "./dist/components/admin-nav-group.js",
|
|
44
|
+
"default": "./dist/components/admin-nav-group.js"
|
|
45
|
+
},
|
|
46
|
+
"./components/admin-nav-link": {
|
|
47
|
+
"types": "./dist/components/admin-nav-link.d.ts",
|
|
48
|
+
"import": "./dist/components/admin-nav-link.js",
|
|
49
|
+
"default": "./dist/components/admin-nav-link.js"
|
|
50
|
+
},
|
|
51
|
+
"./components/admin-page-head": {
|
|
52
|
+
"types": "./dist/components/admin-page-head.d.ts",
|
|
53
|
+
"import": "./dist/components/admin-page-head.js",
|
|
54
|
+
"default": "./dist/components/admin-page-head.js"
|
|
55
|
+
},
|
|
56
|
+
"./components/admin-widget-slot": {
|
|
57
|
+
"types": "./dist/components/admin-widget-slot.d.ts",
|
|
58
|
+
"import": "./dist/components/admin-widget-slot.js",
|
|
59
|
+
"default": "./dist/components/admin-widget-slot.js"
|
|
60
|
+
},
|
|
61
|
+
"./components/operator-admin-bootstrap-gate": {
|
|
62
|
+
"types": "./dist/components/operator-admin-bootstrap-gate.d.ts",
|
|
63
|
+
"import": "./dist/components/operator-admin-bootstrap-gate.js",
|
|
64
|
+
"default": "./dist/components/operator-admin-bootstrap-gate.js"
|
|
65
|
+
},
|
|
66
|
+
"./components/operator-admin-page-shell": {
|
|
67
|
+
"types": "./dist/components/operator-admin-page-shell.d.ts",
|
|
68
|
+
"import": "./dist/components/operator-admin-page-shell.js",
|
|
69
|
+
"default": "./dist/components/operator-admin-page-shell.js"
|
|
70
|
+
},
|
|
71
|
+
"./components/operator-admin-sidebar": {
|
|
72
|
+
"types": "./dist/components/operator-admin-sidebar.d.ts",
|
|
73
|
+
"import": "./dist/components/operator-admin-sidebar.js",
|
|
74
|
+
"default": "./dist/components/operator-admin-sidebar.js"
|
|
75
|
+
},
|
|
76
|
+
"./components/operator-admin-user-menu": {
|
|
77
|
+
"types": "./dist/components/operator-admin-user-menu.d.ts",
|
|
78
|
+
"import": "./dist/components/operator-admin-user-menu.js",
|
|
79
|
+
"default": "./dist/components/operator-admin-user-menu.js"
|
|
80
|
+
},
|
|
81
|
+
"./components/team-settings-page": {
|
|
82
|
+
"types": "./dist/components/team-settings-page.d.ts",
|
|
83
|
+
"import": "./dist/components/team-settings-page.js",
|
|
84
|
+
"default": "./dist/components/team-settings-page.js"
|
|
85
|
+
},
|
|
86
|
+
"./dashboard": {
|
|
87
|
+
"types": "./dist/dashboard/dashboard-page.d.ts",
|
|
88
|
+
"import": "./dist/dashboard/dashboard-page.js",
|
|
89
|
+
"default": "./dist/dashboard/dashboard-page.js"
|
|
90
|
+
},
|
|
91
|
+
"./dashboard/query-options": {
|
|
92
|
+
"types": "./dist/dashboard/dashboard-query-options.d.ts",
|
|
93
|
+
"import": "./dist/dashboard/dashboard-query-options.js",
|
|
94
|
+
"default": "./dist/dashboard/dashboard-query-options.js"
|
|
95
|
+
},
|
|
96
|
+
"./dashboard/skeleton": {
|
|
97
|
+
"types": "./dist/dashboard/dashboard-skeleton.d.ts",
|
|
98
|
+
"import": "./dist/dashboard/dashboard-skeleton.js",
|
|
99
|
+
"default": "./dist/dashboard/dashboard-skeleton.js"
|
|
100
|
+
},
|
|
101
|
+
"./extensions": {
|
|
102
|
+
"types": "./dist/extensions.d.ts",
|
|
103
|
+
"import": "./dist/extensions.js",
|
|
104
|
+
"default": "./dist/extensions.js"
|
|
105
|
+
},
|
|
106
|
+
"./navigation/destinations": {
|
|
107
|
+
"types": "./dist/navigation/destinations.d.ts",
|
|
108
|
+
"import": "./dist/navigation/destinations.js",
|
|
109
|
+
"default": "./dist/navigation/destinations.js"
|
|
110
|
+
},
|
|
111
|
+
"./navigation/operator-navigation": {
|
|
112
|
+
"types": "./dist/navigation/operator-navigation.d.ts",
|
|
113
|
+
"import": "./dist/navigation/operator-navigation.js",
|
|
114
|
+
"default": "./dist/navigation/operator-navigation.js"
|
|
115
|
+
},
|
|
116
|
+
"./providers/admin-extensions": {
|
|
117
|
+
"types": "./dist/providers/admin-extensions.d.ts",
|
|
118
|
+
"import": "./dist/providers/admin-extensions.js",
|
|
119
|
+
"default": "./dist/providers/admin-extensions.js"
|
|
120
|
+
},
|
|
121
|
+
"./providers/locale-preferences": {
|
|
122
|
+
"types": "./dist/providers/locale-preferences.d.ts",
|
|
123
|
+
"import": "./dist/providers/locale-preferences.js",
|
|
124
|
+
"default": "./dist/providers/locale-preferences.js"
|
|
125
|
+
},
|
|
126
|
+
"./providers/operator-admin-shell": {
|
|
127
|
+
"types": "./dist/providers/operator-admin-shell.d.ts",
|
|
128
|
+
"import": "./dist/providers/operator-admin-shell.js",
|
|
129
|
+
"default": "./dist/providers/operator-admin-shell.js"
|
|
130
|
+
},
|
|
131
|
+
"./providers/operator-admin-messages": {
|
|
132
|
+
"types": "./dist/providers/operator-admin-messages.d.ts",
|
|
133
|
+
"import": "./dist/providers/operator-admin-messages.js",
|
|
134
|
+
"default": "./dist/providers/operator-admin-messages.js"
|
|
135
|
+
},
|
|
136
|
+
"./providers/theme": {
|
|
137
|
+
"types": "./dist/providers/theme.d.ts",
|
|
138
|
+
"import": "./dist/providers/theme.js",
|
|
139
|
+
"default": "./dist/providers/theme.js"
|
|
140
|
+
},
|
|
141
|
+
"./providers/locale": {
|
|
142
|
+
"types": "./dist/providers/locale.d.ts",
|
|
143
|
+
"import": "./dist/providers/locale.js",
|
|
144
|
+
"default": "./dist/providers/locale.js"
|
|
145
|
+
},
|
|
146
|
+
"./providers/query-client": {
|
|
147
|
+
"types": "./dist/providers/query-client.d.ts",
|
|
148
|
+
"import": "./dist/providers/query-client.js",
|
|
149
|
+
"default": "./dist/providers/query-client.js"
|
|
150
|
+
},
|
|
151
|
+
"./providers/admin-provider": {
|
|
152
|
+
"types": "./dist/providers/admin-provider.d.ts",
|
|
153
|
+
"import": "./dist/providers/admin-provider.js",
|
|
154
|
+
"default": "./dist/providers/admin-provider.js"
|
|
155
|
+
},
|
|
156
|
+
"./lib/i18n": {
|
|
157
|
+
"types": "./dist/lib/i18n.d.ts",
|
|
158
|
+
"import": "./dist/lib/i18n.js",
|
|
159
|
+
"default": "./dist/lib/i18n.js"
|
|
160
|
+
},
|
|
161
|
+
"./lib/initials": {
|
|
162
|
+
"types": "./dist/lib/initials.d.ts",
|
|
163
|
+
"import": "./dist/lib/initials.js",
|
|
164
|
+
"default": "./dist/lib/initials.js"
|
|
165
|
+
},
|
|
166
|
+
"./types": {
|
|
167
|
+
"types": "./dist/types.d.ts",
|
|
168
|
+
"import": "./dist/types.js",
|
|
169
|
+
"default": "./dist/types.js"
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"peerDependencies": {
|
|
173
|
+
"@tanstack/react-query": "^5.0.0",
|
|
174
|
+
"@tanstack/react-router": "^1.0.0",
|
|
175
|
+
"lucide-react": "^0.475.0",
|
|
176
|
+
"react": "^19.0.0",
|
|
177
|
+
"react-dom": "^19.0.0",
|
|
178
|
+
"recharts": "^3.0.0",
|
|
179
|
+
"@voyant-travel/ui": "^0.106.1"
|
|
180
|
+
},
|
|
181
|
+
"dependencies": {
|
|
182
|
+
"@voyant-travel/i18n": "^0.106.1",
|
|
183
|
+
"@voyant-travel/react": "^0.104.1"
|
|
184
|
+
},
|
|
185
|
+
"devDependencies": {
|
|
186
|
+
"@tanstack/react-query": "^5.100.11",
|
|
187
|
+
"@tanstack/react-router": "^1.170.4",
|
|
188
|
+
"@testing-library/react": "^16.0.0",
|
|
189
|
+
"@types/react": "^19.2.14",
|
|
190
|
+
"@types/react-dom": "^19.2.3",
|
|
191
|
+
"jsdom": "^25.0.0",
|
|
192
|
+
"lucide-react": "^1.7.0",
|
|
193
|
+
"react": "^19.2.4",
|
|
194
|
+
"react-dom": "^19.2.4",
|
|
195
|
+
"recharts": "3.8.1",
|
|
196
|
+
"typescript": "^6.0.2",
|
|
197
|
+
"vitest": "^4.1.2",
|
|
198
|
+
"@voyant-travel/ui": "^0.106.1",
|
|
199
|
+
"@voyant-travel/voyant-typescript-config": "^0.1.0"
|
|
200
|
+
},
|
|
201
|
+
"files": [
|
|
202
|
+
"dist",
|
|
203
|
+
"src/styles.css"
|
|
204
|
+
],
|
|
205
|
+
"publishConfig": {
|
|
206
|
+
"access": "public"
|
|
207
|
+
},
|
|
208
|
+
"repository": {
|
|
209
|
+
"type": "git",
|
|
210
|
+
"url": "https://github.com/voyant-travel/voyant.git",
|
|
211
|
+
"directory": "packages/admin"
|
|
212
|
+
},
|
|
213
|
+
"scripts": {
|
|
214
|
+
"build": "tsc -p tsconfig.build.json",
|
|
215
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
216
|
+
"typecheck": "tsc --noEmit",
|
|
217
|
+
"lint": "biome check src/",
|
|
218
|
+
"test": "vitest run --passWithNoTests"
|
|
219
|
+
},
|
|
220
|
+
"main": "./dist/index.js",
|
|
221
|
+
"types": "./dist/index.d.ts"
|
|
222
|
+
}
|
package/src/styles.css
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Tailwind v4 source-detection helper.
|
|
2
|
+
*
|
|
3
|
+
* Starters that consume this package should `@import` this CSS so Tailwind
|
|
4
|
+
* scans these component files for utility classes:
|
|
5
|
+
*
|
|
6
|
+
* @import "@voyant-travel/admin/styles.css";
|
|
7
|
+
*
|
|
8
|
+
* Without it, classes that only appear inside this package (e.g. sidebar and
|
|
9
|
+
* navigation layout utilities) won't be compiled into the final bundle.
|
|
10
|
+
*/
|
|
11
|
+
@source "./components/**/*.{ts,tsx}";
|