@flight-framework/router 0.1.0 → 0.3.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.
@@ -1,3 +1,35 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+
1
33
  // src/context.ts
2
34
  var isBrowser = typeof window !== "undefined";
3
35
  var currentContext = {
@@ -454,6 +486,9 @@ function redirect(url) {
454
486
  }
455
487
 
456
488
  export {
489
+ __require,
490
+ __commonJS,
491
+ __toESM,
457
492
  subscribe,
458
493
  getRouterContext,
459
494
  initRouter,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as LinkProps, R as RouteParams, S as SearchParams } from './prefetch-CMmeei6-.js';
2
- export { g as LoaderContext, f as LoaderFunction, N as NavigateOptions, d as PrefetchOptions, k as PrefetchPageLinks, c as PrefetchPriority, P as PrefetchStrategy, e as RouteDefinition, h as RouteMatch, i as RouterContext, a as RouterContextValue, j as RouterProvider, b as RouterProviderProps, w as clearPrefetchCache, l as findRoute, o as generatePath, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, u as useRouter } from './prefetch-CMmeei6-.js';
1
+ import { L as LinkProps, R as RouteParams, S as SearchParams } from './prefetch-COkjiZgH.js';
2
+ export { g as LoaderContext, f as LoaderFunction, N as NavigateOptions, d as PrefetchOptions, k as PrefetchPageLinks, c as PrefetchPriority, P as PrefetchStrategy, e as RouteDefinition, h as RouteMatch, i as RouterContext, a as RouterContextValue, j as RouterProvider, b as RouterProviderProps, w as clearPrefetchCache, l as findRoute, o as generatePath, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, u as useRouter } from './prefetch-COkjiZgH.js';
3
3
 
4
4
  /**
5
5
  * @flight-framework/router - Link Component
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  redirect,
20
20
  setupIntentPrefetch,
21
21
  useRouter
22
- } from "./chunk-MO2HMSZH.js";
22
+ } from "./chunk-YXMDNDIZ.js";
23
23
 
24
24
  // src/link.ts
25
25
  var isBrowser = typeof window !== "undefined";
@@ -1,5 +1,5 @@
1
- import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-CMmeei6-.js';
2
- export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-CMmeei6-.js';
1
+ import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-COkjiZgH.js';
2
+ export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-COkjiZgH.js';
3
3
  import * as preact$1 from 'preact';
4
4
  import { FunctionComponent, ComponentChildren } from 'preact';
5
5
 
@@ -17,7 +17,7 @@ import {
17
17
  redirect,
18
18
  setupIntentPrefetch,
19
19
  subscribe
20
- } from "../chunk-MO2HMSZH.js";
20
+ } from "../chunk-YXMDNDIZ.js";
21
21
 
22
22
  // src/preact/Link.tsx
23
23
  import { h } from "preact";
@@ -84,6 +84,14 @@ interface LinkProps {
84
84
  'aria-label'?: string;
85
85
  /** Click handler */
86
86
  onClick?: (event: MouseEvent) => void;
87
+ /**
88
+ * Enable View Transitions API for this navigation.
89
+ * Wraps the navigation in document.startViewTransition() with flushSync.
90
+ *
91
+ * @default false
92
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API
93
+ */
94
+ viewTransition?: boolean;
87
95
  }
88
96
  /**
89
97
  * Options for programmatic navigation
@@ -95,6 +103,12 @@ interface NavigateOptions {
95
103
  scroll?: boolean;
96
104
  /** State data to pass to the new route */
97
105
  state?: unknown;
106
+ /**
107
+ * Enable View Transitions API for this navigation.
108
+ *
109
+ * @default false
110
+ */
111
+ viewTransition?: boolean;
98
112
  }
