@voyantjs/availability-react 0.107.0 → 0.109.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.
@@ -17,12 +17,10 @@ declare module "@voyantjs/admin" {
17
17
  };
18
18
  }
19
19
  }
20
- export { AvailabilityIndexHost } from "./availability-index-host.js";
21
- export { ensureAvailabilityPageData } from "./availability-page-data.js";
22
- export { OptionResourceTemplatesPanel, type OptionResourceTemplatesPanelProps, } from "./option-resource-templates-panel.js";
23
- export { AvailabilityRuleDetailHost, type AvailabilityRuleDetailHostProps, } from "./rule-detail-host.js";
24
- export { AvailabilitySlotDetailHost, type AvailabilitySlotDetailHostProps, } from "./slot-detail-host.js";
25
- export { AvailabilityStartTimeDetailHost, type AvailabilityStartTimeDetailHostProps, } from "./start-time-detail-host.js";
20
+ export type { OptionResourceTemplatesPanelProps } from "./option-resource-templates-panel.js";
21
+ export type { AvailabilityRuleDetailHostProps } from "./rule-detail-host.js";
22
+ export type { AvailabilitySlotDetailHostProps } from "./slot-detail-host.js";
23
+ export type { AvailabilityStartTimeDetailHostProps } from "./start-time-detail-host.js";
26
24
  export interface CreateAvailabilityAdminExtensionOptions {
27
25
  /** Mount path of the availability pages inside the admin workspace. Default `/availability`. */
28
26
  basePath?: string;
@@ -41,24 +39,27 @@ export interface CreateAvailabilityAdminExtensionOptions {
41
39
  * If the base nav ever drops the availability item, this extension is where
42
40
  * the entry moves.
43
41
  *
44
- * ROUTES: contributions are metadata only the availability pages keep
45
- * their filter state component-local, so there are no URL search contracts.
46
- * The PAGES are package-owned: {@link AvailabilityIndexHost} (the slots
47
- * list + calendar landing page, with bulk update/delete running through
48
- * the typed batch mutation hooks in `@voyantjs/availability-react`) plus
49
- * the detail hosts {@link AvailabilitySlotDetailHost},
42
+ * ROUTES: contributions carry the FULL route implementation (packaged-admin
43
+ * RFC §4.2/§4.8) lazy `page` module loaders, data loaders fed by the
44
+ * host-supplied {@link AdminRouteLoaderContext} (QueryClient + runtime +
45
+ * params), per-route SSR mode, and pending skeletons. Hosts bind them into
46
+ * their code-assembled admin route tree; no per-route host files needed.
47
+ * The pages stay code-split because each contribution's `page` dynamically
48
+ * imports the specific host/page module — never the admin barrel — so the
49
+ * heavy page chunks load on navigation, not with workspace chrome.
50
+ * {@link AvailabilityIndexHost} (the slots list + calendar landing page,
51
+ * with bulk update/delete running through the typed batch mutation hooks in
52
+ * `@voyantjs/availability-react`) mounts as a zero-prop page; the detail
53
+ * hosts {@link AvailabilitySlotDetailHost},
50
54
  * {@link AvailabilityRuleDetailHost} and
51
- * {@link AvailabilityStartTimeDetailHost} bind the operator-grade pages to
52
- * their data wiring (the shared availability provider context) and resolve
53
- * every cross-route link through the semantic destinations declared above.
54
- * `component:` is intentionally NOT attached to these contributions: the
55
- * contribution contract renders zero-prop pages (route components read
56
- * params via the router, per RFC §4.2), while the detail hosts take the
57
- * record id as a prop host route files stay the thin binding layer
58
- * (`Route.useParams()` → host props) until the §4.2 code-based route
59
- * assembly lands. The index host's SSR loader binding stays app-side
60
- * ({@link ensureAvailabilityPageData} takes the app's cookie-forwarding
61
- * client), per the packaged-host recipe.
55
+ * {@link AvailabilityStartTimeDetailHost} read their record id from
56
+ * `AdminRoutePageProps` via the default-exported wrappers in `./pages/`.
57
+ * The index host's SSR loader binding is no longer app-side:
58
+ * {@link ensureAvailabilityPageData} runs in the contribution's own loader
59
+ * against the host runtime's cookie-forwarding fetcher. The pages keep
60
+ * their filter state component-local, so there are no URL search contracts,
61
+ * and every cross-route link resolves through the semantic destinations
62
+ * declared above.
62
63
  *
63
64
  * WIDGETS: none. {@link OptionResourceTemplatesPanel} (the per-option
64
65
  * resource templates editor the product editor embeds) ships from this
@@ -1 +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;AAW3E;;;;;;;GAOG;AACH,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,iBAAiB;QACzB,6DAA6D;QAC7D,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC9C,gDAAgD;QAChD,8BAA8B,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KACxD;CACF;AAKD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AACxE,OAAO,EACL,4BAA4B,EAC5B,KAAK,iCAAiC,GACvC,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,+BAA+B,EAC/B,KAAK,oCAAoC,GAC1C,MAAM,6BAA6B,CAAA;AAEpC,MAAM,WAAW,uCAAuC;IACtD,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,uCAA4C,GACpD,cAAc,CA6BhB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAKpB,MAAM,iBAAiB,CAAA;AAsBxB;;;;;;;GAOG;AACH,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,iBAAiB;QACzB,6DAA6D;QAC7D,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC9C,gDAAgD;QAChD,8BAA8B,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KACxD;CACF;AAYD,YAAY,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAA;AAC7F,YAAY,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAC5E,YAAY,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAC5E,YAAY,EAAE,oCAAoC,EAAE,MAAM,6BAA6B,CAAA;AAEvF,MAAM,WAAW,uCAAuC;IACtD,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,uCAA4C,GACpD,cAAc,CA0FhB"}
@@ -1,13 +1,10 @@
1
- import { defineAdminExtension } from "@voyantjs/admin";
2
- // Packaged admin hosts (packaged-admin RFC Phase 3): the operator-grade
3
- // availability pages bound to their data wiring + semantic-destination
4
- // navigation. Host route files only bind route params onto these.
5
- export { AvailabilityIndexHost } from "./availability-index-host.js";
6
- export { ensureAvailabilityPageData } from "./availability-page-data.js";
7
- export { OptionResourceTemplatesPanel, } from "./option-resource-templates-panel.js";
8
- export { AvailabilityRuleDetailHost, } from "./rule-detail-host.js";
9
- export { AvailabilitySlotDetailHost, } from "./slot-detail-host.js";
10
- export { AvailabilityStartTimeDetailHost, } from "./start-time-detail-host.js";
1
+ import { adminRoutePageModule, defineAdminExtension, } from "@voyantjs/admin";
2
+ // Lean static only: the client module (fetcher). The page-data helper pulls
3
+ // the availability query options (client + response schemas), so the index
4
+ // loader resolves it via dynamic import instead of pinning it into the
5
+ // workspace-chrome chunk that evaluates this factory.
6
+ import { defaultFetcher } from "../client.js";
7
+ import { AvailabilityPageSkeleton, AvailabilityRuleDetailSkeleton, AvailabilitySlotDetailSkeleton, AvailabilityStartTimeDetailSkeleton, } from "../components/availability-skeletons.js";
11
8
  /**
12
9
  * The availability admin contribution (packaged-admin RFC Phase 3,
13
10
  * `@voyantjs/<domain>-ui/admin` convention).
@@ -18,24 +15,27 @@ export { AvailabilityStartTimeDetailHost, } from "./start-time-detail-host.js";
18
15
  * If the base nav ever drops the availability item, this extension is where
19
16
  * the entry moves.
20
17
  *
21
- * ROUTES: contributions are metadata only the availability pages keep
22
- * their filter state component-local, so there are no URL search contracts.
23
- * The PAGES are package-owned: {@link AvailabilityIndexHost} (the slots
24
- * list + calendar landing page, with bulk update/delete running through
25
- * the typed batch mutation hooks in `@voyantjs/availability-react`) plus
26
- * the detail hosts {@link AvailabilitySlotDetailHost},
18
+ * ROUTES: contributions carry the FULL route implementation (packaged-admin
19
+ * RFC §4.2/§4.8) lazy `page` module loaders, data loaders fed by the
20
+ * host-supplied {@link AdminRouteLoaderContext} (QueryClient + runtime +
21
+ * params), per-route SSR mode, and pending skeletons. Hosts bind them into
22
+ * their code-assembled admin route tree; no per-route host files needed.
23
+ * The pages stay code-split because each contribution's `page` dynamically
24
+ * imports the specific host/page module — never the admin barrel — so the
25
+ * heavy page chunks load on navigation, not with workspace chrome.
26
+ * {@link AvailabilityIndexHost} (the slots list + calendar landing page,
27
+ * with bulk update/delete running through the typed batch mutation hooks in
28
+ * `@voyantjs/availability-react`) mounts as a zero-prop page; the detail
29
+ * hosts {@link AvailabilitySlotDetailHost},
27
30
  * {@link AvailabilityRuleDetailHost} and
28
- * {@link AvailabilityStartTimeDetailHost} bind the operator-grade pages to
29
- * their data wiring (the shared availability provider context) and resolve
30
- * every cross-route link through the semantic destinations declared above.
31
- * `component:` is intentionally NOT attached to these contributions: the
32
- * contribution contract renders zero-prop pages (route components read
33
- * params via the router, per RFC §4.2), while the detail hosts take the
34
- * record id as a prop host route files stay the thin binding layer
35
- * (`Route.useParams()` → host props) until the §4.2 code-based route
36
- * assembly lands. The index host's SSR loader binding stays app-side
37
- * ({@link ensureAvailabilityPageData} takes the app's cookie-forwarding
38
- * client), per the packaged-host recipe.
31
+ * {@link AvailabilityStartTimeDetailHost} read their record id from
32
+ * `AdminRoutePageProps` via the default-exported wrappers in `./pages/`.
33
+ * The index host's SSR loader binding is no longer app-side:
34
+ * {@link ensureAvailabilityPageData} runs in the contribution's own loader
35
+ * against the host runtime's cookie-forwarding fetcher. The pages keep
36
+ * their filter state component-local, so there are no URL search contracts,
37
+ * and every cross-route link resolves through the semantic destinations
38
+ * declared above.
39
39
  *
40
40
  * WIDGETS: none. {@link OptionResourceTemplatesPanel} (the per-option
41
41
  * resource templates editor the product editor embeds) ships from this
@@ -52,22 +52,89 @@ export function createAvailabilityAdminExtension(options = {}) {
52
52
  id: "availability-index",
53
53
  path: basePath,
54
54
  title: availability,
55
+ // Route-backed destination (RFC §4.7 endgame): the key resolves by
56
+ // pure path interpolation of this route, so the host's resolver is
57
+ // generated (`voyant admin generate --destinations`).
58
+ destination: "availabilitySlot.list",
59
+ ssr: "data-only",
60
+ page: () => import("./availability-index-host.js").then((module) => adminRoutePageModule(module.AvailabilityIndexHost)),
61
+ // Awaits only what the slots tab + the products picker need for
62
+ // first paint; the slot dialog's rules/start-times dimensions
63
+ // prefetch in the background. Dynamic import on purpose: the helper
64
+ // pulls the availability query options, and a static import here
65
+ // would pin them into the workspace-chrome chunk.
66
+ loader: async ({ queryClient, runtime }) => {
67
+ const { ensureAvailabilityPageData } = await import("./availability-page-data.js");
68
+ return ensureAvailabilityPageData(queryClient, loaderClient(runtime));
69
+ },
70
+ pendingComponent: AvailabilityPageSkeleton,
55
71
  },
56
72
  {
57
73
  id: "availability-slot-detail",
58
74
  path: `${basePath}/$id`,
59
75
  title: availability,
76
+ // Key declared by @voyantjs/bookings-react/admin (bound type-only above).
77
+ destination: "availabilitySlot.detail",
78
+ destinationParams: { id: "slotId" },
79
+ page: () => import("./pages/availability-slot-detail-page.js"),
80
+ loader: async ({ queryClient, runtime, params }) => {
81
+ const id = params.id;
82
+ if (!id)
83
+ return;
84
+ // Dynamic import on purpose: the loader helper lives in the slot
85
+ // detail page module, and a static import here would pin that
86
+ // module into the host's workspace-chrome chunk, defeating the
87
+ // route's code-split. The loader and the page resolve the same
88
+ // chunk, fetched once.
89
+ const { loadAvailabilitySlotDetailPage } = await import("../components/availability-slot-detail-page.js");
90
+ return loadAvailabilitySlotDetailPage(queryClient, loaderClient(runtime), id);
91
+ },
92
+ pendingComponent: AvailabilitySlotDetailSkeleton,
60
93
  },
61
94
  {
62
95
  id: "availability-rule-detail",
63
96
  path: `${basePath}/rules/$id`,
64
97
  title: availability,
98
+ page: () => import("./pages/availability-rule-detail-page.js"),
99
+ loader: async ({ queryClient, runtime, params }) => {
100
+ const id = params.id;
101
+ if (!id)
102
+ return;
103
+ // Dynamic import on purpose — see the slot detail loader above.
104
+ const { loadAvailabilityRuleDetailPage } = await import("../components/availability-rule-detail-page.js");
105
+ return loadAvailabilityRuleDetailPage(queryClient, loaderClient(runtime), id);
106
+ },
107
+ pendingComponent: AvailabilityRuleDetailSkeleton,
65
108
  },
66
109
  {
67
110
  id: "availability-start-time-detail",
68
111
  path: `${basePath}/start-times/$id`,
69
112
  title: availability,
113
+ destination: "availabilityStartTime.detail",
114
+ destinationParams: { id: "startTimeId" },
115
+ page: () => import("./pages/availability-start-time-detail-page.js"),
116
+ loader: async ({ queryClient, runtime, params }) => {
117
+ const id = params.id;
118
+ if (!id)
119
+ return;
120
+ // Dynamic import on purpose — see the slot detail loader above.
121
+ const { loadAvailabilityStartTimeDetailPage } = await import("../components/availability-start-time-detail-page.js");
122
+ return loadAvailabilityStartTimeDetailPage(queryClient, loaderClient(runtime), id);
123
+ },
124
+ pendingComponent: AvailabilityStartTimeDetailSkeleton,
70
125
  },
71
126
  ],
72
127
  });
73
128
  }
129
+ /**
130
+ * Bridge the host-supplied {@link AdminRouteRuntime} (optional fetcher) to
131
+ * the required-fetcher client contract the availability loaders take.
132
+ *
133
+ * Note: the operator's detail route files built this client with the
134
+ * package `defaultFetcher` (a plain `credentials: "include"` fetch); the
135
+ * contribution uses the host runtime's cookie-forwarding fetcher instead,
136
+ * so detail SSR prefetches authenticate — an intentional improvement.
137
+ */
138
+ function loaderClient(runtime) {
139
+ return { baseUrl: runtime.baseUrl, fetcher: runtime.fetcher ?? defaultFetcher };
140
+ }
@@ -0,0 +1,9 @@
1
+ import type { AdminRoutePageProps } from "@voyantjs/admin";
2
+ /**
3
+ * Param-taking page for the `availability-rule-detail` contribution: reads
4
+ * the rule id off {@link AdminRoutePageProps} and binds it onto the packaged
5
+ * host. Resolved lazily through the contribution's `page` loader so the
6
+ * detail page lands in its own chunk.
7
+ */
8
+ export default function AvailabilityRuleDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=availability-rule-detail-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-rule-detail-page.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/availability-rule-detail-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAI1D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,+BAA+B,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAEtF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AvailabilityRuleDetailHost } from "../rule-detail-host.js";
3
+ /**
4
+ * Param-taking page for the `availability-rule-detail` contribution: reads
5
+ * the rule id off {@link AdminRoutePageProps} and binds it onto the packaged
6
+ * host. Resolved lazily through the contribution's `page` loader so the
7
+ * detail page lands in its own chunk.
8
+ */
9
+ export default function AvailabilityRuleDetailRoutePage({ params }) {
10
+ return _jsx(AvailabilityRuleDetailHost, { ruleId: params.id ?? "" });
11
+ }
@@ -0,0 +1,9 @@
1
+ import type { AdminRoutePageProps } from "@voyantjs/admin";
2
+ /**
3
+ * Param-taking page for the `availability-slot-detail` contribution: reads
4
+ * the slot id off {@link AdminRoutePageProps} and binds it onto the packaged
5
+ * host. Resolved lazily through the contribution's `page` loader so the
6
+ * detail page lands in its own chunk.
7
+ */
8
+ export default function AvailabilitySlotDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=availability-slot-detail-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-slot-detail-page.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/availability-slot-detail-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAI1D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,+BAA+B,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAEtF"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AvailabilitySlotDetailHost } from "../slot-detail-host.js";
3
+ /**
4
+ * Param-taking page for the `availability-slot-detail` contribution: reads
5
+ * the slot id off {@link AdminRoutePageProps} and binds it onto the packaged
6
+ * host. Resolved lazily through the contribution's `page` loader so the
7
+ * detail page lands in its own chunk.
8
+ */
9
+ export default function AvailabilitySlotDetailRoutePage({ params }) {
10
+ return _jsx(AvailabilitySlotDetailHost, { slotId: params.id ?? "" });
11
+ }
@@ -0,0 +1,9 @@
1
+ import type { AdminRoutePageProps } from "@voyantjs/admin";
2
+ /**
3
+ * Param-taking page for the `availability-start-time-detail` contribution:
4
+ * reads the start time id off {@link AdminRoutePageProps} and binds it onto
5
+ * the packaged host. Resolved lazily through the contribution's `page`
6
+ * loader so the detail page lands in its own chunk.
7
+ */
8
+ export default function AvailabilityStartTimeDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=availability-start-time-detail-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-start-time-detail-page.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/availability-start-time-detail-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAI1D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAE3F"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AvailabilityStartTimeDetailHost } from "../start-time-detail-host.js";
3
+ /**
4
+ * Param-taking page for the `availability-start-time-detail` contribution:
5
+ * reads the start time id off {@link AdminRoutePageProps} and binds it onto
6
+ * the packaged host. Resolved lazily through the contribution's `page`
7
+ * loader so the detail page lands in its own chunk.
8
+ */
9
+ export default function AvailabilityStartTimeDetailRoutePage({ params }) {
10
+ return _jsx(AvailabilityStartTimeDetailHost, { startTimeId: params.id ?? "" });
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/availability-react",
3
- "version": "0.107.0",
3
+ "version": "0.109.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -73,13 +73,13 @@
73
73
  "react-hook-form": "^7.72.1",
74
74
  "sonner": "^2.0.7",
75
75
  "zod": "^4.0.0",
76
- "@voyantjs/admin": "^0.107.0",
77
- "@voyantjs/allocation-ui": "^0.108.0",
78
- "@voyantjs/availability": "^0.107.0",
79
- "@voyantjs/bookings-react": "^0.110.0",
80
- "@voyantjs/extras-react": "^0.110.0",
81
- "@voyantjs/products-react": "^0.110.0",
82
- "@voyantjs/ui": "^0.106.0"
76
+ "@voyantjs/bookings-react": "^0.112.0",
77
+ "@voyantjs/allocation-ui": "^0.110.0",
78
+ "@voyantjs/availability": "^0.109.0",
79
+ "@voyantjs/products-react": "^0.112.0",
80
+ "@voyantjs/extras-react": "^0.112.0",
81
+ "@voyantjs/ui": "^0.106.0",
82
+ "@voyantjs/admin": "^0.109.0"
83
83
  },
84
84
  "peerDependenciesMeta": {
85
85
  "@tanstack/react-table": {
@@ -130,13 +130,13 @@
130
130
  "typescript": "^6.0.2",
131
131
  "vitest": "^4.1.2",
132
132
  "zod": "^4.3.6",
133
- "@voyantjs/admin": "^0.107.0",
134
- "@voyantjs/allocation-ui": "^0.108.0",
135
- "@voyantjs/availability": "^0.107.0",
136
- "@voyantjs/bookings-react": "^0.110.0",
137
- "@voyantjs/extras-react": "^0.110.0",
133
+ "@voyantjs/admin": "^0.109.0",
134
+ "@voyantjs/allocation-ui": "^0.110.0",
135
+ "@voyantjs/availability": "^0.109.0",
136
+ "@voyantjs/bookings-react": "^0.112.0",
137
+ "@voyantjs/extras-react": "^0.112.0",
138
138
  "@voyantjs/i18n": "^0.106.0",
139
- "@voyantjs/products-react": "^0.110.0",
139
+ "@voyantjs/products-react": "^0.112.0",
140
140
  "@voyantjs/react": "^0.104.1",
141
141
  "@voyantjs/ui": "^0.106.0",
142
142
  "@voyantjs/voyant-typescript-config": "^0.1.0"