@clusterenvision/ui-framework 1.0.0 → 1.0.2

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 (43) hide show
  1. package/dist/browser.cjs +10 -10
  2. package/dist/browser.js +4 -4
  3. package/dist/{chunk-T6T7QE4J.js → chunk-AA4GATSB.js} +3 -3
  4. package/dist/{chunk-T6T7QE4J.js.map → chunk-AA4GATSB.js.map} +1 -1
  5. package/dist/{chunk-V6JCOBGY.js → chunk-BXQFX2PS.js} +3 -3
  6. package/dist/{chunk-V6JCOBGY.js.map → chunk-BXQFX2PS.js.map} +1 -1
  7. package/dist/{chunk-CXTAUXLG.cjs → chunk-FLUSP6VF.cjs} +4 -4
  8. package/dist/{chunk-CXTAUXLG.cjs.map → chunk-FLUSP6VF.cjs.map} +1 -1
  9. package/dist/{chunk-Q3KH6HMU.js → chunk-LSWEXTKL.js} +9 -5
  10. package/dist/chunk-LSWEXTKL.js.map +1 -0
  11. package/dist/{chunk-PVZVFICK.cjs → chunk-NCXUQXAN.cjs} +9 -5
  12. package/dist/chunk-NCXUQXAN.cjs.map +1 -0
  13. package/dist/{chunk-6BYWFGQY.cjs → chunk-SZL56BNL.cjs} +4 -4
  14. package/dist/{chunk-6BYWFGQY.cjs.map → chunk-SZL56BNL.cjs.map} +1 -1
  15. package/dist/{chunk-CHLDE4JQ.js → chunk-VQDM5HCG.js} +3 -3
  16. package/dist/{chunk-CHLDE4JQ.js.map → chunk-VQDM5HCG.js.map} +1 -1
  17. package/dist/{chunk-W3LNNY3U.cjs → chunk-W5M7JGC4.cjs} +4 -4
  18. package/dist/{chunk-W3LNNY3U.cjs.map → chunk-W5M7JGC4.cjs.map} +1 -1
  19. package/dist/cli/index.cjs +1 -1
  20. package/dist/cli/index.cjs.map +1 -1
  21. package/dist/cli/index.js +1 -1
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/index.cjs +21 -21
  24. package/dist/index.js +5 -5
  25. package/dist/lib/index.cjs +15 -15
  26. package/dist/lib/index.cjs.map +1 -1
  27. package/dist/lib/index.d.cts +4 -4
  28. package/dist/lib/index.d.ts +4 -4
  29. package/dist/lib/index.js +3 -3
  30. package/dist/lib/index.js.map +1 -1
  31. package/dist/lib/theme.cjs +13 -13
  32. package/dist/lib/theme.js +1 -1
  33. package/dist/runtime/adapters/react.cjs.map +1 -1
  34. package/dist/runtime/adapters/react.js.map +1 -1
  35. package/dist/runtime/components/ai-assistant.cjs +4 -4
  36. package/dist/runtime/components/ai-assistant.js +3 -3
  37. package/dist/runtime/components/ai-summary-card.cjs +4 -4
  38. package/dist/runtime/components/ai-summary-card.js +3 -3
  39. package/dist/runtime/router.cjs.map +1 -1
  40. package/dist/runtime/router.js.map +1 -1
  41. package/package.json +2 -7
  42. package/dist/chunk-PVZVFICK.cjs.map +0 -1
  43. package/dist/chunk-Q3KH6HMU.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkSZQNIMYI_cjs = require('../chunk-SZQNIMYI.cjs');
4
4
  var chunkR6XQUMWT_cjs = require('../chunk-R6XQUMWT.cjs');
5
- var chunkPVZVFICK_cjs = require('../chunk-PVZVFICK.cjs');
5
+ var chunkNCXUQXAN_cjs = require('../chunk-NCXUQXAN.cjs');
6
6
 
7
7
  // src/lib/deprecations.ts
8
8
  var seen = /* @__PURE__ */ new Set();
@@ -12,7 +12,7 @@ function shouldWarnOnce(key) {
12
12
  return true;
13
13
  }
14
14
  function isProdEnv() {
15
- return typeof process !== "undefined" && process.env?.NODE_ENV === "production";
15
+ return typeof process !== "undefined" && process.env.NODE_ENV === "production";
16
16
  }
