@alepha/react 0.11.10 → 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
@@ -21,33 +21,33 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  }) : target, mod));
22
22
 
23
23
  //#endregion
24
- let __alepha_core = require("@alepha/core");
25
- let __alepha_datetime = require("@alepha/datetime");
26
- let __alepha_server = require("@alepha/server");
27
- let __alepha_server_cache = require("@alepha/server-cache");
28
- let __alepha_server_links = require("@alepha/server-links");
29
- let __alepha_logger = require("@alepha/logger");
24
+ let alepha = require("alepha");
25
+ let alepha_datetime = require("alepha/datetime");
26
+ let alepha_server = require("alepha/server");
27
+ let alepha_server_cache = require("alepha/server/cache");
28
+ let alepha_server_links = require("alepha/server/links");
29
+ let alepha_logger = require("alepha/logger");
30
30
  let react = require("react");
31
31
  react = __toESM(react);
32
32
  let react_jsx_runtime = require("react/jsx-runtime");
33
33
  let node_fs = require("node:fs");
34
34
  let node_path = require("node:path");
35
- let __alepha_server_static = require("@alepha/server-static");
35
+ let alepha_server_static = require("alepha/server/static");
36
36
  let react_dom_server = require("react-dom/server");
37
- let __alepha_router = require("@alepha/router");
37
+ let alepha_router = require("alepha/router");
38
38
 
39
- //#region src/services/ReactPageService.ts
39
+ //#region src/core/services/ReactPageService.ts
40
40
  var ReactPageService = class {
41
41
  fetch(pathname, options = {}) {
42
- throw new __alepha_core.AlephaError("Fetch is not available for this environment.");
42
+ throw new alepha.AlephaError("Fetch is not available for this environment.");
43
43
  }
44
44
  render(name, options = {}) {
45
- throw new __alepha_core.AlephaError("Render is not available for this environment.");
45
+ throw new alepha.AlephaError("Render is not available for this environment.");
46
46
  }
47
47
  };
48
48
 
49
49
  //#endregion
50
- //#region src/descriptors/$page.ts
50
+ //#region src/core/descriptors/$page.ts
51
51
  /**
52
52
  * Main descriptor for defining a React route in the application.
53
53
  *
@@ -137,10 +137,10 @@ var ReactPageService = class {
137
137
  * ```
138
138
  */
139
139
  const $page = (options) => {
140
- return (0, __alepha_core.createDescriptor)(PageDescriptor, options);
140
+ return (0, alepha.createDescriptor)(PageDescriptor, options);
141
141
  };
