@alepha/react 0.7.6 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.d.ts +26 -81
- package/dist/index.browser.js +11 -61
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +53 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +46 -95
- package/dist/index.d.ts +54 -103
- package/dist/index.js +52 -130
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
- package/src/descriptors/$page.ts +2 -47
- package/src/hooks/useClient.ts +3 -3
- package/src/index.ts +16 -4
- package/src/providers/BrowserRouterProvider.ts +3 -4
- package/src/providers/PageDescriptorProvider.ts +10 -57
- package/src/providers/ReactBrowserProvider.ts +3 -14
- package/src/providers/ReactServerProvider.ts +66 -58
- package/src/providers/BrowserHeadProvider.ts +0 -43
- package/src/providers/ServerHeadProvider.ts +0 -91
package/dist/index.browser.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
+
import * as _alepha_core1 from "@alepha/core";
|
|
2
|
+
import * as _alepha_core5 from "@alepha/core";
|
|
1
3
|
import * as _alepha_core7 from "@alepha/core";
|
|
2
|
-
import * as _alepha_core0 from "@alepha/core";
|
|
3
|
-
import * as _alepha_core2 from "@alepha/core";
|
|
4
4
|
import { Alepha, Async, KIND, Module, OPTIONS, Service, Static, TObject, TSchema } from "@alepha/core";
|
|
5
5
|
import { Route, RouterProvider } from "@alepha/router";
|
|
6
|
-
import * as
|
|
7
|
-
import * as
|
|
6
|
+
import * as react12 from "react";
|
|
7
|
+
import * as react13 from "react";
|
|
8
8
|
import React, { AnchorHTMLAttributes, ErrorInfo, FC, PropsWithChildren, ReactNode } from "react";
|
|
9
|
-
import * as
|
|
10
|
-
import * as
|
|
11
|
-
import {
|
|
9
|
+
import * as react_jsx_runtime10 from "react/jsx-runtime";
|
|
10
|
+
import * as react_jsx_runtime11 from "react/jsx-runtime";
|
|
11
|
+
import { ClientScope, HttpVirtualClient, LinkProvider } from "@alepha/server-links";
|
|
12
12
|
import { Root } from "react-dom/client";
|
|
13
|
+
import { ApiLinksResponse, ServerRequest } from "@alepha/server";
|
|
13
14
|
import { ServerRouteCache } from "@alepha/server-cache";
|
|
14
|
-
import * as
|
|
15
|
+
import * as _sinclair_typebox0 from "@sinclair/typebox";
|
|
15
16
|
|
|
16
17
|
//#region src/components/ClientOnly.d.ts
|
|
17
18
|
interface ClientOnlyProps {
|
|
@@ -71,14 +72,14 @@ declare class ErrorBoundary extends React.Component<PropsWithChildren<ErrorBound
|
|
|
71
72
|
}
|
|
72
73
|
//#endregion
|
|
73
74
|
//#region src/providers/PageDescriptorProvider.d.ts
|
|
74
|
-
declare const envSchema:
|
|
75
|
-
REACT_STRICT_MODE:
|
|
75
|
+
declare const envSchema: _alepha_core1.TObject<{
|
|
76
|
+
REACT_STRICT_MODE: _sinclair_typebox0.TBoolean;
|
|
76
77
|
}>;
|
|
77
78
|
declare module "@alepha/core" {
|
|
78
79
|
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
79
80
|
}
|
|
80
81
|
declare class PageDescriptorProvider {
|
|
81
|
-
protected readonly log:
|
|
82
|
+
protected readonly log: _alepha_core1.Logger;
|
|
82
83
|
protected readonly env: {
|
|
83
84
|
REACT_STRICT_MODE: boolean;
|
|
84
85
|
};
|
|
@@ -94,7 +95,6 @@ declare class PageDescriptorProvider {
|
|
|
94
95
|
createLayers(route: PageRoute, request: PageRequest): Promise<CreateLayersResult>;
|
|
95
96
|
protected getErrorHandler(route: PageRoute): ((error: Error) => ReactNode) | undefined;
|
|
96
97
|
protected createElement(page: PageRoute, props: Record<string, any>): Promise<ReactNode>;
|
|
97
|
-
protected fillHead(page: PageRoute, ctx: PageRequest, props: Record<string, any>): void;
|
|
98
98
|
renderError(error: Error): ReactNode;
|
|
99
99
|
renderEmptyView(): ReactNode;
|
|
100
100
|
href(page: {
|
|
@@ -104,7 +104,7 @@ declare class PageDescriptorProvider {
|
|
|
104
104
|
}, params?: Record<string, any>): string;
|
|
105
105
|
compile(path: string, params?: Record<string, string>): string;
|
|
106
106
|
protected renderView(index: number, path: string, view: ReactNode | undefined, page: PageRoute): ReactNode;
|
|
107
|
-
protected readonly configure:
|
|
107
|
+
protected readonly configure: _alepha_core1.HookDescriptor<"configure">;
|
|
108
108
|
protected map(pages: Array<{
|
|
109
109
|
value: {
|
|
110
110
|
[OPTIONS]: PageDescriptorOptions;
|
|
@@ -140,6 +140,7 @@ interface Layer {
|
|
|
140
140
|
element: ReactNode;
|
|
141
141
|
index: number;
|
|
142
142
|
path: string;
|
|
143
|
+
route?: PageRoute;
|
|
143
144
|
}
|
|
144
145
|
type PreviousLayerData = Omit<Layer, "element" | "index" | "path">;
|
|
145
146
|
interface AnchorProps {
|
|
@@ -181,7 +182,6 @@ interface CreateLayersResult extends RouterState {
|
|
|
181
182
|
*/
|
|
182
183
|
interface PageReactContext {
|
|
183
184
|
url: URL;
|
|
184
|
-
head: Head;
|
|
185
185
|
onError: (error: Error) => ReactNode;
|
|
186
186
|
links?: ApiLinksResponse;
|
|
187
187
|
}
|
|
@@ -264,7 +264,6 @@ interface PageDescriptorOptions<TConfig extends PageConfigSchema = PageConfigSch
|
|
|
264
264
|
[OPTIONS]: PageDescriptorOptions<PageConfigSchema, TPropsParent>;
|
|
265
265
|
};
|
|
266
266
|
can?: () => boolean;
|
|
267
|
-
head?: Head | ((props: TProps, previous?: Head) => Head);
|
|
268
267
|
errorHandler?: (error: Error) => ReactNode;
|
|
269
268
|
prerender?: boolean | {
|
|
270
269
|
entries?: Array<Partial<PageRequestConfig<TConfig>>>;
|
|
@@ -295,49 +294,13 @@ declare const $page: {
|
|
|
295
294
|
interface PageDescriptorRenderOptions {
|
|
296
295
|
params?: Record<string, string>;
|
|
297
296
|
query?: Record<string, string>;
|
|
298
|
-
|
|
297
|
+
html?: boolean;
|
|
298
|
+
hydration?: boolean;
|
|
299
299
|
}
|
|
300
300
|
interface PageDescriptorRenderResult {
|
|
301
301
|
html: string;
|
|
302
302
|
context: PageReactContext;
|
|
303
303
|
}
|
|
304
|
-
interface Head {
|
|
305
|
-
title?: string;
|
|
306
|
-
description?: string;
|
|
307
|
-
titleSeparator?: string;
|
|
308
|
-
htmlAttributes?: Record<string, string>;
|
|
309
|
-
bodyAttributes?: Record<string, string>;
|
|
310
|
-
meta?: Array<{
|
|
311
|
-
name: string;
|
|
312
|
-
content: string;
|
|
313
|
-
}>;
|
|
314
|
-
keywords?: string[];
|
|
315
|
-
author?: string;
|
|
316
|
-
robots?: string;
|
|
317
|
-
themeColor?: string;
|
|
318
|
-
viewport?: string | {
|
|
319
|
-
width?: string;
|
|
320
|
-
height?: string;
|
|
321
|
-
initialScale?: string;
|
|
322
|
-
maximumScale?: string;
|
|
323
|
-
userScalable?: "no" | "yes" | "0" | "1";
|
|
324
|
-
interactiveWidget?: "resizes-visual" | "resizes-content" | "overlays-content";
|
|
325
|
-
};
|
|
326
|
-
og?: {
|
|
327
|
-
title?: string;
|
|
328
|
-
description?: string;
|
|
329
|
-
image?: string;
|
|
330
|
-
url?: string;
|
|
331
|
-
type?: string;
|
|
332
|
-
};
|
|
333
|
-
twitter?: {
|
|
334
|
-
card?: string;
|
|
335
|
-
title?: string;
|
|
336
|
-
description?: string;
|
|
337
|
-
image?: string;
|
|
338
|
-
site?: string;
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
304
|
interface PageRequestConfig<TConfig extends PageConfigSchema = PageConfigSchema> {
|
|
342
305
|
params: TConfig["params"] extends TSchema ? Static<TConfig["params"]> : Record<string, string>;
|
|
343
306
|
query: TConfig["query"] extends TSchema ? Static<TConfig["query"]> : Record<string, string>;
|
|
@@ -349,7 +312,7 @@ interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
|
349
312
|
to: string | PageDescriptor;
|
|
350
313
|
children?: React.ReactNode;
|
|
351
314
|
}
|
|
352
|
-
declare const Link: (props: LinkProps) =>
|
|
315
|
+
declare const Link: (props: LinkProps) => react_jsx_runtime10.JSX.Element | null;
|
|
353
316
|
//#endregion
|
|
354
317
|
//#region src/components/NestedView.d.ts
|
|
355
318
|
interface NestedViewProps {
|
|
@@ -376,7 +339,7 @@ interface NestedViewProps {
|
|
|
376
339
|
* }
|
|
377
340
|
* ```
|
|
378
341
|
*/
|
|
379
|
-
declare const NestedView: (props: NestedViewProps) =>
|
|
342
|
+
declare const NestedView: (props: NestedViewProps) => react_jsx_runtime11.JSX.Element;
|
|
380
343
|
//#endregion
|
|
381
344
|
//#region src/contexts/RouterContext.d.ts
|
|
382
345
|
interface RouterContextValue {
|
|
@@ -384,52 +347,35 @@ interface RouterContextValue {
|
|
|
384
347
|
state: RouterState;
|
|
385
348
|
context: PageReactContext;
|
|
386
349
|
}
|
|
387
|
-
declare const RouterContext:
|
|
350
|
+
declare const RouterContext: react12.Context<RouterContextValue | undefined>;
|
|
388
351
|
//#endregion
|
|
389
352
|
//#region src/contexts/RouterLayerContext.d.ts
|
|
390
353
|
interface RouterLayerContextValue {
|
|
391
354
|
index: number;
|
|
392
355
|
path: string;
|
|
393
356
|
}
|
|
394
|
-
declare const RouterLayerContext:
|
|
395
|
-
//#endregion
|
|
396
|
-
//#region src/providers/ServerHeadProvider.d.ts
|
|
397
|
-
interface Head$1 {
|
|
398
|
-
title?: string;
|
|
399
|
-
htmlAttributes?: Record<string, string>;
|
|
400
|
-
bodyAttributes?: Record<string, string>;
|
|
401
|
-
meta?: Array<{
|
|
402
|
-
name: string;
|
|
403
|
-
content: string;
|
|
404
|
-
}>;
|
|
405
|
-
}
|
|
406
|
-
//#endregion
|
|
407
|
-
//#region src/providers/BrowserHeadProvider.d.ts
|
|
408
|
-
declare class BrowserHeadProvider {
|
|
409
|
-
renderHead(document: Document, head: Head$1): void;
|
|
410
|
-
}
|
|
357
|
+
declare const RouterLayerContext: react13.Context<RouterLayerContextValue | undefined>;
|
|
411
358
|
//#endregion
|
|
412
359
|
//#region src/providers/BrowserRouterProvider.d.ts
|
|
413
360
|
interface BrowserRoute extends Route {
|
|
414
361
|
page: PageRoute;
|
|
415
362
|
}
|
|
416
363
|
declare class BrowserRouterProvider extends RouterProvider<BrowserRoute> {
|
|
417
|
-
protected readonly log:
|
|
364
|
+
protected readonly log: _alepha_core5.Logger;
|
|
418
365
|
protected readonly alepha: Alepha;
|
|
419
366
|
protected readonly pageDescriptorProvider: PageDescriptorProvider;
|
|
420
367
|
add(entry: PageRouteEntry): void;
|
|
421
|
-
protected readonly configure:
|
|
368
|
+
protected readonly configure: _alepha_core5.HookDescriptor<"configure">;
|
|
422
369
|
transition(url: URL, options?: TransitionOptions): Promise<RouterRenderResult>;
|
|
423
370
|
root(state: RouterState, context: PageReactContext): ReactNode;
|
|
424
371
|
}
|
|
425
372
|
//#endregion
|
|
426
373
|
//#region src/providers/ReactBrowserProvider.d.ts
|
|
427
374
|
declare class ReactBrowserProvider {
|
|
428
|
-
protected readonly log:
|
|
429
|
-
protected readonly client:
|
|
375
|
+
protected readonly log: _alepha_core7.Logger;
|
|
376
|
+
protected readonly client: LinkProvider;
|
|
430
377
|
protected readonly alepha: Alepha;
|
|
431
378
|
protected readonly router: BrowserRouterProvider;
|
|
432
|
-
protected readonly headProvider: BrowserHeadProvider;
|
|
433
379
|
protected root: Root;
|
|
434
380
|
transitioning?: {
|
|
435
381
|
to: string;
|
|
@@ -448,8 +394,7 @@ declare class ReactBrowserProvider {
|
|
|
448
394
|
* Get embedded layers from the server.
|
|
449
395
|
*/
|
|
450
396
|
protected getHydrationState(): ReactHydrationState | undefined;
|
|
451
|
-
readonly ready:
|
|
452
|
-
readonly onTransitionEnd: _alepha_core2.HookDescriptor<keyof _alepha_core2.Hooks>;
|
|
397
|
+
readonly ready: _alepha_core7.HookDescriptor<"ready">;
|
|
453
398
|
}
|
|
454
399
|
interface RouterGoOptions {
|
|
455
400
|
replace?: boolean;
|
|
@@ -574,5 +519,5 @@ declare class AlephaReact implements Module {
|
|
|
574
519
|
readonly $services: (alepha: Alepha) => Alepha;
|
|
575
520
|
}
|
|
576
521
|
//#endregion
|
|
577
|
-
export { $page, AlephaReact, AnchorProps, BrowserRoute, BrowserRouterProvider, ClientOnly, CreateLayersResult, ErrorBoundary,
|
|
522
|
+
export { $page, AlephaReact, AnchorProps, BrowserRoute, BrowserRouterProvider, ClientOnly, CreateLayersResult, ErrorBoundary, HrefLike, Layer, Link, NestedView, PageConfigSchema, PageDescriptor, PageDescriptorOptions, PageDescriptorProvider, PageDescriptorRenderOptions, PageDescriptorRenderResult, PageReactContext, PageRequest, PageRequestConfig, PageResolve, PageRoute, PageRouteEntry, PreviousLayerData, ReactBrowserProvider, ReactHydrationState, RedirectionError, RouterContext, RouterContextValue, RouterGoOptions, RouterHookApi, RouterLayerContext, RouterLayerContextValue, RouterRenderResult, RouterStackItem, RouterState, TPropsDefault, TPropsParentDefault, TransitionOptions, UseActiveHook, UseQueryParamsHookOptions, VirtualRouter, isPageRoute, useActive, useAlepha, useClient, useInject, useQueryParams, useRouter, useRouterEvents, useRouterState };
|
|
578
523
|
//# sourceMappingURL=index.browser.d.ts.map
|
package/dist/index.browser.js
CHANGED
|
@@ -2,7 +2,7 @@ import { $hook, $inject, $logger, Alepha, KIND, NotImplementedError, OPTIONS, __
|
|
|
2
2
|
import { RouterProvider } from "@alepha/router";
|
|
3
3
|
import React, { StrictMode, createContext, createElement, useContext, useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import {
|
|
5
|
+
import { LinkProvider } from "@alepha/server-links";
|
|
6
6
|
import { createRoot, hydrateRoot } from "react-dom/client";
|
|
7
7
|
|
|
8
8
|
//#region src/descriptors/$page.ts
|
|
@@ -453,10 +453,6 @@ var PageDescriptorProvider = class {
|
|
|
453
453
|
const props = it.props ?? {};
|
|
454
454
|
const params = { ...it.config?.params };
|
|
455
455
|
for (const key of Object.keys(params)) params[key] = String(params[key]);
|
|
456
|
-
if (it.route.head && !it.error) this.fillHead(it.route, request, {
|
|
457
|
-
...props,
|
|
458
|
-
...context
|
|
459
|
-
});
|
|
460
456
|
acc += "/";
|
|
461
457
|
acc += it.route.path ? this.compile(it.route.path, params) : "";
|
|
462
458
|
const path = acc.replace(/\/+/, "/");
|
|
@@ -473,7 +469,8 @@ var PageDescriptorProvider = class {
|
|
|
473
469
|
config: it.config,
|
|
474
470
|
element: this.renderView(i + 1, path, element$1, it.route),
|
|
475
471
|
index: i + 1,
|
|
476
|
-
path
|
|
472
|
+
path,
|
|
473
|
+
route
|
|
477
474
|
});
|
|
478
475
|
break;
|
|
479
476
|
}
|
|
@@ -488,7 +485,8 @@ var PageDescriptorProvider = class {
|
|
|
488
485
|
config: it.config,
|
|
489
486
|
element: this.renderView(i + 1, path, element, it.route),
|
|
490
487
|
index: i + 1,
|
|
491
|
-
path
|
|
488
|
+
path,
|
|
489
|
+
route
|
|
492
490
|
});
|
|
493
491
|
}
|
|
494
492
|
return {
|
|
@@ -513,26 +511,6 @@ var PageDescriptorProvider = class {
|
|
|
513
511
|
if (page.component) return createElement(page.component, props);
|
|
514
512
|
return void 0;
|
|
515
513
|
}
|
|
516
|
-
fillHead(page, ctx, props) {
|
|
517
|
-
if (!page.head) return;
|
|
518
|
-
ctx.head ??= {};
|
|
519
|
-
const head = typeof page.head === "function" ? page.head(props, ctx.head) : page.head;
|
|
520
|
-
if (head.title) {
|
|
521
|
-
ctx.head ??= {};
|
|
522
|
-
if (ctx.head.titleSeparator) ctx.head.title = `${head.title}${ctx.head.titleSeparator}${ctx.head.title}`;
|
|
523
|
-
else ctx.head.title = head.title;
|
|
524
|
-
ctx.head.titleSeparator = head.titleSeparator;
|
|
525
|
-
}
|
|
526
|
-
if (head.htmlAttributes) ctx.head.htmlAttributes = {
|
|
527
|
-
...ctx.head.htmlAttributes,
|
|
528
|
-
...head.htmlAttributes
|
|
529
|
-
};
|
|
530
|
-
if (head.bodyAttributes) ctx.head.bodyAttributes = {
|
|
531
|
-
...ctx.head.bodyAttributes,
|
|
532
|
-
...head.bodyAttributes
|
|
533
|
-
};
|
|
534
|
-
if (head.meta) ctx.head.meta = [...ctx.head.meta ?? [], ...head.meta ?? []];
|
|
535
|
-
}
|
|
536
514
|
renderError(error) {
|
|
537
515
|
return createElement(ErrorViewer_default, { error });
|
|
538
516
|
}
|
|
@@ -654,7 +632,6 @@ var BrowserRouterProvider = class extends RouterProvider {
|
|
|
654
632
|
url,
|
|
655
633
|
query: {},
|
|
656
634
|
params: {},
|
|
657
|
-
head: {},
|
|
658
635
|
onError: () => null,
|
|
659
636
|
...options.context ?? {}
|
|
660
637
|
};
|
|
@@ -685,7 +662,10 @@ var BrowserRouterProvider = class extends RouterProvider {
|
|
|
685
662
|
index: 0,
|
|
686
663
|
path: "/"
|
|
687
664
|
});
|
|
688
|
-
await this.alepha.emit("react:transition:success", {
|
|
665
|
+
await this.alepha.emit("react:transition:success", {
|
|
666
|
+
state,
|
|
667
|
+
context
|
|
668
|
+
});
|
|
689
669
|
} catch (e) {
|
|
690
670
|
this.log.error(e);
|
|
691
671
|
state.layers = [{
|
|
@@ -719,36 +699,13 @@ var BrowserRouterProvider = class extends RouterProvider {
|
|
|
719
699
|
}
|
|
720
700
|
};
|
|
721
701
|
|
|
722
|
-
//#endregion
|
|
723
|
-
//#region src/providers/BrowserHeadProvider.ts
|
|
724
|
-
var BrowserHeadProvider = class {
|
|
725
|
-
renderHead(document, head) {
|
|
726
|
-
if (head.title) document.title = head.title;
|
|
727
|
-
if (head.bodyAttributes) for (const [key, value] of Object.entries(head.bodyAttributes)) if (value) document.body.setAttribute(key, value);
|
|
728
|
-
else document.body.removeAttribute(key);
|
|
729
|
-
if (head.htmlAttributes) for (const [key, value] of Object.entries(head.htmlAttributes)) if (value) document.documentElement.setAttribute(key, value);
|
|
730
|
-
else document.documentElement.removeAttribute(key);
|
|
731
|
-
if (head.meta) for (const [key, value] of Object.entries(head.meta)) {
|
|
732
|
-
const meta = document.querySelector(`meta[name="${key}"]`);
|
|
733
|
-
if (meta) meta.setAttribute("content", value.content);
|
|
734
|
-
else {
|
|
735
|
-
const newMeta = document.createElement("meta");
|
|
736
|
-
newMeta.setAttribute("name", key);
|
|
737
|
-
newMeta.setAttribute("content", value.content);
|
|
738
|
-
document.head.appendChild(newMeta);
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
};
|
|
743
|
-
|
|
744
702
|
//#endregion
|
|
745
703
|
//#region src/providers/ReactBrowserProvider.ts
|
|
746
704
|
var ReactBrowserProvider = class {
|
|
747
705
|
log = $logger();
|
|
748
|
-
client = $inject(
|
|
706
|
+
client = $inject(LinkProvider);
|
|
749
707
|
alepha = $inject(Alepha);
|
|
750
708
|
router = $inject(BrowserRouterProvider);
|
|
751
|
-
headProvider = $inject(BrowserHeadProvider);
|
|
752
709
|
root;
|
|
753
710
|
transitioning;
|
|
754
711
|
state = {
|
|
@@ -827,7 +784,6 @@ var ReactBrowserProvider = class {
|
|
|
827
784
|
const previous = hydration?.layers ?? [];
|
|
828
785
|
if (hydration?.links) for (const link of hydration.links.links) this.client.pushLink(link);
|
|
829
786
|
const { context } = await this.render({ previous });
|
|
830
|
-
if (context.head) this.headProvider.renderHead(this.document, context.head);
|
|
831
787
|
await this.alepha.emit("react:browser:render", {
|
|
832
788
|
state: this.state,
|
|
833
789
|
context,
|
|
@@ -838,12 +794,6 @@ var ReactBrowserProvider = class {
|
|
|
838
794
|
});
|
|
839
795
|
}
|
|
840
796
|
});
|
|
841
|
-
onTransitionEnd = $hook({
|
|
842
|
-
name: "react:transition:end",
|
|
843
|
-
handler: async ({ context }) => {
|
|
844
|
-
this.headProvider.renderHead(this.document, context.head);
|
|
845
|
-
}
|
|
846
|
-
});
|
|
847
797
|
};
|
|
848
798
|
|
|
849
799
|
//#endregion
|
|
@@ -1035,7 +985,7 @@ const useInject = (clazz) => {
|
|
|
1035
985
|
//#endregion
|
|
1036
986
|
//#region src/hooks/useClient.ts
|
|
1037
987
|
const useClient = (_scope) => {
|
|
1038
|
-
return useInject(
|
|
988
|
+
return useInject(LinkProvider).client();
|
|
1039
989
|
};
|
|
1040
990
|
|
|
1041
991
|
//#endregion
|