17
17
  function warnDeprecated(options) {
18
18
  if (isProdEnv()) return;
@@ -42,7 +42,7 @@ function createDeprecationLogger(packageName) {
42
42
 
43
43
  // src/lib/versioning.ts
44
44
  function parseSemver(input) {
45
- const match = input.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?$/);
45
+ const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?$/.exec(input.trim());
46
46
  if (!match) return null;
47
47
  return {
48
48
  major: Number(match[1]),
@@ -191,51 +191,51 @@ Object.defineProperty(exports, "iconHtml", {
191
191
  });
192
192
  Object.defineProperty(exports, "applyTheme", {
193
193
  enumerable: true,
194
- get: function () { return chunkPVZVFICK_cjs.applyTheme; }
194
+ get: function () { return chunkNCXUQXAN_cjs.applyTheme; }
195
195
  });
196
196
  Object.defineProperty(exports, "applyThemeState", {
197
197
  enumerable: true,
198
- get: function () { return chunkPVZVFICK_cjs.applyThemeState; }
198
+ get: function () { return chunkNCXUQXAN_cjs.applyThemeState; }
199
199
  });
200
200
  Object.defineProperty(exports, "getInitialTheme", {
201
201
  enumerable: true,
202
- get: function () { return chunkPVZVFICK_cjs.getInitialTheme; }
202
+ get: function () { return chunkNCXUQXAN_cjs.getInitialTheme; }
203
203
  });
204
204
  Object.defineProperty(exports, "getStoredThemeState", {
205
205
  enumerable: true,
206
- get: function () { return chunkPVZVFICK_cjs.getStoredThemeState; }
206
+ get: function () { return chunkNCXUQXAN_cjs.getStoredThemeState; }
207
207
  });
208
208
  Object.defineProperty(exports, "hydrateThemeState", {
209
209
  enumerable: true,
210
- get: function () { return chunkPVZVFICK_cjs.hydrateThemeState; }
210
+ get: function () { return chunkNCXUQXAN_cjs.hydrateThemeState; }
211
211
  });
212
212
  Object.defineProperty(exports, "onThemeUpdate", {
213
213
  enumerable: true,
214
- get: function () { return chunkPVZVFICK_cjs.onThemeUpdate; }
214
+ get: function () { return chunkNCXUQXAN_cjs.onThemeUpdate; }
215
215
  });
216
216
  Object.defineProperty(exports, "registerThemeAwareComponent", {
217
217
  enumerable: true,
218
- get: function () { return chunkPVZVFICK_cjs.registerThemeAwareComponent; }
218
+ get: function () { return chunkNCXUQXAN_cjs.registerThemeAwareComponent; }
219
219
  });
220
220
  Object.defineProperty(exports, "setDensity", {
221
221
  enumerable: true,
222
- get: function () { return chunkPVZVFICK_cjs.setDensity; }
222
+ get: function () { return chunkNCXUQXAN_cjs.setDensity; }
223
223
  });
224
224
  Object.defineProperty(exports, "setFontScale", {
225
225
  enumerable: true,
226
- get: function () { return chunkPVZVFICK_cjs.setFontScale; }
226
+ get: function () { return chunkNCXUQXAN_cjs.setFontScale; }
227
227
  });
228
228
  Object.defineProperty(exports, "setRadius", {
229
229
  enumerable: true,
230
- get: function () { return chunkPVZVFICK_cjs.setRadius; }
230
+ get: function () { return chunkNCXUQXAN_cjs.setRadius; }
231
231
  });
232
232
  Object.defineProperty(exports, "setTheme", {
233
233
  enumerable: true,
234
- get: function () { return chunkPVZVFICK_cjs.setTheme; }
234
+ get: function () { return chunkNCXUQXAN_cjs.setTheme; }
235
235
  });
236
236
  Object.defineProperty(exports, "withThemeTransitionGuard", {
237
237
  enumerable: true,
238
- get: function () { return chunkPVZVFICK_cjs.withThemeTransitionGuard; }
238
+ get: function () { return chunkNCXUQXAN_cjs.withThemeTransitionGuard; }
239
239
  });
240
240
  exports.assertMinVersion = assertMinVersion;
241
241
  exports.compareVersions = compareVersions;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/deprecations.ts","../../src/lib/versioning.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["type DeprecationOptions = {\n packageName: string;\n name: string;\n since: string;\n removedIn?: string;\n alternative?: string;\n details?: string;\n onceKey?: string;\n};\n\nconst seen = new Set<string>();\n\nfunction shouldWarnOnce(key: string): boolean {\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n}\n\nfunction isProdEnv(): boolean {\n return typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\";\n}\n\nexport function warnDeprecated(options: DeprecationOptions): void {\n if (isProdEnv()) return;\n\n const key = options.onceKey ?? `${options.packageName}:${options.name}`;\n if (!shouldWarnOnce(key)) return;\n\n const parts = [\n `[deprecation] ${options.packageName}: ${options.name} is deprecated since ${options.since}.`,\n ];\n if (options.removedIn) {\n parts.push(`Removal target: ${options.removedIn}.`);\n }\n if (options.alternative) {\n parts.push(`Use ${options.alternative} instead.`);\n }\n if (options.details) {\n parts.push(options.details);\n }\n if (typeof console !== \"undefined\") {\n console.warn(parts.join(\" \"));\n }\n}\n\nexport function createDeprecationLogger(packageName: string) {\n return (name: string, options: Omit<DeprecationOptions, \"packageName\" | \"name\">): void => {\n warnDeprecated({ packageName, name, ...options });\n };\n}\n","export type Semver = {\n major: number;\n minor: number;\n patch: number;\n prerelease?: string;\n};\n\nexport function parseSemver(input: string): Semver | null {\n const match = input.trim().match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([\\w.-]+))?$/);\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4],\n };\n}\n\nexport function compareVersions(a: string, b: string): number {\n const aParsed = parseSemver(a);\n const bParsed = parseSemver(b);\n if (!aParsed || !bParsed) {\n return a.localeCompare(b);\n }\n if (aParsed.major !== bParsed.major) {\n return aParsed.major < bParsed.major ? -1 : 1;\n }\n if (aParsed.minor !== bParsed.minor) {\n return aParsed.minor < bParsed.minor ? -1 : 1;\n }\n if (aParsed.patch !== bParsed.patch) {\n return aParsed.patch < bParsed.patch ? -1 : 1;\n }\n if (aParsed.prerelease && !bParsed.prerelease) return -1;\n if (!aParsed.prerelease && bParsed.prerelease) return 1;\n if (aParsed.prerelease && bParsed.prerelease) {\n return aParsed.prerelease.localeCompare(bParsed.prerelease);\n }\n return 0;\n}\n\nexport function isAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\nexport function assertMinVersion(\n packageName: string,\n current: string,\n minimum: string,\n options: { warnOnly?: boolean } = {},\n): boolean {\n const ok = isAtLeast(current, minimum);\n if (!ok) {\n const message = `[version] ${packageName} requires >= ${minimum} (detected ${current}).`;\n if (options.warnOnly && typeof console !== \"undefined\") {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n }\n return ok;\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/deprecations.ts","../../src/lib/versioning.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["interface DeprecationOptions {\n packageName: string;\n name: string;\n since: string;\n removedIn?: string;\n alternative?: string;\n details?: string;\n onceKey?: string;\n}\n\nconst seen = new Set<string>();\n\nfunction shouldWarnOnce(key: string): boolean {\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n}\n\nfunction isProdEnv(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\nexport function warnDeprecated(options: DeprecationOptions): void {\n if (isProdEnv()) return;\n\n const key = options.onceKey ?? `${options.packageName}:${options.name}`;\n if (!shouldWarnOnce(key)) return;\n\n const parts = [\n `[deprecation] ${options.packageName}: ${options.name} is deprecated since ${options.since}.`,\n ];\n if (options.removedIn) {\n parts.push(`Removal target: ${options.removedIn}.`);\n }\n if (options.alternative) {\n parts.push(`Use ${options.alternative} instead.`);\n }\n if (options.details) {\n parts.push(options.details);\n }\n if (typeof console !== \"undefined\") {\n console.warn(parts.join(\" \"));\n }\n}\n\nexport function createDeprecationLogger(packageName: string) {\n return (name: string, options: Omit<DeprecationOptions, \"packageName\" | \"name\">): void => {\n warnDeprecated({ packageName, name, ...options });\n };\n}\n","export interface Semver {\n major: number;\n minor: number;\n patch: number;\n prerelease?: string;\n}\n\nexport function parseSemver(input: string): Semver | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([\\w.-]+))?$/.exec(input.trim());\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4],\n };\n}\n\nexport function compareVersions(a: string, b: string): number {\n const aParsed = parseSemver(a);\n const bParsed = parseSemver(b);\n if (!aParsed || !bParsed) {\n return a.localeCompare(b);\n }\n if (aParsed.major !== bParsed.major) {\n return aParsed.major < bParsed.major ? -1 : 1;\n }\n if (aParsed.minor !== bParsed.minor) {\n return aParsed.minor < bParsed.minor ? -1 : 1;\n }\n if (aParsed.patch !== bParsed.patch) {\n return aParsed.patch < bParsed.patch ? -1 : 1;\n }\n if (aParsed.prerelease && !bParsed.prerelease) return -1;\n if (!aParsed.prerelease && bParsed.prerelease) return 1;\n if (aParsed.prerelease && bParsed.prerelease) {\n return aParsed.prerelease.localeCompare(bParsed.prerelease);\n }\n return 0;\n}\n\nexport function isAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\nexport function assertMinVersion(\n packageName: string,\n current: string,\n minimum: string,\n options: { warnOnly?: boolean } = {},\n): boolean {\n const ok = isAtLeast(current, minimum);\n if (!ok) {\n const message = `[version] ${packageName} requires >= ${minimum} (detected ${current}).`;\n if (options.warnOnly && typeof console !== \"undefined\") {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n }\n return ok;\n}\n"]}
@@ -2,7 +2,7 @@ export { $, $$, $id, CreateElementOptions, DOMElement, DelegateHandler, ElementI
2
2
  export { ICONS, IconOptions, icon, iconHtml } from './icons.cjs';
3
3
  export { DensityMode, FontScale, RadiusMode, ThemeMode, ThemeState, applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from './theme.cjs';
4
4
 
5
- type DeprecationOptions = {
5
+ interface DeprecationOptions {
6
6
  packageName: string;
7
7
  name: string;
8
8
  since: string;
@@ -10,16 +10,16 @@ type DeprecationOptions = {
10
10
  alternative?: string;
11
11
  details?: string;
12
12
  onceKey?: string;
13
- };
13
+ }
14
14
  declare function warnDeprecated(options: DeprecationOptions): void;
15
15
  declare function createDeprecationLogger(packageName: string): (name: string, options: Omit<DeprecationOptions, "packageName" | "name">) => void;
16
16
 
17
- type Semver = {
17
+ interface Semver {
18
18
  major: number;
19
19
  minor: number;
20
20
  patch: number;
21
21
  prerelease?: string;
22
- };
22
+ }
23
23
  declare function parseSemver(input: string): Semver | null;
24
24
  declare function compareVersions(a: string, b: string): number;
25
25
  declare function isAtLeast(version: string, minimum: string): boolean;
@@ -2,7 +2,7 @@ export { $, $$, $id, CreateElementOptions, DOMElement, DelegateHandler, ElementI
2
2
  export { ICONS, IconOptions, icon, iconHtml } from './icons.js';
3
3
  export { DensityMode, FontScale, RadiusMode, ThemeMode, ThemeState, applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from './theme.js';
4
4
 
5
- type DeprecationOptions = {
5
+ interface DeprecationOptions {
6
6
  packageName: string;
7
7
  name: string;
8
8
  since: string;
@@ -10,16 +10,16 @@ type DeprecationOptions = {
10
10
  alternative?: string;
11
11
  details?: string;
12
12
  onceKey?: string;
13
- };
13
+ }
14
14
  declare function warnDeprecated(options: DeprecationOptions): void;
15
15
  declare function createDeprecationLogger(packageName: string): (name: string, options: Omit<DeprecationOptions, "packageName" | "name">) => void;
16
16
 
17
- type Semver = {
17
+ interface Semver {
18
18
  major: number;
19
19
  minor: number;
20
20
  patch: number;
21
21
  prerelease?: string;
22
- };
22
+ }
23
23
  declare function parseSemver(input: string): Semver | null;
24
24
  declare function compareVersions(a: string, b: string): number;
25
25
  declare function isAtLeast(version: string, minimum: string): boolean;
package/dist/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { $, $$, $id, animate, clone, create, debounce, delegate, elementData, fadeIn, fadeOut, fragment, getFormValues, matches, onVisible, ready, serializeForm, setDebugMode, slideDown, slideUp, throttle, waitForElement } from '../chunk-22HQL2Y4.js';
2
2
  export { ICONS, icon, iconHtml } from '../chunk-7SCIB5HP.js';
3
- export { applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from '../chunk-Q3KH6HMU.js';
3
+ export { applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from '../chunk-LSWEXTKL.js';
4
4
 
5
5
  // src/lib/deprecations.ts
6
6
  var seen = /* @__PURE__ */ new Set();
@@ -10,7 +10,7 @@ function shouldWarnOnce(key) {
10
10
  return true;
11
11
  }
12
12
  function isProdEnv() {
13
- return typeof process !== "undefined" && process.env?.NODE_ENV === "production";
13
+ return typeof process !== "undefined" && process.env.NODE_ENV === "production";
14
14
  }
15
15
  function warnDeprecated(options) {
16
16
  if (isProdEnv()) return;
@@ -40,7 +40,7 @@ function createDeprecationLogger(packageName) {
40
40
 
41
41
  // src/lib/versioning.ts
42
42
  function parseSemver(input) {
43
- const match = input.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?$/);
43
+ const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?$/.exec(input.trim());
44
44
  if (!match) return null;
45
45
  return {
46
46
  major: Number(match[1]),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/deprecations.ts","../../src/lib/versioning.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type DeprecationOptions = {\n packageName: string;\n name: string;\n since: string;\n removedIn?: string;\n alternative?: string;\n details?: string;\n onceKey?: string;\n};\n\nconst seen = new Set<string>();\n\nfunction shouldWarnOnce(key: string): boolean {\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n}\n\nfunction isProdEnv(): boolean {\n return typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\";\n}\n\nexport function warnDeprecated(options: DeprecationOptions): void {\n if (isProdEnv()) return;\n\n const key = options.onceKey ?? `${options.packageName}:${options.name}`;\n if (!shouldWarnOnce(key)) return;\n\n const parts = [\n `[deprecation] ${options.packageName}: ${options.name} is deprecated since ${options.since}.`,\n ];\n if (options.removedIn) {\n parts.push(`Removal target: ${options.removedIn}.`);\n }\n if (options.alternative) {\n parts.push(`Use ${options.alternative} instead.`);\n }\n if (options.details) {\n parts.push(options.details);\n }\n if (typeof console !== \"undefined\") {\n console.warn(parts.join(\" \"));\n }\n}\n\nexport function createDeprecationLogger(packageName: string) {\n return (name: string, options: Omit<DeprecationOptions, \"packageName\" | \"name\">): void => {\n warnDeprecated({ packageName, name, ...options });\n };\n}\n","export type Semver = {\n major: number;\n minor: number;\n patch: number;\n prerelease?: string;\n};\n\nexport function parseSemver(input: string): Semver | null {\n const match = input.trim().match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([\\w.-]+))?$/);\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4],\n };\n}\n\nexport function compareVersions(a: string, b: string): number {\n const aParsed = parseSemver(a);\n const bParsed = parseSemver(b);\n if (!aParsed || !bParsed) {\n return a.localeCompare(b);\n }\n if (aParsed.major !== bParsed.major) {\n return aParsed.major < bParsed.major ? -1 : 1;\n }\n if (aParsed.minor !== bParsed.minor) {\n return aParsed.minor < bParsed.minor ? -1 : 1;\n }\n if (aParsed.patch !== bParsed.patch) {\n return aParsed.patch < bParsed.patch ? -1 : 1;\n }\n if (aParsed.prerelease && !bParsed.prerelease) return -1;\n if (!aParsed.prerelease && bParsed.prerelease) return 1;\n if (aParsed.prerelease && bParsed.prerelease) {\n return aParsed.prerelease.localeCompare(bParsed.prerelease);\n }\n return 0;\n}\n\nexport function isAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\nexport function assertMinVersion(\n packageName: string,\n current: string,\n minimum: string,\n options: { warnOnly?: boolean } = {},\n): boolean {\n const ok = isAtLeast(current, minimum);\n if (!ok) {\n const message = `[version] ${packageName} requires >= ${minimum} (detected ${current}).`;\n if (options.warnOnly && typeof console !== \"undefined\") {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n }\n return ok;\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/deprecations.ts","../../src/lib/versioning.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["interface DeprecationOptions {\n packageName: string;\n name: string;\n since: string;\n removedIn?: string;\n alternative?: string;\n details?: string;\n onceKey?: string;\n}\n\nconst seen = new Set<string>();\n\nfunction shouldWarnOnce(key: string): boolean {\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n}\n\nfunction isProdEnv(): boolean {\n return typeof process !== \"undefined\" && process.env.NODE_ENV === \"production\";\n}\n\nexport function warnDeprecated(options: DeprecationOptions): void {\n if (isProdEnv()) return;\n\n const key = options.onceKey ?? `${options.packageName}:${options.name}`;\n if (!shouldWarnOnce(key)) return;\n\n const parts = [\n `[deprecation] ${options.packageName}: ${options.name} is deprecated since ${options.since}.`,\n ];\n if (options.removedIn) {\n parts.push(`Removal target: ${options.removedIn}.`);\n }\n if (options.alternative) {\n parts.push(`Use ${options.alternative} instead.`);\n }\n if (options.details) {\n parts.push(options.details);\n }\n if (typeof console !== \"undefined\") {\n console.warn(parts.join(\" \"));\n }\n}\n\nexport function createDeprecationLogger(packageName: string) {\n return (name: string, options: Omit<DeprecationOptions, \"packageName\" | \"name\">): void => {\n warnDeprecated({ packageName, name, ...options });\n };\n}\n","export interface Semver {\n major: number;\n minor: number;\n patch: number;\n prerelease?: string;\n}\n\nexport function parseSemver(input: string): Semver | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([\\w.-]+))?$/.exec(input.trim());\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4],\n };\n}\n\nexport function compareVersions(a: string, b: string): number {\n const aParsed = parseSemver(a);\n const bParsed = parseSemver(b);\n if (!aParsed || !bParsed) {\n return a.localeCompare(b);\n }\n if (aParsed.major !== bParsed.major) {\n return aParsed.major < bParsed.major ? -1 : 1;\n }\n if (aParsed.minor !== bParsed.minor) {\n return aParsed.minor < bParsed.minor ? -1 : 1;\n }\n if (aParsed.patch !== bParsed.patch) {\n return aParsed.patch < bParsed.patch ? -1 : 1;\n }\n if (aParsed.prerelease && !bParsed.prerelease) return -1;\n if (!aParsed.prerelease && bParsed.prerelease) return 1;\n if (aParsed.prerelease && bParsed.prerelease) {\n return aParsed.prerelease.localeCompare(bParsed.prerelease);\n }\n return 0;\n}\n\nexport function isAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\nexport function assertMinVersion(\n packageName: string,\n current: string,\n minimum: string,\n options: { warnOnly?: boolean } = {},\n): boolean {\n const ok = isAtLeast(current, minimum);\n if (!ok) {\n const message = `[version] ${packageName} requires >= ${minimum} (detected ${current}).`;\n if (options.warnOnly && typeof console !== \"undefined\") {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n }\n return ok;\n}\n"]}
@@ -1,56 +1,56 @@
1
1
  'use strict';
2
2
 
3
- var chunkPVZVFICK_cjs = require('../chunk-PVZVFICK.cjs');
3
+ var chunkNCXUQXAN_cjs = require('../chunk-NCXUQXAN.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "applyTheme", {
8
8
  enumerable: true,
9
- get: function () { return chunkPVZVFICK_cjs.applyTheme; }
9
+ get: function () { return chunkNCXUQXAN_cjs.applyTheme; }
10
10
  });
11
11
  Object.defineProperty(exports, "applyThemeState", {
12
12
  enumerable: true,
13
- get: function () { return chunkPVZVFICK_cjs.applyThemeState; }
13
+ get: function () { return chunkNCXUQXAN_cjs.applyThemeState; }
14
14
  });
15
15
  Object.defineProperty(exports, "getInitialTheme", {
16
16
  enumerable: true,
17
- get: function () { return chunkPVZVFICK_cjs.getInitialTheme; }
17
+ get: function () { return chunkNCXUQXAN_cjs.getInitialTheme; }
18
18
  });
19
19
  Object.defineProperty(exports, "getStoredThemeState", {
20
20
  enumerable: true,
21
- get: function () { return chunkPVZVFICK_cjs.getStoredThemeState; }
21
+ get: function () { return chunkNCXUQXAN_cjs.getStoredThemeState; }
22
22
  });
23
23
  Object.defineProperty(exports, "hydrateThemeState", {
24
24
  enumerable: true,
25
- get: function () { return chunkPVZVFICK_cjs.hydrateThemeState; }
25
+ get: function () { return chunkNCXUQXAN_cjs.hydrateThemeState; }
26
26
  });
27
27
  Object.defineProperty(exports, "onThemeUpdate", {
28
28
  enumerable: true,
29
- get: function () { return chunkPVZVFICK_cjs.onThemeUpdate; }
29
+ get: function () { return chunkNCXUQXAN_cjs.onThemeUpdate; }
30
30
  });
31
31
  Object.defineProperty(exports, "registerThemeAwareComponent", {
32
32
  enumerable: true,
33
- get: function () { return chunkPVZVFICK_cjs.registerThemeAwareComponent; }
33
+ get: function () { return chunkNCXUQXAN_cjs.registerThemeAwareComponent; }
34
34
  });
35
35
  Object.defineProperty(exports, "setDensity", {
36
36
  enumerable: true,
37
- get: function () { return chunkPVZVFICK_cjs.setDensity; }
37
+ get: function () { return chunkNCXUQXAN_cjs.setDensity; }
38
38
  });
39
39
  Object.defineProperty(exports, "setFontScale", {
40
40
  enumerable: true,
41
- get: function () { return chunkPVZVFICK_cjs.setFontScale; }
41
+ get: function () { return chunkNCXUQXAN_cjs.setFontScale; }
42
42
  });
43
43
  Object.defineProperty(exports, "setRadius", {
44
44
  enumerable: true,
45
- get: function () { return chunkPVZVFICK_cjs.setRadius; }
45
+ get: function () { return chunkNCXUQXAN_cjs.setRadius; }
46
46
  });
47
47
  Object.defineProperty(exports, "setTheme", {
48
48
  enumerable: true,
49
- get: function () { return chunkPVZVFICK_cjs.setTheme; }
49
+ get: function () { return chunkNCXUQXAN_cjs.setTheme; }
50
50
  });
51
51
  Object.defineProperty(exports, "withThemeTransitionGuard", {
52
52
  enumerable: true,
53
- get: function () { return chunkPVZVFICK_cjs.withThemeTransitionGuard; }
53
+ get: function () { return chunkNCXUQXAN_cjs.withThemeTransitionGuard; }
54
54
  });
55
55
  //# sourceMappingURL=theme.cjs.map
56
56
  //# sourceMappingURL=theme.cjs.map
package/dist/lib/theme.js CHANGED
@@ -1,3 +1,3 @@
1
- export { applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from '../chunk-Q3KH6HMU.js';
1
+ export { applyTheme, applyThemeState, getInitialTheme, getStoredThemeState, hydrateThemeState, onThemeUpdate, registerThemeAwareComponent, setDensity, setFontScale, setRadius, setTheme, withThemeTransitionGuard } from '../chunk-LSWEXTKL.js';
2
2
  //# sourceMappingURL=theme.js.map
3
3
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtime/adapters/react.ts"],"names":[],"mappings":";;;AAmBO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,OAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,OAAA,GAAU,QAAQ,WAAA,IAAe,KAAA;AAEvC,EAAA,MAAM,UAAwC,CAAA,KAAA,KAAS;AACrD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAwC,IAAI,CAAA;AAEtE,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,QAAQ,KAAA,CAAM;AAAA,QAClC,QAAQ,OAAA,CAAQ,OAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,SAAS,OAAA,EAAQ;AAC7B,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,MACxB,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,OAAA,CAAQ,YAAY,KAAc,CAAA;AAAA,MAChD;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAyB;AAC5C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,KAAK,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,IAAY,IAAI,CAAA;AAAA,EAClF,CAAA;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAC,OAAA,CAAqC,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,OAAA;AACT","file":"react.cjs","sourcesContent":["import type { ComponentFactory, ComponentInstance } from '../component.js';\n\ntype ReactCleanupFn = () => void;\n\nexport interface ReactInterop {\n createElement: (...args: unknown[]) => unknown;\n useEffect: (effect: () => ReactCleanupFn | undefined, deps?: unknown[]) => void;\n useRef: <T>(initial: T | null) => { current: T | null };\n}\n\nexport interface ReactAdapterOptions {\n hostElement?: string;\n displayName?: string;\n}\n\nexport type ReactAdapterComponent<Props extends Record<string, unknown>> = (\n props: Props & { children?: unknown },\n) => unknown;\n\nexport function createReactAdapter<Props extends Record<string, unknown>>(\n factory: ComponentFactory<Props>,\n react: ReactInterop,\n options: ReactAdapterOptions = {},\n): ReactAdapterComponent<Props> {\n const hostTag = options.hostElement ?? 'div';\n\n const Adapter: ReactAdapterComponent<Props> = props => {\n const hostRef = react.useRef<Element | null>(null);\n const instanceRef = react.useRef<ComponentInstance<Props> | null>(null);\n\n react.useEffect(() => {\n if (!hostRef.current) {\n return undefined;\n }\n instanceRef.current = factory.mount({\n target: hostRef.current,\n props: props as Props,\n });\n return () => {\n instanceRef.current?.destroy();\n instanceRef.current = null;\n };\n }, []);\n\n react.useEffect(() => {\n if (instanceRef.current) {\n instanceRef.current.updateProps(props as Props);\n }\n return undefined;\n }, [props]);\n\n const refCallback = (node: Element | null) => {\n hostRef.current = node;\n };\n\n return react.createElement(hostTag, { ref: refCallback }, props.children ?? null);\n };\n\n if (options.displayName) {\n (Adapter as { displayName?: string }).displayName = options.displayName;\n }\n\n return Adapter;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/runtime/adapters/react.ts"],"names":[],"mappings":";;;AAmBO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,OAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,OAAA,GAAU,QAAQ,WAAA,IAAe,KAAA;AAEvC,EAAA,MAAM,UAAwC,CAAA,KAAA,KAAS;AACrD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAwC,IAAI,CAAA;AAEtE,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,QAAQ,KAAA,CAAM;AAAA,QAClC,QAAQ,OAAA,CAAQ,OAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,SAAS,OAAA,EAAQ;AAC7B,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,MACxB,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,MACvC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAyB;AAC5C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,KAAK,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,IAAY,IAAI,CAAA;AAAA,EAClF,CAAA;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAC,OAAA,CAAqC,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,OAAA;AACT","file":"react.cjs","sourcesContent":["import type { ComponentFactory, ComponentInstance } from '../component.js';\n\ntype ReactCleanupFn = () => void;\n\nexport interface ReactInterop {\n createElement: (...args: unknown[]) => unknown;\n useEffect: (effect: () => ReactCleanupFn | undefined, deps?: unknown[]) => void;\n useRef: <T>(initial: T | null) => { current: T | null };\n}\n\nexport interface ReactAdapterOptions {\n hostElement?: string;\n displayName?: string;\n}\n\nexport type ReactAdapterComponent<Props extends Record<string, unknown>> = (\n props: Props & { children?: unknown },\n) => unknown;\n\nexport function createReactAdapter<Props extends Record<string, unknown>>(\n factory: ComponentFactory<Props>,\n react: ReactInterop,\n options: ReactAdapterOptions = {},\n): ReactAdapterComponent<Props> {\n const hostTag = options.hostElement ?? 'div';\n\n const Adapter: ReactAdapterComponent<Props> = props => {\n const hostRef = react.useRef<Element | null>(null);\n const instanceRef = react.useRef<ComponentInstance<Props> | null>(null);\n\n react.useEffect(() => {\n if (!hostRef.current) {\n return undefined;\n }\n instanceRef.current = factory.mount({\n target: hostRef.current,\n props: props,\n });\n return () => {\n instanceRef.current?.destroy();\n instanceRef.current = null;\n };\n }, []);\n\n react.useEffect(() => {\n if (instanceRef.current) {\n instanceRef.current.updateProps(props);\n }\n return undefined;\n }, [props]);\n\n const refCallback = (node: Element | null) => {\n hostRef.current = node;\n };\n\n return react.createElement(hostTag, { ref: refCallback }, props.children ?? null);\n };\n\n if (options.displayName) {\n (Adapter as { displayName?: string }).displayName = options.displayName;\n }\n\n return Adapter;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtime/adapters/react.ts"],"names":[],"mappings":";AAmBO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,OAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,OAAA,GAAU,QAAQ,WAAA,IAAe,KAAA;AAEvC,EAAA,MAAM,UAAwC,CAAA,KAAA,KAAS;AACrD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAwC,IAAI,CAAA;AAEtE,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,QAAQ,KAAA,CAAM;AAAA,QAClC,QAAQ,OAAA,CAAQ,OAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,SAAS,OAAA,EAAQ;AAC7B,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,MACxB,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,OAAA,CAAQ,YAAY,KAAc,CAAA;AAAA,MAChD;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAyB;AAC5C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,KAAK,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,IAAY,IAAI,CAAA;AAAA,EAClF,CAAA;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAC,OAAA,CAAqC,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,OAAA;AACT","file":"react.js","sourcesContent":["import type { ComponentFactory, ComponentInstance } from '../component.js';\n\ntype ReactCleanupFn = () => void;\n\nexport interface ReactInterop {\n createElement: (...args: unknown[]) => unknown;\n useEffect: (effect: () => ReactCleanupFn | undefined, deps?: unknown[]) => void;\n useRef: <T>(initial: T | null) => { current: T | null };\n}\n\nexport interface ReactAdapterOptions {\n hostElement?: string;\n displayName?: string;\n}\n\nexport type ReactAdapterComponent<Props extends Record<string, unknown>> = (\n props: Props & { children?: unknown },\n) => unknown;\n\nexport function createReactAdapter<Props extends Record<string, unknown>>(\n factory: ComponentFactory<Props>,\n react: ReactInterop,\n options: ReactAdapterOptions = {},\n): ReactAdapterComponent<Props> {\n const hostTag = options.hostElement ?? 'div';\n\n const Adapter: ReactAdapterComponent<Props> = props => {\n const hostRef = react.useRef<Element | null>(null);\n const instanceRef = react.useRef<ComponentInstance<Props> | null>(null);\n\n react.useEffect(() => {\n if (!hostRef.current) {\n return undefined;\n }\n instanceRef.current = factory.mount({\n target: hostRef.current,\n props: props as Props,\n });\n return () => {\n instanceRef.current?.destroy();\n instanceRef.current = null;\n };\n }, []);\n\n react.useEffect(() => {\n if (instanceRef.current) {\n instanceRef.current.updateProps(props as Props);\n }\n return undefined;\n }, [props]);\n\n const refCallback = (node: Element | null) => {\n hostRef.current = node;\n };\n\n return react.createElement(hostTag, { ref: refCallback }, props.children ?? null);\n };\n\n if (options.displayName) {\n (Adapter as { displayName?: string }).displayName = options.displayName;\n }\n\n return Adapter;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/runtime/adapters/react.ts"],"names":[],"mappings":";AAmBO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,OAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,OAAA,GAAU,QAAQ,WAAA,IAAe,KAAA;AAEvC,EAAA,MAAM,UAAwC,CAAA,KAAA,KAAS;AACrD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAwC,IAAI,CAAA;AAEtE,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,QAAQ,KAAA,CAAM;AAAA,QAClC,QAAQ,OAAA,CAAQ,OAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,SAAS,OAAA,EAAQ;AAC7B,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,MACxB,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,MACvC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAyB;AAC5C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,KAAK,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,IAAY,IAAI,CAAA;AAAA,EAClF,CAAA;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAC,OAAA,CAAqC,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,OAAA;AACT","file":"react.js","sourcesContent":["import type { ComponentFactory, ComponentInstance } from '../component.js';\n\ntype ReactCleanupFn = () => void;\n\nexport interface ReactInterop {\n createElement: (...args: unknown[]) => unknown;\n useEffect: (effect: () => ReactCleanupFn | undefined, deps?: unknown[]) => void;\n useRef: <T>(initial: T | null) => { current: T | null };\n}\n\nexport interface ReactAdapterOptions {\n hostElement?: string;\n displayName?: string;\n}\n\nexport type ReactAdapterComponent<Props extends Record<string, unknown>> = (\n props: Props & { children?: unknown },\n) => unknown;\n\nexport function createReactAdapter<Props extends Record<string, unknown>>(\n factory: ComponentFactory<Props>,\n react: ReactInterop,\n options: ReactAdapterOptions = {},\n): ReactAdapterComponent<Props> {\n const hostTag = options.hostElement ?? 'div';\n\n const Adapter: ReactAdapterComponent<Props> = props => {\n const hostRef = react.useRef<Element | null>(null);\n const instanceRef = react.useRef<ComponentInstance<Props> | null>(null);\n\n react.useEffect(() => {\n if (!hostRef.current) {\n return undefined;\n }\n instanceRef.current = factory.mount({\n target: hostRef.current,\n props: props,\n });\n return () => {\n instanceRef.current?.destroy();\n instanceRef.current = null;\n };\n }, []);\n\n react.useEffect(() => {\n if (instanceRef.current) {\n instanceRef.current.updateProps(props);\n }\n return undefined;\n }, [props]);\n\n const refCallback = (node: Element | null) => {\n hostRef.current = node;\n };\n\n return react.createElement(hostTag, { ref: refCallback }, props.children ?? null);\n };\n\n if (options.displayName) {\n (Adapter as { displayName?: string }).displayName = options.displayName;\n }\n\n return Adapter;\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk6BYWFGQY_cjs = require('../../chunk-6BYWFGQY.cjs');
4
- require('../../chunk-W3LNNY3U.cjs');
5
- require('../../chunk-PVZVFICK.cjs');
3
+ var chunkSZL56BNL_cjs = require('../../chunk-SZL56BNL.cjs');
4
+ require('../../chunk-W5M7JGC4.cjs');
5
+ require('../../chunk-NCXUQXAN.cjs');
6
6
  require('../../chunk-IRBUKIRF.cjs');
7
7
  require('../../chunk-FFCZSYC7.cjs');
8
8
  require('../../chunk-EFOOXCY7.cjs');
@@ -12,7 +12,7 @@ require('../../chunk-VHUXNDW2.cjs');
12
12
 
13
13
  Object.defineProperty(exports, "AiAssistantPanel", {
14
14
  enumerable: true,
15
- get: function () { return chunk6BYWFGQY_cjs.AiAssistantPanel; }
15
+ get: function () { return chunkSZL56BNL_cjs.AiAssistantPanel; }
16
16
  });
17
17
  //# sourceMappingURL=ai-assistant.cjs.map
18
18
  //# sourceMappingURL=ai-assistant.cjs.map
@@ -1,6 +1,6 @@
1
- export { AiAssistantPanel } from '../../chunk-T6T7QE4J.js';
2
- import '../../chunk-CHLDE4JQ.js';
3
- import '../../chunk-Q3KH6HMU.js';
1
+ export { AiAssistantPanel } from '../../chunk-AA4GATSB.js';
2
+ import '../../chunk-VQDM5HCG.js';
3
+ import '../../chunk-LSWEXTKL.js';
4
4
  import '../../chunk-IHAMVLRY.js';
5
5
  import '../../chunk-BBAUALNU.js';
6
6
  import '../../chunk-D3H5CGVD.js';
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkCXTAUXLG_cjs = require('../../chunk-CXTAUXLG.cjs');
4
- require('../../chunk-W3LNNY3U.cjs');
5
- require('../../chunk-PVZVFICK.cjs');
3
+ var chunkFLUSP6VF_cjs = require('../../chunk-FLUSP6VF.cjs');
4
+ require('../../chunk-W5M7JGC4.cjs');
5
+ require('../../chunk-NCXUQXAN.cjs');
6
6
  require('../../chunk-IRBUKIRF.cjs');
7
7
  require('../../chunk-FFCZSYC7.cjs');
8
8
  require('../../chunk-EFOOXCY7.cjs');
@@ -12,7 +12,7 @@ require('../../chunk-VHUXNDW2.cjs');
12
12
 
13
13
  Object.defineProperty(exports, "AiSummaryCard", {
14
14
  enumerable: true,
15
- get: function () { return chunkCXTAUXLG_cjs.AiSummaryCard; }
15
+ get: function () { return chunkFLUSP6VF_cjs.AiSummaryCard; }
16
16
  });
17
17
  //# sourceMappingURL=ai-summary-card.cjs.map
18
18
  //# sourceMappingURL=ai-summary-card.cjs.map
@@ -1,6 +1,6 @@
1
- export { AiSummaryCard } from '../../chunk-V6JCOBGY.js';
2
- import '../../chunk-CHLDE4JQ.js';
3
- import '../../chunk-Q3KH6HMU.js';
1
+ export { AiSummaryCard } from '../../chunk-BXQFX2PS.js';
2
+ import '../../chunk-VQDM5HCG.js';
3
+ import '../../chunk-LSWEXTKL.js';
4
4
  import '../../chunk-IHAMVLRY.js';
5
5
  import '../../chunk-BBAUALNU.js';
6
6
  import '../../chunk-D3H5CGVD.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/router.ts"],"names":["flattenRoutes","signal","matchRoute","getRouteId","normalizePathname","options","captureRuntimeError","match","withRuntimeErrorBoundary","cacheRouteDataResult","clearRouteDataResult"],"mappings":"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","file":"router.cjs","sourcesContent":["import { captureRuntimeError, RuntimeErrorBoundary, RuntimeErrorInfo, withRuntimeErrorBoundary } from './errors.js';\nimport { signal, SignalAccessor } from './signals.js';\nimport { cacheRouteDataResult, clearRouteDataResult } from './route-data-registry.js';\nimport { flattenRoutes, getRouteId, matchRoute, normalizePathname } from './router-utils.js';\nimport type { FlattenedRouteNode } from './router-utils.js';\n\nexport type RouteComponentFactory = () => Promise<Record<string, unknown>> | Record<string, unknown>;\n\nexport interface RouteBoundaryConfig {\n id?: string;\n name?: string;\n componentName?: string;\n templateId?: string;\n attributes?: Record<string, unknown>;\n onError?: (error: Error, info: RuntimeErrorInfo) => boolean | undefined;\n}\n\nexport type RouteLayoutDefinition = RouteBoundaryConfig;\n\nexport interface RouteDefinition {\n id?: string;\n path: string;\n component: RouteComponentFactory;\n boundary?: RouteBoundaryConfig;\n layouts?: RouteLayoutDefinition[];\n loader?: RouteDataHandler;\n action?: RouteDataHandler;\n guards?: RouteGuard[];\n children?: RouteDefinition[];\n}\n\nexport interface RouteHandlerArgs {\n params: Record<string, string>;\n request?: Request;\n signal?: AbortSignal;\n context?: Record<string, unknown>;\n}\n\nexport type RouteDataHandler<T = unknown> = (args: RouteHandlerArgs) => T | Promise<T>;\n\nexport interface RouteHandlerResult<T = unknown> {\n data?: T;\n error?: Error;\n info?: RuntimeErrorInfo | null;\n handled: boolean;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n}\n\nexport interface RouteGuardContext {\n match: RouteMatch;\n params: Record<string, string>;\n}\n\nexport type RouteGuardResult =\n | { type: 'continue' }\n | { type: 'redirect'; to: string; options?: NavigateOptions }\n | { type: 'error'; error: Error; info?: RuntimeErrorInfo | null };\n\nexport type RouteGuard = (context: RouteGuardContext) => RouteGuardResult | undefined;\n\nexport interface RoutePrefetchOptions {\n loadData?: boolean;\n loaderArgs?: PartialRouteHandlerArgs;\n}\n\nconst CONTINUE_NAVIGATION: RouteGuardResult = { type: 'continue' } as const;\nconst MAX_GUARD_REDIRECTS = 8;\n\nexport function allowNavigation(): RouteGuardResult {\n return CONTINUE_NAVIGATION;\n}\n\nexport function redirectNavigation(to: string, options?: NavigateOptions): RouteGuardResult {\n return { type: 'redirect', to, options };\n}\n\nexport function errorNavigation(error: Error, info?: RuntimeErrorInfo | null): RouteGuardResult {\n return { type: 'error', error, info: info ?? null };\n}\n\nexport type RouterBoundaryKind = 'layout' | 'route';\n\nexport interface RouteBoundaryConfigResolved extends RouteBoundaryConfig {\n id: string;\n componentName: string;\n attributes: Record<string, unknown>;\n}\n\nexport interface RouterBoundaryState {\n id: string;\n kind: RouterBoundaryKind;\n definition: RouteBoundaryConfigResolved;\n boundary: RuntimeErrorBoundary;\n error: Error | null;\n info: RuntimeErrorInfo | null;\n reset(): void;\n}\n\nexport interface RouteMatch {\n route: RouteDefinition;\n params: Record<string, string>;\n fullPath: string;\n layouts: RouterBoundaryState[];\n boundary: RouterBoundaryState;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: unknown;\n}\n\nexport interface Router {\n currentPath: SignalAccessor<string>;\n currentMatch: SignalAccessor<RouteMatch | null>;\n navigate(path: string, options?: NavigateOptions): RouteMatch | null;\n match(path?: string): RouteMatch | null;\n start(): void;\n dispose(): void;\n}\n\nexport interface RouterOptions {\n routes: RouteDefinition[];\n notFoundRoute?: RouteDefinition;\n errorRoute?: RouteDefinition;\n}\n\nexport function createRouter(input: RouteDefinition[] | RouterOptions): Router {\n const options = normalizeRouterOptions(input);\n const flattened = flattenRoutes(options.routes);\n const notFoundRoute = normalizeFallbackRoute(options.notFoundRoute, 'not-found', '*');\n const errorRoute = normalizeFallbackRoute(options.errorRoute, 'error', '/__error');\n const initialPath = typeof window !== 'undefined' ? window.location.pathname : '/';\n const currentPath = signal(initialPath);\n const currentMatchSignal = signal<RouteMatch | null>(resolveMatch(initialPath));\n\n function resolveMatch(path: string): RouteMatch | null {\n for (const node of flattened) {\n const params = matchRoute(path, node.fullPath);\n if (params) {\n return instantiateMatch(node, params);\n }\n }\n if (notFoundRoute) {\n return createFallbackMatch(notFoundRoute, path, 'not-found');\n }\n return null;\n }\n\n function instantiateMatch(node: FlattenedRouteNode, params: Record<string, string>): RouteMatch {\n const layouts = collectLayouts(node.branch, node.fullPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', node.route.boundary, {\n routeId: getRouteId(node.route),\n path: node.fullPath,\n params,\n }),\n );\n return {\n route: node.route,\n params,\n fullPath: node.fullPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function collectLayouts(branch: RouteDefinition[], fullPath: string, params: Record<string, string>): RouterBoundaryState[] {\n const states: RouterBoundaryState[] = [];\n branch.forEach(route => {\n (route.layouts ?? []).forEach((layout, index) => {\n states.push(\n createRouterBoundaryState(\n 'layout',\n normalizeBoundaryConfig('layout', layout, {\n routeId: getRouteId(route),\n path: fullPath,\n layoutIndex: index,\n params,\n }),\n ),\n );\n });\n });\n return states;\n }\n\n function createFallbackMatch(\n route: RouteDefinition,\n requestedPath: string,\n reason: 'not-found' | 'error',\n error?: Error,\n errorMessage?: string,\n ): RouteMatch {\n const normalizedPath = normalizePathname(requestedPath);\n const params = matchRoute(normalizedPath, route.path) ?? {};\n const statusCode = reason === 'not-found' ? 404 : 500;\n const boundaryConfig: RouteBoundaryConfig = {\n ...(route.boundary ?? {}),\n attributes: {\n ...(route.boundary?.attributes ?? {}),\n requestedPath: normalizedPath,\n statusCode,\n reason,\n errorMessage: errorMessage ?? error?.message,\n },\n };\n const layouts = collectLayouts([route], normalizedPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', boundaryConfig, {\n routeId: getRouteId(route),\n path: normalizedPath,\n params,\n }),\n );\n return {\n route,\n params,\n fullPath: normalizedPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function match(path?: string): RouteMatch | null {\n const resolved = resolveMatch(path ?? currentPath());\n if (path === undefined) {\n currentMatchSignal.set(resolved);\n }\n return resolved;\n }\n\n function navigate(path: string, options?: NavigateOptions): RouteMatch | null {\n return runNavigation(path, options, 0);\n }\n\n function onPopState() {\n if (typeof window === 'undefined') {\n return;\n }\n const nextPath = window.location.pathname;\n runNavigation(nextPath, { replace: true }, 0);\n }\n\n const start = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.addEventListener('popstate', onPopState);\n };\n\n const dispose = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.removeEventListener('popstate', onPopState);\n };\n\n function runNavigation(path: string, options: NavigateOptions | undefined, depth: number): RouteMatch | null {\n const resolved = resolveMatch(path);\n if (!resolved) {\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(null);\n return null;\n }\n const guardResult = runRouteGuards(resolved);\n if (guardResult.type === 'redirect') {\n if (depth >= MAX_GUARD_REDIRECTS) {\n throw new Error('Router redirect loop detected.');\n }\n const nextOptions: NavigateOptions = { ...options, ...guardResult.options, replace: true };\n return runNavigation(guardResult.to, nextOptions, depth + 1);\n }\n if (guardResult.type === 'error') {\n const info = guardResult.info ?? createGuardErrorInfo(resolved);\n const rawMessage = guardResult.error.message;\n if (errorRoute) {\n try {\n captureRuntimeError(guardResult.error, info);\n } catch {\n // Guard error is surfaced via fallback routes; avoid throwing.\n }\n const errorMatch = createFallbackMatch(errorRoute, path, 'error', guardResult.error, rawMessage);\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(errorMatch);\n return errorMatch;\n }\n captureRuntimeError(guardResult.error, info);\n return currentMatchSignal();\n }\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(resolved);\n return resolved;\n }\n\n function applyHistory(path: string, options?: NavigateOptions) {\n if (typeof window === 'undefined') {\n return;\n }\n const historyState = options?.state ?? {};\n if (options?.replace) {\n window.history.replaceState(historyState, '', path);\n } else {\n window.history.pushState(historyState, '', path);\n }\n }\n\n function runRouteGuards(match: RouteMatch): RouteGuardResult {\n const guards = match.route.guards ?? [];\n for (const guard of guards) {\n const result = guard({ match, params: match.params }) ?? CONTINUE_NAVIGATION;\n if (result.type !== 'continue') {\n return result;\n }\n }\n return CONTINUE_NAVIGATION;\n }\n\n function createGuardErrorInfo(match: RouteMatch): RuntimeErrorInfo {\n return {\n phase: 'navigation',\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes: {\n routeId: match.route.id ?? match.fullPath,\n fullPath: match.fullPath,\n },\n } satisfies RuntimeErrorInfo;\n }\n\n return {\n currentPath,\n currentMatch: currentMatchSignal,\n navigate,\n match,\n start,\n dispose,\n } satisfies Router;\n}\n\nfunction normalizeRouterOptions(input: RouteDefinition[] | RouterOptions): RouterOptions {\n if (Array.isArray(input)) {\n return { routes: input };\n }\n return input;\n}\n\nfunction normalizeFallbackRoute(\n route: RouteDefinition | undefined,\n fallbackId: string,\n fallbackPath: string,\n): RouteDefinition | undefined {\n if (!route) {\n return undefined;\n }\n return {\n ...route,\n id: route.id ?? fallbackId,\n path: route.path || fallbackPath,\n };\n}\n\n\nexport async function runRouteLoader<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('loader', match.route.loader as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function runRouteAction<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('action', match.route.action as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function prefetchRoute(match: RouteMatch, options?: RoutePrefetchOptions): Promise<void> {\n await Promise.resolve(match.route.component());\n if (options?.loadData) {\n await runRouteLoader(match, options.loaderArgs);\n }\n}\n\ntype RouteHandlerKind = 'loader' | 'action';\n\ntype PartialRouteHandlerArgs = Partial<Omit<RouteHandlerArgs, 'params'>> & { params?: Record<string, string> };\n\ninterface BoundaryContextExtras {\n routeId: string;\n path: string;\n layoutIndex?: number;\n params?: Record<string, string>;\n}\n\nfunction normalizeBoundaryConfig(\n kind: RouterBoundaryKind,\n config: RouteBoundaryConfig | undefined,\n context: BoundaryContextExtras,\n): RouteBoundaryConfigResolved {\n const layoutSuffix = typeof context.layoutIndex === 'number' ? `:${String(context.layoutIndex)}` : '';\n const fallbackId = `${kind}:${context.routeId}${layoutSuffix}`;\n const componentName = config?.componentName ?? config?.name ?? context.routeId;\n const attributes = {\n ...(config?.attributes ?? {}),\n routeId: context.routeId,\n path: context.path,\n layoutIndex: context.layoutIndex,\n params: context.params ? { ...context.params } : undefined,\n } satisfies Record<string, unknown>;\n return {\n ...config,\n id: config?.id ?? fallbackId,\n name: config?.name ?? componentName,\n componentName,\n attributes,\n } as RouteBoundaryConfigResolved;\n}\n\nfunction createRouterBoundaryState(\n kind: RouterBoundaryKind,\n definition: RouteBoundaryConfigResolved,\n): RouterBoundaryState {\n const state: RouterBoundaryState = {\n id: definition.id,\n kind,\n definition,\n boundary: {\n id: definition.id,\n handle(error, info) {\n state.error = error;\n state.info = info;\n if (definition.onError) {\n try {\n const handled = definition.onError(error, info);\n if (handled === false) {\n return false;\n }\n } catch (hookError) {\n state.error = hookError instanceof Error ? hookError : new Error(String(hookError));\n state.info = info;\n }\n }\n return true;\n },\n },\n error: null,\n info: null,\n reset() {\n state.error = null;\n state.info = null;\n },\n } satisfies RouterBoundaryState;\n return state;\n}\n\nasync function executeRouteHandler<T>(\n kind: RouteHandlerKind,\n handler: RouteDataHandler<T> | undefined,\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const startedAt = Date.now();\n if (!handler) {\n return {\n handled: true,\n startedAt,\n endedAt: startedAt,\n durationMs: 0,\n } satisfies RouteHandlerResult<T>;\n }\n const normalizedArgs = normalizeHandlerArgs(match, args);\n const boundaries = [...match.layouts, match.boundary];\n boundaries.forEach(boundary => {\n boundary.reset();\n });\n try {\n const data = await runWithBoundaries(boundaries, () => invokeRouteHandler(handler, kind, match, normalizedArgs));\n const boundaryError = firstErroredBoundary(boundaries);\n const endedAt = Date.now();\n if (boundaryError) {\n return {\n handled: true,\n error: boundaryError.error ?? undefined,\n info: boundaryError.info ?? null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n return {\n handled: true,\n data: data as T,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n } catch (error) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n const endedAt = Date.now();\n return {\n handled: false,\n error: normalized,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n}\n\nfunction normalizeHandlerArgs(match: RouteMatch, args?: PartialRouteHandlerArgs): RouteHandlerArgs {\n return {\n params: args?.params ?? match.params,\n request: args?.request,\n signal: args?.signal,\n context: args?.context,\n } satisfies RouteHandlerArgs;\n}\n\nfunction runWithBoundaries<T>(boundaries: RouterBoundaryState[], run: () => T): T {\n return boundaries.reduceRight((next, boundary) => {\n return () => withRuntimeErrorBoundary(boundary.boundary, next);\n }, run)();\n}\n\nfunction invokeRouteHandler<T>(\n handler: RouteDataHandler<T>,\n kind: RouteHandlerKind,\n match: RouteMatch,\n args: RouteHandlerArgs,\n): T | Promise<T | undefined> | undefined {\n const phase = kind === 'loader' ? 'loader' : 'action';\n const info = createHandlerErrorInfo(phase, match, args);\n try {\n const result = handler(args);\n if (isPromiseLike(result)) {\n return result.catch((error: unknown) => {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n });\n }\n return result;\n } catch (error: unknown) {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n }\n}\n\nfunction createHandlerErrorInfo(\n phase: 'loader' | 'action',\n match: RouteMatch,\n args: RouteHandlerArgs,\n): RuntimeErrorInfo {\n const attributes = {\n ...match.boundary.definition.attributes,\n params: args.params,\n requestMethod: args.request?.method,\n layoutStack: match.layouts.map(layout => layout.definition.id),\n } satisfies Record<string, unknown>;\n return {\n phase,\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes,\n } satisfies RuntimeErrorInfo;\n}\n\nfunction updateRouteDataCache(match: RouteMatch, result: RouteHandlerResult): void {\n if (result.handled) {\n cacheRouteDataResult(match, result);\n return;\n }\n clearRouteDataResult(match);\n}\n\nfunction firstErroredBoundary(boundaries: RouterBoundaryState[]): RouterBoundaryState | undefined {\n for (let i = boundaries.length - 1; i >= 0; i -= 1) {\n if (boundaries[i].error) {\n return boundaries[i];\n }\n }\n return undefined;\n}\n\nfunction isPromiseLike<T>(value: unknown): value is Promise<T> {\n return Boolean(value) && typeof value === 'object' && 'then' in (value as Record<string, unknown>);\n}\n"]}
1
+ {"version":3,"sources":["../../src/runtime/router.ts"],"names":["flattenRoutes","signal","matchRoute","getRouteId","normalizePathname","options","captureRuntimeError","match","withRuntimeErrorBoundary","cacheRouteDataResult","clearRouteDataResult"],"mappings":"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","file":"router.cjs","sourcesContent":["import { captureRuntimeError, RuntimeErrorBoundary, RuntimeErrorInfo, withRuntimeErrorBoundary } from './errors.js';\nimport { signal, SignalAccessor } from './signals.js';\nimport { cacheRouteDataResult, clearRouteDataResult } from './route-data-registry.js';\nimport { flattenRoutes, getRouteId, matchRoute, normalizePathname } from './router-utils.js';\nimport type { FlattenedRouteNode } from './router-utils.js';\n\nexport type RouteComponentFactory = () => Promise<Record<string, unknown>> | Record<string, unknown>;\n\nexport interface RouteBoundaryConfig {\n id?: string;\n name?: string;\n componentName?: string;\n templateId?: string;\n attributes?: Record<string, unknown>;\n onError?: (error: Error, info: RuntimeErrorInfo) => boolean | undefined;\n}\n\nexport type RouteLayoutDefinition = RouteBoundaryConfig;\n\nexport interface RouteDefinition {\n id?: string;\n path: string;\n component: RouteComponentFactory;\n boundary?: RouteBoundaryConfig;\n layouts?: RouteLayoutDefinition[];\n loader?: RouteDataHandler;\n action?: RouteDataHandler;\n guards?: RouteGuard[];\n children?: RouteDefinition[];\n}\n\nexport interface RouteHandlerArgs {\n params: Record<string, string>;\n request?: Request;\n signal?: AbortSignal;\n context?: Record<string, unknown>;\n}\n\nexport type RouteDataHandler<T = unknown> = (args: RouteHandlerArgs) => T | Promise<T>;\n\nexport interface RouteHandlerResult<T = unknown> {\n data?: T;\n error?: Error;\n info?: RuntimeErrorInfo | null;\n handled: boolean;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n}\n\nexport interface RouteGuardContext {\n match: RouteMatch;\n params: Record<string, string>;\n}\n\nexport type RouteGuardResult =\n | { type: 'continue' }\n | { type: 'redirect'; to: string; options?: NavigateOptions }\n | { type: 'error'; error: Error; info?: RuntimeErrorInfo | null };\n\nexport type RouteGuard = (context: RouteGuardContext) => RouteGuardResult | undefined;\n\nexport interface RoutePrefetchOptions {\n loadData?: boolean;\n loaderArgs?: PartialRouteHandlerArgs;\n}\n\nconst CONTINUE_NAVIGATION: RouteGuardResult = { type: 'continue' } as const;\nconst MAX_GUARD_REDIRECTS = 8;\n\nexport function allowNavigation(): RouteGuardResult {\n return CONTINUE_NAVIGATION;\n}\n\nexport function redirectNavigation(to: string, options?: NavigateOptions): RouteGuardResult {\n return { type: 'redirect', to, options };\n}\n\nexport function errorNavigation(error: Error, info?: RuntimeErrorInfo | null): RouteGuardResult {\n return { type: 'error', error, info: info ?? null };\n}\n\nexport type RouterBoundaryKind = 'layout' | 'route';\n\nexport interface RouteBoundaryConfigResolved extends RouteBoundaryConfig {\n id: string;\n componentName: string;\n attributes: Record<string, unknown>;\n}\n\nexport interface RouterBoundaryState {\n id: string;\n kind: RouterBoundaryKind;\n definition: RouteBoundaryConfigResolved;\n boundary: RuntimeErrorBoundary;\n error: Error | null;\n info: RuntimeErrorInfo | null;\n reset(): void;\n}\n\nexport interface RouteMatch {\n route: RouteDefinition;\n params: Record<string, string>;\n fullPath: string;\n layouts: RouterBoundaryState[];\n boundary: RouterBoundaryState;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: unknown;\n}\n\nexport interface Router {\n currentPath: SignalAccessor<string>;\n currentMatch: SignalAccessor<RouteMatch | null>;\n navigate(path: string, options?: NavigateOptions): RouteMatch | null;\n match(path?: string): RouteMatch | null;\n start(): void;\n dispose(): void;\n}\n\nexport interface RouterOptions {\n routes: RouteDefinition[];\n notFoundRoute?: RouteDefinition;\n errorRoute?: RouteDefinition;\n}\n\nexport function createRouter(input: RouteDefinition[] | RouterOptions): Router {\n const options = normalizeRouterOptions(input);\n const flattened = flattenRoutes(options.routes);\n const notFoundRoute = normalizeFallbackRoute(options.notFoundRoute, 'not-found', '*');\n const errorRoute = normalizeFallbackRoute(options.errorRoute, 'error', '/__error');\n const initialPath = typeof window !== 'undefined' ? window.location.pathname : '/';\n const currentPath = signal(initialPath);\n const currentMatchSignal = signal<RouteMatch | null>(resolveMatch(initialPath));\n\n function resolveMatch(path: string): RouteMatch | null {\n for (const node of flattened) {\n const params = matchRoute(path, node.fullPath);\n if (params) {\n return instantiateMatch(node, params);\n }\n }\n if (notFoundRoute) {\n return createFallbackMatch(notFoundRoute, path, 'not-found');\n }\n return null;\n }\n\n function instantiateMatch(node: FlattenedRouteNode, params: Record<string, string>): RouteMatch {\n const layouts = collectLayouts(node.branch, node.fullPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', node.route.boundary, {\n routeId: getRouteId(node.route),\n path: node.fullPath,\n params,\n }),\n );\n return {\n route: node.route,\n params,\n fullPath: node.fullPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function collectLayouts(branch: RouteDefinition[], fullPath: string, params: Record<string, string>): RouterBoundaryState[] {\n const states: RouterBoundaryState[] = [];\n branch.forEach(route => {\n (route.layouts ?? []).forEach((layout, index) => {\n states.push(\n createRouterBoundaryState(\n 'layout',\n normalizeBoundaryConfig('layout', layout, {\n routeId: getRouteId(route),\n path: fullPath,\n layoutIndex: index,\n params,\n }),\n ),\n );\n });\n });\n return states;\n }\n\n function createFallbackMatch(\n route: RouteDefinition,\n requestedPath: string,\n reason: 'not-found' | 'error',\n error?: Error,\n errorMessage?: string,\n ): RouteMatch {\n const normalizedPath = normalizePathname(requestedPath);\n const params = matchRoute(normalizedPath, route.path) ?? {};\n const statusCode = reason === 'not-found' ? 404 : 500;\n const boundaryConfig: RouteBoundaryConfig = {\n ...(route.boundary ?? {}),\n attributes: {\n ...(route.boundary?.attributes ?? {}),\n requestedPath: normalizedPath,\n statusCode,\n reason,\n errorMessage: errorMessage ?? error?.message,\n },\n };\n const layouts = collectLayouts([route], normalizedPath, params);\n const routeBoundary = createRouterBoundaryState(\n 'route',\n normalizeBoundaryConfig('route', boundaryConfig, {\n routeId: getRouteId(route),\n path: normalizedPath,\n params,\n }),\n );\n return {\n route,\n params,\n fullPath: normalizedPath,\n layouts,\n boundary: routeBoundary,\n } satisfies RouteMatch;\n }\n\n function match(path?: string): RouteMatch | null {\n const resolved = resolveMatch(path ?? currentPath());\n if (path === undefined) {\n currentMatchSignal.set(resolved);\n }\n return resolved;\n }\n\n function navigate(path: string, options?: NavigateOptions): RouteMatch | null {\n return runNavigation(path, options, 0);\n }\n\n function onPopState() {\n if (typeof window === 'undefined') {\n return;\n }\n const nextPath = window.location.pathname;\n runNavigation(nextPath, { replace: true }, 0);\n }\n\n const start = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.addEventListener('popstate', onPopState);\n };\n\n const dispose = () => {\n if (typeof window === 'undefined') {\n return;\n }\n window.removeEventListener('popstate', onPopState);\n };\n\n function runNavigation(path: string, options: NavigateOptions | undefined, depth: number): RouteMatch | null {\n const resolved = resolveMatch(path);\n if (!resolved) {\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(null);\n return null;\n }\n const guardResult = runRouteGuards(resolved);\n if (guardResult.type === 'redirect') {\n if (depth >= MAX_GUARD_REDIRECTS) {\n throw new Error('Router redirect loop detected.');\n }\n const nextOptions: NavigateOptions = { ...options, ...guardResult.options, replace: true };\n return runNavigation(guardResult.to, nextOptions, depth + 1);\n }\n if (guardResult.type === 'error') {\n const info = guardResult.info ?? createGuardErrorInfo(resolved);\n const rawMessage = guardResult.error.message;\n if (errorRoute) {\n try {\n captureRuntimeError(guardResult.error, info);\n } catch {\n // Guard error is surfaced via fallback routes; avoid throwing.\n }\n const errorMatch = createFallbackMatch(errorRoute, path, 'error', guardResult.error, rawMessage);\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(errorMatch);\n return errorMatch;\n }\n captureRuntimeError(guardResult.error, info);\n return currentMatchSignal();\n }\n applyHistory(path, options);\n currentPath.set(path);\n currentMatchSignal.set(resolved);\n return resolved;\n }\n\n function applyHistory(path: string, options?: NavigateOptions) {\n if (typeof window === 'undefined') {\n return;\n }\n const historyState = options?.state ?? {};\n if (options?.replace) {\n window.history.replaceState(historyState, '', path);\n } else {\n window.history.pushState(historyState, '', path);\n }\n }\n\n function runRouteGuards(match: RouteMatch): RouteGuardResult {\n const guards = match.route.guards ?? [];\n for (const guard of guards) {\n const result = guard({ match, params: match.params }) ?? CONTINUE_NAVIGATION;\n if (result.type !== 'continue') {\n return result;\n }\n }\n return CONTINUE_NAVIGATION;\n }\n\n function createGuardErrorInfo(match: RouteMatch): RuntimeErrorInfo {\n return {\n phase: 'navigation',\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes: {\n routeId: match.route.id ?? match.fullPath,\n fullPath: match.fullPath,\n },\n } satisfies RuntimeErrorInfo;\n }\n\n return {\n currentPath,\n currentMatch: currentMatchSignal,\n navigate,\n match,\n start,\n dispose,\n } satisfies Router;\n}\n\nfunction normalizeRouterOptions(input: RouteDefinition[] | RouterOptions): RouterOptions {\n if (Array.isArray(input)) {\n return { routes: input };\n }\n return input;\n}\n\nfunction normalizeFallbackRoute(\n route: RouteDefinition | undefined,\n fallbackId: string,\n fallbackPath: string,\n): RouteDefinition | undefined {\n if (!route) {\n return undefined;\n }\n return {\n ...route,\n id: route.id ?? fallbackId,\n path: route.path || fallbackPath,\n };\n}\n\n\nexport async function runRouteLoader<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('loader', match.route.loader as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function runRouteAction<T = unknown>(\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const result = await executeRouteHandler<T>('action', match.route.action as RouteDataHandler<T> | undefined, match, args);\n updateRouteDataCache(match, result);\n return result;\n}\n\nexport async function prefetchRoute(match: RouteMatch, options?: RoutePrefetchOptions): Promise<void> {\n await Promise.resolve(match.route.component());\n if (options?.loadData) {\n await runRouteLoader(match, options.loaderArgs);\n }\n}\n\ntype RouteHandlerKind = 'loader' | 'action';\n\ntype PartialRouteHandlerArgs = Partial<Omit<RouteHandlerArgs, 'params'>> & { params?: Record<string, string> };\n\ninterface BoundaryContextExtras {\n routeId: string;\n path: string;\n layoutIndex?: number;\n params?: Record<string, string>;\n}\n\nfunction normalizeBoundaryConfig(\n kind: RouterBoundaryKind,\n config: RouteBoundaryConfig | undefined,\n context: BoundaryContextExtras,\n): RouteBoundaryConfigResolved {\n const layoutSuffix = typeof context.layoutIndex === 'number' ? `:${String(context.layoutIndex)}` : '';\n const fallbackId = `${kind}:${context.routeId}${layoutSuffix}`;\n const componentName = config?.componentName ?? config?.name ?? context.routeId;\n const attributes = {\n ...(config?.attributes ?? {}),\n routeId: context.routeId,\n path: context.path,\n layoutIndex: context.layoutIndex,\n params: context.params ? { ...context.params } : undefined,\n } satisfies Record<string, unknown>;\n return {\n ...config,\n id: config?.id ?? fallbackId,\n name: config?.name ?? componentName,\n componentName,\n attributes,\n };\n}\n\nfunction createRouterBoundaryState(\n kind: RouterBoundaryKind,\n definition: RouteBoundaryConfigResolved,\n): RouterBoundaryState {\n const state: RouterBoundaryState = {\n id: definition.id,\n kind,\n definition,\n boundary: {\n id: definition.id,\n handle(error, info) {\n state.error = error;\n state.info = info;\n if (definition.onError) {\n try {\n const handled = definition.onError(error, info);\n if (handled === false) {\n return false;\n }\n } catch (hookError) {\n state.error = hookError instanceof Error ? hookError : new Error(String(hookError));\n state.info = info;\n }\n }\n return true;\n },\n },\n error: null,\n info: null,\n reset() {\n state.error = null;\n state.info = null;\n },\n } satisfies RouterBoundaryState;\n return state;\n}\n\nasync function executeRouteHandler<T>(\n kind: RouteHandlerKind,\n handler: RouteDataHandler<T> | undefined,\n match: RouteMatch,\n args?: PartialRouteHandlerArgs,\n): Promise<RouteHandlerResult<T>> {\n const startedAt = Date.now();\n if (!handler) {\n return {\n handled: true,\n startedAt,\n endedAt: startedAt,\n durationMs: 0,\n } satisfies RouteHandlerResult<T>;\n }\n const normalizedArgs = normalizeHandlerArgs(match, args);\n const boundaries = [...match.layouts, match.boundary];\n boundaries.forEach(boundary => {\n boundary.reset();\n });\n try {\n const data = await runWithBoundaries(boundaries, () => invokeRouteHandler(handler, kind, match, normalizedArgs));\n const boundaryError = firstErroredBoundary(boundaries);\n const endedAt = Date.now();\n if (boundaryError) {\n return {\n handled: true,\n error: boundaryError.error ?? undefined,\n info: boundaryError.info ?? null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n return {\n handled: true,\n data: data as T,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n } catch (error) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n const endedAt = Date.now();\n return {\n handled: false,\n error: normalized,\n info: null,\n startedAt,\n endedAt,\n durationMs: endedAt - startedAt,\n } satisfies RouteHandlerResult<T>;\n }\n}\n\nfunction normalizeHandlerArgs(match: RouteMatch, args?: PartialRouteHandlerArgs): RouteHandlerArgs {\n return {\n params: args?.params ?? match.params,\n request: args?.request,\n signal: args?.signal,\n context: args?.context,\n } satisfies RouteHandlerArgs;\n}\n\nfunction runWithBoundaries<T>(boundaries: RouterBoundaryState[], run: () => T): T {\n return boundaries.reduceRight((next, boundary) => {\n return () => withRuntimeErrorBoundary(boundary.boundary, next);\n }, run)();\n}\n\nfunction invokeRouteHandler<T>(\n handler: RouteDataHandler<T>,\n kind: RouteHandlerKind,\n match: RouteMatch,\n args: RouteHandlerArgs,\n): T | Promise<T | undefined> | undefined {\n const phase = kind === 'loader' ? 'loader' : 'action';\n const info = createHandlerErrorInfo(phase, match, args);\n try {\n const result = handler(args);\n if (isPromiseLike(result)) {\n return result.catch((error: unknown) => {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n });\n }\n return result;\n } catch (error: unknown) {\n const handled = captureRuntimeError(error, info);\n if (!handled) {\n throw error;\n }\n return undefined;\n }\n}\n\nfunction createHandlerErrorInfo(\n phase: 'loader' | 'action',\n match: RouteMatch,\n args: RouteHandlerArgs,\n): RuntimeErrorInfo {\n const attributes = {\n ...match.boundary.definition.attributes,\n params: args.params,\n requestMethod: args.request?.method,\n layoutStack: match.layouts.map(layout => layout.definition.id),\n } satisfies Record<string, unknown>;\n return {\n phase,\n componentName: match.boundary.definition.componentName,\n componentInstanceId: match.boundary.id,\n templateId: match.boundary.definition.templateId,\n attributes,\n } satisfies RuntimeErrorInfo;\n}\n\nfunction updateRouteDataCache(match: RouteMatch, result: RouteHandlerResult): void {\n if (result.handled) {\n cacheRouteDataResult(match, result);\n return;\n }\n clearRouteDataResult(match);\n}\n\nfunction firstErroredBoundary(boundaries: RouterBoundaryState[]): RouterBoundaryState | undefined {\n for (let i = boundaries.length - 1; i >= 0; i -= 1) {\n if (boundaries[i].error) {\n return boundaries[i];\n }\n }\n return undefined;\n}\n\nfunction isPromiseLike<T>(value: unknown): value is Promise<T> {\n return Boolean(value) && typeof value === 'object' && 'then' in (value as Record<string, unknown>);\n}\n"]}