@fluxfast/react 0.0.0-oidc-bootstrap.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.
Files changed (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/dist/client.d.ts +10 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +41 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +17 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +3 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/document.d.ts +7 -0
  12. package/dist/document.d.ts.map +1 -0
  13. package/dist/document.js +10 -0
  14. package/dist/document.js.map +1 -0
  15. package/dist/esm/client.js +35 -0
  16. package/dist/esm/client.js.map +1 -0
  17. package/dist/esm/config.js +2 -0
  18. package/dist/esm/config.js.map +1 -0
  19. package/dist/esm/document.js +7 -0
  20. package/dist/esm/document.js.map +1 -0
  21. package/dist/esm/form.js +204 -0
  22. package/dist/esm/form.js.map +1 -0
  23. package/dist/esm/hooks.js +50 -0
  24. package/dist/esm/hooks.js.map +1 -0
  25. package/dist/esm/hydration.js +40 -0
  26. package/dist/esm/hydration.js.map +1 -0
  27. package/dist/esm/index.js +11 -0
  28. package/dist/esm/index.js.map +1 -0
  29. package/dist/esm/link.js +61 -0
  30. package/dist/esm/link.js.map +1 -0
  31. package/dist/esm/live.js +17 -0
  32. package/dist/esm/live.js.map +1 -0
  33. package/dist/esm/package.json +3 -0
  34. package/dist/esm/provider.js +77 -0
  35. package/dist/esm/provider.js.map +1 -0
  36. package/dist/esm/resolver.js +31 -0
  37. package/dist/esm/resolver.js.map +1 -0
  38. package/dist/esm/root.js +40 -0
  39. package/dist/esm/root.js.map +1 -0
  40. package/dist/esm/server/handler.js +115 -0
  41. package/dist/esm/server/handler.js.map +1 -0
  42. package/dist/esm/server/index.js +4 -0
  43. package/dist/esm/server/index.js.map +1 -0
  44. package/dist/esm/server/render.js +70 -0
  45. package/dist/esm/server/render.js.map +1 -0
  46. package/dist/form.d.ts +31 -0
  47. package/dist/form.d.ts.map +1 -0
  48. package/dist/form.js +207 -0
  49. package/dist/form.js.map +1 -0
  50. package/dist/hooks.d.ts +20 -0
  51. package/dist/hooks.d.ts.map +1 -0
  52. package/dist/hooks.js +58 -0
  53. package/dist/hooks.js.map +1 -0
  54. package/dist/hydration.d.ts +5 -0
  55. package/dist/hydration.d.ts.map +1 -0
  56. package/dist/hydration.js +44 -0
  57. package/dist/hydration.js.map +1 -0
  58. package/dist/index.d.ts +10 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +27 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/link.d.ts +10 -0
  63. package/dist/link.d.ts.map +1 -0
  64. package/dist/link.js +65 -0
  65. package/dist/link.js.map +1 -0
  66. package/dist/live.d.ts +5 -0
  67. package/dist/live.d.ts.map +1 -0
  68. package/dist/live.js +20 -0
  69. package/dist/live.js.map +1 -0
  70. package/dist/provider.d.ts +22 -0
  71. package/dist/provider.d.ts.map +1 -0
  72. package/dist/provider.js +82 -0
  73. package/dist/provider.js.map +1 -0
  74. package/dist/resolver.d.ts +13 -0
  75. package/dist/resolver.d.ts.map +1 -0
  76. package/dist/resolver.js +39 -0
  77. package/dist/resolver.js.map +1 -0
  78. package/dist/root.d.ts +15 -0
  79. package/dist/root.d.ts.map +1 -0
  80. package/dist/root.js +43 -0
  81. package/dist/root.js.map +1 -0
  82. package/dist/server/handler.d.ts +20 -0
  83. package/dist/server/handler.d.ts.map +1 -0
  84. package/dist/server/handler.js +118 -0
  85. package/dist/server/handler.js.map +1 -0
  86. package/dist/server/index.d.ts +6 -0
  87. package/dist/server/index.d.ts.map +1 -0
  88. package/dist/server/index.js +9 -0
  89. package/dist/server/index.js.map +1 -0
  90. package/dist/server/render.d.ts +11 -0
  91. package/dist/server/render.d.ts.map +1 -0
  92. package/dist/server/render.js +77 -0
  93. package/dist/server/render.js.map +1 -0
  94. package/package.json +72 -0
package/dist/form.js ADDED
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useForm = useForm;
5
+ const react_1 = require("react");
6
+ const core_1 = require("@fluxfast/core");
7
+ const hooks_js_1 = require("./hooks.js");
8
+ const EMPTY_ISSUES = Object.freeze([]);
9
+ const EMPTY_ERROR_MAP = Object.freeze(Object.create(null));
10
+ function issuesToTopLevelErrors(issues) {
11
+ const errors = Object.create(null);
12
+ for (const issue of issues) {
13
+ const key = issue.path[0];
14
+ if (typeof key === "string" &&
15
+ !Object.prototype.hasOwnProperty.call(errors, key)) {
16
+ errors[key] = issue.message;
17
+ }
18
+ }
19
+ return errors;
20
+ }
21
+ function issuesToErrorMap(issues) {
22
+ if (issues.length === 0)
23
+ return EMPTY_ERROR_MAP;
24
+ const errorMap = Object.create(null);
25
+ for (const issue of issues) {
26
+ const path = (0, core_1.formatValidationPath)(issue.path);
27
+ if (!Object.prototype.hasOwnProperty.call(errorMap, path)) {
28
+ errorMap[path] = issue.message;
29
+ }
30
+ }
31
+ return Object.freeze(errorMap);
32
+ }
33
+ function useForm(initialValues, formOptions = {}) {
34
+ const router = (0, hooks_js_1.useRouter)();
35
+ const initialRef = (0, react_1.useRef)(initialValues);
36
+ const [data, setDataState] = (0, react_1.useState)(initialValues);
37
+ const dataRef = (0, react_1.useRef)(initialValues);
38
+ const [manualErrors, setManualErrors] = (0, react_1.useState)({});
39
+ const [issues, setIssues] = (0, react_1.useState)(EMPTY_ISSUES);
40
+ const [processing, setProcessing] = (0, react_1.useState)(false);
41
+ const [wasSuccessful, setWasSuccessful] = (0, react_1.useState)(false);
42
+ const [recentlySuccessful, setRecentlySuccessful] = (0, react_1.useState)(false);
43
+ const recentTimerRef = (0, react_1.useRef)(null);
44
+ const localErrors = (0, react_1.useMemo)(() => issuesToTopLevelErrors(issues), [issues]);
45
+ const errors = (0, react_1.useMemo)(() => ({ ...manualErrors, ...localErrors }), [manualErrors, localErrors]);
46
+ const localErrorMap = (0, react_1.useMemo)(() => issuesToErrorMap(issues), [issues]);
47
+ const errorMap = (0, react_1.useMemo)(() => {
48
+ const entries = Object.entries(manualErrors);
49
+ if (entries.length === 0)
50
+ return localErrorMap;
51
+ const combined = Object.create(null);
52
+ for (const [key, message] of entries) {
53
+ if (message !== undefined)
54
+ combined[key] = message;
55
+ }
56
+ for (const [path, message] of Object.entries(localErrorMap)) {
57
+ combined[path] = message;
58
+ }
59
+ return Object.freeze(combined);
60
+ }, [manualErrors, localErrorMap]);
61
+ (0, react_1.useEffect)(() => () => {
62
+ if (recentTimerRef.current)
63
+ clearTimeout(recentTimerRef.current);
64
+ }, []);
65
+ const setData = (0, react_1.useCallback)((keyOrValues, maybeValue) => {
66
+ if (typeof keyOrValues === "string") {
67
+ const next = { ...dataRef.current, [keyOrValues]: maybeValue };
68
+ dataRef.current = next;
69
+ setDataState(next);
70
+ }
71
+ else if (typeof keyOrValues === "function") {
72
+ const next = keyOrValues(dataRef.current);
73
+ dataRef.current = next;
74
+ setDataState(next);
75
+ }
76
+ else {
77
+ const next = { ...dataRef.current, ...keyOrValues };
78
+ dataRef.current = next;
79
+ setDataState(next);
80
+ }
81
+ }, []);
82
+ const setError = (0, react_1.useCallback)((key, message) => {
83
+ setManualErrors(prev => ({ ...prev, [key]: message }));
84
+ }, []);
85
+ const clearErrors = (0, react_1.useCallback)((...keys) => {
86
+ if (keys.length === 0) {
87
+ setManualErrors({});
88
+ setIssues(EMPTY_ISSUES);
89
+ }
90
+ else {
91
+ const selected = new Set(keys);
92
+ setManualErrors(prev => {
93
+ const next = { ...prev };
94
+ for (const k of keys) {
95
+ delete next[k];
96
+ }
97
+ return next;
98
+ });
99
+ setIssues(prev => {
100
+ const next = prev.filter(issue => {
101
+ const key = issue.path[0];
102
+ return typeof key !== "string" || !selected.has(key);
103
+ });
104
+ return next.length === prev.length ? prev : Object.freeze(next);
105
+ });
106
+ }
107
+ }, []);
108
+ const reset = (0, react_1.useCallback)((...keys) => {
109
+ if (keys.length === 0) {
110
+ dataRef.current = initialRef.current;
111
+ setDataState(initialRef.current);
112
+ }
113
+ else {
114
+ const next = { ...dataRef.current };
115
+ for (const k of keys)
116
+ next[k] = initialRef.current[k];
117
+ dataRef.current = next;
118
+ setDataState(next);
119
+ }
120
+ }, []);
121
+ const validateCurrent = (0, react_1.useCallback)(() => {
122
+ const validator = formOptions.validator;
123
+ return validator?.validate(dataRef.current);
124
+ }, [formOptions.validator]);
125
+ const validate = (0, react_1.useCallback)(() => {
126
+ const result = validateCurrent();
127
+ if (!result || result.valid) {
128
+ setIssues(EMPTY_ISSUES);
129
+ return true;
130
+ }
131
+ setIssues(result.issues);
132
+ return false;
133
+ }, [validateCurrent]);
134
+ const submit = (0, react_1.useCallback)((url, options) => {
135
+ return async (e) => {
136
+ if (e && typeof e.preventDefault === "function") {
137
+ e.preventDefault();
138
+ }
139
+ setWasSuccessful(false);
140
+ clearErrors();
141
+ const validationResult = validateCurrent();
142
+ if (validationResult && !validationResult.valid) {
143
+ setIssues(validationResult.issues);
144
+ if (options?.onError) {
145
+ options.onError({
146
+ ...issuesToTopLevelErrors(validationResult.issues)
147
+ });
148
+ }
149
+ return;
150
+ }
151
+ setIssues(EMPTY_ISSUES);
152
+ setProcessing(true);
153
+ try {
154
+ await router.mutate(url, dataRef.current, {
155
+ method: options?.method || "POST",
156
+ preserveScroll: options?.preserveScroll,
157
+ });
158
+ setWasSuccessful(true);
159
+ setRecentlySuccessful(true);
160
+ if (recentTimerRef.current) {
161
+ clearTimeout(recentTimerRef.current);
162
+ }
163
+ recentTimerRef.current = setTimeout(() => {
164
+ setRecentlySuccessful(false);
165
+ }, 2000);
166
+ if (options?.onSuccess) {
167
+ options.onSuccess();
168
+ }
169
+ }
170
+ catch (err) {
171
+ if (err instanceof core_1.ValidationError && err.details) {
172
+ const formattedErrors = Object.create(null);
173
+ for (const [k, v] of Object.entries(err.details)) {
174
+ formattedErrors[k] = Array.isArray(v) ? v[0] : String(v);
175
+ }
176
+ setManualErrors(formattedErrors);
177
+ setIssues(EMPTY_ISSUES);
178
+ if (options?.onError) {
179
+ options.onError({ ...formattedErrors });
180
+ }
181
+ }
182
+ else {
183
+ throw err;
184
+ }
185
+ }
186
+ finally {
187
+ setProcessing(false);
188
+ }
189
+ };
190
+ }, [router, clearErrors, validateCurrent]);
191
+ return {
192
+ data,
193
+ errors,
194
+ issues,
195
+ errorMap,
196
+ processing,
197
+ wasSuccessful,
198
+ recentlySuccessful,
199
+ setData,
200
+ setError,
201
+ clearErrors,
202
+ reset,
203
+ validate,
204
+ submit,
205
+ };
206
+ }
207
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { FluxRouter, PageState, ResourceStateSnapshot, type FluxResourceKey, type FluxResourceValue } from "@fluxfast/core";
2
+ export declare function useRouter(): FluxRouter;
3
+ export declare function useFlux(): import("./provider.js").FluxContextValue;
4
+ export declare function usePage(): PageState;
5
+ export declare function useResource<Key extends FluxResourceKey>(key: Key): FluxResourceValue<Key>;
6
+ export declare function useResource<T = unknown>(key: string): T;
7
+ /** Subscribe to stable status, error, data, and stale metadata for one resource. */
8
+ export declare function useResourceState<Key extends FluxResourceKey>(key: Key): ResourceStateSnapshot<FluxResourceValue<Key>>;
9
+ export declare function useResourceState<T = unknown>(key: string): ResourceStateSnapshot<T>;
10
+ export interface DeferredResourceResult<T = unknown> extends ResourceStateSnapshot<T> {
11
+ readonly retry: () => Promise<void>;
12
+ readonly isLoading: boolean;
13
+ readonly isError: boolean;
14
+ readonly isReady: boolean;
15
+ readonly isPending: boolean;
16
+ }
17
+ /** Read a deferred resource state and retry only that resource on demand. */
18
+ export declare function useDeferredResource<Key extends FluxResourceKey>(key: Key): DeferredResourceResult<FluxResourceValue<Key>>;
19
+ export declare function useDeferredResource<T = unknown>(key: string): DeferredResourceResult<T>;
20
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,SAAS,EACT,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAGxB,wBAAgB,SAAS,IAAI,UAAU,CAEtC;AAED,wBAAgB,OAAO,6CAEtB;AAED,wBAAgB,OAAO,IAAI,SAAS,CAkBnC;AAED,wBAAgB,WAAW,CAAC,GAAG,SAAS,eAAe,EACrD,GAAG,EAAE,GAAG,GACP,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC1B,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;AAwCzD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,GAAG,SAAS,eAAe,EAC1D,GAAG,EAAE,GAAG,GACP,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,GAAG,EAAE,MAAM,GACV,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAkB5B,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,OAAO,CACjD,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,eAAe,EAC7D,GAAG,EAAE,GAAG,GACP,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC7C,GAAG,EAAE,MAAM,GACV,sBAAsB,CAAC,CAAC,CAAC,CAAC"}
package/dist/hooks.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useRouter = useRouter;
5
+ exports.useFlux = useFlux;
6
+ exports.usePage = usePage;
7
+ exports.useResource = useResource;
8
+ exports.useResourceState = useResourceState;
9
+ exports.useDeferredResource = useDeferredResource;
10
+ const react_1 = require("react");
11
+ const provider_js_1 = require("./provider.js");
12
+ function useRouter() {
13
+ return useFlux().router;
14
+ }
15
+ function useFlux() {
16
+ return (0, provider_js_1.useFluxContext)();
17
+ }
18
+ function usePage() {
19
+ const router = useRouter();
20
+ const subscribe = (0, react_1.useCallback)((callback) => router.pageStore.subscribe(callback), [router]);
21
+ const getSnapshot = (0, react_1.useCallback)(() => router.pageStore.getSnapshot(), [router]);
22
+ return (0, react_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
23
+ }
24
+ function useResource(key) {
25
+ const router = useRouter();
26
+ if (typeof process !== "undefined" &&
27
+ process.env?.NODE_ENV !== "production") {
28
+ const status = router.resourceStore.getStateSnapshot(key).status;
29
+ if (status === "pending") {
30
+ console.warn(`[fluxfast] Resource "${key}" is deferred and has not resolved yet.\n\nUse useDeferredResource("${key}") for deferred resources.`);
31
+ }
32
+ }
33
+ const subscribe = (0, react_1.useCallback)((callback) => router.resourceStore.subscribe(key, callback), [router, key]);
34
+ const getSnapshot = (0, react_1.useCallback)(() => router.resourceStore.getSnapshot(key), [router, key]);
35
+ const getServerSnapshot = (0, react_1.useCallback)(() => router.resourceStore.getServerSnapshot(key), [router, key]);
36
+ const val = (0, react_1.useSyncExternalStore)(subscribe, getSnapshot, getServerSnapshot);
37
+ return val;
38
+ }
39
+ function useResourceState(key) {
40
+ const router = useRouter();
41
+ const subscribe = (0, react_1.useCallback)((callback) => router.resourceStore.subscribe(key, callback), [router, key]);
42
+ const getSnapshot = (0, react_1.useCallback)(() => router.resourceStore.getStateSnapshot(key), [router, key]);
43
+ return (0, react_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
44
+ }
45
+ function useDeferredResource(key) {
46
+ const router = useRouter();
47
+ const state = useResourceState(key);
48
+ const retry = (0, react_1.useCallback)(() => router.loadResources([key], { reason: "retry" }), [router, key]);
49
+ return (0, react_1.useMemo)(() => ({
50
+ ...state,
51
+ retry,
52
+ isLoading: state.status === "loading",
53
+ isError: state.status === "error",
54
+ isReady: state.status === "ready",
55
+ isPending: state.status === "pending",
56
+ }), [state, retry]);
57
+ }
58
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FluxCacheConfig, FluxDevelopmentMetadata } from "./config.js";
2
+ /** Private payload validation shared by the host and browser entry. */
3
+ export declare function readFluxCacheConfig(value: unknown): FluxCacheConfig;
4
+ export declare function readFluxDevelopmentMetadata(value: unknown): FluxDevelopmentMetadata;
5
+ //# sourceMappingURL=hydration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE5E,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAgBnE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAkBnF"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readFluxCacheConfig = readFluxCacheConfig;
4
+ exports.readFluxDevelopmentMetadata = readFluxDevelopmentMetadata;
5
+ const core_1 = require("@fluxfast/core");
6
+ /** Private payload validation shared by the host and browser entry. */
7
+ function readFluxCacheConfig(value) {
8
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
9
+ throw new TypeError("Invalid FluxFast hydration cache configuration");
10
+ }
11
+ const source = value;
12
+ const cache = {};
13
+ for (const name of ["maxResources", "maxPages"]) {
14
+ if (Object.hasOwn(source, name)) {
15
+ const limit = source[name];
16
+ if (!Number.isSafeInteger(limit) || limit <= 0) {
17
+ throw new TypeError("Invalid FluxFast hydration cache configuration");
18
+ }
19
+ cache[name] = limit;
20
+ }
21
+ }
22
+ return cache;
23
+ }
24
+ function readFluxDevelopmentMetadata(value) {
25
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
26
+ throw new TypeError("Invalid FluxFast hydration development metadata");
27
+ }
28
+ const source = value;
29
+ if (typeof source.initialPath !== "string" || !source.initialPath.startsWith("/") || source.initialPath.length > 2_048) {
30
+ throw new TypeError("Invalid FluxFast hydration development metadata");
31
+ }
32
+ const json = JSON.stringify(source.initialServerTrace);
33
+ if (typeof json !== "string" || json.length > 16_384) {
34
+ throw new TypeError("Invalid FluxFast hydration development metadata");
35
+ }
36
+ const bytes = new TextEncoder().encode(json);
37
+ const encoded = btoa(Array.from(bytes, byte => String.fromCharCode(byte)).join(""))
38
+ .replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
39
+ const trace = (0, core_1.decodeServerDiagnosticTrace)(encoded);
40
+ if (!trace)
41
+ throw new TypeError("Invalid FluxFast hydration development metadata");
42
+ return { initialPath: source.initialPath, initialServerTrace: trace };
43
+ }
44
+ //# sourceMappingURL=hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration.js","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":";;;;AAAA,yCAA6D;AAG7D,uEAAuE;AACvE,6BAAoC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,UAAU,CAAU,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAe,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qCAA4C,KAAc;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACvH,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChF,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAA,kCAA2B,EAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACnF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACxE,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Host-independent React bindings over the public FluxFast Core runtime. */
2
+ export * from "./provider.js";
3
+ export * from "./root.js";
4
+ export * from "./hooks.js";
5
+ export * from "./live.js";
6
+ export * from "./link.js";
7
+ export * from "./form.js";
8
+ export * from "./resolver.js";
9
+ export * from "./config.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ "use client";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ /** Host-independent React bindings over the public FluxFast Core runtime. */
19
+ __exportStar(require("./provider.js"), exports);
20
+ __exportStar(require("./root.js"), exports);
21
+ __exportStar(require("./hooks.js"), exports);
22
+ __exportStar(require("./live.js"), exports);
23
+ __exportStar(require("./link.js"), exports);
24
+ __exportStar(require("./form.js"), exports);
25
+ __exportStar(require("./resolver.js"), exports);
26
+ __exportStar(require("./config.js"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;AAEb,6EAA6E;AAC7E,gDAA8B;AAC9B,4CAA0B;AAC1B,6CAA2B;AAC3B,4CAA0B;AAC1B,4CAA0B;AAC1B,4CAA0B;AAC1B,gDAA8B;AAC9B,8CAA4B"}
package/dist/link.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import React, { AnchorHTMLAttributes } from "react";
2
+ export interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ href: string;
4
+ prefetch?: "hover" | false;
5
+ replace?: boolean;
6
+ preserveScroll?: boolean;
7
+ }
8
+ export declare function resolveInternalDestination(href: string, currentUrl?: string): string | null;
9
+ export declare function Link({ href, prefetch, replace, preserveScroll, onClick, onMouseEnter, children, ...props }: LinkProps): React.JSX.Element;
10
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAc,MAAM,OAAO,CAAC;AAGhE,MAAM,WAAW,SAAU,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,QAAkB,EAClB,OAAe,EACf,cAAsB,EACtB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,qBA0DX"}
package/dist/link.js ADDED
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.resolveInternalDestination = resolveInternalDestination;
5
+ exports.Link = Link;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const hooks_js_1 = require("./hooks.js");
8
+ function resolveInternalDestination(href, currentUrl) {
9
+ if (href.startsWith("#"))
10
+ return null;
11
+ const base = currentUrl ?? (typeof window !== "undefined" ? window.location.href : undefined);
12
+ if (!base)
13
+ return href.startsWith("/") ? href : null;
14
+ try {
15
+ const destination = new URL(href, base);
16
+ if (destination.origin !== new URL(base).origin)
17
+ return null;
18
+ return `${destination.pathname}${destination.search}${destination.hash}`;
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ function Link({ href, prefetch = "hover", replace = false, preserveScroll = false, onClick, onMouseEnter, children, ...props }) {
25
+ const router = (0, hooks_js_1.useRouter)();
26
+ const getInternalDestination = () => {
27
+ return resolveInternalDestination(href);
28
+ };
29
+ const handleClick = (e) => {
30
+ if (onClick) {
31
+ onClick(e);
32
+ }
33
+ // Allow browser default for external links or modified clicks (ctrl/cmd/shift/middle click)
34
+ if (e.defaultPrevented ||
35
+ e.button !== 0 ||
36
+ e.metaKey ||
37
+ e.ctrlKey ||
38
+ e.altKey ||
39
+ e.shiftKey ||
40
+ props.download !== undefined ||
41
+ (props.target !== undefined && props.target !== "_self")) {
42
+ return;
43
+ }
44
+ const destination = getInternalDestination();
45
+ if (!destination)
46
+ return;
47
+ e.preventDefault();
48
+ router.visit(destination, { replace, preserveScroll }).catch(err => {
49
+ console.error("[fluxfast] Link navigation failed:", err);
50
+ });
51
+ };
52
+ const handleMouseEnter = (e) => {
53
+ if (onMouseEnter) {
54
+ onMouseEnter(e);
55
+ }
56
+ const destination = getInternalDestination();
57
+ if (prefetch === "hover" && destination) {
58
+ router.prefetch(destination).catch(err => {
59
+ console.debug("[fluxfast] Prefetch failed:", err);
60
+ });
61
+ }
62
+ };
63
+ return ((0, jsx_runtime_1.jsx)("a", { href: href, onClick: handleClick, onMouseEnter: handleMouseEnter, ...props, children: children }));
64
+ }
65
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../src/link.tsx"],"names":[],"mappings":"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"}
package/dist/live.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { LiveStatusSnapshot } from "@fluxfast/core";
2
+ export type { LiveConnectionStatus, LiveStatusSnapshot, } from "@fluxfast/core";
3
+ /** Observe the current Live Resource connection without affecting its lifecycle. */
4
+ export declare function useLiveStatus(): LiveStatusSnapshot;
5
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AASxB,oFAAoF;AACpF,wBAAgB,aAAa,IAAI,kBAAkB,CAYlD"}
package/dist/live.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useLiveStatus = useLiveStatus;
5
+ const react_1 = require("react");
6
+ const hooks_js_1 = require("./hooks.js");
7
+ const SERVER_LIVE_STATUS = Object.freeze({
8
+ status: "idle",
9
+ connected: false,
10
+ reconnectAttempt: 0,
11
+ lastEventAt: null,
12
+ });
13
+ /** Observe the current Live Resource connection without affecting its lifecycle. */
14
+ function useLiveStatus() {
15
+ const router = (0, hooks_js_1.useRouter)();
16
+ const subscribe = (0, react_1.useCallback)((callback) => router.liveManager.subscribe(callback), [router]);
17
+ const getSnapshot = (0, react_1.useCallback)(() => router.liveManager.getSnapshot(), [router]);
18
+ return (0, react_1.useSyncExternalStore)(subscribe, getSnapshot, () => SERVER_LIVE_STATUS);
19
+ }
20
+ //# sourceMappingURL=live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAEb,iCAA0D;AAE1D,yCAAuC;AAOvC,MAAM,kBAAkB,GAAuB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,CAAC;IACnB,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC;AAEH,oFAAoF;AACpF;IACE,MAAM,MAAM,GAAG,IAAA,oBAAS,GAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,CAAC,QAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,EAChE,CAAC,MAAM,CAAC,CACT,CAAC;IACF,MAAM,WAAW,GAAG,IAAA,mBAAW,EAC7B,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,EACtC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,IAAA,4BAAoB,EAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import { FluxRouter, PageEnvelope } from "@fluxfast/core";
3
+ import { ComponentRegistry } from "./resolver.js";
4
+ import { FluxCacheConfig } from "./config.js";
5
+ import type { FluxDevelopmentMetadata } from "./config.js";
6
+ export interface FluxContextValue {
7
+ router: FluxRouter;
8
+ registry: ComponentRegistry;
9
+ }
10
+ export declare const FluxContext: React.Context<FluxContextValue | null>;
11
+ export interface FluxProviderProps {
12
+ initialEnvelope?: PageEnvelope;
13
+ development?: FluxDevelopmentMetadata;
14
+ registry?: ComponentRegistry;
15
+ router?: FluxRouter;
16
+ clientUrl?: string;
17
+ cache?: FluxCacheConfig;
18
+ children: React.ReactNode;
19
+ }
20
+ export declare function FluxProvider({ initialEnvelope, development, registry, router: customRouter, clientUrl, cache, children, }: FluxProviderProps): React.JSX.Element;
21
+ export declare function useFluxContext(): FluxContextValue;
22
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAwB,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,eAAO,MAAM,WAAW,wCAA+C,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAC3B,eAAe,EACf,WAAW,EACX,QAAQ,EACR,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,iBAAiB,qBA6EnB;AAED,wBAAgB,cAAc,IAAI,gBAAgB,CAQjD"}