99
113
  /**
100
114
  * Dynamic route parameters extracted from URL
@@ -1,11 +1,11 @@
1
- import { L as LinkProps, b as RouterProviderProps, a as RouterContextValue, R as RouteParams } from '../prefetch-CMmeei6-.js';
2
- export { g as LoaderContext, f as LoaderFunction, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, P as PrefetchStrategy, e as RouteDefinition, h as RouteMatch, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-CMmeei6-.js';
1
+ import { L as LinkProps, b as RouterProviderProps, a as RouterContextValue, R as RouteParams } from '../prefetch-COkjiZgH.js';
2
+ export { g as LoaderContext, f as LoaderFunction, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, P as PrefetchStrategy, e as RouteDefinition, h as RouteMatch, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-COkjiZgH.js';
3
3
  import React from 'react';
4
4
 
5
5
  /**
6
6
  * React Link Component
7
7
  *
8
- * Provides client-side navigation with prefetching support.
8
+ * Provides client-side navigation with prefetching and View Transitions support.
9
9
  * Properly imports React for SSR compatibility.
10
10
  */
11
11
 
@@ -13,7 +13,7 @@ import React from 'react';
13
13
  * Flight Link Component for React
14
14
  *
15
15
  * A drop-in replacement for `<a>` that enables SPA navigation
16
- * with optional prefetching strategies.
16
+ * with optional prefetching strategies and View Transitions.
17
17
  *
18
18
  * @example
19
19
  * ```tsx
@@ -23,6 +23,9 @@ import React from 'react';
23
23
  * // With prefetch on hover/focus (recommended)
24
24
  * <Link href="/docs" prefetch="intent">Docs</Link>
25
25
  *
26
+ * // With View Transitions (smooth page animations)
27
+ * <Link href="/docs" viewTransition>Docs</Link>
28
+ *
26
29
  * // Prefetch immediately when link renders
27
30
  * <Link href="/checkout" prefetch="render">Checkout</Link>
28
31
  *
@@ -30,7 +33,7 @@ import React from 'react';
30
33
  * <Link href="/products" prefetch="viewport">Products</Link>
31
34
  * ```
32
35
  */
33
- declare function Link({ href, children, className, target, rel, prefetch: prefetchProp, replace, scroll, onClick, 'aria-label': ariaLabel, ...props }: LinkProps): React.ReactElement;
36
+ declare function Link({ href, children, className, target, rel, prefetch: prefetchProp, replace, scroll, viewTransition, onClick, 'aria-label': ariaLabel, ...props }: LinkProps): React.ReactElement;
34
37
 
