@voyantjs/suppliers-ui 0.105.2 → 0.106.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.
@@ -0,0 +1,68 @@
1
+ import { type AdminExtension } from "@voyantjs/admin";
2
+ /**
3
+ * Semantic destinations the suppliers admin surfaces navigate to
4
+ * (packaged-admin RFC §4.7). The supplier pages link between the list and
5
+ * the detail page, so instead of importing a host route tree they resolve
6
+ * these keys through `useAdminHref`/`useAdminNavigate` from
7
+ * `@voyantjs/admin`. Hosts register one resolver per key
8
+ * (`satisfies AdminDestinationResolvers`).
9
+ *
10
+ * `supplier.detail` is also declared by `@voyantjs/catalog-ui/admin` and
11
+ * `@voyantjs/finance-ui/admin` — interface merging requires the member shape
12
+ * to stay identical across packages.
13
+ */
14
+ declare module "@voyantjs/admin" {
15
+ interface AdminDestinations {
16
+ /** The suppliers list page. */
17
+ "supplier.list": Record<string, never>;
18
+ /** A supplier's detail page. */
19
+ "supplier.detail": {
20
+ supplierId: string;
21
+ };
22
+ }
23
+ }
24
+ export { SupplierDetailHost, type SupplierDetailHostProps, type SupplierDetailHostSlotContext, supplierDetailPaymentPolicySlot, } from "./supplier-detail-host.js";
25
+ export { SupplierDetailSkeleton } from "./supplier-detail-skeleton.js";
26
+ export { SuppliersHost } from "./suppliers-host.js";
27
+ export { SuppliersListSkeleton } from "./suppliers-list-skeleton.js";
28
+ export interface CreateSuppliersAdminExtensionOptions {
29
+ /** Mount path of the supplier pages inside the admin workspace. Default `/suppliers`. */
30
+ basePath?: string;
31
+ /** Localized page titles. Defaults are the English operator nav labels. */
32
+ labels?: {
33
+ suppliers?: string;
34
+ };
35
+ }
36
+ /**
37
+ * The suppliers admin contribution (packaged-admin RFC Phase 3,
38
+ * `@voyantjs/<domain>-ui/admin` convention).
39
+ *
40
+ * NAVIGATION: deliberately none. The Suppliers nav item is part of the BASE
41
+ * operator navigation — see `createOperatorAdminNavigation` in
42
+ * `@voyantjs/admin` — so contributing nav entries here would duplicate it.
43
+ * If the base nav ever drops the suppliers item, this extension is where the
44
+ * entry moves.
45
+ *
46
+ * ROUTES: contributions are metadata only — the supplier pages carry no URL
47
+ * search state (the list keeps its filters local). The PAGES are
48
+ * package-owned: {@link SuppliersHost} (zero-prop, attachable directly as a
49
+ * route `component:`) and {@link SupplierDetailHost} bind the canonical
50
+ * supplier pages to their data wiring (the shared suppliers provider
51
+ * context) and resolve every cross-route link through the semantic
52
+ * destinations declared above — no app RPC client, no host route tree.
53
+ *
54
+ * `component:` is intentionally NOT attached to these contributions yet:
55
+ * the contribution contract renders zero-prop pages (route components read
56
+ * params via the router, per RFC §4.2), and {@link SupplierDetailHost}
57
+ * takes the supplier id as a prop. Host route files stay the thin binding
58
+ * layer (`Route.useParams()` → host props) until the §4.2 code-based route
59
+ * assembly gives packaged pages a router-agnostic way to read route state.
60
+ *
61
+ * WIDGETS: none contributed, but {@link SupplierDetailHost} exposes the
62
+ * `supplier.details.payment-policy` slot ({@link
63
+ * supplierDetailPaymentPolicySlot}) — the §4.7 cycle resolution that lets
64
+ * `@voyantjs/finance-ui` (which depends on this package) contribute the
65
+ * finance-owned customer-payment-policy card to the supplier detail page.
66
+ */
67
+ export declare function createSuppliersAdminExtension(options?: CreateSuppliersAdminExtensionOptions): AdminExtension;
68
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,iBAAiB,CAAA;AAE3E;;;;;;;;;;;GAWG;AACH,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,iBAAiB;QACzB,+BAA+B;QAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACtC,gCAAgC;QAChC,iBAAiB,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAC1C;CACF;AAKD,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,+BAA+B,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,MAAM,WAAW,oCAAoC;IACnD,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,cAAc,CAmBhB"}
@@ -0,0 +1,58 @@
1
+ import { defineAdminExtension } from "@voyantjs/admin";
2
+ // Packaged admin hosts (packaged-admin RFC Phase 3): the supplier pages
3
+ // bound to their data wiring + semantic-destination navigation. Host route
4
+ // files only bind route params onto these.
5
+ export { SupplierDetailHost, supplierDetailPaymentPolicySlot, } from "./supplier-detail-host.js";
6
+ export { SupplierDetailSkeleton } from "./supplier-detail-skeleton.js";
7
+ export { SuppliersHost } from "./suppliers-host.js";
8
+ export { SuppliersListSkeleton } from "./suppliers-list-skeleton.js";
9
+ /**
10
+ * The suppliers admin contribution (packaged-admin RFC Phase 3,
11
+ * `@voyantjs/<domain>-ui/admin` convention).
12
+ *
13
+ * NAVIGATION: deliberately none. The Suppliers nav item is part of the BASE
14
+ * operator navigation — see `createOperatorAdminNavigation` in
15
+ * `@voyantjs/admin` — so contributing nav entries here would duplicate it.
16
+ * If the base nav ever drops the suppliers item, this extension is where the
17
+ * entry moves.
18
+ *
19
+ * ROUTES: contributions are metadata only — the supplier pages carry no URL
20
+ * search state (the list keeps its filters local). The PAGES are
21
+ * package-owned: {@link SuppliersHost} (zero-prop, attachable directly as a
22
+ * route `component:`) and {@link SupplierDetailHost} bind the canonical
23
+ * supplier pages to their data wiring (the shared suppliers provider
24
+ * context) and resolve every cross-route link through the semantic
25
+ * destinations declared above — no app RPC client, no host route tree.
26
+ *
27
+ * `component:` is intentionally NOT attached to these contributions yet:
28
+ * the contribution contract renders zero-prop pages (route components read
29
+ * params via the router, per RFC §4.2), and {@link SupplierDetailHost}
30
+ * takes the supplier id as a prop. Host route files stay the thin binding
31
+ * layer (`Route.useParams()` → host props) until the §4.2 code-based route
32
+ * assembly gives packaged pages a router-agnostic way to read route state.
33
+ *
34
+ * WIDGETS: none contributed, but {@link SupplierDetailHost} exposes the
35
+ * `supplier.details.payment-policy` slot ({@link
36
+ * supplierDetailPaymentPolicySlot}) — the §4.7 cycle resolution that lets
37
+ * `@voyantjs/finance-ui` (which depends on this package) contribute the
38
+ * finance-owned customer-payment-policy card to the supplier detail page.
39
+ */
40
+ export function createSuppliersAdminExtension(options = {}) {
41
+ const { basePath = "/suppliers", labels = {} } = options;
42
+ const { suppliers = "Suppliers" } = labels;
43
+ return defineAdminExtension({
44
+ id: "suppliers",
45
+ routes: [
46
+ {
47
+ id: "suppliers-index",
48
+ path: basePath,
49
+ title: suppliers,
50
+ },
51
+ {
52
+ id: "suppliers-detail",
53
+ path: `${basePath}/$id`,
54
+ title: suppliers,
55
+ },
56
+ ],
57
+ });
58
+ }
@@ -0,0 +1,38 @@
1
+ import type { Supplier, UpdateSupplierInput } from "@voyantjs/suppliers-react";
2
+ /**
3
+ * Widget slot rendered as the supplier detail page's customer-payment-policy
4
+ * card (packaged-admin RFC §4.7 cycle resolution): `@voyantjs/finance-ui`
5
+ * depends on this package, so the host cannot import the finance-owned
6
+ * payment-policy form/preview directly — instead finance's admin extension
7
+ * contributes a widget targeting this slot and the host renders the section
8
+ * whenever a contribution exists. Widgets receive
9
+ * {@link SupplierDetailHostSlotContext} as props.
10
+ */
11
+ export declare const supplierDetailPaymentPolicySlot = "supplier.details.payment-policy";
12
+ /**
13
+ * Render context handed to widget contributions targeting
14
+ * {@link supplierDetailPaymentPolicySlot}. Mirrors the canonical page's
15
+ * `renderCustomerPaymentPolicy` args: the supplier plus the page-owned
16
+ * update mutation so contributed cards persist without re-deriving it.
17
+ */
18
+ export interface SupplierDetailHostSlotContext {
19
+ supplier: Supplier;
20
+ updateSupplier: (input: UpdateSupplierInput) => Promise<Supplier>;
21
+ isUpdating: boolean;
22
+ }
23
+ export interface SupplierDetailHostProps {
24
+ id: string;
25
+ }
26
+ /**
27
+ * Packaged admin host for the canonical `SupplierDetailPage` (packaged-admin
28
+ * RFC Phase 3). Owns everything package-clean:
29
+ *
30
+ * - Cross-route links resolve through semantic destinations (RFC §4.7):
31
+ * back/deleted navigate to `"supplier.list"` — no host route tree import.
32
+ * - Locale comes from the admin chrome (`useLocale`).
33
+ * - The customer-payment-policy section mounts through
34
+ * {@link supplierDetailPaymentPolicySlot} whenever a widget contribution
35
+ * targets it (finance-ui contributes its card there).
36
+ */
37
+ export declare function SupplierDetailHost({ id }: SupplierDetailHostProps): import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=supplier-detail-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supplier-detail-host.d.ts","sourceRoot":"","sources":["../../src/admin/supplier-detail-host.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAI9E;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,oCAAoC,CAAA;AAEhF;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,QAAQ,CAAA;IAClB,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjE,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,uBAAuB,2CA6BjE"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { AdminWidgetSlotRenderer, resolveAdminWidgets, useAdminExtensions, useAdminNavigate, useLocale, } from "@voyantjs/admin";
4
+ import { SupplierDetailPage } from "../components/supplier-detail-page.js";
5
+ /**
6
+ * Widget slot rendered as the supplier detail page's customer-payment-policy
7
+ * card (packaged-admin RFC §4.7 cycle resolution): `@voyantjs/finance-ui`
8
+ * depends on this package, so the host cannot import the finance-owned
9
+ * payment-policy form/preview directly — instead finance's admin extension
10
+ * contributes a widget targeting this slot and the host renders the section
11
+ * whenever a contribution exists. Widgets receive
12
+ * {@link SupplierDetailHostSlotContext} as props.
13
+ */
14
+ export const supplierDetailPaymentPolicySlot = "supplier.details.payment-policy";
15
+ /**
16
+ * Packaged admin host for the canonical `SupplierDetailPage` (packaged-admin
17
+ * RFC Phase 3). Owns everything package-clean:
18
+ *
19
+ * - Cross-route links resolve through semantic destinations (RFC §4.7):
20
+ * back/deleted navigate to `"supplier.list"` — no host route tree import.
21
+ * - Locale comes from the admin chrome (`useLocale`).
22
+ * - The customer-payment-policy section mounts through
23
+ * {@link supplierDetailPaymentPolicySlot} whenever a widget contribution
24
+ * targets it (finance-ui contributes its card there).
25
+ */
26
+ export function SupplierDetailHost({ id }) {
27
+ const { resolvedLocale } = useLocale();
28
+ const navigateTo = useAdminNavigate();
29
+ // Finance (or any extension that may not be imported by this package)
30
+ // contributes the payment-policy card as widget contributions; the section
31
+ // renders only when at least one widget targets the slot.
32
+ const adminExtensions = useAdminExtensions();
33
+ const hasPaymentPolicyWidgets = resolveAdminWidgets({ slot: supplierDetailPaymentPolicySlot, extensions: adminExtensions })
34
+ .length > 0;
35
+ return (_jsx(SupplierDetailPage, { id: id, locale: resolvedLocale, onBack: () => navigateTo("supplier.list", {}), onDeleted: () => navigateTo("supplier.list", {}), renderCustomerPaymentPolicy: hasPaymentPolicyWidgets
36
+ ? (context) => (_jsx(AdminWidgetSlotRenderer, { slot: supplierDetailPaymentPolicySlot, props: { ...context } }))
37
+ : undefined }));
38
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Layout-matched route-level placeholder for `SupplierDetailPage`:
3
+ * - Back button + name + status pill + edit/delete actions
4
+ * - 2-col summary cards (Supplier Details + Primary Contact)
5
+ * - Services card (full width) with expandable rows
6
+ * - Notes card (full width)
7
+ */
8
+ export declare function SupplierDetailSkeleton(): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=supplier-detail-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supplier-detail-skeleton.d.ts","sourceRoot":"","sources":["../../src/admin/supplier-detail-skeleton.tsx"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,sBAAsB,4CA6CrC"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Card, CardContent, CardHeader } from "@voyantjs/ui/components/card";
4
+ import { Skeleton } from "@voyantjs/ui/components/skeleton";
5
+ /**
6
+ * Layout-matched route-level placeholder for `SupplierDetailPage`:
7
+ * - Back button + name + status pill + edit/delete actions
8
+ * - 2-col summary cards (Supplier Details + Primary Contact)
9
+ * - Services card (full width) with expandable rows
10
+ * - Notes card (full width)
11
+ */
12
+ export function SupplierDetailSkeleton() {
13
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(Header, {}), _jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsx(SummaryCard, { titleWidth: "w-36", rows: 8 }), _jsx(SummaryCard, { titleWidth: "w-32", rows: 7 })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-20" }), _jsx(Skeleton, { className: "h-8 w-28" })] }), _jsx(CardContent, { className: "flex flex-col gap-2", children: Array.from({ length: 3 }, (_, index) => `service-${index}`).map((key) => (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border px-4 py-3", children: [_jsx(Skeleton, { className: "h-4 w-4" }), _jsx(Skeleton, { className: "h-4 w-48" }), _jsx(Skeleton, { className: "h-5 w-16 rounded-full" }), _jsx("div", { className: "flex-1" }), _jsx(Skeleton, { className: "h-4 w-20" }), _jsx(Skeleton, { className: "h-8 w-8 rounded" })] }, key))) })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(Skeleton, { className: "h-5 w-16" }) }), _jsxs(CardContent, { className: "space-y-3", children: [_jsx(Skeleton, { className: "h-20 w-full" }), _jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-4 w-full" }), _jsx(Skeleton, { className: "h-4 w-3/4" })] })] })] })] }));
14
+ }
15
+ function Header() {
16
+ return (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx(Skeleton, { className: "h-9 w-9 rounded-md" }), _jsxs("div", { className: "flex-1 space-y-2", children: [_jsx(Skeleton, { className: "h-7 w-64" }), _jsx("div", { className: "flex gap-2", children: _jsx(Skeleton, { className: "h-5 w-16 rounded-full" }) })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Skeleton, { className: "h-9 w-20" }), _jsx(Skeleton, { className: "h-9 w-24" })] })] }));
17
+ }
18
+ function SummaryCard({ titleWidth, rows }) {
19
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(Skeleton, { className: `h-5 ${titleWidth}` }) }), _jsx(CardContent, { className: "grid gap-3", children: Array.from({ length: rows }, (_, index) => `row-${index}`).map((key) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Skeleton, { className: "h-3.5 w-24" }), _jsx(Skeleton, { className: "h-3.5 w-32" })] }, key))) })] }));
20
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Packaged admin host for `SuppliersPage` (packaged-admin RFC Phase 3).
3
+ *
4
+ * No host route tree is imported — opening a supplier resolves the
5
+ * `"supplier.detail"` semantic destination (RFC §4.7) through the resolvers
6
+ * the workspace shell registered. The page keeps its filter/sort/paging
7
+ * state locally (no URL search contract), so the host takes no props and
8
+ * route files can attach it as a zero-prop `component:` directly.
9
+ */
10
+ export declare function SuppliersHost(): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=suppliers-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppliers-host.d.ts","sourceRoot":"","sources":["../../src/admin/suppliers-host.tsx"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,4CAQ5B"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAdminNavigate } from "@voyantjs/admin";
4
+ import { SuppliersPage } from "../components/suppliers-page.js";
5
+ /**
6
+ * Packaged admin host for `SuppliersPage` (packaged-admin RFC Phase 3).
7
+ *
8
+ * No host route tree is imported — opening a supplier resolves the
9
+ * `"supplier.detail"` semantic destination (RFC §4.7) through the resolvers
10
+ * the workspace shell registered. The page keeps its filter/sort/paging
11
+ * state locally (no URL search contract), so the host takes no props and
12
+ * route files can attach it as a zero-prop `component:` directly.
13
+ */
14
+ export function SuppliersHost() {
15
+ const navigateTo = useAdminNavigate();
16
+ return (_jsx(SuppliersPage, { onSupplierOpen: (supplier) => navigateTo("supplier.detail", { supplierId: supplier.id }) }));
17
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Route-level placeholder for the suppliers list. Mirrors `SuppliersPage`:
3
+ * - Page title + description
4
+ * - Filter row: search input (left), Filters button, "New Supplier" (right)
5
+ * - 5-column table: Name / Type / Status / Country / Currency
6
+ * - Summary + pagination footer
7
+ */
8
+ export declare function SuppliersListSkeleton(): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=suppliers-list-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppliers-list-skeleton.d.ts","sourceRoot":"","sources":["../../src/admin/suppliers-list-skeleton.tsx"],"names":[],"mappings":"AAcA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,4CAuDpC"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Skeleton } from "@voyantjs/ui/components/skeleton";
4
+ import { useSuppliersUiMessagesOrDefault } from "../i18n/index.js";
5
+ const COLUMNS = [
6
+ { id: "name", width: "w-40" },
7
+ { id: "type", width: "w-20" },
8
+ { id: "status", width: "w-16" },
9
+ { id: "country", width: "w-20" },
10
+ { id: "currency", width: "w-12" },
11
+ ];
12
+ /**
13
+ * Route-level placeholder for the suppliers list. Mirrors `SuppliersPage`:
14
+ * - Page title + description
15
+ * - Filter row: search input (left), Filters button, "New Supplier" (right)
16
+ * - 5-column table: Name / Type / Status / Country / Currency
17
+ * - Summary + pagination footer
18
+ */
19
+ export function SuppliersListSkeleton() {
20
+ const messages = useSuppliersUiMessagesOrDefault();
21
+ const columns = messages.suppliersPage.columns;
22
+ const titles = [columns.name, columns.type, columns.status, columns.country, columns.currency];
23
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-7 w-28" }), _jsx(Skeleton, { className: "h-4 w-80" })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Skeleton, { className: "h-9 min-w-[14rem] flex-1" }), _jsx(Skeleton, { className: "h-9 w-24" }), _jsx("div", { className: "ml-auto", children: _jsx(Skeleton, { className: "h-9 w-36" }) })] }), _jsx("div", { className: "overflow-hidden rounded-md border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/40 text-left text-muted-foreground", children: _jsx("tr", { children: titles.map((title) => (_jsx("th", { className: "px-4 py-3 font-medium", children: title }, title))) }) }), _jsx("tbody", { children: Array.from({ length: 8 }, (_, rowIndex) => `row-${rowIndex}`).map((rowKey) => (_jsx("tr", { className: "border-t", children: COLUMNS.map((column) => (_jsx("td", { className: "px-4 py-3", children: _jsx(Skeleton, { className: `h-4 ${column.width}` }) }, `${rowKey}-${column.id}`))) }, rowKey))) })] }) }), _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx(Skeleton, { className: "h-4 w-44" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Skeleton, { className: "h-8 w-20" }), _jsx(Skeleton, { className: "h-4 w-20" }), _jsx(Skeleton, { className: "h-8 w-16" })] })] })] }));
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/suppliers-ui",
3
- "version": "0.105.2",
3
+ "version": "0.106.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,6 +15,11 @@
15
15
  "import": "./dist/index.js",
16
16
  "default": "./dist/index.js"
17
17
  },
18
+ "./admin": {
19
+ "types": "./dist/admin/index.d.ts",
20
+ "import": "./dist/admin/index.js",
21
+ "default": "./dist/admin/index.js"
22
+ },
18
23
  "./styles.css": {
19
24
  "default": "./src/styles.css"
20
25
  },
@@ -46,8 +51,9 @@
46
51
  "react-dom": "^19.0.0",
47
52
  "react-hook-form": "^7.60.0",
48
53
  "zod": "^4.0.0",
49
- "@voyantjs/suppliers-react": "^0.105.2",
50
- "@voyantjs/ui": "^0.105.1"
54
+ "@voyantjs/admin": "^0.106.0",
55
+ "@voyantjs/suppliers-react": "^0.106.0",
56
+ "@voyantjs/ui": "^0.106.0"
51
57
  },
52
58
  "dependencies": {
53
59
  "@voyantjs/i18n": "^0.106.0"
@@ -64,9 +70,10 @@
64
70
  "typescript": "^6.0.2",
65
71
  "vitest": "^4.1.2",
66
72
  "zod": "^4.3.6",
73
+ "@voyantjs/admin": "^0.106.0",
67
74
  "@voyantjs/i18n": "^0.106.0",
68
- "@voyantjs/suppliers-react": "^0.105.2",
69
- "@voyantjs/ui": "^0.105.1",
75
+ "@voyantjs/suppliers-react": "^0.106.0",
76
+ "@voyantjs/ui": "^0.106.0",
70
77
  "@voyantjs/voyant-typescript-config": "^0.1.0"
71
78
  },
72
79
  "files": [