@alepha/react 0.11.11 → 0.11.12

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.
Files changed (128) hide show
  1. package/README.md +1 -183
  2. package/dist/auth/index.browser.js +1460 -0
  3. package/dist/auth/index.browser.js.map +1 -0
  4. package/dist/auth/index.cjs +3647 -0
  5. package/dist/auth/index.cjs.map +1 -0
  6. package/dist/auth/index.d.cts +564 -0
  7. package/dist/auth/index.d.cts.map +1 -0
  8. package/dist/auth/index.d.ts +564 -0
  9. package/dist/auth/index.d.ts.map +1 -0
  10. package/dist/auth/index.js +3615 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/{index.browser.js → core/index.browser.js} +36 -35
  13. package/dist/core/index.browser.js.map +1 -0
  14. package/dist/{index.cjs → core/index.cjs} +141 -140
  15. package/dist/core/index.cjs.map +1 -0
  16. package/dist/{index.d.cts → core/index.d.cts} +68 -68
  17. package/dist/core/index.d.cts.map +1 -0
  18. package/dist/{index.d.ts → core/index.d.ts} +68 -68
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/{index.js → core/index.js} +39 -38
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/form/index.cjs +2054 -0
  23. package/dist/form/index.cjs.map +1 -0
  24. package/dist/form/index.d.cts +211 -0
  25. package/dist/form/index.d.cts.map +1 -0
  26. package/dist/form/index.d.ts +211 -0
  27. package/dist/form/index.d.ts.map +1 -0
  28. package/dist/form/index.js +2026 -0
  29. package/dist/form/index.js.map +1 -0
  30. package/dist/head/index.browser.js +1503 -0
  31. package/dist/head/index.browser.js.map +1 -0
  32. package/dist/head/index.cjs +1908 -0
  33. package/dist/head/index.cjs.map +1 -0
  34. package/dist/head/index.d.cts +595 -0
  35. package/dist/head/index.d.cts.map +1 -0
  36. package/dist/head/index.d.ts +601 -0
  37. package/dist/head/index.d.ts.map +1 -0
  38. package/dist/head/index.js +1880 -0
  39. package/dist/head/index.js.map +1 -0
  40. package/dist/i18n/index.cjs +1886 -0
  41. package/dist/i18n/index.cjs.map +1 -0
  42. package/dist/i18n/index.d.cts +168 -0
  43. package/dist/i18n/index.d.cts.map +1 -0
  44. package/dist/i18n/index.d.ts +168 -0
  45. package/dist/i18n/index.d.ts.map +1 -0
  46. package/dist/i18n/index.js +1857 -0
  47. package/dist/i18n/index.js.map +1 -0
  48. package/dist/websocket/index.cjs +1774 -0
  49. package/dist/websocket/index.cjs.map +1 -0
  50. package/dist/websocket/index.d.cts +118 -0
  51. package/dist/websocket/index.d.cts.map +1 -0
  52. package/dist/websocket/index.d.ts +118 -0
  53. package/dist/websocket/index.d.ts.map +1 -0
  54. package/dist/websocket/index.js +1750 -0
  55. package/dist/websocket/index.js.map +1 -0
  56. package/package.json +89 -67
  57. package/src/auth/descriptors/$auth.ts +436 -0
  58. package/src/auth/descriptors/$authApple.ts +8 -0
  59. package/src/auth/descriptors/$authGithub.ts +81 -0
  60. package/src/auth/descriptors/$authGoogle.ts +38 -0
  61. package/src/auth/errors/SessionExpiredError.ts +6 -0
  62. package/src/auth/hooks/useAuth.ts +31 -0
  63. package/src/auth/index.browser.ts +16 -0
  64. package/src/auth/index.shared.ts +3 -0
  65. package/src/auth/index.ts +47 -0
  66. package/src/auth/providers/ReactAuthProvider.ts +629 -0
  67. package/src/auth/schemas/tokenResponseSchema.ts +11 -0
  68. package/src/auth/schemas/tokensSchema.ts +21 -0
  69. package/src/auth/schemas/userinfoResponseSchema.ts +10 -0
  70. package/src/auth/services/ReactAuth.ts +124 -0
  71. package/src/{components → core/components}/ErrorViewer.tsx +3 -2
  72. package/src/{components → core/components}/NestedView.tsx +1 -1
  73. package/src/{contexts → core/contexts}/AlephaContext.ts +1 -1
  74. package/src/{descriptors → core/descriptors}/$page.ts +4 -4
  75. package/src/{hooks → core/hooks}/useAction.ts +1 -1
  76. package/src/{hooks → core/hooks}/useAlepha.ts +1 -1
  77. package/src/{hooks → core/hooks}/useClient.ts +1 -1
  78. package/src/{hooks → core/hooks}/useEvents.ts +1 -1
  79. package/src/{hooks → core/hooks}/useInject.ts +1 -1
  80. package/src/{hooks → core/hooks}/useQueryParams.ts +1 -1
  81. package/src/{hooks → core/hooks}/useRouterState.ts +1 -1
  82. package/src/{hooks → core/hooks}/useSchema.ts +3 -3
  83. package/src/{hooks → core/hooks}/useStore.ts +2 -2
  84. package/src/{index.browser.ts → core/index.browser.ts} +4 -4
  85. package/src/{index.ts → core/index.ts} +6 -6
  86. package/src/{providers → core/providers}/ReactBrowserProvider.ts +6 -6
  87. package/src/{providers → core/providers}/ReactBrowserRendererProvider.ts +2 -2
  88. package/src/{providers → core/providers}/ReactBrowserRouterProvider.ts +3 -3
  89. package/src/{providers → core/providers}/ReactPageProvider.ts +3 -3
  90. package/src/{providers → core/providers}/ReactServerProvider.ts +7 -7
  91. package/src/{services → core/services}/ReactPageServerService.ts +2 -2
  92. package/src/{services → core/services}/ReactPageService.ts +1 -1
  93. package/src/{services → core/services}/ReactRouter.ts +1 -1
  94. package/src/form/components/FormState.tsx +17 -0
  95. package/src/form/hooks/useForm.ts +47 -0
  96. package/src/form/hooks/useFormState.ts +130 -0
  97. package/src/form/index.ts +38 -0
  98. package/src/form/services/FormModel.ts +548 -0
  99. package/src/head/descriptors/$head.ts +25 -0
  100. package/src/head/hooks/useHead.ts +62 -0
  101. package/src/head/index.browser.ts +25 -0
  102. package/src/head/index.ts +47 -0
  103. package/src/head/interfaces/Head.ts +46 -0
  104. package/src/head/providers/BrowserHeadProvider.ts +105 -0
  105. package/src/head/providers/HeadProvider.ts +73 -0
  106. package/src/head/providers/ServerHeadProvider.ts +109 -0
  107. package/src/i18n/README.md +76 -0
  108. package/src/i18n/components/Localize.tsx +35 -0
  109. package/src/i18n/descriptors/$dictionary.ts +65 -0
  110. package/src/i18n/hooks/useI18n.ts +18 -0
  111. package/src/i18n/index.ts +34 -0
  112. package/src/i18n/providers/I18nProvider.ts +277 -0
  113. package/src/websocket/hooks/useRoom.tsx +223 -0
  114. package/src/websocket/index.ts +7 -0
  115. package/dist/index.browser.js.map +0 -1
  116. package/dist/index.cjs.map +0 -1
  117. package/dist/index.d.cts.map +0 -1
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js.map +0 -1
  120. /package/src/{components → core/components}/ClientOnly.tsx +0 -0
  121. /package/src/{components → core/components}/ErrorBoundary.tsx +0 -0
  122. /package/src/{components → core/components}/Link.tsx +0 -0
  123. /package/src/{components → core/components}/NotFound.tsx +0 -0
  124. /package/src/{contexts → core/contexts}/RouterLayerContext.ts +0 -0
  125. /package/src/{errors → core/errors}/Redirection.ts +0 -0
  126. /package/src/{hooks → core/hooks}/useActive.ts +0 -0
  127. /package/src/{hooks → core/hooks}/useRouter.ts +0 -0
  128. /package/src/{index.shared.ts → core/index.shared.ts} +0 -0