35
38
  /**
36
39
  * React Router Provider
@@ -1,4 +1,7 @@
1
1
  import {
2
+ __commonJS,
3
+ __require,
4
+ __toESM,
2
5
  clearPrefetchCache,
3
6
  findRoute,
4
7
  generatePath,
@@ -17,12 +20,435 @@ import {
17
20
  redirect,
18
21
  setupIntentPrefetch,
19
22
  subscribe
20
- } from "../chunk-MO2HMSZH.js";
23
+ } from "../chunk-YXMDNDIZ.js";
24
+
25
+ // ../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/cjs/react-dom.production.js
26
+ var require_react_dom_production = __commonJS({
27
+ "../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/cjs/react-dom.production.js"(exports) {
28
+ "use strict";
29
+ var React3 = __require("react");
30
+ function formatProdErrorMessage(code) {
31
+ var url = "https://react.dev/errors/" + code;
32
+ if (1 < arguments.length) {
33
+ url += "?args[]=" + encodeURIComponent(arguments[1]);
34
+ for (var i = 2; i < arguments.length; i++)
35
+ url += "&args[]=" + encodeURIComponent(arguments[i]);
36
+ }
37
+ return "Minified React error #" + code + "; visit " + url + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";
38
+ }
39
+ function noop() {
40
+ }
41
+ var Internals = {
42
+ d: {
43
+ f: noop,
44
+ r: function() {
45
+ throw Error(formatProdErrorMessage(522));
46
+ },
47
+ D: noop,
48
+ C: noop,
49
+ L: noop,
50
+ m: noop,
51
+ X: noop,
52
+ S: noop,
53
+ M: noop
54
+ },
55
+ p: 0,
56
+ findDOMNode: null
57
+ };
58
+ var REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal");
59
+ function createPortal$1(children, containerInfo, implementation) {
60
+ var key = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
61
+ return {
62
+ $$typeof: REACT_PORTAL_TYPE,
63
+ key: null == key ? null : "" + key,
64
+ children,
65
+ containerInfo,
66
+ implementation
67
+ };
68
+ }
69
+ var ReactSharedInternals = React3.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
70
+ function getCrossOriginStringAs(as, input) {
71
+ if ("font" === as) return "";
72
+ if ("string" === typeof input)
73
+ return "use-credentials" === input ? input : "";
74
+ }
75
+ exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals;
76
+ exports.createPortal = function(children, container) {
77
+ var key = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
78
+ if (!container || 1 !== container.nodeType && 9 !== container.nodeType && 11 !== container.nodeType)
79
+ throw Error(formatProdErrorMessage(299));
80
+ return createPortal$1(children, container, null, key);
81
+ };
82
+ exports.flushSync = function(fn) {
83
+ var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p;
84
+ try {
85
+ if (ReactSharedInternals.T = null, Internals.p = 2, fn) return fn();
86
+ } finally {
87
+ ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f();
88
+ }
89
+ };
90
+ exports.preconnect = function(href, options) {
91
+ "string" === typeof href && (options ? (options = options.crossOrigin, options = "string" === typeof options ? "use-credentials" === options ? options : "" : void 0) : options = null, Internals.d.C(href, options));
92
+ };
93
+ exports.prefetchDNS = function(href) {
94
+ "string" === typeof href && Internals.d.D(href);
95
+ };
96
+ exports.preinit = function(href, options) {
97
+ if ("string" === typeof href && options && "string" === typeof options.as) {
98
+ var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), integrity = "string" === typeof options.integrity ? options.integrity : void 0, fetchPriority = "string" === typeof options.fetchPriority ? options.fetchPriority : void 0;
99
+ "style" === as ? Internals.d.S(
100
+ href,
101
+ "string" === typeof options.precedence ? options.precedence : void 0,
102
+ {
103
+ crossOrigin,
104
+ integrity,
105
+ fetchPriority
106
+ }
107
+ ) : "script" === as && Internals.d.X(href, {
108
+ crossOrigin,
109
+ integrity,
110
+ fetchPriority,
111
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0
112
+ });
113
+ }
114
+ };
115
+ exports.preinitModule = function(href, options) {
116
+ if ("string" === typeof href)
117
+ if ("object" === typeof options && null !== options) {
118
+ if (null == options.as || "script" === options.as) {
119
+ var crossOrigin = getCrossOriginStringAs(
120
+ options.as,
121
+ options.crossOrigin
122
+ );
123
+ Internals.d.M(href, {
124
+ crossOrigin,
125
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0,
126
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0
127
+ });
128
+ }
129
+ } else null == options && Internals.d.M(href);
130
+ };
131
+ exports.preload = function(href, options) {
132
+ if ("string" === typeof href && "object" === typeof options && null !== options && "string" === typeof options.as) {
133
+ var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);
134
+ Internals.d.L(href, as, {
135
+ crossOrigin,
136
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0,
137
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0,
138
+ type: "string" === typeof options.type ? options.type : void 0,
139
+ fetchPriority: "string" === typeof options.fetchPriority ? options.fetchPriority : void 0,
140
+ referrerPolicy: "string" === typeof options.referrerPolicy ? options.referrerPolicy : void 0,
141
+ imageSrcSet: "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
142
+ imageSizes: "string" === typeof options.imageSizes ? options.imageSizes : void 0,
143
+ media: "string" === typeof options.media ? options.media : void 0
144
+ });
145
+ }
146
+ };
147
+ exports.preloadModule = function(href, options) {
148
+ if ("string" === typeof href)
149
+ if (options) {
150
+ var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);
151
+ Internals.d.m(href, {
152
+ as: "string" === typeof options.as && "script" !== options.as ? options.as : void 0,
153
+ crossOrigin,
154
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0
155
+ });
156
+ } else Internals.d.m(href);
157
+ };
158
+ exports.requestFormReset = function(form) {
159
+ Internals.d.r(form);
160
+ };
161
+ exports.unstable_batchedUpdates = function(fn, a) {
162
+ return fn(a);
163
+ };
164
+ exports.useFormState = function(action, initialState, permalink) {
165
+ return ReactSharedInternals.H.useFormState(action, initialState, permalink);
166
+ };
167
+ exports.useFormStatus = function() {
168
+ return ReactSharedInternals.H.useHostTransitionStatus();
169
+ };
170
+ exports.version = "19.2.3";
171
+ }
172
+ });
173
+
174
+ // ../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/cjs/react-dom.development.js
175
+ var require_react_dom_development = __commonJS({
176
+ "../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/cjs/react-dom.development.js"(exports) {
177
+ "use strict";
178
+ "production" !== process.env.NODE_ENV && (function() {
179
+ function noop() {
180
+ }
181
+ function testStringCoercion(value) {
182
+ return "" + value;
183
+ }
184
+ function createPortal$1(children, containerInfo, implementation) {
185
+ var key = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
186
+ try {
187
+ testStringCoercion(key);
188
+ var JSCompiler_inline_result = false;
189
+ } catch (e) {
190
+ JSCompiler_inline_result = true;
191
+ }
192
+ JSCompiler_inline_result && (console.error(
193
+ "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
194
+ "function" === typeof Symbol && Symbol.toStringTag && key[Symbol.toStringTag] || key.constructor.name || "Object"
195
+ ), testStringCoercion(key));
196
+ return {
197
+ $$typeof: REACT_PORTAL_TYPE,
198
+ key: null == key ? null : "" + key,
199
+ children,
200
+ containerInfo,
201
+ implementation
202
+ };
203
+ }
204
+ function getCrossOriginStringAs(as, input) {
205
+ if ("font" === as) return "";
206
+ if ("string" === typeof input)
207
+ return "use-credentials" === input ? input : "";
208
+ }
209
+ function getValueDescriptorExpectingObjectForWarning(thing) {
210
+ return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : 'something with type "' + typeof thing + '"';
211
+ }
212
+ function getValueDescriptorExpectingEnumForWarning(thing) {
213
+ return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : "string" === typeof thing ? JSON.stringify(thing) : "number" === typeof thing ? "`" + thing + "`" : 'something with type "' + typeof thing + '"';
214
+ }
215
+ function resolveDispatcher() {
216
+ var dispatcher = ReactSharedInternals.H;
217
+ null === dispatcher && console.error(
218
+ "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
219
+ );
220
+ return dispatcher;
221
+ }
222
+ "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
223
+ var React3 = __require("react"), Internals = {
224
+ d: {
225
+ f: noop,
226
+ r: function() {
227
+ throw Error(
228
+ "Invalid form element. requestFormReset must be passed a form that was rendered by React."
229
+ );
230
+ },
231
+ D: noop,
232
+ C: noop,
233
+ L: noop,
234
+ m: noop,
235
+ X: noop,
236
+ S: noop,
237
+ M: noop
238
+ },
239
+ p: 0,
240
+ findDOMNode: null
241
+ }, REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), ReactSharedInternals = React3.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
242
+ "function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error(
243
+ "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"
244
+ );
245
+ exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals;
246
+ exports.createPortal = function(children, container) {
247
+ var key = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
248
+ if (!container || 1 !== container.nodeType && 9 !== container.nodeType && 11 !== container.nodeType)
249
+ throw Error("Target container is not a DOM element.");
250
+ return createPortal$1(children, container, null, key);
251
+ };
252
+ exports.flushSync = function(fn) {
253
+ var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p;
254
+ try {
255
+ if (ReactSharedInternals.T = null, Internals.p = 2, fn)
256
+ return fn();
257
+ } finally {
258
+ ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f() && console.error(
259
+ "flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task."
260
+ );
261
+ }
262
+ };
263
+ exports.preconnect = function(href, options) {
264
+ "string" === typeof href && href ? null != options && "object" !== typeof options ? console.error(
265
+ "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",
266
+ getValueDescriptorExpectingEnumForWarning(options)
267
+ ) : null != options && "string" !== typeof options.crossOrigin && console.error(
268
+ "ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",
269
+ getValueDescriptorExpectingObjectForWarning(options.crossOrigin)
270
+ ) : console.error(
271
+ "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
272
+ getValueDescriptorExpectingObjectForWarning(href)
273
+ );
274
+ "string" === typeof href && (options ? (options = options.crossOrigin, options = "string" === typeof options ? "use-credentials" === options ? options : "" : void 0) : options = null, Internals.d.C(href, options));
275
+ };
276
+ exports.prefetchDNS = function(href) {
277
+ if ("string" !== typeof href || !href)
278
+ console.error(
279
+ "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
280
+ getValueDescriptorExpectingObjectForWarning(href)
281
+ );
282
+ else if (1 < arguments.length) {
283
+ var options = arguments[1];
284
+ "object" === typeof options && options.hasOwnProperty("crossOrigin") ? console.error(
285
+ "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
286
+ getValueDescriptorExpectingEnumForWarning(options)
287
+ ) : console.error(
288
+ "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
289
+ getValueDescriptorExpectingEnumForWarning(options)
290
+ );
291
+ }
292
+ "string" === typeof href && Internals.d.D(href);
293
+ };
294
+ exports.preinit = function(href, options) {
295
+ "string" === typeof href && href ? null == options || "object" !== typeof options ? console.error(
296
+ "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",
297
+ getValueDescriptorExpectingEnumForWarning(options)
298
+ ) : "style" !== options.as && "script" !== options.as && console.error(
299
+ 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',
300
+ getValueDescriptorExpectingEnumForWarning(options.as)
301
+ ) : console.error(
302
+ "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
303
+ getValueDescriptorExpectingObjectForWarning(href)
304
+ );
305
+ if ("string" === typeof href && options && "string" === typeof options.as) {
306
+ var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), integrity = "string" === typeof options.integrity ? options.integrity : void 0, fetchPriority = "string" === typeof options.fetchPriority ? options.fetchPriority : void 0;
307
+ "style" === as ? Internals.d.S(
308
+ href,
309
+ "string" === typeof options.precedence ? options.precedence : void 0,
310
+ {
311
+ crossOrigin,
312
+ integrity,
313
+ fetchPriority
314
+ }
315
+ ) : "script" === as && Internals.d.X(href, {
316
+ crossOrigin,
317
+ integrity,
318
+ fetchPriority,
319
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0
320
+ });
321
+ }
322
+ };
323
+ exports.preinitModule = function(href, options) {
324
+ var encountered = "";
325
+ "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
326
+ void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "script" !== options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingEnumForWarning(options.as) + ".");
327
+ if (encountered)
328
+ console.error(
329
+ "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",
330
+ encountered
331
+ );
332
+ else
333
+ switch (encountered = options && "string" === typeof options.as ? options.as : "script", encountered) {
334
+ case "script":
335
+ break;
336
+ default:
337
+ encountered = getValueDescriptorExpectingEnumForWarning(encountered), console.error(
338
+ 'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',
339
+ encountered,
340
+ href
341
+ );
342
+ }
343
+ if ("string" === typeof href)
344
+ if ("object" === typeof options && null !== options) {
345
+ if (null == options.as || "script" === options.as)
346
+ encountered = getCrossOriginStringAs(
347
+ options.as,
348
+ options.crossOrigin
349
+ ), Internals.d.M(href, {
350
+ crossOrigin: encountered,
351
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0,
352
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0
353
+ });
354
+ } else null == options && Internals.d.M(href);
355
+ };
356
+ exports.preload = function(href, options) {
357
+ var encountered = "";
358
+ "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
359
+ null == options || "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : "string" === typeof options.as && options.as || (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
360
+ encountered && console.error(
361
+ 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',
362
+ encountered
363
+ );
364
+ if ("string" === typeof href && "object" === typeof options && null !== options && "string" === typeof options.as) {
365
+ encountered = options.as;
366
+ var crossOrigin = getCrossOriginStringAs(
367
+ encountered,
368
+ options.crossOrigin
369
+ );
370
+ Internals.d.L(href, encountered, {
371
+ crossOrigin,
372
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0,
373
+ nonce: "string" === typeof options.nonce ? options.nonce : void 0,
374
+ type: "string" === typeof options.type ? options.type : void 0,
375
+ fetchPriority: "string" === typeof options.fetchPriority ? options.fetchPriority : void 0,
376
+ referrerPolicy: "string" === typeof options.referrerPolicy ? options.referrerPolicy : void 0,
377
+ imageSrcSet: "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
378
+ imageSizes: "string" === typeof options.imageSizes ? options.imageSizes : void 0,
379
+ media: "string" === typeof options.media ? options.media : void 0
380
+ });
381
+ }
382
+ };
383
+ exports.preloadModule = function(href, options) {
384
+ var encountered = "";
385
+ "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + ".");
386
+ void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "string" !== typeof options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + ".");
387
+ encountered && console.error(
388
+ 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',
389
+ encountered
390
+ );
391
+ "string" === typeof href && (options ? (encountered = getCrossOriginStringAs(
392
+ options.as,
393
+ options.crossOrigin
394
+ ), Internals.d.m(href, {
395
+ as: "string" === typeof options.as && "script" !== options.as ? options.as : void 0,
396
+ crossOrigin: encountered,
397
+ integrity: "string" === typeof options.integrity ? options.integrity : void 0
398
+ })) : Internals.d.m(href));
399
+ };
400
+ exports.requestFormReset = function(form) {
401
+ Internals.d.r(form);
402
+ };
403
+ exports.unstable_batchedUpdates = function(fn, a) {
404
+ return fn(a);
405
+ };
406
+ exports.useFormState = function(action, initialState, permalink) {
407
+ return resolveDispatcher().useFormState(action, initialState, permalink);
408
+ };
409
+ exports.useFormStatus = function() {
410
+ return resolveDispatcher().useHostTransitionStatus();
411
+ };
412
+ exports.version = "19.2.3";
413
+ "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
414
+ })();
415
+ }
416
+ });
417
+
418
+ // ../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/index.js
419
+ var require_react_dom = __commonJS({
420
+ "../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/index.js"(exports, module) {
421
+ "use strict";
422
+ function checkDCE() {
423
+ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === "undefined" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== "function") {
424
+ return;
425
+ }
426
+ if (process.env.NODE_ENV !== "production") {
427
+ throw new Error("^_^");
428
+ }
429
+ try {
430
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
431
+ } catch (err) {
432
+ console.error(err);
433
+ }
434
+ }
435
+ if (process.env.NODE_ENV === "production") {
436
+ checkDCE();
437
+ module.exports = require_react_dom_production();
438
+ } else {
439
+ module.exports = require_react_dom_development();
440
+ }
441
+ }
442
+ });
21
443
 
22
444
  // src/react/Link.tsx
445
+ var import_react_dom = __toESM(require_react_dom(), 1);
23
446
  import { useCallback, useEffect, useRef } from "react";
24
447
  import { jsx } from "react/jsx-runtime";
25
448
  var isBrowser = typeof window !== "undefined";
449
+ function isViewTransitionSupported() {
450
+ return isBrowser && "startViewTransition" in document;
451
+ }
26
452
  function isExternalUrl(href) {
27
453
  if (!href) return false;
28
454
  return href.startsWith("http://") || href.startsWith("https://") || href.startsWith("//") || href.startsWith("mailto:") || href.startsWith("tel:") || href.startsWith("javascript:") || href.startsWith("#");
@@ -41,7 +467,19 @@ function handleLinkClick(href, options, event) {
41
467
  }
42
468
  event?.preventDefault();
43
469
  const { navigate: navigate2 } = getRouterContext();
44
- navigate2(href, options);
470
+ const { viewTransition, ...navOptions } = options;
471
+ if (viewTransition && isViewTransitionSupported()) {
472
+ document.startViewTransition(() => {
473
+ (0, import_react_dom.flushSync)(() => {
474
+ navigate2(href, navOptions);
475
+ });
476
+ });
477
+ } else {
478
+ navigate2(href, navOptions);
479
+ }
480
+ if (options.scroll !== false) {
481
+ window.scrollTo({ top: 0, left: 0, behavior: "instant" });
482
+ }
45
483
  }
46
484
  function Link({
47
485
  href,
@@ -52,6 +490,7 @@ function Link({
52
490
  prefetch: prefetchProp = "none",
53
491
  replace = false,
54
492
  scroll = true,
493
+ viewTransition = false,
55
494
  onClick,
56
495
  "aria-label": ariaLabel,
57
496
  ...props
@@ -66,9 +505,9 @@ function Link({
66
505
  if (e.defaultPrevented) return;
67
506
  }
68
507
  if (isExternal || target === "_blank") return;
69
- handleLinkClick(href, { replace, scroll }, e);
508
+ handleLinkClick(href, { replace, scroll, viewTransition }, e);
70
509
  },
71
- [href, isExternal, target, replace, scroll, onClick]
510
+ [href, isExternal, target, replace, scroll, viewTransition, onClick]
72
511
  );
73
512
  useEffect(() => {
74
513
  if (isExternal || !isBrowser || prefetchStrategy === "none") {
@@ -243,3 +682,27 @@ export {
243
682
  useRouter,
244
683
  useSearchParams
245
684
  };
685
+ /*! Bundled license information:
686
+
687
+ react-dom/cjs/react-dom.production.js:
688
+ (**
689
+ * @license React
690
+ * react-dom.production.js
691
+ *
692
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
693
+ *
694
+ * This source code is licensed under the MIT license found in the
695
+ * LICENSE file in the root directory of this source tree.
696
+ *)
697
+
698
+ react-dom/cjs/react-dom.development.js:
699
+ (**
700
+ * @license React
701
+ * react-dom.development.js
702
+ *
703
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
704
+ *
705
+ * This source code is licensed under the MIT license found in the
706
+ * LICENSE file in the root directory of this source tree.
707
+ *)
708
+ */
@@ -1,5 +1,5 @@
1
- import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-CMmeei6-.js';
2
- export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-CMmeei6-.js';
1
+ import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-COkjiZgH.js';
2
+ export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-COkjiZgH.js';
3
3
  import * as solid_js from 'solid-js';