142
- var PageDescriptor = class extends __alepha_core.Descriptor {
143
- reactPageService = (0, __alepha_core.$inject)(ReactPageService);
142
+ var PageDescriptor = class extends alepha.Descriptor {
143
+ reactPageService = (0, alepha.$inject)(ReactPageService);
144
144
  onInit() {
145
145
  if (this.options.static) this.options.cache ??= { store: {
146
146
  provider: "memory",
@@ -169,10 +169,10 @@ var PageDescriptor = class extends __alepha_core.Descriptor {
169
169
  return this.options.path || "";
170
170
  }
171
171
  };
172
- $page[__alepha_core.KIND] = PageDescriptor;
172
+ $page[alepha.KIND] = PageDescriptor;
173
173
 
174
174
  //#endregion
175
- //#region src/components/ClientOnly.tsx
175
+ //#region src/core/components/ClientOnly.tsx
176
176
  /**
177
177
  * A small utility component that renders its children only on the client side.
178
178
  *
@@ -192,10 +192,10 @@ const ClientOnly = (props) => {
192
192
  var ClientOnly_default = ClientOnly;
193
193
 
194
194
  //#endregion
195
- //#region src/components/ErrorViewer.tsx
196
- const ErrorViewer = ({ error, alepha }) => {
195
+ //#region src/core/components/ErrorViewer.tsx
196
+ const ErrorViewer = ({ error, alepha: alepha$1 }) => {
197
197
  const [expanded, setExpanded] = (0, react.useState)(false);
198
- if (alepha.isProduction()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorViewerProduction, {});
198
+ if (alepha$1.isProduction()) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorViewerProduction, {});
199
199
  const stackLines = error.stack?.split("\n") ?? [];
200
200
  const previewLines = stackLines.slice(0, 5);
201
201
  const hiddenLineCount = stackLines.length - previewLines.length;
@@ -278,6 +278,7 @@ const ErrorViewer = ({ error, alepha }) => {
278
278
  ] }), stackLines.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
279
279
  style: styles.sectionHeader,
280
280
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Stack trace" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
281
+ type: "button",
281
282
  onClick: () => copyToClipboard(error.stack),
282
283
  style: styles.copyButton,
283
284
  children: "Copy all"
@@ -339,11 +340,11 @@ const ErrorViewerProduction = () => {
339
340
  };
340
341
 
341
342
  //#endregion
342
- //#region src/contexts/RouterLayerContext.ts
343
+ //#region src/core/contexts/RouterLayerContext.ts
343
344
  const RouterLayerContext = (0, react.createContext)(void 0);
344
345
 
345
346
  //#endregion
346
- //#region src/errors/Redirection.ts
347
+ //#region src/core/errors/Redirection.ts
347
348
  /**
348
349
  * Used for Redirection during the page loading.
349
350
  *
@@ -358,11 +359,11 @@ var Redirection = class extends Error {
358
359
  };
359
360
 
360
361
  //#endregion
361
- //#region src/contexts/AlephaContext.ts
362
+ //#region src/core/contexts/AlephaContext.ts
362
363
  const AlephaContext = (0, react.createContext)(void 0);
363
364
 
364
365
  //#endregion
365
- //#region src/hooks/useAlepha.ts
366
+ //#region src/core/hooks/useAlepha.ts
366
367
  /**
367
368
  * Main Alepha hook.
368
369
  *
@@ -376,13 +377,13 @@ const AlephaContext = (0, react.createContext)(void 0);
376
377
  * etc...
377
378
  */
378
379
  const useAlepha = () => {
379
- const alepha = (0, react.useContext)(AlephaContext);
380
- if (!alepha) throw new __alepha_core.AlephaError("Hook 'useAlepha()' must be used within an AlephaContext.Provider");
381
- return alepha;
380
+ const alepha$1 = (0, react.useContext)(AlephaContext);
381
+ if (!alepha$1) throw new alepha.AlephaError("Hook 'useAlepha()' must be used within an AlephaContext.Provider");
382
+ return alepha$1;
382
383
  };
383
384
 
384
385
  //#endregion
385
- //#region src/hooks/useEvents.ts
386
+ //#region src/core/hooks/useEvents.ts
386
387
  /**
387
388
  * Allow subscribing to multiple Alepha events. See {@link Hooks} for available events.
388
389
  *
@@ -407,11 +408,11 @@ const useAlepha = () => {
407
408
  * ```
408
409
  */
409
410
  const useEvents = (opts, deps) => {
410
- const alepha = useAlepha();
411
+ const alepha$1 = useAlepha();
411
412
  (0, react.useEffect)(() => {
412
- if (!alepha.isBrowser()) return;
413
+ if (!alepha$1.isBrowser()) return;
413
414
  const subs = [];
414
- for (const [name, hook] of Object.entries(opts)) subs.push(alepha.events.on(name, hook));
415
+ for (const [name, hook] of Object.entries(opts)) subs.push(alepha$1.events.on(name, hook));
415
416
  return () => {
416
417
  for (const clear of subs) clear();
417
418
  };
@@ -419,35 +420,35 @@ const useEvents = (opts, deps) => {
419
420
  };
420
421
 
421
422
  //#endregion
422
- //#region src/hooks/useStore.ts
423
+ //#region src/core/hooks/useStore.ts
423
424
  function useStore(target, defaultValue) {
424
- const alepha = useAlepha();
425
+ const alepha$1 = useAlepha();
425
426
  (0, react.useMemo)(() => {
426
- if (defaultValue != null && alepha.state.get(target) == null) alepha.state.set(target, defaultValue);
427
+ if (defaultValue != null && alepha$1.state.get(target) == null) alepha$1.state.set(target, defaultValue);
427
428
  }, [defaultValue]);
428
- const [state, setState] = (0, react.useState)(alepha.state.get(target));
429
+ const [state, setState] = (0, react.useState)(alepha$1.state.get(target));
429
430
  (0, react.useEffect)(() => {
430
- if (!alepha.isBrowser()) return;
431
- const key = target instanceof __alepha_core.Atom ? target.key : target;
432
- return alepha.events.on("state:mutate", (ev) => {
431
+ if (!alepha$1.isBrowser()) return;
432
+ const key = target instanceof alepha.Atom ? target.key : target;
433
+ return alepha$1.events.on("state:mutate", (ev) => {
433
434
  if (ev.key === key) setState(ev.value);
434
435
  });
435
436
  }, []);
436
437
  return [state, (value) => {
437
- alepha.state.set(target, value);
438
+ alepha$1.state.set(target, value);
438
439
  }];
439
440
  }
440
441
 
441
442
  //#endregion
442
- //#region src/hooks/useRouterState.ts
443
+ //#region src/core/hooks/useRouterState.ts
443
444
  const useRouterState = () => {
444
445
  const [state] = useStore("alepha.react.router.state");
445
- if (!state) throw new __alepha_core.AlephaError("Missing react router state");
446
+ if (!state) throw new alepha.AlephaError("Missing react router state");
446
447
  return state;
447
448
  };
448
449
 
449
450
  //#endregion
450
- //#region src/components/ErrorBoundary.tsx
451
+ //#region src/core/components/ErrorBoundary.tsx
451
452
  /**
452
453
  * A reusable error boundary for catching rendering errors
453
454
  * in any part of the React component tree.
@@ -478,7 +479,7 @@ var ErrorBoundary = class extends react.default.Component {
478
479
  var ErrorBoundary_default = ErrorBoundary;
479
480
 
480
481
  //#endregion
481
- //#region src/components/NestedView.tsx
482
+ //#region src/core/components/NestedView.tsx
482
483
  /**
483
484
  * A component that renders the current view of the nested router layer.
484
485
  *
@@ -486,7 +487,7 @@ var ErrorBoundary_default = ErrorBoundary;
486
487
  *
487
488
  * @example
488
489
  * ```tsx
489
- * import { NestedView } from "alepha/react";
490
+ * import { NestedView } from "@alepha/react";
490
491
  *
491
492
  * class App {
492
493
  * parent = $page({
@@ -600,7 +601,7 @@ function parseAnimation(animationLike, state, type = "enter") {
600
601
  }
601
602
 
602
603
  //#endregion
603
- //#region src/components/NotFound.tsx
604
+ //#region src/core/components/NotFound.tsx
604
605
  function NotFoundPage(props) {
605
606
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
606
607
  style: {
@@ -625,12 +626,12 @@ function NotFoundPage(props) {
625
626
  }
626
627
 
627
628
  //#endregion
628
- //#region src/providers/ReactPageProvider.ts
629
- const envSchema$2 = __alepha_core.t.object({ REACT_STRICT_MODE: __alepha_core.t.boolean({ default: true }) });
629
+ //#region src/core/providers/ReactPageProvider.ts
630
+ const envSchema$2 = alepha.t.object({ REACT_STRICT_MODE: alepha.t.boolean({ default: true }) });
630
631
  var ReactPageProvider = class {
631
- log = (0, __alepha_logger.$logger)();
632
- env = (0, __alepha_core.$env)(envSchema$2);
633
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
632
+ log = (0, alepha_logger.$logger)();
633
+ env = (0, alepha.$env)(envSchema$2);
634
+ alepha = (0, alepha.$inject)(alepha.Alepha);
634
635
  pages = [];
635
636
  getPages() {
636
637
  return this.pages;
@@ -662,7 +663,7 @@ var ReactPageProvider = class {
662
663
  }
663
664
  page(name) {
664
665
  for (const page of this.pages) if (page.name === name) return page;
665
- throw new __alepha_core.AlephaError(`Page '${name}' not found`);
666
+ throw new alepha.AlephaError(`Page '${name}' not found`);
666
667
  }
667
668
  pathname(name, options = {}) {
668
669
  const page = this.page(name);
@@ -689,8 +690,8 @@ var ReactPageProvider = class {
689
690
  return root;
690
691
  }
691
692
  convertStringObjectToObject = (schema, value) => {
692
- if (__alepha_core.t.schema.isObject(schema) && typeof value === "object") {
693
- for (const key in schema.properties) if (__alepha_core.t.schema.isObject(schema.properties[key]) && typeof value[key] === "string") try {
693
+ if (alepha.t.schema.isObject(schema) && typeof value === "object") {
694
+ for (const key in schema.properties) if (alepha.t.schema.isObject(schema.properties[key]) && typeof value[key] === "string") try {
694
695
  value[key] = this.alepha.codec.decode(schema.properties[key], decodeURIComponent(value[key]));
695
696
  } catch (e) {}
696
697
  }
@@ -875,7 +876,7 @@ var ReactPageProvider = class {
875
876
  path
876
877
  } }, element);
877
878
  }
878
- configure = (0, __alepha_core.$hook)({
879
+ configure = (0, alepha.$hook)({
879
880
  on: "configure",
880
881
  handler: () => {
881
882
  let hasNotFoundHandler = false;
@@ -916,7 +917,7 @@ var ReactPageProvider = class {
916
917
  };
917
918
  }
918
919
  add(entry) {
919
- if (this.alepha.isReady()) throw new __alepha_core.AlephaError("Router is already initialized");
920
+ if (this.alepha.isReady()) throw new alepha.AlephaError("Router is already initialized");
920
921
  entry.name ??= this.nextId();
921
922
  const page = entry;
922
923
  page.match = this.createMatch(page);
@@ -948,22 +949,22 @@ const isPageRoute = (it) => {
948
949
  };
949
950
 
950
951
  //#endregion
951
- //#region src/providers/ReactServerProvider.ts
952
- const envSchema$1 = __alepha_core.t.object({
953
- REACT_SSR_ENABLED: __alepha_core.t.optional(__alepha_core.t.boolean()),
954
- REACT_ROOT_ID: __alepha_core.t.text({ default: "root" }),
955
- REACT_SERVER_TEMPLATE: __alepha_core.t.optional(__alepha_core.t.text({ size: "rich" }))
952
+ //#region src/core/providers/ReactServerProvider.ts
953
+ const envSchema$1 = alepha.t.object({
954
+ REACT_SSR_ENABLED: alepha.t.optional(alepha.t.boolean()),
955
+ REACT_ROOT_ID: alepha.t.text({ default: "root" }),
956
+ REACT_SERVER_TEMPLATE: alepha.t.optional(alepha.t.text({ size: "rich" }))
956
957
  });
957
958
  /**
958
959
  * React server provider configuration atom
959
960
  */
960
- const reactServerOptions = (0, __alepha_core.$atom)({
961
+ const reactServerOptions = (0, alepha.$atom)({
961
962
  name: "alepha.react.server.options",
962
- schema: __alepha_core.t.object({
963
- publicDir: __alepha_core.t.string(),
964
- staticServer: __alepha_core.t.object({
965
- disabled: __alepha_core.t.boolean(),
966
- path: __alepha_core.t.string({ description: "URL path where static files will be served." })
963
+ schema: alepha.t.object({
964
+ publicDir: alepha.t.string(),
965
+ staticServer: alepha.t.object({
966
+ disabled: alepha.t.boolean(),
967
+ path: alepha.t.string({ description: "URL path where static files will be served." })
967
968
  })
968
969
  }),
969
970
  default: {
@@ -975,21 +976,21 @@ const reactServerOptions = (0, __alepha_core.$atom)({
975
976
  }
976
977
  });
977
978
  var ReactServerProvider = class {
978
- log = (0, __alepha_logger.$logger)();
979
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
980
- env = (0, __alepha_core.$env)(envSchema$1);
981
- pageApi = (0, __alepha_core.$inject)(ReactPageProvider);
982
- serverProvider = (0, __alepha_core.$inject)(__alepha_server.ServerProvider);
983
- serverStaticProvider = (0, __alepha_core.$inject)(__alepha_server_static.ServerStaticProvider);
984
- serverRouterProvider = (0, __alepha_core.$inject)(__alepha_server.ServerRouterProvider);
985
- serverTimingProvider = (0, __alepha_core.$inject)(__alepha_server.ServerTimingProvider);
979
+ log = (0, alepha_logger.$logger)();
980
+ alepha = (0, alepha.$inject)(alepha.Alepha);
981
+ env = (0, alepha.$env)(envSchema$1);
982
+ pageApi = (0, alepha.$inject)(ReactPageProvider);
983
+ serverProvider = (0, alepha.$inject)(alepha_server.ServerProvider);
984
+ serverStaticProvider = (0, alepha.$inject)(alepha_server_static.ServerStaticProvider);
985
+ serverRouterProvider = (0, alepha.$inject)(alepha_server.ServerRouterProvider);
986
+ serverTimingProvider = (0, alepha.$inject)(alepha_server.ServerTimingProvider);
986
987
  ROOT_DIV_REGEX = new RegExp(`<div([^>]*)\\s+id=["']${this.env.REACT_ROOT_ID}["']([^>]*)>(.*?)<\\/div>`, "is");
987
988
  preprocessedTemplate = null;
988
- options = (0, __alepha_core.$use)(reactServerOptions);
989
+ options = (0, alepha.$use)(reactServerOptions);
989
990
  /**
990
991
  * Configure the React server provider.
991
992
  */
992
- onConfigure = (0, __alepha_core.$hook)({
993
+ onConfigure = (0, alepha.$hook)({
993
994
  on: "configure",
994
995
  handler: async () => {
995
996
  const ssrEnabled = this.alepha.descriptors($page).length > 0 && this.env.REACT_SSR_ENABLED !== false;
@@ -1123,7 +1124,7 @@ var ReactServerProvider = class {
1123
1124
  return async (serverRequest) => {
1124
1125
  const { url, reply, query, params } = serverRequest;
1125
1126
  const template = await templateLoader();
1126
- if (!template) throw new __alepha_core.AlephaError("Missing template for SSR rendering");
1127
+ if (!template) throw new alepha.AlephaError("Missing template for SSR rendering");
1127
1128
  this.log.trace("Rendering page", { name: route.name });
1128
1129
  const state = {
1129
1130
  url,
@@ -1132,7 +1133,7 @@ var ReactServerProvider = class {
1132
1133
  onError: () => null,
1133
1134
  layers: []
1134
1135
  };
1135
- if (this.alepha.has(__alepha_server_links.ServerLinksProvider)) this.alepha.state.set("alepha.server.request.apiLinks", await this.alepha.inject(__alepha_server_links.ServerLinksProvider).getUserApiLinks({
1136
+ if (this.alepha.has(alepha_server_links.ServerLinksProvider)) this.alepha.state.set("alepha.server.request.apiLinks", await this.alepha.inject(alepha_server_links.ServerLinksProvider).getUserApiLinks({
1136
1137
  user: serverRequest.user,
1137
1138
  authorization: serverRequest.headers.authorization
1138
1139
  }));
@@ -1254,10 +1255,10 @@ var ReactServerProvider = class {
1254
1255
  };
1255
1256
 
1256
1257
  //#endregion
1257
- //#region src/services/ReactPageServerService.ts
1258
+ //#region src/core/services/ReactPageServerService.ts
1258
1259
  var ReactPageServerService = class extends ReactPageService {
1259
- reactServerProvider = (0, __alepha_core.$inject)(ReactServerProvider);
1260
- serverProvider = (0, __alepha_core.$inject)(__alepha_server.ServerProvider);
1260
+ reactServerProvider = (0, alepha.$inject)(ReactServerProvider);
1261
+ serverProvider = (0, alepha.$inject)(alepha_server.ServerProvider);
1261
1262
  async render(name, options = {}) {
1262
1263
  return this.reactServerProvider.render(name, options);
1263
1264
  }
@@ -1273,20 +1274,20 @@ var ReactPageServerService = class extends ReactPageService {
1273
1274
  html: match[3],
1274
1275
  response
1275
1276
  };
1276
- throw new __alepha_core.AlephaError("Invalid HTML response");
1277
+ throw new alepha.AlephaError("Invalid HTML response");
1277
1278
  }
1278
1279
  };
1279
1280
 
1280
1281
  //#endregion
1281
- //#region src/providers/ReactBrowserRouterProvider.ts
1282
- var ReactBrowserRouterProvider = class extends __alepha_router.RouterProvider {
1283
- log = (0, __alepha_logger.$logger)();
1284
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
1285
- pageApi = (0, __alepha_core.$inject)(ReactPageProvider);
1282
+ //#region src/core/providers/ReactBrowserRouterProvider.ts
1283
+ var ReactBrowserRouterProvider = class extends alepha_router.RouterProvider {
1284
+ log = (0, alepha_logger.$logger)();
1285
+ alepha = (0, alepha.$inject)(alepha.Alepha);
1286
+ pageApi = (0, alepha.$inject)(ReactPageProvider);
1286
1287
  add(entry) {
1287
1288
  this.pageApi.add(entry);
1288
1289
  }
1289
- configure = (0, __alepha_core.$hook)({
1290
+ configure = (0, alepha.$hook)({
1290
1291
  on: "configure",
1291
1292
  handler: async () => {
1292
1293
  for (const page of this.pageApi.getPages()) if (page.component || page.lazy) this.push({
@@ -1359,24 +1360,24 @@ var ReactBrowserRouterProvider = class extends __alepha_router.RouterProvider {
1359
1360
  };
1360
1361
 
1361
1362
  //#endregion
1362
- //#region src/providers/ReactBrowserProvider.ts
1363
- const envSchema = __alepha_core.t.object({ REACT_ROOT_ID: __alepha_core.t.text({ default: "root" }) });
1363
+ //#region src/core/providers/ReactBrowserProvider.ts
1364
+ const envSchema = alepha.t.object({ REACT_ROOT_ID: alepha.t.text({ default: "root" }) });
1364
1365
  /**
1365
1366
  * React browser renderer configuration atom
1366
1367
  */
1367
- const reactBrowserOptions = (0, __alepha_core.$atom)({
1368
+ const reactBrowserOptions = (0, alepha.$atom)({
1368
1369
  name: "alepha.react.browser.options",
1369
- schema: __alepha_core.t.object({ scrollRestoration: __alepha_core.t.enum(["top", "manual"]) }),
1370
+ schema: alepha.t.object({ scrollRestoration: alepha.t.enum(["top", "manual"]) }),
1370
1371
  default: { scrollRestoration: "top" }
1371
1372
  });
1372
1373
  var ReactBrowserProvider = class {
1373
- env = (0, __alepha_core.$env)(envSchema);
1374
- log = (0, __alepha_logger.$logger)();
1375
- client = (0, __alepha_core.$inject)(__alepha_server_links.LinkProvider);
1376
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
1377
- router = (0, __alepha_core.$inject)(ReactBrowserRouterProvider);
1378
- dateTimeProvider = (0, __alepha_core.$inject)(__alepha_datetime.DateTimeProvider);
1379
- options = (0, __alepha_core.$use)(reactBrowserOptions);
1374
+ env = (0, alepha.$env)(envSchema);
1375
+ log = (0, alepha_logger.$logger)();
1376
+ client = (0, alepha.$inject)(alepha_server_links.LinkProvider);
1377
+ alepha = (0, alepha.$inject)(alepha.Alepha);
1378
+ router = (0, alepha.$inject)(ReactBrowserRouterProvider);
1379
+ dateTimeProvider = (0, alepha.$inject)(alepha_datetime.DateTimeProvider);
1380
+ options = (0, alepha.$use)(reactBrowserOptions);
1380
1381
  getRootElement() {
1381
1382
  const root = this.document.getElementById(this.env.REACT_ROOT_ID);
1382
1383
  if (root) return root;
@@ -1489,7 +1490,7 @@ var ReactBrowserProvider = class {
1489
1490
  console.error(error);
1490
1491
  }
1491
1492
  }
1492
- onTransitionEnd = (0, __alepha_core.$hook)({
1493
+ onTransitionEnd = (0, alepha.$hook)({
1493
1494
  on: "react:transition:end",
1494
1495
  handler: () => {
1495
1496
  if (this.options.scrollRestoration === "top" && typeof window !== "undefined" && !this.alepha.isTest()) {
@@ -1498,7 +1499,7 @@ var ReactBrowserProvider = class {
1498
1499
  }
1499
1500
  }
1500
1501
  });
1501
- ready = (0, __alepha_core.$hook)({
1502
+ ready = (0, alepha.$hook)({
1502
1503
  on: "ready",
1503
1504
  handler: async () => {
1504
1505
  const hydration = this.getHydrationState();
@@ -1524,10 +1525,10 @@ var ReactBrowserProvider = class {
1524
1525
  };
1525
1526
 
1526
1527
  //#endregion
1527
- //#region src/services/ReactRouter.ts
1528
+ //#region src/core/services/ReactRouter.ts
1528
1529
  var ReactRouter = class {
1529
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
1530
- pageApi = (0, __alepha_core.$inject)(ReactPageProvider);
1530
+ alepha = (0, alepha.$inject)(alepha.Alepha);
1531
+ pageApi = (0, alepha.$inject)(ReactPageProvider);
1531
1532
  get state() {
1532
1533
  return this.alepha.state.get("alepha.react.router.state");
1533
1534
  }
@@ -1637,18 +1638,18 @@ var ReactRouter = class {
1637
1638
  };
1638
1639
 
1639
1640
  //#endregion
1640
- //#region src/hooks/useInject.ts
1641
+ //#region src/core/hooks/useInject.ts
1641
1642
  /**
1642
1643
  * Hook to inject a service instance.
1643
1644
  * It's a wrapper of `useAlepha().inject(service)` with a memoization.
1644
1645
  */
1645
1646
  const useInject = (service) => {
1646
- const alepha = useAlepha();
1647
- return (0, react.useMemo)(() => alepha.inject(service), []);
1647
+ const alepha$1 = useAlepha();
1648
+ return (0, react.useMemo)(() => alepha$1.inject(service), []);
1648
1649
  };
1649
1650
 
1650
1651
  //#endregion
1651
- //#region src/hooks/useRouter.ts
1652
+ //#region src/core/hooks/useRouter.ts
1652
1653
  /**
1653
1654
  * Use this hook to access the React Router instance.
1654
1655
  *
@@ -1668,7 +1669,7 @@ const useRouter = () => {
1668
1669
  };
1669
1670
 
1670
1671
  //#endregion
1671
- //#region src/components/Link.tsx
1672
+ //#region src/core/components/Link.tsx
1672
1673
  const Link = (props) => {
1673
1674
  const router = useRouter();
1674
1675
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
@@ -1680,7 +1681,7 @@ const Link = (props) => {
1680
1681
  var Link_default = Link;
1681
1682
 
1682
1683
  //#endregion
1683
- //#region src/hooks/useAction.ts
1684
+ //#region src/core/hooks/useAction.ts
1684
1685
  /**
1685
1686
  * Hook for handling async actions with automatic error handling and event emission.
1686
1687
  *
@@ -1786,8 +1787,8 @@ var Link_default = Link;
1786
1787
  * ```
1787
1788
  */
1788
1789
  function useAction(options, deps) {
1789
- const alepha = useAlepha();
1790
- const dateTimeProvider = useInject(__alepha_datetime.DateTimeProvider);
1790
+ const alepha$1 = useAlepha();
1791
+ const dateTimeProvider = useInject(alepha_datetime.DateTimeProvider);
1791
1792
  const [loading, setLoading] = (0, react.useState)(false);
1792
1793
  const [error, setError] = (0, react.useState)();
1793
1794
  const isExecutingRef = (0, react.useRef)(false);
@@ -1820,14 +1821,14 @@ function useAction(options, deps) {
1820
1821
  isExecutingRef.current = true;
1821
1822
  setLoading(true);
1822
1823
  setError(void 0);
1823
- await alepha.events.emit("react:action:begin", {
1824
+ await alepha$1.events.emit("react:action:begin", {
1824
1825
  type: "custom",
1825
1826
  id: options.id
1826
1827
  });
1827
1828
  try {
1828
1829
  const result = await options.handler(...args, { signal: abortController.signal });
1829
1830
  if (!isMountedRef.current || abortController.signal.aborted) return;
1830
- await alepha.events.emit("react:action:success", {
1831
+ await alepha$1.events.emit("react:action:success", {
1831
1832
  type: "custom",
1832
1833
  id: options.id
1833
1834
  });
@@ -1838,7 +1839,7 @@ function useAction(options, deps) {
1838
1839
  if (!isMountedRef.current) return;
1839
1840
  const error$1 = err;
1840
1841
  setError(error$1);
1841
- await alepha.events.emit("react:action:error", {
1842
+ await alepha$1.events.emit("react:action:error", {
1842
1843
  type: "custom",
1843
1844
  id: options.id,
1844
1845
  error: error$1
@@ -1848,7 +1849,7 @@ function useAction(options, deps) {
1848
1849
  } finally {
1849
1850
  isExecutingRef.current = false;
1850
1851
  setLoading(false);
1851
- await alepha.events.emit("react:action:end", {
1852
+ await alepha$1.events.emit("react:action:end", {
1852
1853
  type: "custom",
1853
1854
  id: options.id
1854
1855
  });
@@ -1907,7 +1908,7 @@ function useAction(options, deps) {
1907
1908
  }
1908
1909
 
1909
1910
  //#endregion
1910
- //#region src/hooks/useActive.ts
1911
+ //#region src/core/hooks/useActive.ts
1911
1912
  const useActive = (args) => {
1912
1913
  const router = useRouter();
1913
1914
  const [isPending, setPending] = (0, react.useState)(false);
@@ -1940,70 +1941,70 @@ const useActive = (args) => {
1940
1941
  };
1941
1942
 
1942
1943
  //#endregion
1943
- //#region src/hooks/useClient.ts
1944
+ //#region src/core/hooks/useClient.ts
1944
1945
  /**
1945
1946
  * Hook to get a virtual client for the specified scope.
1946
1947
  *
1947
1948
  * It's the React-hook version of `$client()`, from `AlephaServerLinks` module.
1948
1949
  */
1949
1950
  const useClient = (scope) => {
1950
- return useInject(__alepha_server_links.LinkProvider).client(scope);
1951
+ return useInject(alepha_server_links.LinkProvider).client(scope);
1951
1952
  };
1952
1953
 
1953
1954
  //#endregion
1954
- //#region src/hooks/useQueryParams.ts
1955
+ //#region src/core/hooks/useQueryParams.ts
1955
1956
  /**
1956
1957
  * Not well tested. Use with caution.
1957
1958
  */
1958
1959
  const useQueryParams = (schema, options = {}) => {
1959
- const alepha = useAlepha();
1960
+ const alepha$1 = useAlepha();
1960
1961
  const key = options.key ?? "q";
1961
1962
  const router = useRouter();
1962
1963
  const querystring = router.query[key];
1963
- const [queryParams = {}, setQueryParams] = (0, react.useState)(decode(alepha, schema, router.query[key]));
1964
+ const [queryParams = {}, setQueryParams] = (0, react.useState)(decode(alepha$1, schema, router.query[key]));
1964
1965
  (0, react.useEffect)(() => {
1965
- setQueryParams(decode(alepha, schema, querystring));
1966
+ setQueryParams(decode(alepha$1, schema, querystring));
1966
1967
  }, [querystring]);
1967
1968
  return [queryParams, (queryParams$1) => {
1968
1969
  setQueryParams(queryParams$1);
1969
1970
  router.setQueryParams((data) => {
1970
1971
  return {
1971
1972
  ...data,
1972
- [key]: encode(alepha, schema, queryParams$1)
1973
+ [key]: encode(alepha$1, schema, queryParams$1)
1973
1974
  };
1974
1975
  });
1975
1976
  }];
1976
1977
  };
1977
- const encode = (alepha, schema, data) => {
1978
- return btoa(JSON.stringify(alepha.codec.decode(schema, data)));
1978
+ const encode = (alepha$1, schema, data) => {
1979
+ return btoa(JSON.stringify(alepha$1.codec.decode(schema, data)));
1979
1980
  };
1980
- const decode = (alepha, schema, data) => {
1981
+ const decode = (alepha$1, schema, data) => {
1981
1982
  try {
1982
- return alepha.codec.decode(schema, JSON.parse(atob(decodeURIComponent(data))));
1983
+ return alepha$1.codec.decode(schema, JSON.parse(atob(decodeURIComponent(data))));
1983
1984
  } catch {
1984
1985
  return;
1985
1986
  }
1986
1987
  };
1987
1988
 
1988
1989
  //#endregion
1989
- //#region src/hooks/useSchema.ts
1990
+ //#region src/core/hooks/useSchema.ts
1990
1991
  const useSchema = (action) => {
1991
1992
  const name = action.name;
1992
- const alepha = useAlepha();
1993
- const httpClient = useInject(__alepha_server.HttpClient);
1994
- const [schema, setSchema] = (0, react.useState)(ssrSchemaLoading(alepha, name));
1993
+ const alepha$1 = useAlepha();
1994
+ const httpClient = useInject(alepha_server.HttpClient);
1995
+ const [schema, setSchema] = (0, react.useState)(ssrSchemaLoading(alepha$1, name));
1995
1996
  (0, react.useEffect)(() => {
1996
1997
  if (!schema.loading) return;
1997
- httpClient.fetch(`${__alepha_server_links.LinkProvider.path.apiLinks}/${name}/schema`, { localCache: true }).then((it) => setSchema(it.data));
1998
+ httpClient.fetch(`${alepha_server_links.LinkProvider.path.apiLinks}/${name}/schema`, { localCache: true }).then((it) => setSchema(it.data));
1998
1999
  }, [name]);
1999
2000
  return schema;
2000
2001
  };
2001
2002
  /**
2002
2003
  * Get an action schema during server-side rendering (SSR) or client-side rendering (CSR).
2003
2004
  */
2004
- const ssrSchemaLoading = (alepha, name) => {
2005
- if (!alepha.isBrowser()) {
2006
- const linkProvider = alepha.inject(__alepha_server_links.LinkProvider);
2005
+ const ssrSchemaLoading = (alepha$1, name) => {
2006
+ if (!alepha$1.isBrowser()) {
2007
+ const linkProvider = alepha$1.inject(alepha_server_links.LinkProvider);
2007
2008
  const can = linkProvider.getServerLinks().find((link) => link.name === name);
2008
2009
  if (can) {
2009
2010
  const schema$1 = linkProvider.links.find((it) => it.name === name)?.schema;
@@ -2014,13 +2015,13 @@ const ssrSchemaLoading = (alepha, name) => {
2014
2015
  }
2015
2016
  return { loading: true };
2016
2017
  }
2017
- const schema = alepha.inject(__alepha_server_links.LinkProvider).links.find((it) => it.name === name)?.schema;
2018
+ const schema = alepha$1.inject(alepha_server_links.LinkProvider).links.find((it) => it.name === name)?.schema;
2018
2019
  if (schema) return schema;
2019
2020
  return { loading: true };
2020
2021
  };
2021
2022
 
2022
2023
  //#endregion
2023
- //#region src/index.ts
2024
+ //#region src/core/index.ts
2024
2025
  /**
2025
2026
  * Provides full-stack React development with declarative routing, server-side rendering, and client-side hydration.
2026
2027
  *
@@ -2031,7 +2032,7 @@ const ssrSchemaLoading = (alepha, name) => {
2031
2032
  * @see {@link $page}
2032
2033
  * @module alepha.react
2033
2034
  */
2034
- const AlephaReact = (0, __alepha_core.$module)({
2035
+ const AlephaReact = (0, alepha.$module)({
2035
2036
  name: "alepha.react",
2036
2037
  descriptors: [$page],
2037
2038
  services: [
@@ -2041,7 +2042,7 @@ const AlephaReact = (0, __alepha_core.$module)({
2041
2042
  ReactPageService,
2042
2043
  ReactPageServerService
2043
2044
  ],
2044
- register: (alepha) => alepha.with(__alepha_datetime.AlephaDateTime).with(__alepha_server.AlephaServer).with(__alepha_server_cache.AlephaServerCache).with(__alepha_server_links.AlephaServerLinks).with({
2045
+ register: (alepha$1) => alepha$1.with(alepha_datetime.AlephaDateTime).with(alepha_server.AlephaServer).with(alepha_server_cache.AlephaServerCache).with(alepha_server_links.AlephaServerLinks).with({
2045
2046
  provide: ReactPageService,
2046
2047
  use: ReactPageServerService
2047
2048
  }).with(ReactServerProvider).with(ReactPageProvider).with(ReactRouter)