@@ -0,0 +1,595 @@
1
+ import * as alepha23 from "alepha";
2
+ import { Async, Descriptor, KIND, Static, TSchema } from "alepha";
3
+ import { ServerRequest, ServerTimingProvider } from "alepha/server";
4
+ import { FC, ReactNode } from "react";
5
+ import { ServerRouteCache } from "alepha/server/cache";
6
+ import * as typebox0 from "typebox";
7
+
8
+ //#region src/core/components/ClientOnly.d.ts
9
+ interface ClientOnlyProps {
10
+ fallback?: ReactNode;
11
+ disabled?: boolean;
12
+ }
13
+ //#endregion
14
+ //#region src/core/errors/Redirection.d.ts
15
+ /**
16
+ * Used for Redirection during the page loading.
17
+ *
18
+ * Depends on the context, it can be thrown or just returned.
19
+ */
20
+ declare class Redirection extends Error {
21
+ readonly redirect: string;
22
+ constructor(redirect: string);
23
+ }
24
+ //#endregion
25
+ //#region src/core/providers/ReactPageProvider.d.ts
26
+ declare const envSchema$2: alepha23.TObject<{
27
+ REACT_STRICT_MODE: alepha23.TBoolean;
28
+ }>;
29
+ declare module "alepha" {
30
+ interface Env extends Partial<Static<typeof envSchema$2>> {}
31
+ }
32
+ interface PageRouteEntry extends Omit<PageDescriptorOptions, "children" | "parent"> {
33
+ children?: PageRouteEntry[];
34
+ }
35
+ interface PageRoute extends PageRouteEntry {
36
+ type: "page";
37
+ name: string;
38
+ parent?: PageRoute;
39
+ match: string;
40
+ }
41
+ interface Layer {
42
+ config?: {
43
+ query?: Record<string, any>;
44
+ params?: Record<string, any>;
45
+ context?: Record<string, any>;
46
+ };
47
+ name: string;
48
+ props?: Record<string, any>;
49
+ error?: Error;
50
+ part?: string;
51
+ element: ReactNode;
52
+ index: number;
53
+ path: string;
54
+ route?: PageRoute;
55
+ cache?: boolean;
56
+ }
57
+ type PreviousLayerData = Omit<Layer, "element" | "index" | "path">;
58
+ interface ReactRouterState {
59
+ /**
60
+ * Stack of layers for the current page.
61
+ */
62
+ layers: Array<Layer>;
63
+ /**
64
+ * URL of the current page.
65
+ */
66
+ url: URL;
67
+ /**
68
+ * Error handler for the current page.
69
+ */
70
+ onError: ErrorHandler;
71
+ /**
72
+ * Params extracted from the URL for the current page.
73
+ */
74
+ params: Record<string, any>;
75
+ /**
76
+ * Query parameters extracted from the URL for the current page.
77
+ */
78
+ query: Record<string, string>;
79
+ /**
80
+ * Optional meta information associated with the current page.
81
+ */
82
+ meta: Record<string, any>;
83
+ }
84
+ //#endregion
85
+ //#region src/core/services/ReactPageService.d.ts
86
+ declare class ReactPageService {
87
+ fetch(pathname: string, options?: PageDescriptorRenderOptions): Promise<{
88
+ html: string;
89
+ response: Response;
90
+ }>;
91
+ render(name: string, options?: PageDescriptorRenderOptions): Promise<PageDescriptorRenderResult>;
92
+ }
93
+ //#endregion
94
+ //#region src/core/descriptors/$page.d.ts
95
+
96
+ interface PageDescriptorOptions<TConfig extends PageConfigSchema = PageConfigSchema, TProps extends object = TPropsDefault, TPropsParent extends object = TPropsParentDefault> {
97
+ /**
98
+ * Identifier name for the page. Must be unique.
99
+ *
100
+ * @default Descriptor key
101
+ */
102
+ name?: string;
103
+ /**
104
+ * Add a pathname to the page.
105
+ *
106
+ * Pathname can contain parameters, like `/post/:slug`.
107
+ *
108
+ * @default ""
109
+ */
110
+ path?: string;
111
+ /**
112
+ * Add an input schema to define:
113
+ * - `params`: parameters from the pathname.
114
+ * - `query`: query parameters from the URL.
115
+ */
116
+ schema?: TConfig;
117
+ /**
118
+ * Load data before rendering the page.
119
+ *
120
+ * This function receives
121
+ * - the request context and
122
+ * - the parent props (if page has a parent)
123
+ *
124
+ * In SSR, the returned data will be serialized and sent to the client, then reused during the client-side hydration.
125
+ *
126
+ * Resolve can be stopped by throwing an error, which will be handled by the `errorHandler` function.
127
+ * It's common to throw a `NotFoundError` to display a 404 page.
128
+ *
129
+ * RedirectError can be thrown to redirect the user to another page.
130
+ */
131
+ resolve?: (context: PageResolve<TConfig, TPropsParent>) => Async<TProps>;
132
+ /**
133
+ * The component to render when the page is loaded.
134
+ *
135
+ * If `lazy` is defined, this will be ignored.
136
+ * Prefer using `lazy` to improve the initial loading time.
137
+ */
138
+ component?: FC<TProps & TPropsParent>;
139
+ /**
140
+ * Lazy load the component when the page is loaded.
141
+ *
142
+ * It's recommended to use this for components to improve the initial loading time
143
+ * and enable code-splitting.
144
+ */
145
+ lazy?: () => Promise<{
146
+ default: FC<TProps & TPropsParent>;
147
+ }>;
148
+ /**
149
+ * Attach child pages to create nested routes.
150
+ * This will make the page a parent route.
151
+ */
152
+ children?: Array<PageDescriptor> | (() => Array<PageDescriptor>);
153
+ /**
154
+ * Define a parent page for nested routing.
155
+ */
156
+ parent?: PageDescriptor<PageConfigSchema, TPropsParent, any>;
157
+ can?: () => boolean;
158
+ /**
159
+ * Catch any error from the `resolve` function or during `rendering`.
160
+ *
161
+ * Expected to return one of the following:
162
+ * - a ReactNode to render an error page
163
+ * - a Redirection to redirect the user
164
+ * - undefined to let the error propagate
165
+ *
166
+ * If not defined, the error will be thrown and handled by the server or client error handler.
167
+ * If a leaf $page does not define an error handler, the error can be caught by parent pages.
168
+ *
169
+ * @example Catch a 404 from API and render a custom not found component:
170
+ * ```ts
171
+ * resolve: async ({ params, query }) => {
172
+ * api.fetch("/api/resource", { params, query });
173
+ * },
174
+ * errorHandler: (error, context) => {
175
+ * if (HttpError.is(error, 404)) {
176
+ * return <ResourceNotFound />;
177
+ * }
178
+ * }
179
+ * ```
180
+ *
181
+ * @example Catch an 401 error and redirect the user to the login page:
182
+ * ```ts
183
+ * resolve: async ({ params, query }) => {
184
+ * // but the user is not authenticated
185
+ * api.fetch("/api/resource", { params, query });
186
+ * },
187
+ * errorHandler: (error, context) => {
188
+ * if (HttpError.is(error, 401)) {
189
+ * // throwing a Redirection is also valid!
190
+ * return new Redirection("/login");
191
+ * }
192
+ * }
193
+ * ```
194
+ */
195
+ errorHandler?: ErrorHandler;
196
+ /**
197
+ * If true, the page will be considered as a static page, immutable and cacheable.
198
+ * Replace boolean by an object to define static entries. (e.g. list of params/query)
199
+ *
200
+ * Browser-side: it only works with `alepha/vite`, which can pre-render the page at build time.
201
+ *
202
+ * Server-side: It will act as timeless cached page. You can use `cache` to configure the cache behavior.
203
+ */
204
+ static?: boolean | {
205
+ entries?: Array<Partial<PageRequestConfig<TConfig>>>;
206
+ };
207
+ cache?: ServerRouteCache;
208
+ /**
209
+ * If true, force the page to be rendered only on the client-side (browser).
210
+ * It uses the `<ClientOnly/>` component to render the page.
211
+ */
212
+ client?: boolean | ClientOnlyProps;
213
+ /**
214
+ * Called before the server response is sent to the client. (server only)
215
+ */
216
+ onServerResponse?: (request: ServerRequest) => unknown;
217
+ /**
218
+ * Called when user leaves the page. (browser only)
219
+ */
220
+ onLeave?: () => void;
221
+ /**
222
+ * @experimental
223
+ *
224
+ * Add a css animation when the page is loaded or unloaded.
225
+ * It uses CSS animations, so you need to define the keyframes in your CSS.
226
+ *
227
+ * @example Simple animation name
228
+ * ```ts
229
+ * animation: "fadeIn"
230
+ * ```
231
+ *
232
+ * CSS example:
233
+ * ```css
234
+ * @keyframes fadeIn {
235
+ * from { opacity: 0; }
236
+ * to { opacity: 1; }
237
+ * }
238
+ * ```
239
+ *
240
+ * @example Detailed animation
241
+ * ```ts
242
+ * animation: {
243
+ * enter: { name: "fadeIn", duration: 300 },
244
+ * exit: { name: "fadeOut", duration: 200, timing: "ease-in-out" },
245
+ * }
246
+ * ```
247
+ *
248
+ * @example Only exit animation
249
+ * ```ts
250
+ * animation: {
251
+ * exit: "fadeOut"
252
+ * }
253
+ * ```
254
+ *
255
+ * @example With custom timing function
256
+ * ```ts
257
+ * animation: {
258
+ * enter: { name: "fadeIn", duration: 300, timing: "cubic-bezier(0.4, 0, 0.2, 1)" },
259
+ * exit: { name: "fadeOut", duration: 200, timing: "ease-in-out" },
260
+ * }
261
+ * ```
262
+ */
263
+ animation?: PageAnimation;
264
+ }
265
+ type ErrorHandler = (error: Error, state: ReactRouterState) => ReactNode | Redirection | undefined;
266
+ declare class PageDescriptor<TConfig extends PageConfigSchema = PageConfigSchema, TProps extends object = TPropsDefault, TPropsParent extends object = TPropsParentDefault> extends Descriptor<PageDescriptorOptions<TConfig, TProps, TPropsParent>> {
267
+ protected readonly reactPageService: ReactPageService;
268
+ protected onInit(): void;
269
+ get name(): string;
270
+ /**
271
+ * For testing or build purposes.
272
+ *
273
+ * This will render the page (HTML layout included or not) and return the HTML + context.
274
+ * Only valid for server-side rendering, it will throw an error if called on the client-side.
275
+ */
276
+ render(options?: PageDescriptorRenderOptions): Promise<PageDescriptorRenderResult>;
277
+ fetch(options?: PageDescriptorRenderOptions): Promise<{
278
+ html: string;
279
+ response: Response;
280
+ }>;
281
+ match(url: string): boolean;
282
+ pathname(config: any): string;
283
+ }
284
+ interface PageConfigSchema {
285
+ query?: TSchema;
286
+ params?: TSchema;
287
+ }
288
+ type TPropsDefault = any;
289
+ type TPropsParentDefault = {};
290
+ interface PageDescriptorRenderOptions {
291
+ params?: Record<string, string>;
292
+ query?: Record<string, string>;
293
+ /**
294
+ * If true, the HTML layout will be included in the response.
295
+ * If false, only the page content will be returned.
296
+ *
297
+ * @default true
298
+ */
299
+ html?: boolean;
300
+ hydration?: boolean;
301
+ }
302
+ interface PageDescriptorRenderResult {
303
+ html: string;
304
+ state: ReactRouterState;
305
+ redirect?: string;
306
+ }
307
+ interface PageRequestConfig<TConfig extends PageConfigSchema = PageConfigSchema> {
308
+ params: TConfig["params"] extends TSchema ? Static<TConfig["params"]> : Record<string, string>;
309
+ query: TConfig["query"] extends TSchema ? Static<TConfig["query"]> : Record<string, string>;
310
+ }
311
+ type PageResolve<TConfig extends PageConfigSchema = PageConfigSchema, TPropsParent extends object = TPropsParentDefault> = PageRequestConfig<TConfig> & TPropsParent & Omit<ReactRouterState, "layers" | "onError">;
312
+ type PageAnimation = PageAnimationObject | ((state: ReactRouterState) => PageAnimationObject | undefined);
313
+ type PageAnimationObject = CssAnimationName | {
314
+ enter?: CssAnimation | CssAnimationName;
315
+ exit?: CssAnimation | CssAnimationName;
316
+ };
317
+ type CssAnimationName = string;
318
+ type CssAnimation = {
319
+ name: string;
320
+ duration?: number;
321
+ timing?: string;
322
+ };
323
+ //#endregion
324
+ //#region src/core/providers/ReactBrowserProvider.d.ts
325
+ declare const envSchema$1: alepha23.TObject<{
326
+ REACT_ROOT_ID: alepha23.TString;
327
+ }>;
328
+ declare module "alepha" {
329
+ interface Env extends Partial<Static<typeof envSchema$1>> {}
330
+ }
331
+ /**
332
+ * React browser renderer configuration atom
333
+ */
334
+ declare const reactBrowserOptions: alepha23.Atom<alepha23.TObject<{
335
+ scrollRestoration: typebox0.TUnsafe<"top" | "manual">;
336
+ }>, "alepha.react.browser.options">;
337
+ type ReactBrowserRendererOptions = Static<typeof reactBrowserOptions.schema>;
338
+ declare module "alepha" {
339
+ interface State {
340
+ [reactBrowserOptions.key]: ReactBrowserRendererOptions;
341
+ }
342
+ }
343
+ type ReactHydrationState = {
344
+ layers?: Array<PreviousLayerData>;
345
+ } & {
346
+ [key: string]: any;
347
+ };
348
+ //#endregion
349
+ //#region src/core/providers/ReactServerProvider.d.ts
350
+ declare const envSchema: alepha23.TObject<{
351
+ REACT_SSR_ENABLED: alepha23.TOptional<alepha23.TBoolean>;
352
+ REACT_ROOT_ID: alepha23.TString;
353
+ REACT_SERVER_TEMPLATE: alepha23.TOptional<alepha23.TString>;
354
+ }>;
355
+ declare module "alepha" {
356
+ interface Env extends Partial<Static<typeof envSchema>> {}
357
+ interface State {
358
+ "alepha.react.server.ssr"?: boolean;
359
+ }
360
+ }
361
+ /**
362
+ * React server provider configuration atom
363
+ */
364
+ declare const reactServerOptions: alepha23.Atom<alepha23.TObject<{
365
+ publicDir: alepha23.TString;
366
+ staticServer: alepha23.TObject<{
367
+ disabled: alepha23.TBoolean;
368
+ path: alepha23.TString;
369
+ }>;
370
+ }>, "alepha.react.server.options">;
371
+ type ReactServerProviderOptions = Static<typeof reactServerOptions.schema>;
372
+ declare module "alepha" {
373
+ interface State {
374
+ [reactServerOptions.key]: ReactServerProviderOptions;
375
+ }
376
+ }
377
+ //#endregion
378
+ //#region src/core/index.d.ts
379
+ declare module "alepha" {
380
+ interface State {
381
+ "alepha.react.router.state"?: ReactRouterState;
382
+ }
383
+ interface Hooks {
384
+ /**
385
+ * Fires when the React application is starting to be rendered on the server.
386
+ */
387
+ "react:server:render:begin": {
388
+ request?: ServerRequest;
389
+ state: ReactRouterState;
390
+ };
391
+ /**
392
+ * Fires when the React application has been rendered on the server.
393
+ */
394
+ "react:server:render:end": {
395
+ request?: ServerRequest;
396
+ state: ReactRouterState;
397
+ html: string;
398
+ };
399
+ /**
400
+ * Fires when the React application is being rendered on the browser.
401
+ */
402
+ "react:browser:render": {
403
+ root: HTMLElement;
404
+ element: ReactNode;
405
+ state: ReactRouterState;
406
+ hydration?: ReactHydrationState;
407
+ };
408
+ /**
409
+ * Fires when a user action is starting.
410
+ * Action can be a form submission, a route transition, or a custom action.
411
+ */
412
+ "react:action:begin": {
413
+ type: string;
414
+ id?: string;
415
+ };
416
+ /**
417
+ * Fires when a user action has succeeded.
418
+ * Action can be a form submission, a route transition, or a custom action.
419
+ */
420
+ "react:action:success": {
421
+ type: string;
422
+ id?: string;
423
+ };
424
+ /**
425
+ * Fires when a user action has failed.
426
+ * Action can be a form submission, a route transition, or a custom action.
427
+ */
428
+ "react:action:error": {
429
+ type: string;
430
+ id?: string;
431
+ error: Error;
432
+ };
433
+ /**
434
+ * Fires when a user action has completed, regardless of success or failure.
435
+ * Action can be a form submission, a route transition, or a custom action.
436
+ */
437
+ "react:action:end": {
438
+ type: string;
439
+ id?: string;
440
+ };
441
+ /**
442
+ * Fires when a route transition is starting.
443
+ */
444
+ "react:transition:begin": {
445
+ previous: ReactRouterState;
446
+ state: ReactRouterState;
447
+ animation?: PageAnimation;
448
+ };
449
+ /**
450
+ * Fires when a route transition has succeeded.
451
+ */
452
+ "react:transition:success": {
453
+ state: ReactRouterState;
454
+ };
455
+ /**
456
+ * Fires when a route transition has failed.
457
+ */
458
+ "react:transition:error": {
459
+ state: ReactRouterState;
460
+ error: Error;
461
+ };
462
+ /**
463
+ * Fires when a route transition has completed, regardless of success or failure.
464
+ */
465
+ "react:transition:end": {
466
+ state: ReactRouterState;
467
+ };
468
+ }
469
+ }
470
+ /**
471
+ * Provides full-stack React development with declarative routing, server-side rendering, and client-side hydration.
472
+ *
473
+ * The React module enables building modern React applications using the `$page` descriptor on class properties.
474
+ * It delivers seamless server-side rendering, automatic code splitting, and client-side navigation with full
475
+ * type safety and schema validation for route parameters and data.
476
+ *
477
+ * @see {@link $page}
478
+ * @module alepha.react
479
+ */
480
+ //#endregion
481
+ //#region src/head/interfaces/Head.d.ts
482
+ interface Head extends SimpleHead {
483
+ description?: string;
484
+ keywords?: string[];
485
+ author?: string;
486
+ robots?: string;
487
+ themeColor?: string;
488
+ viewport?: string | {
489
+ width?: string;
490
+ height?: string;
491
+ initialScale?: string;
492
+ maximumScale?: string;
493
+ userScalable?: "no" | "yes" | "0" | "1";
494
+ interactiveWidget?: "resizes-visual" | "resizes-content" | "overlays-content";
495
+ };
496
+ og?: {
497
+ title?: string;
498
+ description?: string;
499
+ image?: string;
500
+ url?: string;
501
+ type?: string;
502
+ };
503
+ twitter?: {
504
+ card?: string;
505
+ title?: string;
506
+ description?: string;
507
+ image?: string;
508
+ site?: string;
509
+ };
510
+ }
511
+ interface SimpleHead {
512
+ title?: string;
513
+ titleSeparator?: string;
514
+ htmlAttributes?: Record<string, string>;
515
+ bodyAttributes?: Record<string, string>;
516
+ meta?: Array<{
517
+ name: string;
518
+ content: string;
519
+ }>;
520
+ }
521
+ //#endregion
522
+ //#region src/head/providers/HeadProvider.d.ts
523
+ declare class HeadProvider {
524
+ global?: Head | (() => Head);
525
+ protected getGlobalHead(): Head | undefined;
526
+ fillHead(state: ReactRouterState): void;
527
+ protected fillHeadByPage(page: PageRoute, state: ReactRouterState, props: Record<string, any>): void;
528
+ }
529
+ //#endregion
530
+ //#region src/head/descriptors/$head.d.ts
531
+ /**
532
+ * Set global `<head>` options for the application.
533
+ */
534
+ declare const $head: {
535
+ (options: HeadDescriptorOptions): HeadDescriptor;
536
+ [KIND]: typeof HeadDescriptor;
537
+ };
538
+ type HeadDescriptorOptions = Head | (() => Head);
539
+ declare class HeadDescriptor extends Descriptor<HeadDescriptorOptions> {
540
+ protected readonly provider: HeadProvider;
541
+ protected onInit(): void;
542
+ }
543
+ //#endregion
544
+ //#region src/head/hooks/useHead.d.ts
545
+ /**
546
+ * ```tsx
547
+ * const App = () => {
548
+ * const [head, setHead] = useHead({
549
+ * // will set the document title on the first render
550
+ * title: "My App",
551
+ * });
552
+ *
553
+ * return (
554
+ * // This will update the document title when the button is clicked
555
+ * <button onClick={() => setHead({ title: "Change Title" })}>
556
+ * Change Title {head.title}
557
+ * </button>
558
+ * );
559
+ * }
560
+ * ```
561
+ */
562
+ declare const useHead: (options?: UseHeadOptions) => UseHeadReturn;
563
+ type UseHeadOptions = Head | ((previous?: Head) => Head);
564
+ type UseHeadReturn = [Head, (head?: Head | ((previous?: Head) => Head)) => void];
565
+ //#endregion
566
+ //#region src/head/providers/ServerHeadProvider.d.ts
567
+ declare class ServerHeadProvider {
568
+ protected readonly headProvider: HeadProvider;
569
+ protected readonly serverTimingProvider: ServerTimingProvider;
570
+ protected readonly onServerRenderEnd: alepha23.HookDescriptor<"react:server:render:end">;
571
+ renderHead(template: string, head: SimpleHead): string;
572
+ protected mergeAttributes(existing: string, attrs: Record<string, string>): string;
573
+ protected parseAttributes(attrStr: string): Record<string, string>;
574
+ protected escapeHtml(str: string): string;
575
+ }
576
+ //#endregion
577
+ //#region src/head/index.d.ts
578
+ declare module "@alepha/react" {
579
+ interface PageDescriptorOptions<TConfig extends PageConfigSchema = PageConfigSchema, TProps extends object = TPropsDefault, TPropsParent extends object = TPropsParentDefault> {
580
+ head?: Head | ((props: TProps, previous?: Head) => Head);
581
+ }
582
+ interface ReactRouterState {
583
+ head: Head;
584
+ }
585
+ }
586
+ /**
587
+ * Fill `<head>` server & client side.
588
+ *
589
+ * @see {@link ServerHeadProvider}
590
+ * @module alepha.react.head
591
+ */
592
+ declare const AlephaReactHead: alepha23.Service<alepha23.Module>;
593
+ //#endregion
594
+ export { $head, AlephaReactHead, Head, HeadDescriptor, HeadDescriptorOptions, ServerHeadProvider, SimpleHead, UseHeadOptions, UseHeadReturn, useHead };
595
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/core/components/ClientOnly.tsx","../../src/core/errors/Redirection.ts","../../src/core/providers/ReactPageProvider.ts","../../src/core/services/ReactPageService.ts","../../src/core/descriptors/$page.ts","../../src/core/providers/ReactBrowserProvider.ts","../../src/core/providers/ReactServerProvider.ts","../../src/core/index.ts","../../src/head/interfaces/Head.ts","../../src/head/providers/HeadProvider.ts","../../src/head/descriptors/$head.ts","../../src/head/hooks/useHead.ts","../../src/head/providers/ServerHeadProvider.ts","../../src/head/index.ts"],"sourcesContent":[],"mappings":"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"}