4
4
  import { JSX, Accessor } from 'solid-js';
5
5
 
@@ -17,7 +17,7 @@ import {
17
17
  redirect,
18
18
  setupIntentPrefetch,
19
19
  subscribe
20
- } from "../chunk-MO2HMSZH.js";
20
+ } from "../chunk-YXMDNDIZ.js";
21
21
 
22
22
  // src/solid/Link.ts
23
23
  import { onCleanup } from "solid-js";
@@ -1,5 +1,5 @@
1
- import { P as PrefetchStrategy, a as RouterContextValue } from '../prefetch-CMmeei6-.js';
2
- export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, b as RouterProviderProps, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-CMmeei6-.js';
1
+ import { P as PrefetchStrategy, a as RouterContextValue } from '../prefetch-COkjiZgH.js';
2
+ export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, b as RouterProviderProps, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-COkjiZgH.js';
3
3
 
4
4
  /**
5
5
  * Svelte Link Component
@@ -17,7 +17,7 @@ import {
17
17
  redirect,
18
18
  setupIntentPrefetch,
19
19
  subscribe
20
- } from "../chunk-MO2HMSZH.js";
20
+ } from "../chunk-YXMDNDIZ.js";
21
21
 
22
22
  // src/svelte/Link.ts
23
23
  var isBrowser = typeof window !== "undefined";
@@ -1,5 +1,5 @@
1
- import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-CMmeei6-.js';
2
- export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-CMmeei6-.js';
1
+ import { P as PrefetchStrategy, b as RouterProviderProps, a as RouterContextValue } from '../prefetch-COkjiZgH.js';
2
+ export { L as LinkProps, N as NavigateOptions, d as PrefetchOptions, c as PrefetchPriority, R as RouteParams, S as SearchParams, w as clearPrefetchCache, l as findRoute, o as generatePath, B as getRouterContext, D as initRouter, q as isActive, v as isPrefetched, m as matchRoute, n as navigate, x as observeForPrefetch, p as parseParams, s as prefetch, t as prefetchAll, z as prefetchPages, A as prefetchWhenIdle, r as redirect, y as setupIntentPrefetch, C as subscribe } from '../prefetch-COkjiZgH.js';
3
3
  import * as vue from 'vue';
4
4
  import { PropType, Ref } from 'vue';
5
5
 
package/dist/vue/index.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  redirect,
18
18
  setupIntentPrefetch,
19
19
  subscribe
20
- } from "../chunk-MO2HMSZH.js";
20
+ } from "../chunk-YXMDNDIZ.js";
21
21
 
22
22
  // src/vue/Link.ts
23
23
  import { defineComponent, ref, onMounted, onUnmounted, h } from "vue";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flight-framework/router",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Agnostic client-side routing primitives for Flight Framework",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -60,6 +60,7 @@
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/react": "^19.0.0",
63
+ "@types/react-dom": "^19.0.0",
63
64
  "preact": "^10.19.0",
64
65
  "solid-js": "^1.8.0",
65
66
  "tsup": "^8.0.0",