@finesoft/front 0.4.3 → 0.5.1

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.
@@ -0,0 +1,2 @@
1
+ const e={FLOW:`flow`,EXTERNAL_URL:`externalUrl`,COMPOUND:`compound`};function t(t){return t.kind===e.FLOW}function n(t){return t.kind===e.EXTERNAL_URL}function r(t){return t.kind===e.COMPOUND}function i(t,n){return{kind:e.FLOW,url:t,presentationContext:n}}function a(t){return{kind:e.EXTERNAL_URL,url:t}}var o=class{handlers=new Map;onAction(e,t){if(this.handlers.has(e)){console.warn(`[ActionDispatcher] kind="${e}" already registered, skipping`);return}this.handlers.set(e,t)}removeAction(e){return this.handlers.delete(e)}async perform(e,t=0){if(r(e)){if(t>=32)throw Error(`[ActionDispatcher] CompoundAction recursion depth exceeded (max 32)`);for(let n of e.actions)await this.perform(n,t+1);return}let n=this.handlers.get(e.kind);if(!n){console.warn(`[ActionDispatcher] No handler for kind="${e.kind}"`);return}await n(e)}},s=class{controllers=new Map;register(e){this.controllers.set(e.intentId,e)}async dispatch(e,t){let n=this.controllers.get(e.id);if(!n)throw Error(`[IntentDispatcher] No controller for "${e.id}". Registered: [${Array.from(this.controllers.keys()).join(`, `)}]`);return n.perform(e,t)}has(e){return this.controllers.has(e)}},c=class e{registrations=new Map;resolutionStack=new Set;parent;children=new Set;register(e,t,n=!0){return this.registrations.set(e,{factory:t,singleton:n}),this}resolve(e){let t=this.registrations.get(e);if(!t){if(this.parent)return this.parent.resolve(e);throw Error(`[Container] No registration for key: "${e}"`)}if(t.singleton){if(t.instance===void 0){if(this.resolutionStack.has(e))throw Error(`[Container] Circular dependency detected: ${[...this.resolutionStack,e].join(` → `)}`);this.resolutionStack.add(e);try{t.instance=t.factory()}finally{this.resolutionStack.delete(e)}}return t.instance}return t.factory()}has(e){return this.registrations.has(e)||(this.parent?.has(e)??!1)}unregister(e){return this.registrations.delete(e)}createScope(){let t=new e;return t.parent=this,this.children.add(t),t}dispose(){let e=Array.from(this.children);for(let t of e)t.dispose();this.children.clear();for(let e of this.registrations.values())e.instance=void 0;this.registrations.clear(),this.parent&&=(this.parent.children.delete(this),void 0)}};function l(e){if(!e)return{ok:!1,reason:`empty host`};let t=e.toLowerCase(),n=t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t;if(n===`localhost`||n.endsWith(`.localhost`))return{ok:!1,reason:`loopback host forbidden`};if(n.includes(`:`))return m(n);let r=d(n);return r?p(r):{ok:!0}}function u(e){let t;try{t=new URL(e)}catch{return{ok:!1,reason:`invalid URL`}}return t.protocol!==`http:`&&t.protocol!==`https:`?{ok:!1,reason:`scheme "${t.protocol}" not allowed (only http/https)`}:l(t.hostname)}function d(e){if(e.length===0)return null;if(!e.includes(`.`)){let t=f(e);return t===null||t<0||t>4294967295?null:[t>>>24&255,t>>>16&255,t>>>8&255,t&255]}let t=e.split(`.`);if(t.length!==4)return null;let n=[];for(let e of t){let t=f(e);if(t===null||t<0||t>255)return null;n.push(t)}return n}function f(e){if(e.length===0)return null;if(e.startsWith(`0x`)||e.startsWith(`0X`)){let t=e.slice(2);return/^[0-9a-f]+$/i.test(t)?parseInt(t,16):null}return e.length>1&&e.startsWith(`0`)?/^[0-7]+$/.test(e)?parseInt(e,8):null:/^[0-9]+$/.test(e)?parseInt(e,10):null}function p(e){let[t,n]=e;return t===0?{ok:!1,reason:`unspecified IPv4 forbidden`}:t===127?{ok:!1,reason:`loopback IPv4 forbidden`}:t===10?{ok:!1,reason:`private IPv4 (10/8) forbidden`}:t===172&&n>=16&&n<=31?{ok:!1,reason:`private IPv4 (172.16/12) forbidden`}:t===192&&n===168?{ok:!1,reason:`private IPv4 (192.168/16) forbidden`}:t===169&&n===254?{ok:!1,reason:`link-local IPv4 forbidden`}:t===100&&n>=64&&n<=127?{ok:!1,reason:`CGNAT IPv4 forbidden`}:t>=224&&t<=239?{ok:!1,reason:`multicast IPv4 forbidden`}:t>=240?{ok:!1,reason:`reserved IPv4 forbidden`}:{ok:!0}}function m(e){let t=e.toLowerCase();if(t===`::`||t===`::0`)return{ok:!1,reason:`unspecified IPv6 forbidden`};if(t===`::1`)return{ok:!1,reason:`loopback IPv6 forbidden`};if(t.startsWith(`fe8`)||t.startsWith(`fe9`)||t.startsWith(`fea`)||t.startsWith(`feb`))return{ok:!1,reason:`link-local IPv6 forbidden`};if(t.startsWith(`fc`)||t.startsWith(`fd`))return{ok:!1,reason:`ULA IPv6 forbidden`};if(t.startsWith(`ff`))return{ok:!1,reason:`multicast IPv6 forbidden`};let n=h(t);if(n){let e=p(n);if(!e.ok)return{ok:!1,reason:`IPv4-in-IPv6 ${e.reason}`}}return{ok:!0}}function h(e){let t=e.match(/(?:^|:)((?:\d{1,3}\.){3}\d{1,3})$/);if(t){let e=d(t[1]);if(e)return e}let n=e.match(/(?:^|:)([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);if(n&&(e.startsWith(`::ffff:`)||e.includes(`:ffff:`))){let e=parseInt(n[1],16),t=parseInt(n[2],16);return[e>>>8&255,e&255,t>>>8&255,t&255]}return null}var g=class extends Error{status;statusText;body;constructor(e,t,n){super(`HTTP ${e}: ${t}`),this.status=e,this.statusText=t,this.body=n,this.name=`HttpError`}},_=class extends Error{url;reason;constructor(e,t){super(`Refused to fetch ${e}: ${t}`),this.url=e,this.reason=t,this.name=`HostGuardError`}},v=class{baseUrl;defaultHeaders;fetchFn;requestInterceptors;responseInterceptors;allowInternalHosts;validateDns;constructor(e){this.baseUrl=e.baseUrl,this.defaultHeaders=e.defaultHeaders??{},this.fetchFn=e.fetch??globalThis.fetch.bind(globalThis),this.requestInterceptors=[...e.requestInterceptors??[]],this.responseInterceptors=[...e.responseInterceptors??[]],this.allowInternalHosts=e.allowInternalHosts??!1,this.validateDns=e.validateDns??!0}useRequestInterceptor(e){return this.requestInterceptors.push(e),this}useResponseInterceptor(e){return this.responseInterceptors.push(e),this}async get(e,t){return this.request(`GET`,e,{params:t})}async post(e,t,n){return this.request(`POST`,e,{body:t,params:n})}async put(e,t,n){return this.request(`PUT`,e,{body:t,params:n})}async del(e,t){return this.request(`DELETE`,e,{params:t})}async request(e,t,n){let r=this.buildUrl(t,n?.params);this.allowInternalHosts||await this.enforceHostGuard(r);let i={...this.defaultHeaders,...n?.headers},a={method:e,headers:i};n?.body!==void 0&&(Object.keys(i).some(e=>e.toLowerCase()===`content-type`)||(i[`Content-Type`]=`application/json`),a.body=JSON.stringify(n.body));for(let e of this.requestInterceptors)a=await e(r,a);let o=await this.fetchFn(r,a);for(let e of this.responseInterceptors)o=await e(o,r);if(!o.ok){let e=await o.text().catch(()=>void 0);throw new g(o.status,o.statusText,e)}try{return await o.json()}catch(e){throw e instanceof SyntaxError?new g(o.status,`Invalid JSON response`,await o.text().catch(()=>void 0)):e}}buildUrl(e,t){let n=this.baseUrl.endsWith(`/`)?this.baseUrl.slice(0,-1):this.baseUrl,r=e.startsWith(`/`)?e:`/${e}`,i=new URL(`${n}${r}`,`http://placeholder`);if(t)for(let[e,n]of Object.entries(t))i.searchParams.set(e,n);return this.baseUrl.startsWith(`http`)?i.toString():`${i.pathname}${i.search}`}async enforceHostGuard(e){let t;try{t=new URL(e)}catch{return}let n=u(e);if(!n.ok)throw new _(e,n.reason);if(this.validateDns&&t.hostname&&!y(t.hostname)){let n=await b(t.hostname);if(!n.ok)throw new _(e,n.reason)}}};function y(e){return e.includes(`:`)?!0:/^[0-9.]+$/.test(e)||/^0x[0-9a-f]+$/i.test(e)}async function b(e){let t;try{let e=await import(`node:dns/promises`);t=e.default??e}catch{return{ok:!0}}let n=await Promise.allSettled([t.resolve4(e),t.resolve6(e)]),r=[];for(let e of n)e.status===`fulfilled`&&r.push(...e.value);if(r.length===0)return{ok:!0};for(let e of r){let t=u(`http://${e.includes(`:`)?`[${e}]`:e}/`);if(!t.ok)return{ok:!1,reason:`host resolves to ${e} (${t.reason})`}}return{ok:!0}}function x(e,t={}){let n=t.allowInternalHosts??!1,r=t.validateDns??!0;return async function(t,i){if(!n){let e=C(t);if(e&&S(e)){let t=u(e);if(!t.ok)throw new _(e,t.reason);if(r){let t=new URL(e);if(t.hostname&&!w(t.hostname)){let n=await T(t.hostname);if(!n.ok)throw new _(e,n.reason)}}}}return e(t,i)}}function S(e){try{return new URL(e),!0}catch{return!1}}function C(e){return typeof e==`string`?e:e instanceof URL?e.toString():typeof Request<`u`&&e instanceof Request?e.url:null}function w(e){return e.includes(`:`)?!0:/^[0-9.]+$/.test(e)||/^0x[0-9a-f]+$/i.test(e)}async function T(e){let t;try{let e=await import(`node:dns/promises`);t=e.default??e}catch{return{ok:!0}}let n;try{n=await t.lookup(e,{all:!0})}catch{return{ok:!0}}if(n.length===0)return{ok:!0};for(let{address:e}of n){let t=u(`http://${e.includes(`:`)?`[${e}]`:e}/`);if(!t.ok)return{ok:!1,reason:`host resolves to ${e} (${t.reason})`}}return{ok:!0}}const ee=new Set([`ar`,`arc`,`dv`,`fa`,`ha`,`he`,`khw`,`ks`,`ku`,`ps`,`ur`,`yi`]);function te(e){let t=e.split(`-`)[0].toLowerCase();return ee.has(t)}function ne(e){return te(e)?`rtl`:`ltr`}function re(e){return{lang:e,dir:ne(e)}}function ie(e,t){return{language:e,region:t,bcp47:t?`${e}-${t}`:e,dir:ne(e)}}function ae(e){document.documentElement.lang=e.lang,document.documentElement.dir=e.dir}function oe(e,t){let n=e.split(`?`)[0].match(/^\/([^/]+)(\/.*)?$/);if(!n)return null;let r=n[1],i=t.find(e=>e.toLowerCase()===r.toLowerCase());return i?{locale:i,strippedUrl:n[2]||`/`}:null}async function se(e,t){if(!e||!t)return;let n=await ce();if(n)return n(e,t)}async function ce(){if(typeof globalThis.__FINESOFT_I18N_LOADER__==`function`)return globalThis.__FINESOFT_I18N_LOADER__;if(typeof __FINESOFT_I18N_LOADER_SPECIFIER__==`string`)try{let e=await import(__FINESOFT_I18N_LOADER_SPECIFIER__),t=typeof e==`function`?e:typeof e?.loadMessages==`function`?e.loadMessages:void 0;return t?(globalThis.__FINESOFT_I18N_LOADER__=t,t):void 0}catch{return}}async function le(e){let{locale:t,loadMessages:n,context:r}=e;if(!(!t||!r))return n?n(t,r):se(t,r)}function ue(e,t){let n=Object.entries(e);if(n.length===0)return;if(typeof n[0][1]==`string`)return e;let r=e[t];if(!r)return;let i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`){i[e]=t;continue}for(let[n,r]of Object.entries(t))i[`${e}.${n}`]=r}return i}function de(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r===void 0?`{${n}}`:String(r)}):e}function fe(e){return e===1?`one`:`other`}function pe(e,t){return`${e}.${t}`}var me=class{locale;messages;pluralRule;fallback;constructor(e){this.locale=e.locale,this.messages=e.messages,this.pluralRule=e.pluralRule??fe,this.fallback=e.fallback??(e=>e)}t(e,t){let n=this.messages[e];return n===void 0?this.fallback(e):de(n,t)}plural(e,t,n){let r=pe(e,this.pluralRule(t)),i={count:t,...n};return this.t(r,i)}},he=class{factories;constructor(e){this.factories=e}loggerFor(e){return new ge(this.factories.map(t=>t.loggerFor(e)))}},ge=class{loggers;constructor(e){this.loggers=e}debug(...e){return this.callAll(`debug`,e)}info(...e){return this.callAll(`info`,e)}warn(...e){return this.callAll(`warn`,e)}error(...e){return this.callAll(`error`,e)}callAll(e,t){for(let n of this.loggers)n[e](...t);return``}},_e=class{category;constructor(e){this.category=e}};const ve={"*":4,debug:4,info:3,warn:2,error:1,off:0,"":0};let ye,be;function xe(){if(globalThis.localStorage===void 0)return{};let e;try{e=globalThis.localStorage.getItem(`onyxLog`)}catch{return{}}if(!e)return{};if(e===be&&ye)return ye;be=e;let t={},n=e.split(`,`);for(let e of n){let[n,r]=e.trim().split(`=`);if(!n||r===void 0)continue;let i=ve[r.toLowerCase()]??void 0;i!==void 0&&(n===`*`?t.defaultLevel=i:(t.named??={},t.named[n]=i))}return ye=t,t}function E(e,t){let n=xe();if(n.defaultLevel===void 0&&!n.named)return!0;let r=ve[t]??4;return n.named?.[e]===void 0?n.defaultLevel===void 0?!0:r<=n.defaultLevel:r<=n.named[e]}function Se(){ye=void 0,be=void 0}var Ce=class extends _e{debug(...e){return E(this.category,`debug`)&&console.debug(`[${this.category}]`,...e),``}info(...e){return E(this.category,`info`)&&console.info(`[${this.category}]`,...e),``}warn(...e){return E(this.category,`warn`)&&console.warn(`[${this.category}]`,...e),``}error(...e){return console.error(`[${this.category}]`,...e),``}},we=class{loggerFor(e){return new Ce(e)}};const Te={debug:0,info:1,warn:2,error:3};var Ee=class extends _e{minPriority;report;constructor(e,t){super(e),this.minPriority=Te[t.minLevel??`warn`],this.report=t.report}debug(...e){return this.maybeReport(`debug`,e),``}info(...e){return this.maybeReport(`info`,e),``}warn(...e){return this.maybeReport(`warn`,e),``}error(...e){return this.maybeReport(`error`,e),``}maybeReport(e,t){if(!(Te[e]<this.minPriority))try{this.report(e,this.category,t)}catch(e){console.error(`[ReportingLogger] report callback threw:`,e)}}},De=class{options;constructor(e){this.options=e}loggerFor(e){return new Ee(e,this.options)}},Oe=class{prefix;constructor(e=`Metrics`){this.prefix=e}record(e,t){console.info(`[${this.prefix}:${e}]`,t??``)}async flush(){}destroy(){}};function ke(e){let t=e??(typeof navigator<`u`?navigator.userAgent:``),n=t.toLowerCase();return{os:Ae(n),browser:je(n),engine:Me(n),isMobile:/mobile|android|iphone|ipad|ipod/i.test(t),isTouch:typeof navigator<`u`&&`maxTouchPoints`in navigator?navigator.maxTouchPoints>0:!1}}function Ae(e){return/iphone|ipad|ipod/.test(e)?`ios`:/android/.test(e)?`android`:/macintosh|mac os x/.test(e)?`macos`:/windows/.test(e)?`windows`:/linux/.test(e)?`linux`:`unknown`}function je(e){return/edg\//.test(e)?`edge`:/opr\/|opera/.test(e)?`opera`:/samsungbrowser/.test(e)?`samsung`:/chrome|crios/.test(e)&&!/edg\//.test(e)?`chrome`:/firefox|fxios/.test(e)?`firefox`:/safari/.test(e)&&!/chrome/.test(e)?`safari`:`unknown`}function Me(e){return/applewebkit/.test(e)&&!/chrome/.test(e)?`webkit`:/applewebkit/.test(e)&&/chrome/.test(e)?`blink`:/gecko\//.test(e)?`gecko`:`unknown`}const D={LOGGER:`logger`,LOGGER_FACTORY:`loggerFactory`,NET:`net`,STORAGE:`storage`,FEATURE_FLAGS:`featureFlags`,METRICS:`metrics`,FETCH:`fetch`,SAFE_FETCH:`safeFetch`,EVENT_RECORDER:`eventRecorder`,LOCALE:`locale`,PLATFORM:`platform`,TRANSLATOR:`translator`};var Ne=class{store=new Map;get(e){return this.store.get(e)}set(e,t){this.store.set(e,t)}delete(e){this.store.delete(e)}},Pe=class{flags;providers=[];constructor(e={}){this.flags=e}addProvider(e){this.providers.push(e)}isEnabled(e){for(let t=this.providers.length-1;t>=0;t--)if(this.providers[t].isEnabled(e))return!0;return this.flags[e]===!0}getString(e){for(let t=this.providers.length-1;t>=0;t--){let n=this.providers[t].getString?.(e);if(n!==void 0)return n}let t=this.flags[e];return typeof t==`string`?t:void 0}getNumber(e){for(let t=this.providers.length-1;t>=0;t--){let n=this.providers[t].getNumber?.(e);if(n!==void 0)return n}let t=this.flags[e];return typeof t==`number`?t:void 0}},Fe=class{record(e,t){console.info(`[Metrics:${e}]`,t??``)}recordPageView(e,t){this.record(`PageView`,{page:e,...t})}recordEvent(e,t){this.record(`Event`,{name:e,...t})}};function Ie(e,t={}){let{_resolvedMessages:n}=t,{fetch:r=globalThis.fetch?.bind(globalThis),featureFlags:i={},featureFlagsProviders:a=[],reportCallback:o,eventRecorder:s,locale:c,platform:l}=t,u=new we,d=o?new he([u,new De({report:o})]):u;e.register(D.LOGGER_FACTORY,()=>d),e.register(D.LOGGER,()=>d.loggerFor(`framework`)),e.register(D.NET,()=>({fetch:(e,t)=>r(e,t)})),e.register(D.STORAGE,()=>new Ne);let f=new Pe(i);for(let e of a)f.addProvider(e);if(e.register(D.FEATURE_FLAGS,()=>f),e.register(D.METRICS,()=>new Fe),e.register(D.EVENT_RECORDER,()=>s??new Oe),c&&e.register(D.LOCALE,()=>re(c)),c&&n){let t=ue(n,c);t&&e.register(D.TRANSLATOR,()=>new me({locale:c,messages:t}))}e.register(D.PLATFORM,()=>l??ke(typeof navigator<`u`?navigator.userAgent:void 0)),e.register(D.FETCH,()=>r);let p=t.safeFetch??{};e.register(D.SAFE_FETCH,()=>x(r,p))}function Le(e){return`container`in e?e.container:e}function Re(e){return{key:e,set(t,n){Le(t).register(e,()=>n)},get(t){let n=Le(t);return n.has(e)?n.resolve(e):void 0},clear(t){return Le(t).unregister(e)}}}function ze(e){return e.multi===!0}function Be(e,t={}){return{multi:!0,"~standard":{version:1,vendor:`finesoft`,validate:async n=>{let r=n===void 0?[]:Array.isArray(n)?n:[n],i=[];for(let t of r){let n=await e[`~standard`].validate(t);if(n.issues)return{issues:n.issues};i.push(n.value)}return t.min!==void 0&&i.length<t.min?{issues:[{message:`must have at least ${t.min} item(s)`}]}:t.max!==void 0&&i.length>t.max?{issues:[{message:`must have at most ${t.max} item(s)`}]}:{value:i}}}}}function O(e){return{"~standard":{version:1,vendor:`finesoft`,validate:e}}}async function Ve(e,t){let n=await e[`~standard`].validate(t);return n.issues?{ok:!1,issues:n.issues}:{ok:!0,value:n.value}}function He(e){return Object.assign(Object.create(null),e)}var Ue=class{debug;routes=[];constructor(e){this.debug=e}add(e,t,n){let r=typeof n==`string`?{renderMode:n}:n??{},i=[],a=e.split(/(\/:[\w]+\??)/).map(t=>{let n=t.match(/^\/:(\w+)(\?)?$/);if(n){if(i.includes(n[1]))throw Error(`[Router] Duplicate parameter name ":${n[1]}" in pattern "${e}"`);return i.push(n[1]),n[2]?`(?:/([^/]+))?`:`/([^/]+)`}return t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`)}).join(``);return this.routes.push({pattern:e,intentId:t,regex:RegExp(`^${a}/?$`),paramNames:i,renderMode:r.renderMode,beforeGuards:r.beforeGuards,afterGuards:r.afterGuards,paramCodecs:r.paramCodecs,queryCodecs:r.queryCodecs}),this}async resolve(e){let{path:t,queryParams:n,searchParams:r}=this.parseUrl(e);for(let a of this.routes){let o=t.match(a.regex);if(!o)continue;let s=He(),c=!0;for(let e=0;e<a.paramNames.length;e++){let t=a.paramNames[e],n=o[e+1],r=a.paramCodecs?.[t];if(r){let e=await Ve(r,n);if(!e.ok){this.debug?.(`[Router] route "${a.pattern}" skipped: path param "${t}" failed validation: ${e.issues[0]?.message??`invalid`}`),c=!1;break}e.value!==void 0&&(s[t]=e.value)}else n&&(s[t]=n)}if(c){if(a.queryCodecs)for(let e of Object.keys(a.queryCodecs)){let t=a.queryCodecs[e],i=await Ve(t,ze(t)?r.getAll(e):n[e]);if(!i.ok){this.debug?.(`[Router] route "${a.pattern}" skipped: query param "${e}" failed validation: ${i.issues[0]?.message??`invalid`}`),c=!1;break}i.value!==void 0&&(s[e]=i.value)}if(c)return Object.assign(s,Object.fromEntries(Object.entries(n).filter(([e])=>!(e in s)&&!a.queryCodecs?.[e]))),{intent:{id:a.intentId,params:s},action:i(e),renderMode:a.renderMode,beforeGuards:a.beforeGuards,afterGuards:a.afterGuards}}}return null}getRoutes(){return this.routes.map(e=>`${e.pattern} → ${e.intentId}`)}parseUrl(e){try{let t=new URL(e,`http://localhost`),n=He(Object.fromEntries(t.searchParams));return{path:t.pathname,queryParams:n,searchParams:t.searchParams}}catch{return{path:e.split(`?`)[0].split(`#`)[0],queryParams:He(),searchParams:new URLSearchParams}}}};const k=e=>({issues:[{message:e}]});function We(e={}){return O(t=>typeof t==`string`?e.minLength!==void 0&&t.length<e.minLength?k(`must be at least ${e.minLength} characters`):e.maxLength!==void 0&&t.length>e.maxLength?k(`must be at most ${e.maxLength} characters`):e.pattern&&!e.pattern.test(t)?k(`must match ${e.pattern}`):{value:t}:k(`expected a string`))}function Ge(e,t){return t.min!==void 0&&e<t.min?k(`must be >= ${t.min}`):t.max!==void 0&&e>t.max?k(`must be <= ${t.max}`):null}function Ke(e={}){return O(t=>{if(typeof t!=`string`||!/^-?\d+$/.test(t))return k(`"${String(t)}" is not an integer`);let n=Number(t);return Ge(n,e)??{value:n}})}function qe(e={}){return O(t=>{if(typeof t!=`string`||!/^-?\d+(\.\d+)?$/.test(t))return k(`"${String(t)}" is not a number`);let n=Number(t);return Ge(n,e)??{value:n}})}const Je=new Set([`true`,`1`]),Ye=new Set([`false`,`0`]);function Xe(){return O(e=>typeof e==`string`&&Je.has(e)?{value:!0}:typeof e==`string`&&Ye.has(e)?{value:!1}:k(`"${String(e)}" is not a boolean (true/false/1/0)`))}function Ze(e){return O(t=>typeof t==`string`&&e.includes(t)?{value:t}:k(`"${String(t)}" is not one of: ${e.join(`, `)}`))}const Qe=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function $e(){return O(e=>typeof e==`string`&&Qe.test(e)?{value:e}:k(`"${String(e)}" is not a valid UUID`))}function et(e){return O(t=>t===void 0?{value:void 0}:e[`~standard`].validate(t))}function tt(e,t){return O(n=>n===void 0?{value:t}:e[`~standard`].validate(n))}async function nt(e,t){for(let n of e){let e=await n(t);if(e.kind!==`next`)return e}return{kind:`next`}}async function rt(e,t){for(let n of e){let e=await n(t);if(e.kind!==`next`)return e}return{kind:`next`}}const it=new WeakMap;function A(e){return at(e,new Set,0)}function at(e,t,n){if(e==null)return String(e);if(typeof e!=`object`)return JSON.stringify(e);let r=it.get(e);if(r!==void 0)return r;if(n>50)return`"[Max Depth]"`;if(t.has(e))return`"[Circular]"`;t.add(e);try{let r;if(Array.isArray(e))r=`[`+e.map(e=>at(e,t,n+1)).join(`,`)+`]`;else{let i=Object.keys(e).sort(),a=[];for(let r of i){let i=e[r];i!==void 0&&a.push(JSON.stringify(r)+`:`+at(i,t,n+1))}r=`{`+a.join(`,`)+`}`}return it.set(e,r),r}finally{t.delete(e)}}var ot=class e{intents;constructor(e){this.intents=e}static fromArray(t){let n=new Map;for(let e of t)if(e.intent&&e.data!==void 0){let t=A(e.intent);n.set(t,e.data)}return new e(n)}static empty(){return new e(new Map)}get(e){let t=A(e),n=this.intents.get(t);if(n!==void 0)return this.intents.delete(t),n}has(e){return this.intents.has(A(e))}get size(){return this.intents.size}},st=class e{container;intentDispatcher;actionDispatcher;router;prefetchedIntents;beforeGuards=[];afterGuards=[];_logger;constructor(e,t){this.container=e,this.intentDispatcher=new s,this.actionDispatcher=new o,this.router=new Ue(e=>this.getLogger().debug(e)),this.prefetchedIntents=t}static create(t={}){let n=new c;Ie(n,t);let r=new e(n,t.prefetchedIntents??ot.empty());return t.setupRoutes?.(r.router),r}getLogger(){return this._logger??=this.container.resolve(D.LOGGER)}async dispatch(e){let t=this.getLogger(),n=this.prefetchedIntents.get(e);return n===void 0?(t.debug(`[Framework] dispatch intent: ${e.id}`,e.params),this.intentDispatcher.dispatch(e,this.container)):(t.debug(`[Framework] re-using prefetched intent response for: ${e.id}`,e.params),n)}async perform(e){return this.getLogger().debug(`[Framework] perform action: ${e.kind}`),this.actionDispatcher.perform(e)}async routeUrl(e){return this.router.resolve(e)}didEnterPage(e){this.container.resolve(D.METRICS).recordPageView(e.pageType,{pageId:e.id,title:e.title})}getLocale(){return this.container.has(D.LOCALE)?this.container.resolve(D.LOCALE):void 0}getTranslator(){return this.container.has(D.TRANSLATOR)?this.container.resolve(D.TRANSLATOR):void 0}getPlatform(){return this.container.resolve(D.PLATFORM)}onAction(e,t){this.actionDispatcher.onAction(e,t)}registerIntent(e){this.intentDispatcher.register(e)}beforeLoad(e){this.beforeGuards.push(e)}afterLoad(e){this.afterGuards.push(e)}runBeforeLoad(e,t){return nt(t?.length?[...this.beforeGuards,...t]:this.beforeGuards,e)}runAfterLoad(e,t){return rt(t?.length?[...this.afterGuards,...t]:this.afterGuards,e)}dispose(){this.container.dispose()}};const j=Symbol.for(`finesoft.publicFields`),ct=[`id`,`pageType`,`title`,`description`,`url`];function lt(e,t){return t===!0?(Object.defineProperty(e,j,{value:!0,enumerable:!1,configurable:!0,writable:!1}),e):(Object.defineProperty(e,j,{value:Object.freeze([...t]),enumerable:!1,configurable:!0,writable:!1}),e)}function ut(e){return typeof e==`object`&&!!e&&e[j]!==void 0}function dt(e){if(typeof e!=`object`||!e)return null;let t=e[j];return t===void 0?null:t===!0?!0:Array.isArray(t)?t:null}function ft(){try{let e=globalThis.process?.env?.NODE_ENV;return e===void 0?!0:e===`production`}catch{return!0}}function pt(e){if(e instanceof Error)return e.stack??`${e.name}: ${e.message}`;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function mt(e){let{status:t,publicMessage:n,devError:r,isProduction:i=ft()}=e,a=!i&&r!==void 0;return{id:`error`,pageType:`error`,title:`Error ${t}`,description:a?`${n}\n\n[dev only]\n${pt(r)}`:n}}var ht=class{fallback(e,t){throw t}async perform(e,t){let n=e.params??{};try{return await this.execute(n,t)}catch(e){return this.fallback(n,e instanceof Error?e:Error(String(e)))}}};function gt(...e){return t=>e.reduce((e,t)=>t(e),t)}function _t(...e){return async t=>{let n=t;for(let t of e)n=await t(n);return n}}function vt(e){return t=>t.map(e)}const M={LEAF:`leaf`,STACK:`stack`,TABS:`tabs`,SPLIT:`split`},N={AUTOMATIC:`automatic`,ALL:`all`,DOUBLE_COLUMN:`doubleColumn`,DETAIL_ONLY:`detailOnly`};var P=class extends Error{constructor(e){super(e),this.name=`NavigationError`}};function F(e,t={}){return{kind:M.LEAF,intent:e,params:t}}function yt(e){let t=Array.isArray(e)?[...e]:[e];return{kind:M.STACK,entries:t}}function bt(e){let t=e.order?[...e.order]:Object.keys(e.branches);return{kind:M.TABS,active:e.active,order:t,branches:{...e.branches}}}function xt(e,t){let n=e.map(e=>({id:e.id,content:e.content}));return t===void 0?{kind:M.SPLIT,columns:n}:{kind:M.SPLIT,columns:n,visibility:t}}function I(e){return e.kind===M.LEAF}function St(e){return e.kind===M.STACK}function Ct(e){return e.kind===M.TABS}function wt(e){return e.kind===M.SPLIT}function Tt(e,t){return{"data-fs-entry":``,"data-fs-intent":e,"data-fs-key":t}}function Et(e,t){return`${e} ${A(t)}`}function Dt(e){let t=[],n=e;for(;;)switch(n.kind){case M.LEAF:return t;case M.STACK:{if(n.entries.length===0)return t;let e=n.entries.length-1;t.push({kind:`stack-entry`,index:e}),n=n.entries[e];break}case M.TABS:{let e=n.branches[n.active];if(e===void 0)return t;t.push({kind:`tab`,key:n.active}),n=e;break}case M.SPLIT:{let e=L(n);if(e===void 0)return t;t.push({kind:`column`,id:e.id}),n=e.content;break}}}function L(e){for(let t=e.columns.length-1;t>=0;t--)if(e.columns[t].content!==void 0)return e.columns[t]}function R(e,t){let n=e;for(let e of t){if(n===void 0)return;n=Ot(n,e)}return n}function Ot(e,t){switch(t.kind){case`stack-entry`:return e.kind===M.STACK?e.entries[t.index]:void 0;case`tab`:return e.kind===M.TABS?e.branches[t.key]:void 0;case`column`:return e.kind===M.SPLIT?e.columns.find(e=>e.id===t.id)?.content:void 0}}function kt(e,t){let n=R(e,t);if(n===void 0)return;let r=[...t],i=n;for(;;)switch(i.kind){case M.STACK:return r;case M.LEAF:return;case M.TABS:{let e=i.branches[i.active];if(e===void 0)return;r.push({kind:`tab`,key:i.active}),i=e;break}case M.SPLIT:{let e=L(i);if(e===void 0)return;r.push({kind:`column`,id:e.id}),i=e.content;break}}}function At(e){let t=[];return z(e,t),t}function z(e,t){switch(e.kind){case M.LEAF:t.push(e);return;case M.STACK:if(e.entries.length===0)return;z(e.entries[e.entries.length-1],t);return;case M.TABS:{let n=e.branches[e.active];n!==void 0&&z(n,t);return}case M.SPLIT:for(let n of jt(e))n.content!==void 0&&z(n.content,t);return}}function B(e){let t=[];return V(e,t),t}function V(e,t){switch(e.kind){case M.LEAF:t.push(e);return;case M.STACK:for(let n of e.entries)V(n,t);return;case M.TABS:for(let n of Object.values(e.branches))V(n,t);return;case M.SPLIT:for(let n of e.columns)n.content!==void 0&&V(n.content,t);return}}function jt(e){let{columns:t,visibility:n}=e;if(t.length===0)return t;switch(n){case N.DETAIL_ONLY:return[t[t.length-1]];case N.DOUBLE_COLUMN:{let e=t.length-1;return e===0?[t[0]]:[t[0],t[e]]}default:return t}}function H(e,t,n){return t.length===0?n(e):U(e,t,0,n)}function U(e,t,n,r){if(n===t.length)return r(e);let i=t[n];switch(i.kind){case`stack-entry`:{if(e.kind!==M.STACK)throw new P(`路径无效:在 ${e.kind} 节点上期望 stack(stack-entry 步)`);if(i.index<0||i.index>=e.entries.length)throw new P(`路径无效:stack entry 索引越界 ${i.index}`);let a=e.entries.slice();return a[i.index]=U(a[i.index],t,n+1,r),{...e,entries:a}}case`tab`:{if(e.kind!==M.TABS)throw new P(`路径无效:在 ${e.kind} 节点上期望 tabs(tab 步)`);let a=e.branches[i.key];if(a===void 0)throw new P(`路径无效:tabs 分支 "${i.key}" 不存在`);return{...e,branches:{...e.branches,[i.key]:U(a,t,n+1,r)}}}case`column`:{if(e.kind!==M.SPLIT)throw new P(`路径无效:在 ${e.kind} 节点上期望 split(column 步)`);let a=e.columns.findIndex(e=>e.id===i.id);if(a===-1)throw new P(`路径无效:split 列 "${i.id}" 不存在`);let o=e.columns[a].content;if(o===void 0)throw new P(`路径无效:split 列 "${i.id}" 内容为空`);let s=e.columns.slice();return s[a]={...s[a],content:U(o,t,n+1,r)},{...e,columns:s}}}}function Mt(e){let t=[],n,r=e;for(;;)switch(r.kind===M.STACK&&(n=[...t]),r.kind){case M.LEAF:return n;case M.STACK:{if(r.entries.length===0)return n;let e=r.entries.length-1;t.push({kind:`stack-entry`,index:e}),r=r.entries[e];break}case M.TABS:{let e=r.branches[r.active];if(e===void 0)return n;t.push({kind:`tab`,key:r.active}),r=e;break}case M.SPLIT:{let e=L(r);if(e===void 0)return n;t.push({kind:`column`,id:e.id}),r=e.content;break}}}function W(e,t){return t?kt(e,t):Mt(e)}function Nt(e,t,n){let r=W(e,n);if(r===void 0)throw new P(`push 失败:激活路径上没有可用的 stack`);return H(e,r,e=>{let n=e;return{...n,entries:[...n.entries,t]}})}function Pt(e,t=1,n){if(t<=0)return e;let r=W(e,n);if(r===void 0)throw new P(`pop 失败:激活路径上没有可用的 stack`);return H(e,r,e=>{let n=e,r=Math.max(1,n.entries.length-t);return r===n.entries.length?n:{...n,entries:n.entries.slice(0,r)}})}function Ft(e,t){let n=W(e,t);if(n===void 0)throw new P(`popToRoot 失败:激活路径上没有可用的 stack`);return H(e,n,e=>{let t=e;return t.entries.length<=1?t:{...t,entries:t.entries.slice(0,1)}})}function It(e,t,n){let r=W(e,n);if(r===void 0)throw new P(`popTo 失败:激活路径上没有可用的 stack`);return H(e,r,e=>{let n=e;if(t<0||t>=n.entries.length)throw new P(`popTo 失败:index ${t} 越界(栈深 ${n.entries.length})`);return t===n.entries.length-1?n:{...n,entries:n.entries.slice(0,t+1)}})}function Lt(e,t,n){let r=W(e,n);if(r===void 0)throw new P(`replaceTop 失败:激活路径上没有可用的 stack`);return H(e,r,e=>{let n=e;if(n.entries.length===0)throw new P(`replaceTop 失败:stack 为空`);let r=n.entries.slice();return r[r.length-1]=t,{...n,entries:r}})}function Rt(e,t,n){let r=n??Vt(e,M.TABS);if(r===void 0)throw new P(`selectTab 失败:激活路径上没有 tabs 节点`);return H(e,r,e=>{if(e.kind!==M.TABS)throw new P(`selectTab 失败:目标是 ${e.kind} 节点,不是 tabs`);let n=e;if(!(t in n.branches))throw new P(`selectTab 失败:未知分支 "${t}"`);return n.active===t?n:{...n,active:t}})}function zt(e,t,n,r){let i=r??Vt(e,M.SPLIT);if(i===void 0)throw new P(`selectColumn 失败:激活路径上没有 split 节点`);return H(e,i,e=>{if(e.kind!==M.SPLIT)throw new P(`selectColumn 失败:目标是 ${e.kind} 节点,不是 split`);let r=e,i=r.columns.findIndex(e=>e.id===t);if(i===-1)throw new P(`selectColumn 失败:未知列 "${t}"`);let a=r.columns.map((e,t)=>t===i?{...e,content:n}:t>i?{...e,content:void 0}:e);return{...r,columns:a}})}function Bt(e,t,n){let r=n??Vt(e,M.SPLIT);if(r===void 0)throw new P(`setVisibility 失败:激活路径上没有 split 节点`);return H(e,r,e=>{if(e.kind!==M.SPLIT)throw new P(`setVisibility 失败:目标是 ${e.kind} 节点,不是 split`);return{...e,visibility:t}})}function Vt(e,t){let n=[],r=e;for(;;){if(r.kind===t)return n;switch(r.kind){case M.LEAF:return;case M.STACK:{if(r.entries.length===0)return;let e=r.entries.length-1;n.push({kind:`stack-entry`,index:e}),r=r.entries[e];break}case M.TABS:{let e=r.branches[r.active];if(e===void 0)return;n.push({kind:`tab`,key:r.active}),r=e;break}case M.SPLIT:{let e=L(r);if(e===void 0)return;n.push({kind:`column`,id:e.id}),r=e.content;break}}}}const Ht=new Set(Object.values(N));function G(e){switch(e.kind){case M.LEAF:return{kind:M.LEAF,intent:e.intent,params:e.params};case M.STACK:return{kind:M.STACK,entries:e.entries.map(G)};case M.TABS:{let t={};for(let n of Object.keys(e.branches))t[n]=G(e.branches[n]);return{kind:M.TABS,active:e.active,order:[...e.order],branches:t}}case M.SPLIT:{let t=e.columns.map(e=>({id:e.id,content:e.content===void 0?null:G(e.content)}));return e.visibility===void 0?{kind:M.SPLIT,columns:t}:{kind:M.SPLIT,columns:t,visibility:e.visibility}}}}function Ut(e){return A(G(e))}const Wt=new Set([M.LEAF,M.STACK,M.TABS,M.SPLIT]);function K(e){return Gt(e,`$`)}function q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Gt(e,t){if(!q(e))throw new P(`反序列化失败:${t} 不是对象`);let n=e.kind;if(typeof n!=`string`||!Wt.has(n))throw new P(`反序列化失败:${t}.kind 非法(${String(n)})`);switch(n){case M.LEAF:return Kt(e,t);case M.STACK:return qt(e,t);case M.TABS:return Jt(e,t);case M.SPLIT:return Yt(e,t)}}function Kt(e,t){if(typeof e.intent!=`string`)throw new P(`反序列化失败:${t}.intent 必须是字符串`);if(!q(e.params))throw new P(`反序列化失败:${t}.params 必须是对象`);return{kind:M.LEAF,intent:e.intent,params:{...e.params}}}function qt(e,t){if(!Array.isArray(e.entries))throw new P(`反序列化失败:${t}.entries 必须是数组`);return{kind:M.STACK,entries:e.entries.map((e,n)=>Gt(e,`${t}.entries[${n}]`))}}function Jt(e,t){if(typeof e.active!=`string`)throw new P(`反序列化失败:${t}.active 必须是字符串`);if(!Array.isArray(e.order)||!e.order.every(e=>typeof e==`string`))throw new P(`反序列化失败:${t}.order 必须是字符串数组`);if(!q(e.branches))throw new P(`反序列化失败:${t}.branches 必须是对象`);let n={};for(let r of Object.keys(e.branches))n[r]=Gt(e.branches[r],`${t}.branches.${r}`);for(let r of e.order)if(!(r in n))throw new P(`反序列化失败:${t}.order 包含不在 branches 中的键 "${r}"`);if(!(e.active in n))throw new P(`反序列化失败:${t}.active "${e.active}" 不在 branches 中`);return{kind:M.TABS,active:e.active,order:[...e.order],branches:n}}function Yt(e,t){if(!Array.isArray(e.columns))throw new P(`反序列化失败:${t}.columns 必须是数组`);let n=e.columns.map((e,n)=>{let r=`${t}.columns[${n}]`;if(!q(e))throw new P(`反序列化失败:${r} 不是对象`);if(typeof e.id!=`string`)throw new P(`反序列化失败:${r}.id 必须是字符串`);let i=e.content===null||e.content===void 0?void 0:Gt(e.content,`${r}.content`);return{id:e.id,content:i}});if(e.visibility===void 0)return{kind:M.SPLIT,columns:n};if(typeof e.visibility!=`string`||!Ht.has(e.visibility))throw new P(`反序列化失败:${t}.visibility 非法值 ${JSON.stringify(e.visibility)}`);return{kind:M.SPLIT,columns:n,visibility:e.visibility}}const Xt=`__nav`;function Zt(e){try{let t=new URL(e,`http://localhost`);return{path:t.pathname,query:t.searchParams}}catch{let t=e.split(`?`)[0].split(`#`)[0],n=e.includes(`?`)?e.slice(e.indexOf(`?`)+1).split(`#`)[0]:``;return{path:t||`/`,query:new URLSearchParams(n)}}}function Qt(e,t){let n=t.toString();return n?`${e}?${n}`:e}function $t(e){let t=[];for(let n of e.getRoutes()){let e=n.indexOf(` → `);if(e===-1)continue;let r=n.slice(0,e),i=n.slice(e+3);r&&i&&t.push({pattern:r,intentId:i})}return t}function en(e){if(e!=null){if(typeof e==`string`)return e;if(typeof e==`number`)return Number.isFinite(e)?String(e):void 0;if(typeof e==`boolean`)return String(e)}}function tn(e,t,n){for(let r of e){if(r.intentId!==t)continue;let e=nn(r.pattern,n);if(e)return e}}function nn(e,t){let n=new Set,r=!0,i=e.split(/(\/:[\w]+\??)/).map(e=>{let i=e.match(/^\/:(\w+)(\?)?$/);if(!i)return e;let a=i[1],o=i[2]===`?`,s=en(t[a]);return s===void 0?(o||(r=!1),``):(n.add(a),`/${encodeURIComponent(s)}`)}).join(``);if(!r)return;let a=i===``?`/`:i,o=new URLSearchParams;for(let e of Object.keys(t).sort()){if(n.has(e))continue;let r=en(t[e]);r!==void 0&&o.set(e,r)}return Qt(a,o)}function rn(e,t,n){if(typeof e.reverse==`function`){let r=e.reverse(t,n);if(r!==void 0)return r}return tn($t(e),t,n)}function an(e){return sn(A(G(e)))}function on(e){let t;try{t=cn(e)}catch{throw new P(`导航参数解码失败:非法的 base64url`)}let n;try{n=JSON.parse(t)}catch{throw new P(`导航参数解码失败:非法的 JSON`)}return K(n)}function sn(e){let t=fn(e),n=``;for(let e of t)n+=String.fromCharCode(e);return ln(n).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function cn(e){let t=un(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return pn(n)}function ln(e){return typeof btoa==`function`?btoa(e):dn(e,`binary`).toString(`base64`)}function un(e){return typeof atob==`function`?atob(e):dn(e,`base64`).toString(`binary`)}function dn(e,t){let n=globalThis.Buffer;if(!n)throw new P(`导航参数编解码失败:当前运行时缺少 base64 能力`);return n.from(e,t)}function fn(e){if(typeof TextEncoder<`u`)return new TextEncoder().encode(e);let t=[];for(let n of e){let e=n.codePointAt(0);e<128?t.push(e):e<2048?t.push(192|e>>6,128|e&63):e<65536?t.push(224|e>>12,128|e>>6&63,128|e&63):t.push(240|e>>18,128|e>>12&63,128|e>>6&63,128|e&63)}return Uint8Array.from(t)}function pn(e){if(typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0;n<e.length;){let r=e[n++];r<128?t+=String.fromCodePoint(r):r<224?t+=String.fromCodePoint((r&31)<<6|e[n++]&63):r<240?t+=String.fromCodePoint((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCodePoint((r&7)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)}return t}function mn(e){if(I(e))return{intent:e.intent,params:e.params};let t=R(e,Dt(e));if(t!==void 0&&I(t))return{intent:t.intent,params:t.params}}function hn(){return{encode(e,t){let n=mn(e);return n===void 0?`/`:rn(t,n.intent,n.params)??`/`},decode(e){let{query:t}=Zt(e),n=t.get(Xt);if(!(n===null||n===``))return on(n)}}}function gn(e={}){let t=e.param??`__nav`;return{encode(e,n){let r=mn(e),{path:i,query:a}=Zt(r?rn(n,r.intent,r.params)??`/`:`/`);return a.set(t,an(e)),Qt(i,a)},decode(e){let{query:n}=Zt(e),r=n.get(t);if(!(r===null||r===``))return on(r)}}}function _n(e){let t=[],n=e.split(/(\/:[\w]+\??)/).map(e=>{let n=e.match(/^\/:(\w+)(\?)?$/);return n?(t.push(n[1]),n[2]?`(?:/([^/]+))?`:`/([^/]+)`):e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`)}).join(``);return{regex:RegExp(`^${n}/?$`),paramNames:t}}function vn(e){return $t(e).map(e=>{let{regex:t,paramNames:n}=_n(e.pattern);return{...e,regex:t,paramNames:n}})}function yn(e,t){let{path:n,query:r}=Zt(e),i=Object.fromEntries(r);for(let e of t){let t=n.match(e.regex);if(!t)continue;let r=Object.assign(Object.create(null),i);for(let n=0;n<e.paramNames.length;n++){let i=t[n+1];i!==void 0&&(r[e.paramNames[n]]=i)}return{intentId:e.intentId,params:r}}}function bn(){return{decode(e,t){let n=yn(e,vn(t));if(n)return yt([F(n.intentId,n.params)])},encode(e,t){let n=mn(e);return n===void 0?`/`:rn(t,n.intent,n.params)??`/`}}}const J={PUSH:`push`,POP:`pop`,POP_TO_ROOT:`popToRoot`,POP_TO:`popTo`,REPLACE_TOP:`replaceTop`,SELECT_TAB:`selectTab`,SELECT_COLUMN:`selectColumn`,SET_VISIBILITY:`setVisibility`,HYDRATE:`hydrate`};function Y(e,t){return Et(e,t)}function xn(e,t){return{id:`error-${e}`,pageType:`error`,title:t,description:t}}function Sn(e){let{intentDispatcher:t,router:n,createContext:r,beforeLoad:i=[],afterLoad:a=[],prefetched:o,getErrorPage:s=xn,onRedirect:c}=e,l=e.isServer??typeof window>`u`,u=e.initial,d={tree:u,destinations:[]},f=new Set,p=new Map,m=Promise.resolve(d);function h(e){let t=m.then(e,e);return m=t.then(e=>e,()=>d),t}async function g(e){let t=At(e),n=Cn(e),r=n?Y(n.intent,n.params):void 0,i=[];for(let e of t){let t=Y(e.intent,e.params),n=r!==void 0&&t===r,a=p.get(t);n?i.push(await _(e,a?.page)):a===void 0?i.push(await v(e)):i.push(a)}for(let e of i){let t=Y(e.intent,e.params);e.status===void 0?p.set(t,e):p.delete(t)}let a=new Set(B(e).map(e=>Y(e.intent,e.params)));for(let e of p.keys())a.has(e)||p.delete(e);return{tree:e,destinations:i}}async function _(e,t){let n=e.intent,o=e.params,l=r({intent:n,params:o}),u=l.navigation??b(n,o,l),d=await nt(i,u);if(d.kind===`redirect`)return c?.({url:d.url,status:d.status}),{intent:n,params:o,page:t??s(d.status,`Redirecting`),status:d.status};if(d.kind===`deny`)return{intent:n,params:o,page:s(d.status,d.message),status:d.status};if(d.kind===`rewrite`){let e=await x(d.url);e&&(n=e.intent,o=e.params,l=r({intent:n,params:o}),u=l.navigation??b(n,o,l),t=void 0)}let f=await y(n,o,l,t);if(f.status!==void 0)return{intent:n,params:o,page:f.page,status:f.status};let p=await rt(a,{...u,page:f.page});return p.kind===`redirect`?(c?.({url:p.url,status:p.status}),{intent:n,params:o,page:f.page,status:p.status}):p.kind===`deny`?{intent:n,params:o,page:f.page,status:p.status}:{intent:n,params:o,page:f.page}}async function v(e){let t=r({intent:e.intent,params:e.params}),n=await y(e.intent,e.params,t,void 0);return{intent:e.intent,params:e.params,page:n.page,...n.status===void 0?{}:{status:n.status}}}async function y(e,n,r,i){if(i!==void 0)return{page:i};let a={id:e,params:n},c=o?.get(a);if(c!==void 0)return{page:c};try{return{page:await t.dispatch(a,r.container)}}catch{return{page:s(500,`Internal error`),status:500}}}function b(e,t,n){let r=n.url??`/`,i;try{i=new URL(r,`http://localhost`).pathname}catch{i=r.split(`?`)[0].split(`#`)[0]}return{url:r,path:i,params:t,intent:{id:e,params:t},isServer:l,container:n.container,getCookie:()=>void 0,getHeader:()=>void 0}}async function x(e){let t=await n.resolve(e);if(t)return F(t.intent.id,t.intent.params??{})}function S(e){u=e.tree,d=e;for(let e of f)e(d);return d}function C(e){switch(e.kind){case J.PUSH:return Nt(u,F(e.intent,e.params),e.target);case J.POP:return Pt(u,e.count,e.target);case J.POP_TO_ROOT:return Ft(u,e.target);case J.POP_TO:return It(u,e.index,e.target);case J.REPLACE_TOP:return Lt(u,F(e.intent,e.params),e.target);case J.SELECT_TAB:return Rt(u,e.key,e.target);case J.SELECT_COLUMN:return zt(u,e.columnId,e.intent===void 0?void 0:F(e.intent,e.params),e.target);case J.SET_VISIBILITY:return Bt(u,e.visibility,e.target);case J.HYDRATE:return e.tree}}function w(e){return h(async()=>S(await g(C(e))))}return{getTree(){return u},getSnapshot(){return d},apply:w,push(e,t,n){return w({kind:J.PUSH,intent:e,params:t,target:n?.target})},pop(e){return w({kind:J.POP,count:e})},popToRoot(){return w({kind:J.POP_TO_ROOT})},replaceTop(e,t){return w({kind:J.REPLACE_TOP,intent:e,params:t})},selectTab(e,t){return w({kind:J.SELECT_TAB,key:e,target:t})},selectColumn(e,t,n,r){return w({kind:J.SELECT_COLUMN,columnId:e,intent:t,params:n,target:r})},setVisibility(e,t){return w({kind:J.SET_VISIBILITY,visibility:e,target:t})},hydrate(e){return w({kind:J.HYDRATE,tree:e})},invalidate(e){e===void 0?p.clear():p.delete(e)},refresh(){return h(async()=>{let e=Cn(u);return e&&p.delete(Y(e.intent,e.params)),S(await g(u))})},subscribe(e){return f.add(e),()=>{f.delete(e)}},resolve(){return h(async()=>S(await g(u)))}}}function Cn(e){let t=R(e,Dt(e));if(t!==void 0)return t.kind===`leaf`?t:void 0}function wn(e){return typeof e!=`object`||!e?!1:I(e)||St(e)||Ct(e)||wt(e)}function Tn(e,t){if(wn(e))return e;let n=e(t);return n===void 0?{kind:`leaf`,intent:`@finesoft/navigation-root`,params:{}}:n}function En(e){return wn(e)?()=>e:e}function Dn(){return typeof window<`u`&&window.location?window.location.pathname+window.location.search:`/`}function On(e){let t=e.codec??hn(),{initial:n,beforeLoad:r,afterLoad:i,getErrorPage:a}=e;return{initial:n,codec:t,beforeLoad:r,afterLoad:i,getErrorPage:a,toBrowserConfig(e){return{initial:Tn(n,e??Dn()),codec:t,beforeLoad:r,afterLoad:i,getErrorPage:a}},toSSRDefinition(){return{codec:t,initial:En(n),beforeLoad:r,afterLoad:i}}}}function kn(e,t){return{path:e,...t}}function An(e,t){let n={intentId:t.intentId,async perform(e,n){let r=e.params??{};try{return await t.handler(r,n)}catch(e){let n=e instanceof Error?e:Error(String(e));if(t.fallback)return t.fallback(r,n);throw n}}};return{path:e,intentId:t.intentId,controller:n,params:t.params,query:t.query,renderMode:t.renderMode,beforeLoad:t.beforeLoad,afterLoad:t.afterLoad}}function jn(e,t,n){let r=new Set;for(let i of t){i.controller&&!r.has(i.intentId)&&(e.registerIntent(i.controller),r.add(i.intentId));let t={renderMode:i.renderMode,beforeGuards:i.beforeLoad,afterGuards:i.afterLoad,paramCodecs:i.params,queryCodecs:i.query};if(e.router.add(i.path,i.intentId,t),n?.locales?.length){let n=i.path===`/`?`/:locale`:`/:locale${i.path}`;e.router.add(n,i.intentId,t)}}}const Mn=`__finesoft_session__`,Nn=1;function Pn(e){return typeof e==`object`&&!!e&&`url`in e&&typeof e.url==`string`}var Fn=class extends Error{constructor(e){super(e),this.name=`SessionError`}};function In(e){return A(e)}function Ln(e,t){if(e===void 0)return;let n;try{n=JSON.parse(e)}catch{return}if(Rn(n)&&n.version===t&&typeof n.capturedAt==`number`&&Rn(n.slices)&&Rn(n.scoped))return n}function Rn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function X(e,t){return Et(e,t)}function zn(e){return B(e).map(e=>X(e.intent,e.params))}function Bn(e){let t=new Map(e?Object.entries(e):void 0);return{get(e){return t.get(e)},set(e,n){t.set(e,n)},delete(e){t.delete(e)},prune(e){let n=new Set(e);for(let e of t.keys())n.has(e)||t.delete(e)},keys(){return[...t.keys()]}}}function Vn(e){let{storage:t,key:n=Mn,version:r=1,maxAgeMs:i,navigation:a,now:o=()=>Date.now(),onError:s}=e,c=new Map,l=Bn();function u(e,t){s?.(e,t)}function d(){let e={};for(let t of c.values())try{e[t.key]=t.capture()}catch(e){u(e,{phase:`capture`,key:t.key})}return e}function f(){let e={};for(let t of l.keys())e[t]=l.get(t);return e}function p(){return{version:r,navigation:a?.capture(),url:a?.captureUrl?.(),slices:d(),scoped:f(),capturedAt:o()}}function m(e=p()){try{t.set(n,In(e))}catch(e){u(e,{phase:`persist`})}}function h(){let e;try{e=t.get(n)}catch(e){u(e,{phase:`load`});return}let a=Ln(e,r);if(a!==void 0&&!(i!==void 0&&o()-a.capturedAt>i))return a}function g(e){for(let t of c.values()){let n=e[t.key];if(n!==void 0)try{t.restore(n)}catch(e){u(e,{phase:`restore`,key:t.key})}}}function _(e=h()){if(e===void 0)return;l=Bn({...e.scoped});let t;try{t=a?.apply(e.navigation)}catch(e){u(e,{phase:`restore`});return}if(t instanceof Promise)return t.then(()=>{g(e.slices)},e=>{u(e,{phase:`restore`})});g(e.slices)}return{register(e){return c.set(e.key,e),()=>{c.get(e.key)===e&&c.delete(e.key)}},get scope(){return l},capture:p,persist:m,load:h,restore:_,clear(){t.delete(n)},save(){m()}}}function Hn(e,t){return{capture(){return G(e.getTree())},apply(t){if(!(t===void 0||Pn(t)))return e.hydrate(K(t)).then(()=>void 0)},captureUrl(){return t?.()},presentKeys(){return zn(e.getTree())}}}function Un(e){return{capture(){return{url:e.currentUrl()}},apply(t){if(Pn(t))return e.navigate(t.url)},captureUrl(){return e.currentUrl()},presentKeys(){if(e.currentIntent){let{intent:t,params:n}=e.currentIntent();return[X(t,n)]}return[e.currentUrl()]}}}var Wn=class{map=new Map;capacity;constructor(e){if(e<1)throw Error(`[LruMap] capacity must be >= 1, got ${e}`);this.capacity=e}get(e){if(!this.map.has(e))return;let t=this.map.get(e);return this.map.delete(e),this.map.set(e,t),t}set(e,t){if(this.map.has(e))this.map.delete(e);else if(this.map.size>=this.capacity){let e=this.map.keys().next().value;e!==void 0&&this.map.delete(e)}this.map.set(e,t)}has(e){return this.map.has(e)}delete(e){return this.map.delete(e)}get size(){return this.map.size}clear(){this.map.clear()}};function Gn(e){return e!=null}function Kn(e){return e==null}function qn(){return typeof window>`u`?`browser`:document.referrer.startsWith(`android-app://`)?`twa`:window.matchMedia(`(display-mode: standalone)`).matches||`standalone`in window.navigator&&window.navigator.standalone===!0?`standalone`:`browser`}function Jn(e){return e.replace(/^https?:\/\//,``)}function Yn(e){try{let t=new URL(e);return t.pathname+t.search+t.hash}catch{return e}}function Xn(e){return e.split(`?`)[0]}function Zn(e){return e.split(`?`)[0].split(`#`)[0]}function Qn(e,t){if(!t)return e;let n=new URLSearchParams;for(let[e,r]of Object.entries(t))r!==void 0&&n.set(e,r);let r=n.toString();return r?`${e}?${r}`:e}function Z(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function $n(e){let t=new Map;if(!e)return t;for(let n of e.split(`;`)){let e=n.indexOf(`=`);if(e===-1)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1).trim();r&&t.set(r,i)}return t}function er(e){let{url:t,intent:n,container:r,request:i}=e,a=new URL(t,`http://localhost`),o=$n(i?.headers.get(`cookie`)??``);return{url:t,path:a.pathname,params:n.params??{},intent:n,isServer:!0,container:r,getCookie:e=>o.get(e),getHeader:e=>i?.headers.get(e)??void 0}}function Q(e){let{url:t,intent:n,container:r}=e;return{url:t,path:new URL(t,window.location.origin).pathname,params:n.params??{},intent:n,isServer:!1,container:r,getCookie:e=>$n(document.cookie).get(e),getHeader:()=>void 0}}function tr(){return{kind:`next`}}function nr(e,t=302){return{kind:`redirect`,url:e,status:t}}function rr(e){return{kind:`rewrite`,url:e}}function ir(e=403,t=`Forbidden`){return{kind:`deny`,status:e,message:t}}var ar=class{recorders;constructor(e){this.recorders=e}record(e,t){for(let n of this.recorders)n.record(e,t)}async flush(){let e=[];for(let t of this.recorders)t.flush&&e.push(t.flush());await Promise.all(e)}destroy(){for(let e of this.recorders)e.destroy?.()}},or=class{observer;tracked=new Map;captured=[];minDuration;constructor(e={}){this.minDuration=e.minVisibleDuration??1e3,this.observer=new IntersectionObserver(e=>{let t=Date.now();for(let n of e){let e=this.tracked.get(n.target);e&&(n.isIntersecting?e.visibleSince===null&&(e.visibleSince=t):e.visibleSince!==null&&(t-e.visibleSince>=this.minDuration&&this.captured.push({id:e.id,timestamp:e.visibleSince,metadata:e.metadata}),e.visibleSince=null))}},{threshold:e.threshold??.5})}observe(e,t,n){this.tracked.set(e,{id:t,metadata:n,visibleSince:null}),this.observer.observe(e)}unobserve(e){this.observer.unobserve(e),this.tracked.delete(e)}consume(){let e=Date.now();for(let[,t]of this.tracked)t.visibleSince!==null&&e-t.visibleSince>=this.minDuration&&(this.captured.push({id:t.id,timestamp:t.visibleSince,metadata:t.metadata}),t.visibleSince=e);return this.captured.splice(0)}destroy(){this.observer.disconnect(),this.tracked.clear(),this.captured.length=0}},sr=class{record(){}async flush(){}destroy(){}},cr=class{inner;providers;constructor(e,t){this.inner=e,this.providers=t}record(e,t){let n={};for(let e of this.providers)Object.assign(n,e.getFields());t&&Object.assign(n,t),this.inner.record(e,n)}async flush(){return this.inner.flush?.()}destroy(){this.inner.destroy?.()}};function lr(t){let{framework:n,log:r}=t;n.onAction(e.EXTERNAL_URL,e=>{r.debug(`ExternalUrlAction → ${e.url}`),window.open(e.url,`_blank`,`noopener,noreferrer`)})}const ur=5e3;let dr=null;function $(){dr?.()}function fr(e,t,n){$();let r=Math.max(0,n),i=Date.now(),a=!1,o=null,s=null,c=null,l=null;dr=p,f(),document.addEventListener(`load`,u,!0),s=setInterval(u,100),c=setTimeout(u,ur),u();function u(){a||o!==null||(o=requestAnimationFrame(()=>{o=null,d()}))}function d(){if(a)return;let n=Date.now()-i,o=t();if(!o){n>=ur&&(e.warn(`tryScroll: timed out waiting for the scrollable element`,{target:r,elapsedMs:n}),p());return}o.scrollTop=r;let s=o.scrollTop;if(s>=r-2){e.info(`scroll restored`,{target:r,actual:s,elapsedMs:n}),p();return}n>=ur&&(e.warn(`tryScroll: timed out before reaching the target`,{target:r,actual:s,elapsedMs:n,scrollHeight:o.scrollHeight,clientHeight:o.clientHeight}),p())}function f(){if(typeof MutationObserver>`u`)return;let e=document.body??document.documentElement;e&&(l=new MutationObserver(()=>{u()}),l.observe(e,{childList:!0,subtree:!0}))}function p(){a||(a=!0,dr===p&&(dr=null),o!==null&&(cancelAnimationFrame(o),o=null),s!==null&&(clearInterval(s),s=null),c!==null&&(clearTimeout(c),c=null),l?.disconnect(),l=null,document.removeEventListener(`load`,u,!0))}}var pr=class{entries;log;getScrollablePageElement;persistInHistoryState;currentStateId;constructor(e,t,n=10){this.entries=new Wn(n),this.log=e,this.getScrollablePageElement=t.getScrollablePageElement,this.persistInHistoryState=t.persistInHistoryState??!1}historyState(e,t){return this.persistInHistoryState?{id:e,state:t}:{id:e}}replaceState(e,t){$();let n=Z();window.history.replaceState(this.historyState(n,e),``,t),this.currentStateId=n,this.entries.set(n,{state:e,scrollY:0}),this.scrollTop=0,this.log.info(`replaceState`,e,t,n)}pushState(e,t){$();let n=Z();window.history.pushState(this.historyState(n,e),``,t),this.currentStateId=n,this.entries.set(n,{state:e,scrollY:0}),this.scrollTop=0,this.log.info(`pushState`,e,t,n)}beforeTransition(){$();let{state:e}=window.history;if(!e)return;let t=this.entries.get(e.id);if(!t){this.log.info(`current history state evicted from LRU, not saving scroll position`);return}let{scrollTop:n}=this;this.entries.set(e.id,{...t,scrollY:n}),this.log.info(`saving scroll position`,n)}onPopState(e){window.addEventListener(`popstate`,t=>{$(),this.currentStateId=t.state?.id,this.currentStateId||this.log.warn(`encountered a null event.state.id in onPopState event:`,window.location.href),this.log.info(`popstate`,this.entries,this.currentStateId);let n=this.currentStateId?this.entries.get(this.currentStateId):void 0,r=this.persistInHistoryState?t.state?.state:void 0,i=n?.state??r;if(Promise.resolve(e(window.location.href,i)).catch(e=>{this.log.error(`onPopState listener error:`,e)}),!n)return;let{scrollY:a}=n;this.log.info(`restoring scroll to`,a),fr(this.log,()=>this.getScrollablePageElement(),a)})}pushUrl(e){$();let t=Z();window.history.pushState({id:t},``,e),this.currentStateId=t,this.scrollTop=0,this.log.info(`pushUrl (no state)`,e,t)}replaceUrl(e){$();let t=Z();window.history.replaceState({id:t},``,e),this.currentStateId=t,this.scrollTop=0,this.log.info(`replaceUrl (no state)`,e,t)}updateState(e){if(!this.currentStateId){this.log.warn(`failed: encountered a null currentStateId inside updateState`);return}let t=this.entries.get(this.currentStateId),n=e(t?.state);this.log.info(`updateState`,n,this.currentStateId),this.entries.set(this.currentStateId,{scrollY:t?.scrollY??0,state:n})}get scrollTop(){return this.getScrollablePageElement()?.scrollTop||0}set scrollTop(e){let t=this.getScrollablePageElement();t&&(t.scrollTop=e)}};function mr(t){let{framework:n,log:r,callbacks:i,updateApp:a}=t,o=t.manageHistory??!0,{onForward:s}=t,c=!0,l=0,u=o?new pr(r,{getScrollablePageElement:t.getScrollablePageElement??(()=>document.getElementById(`scrollable-page-override`)||document.getElementById(`scrollable-page`)||document.documentElement)}):void 0;async function d(e,t,o){if(t>=5){r.error(`Navigation redirect loop detected (5 redirects), stopping at: ${e}`);return}let s=c||e===window.location.pathname+window.location.search,p=await n.routeUrl(e);if(!p){r.warn(`FlowAction: no route for ${e}`);return}let m=Q({url:e,intent:p.intent,container:n.container}),h=await n.runBeforeLoad(m,p.beforeGuards);if(h.kind===`redirect`){r.debug(`beforeLoad → redirect to ${h.url}`),await d(h.url,t+1,o);return}if(h.kind===`deny`){r.warn(`beforeLoad → denied (${h.status}): ${h.message}`);return}if(h.kind===`rewrite`){r.debug(`beforeLoad → rewrite to ${h.url}`),await d(h.url,t+1,o);return}let g=n.dispatch(p.intent);if(await Promise.race([g,new Promise(e=>setTimeout(e,500))]).catch(()=>{}),o!==l){r.info(`FlowAction superseded by newer navigation`,e);return}u?.beforeTransition(),a({page:g.then(async a=>{if(o!==l)return r.info(`FlowAction commit superseded`,e),a;let c={...m,page:a},h=await n.runAfterLoad(c,p.afterGuards);if(h.kind===`redirect`)return r.debug(`afterLoad → redirect to ${h.url}`),d(h.url,t+1,o),a;let g=e;return h.kind===`rewrite`&&(g=h.url,r.debug(`afterLoad → rewrite URL to ${g}`)),h.kind===`deny`?(r.warn(`afterLoad → denied (${h.status})`),a):(s?u?.replaceState({page:a},g):u?.pushState({page:a},g),i.onNavigate(new URL(g,window.location.origin).pathname),f(a),a)},t=>{if(o===l){let t=e;s?u?.replaceUrl(t):u?.pushUrl(t),i.onNavigate(new URL(t,window.location.origin).pathname)}throw t}),isFirstPage:c}),c=!1}n.onAction(e.FLOW,async e=>{let t=e,a=t.url;if(r.debug(`FlowAction → ${a}`),t.presentationContext===`modal`){let e=await n.routeUrl(a);if(e){let t=await n.dispatch(e.intent);i.onModal(t)}return}if(s){await s(a);return}await d(a,0,++l)}),u?.onPopState(async(e,t)=>{if(r.debug(`popstate → ${e}, cached=${!!t}`),i.onNavigate(new URL(e).pathname),t){let{page:e}=t;f(e),a({page:e,isFirstPage:c});return}let o=new URL(e),s=await n.routeUrl(o.pathname+o.search);if(!s){r.error(`received popstate without data, but URL was unroutable:`,e),f(null),a({page:Promise.reject(Error(`404`)),isFirstPage:c});return}let u=Q({url:o.pathname+o.search,intent:s.intent,container:n.container}),p=await n.runBeforeLoad(u,s.beforeGuards);if(p.kind===`redirect`){r.debug(`popstate beforeLoad → redirect to ${p.url}`);let e=++l;await d(p.url,0,e);return}if(p.kind===`deny`||p.kind===`rewrite`){if(p.kind===`deny`)r.warn(`popstate beforeLoad → denied`);else{let e=++l;await d(p.url,0,e)}return}let m=n.dispatch(s.intent);await Promise.race([m,new Promise(e=>setTimeout(e,500))]).catch(()=>{}),a({page:m.then(async e=>{let t={...u,page:e},a=await n.runAfterLoad(t,s.afterGuards);if(a.kind===`redirect`){r.debug(`popstate afterLoad → redirect to ${a.url}`);let t=++l;return d(a.url,0,t),e}if(a.kind===`rewrite`){r.debug(`popstate afterLoad → rewrite URL to ${a.url}`);let t=window.history.state?.id;return window.history.replaceState({id:t},``,a.url),i.onNavigate(new URL(a.url,window.location.origin).pathname),f(e),e}return a.kind===`deny`?(r.warn(`popstate afterLoad → denied (${a.status})`),e):(f(e),e)}),isFirstPage:c})});function f(e){(async()=>{try{e&&n.didEnterPage(e)}catch(e){r.error(`didEnterPage error:`,e)}})()}}function hr(e){let{framework:t,log:n,callbacks:r,updateApp:i}=e;mr({framework:t,log:n,callbacks:r,updateApp:i,getScrollablePageElement:e.getScrollablePageElement,manageHistory:e.manageHistory,onForward:e.onForward}),lr({framework:t,log:n})}function gr(e,t){let n={};return e!==void 0&&(n.getSnapshot=(...t)=>e.getSnapshot(...t),n.subscribe=(...t)=>e.subscribe(...t),n.push=(...t)=>e.push(...t),n.pop=(...t)=>e.pop(...t),n.popToRoot=(...t)=>e.popToRoot(...t),n.replaceTop=(...t)=>e.replaceTop(...t),n.selectTab=(...t)=>e.selectTab(...t),n.selectColumn=(...t)=>e.selectColumn(...t)),t!==void 0&&(n.save=(...e)=>t.save(...e),n.clear=(...e)=>t.clear(...e),Object.defineProperty(n,"scope",{get:()=>t.scope,enumerable:!0,configurable:!0})),n}function _r(e){let t=[];e.hasAttribute(`data-restore-root`)&&t.push(e);for(let n of e.querySelectorAll(`[data-restore-root]`))t.push(n);return t}function vr(e){return e.getAttribute(`data-restore-key`)||e.name||void 0}function yr(e){return e.getAttribute(`data-fs-key`)??void 0}function br(e){let{scope:t}=e,n=e.schedule??(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(e):e()});function r(e){let t={},n={},r={};for(let i of _r(e)){for(let e of i.querySelectorAll(`input, textarea, select`)){if(e.type===`password`||e.hasAttribute(`data-restore-ignore`))continue;let n=vr(e);if(!n)continue;let r=e.type;t[n]=r===`checkbox`||r===`radio`?e.checked:e.value}for(let e of i.querySelectorAll(`details`)){let t=e.getAttribute(`data-restore-key`);t&&(n[t]=e.open)}for(let e of i.querySelectorAll(`[data-restore-scroll]`)){let t=e.getAttribute(`data-restore-key`)??e.getAttribute(`data-restore-scroll`);t&&(r[t]={top:e.scrollTop,left:e.scrollLeft})}}return{fields:t,details:n,scroll:r}}function i(e){let n=yr(e);if(!n)return;let i=t.get(n)??{};t.set(n,{...i,__dom:r(e)})}function a(e,t){for(let n of _r(e)){for(let[e,r]of Object.entries(t.fields??{})){let t=n.querySelector(`[data-restore-key="${e}"], [name="${e}"]`);t&&(typeof r==`boolean`?t.checked=r:t.value=r,t.dispatchEvent(new Event(`input`,{bubbles:!0})),t.dispatchEvent(new Event(`change`,{bubbles:!0})))}for(let[e,r]of Object.entries(t.details??{})){let t=n.querySelector(`details[data-restore-key="${e}"]`);t&&(t.open=r)}for(let[e,r]of Object.entries(t.scroll??{})){let t=n.querySelector(`[data-restore-scroll="${e}"], [data-restore-key="${e}"]`);t&&(t.scrollTop=r.top,t.scrollLeft=r.left)}}}function o(e){let r=yr(e);if(!r)return;let i=t.get(r)?.__dom;i&&n(()=>a(e,i))}let s;function c(e){return e?.closest(`[data-fs-entry]`)??void 0}let l=e=>{let t=c(e.target);t&&o(t)},u=e=>{let t=c(e.target);t&&i(t)},d=e=>{let t=c(e.target);t&&i(t)},f=()=>{if(s)for(let e of s.querySelectorAll(`[data-fs-entry]`))i(e)},p=()=>{document.visibilityState===`hidden`&&f()};function m(e){s=e,e.addEventListener(`fs:enter`,l),e.addEventListener(`fs:conceal`,u),e.addEventListener(`input`,d,!0),e.addEventListener(`change`,d,!0),window.addEventListener(`pagehide`,f),document.addEventListener(`visibilitychange`,p);for(let t of e.querySelectorAll(`[data-fs-entry]`))o(t)}function h(){s&&=(s.removeEventListener(`fs:enter`,l),s.removeEventListener(`fs:conceal`,u),s.removeEventListener(`input`,d,!0),s.removeEventListener(`change`,d,!0),window.removeEventListener(`pagehide`,f),document.removeEventListener(`visibilitychange`,p),void 0)}return{captureEntry:i,restoreEntry:o,attach:m,dispose:h}}function xr(e,t){e.dispatchEvent(new CustomEvent(t,{bubbles:!0}))}function Sr(e){let{outlet:t,mountEntry:n}=e,r=new Map,i=!1;function a(){let e=new Map;for(let n of t.querySelectorAll(`[data-fs-entry]`)){let t=n.getAttribute(`data-fs-key`);t!==null&&e.set(t,n)}return e}let o=e.schedule??(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(e):e()});function s(e){let t=[e];for(let n of e.querySelectorAll(`[data-fs-scroll]`))t.push(n);return t}function c(e){e.scroll=s(e.container).map(e=>({top:e.scrollTop,left:e.scrollLeft}))}function l(e){let t=e.scroll;t!==void 0&&o(()=>{let n=s(e.container);t.forEach((e,t)=>{let r=n[t];r!==void 0&&(r.scrollTop=e.top,r.scrollLeft=e.left)})})}function u(e){e.attached&&=(c(e),xr(e.container,`fs:conceal`),e.container.remove(),!1)}function d(e,t){xr(t.container,`fs:exit`),t.attached&&=(t.container.remove(),!1),t.handle.unmount(),r.delete(e)}function f(e){let o=i?null:a(),s=new Set(B(e.tree).map(e=>X(e.intent,e.params)));for(let[e,t]of r)s.has(e)||d(e,t);let c=[];for(let t of e.destinations){let e=X(t.intent,t.params);c.push(e);let i=r.get(e);if(i!==void 0&&i.page!==t.page&&d(e,i),!r.has(e)){let i=o?.get(e),a=i??document.createElement(`div`);if(i===void 0)for(let[n,r]of Object.entries(Tt(t.intent,e)))a.setAttribute(n,r);else o?.delete(e);let s=n({intent:t.intent,params:t.params,entryKey:e,page:t.page,hydrate:i!==void 0},a);r.set(e,{container:a,handle:s,attached:i!==void 0,entered:!1,page:t.page})}}if(o)for(let e of o.values())e.remove();let f=new Set(c);for(let[e,t]of r)f.has(e)||u(t);for(let e of c){let n=r.get(e);if(n===void 0)continue;let i=n.attached;t.appendChild(n.container),n.attached=!0,n.entered||(n.entered=!0,xr(n.container,`fs:enter`)),i||(xr(n.container,`fs:reveal`),l(n))}i=!0}function p(){for(let[e,t]of r)d(e,t)}return{sync:f,dispose:p}}function Cr(){return document.getElementById(`scrollable-page-override`)||document.getElementById(`scrollable-page`)||document.documentElement}function wr(e){let{controller:t,codec:n,router:r,log:i}=e,a=new pr(i,{getScrollablePageElement:e.getScrollablePageElement??Cr,persistInHistoryState:!0}),o=!1,s=!0;t.subscribe(e=>{if(o)return;let t=n.encode(e.tree,r),c={tree:G(e.tree)},l=typeof window<`u`?window.location.pathname+window.location.search:t,u=s||t===l;a.beforeTransition(),u?a.replaceState(c,t):a.pushState(c,t),s=!1,i.debug(`[navigation] snapshot → ${u?`replace`:`push`} ${t}`)}),a.onPopState(async(e,n)=>{i.debug(`[navigation] popstate → ${e}, cached=${!!n}`);let r=c(e,n);if(r===void 0){i.warn(`[navigation] popstate: cannot restore tree for ${e}, keeping current`);return}o=!0;try{await t.hydrate(r)}finally{o=!1}});function c(e,t){if(t!==void 0)try{return K(t.tree)}catch(e){i.warn(`[navigation] cached tree deserialize failed, falling back to codec`,e)}try{return n.decode(e,r)}catch(e){i.error(`[navigation] codec.decode failed:`,e);return}}return{getSnapshot(){return t.getSnapshot()},push(e,n,r){return t.push(e,n,r)},pop(e){return t.pop(e)},popToRoot(){return t.popToRoot()},replaceTop(e,n){return t.replaceTop(e,n)},selectTab(e,n){return t.selectTab(e,n)},selectColumn(e,n,r,i){return t.selectColumn(e,n,r,i)},hydrate(e){return t.hydrate(e)},subscribe(e){return t.subscribe(e)}}}async function Tr(e){let{framework:t,initialUrl:n,mountEntry:r,target:a,log:o,getScrollablePageElement:s}=e,c=await t.routeUrl(n);c===null&&o.warn(`[flat-islands] initialUrl "${n}" matched no route; mounting a fallback. Check defineRoutes / base path.`);let l=yt(c===null?[F(`__not_found__`,{})]:[F(c.intent.id,c.intent.params??{})]),u=bn(),d=Sn({intentDispatcher:t.intentDispatcher,router:t.router,initial:l,createContext:({intent:e,params:n})=>{let r=u.encode({kind:`leaf`,intent:e,params:n},t.router);return{container:t.container,navigation:Q({url:r,intent:{id:e,params:n},container:t.container}),url:r}},prefetched:t.prefetchedIntents,onRedirect:({url:e})=>{t.perform(i(e))}}),f=wr({controller:d,codec:u,router:t.router,log:o,getScrollablePageElement:s}),p=a.querySelector(`[data-fs-outlet]`);if(!p)throw Error(`[startBrowserApp] mountEntry 已提供(flat-islands),但 mount 渲染的 DOM 里找不到 [data-fs-outlet]。请在 mount 回调里放一个稳定、空的 <main data-fs-outlet></main>。`);let m=p,h=Sr({outlet:m,mountEntry:r});h.sync(d.getSnapshot()),d.subscribe(e=>h.sync(e)),await d.resolve();async function g(e){let n=await t.routeUrl(e);if(!n){o.warn(`[flat-islands] pushUrl: no route for ${e}`);return}await d.push(n.intent.id,n.intent.params??{})}return{handle:f,controller:d,outlet:m,pushUrl:g}}function Er(){let e=document.getElementById(`serialized-server-data`);if(e?.textContent){e.parentNode?.removeChild(e);try{return JSON.parse(e.textContent)}catch{return}}}function Dr(){let e=Er();return!e||!Array.isArray(e)?ot.empty():ot.fromArray(e)}const Or=500;function kr(e){let t=[e.indexOf(`?`),e.indexOf(`#`)].filter(e=>e>=0);return t.length>0?e.slice(0,Math.min(...t)):e}function Ar(e,t){let n=e.navigation;if(n===void 0)return!0;let r=kr(t)===`/`;return e.url===void 0?Pn(n)&&t===n.url||r:t===e.url||r}function jr(e){let{store:t,adapter:n,subscribeNavigation:r}=e,i=e.debounceMs??500,a=e.shouldRestore??Ar,o;function s(){o!==void 0&&(clearTimeout(o),o=void 0)}function c(){s(),t.save()}function l(){t.scope.prune(n.presentKeys()),s(),o=setTimeout(()=>{o=void 0,t.save()},i)}function u(){document.visibilityState===`hidden`&&c()}let d=r?.(l);return window.addEventListener(`pagehide`,c),document.addEventListener(`visibilitychange`,u),{get scope(){return t.scope},restore(e){let n=t.load();if(n!==void 0&&a(n,e))return t.restore(n)},save(){t.save()},clear(){t.clear()},dispose(){s(),d?.(),window.removeEventListener(`pagehide`,c),document.removeEventListener(`visibilitychange`,u)}}}const Mr={get(){},set(){},delete(){}};function Nr(e){try{return(e===`session`?window.sessionStorage:window.localStorage)??void 0}catch{return}}function Pr(e){let t=Nr(e);return t===void 0?Mr:{get(e){return t.getItem(e)??void 0},set(e,n){try{t.setItem(e,n)}catch{}},delete(e){t.removeItem(e)}}}async function Fr(e){let{bootstrap:t,mountId:n=`app`,mount:r,callbacks:i,onBeforeStart:a,onAfterStart:o,frameworkConfig:s={},loadMessages:c}=e,l=Dr(),u=window.location.pathname+window.location.search,d=Br(s.locale),f=await le({locale:d,loadMessages:c,context:d?{runtime:`browser`,fetch:Vr(s.fetch),url:u}:void 0}),p=st.create({...s,locale:d,_resolvedMessages:f,prefetchedIntents:l});t(p);let m=p.container.resolve(D.LOGGER_FACTORY).loggerFor(`browser`),h=p.getLocale();h&&(ae(h),m.debug(`[startBrowserApp] Applied locale attributes:`,h)),await a?.(p);let g=await p.routeUrl(u),_=document.getElementById(n);if(!_)throw Error(`[startBrowserApp] Mount target not found: #${n}. Ensure your HTML has <div id="${n}"></div>.`);let v;e.navigation&&(v=await Ir({framework:p,navigation:e.navigation,log:m,getScrollablePageElement:e.getScrollablePageElement}));let y=e.session&&!e.navigation&&!e.mountEntry?Rr():void 0,b;e.session&&(b=zr({framework:p,session:e.session,navController:v?.controller,flatNavigation:y}));let x=v!==void 0||b!==void 0?gr(v?.handle,b):void 0,S=r(_,{framework:p,navigation:v?.handle,session:b,app:x}),C;hr({framework:p,log:m,callbacks:y?y.wrap(i):i,updateApp:S,getScrollablePageElement:e.getScrollablePageElement,manageHistory:!(e.navigation||e.mountEntry),onForward:e.mountEntry&&!e.navigation?e=>C?.(e):void 0});let w;e.mountEntry&&!e.navigation&&(w=await Tr({framework:p,initialUrl:u,mountEntry:e.mountEntry,target:_,log:m,getScrollablePageElement:e.getScrollablePageElement}),C=w.pushUrl);let T;if(v!==void 0){let{outlet:e}=await Lr({core:v,target:_});T=e}else w===void 0&&(g?await p.perform(g.action):S({page:Promise.reject(Error(`404`)),isFirstPage:!0}));T??=w?.outlet,b!==void 0&&await b.restore(u),e.domRestore&&T&&b!==void 0&&br({scope:b.scope}).attach(T),await o?.(p)}async function Ir(e){let{framework:t,navigation:n,log:r,getScrollablePageElement:a}=e,o=n.codec??hn(),s=Sn({intentDispatcher:t.intentDispatcher,router:t.router,initial:n.initial,createContext:({intent:e,params:n})=>{let r=o.encode({kind:`leaf`,intent:e,params:n},t.router);return{container:t.container,navigation:Q({url:r,intent:{id:e,params:n},container:t.container}),url:r}},beforeLoad:n.beforeLoad,afterLoad:n.afterLoad,prefetched:t.prefetchedIntents,getErrorPage:n.getErrorPage,onRedirect:({url:e})=>{t.perform(i(e))}});return{handle:wr({controller:s,codec:o,router:t.router,log:r,getScrollablePageElement:a}),controller:s,mountEntry:n.mountEntry}}async function Lr(e){let{core:t,target:n}=e;if(await t.controller.resolve(),t.mountEntry===void 0)return{};let r=n.querySelector(`[data-fs-outlet]`);if(!r)throw Error(`[startBrowserApp] navigation.mountEntry 已提供,但 mount 渲染的 DOM 里找不到 [data-fs-outlet]。请在 chrome 里放一个稳定、空的 <main data-fs-outlet></main>。`);let i=Sr({outlet:r,mountEntry:t.mountEntry});return i.sync(t.controller.getSnapshot()),t.controller.subscribe(e=>i.sync(e)),{outlet:r}}function Rr(){let e=new Set;return{wrap(t){return{...t,onNavigate(n){t.onNavigate(n);for(let t of e)t()}}},subscribe(t){return e.add(t),()=>{e.delete(t)}}}}function zr(e){let{framework:t,session:n,navController:r,flatNavigation:a}=e,o=()=>window.location.pathname+window.location.search,s=r?Hn(r,o):Un({currentUrl:o,navigate:e=>t.perform(i(e))}),c=r?e=>r.subscribe(()=>e()):a?e=>a.subscribe(e):void 0,l=Vn({storage:n.storage??Pr(`session`),navigation:s,version:n.version,maxAgeMs:n.maxAgeMs});for(let e of n.providers??[])l.register(e);return jr({store:l,adapter:s,subscribeNavigation:c,debounceMs:n.debounceMs,shouldRestore:n.shouldRestore})}function Br(e){return e||document.documentElement.lang.trim()||void 0}function Vr(e){return(e??globalThis.fetch?.bind(globalThis))||(()=>{throw Error(`[startBrowserApp] loadMessages requires a fetch implementation.`)})}function Hr(e){let t=e.querySelector(`[data-fs-chrome]`);if(t!==null){let n=e.querySelector(`[data-fs-outlet]`);if(n===null)throw Error(`[resolveIslandsShell] 找到 [data-fs-chrome] 但缺 [data-fs-outlet];SSR shell 应同时含两者。`);return{chromeRoot:t,outlet:n,hydrate:t.firstChild!==null}}let n=document.createElement(`div`);n.setAttribute(`data-fs-chrome`,``);let r=document.createElement(`main`);return r.setAttribute(`data-fs-outlet`,``),e.append(n,r),{chromeRoot:n,outlet:r,hydrate:!1}}export{On as $,tt as $t,Zn as A,ue as An,F as At,Vn as B,g as Bn,ht as Bt,tr as C,ge as Cn,Bt as Ct,er as D,de as Dn,wt as Dt,Q as E,fe as En,I as Et,Kn as F,oe as Fn,P as Ft,In as G,o as Gn,ut as Gt,Bn as H,u as Hn,ct as Ht,Gn as I,ae as In,N as It,Fn as J,n as Jn,ot as Jt,Mn as K,e as Kn,lt as Kt,Wn as L,x as Ln,vt as Lt,Xn as M,ne as Mn,yt as Mt,Jn as N,te as Nn,bt as Nt,Z as O,pe as On,St as Ot,qn as P,ie as Pn,M as Pt,kn as Q,et as Qt,Hn as R,_ as Rn,gt as Rt,ir as S,_e as Sn,Rt as St,rr as T,me as Tn,Tt,X as U,c as Un,j as Ut,zn as V,l as Vn,mt as Vt,Ln as W,s as Wn,dt as Wt,An as X,a as Xn,rt as Xt,Pn as Y,t as Yn,A as Yt,jn as Z,i as Zn,nt as Zt,lr as _,De as _n,Ft as _t,jr as a,$e as an,gn as at,or as b,Se as bn,Dt as bt,Er as c,Ve as cn,K as ct,br as d,Re as dn,B as dt,Xe as en,J as et,gr as f,D as fn,At as ft,fr as g,Ee as gn,It as gt,pr as h,Oe as hn,Pt as ht,Or as i,We as in,bn as it,Yn as j,re as jn,xt as jt,Qn as k,le as kn,Ct as kt,wr as l,ze as ln,G as lt,mr as m,ke as mn,R as mt,Fr as n,qe as nn,Xt as nt,Ar as o,Ue as on,on as ot,hr as p,Ie as pn,kt as pt,Nn as q,r as qn,st as qt,Pr as r,Ze as rn,hn as rt,Dr as s,O as sn,an as st,Hr as t,Ke as tn,Sn as tt,Sr as u,Be as un,Ut as ut,cr as v,Ce as vn,Nt as vt,nr as w,he as wn,jt as wt,ar as x,E as xn,zt as xt,sr as y,we as yn,Lt as yt,Un as z,v as zn,_t as zt};
2
+ //# sourceMappingURL=browser-BHhVWXik.mjs.map
@@ -580,8 +580,8 @@ type InferOutput<S extends StandardSchemaV1> = NonNullable<S["~standard"]["types
580
580
  type ParamSchema<T = unknown> = StandardSchemaV1<string, T>;
581
581
  /** 工厂:从一个 validate 函数构造实现了 ~standard 的 codec */
582
582
  declare function makeSchema<T>(validate: (value: unknown) => StandardResult<T> | Promise<StandardResult<T>>): ParamSchema<T>;
583
- /** 统一执行任意 Standard Schema 的校验,吸收同步/异步差异 */
584
- declare function runStandard(schema: StandardSchemaV1, raw: string | undefined): Promise<{
583
+ /** 统一执行任意 Standard Schema 的校验,吸收同步/异步差异(raw 可为单值或多值 query) */
584
+ declare function runStandard(schema: StandardSchemaV1, raw: string | string[] | undefined): Promise<{
585
585
  ok: true;
586
586
  value: unknown;
587
587
  } | {
@@ -589,6 +589,47 @@ declare function runStandard(schema: StandardSchemaV1, raw: string | undefined):
589
589
  issues: readonly StandardIssue[];
590
590
  }>;
591
591
  //#endregion
592
+ //#region ../core/src/router/params/multi.d.ts
593
+ /** 多值(数组)query codec:输入为 string[],并带 `multi` 运行时标记。 */
594
+ interface MultiValueSchema<Output> extends StandardSchemaV1<string[], Output> {
595
+ readonly multi: true;
596
+ }
597
+ interface ListOptions {
598
+ /** 最少元素数 */
599
+ min?: number;
600
+ /** 最多元素数 */
601
+ max?: number;
602
+ }
603
+ /** 运行时判断一个 schema 是否为多值 codec(resolve 据此决定取全部值还是单值)。 */
604
+ declare function isMultiValueSchema(schema: StandardSchemaV1): schema is MultiValueSchema<unknown>;
605
+ /**
606
+ * 多值 query 原语:用内部单值 codec 逐项校验/转换,产出数组。
607
+ * 缺失(undefined)→ 空数组;任一项校验失败 → 整体失败(resolve 据此 fall-through)。
608
+ */
609
+ declare function list<T>(item: ParamSchema<T>, opts?: ListOptions): MultiValueSchema<T[]>;
610
+ //#endregion
611
+ //#region ../core/src/router/params/infer.d.ts
612
+ /** 剥离可选参数尾随的 "?" */
613
+ type StripOptional<S extends string> = S extends `${infer N}?` ? N : S;
614
+ /** 从 path pattern 字面量提取参数名联合(处理 :param 与 :param?) */
615
+ type ExtractParamNames<Path extends string> = Path extends `${infer _Head}:${infer Rest}` ? Rest extends `${infer Name}/${infer Tail}` ? StripOptional<Name> | ExtractParamNames<`/${Tail}`> : StripOptional<Rest> : never;
616
+ /** path 参数 codec map 的形状:key 只能是 path 中出现的参数名(均可选声明) */
617
+ type ParamsFor<Path extends string> = { [K in ExtractParamNames<Path>]?: ParamSchema };
618
+ /** query 参数 codec map:key 自由开放;值可为单值 codec 或多值(list)codec */
619
+ type QuerySchemaMap = Record<string, StandardSchemaV1<string, unknown> | MultiValueSchema<unknown>>;
620
+ /** 把对象类型「拍平」为单层,便于阅读与类型相等比较 */
621
+ type Prettify<T> = { [K in keyof T]: T[K] } & {};
622
+ /** 输出类型含 undefined 的 key(由 optional() 产生)→ 渲染为可选属性 */
623
+ type OptionalOutKeys<M extends Record<string, StandardSchemaV1>> = { [K in keyof M]: undefined extends InferOutput<M[K]> ? K : never }[keyof M];
624
+ type RequiredOutKeys<M extends Record<string, StandardSchemaV1>> = { [K in keyof M]: undefined extends InferOutput<M[K]> ? never : K }[keyof M];
625
+ /**
626
+ * 从 codec map 推导运行期参数类型。
627
+ * optional() 让输出含 undefined 的 key 渲染为可选属性(`tab?: T`,并剥掉冗余的 `| undefined`);
628
+ * withDefault() 始终有值,key 保持必选。
629
+ */
630
+ type InferParams<P extends Record<string, ParamSchema>> = Prettify<{ [K in RequiredOutKeys<P>]: InferOutput<P[K]> } & { [K in OptionalOutKeys<P>]?: Exclude<InferOutput<P[K]>, undefined> }>;
631
+ type InferQuery<Q extends QuerySchemaMap> = Prettify<{ [K in RequiredOutKeys<Q>]: InferOutput<Q[K]> } & { [K in OptionalOutKeys<Q>]?: Exclude<InferOutput<Q[K]>, undefined> }>;
632
+ //#endregion
592
633
  //#region ../core/src/router/router.d.ts
593
634
  /** 路由匹配结果 */
594
635
  interface RouteMatch {
@@ -606,7 +647,7 @@ interface RouteAddOptions {
606
647
  beforeGuards?: BeforeLoadGuard[];
607
648
  afterGuards?: AfterLoadGuard[];
608
649
  paramCodecs?: Record<string, ParamSchema>;
609
- queryCodecs?: Record<string, StandardSchemaV1<string, unknown>>;
650
+ queryCodecs?: QuerySchemaMap;
610
651
  }
611
652
  declare class Router {
612
653
  private readonly debug?;
@@ -654,19 +695,6 @@ declare function optional<T>(codec: ParamSchema<T>): ParamSchema<T | undefined>;
654
695
  /** 输入缺失时用 fallback;否则委托内部 codec。 */
655
696
  declare function withDefault<T>(codec: ParamSchema<T>, fallback: T): ParamSchema<T>;
656
697
  //#endregion
657
- //#region ../core/src/router/params/infer.d.ts
658
- /** 剥离可选参数尾随的 "?" */
659
- type StripOptional<S extends string> = S extends `${infer N}?` ? N : S;
660
- /** 从 path pattern 字面量提取参数名联合(处理 :param 与 :param?) */
661
- type ExtractParamNames<Path extends string> = Path extends `${infer _Head}:${infer Rest}` ? Rest extends `${infer Name}/${infer Tail}` ? StripOptional<Name> | ExtractParamNames<`/${Tail}`> : StripOptional<Rest> : never;
662
- /** path 参数 codec map 的形状:key 只能是 path 中出现的参数名(均可选声明) */
663
- type ParamsFor<Path extends string> = { [K in ExtractParamNames<Path>]?: ParamSchema };
664
- /** query 参数 codec map:key 自由开放 */
665
- type QuerySchemaMap = Record<string, StandardSchemaV1<string, unknown>>;
666
- /** 从 codec map 推导运行期参数类型 */
667
- type InferParams<P extends Record<string, ParamSchema>> = { [K in keyof P]: InferOutput<P[K]> };
668
- type InferQuery<Q extends QuerySchemaMap> = { [K in keyof Q]: InferOutput<Q[K]> };
669
- //#endregion
670
698
  //#region ../core/src/logger/composite.d.ts
671
699
  declare class CompositeLoggerFactory implements LoggerFactory {
672
700
  private readonly factories;
@@ -1787,6 +1815,37 @@ declare function route<const Path extends string, P extends ParamsFor<Path> = Pa
1787
1815
  beforeLoad?: BeforeLoadGuard[];
1788
1816
  afterLoad?: AfterLoadGuard[];
1789
1817
  }): RouteDefinition;
1818
+ /** defineRoute 的 handler 入参类型:path 参数 + query 经 codec 推导后合并(免手写)。 */
1819
+ type HandlerParams<P, Q> = InferParams<{ [K in keyof P]: P[K] extends ParamSchema ? P[K] : never }> & InferQuery<{ [K in keyof Q]: Q[K] extends QuerySchemaMap[string] ? Q[K] : never }>;
1820
+ /**
1821
+ * 构造一条强类型路由定义,**handler 的入参类型从 `path` + codec 自动推导**——免手写
1822
+ * `BaseController<InferParams<typeof ...> & InferQuery<typeof ...>>`。
1823
+ *
1824
+ * 与 `route()`(类 controller)互补:用 handler 函数代替 `BaseController` 子类,框架据
1825
+ * `params`/`query` codec 自动算出 handler 入参类型;内部把 handler 合成为 `IntentController`,
1826
+ * 复刻 `BaseController` 的 try/catch → fallback 行为。`params` 的 key 同样受 `path` 字面量约束。
1827
+ *
1828
+ * @example
1829
+ * route 同款的强类型,但无需声明 controller 类:
1830
+ * ```ts
1831
+ * defineRoute("/product/:id", {
1832
+ * intentId: "product",
1833
+ * params: { id: int() },
1834
+ * query: { page: withDefault(int(), 1) },
1835
+ * handler: (params) => ({ ... }), // params: { id: number; page: number },自动推导
1836
+ * })
1837
+ * ```
1838
+ */
1839
+ declare function defineRoute<const Path extends string, P extends ParamsFor<Path> = ParamsFor<Path>, Q extends QuerySchemaMap = QuerySchemaMap, TResult = unknown>(path: Path, def: {
1840
+ intentId: string;
1841
+ params?: P;
1842
+ query?: Q;
1843
+ handler: (params: HandlerParams<P, Q>, container: Container) => TResult | Promise<TResult>;
1844
+ fallback?: (params: HandlerParams<P, Q>, error: Error) => TResult | Promise<TResult>;
1845
+ renderMode?: RenderMode;
1846
+ beforeLoad?: BeforeLoadGuard[];
1847
+ afterLoad?: AfterLoadGuard[];
1848
+ }): RouteDefinition;
1790
1849
  /** defineRoutes 选项 */
1791
1850
  interface DefineRoutesOptions {
1792
1851
  /**
@@ -1803,11 +1862,32 @@ interface DefineRoutesOptions {
1803
1862
  */
1804
1863
  locales?: string[];
1805
1864
  }
1865
+ /**
1866
+ * 数组形态 6c 一致性的载体:把一条路由的 `params` 按其自身 `path` 字面量重新约束 key。
1867
+ *
1868
+ * 不在 path 参数名集合内的 key 显式映射为 `never`——结构化赋值不会对非 fresh 对象做
1869
+ * excess-property 检查(`route()` 单数 helper 靠 fresh 字面量 + `ParamsFor` 拿到 excess
1870
+ * 检查,但数组元素流经泛型推断后不再是 fresh,故改用 never 映射),使其值(`ParamSchema`)
1871
+ * 不可赋给 `never` 而编译期报错。
1872
+ */
1873
+ type ValidateRouteParams<Path extends string, Params> = { [K in keyof Params]: K extends ExtractParamNames<Path> ? Params[K] : never };
1874
+ /**
1875
+ * 仅当元素是「带 params 的对象字面量」时重写其 params 约束;无 params 的路由与 `route()`
1876
+ * 输出(`params` 可选、Path 已擦除为 string)走 false 分支,原样透传、不被过度约束。
1877
+ */
1878
+ type ValidateRouteDef<R> = R extends {
1879
+ path: infer P extends string;
1880
+ params: infer Params;
1881
+ } ? Omit<R, "params"> & {
1882
+ params: ValidateRouteParams<P, Params>;
1883
+ } : R;
1806
1884
  /**
1807
1885
  * 声明式注册路由和 Controller
1808
1886
  *
1809
1887
  * - 自动去重: 同一 intentId 的 controller 只注册一次
1810
1888
  * - 路由和 controller 在同一个配置数组中,方便检查一致性
1889
+ * - **数组形态 6c**: 每条对象字面量路由的 `params` key 受其自身 `path` 字面量约束,
1890
+ * 写入 path 中不存在的参数名会编译期报错(与 `route()` 单数 helper 同等保证)。
1811
1891
  *
1812
1892
  * @example
1813
1893
  * ```ts
@@ -1820,7 +1900,7 @@ interface DefineRoutesOptions {
1820
1900
  * ]);
1821
1901
  * ```
1822
1902
  */
1823
- declare function defineRoutes(framework: Framework, definitions: RouteDefinition[], options?: DefineRoutesOptions): void;
1903
+ declare function defineRoutes<const T extends readonly RouteDefinition[]>(framework: Framework, definitions: { [I in keyof T]: ValidateRouteDef<T[I]> }, options?: DefineRoutesOptions): void;
1824
1904
  //#endregion
1825
1905
  //#region ../core/src/session/types.d.ts
1826
1906
  /** 会话快照在 Storage 中的默认键。 */
@@ -2727,5 +2807,5 @@ declare function deserializeServerData(): PrefetchedIntent[] | undefined;
2727
2807
  */
2728
2808
  declare function createPrefetchedIntentsFromDom(): PrefetchedIntents;
2729
2809
  //#endregion
2730
- export { IntersectionImpressionObserver as $, FeatureFlagsProvider as $i, isLeafNode as $n, ConsoleLogger as $r, HydrateOperation as $t, ActionHandlerDependencies as A, ActionHandler as Aa, AfterLoadGuard as Ai, SerializedStack as An, classifyHost as Ar, NavigationScopedState as At, getTextDirection as B, makeFlowAction as Ba, next as Bi, popTo as Bn, BaseShelf as Br, SessionUrlLocation as Bt, SessionBridgeOptions as C, SecureFetchOptions as Ca, InferOutput as Ci, createFullStateCodec as Cn, AsyncMapper as Cr, createUrlSessionAdapter as Ct, NavigationBridgeDependencies as D, IntentController as Da, StandardSchemaV1 as Di, SerializedNavigation as Dn, pipeAsync as Dr, sessionEntryKey as Dt, defaultShouldRestore as E, Intent as Ea, StandardResult as Ei, SerializedLeaf as En, pipe as Er, createNavigationScopedState as Et, ExternalUrlDependencies as F, FlowAction as Fa, NextResult as Fi, collectAllLeaves as Fn, HttpError as Fr, SessionNavigationAdapter as Ft, PluralCategory as G, FINESOFT_PUBLIC as Gi, selectColumn as Gn, PrefetchedIntent as Gr, defineRoutes as Gt, makeLocaleInfo as H, rewrite as Hi, push as Hn, safeErrorPage as Hr, DefineRoutesOptions as Ht, registerExternalUrlHandler as I, isCompoundAction as Ia, PostLoadContext as Ii, collectVisibleDestinations as In, RequestInterceptor as Ir, SessionSnapshot as It, interpolate as J, markPublic as Ji, visibleSplitColumns as Jn, LocaleInfo as Jr, NavigationBrowserConfig as Jt, PluralRuleProvider as K, getPublicFields as Ki, selectTab as Kn, PrefetchedIntents as Kr, route as Kt, SimpleTranslator as L, isExternalUrlAction as La, RedirectResult as Li, findNearestStack as Ln, ResponseInterceptor as Lr, SessionStateProvider as Lt, FlowActionCallbacks as M, Action as Ma, DenyResult as Mi, deserializeNavigation as Mn, HostGuardError as Mr, SESSION_DEFAULT_VERSION as Mt, FlowActionDependencies as N, CompoundAction as Na, MiddlewareResult as Ni, serializeNavigation as Nn, HttpClient as Nr, SessionError as Nt, NavigationHandle as O, Container as Oa, makeSchema as Oi, SerializedSplit as On, BaseController as Or, decodeSnapshot as Ot, registerFlowActionHandler as P, ExternalUrlAction as Pa, NavigationContext as Pi, serializeNavigationStable as Pn, HttpClientConfig as Pr, SessionErrorContext as Pt, ImpressionObserverOptions as Q, FeatureFlags as Qi, TabsInit as Qn, shouldLog as Qr, defineNavigation as Qt, SimpleTranslatorOptions as R, isFlowAction as Ra, RewriteResult as Ri, findNode as Rn, stableStringify as Rr, SessionStore as Rt, SESSION_DEFAULT_DEBOUNCE_MS as S, LoggerFactory as Sa, Router as Si, createFlatStackCodec as Sn, TabsNode as Sr, createNavigationSessionAdapter as St, createSessionBridge as T, IntentDispatcher as Ta, StandardIssue as Ti, encodeNavigationTreeParam as Tn, mapEach as Tr, collectLeafKeys as Tt, resolveLocaleFromUrl as U, BASE_PAGE_FIELDS as Ui, replaceTop as Un, Framework as Ur, RenderMode as Ut, isRtl as V, redirect as Vi, popToRoot as Vn, SafeErrorPageOptions as Vr, isUrlLocation as Vt, setHtmlLocaleAttributes as W, BasePage as Wi, resolveActivePath as Wn, FrameworkConfig as Wr, RouteDefinition as Wt, WithFieldsRecorder as X, defineRequestScopedKey as Xi, islandContainerAttributes as Xn, Translator as Xr, NavigationInitial as Xt, resolvePluralKey as Y, RequestScopedKey as Yi, ResolvedEntry as Yn, TextDirection as Yr, NavigationDefinition as Yt, VoidEventRecorder as Z, DEP_KEYS as Zi, SplitColumnInit as Zn, resetFilterCache as Zr, NavigationSSRDefinition as Zt, IslandOrchestratorOptions as _, ReportingLogger as _a, str as _i, DEFAULT_NAV_PARAM as _n, SPLIT_VISIBILITIES as _r, Optional as _t, DomRestore as a, MessagesLoader as aa, InferQuery as ai, NavigationOpKind as an, stack as ar, ServerContextOptions as at, AppHandle as b, BaseLogger as ba, RouteAddOptions as bi, NavigationRouterLike as bn, SplitVisibility as br, LruMap as bt, createWebStorage as c, resolveConfiguredMessages as ca, StripOptional as ci, PopToOperation as cn, NAVIGATION_NODE_KINDS as cr, generateUuid as ct, BrowserAppConfig as d, detectPlatform as da, NumOptions as di, PushOptions as dn, NavigationNodeKind as dr, removeHost as dt, MakeDependenciesOptions as ea, ConsoleLoggerFactory as ei, NAVIGATION_OP_KINDS as en, isSplitNode as er, ConsoleEventRecorder as et, BrowserNavigationConfig as f, EventRecorder as fa, StrOptions as fi, ReplaceTopOperation as fn, NavigationPath as fr, removeQueryParams as ft, IslandOrchestrator as g, ReportCallback as ga, oneOf as gi, createNavigationController as gn, ResolvedDestination as gr, None as gt, IslandHandle as h, MetricsFieldsProvider as ha, num as hi, SetVisibilityOperation as hn, Page as hr, getPWADisplayMode as ht, History as i, makeDependencies as ia, InferParams as ii, NavigationDispatchContext as in, split as ir, BrowserContextOptions as it, registerActionHandlers as j, ACTION_KINDS as ja, BeforeLoadGuard as ji, SerializedTabs as jn, classifyUrl as jr, SESSION_DEFAULT_KEY as jt, createNavigationBridge as k, ActionDispatcher as ka, runStandard as ki, SerializedSplitColumn as kn, HostCheckResult as kr, encodeSnapshot as kt, IslandsShell as l, resolveMessages as la, optional as li, PopToRootOperation as ln, NavigationError as lr, buildUrl as lt, startBrowserApp as m, ImpressionObserver as ma, int as mi, SelectTabOperation as mn, NavigationSnapshot as mr, PWADisplayMode as mt, deserializeServerData as n, Net as na, CompositeLoggerFactory as ni, NavigationController as nn, isTabsNode as nr, runAfterLoadGuards as nt, DomRestoreOptions as o, MessagesLoaderContext as oa, ParamsFor as oi, NavigationOperation as on, tabs as or, createBrowserContext as ot, BrowserSessionConfig as p, ImpressionEntry as pa, bool as pi, SelectColumnOperation as pn, NavigationPathStep as pr, removeScheme as pt, englishPlural as q, isPublicMarked as qi, setVisibility as qn, LocaleAttributes as qr, DefineNavigationOptions as qt, tryScroll as r, Storage as ra, ExtractParamNames as ri, NavigationControllerOptions as rn, leaf as rr, runBeforeLoadGuards as rt, createDomRestore as s, TranslationMessages as sa, QuerySchemaMap as si, PopOperation as sn, LeafNode as sr, createServerContext as st, createPrefetchedIntentsFromDom as t, MetricsRecorder as ta, CompositeLogger as ti, NavigationContextInput as tn, isStackNode as tr, CompositeEventRecorder as tt, resolveIslandsShell as u, PlatformInfo as ua, withDefault as ui, PushOperation as un, NavigationNode as ur, getBaseUrl as ut, MountEntry as v, ReportingLoggerFactory as va, uuid as vi, FullStateCodecOptions as vn, SplitColumn as vr, isNone as vt, SessionHandle as w, secureFetch as wa, ParamSchema as wi, decodeNavigationTreeParam as wn, Mapper as wr, createSessionStore as wt, createAppHandle as x, Logger as xa, RouteMatch as xi, createActiveLeafCodec as xn, StackNode as xr, UrlAdapterOptions as xt, createIslandOrchestrator as y, ReportingLoggerOptions as ya, RouteParams as yi, NavigationCodec as yn, SplitNode as yr, isSome as yt, getLocaleAttributes as z, makeExternalUrlAction as za, deny as zi, pop as zn, BaseItem as zr, SessionStoreOptions as zt };
2731
- //# sourceMappingURL=browser-DMw76sEo.d.mts.map
2810
+ export { IntersectionImpressionObserver as $, markPublic as $i, TabsInit as $n, shouldLog as $r, defineNavigation as $t, ActionHandlerDependencies as A, IntentDispatcher as Aa, StandardIssue as Ai, SerializedSplitColumn as An, HostCheckResult as Ar, NavigationScopedState as At, getTextDirection as B, FlowAction as Ba, NextResult as Bi, pop as Bn, BaseItem as Br, SessionUrlLocation as Bt, SessionBridgeOptions as C, ReportingLoggerFactory as Ca, StripOptional as Ci, createFlatStackCodec as Cn, TabsNode as Cr, createUrlSessionAdapter as Ct, NavigationBridgeDependencies as D, LoggerFactory as Da, list as Di, SerializedLeaf as Dn, pipe as Dr, sessionEntryKey as Dt, defaultShouldRestore as E, Logger as Ea, isMultiValueSchema as Ei, encodeNavigationTreeParam as En, mapEach as Er, createNavigationScopedState as Et, ExternalUrlDependencies as F, ActionHandler as Fa, AfterLoadGuard as Fi, serializeNavigationStable as Fn, HttpClientConfig as Fr, SessionNavigationAdapter as Ft, PluralCategory as G, makeFlowAction as Ga, next as Gi, resolveActivePath as Gn, FrameworkConfig as Gr, defineRoute as Gt, makeLocaleInfo as H, isExternalUrlAction as Ha, RedirectResult as Hi, popToRoot as Hn, SafeErrorPageOptions as Hr, DefineRoutesOptions as Ht, registerExternalUrlHandler as I, ACTION_KINDS as Ia, BeforeLoadGuard as Ii, collectAllLeaves as In, HttpError as Ir, SessionSnapshot as It, interpolate as J, BASE_PAGE_FIELDS as Ji, setVisibility as Jn, LocaleAttributes as Jr, DefineNavigationOptions as Jt, PluralRuleProvider as K, redirect as Ki, selectColumn as Kn, PrefetchedIntent as Kr, defineRoutes as Kt, SimpleTranslator as L, Action as La, DenyResult as Li, collectVisibleDestinations as Ln, RequestInterceptor as Lr, SessionStateProvider as Lt, FlowActionCallbacks as M, IntentController as Ma, StandardSchemaV1 as Mi, SerializedTabs as Mn, classifyUrl as Mr, SESSION_DEFAULT_VERSION as Mt, FlowActionDependencies as N, Container as Na, makeSchema as Ni, deserializeNavigation as Nn, HostGuardError as Nr, SessionError as Nt, NavigationHandle as O, SecureFetchOptions as Oa, InferOutput as Oi, SerializedNavigation as On, pipeAsync as Or, decodeSnapshot as Ot, registerFlowActionHandler as P, ActionDispatcher as Pa, runStandard as Pi, serializeNavigation as Pn, HttpClient as Pr, SessionErrorContext as Pt, ImpressionObserverOptions as Q, isPublicMarked as Qi, SplitColumnInit as Qn, resetFilterCache as Qr, NavigationSSRDefinition as Qt, SimpleTranslatorOptions as R, CompoundAction as Ra, MiddlewareResult as Ri, findNearestStack as Rn, ResponseInterceptor as Rr, SessionStore as Rt, SESSION_DEFAULT_DEBOUNCE_MS as S, ReportingLogger as Sa, QuerySchemaMap as Si, createActiveLeafCodec as Sn, StackNode as Sr, createNavigationSessionAdapter as St, createSessionBridge as T, BaseLogger as Ta, MultiValueSchema as Ti, decodeNavigationTreeParam as Tn, Mapper as Tr, collectLeafKeys as Tt, resolveLocaleFromUrl as U, isFlowAction as Ua, RewriteResult as Ui, push as Un, safeErrorPage as Ur, RenderMode as Ut, isRtl as V, isCompoundAction as Va, PostLoadContext as Vi, popTo as Vn, BaseShelf as Vr, isUrlLocation as Vt, setHtmlLocaleAttributes as W, makeExternalUrlAction as Wa, deny as Wi, replaceTop as Wn, Framework as Wr, RouteDefinition as Wt, WithFieldsRecorder as X, FINESOFT_PUBLIC as Xi, ResolvedEntry as Xn, TextDirection as Xr, NavigationDefinition as Xt, resolvePluralKey as Y, BasePage as Yi, visibleSplitColumns as Yn, LocaleInfo as Yr, NavigationBrowserConfig as Yt, VoidEventRecorder as Z, getPublicFields as Zi, islandContainerAttributes as Zn, Translator as Zr, NavigationInitial as Zt, IslandOrchestratorOptions as _, EventRecorder as _a, Router as _i, createNavigationController as _n, ResolvedDestination as _r, Optional as _t, DomRestore as a, MakeDependenciesOptions as aa, withDefault as ai, NavigationDispatchContext as an, split as ar, ServerContextOptions as at, AppHandle as b, MetricsFieldsProvider as ba, InferQuery as bi, NavigationCodec as bn, SplitNode as br, LruMap as bt, createWebStorage as c, Storage as ca, bool as ci, PopOperation as cn, LeafNode as cr, generateUuid as ct, BrowserAppConfig as d, MessagesLoaderContext as da, oneOf as di, PushOperation as dn, NavigationNode as dr, removeHost as dt, RequestScopedKey as ea, ConsoleLogger as ei, HydrateOperation as en, isLeafNode as er, ConsoleEventRecorder as et, BrowserNavigationConfig as f, TranslationMessages as fa, str as fi, PushOptions as fn, NavigationNodeKind as fr, removeQueryParams as ft, IslandOrchestrator as g, detectPlatform as ga, RouteMatch as gi, SetVisibilityOperation as gn, Page as gr, None as gt, IslandHandle as h, PlatformInfo as ha, RouteAddOptions as hi, SelectTabOperation as hn, NavigationSnapshot as hr, getPWADisplayMode as ht, History as i, FeatureFlagsProvider as ia, optional as ii, NavigationControllerOptions as in, leaf as ir, BrowserContextOptions as it, registerActionHandlers as j, Intent as ja, StandardResult as ji, SerializedStack as jn, classifyHost as jr, SESSION_DEFAULT_KEY as jt, createNavigationBridge as k, secureFetch as ka, ParamSchema as ki, SerializedSplit as kn, BaseController as kr, encodeSnapshot as kt, IslandsShell as l, makeDependencies as la, int as li, PopToOperation as ln, NAVIGATION_NODE_KINDS as lr, buildUrl as lt, startBrowserApp as m, resolveMessages as ma, RouteParams as mi, SelectColumnOperation as mn, NavigationPathStep as mr, PWADisplayMode as mt, deserializeServerData as n, DEP_KEYS as na, CompositeLogger as ni, NavigationContextInput as nn, isStackNode as nr, runAfterLoadGuards as nt, DomRestoreOptions as o, MetricsRecorder as oa, NumOptions as oi, NavigationOpKind as on, stack as or, createBrowserContext as ot, BrowserSessionConfig as p, resolveConfiguredMessages as pa, uuid as pi, ReplaceTopOperation as pn, NavigationPath as pr, removeScheme as pt, englishPlural as q, rewrite as qi, selectTab as qn, PrefetchedIntents as qr, route as qt, tryScroll as r, FeatureFlags as ra, CompositeLoggerFactory as ri, NavigationController as rn, isTabsNode as rr, runBeforeLoadGuards as rt, createDomRestore as s, Net as sa, StrOptions as si, NavigationOperation as sn, tabs as sr, createServerContext as st, createPrefetchedIntentsFromDom as t, defineRequestScopedKey as ta, ConsoleLoggerFactory as ti, NAVIGATION_OP_KINDS as tn, isSplitNode as tr, CompositeEventRecorder as tt, resolveIslandsShell as u, MessagesLoader as ua, num as ui, PopToRootOperation as un, NavigationError as ur, getBaseUrl as ut, MountEntry as v, ImpressionEntry as va, ExtractParamNames as vi, DEFAULT_NAV_PARAM as vn, SPLIT_VISIBILITIES as vr, isNone as vt, SessionHandle as w, ReportingLoggerOptions as wa, ListOptions as wi, createFullStateCodec as wn, AsyncMapper as wr, createSessionStore as wt, createAppHandle as x, ReportCallback as xa, ParamsFor as xi, NavigationRouterLike as xn, SplitVisibility as xr, UrlAdapterOptions as xt, createIslandOrchestrator as y, ImpressionObserver as ya, InferParams as yi, FullStateCodecOptions as yn, SplitColumn as yr, isSome as yt, getLocaleAttributes as z, ExternalUrlAction as za, NavigationContext as zi, findNode as zn, stableStringify as zr, SessionStoreOptions as zt };
2811
+ //# sourceMappingURL=browser-BV2BBXm7.d.mts.map
@@ -1,2 +1,2 @@
1
- import { $ as IntersectionImpressionObserver, $i as FeatureFlagsProvider, $n as isLeafNode, $r as ConsoleLogger, $t as HydrateOperation, A as ActionHandlerDependencies, Aa as ActionHandler, Ai as AfterLoadGuard, An as SerializedStack, Ar as classifyHost, At as NavigationScopedState, B as getTextDirection, Ba as makeFlowAction, Bi as next, Bn as popTo, Br as BaseShelf, Bt as SessionUrlLocation, C as SessionBridgeOptions, Ca as SecureFetchOptions, Ci as InferOutput, Cn as createFullStateCodec, Cr as AsyncMapper, Ct as createUrlSessionAdapter, D as NavigationBridgeDependencies, Da as IntentController, Di as StandardSchemaV1, Dn as SerializedNavigation, Dr as pipeAsync, Dt as sessionEntryKey, E as defaultShouldRestore, Ea as Intent, Ei as StandardResult, En as SerializedLeaf, Er as pipe, Et as createNavigationScopedState, F as ExternalUrlDependencies, Fa as FlowAction, Fi as NextResult, Fn as collectAllLeaves, Fr as HttpError, Ft as SessionNavigationAdapter, G as PluralCategory, Gi as FINESOFT_PUBLIC, Gn as selectColumn, Gr as PrefetchedIntent, Gt as defineRoutes, H as makeLocaleInfo, Hi as rewrite, Hn as push, Hr as safeErrorPage, Ht as DefineRoutesOptions, I as registerExternalUrlHandler, Ia as isCompoundAction, Ii as PostLoadContext, In as collectVisibleDestinations, Ir as RequestInterceptor, It as SessionSnapshot, J as interpolate, Ji as markPublic, Jn as visibleSplitColumns, Jr as LocaleInfo, Jt as NavigationBrowserConfig, K as PluralRuleProvider, Ki as getPublicFields, Kn as selectTab, Kr as PrefetchedIntents, Kt as route, L as SimpleTranslator, La as isExternalUrlAction, Li as RedirectResult, Ln as findNearestStack, Lr as ResponseInterceptor, Lt as SessionStateProvider, M as FlowActionCallbacks, Ma as Action, Mi as DenyResult, Mn as deserializeNavigation, Mr as HostGuardError, Mt as SESSION_DEFAULT_VERSION, N as FlowActionDependencies, Na as CompoundAction, Ni as MiddlewareResult, Nn as serializeNavigation, Nr as HttpClient, Nt as SessionError, O as NavigationHandle, Oa as Container, Oi as makeSchema, On as SerializedSplit, Or as BaseController, Ot as decodeSnapshot, P as registerFlowActionHandler, Pa as ExternalUrlAction, Pi as NavigationContext, Pn as serializeNavigationStable, Pr as HttpClientConfig, Pt as SessionErrorContext, Q as ImpressionObserverOptions, Qi as FeatureFlags, Qn as TabsInit, Qr as shouldLog, Qt as defineNavigation, R as SimpleTranslatorOptions, Ra as isFlowAction, Ri as RewriteResult, Rn as findNode, Rr as stableStringify, Rt as SessionStore, S as SESSION_DEFAULT_DEBOUNCE_MS, Sa as LoggerFactory, Si as Router, Sn as createFlatStackCodec, Sr as TabsNode, St as createNavigationSessionAdapter, T as createSessionBridge, Ta as IntentDispatcher, Ti as StandardIssue, Tn as encodeNavigationTreeParam, Tr as mapEach, Tt as collectLeafKeys, U as resolveLocaleFromUrl, Ui as BASE_PAGE_FIELDS, Un as replaceTop, Ur as Framework, Ut as RenderMode, V as isRtl, Vi as redirect, Vn as popToRoot, Vr as SafeErrorPageOptions, Vt as isUrlLocation, W as setHtmlLocaleAttributes, Wi as BasePage, Wn as resolveActivePath, Wr as FrameworkConfig, Wt as RouteDefinition, X as WithFieldsRecorder, Xi as defineRequestScopedKey, Xn as islandContainerAttributes, Xr as Translator, Xt as NavigationInitial, Y as resolvePluralKey, Yi as RequestScopedKey, Yn as ResolvedEntry, Yr as TextDirection, Yt as NavigationDefinition, Z as VoidEventRecorder, Zi as DEP_KEYS, Zn as SplitColumnInit, Zr as resetFilterCache, Zt as NavigationSSRDefinition, _ as IslandOrchestratorOptions, _a as ReportingLogger, _i as str, _n as DEFAULT_NAV_PARAM, _r as SPLIT_VISIBILITIES, _t as Optional, a as DomRestore, aa as MessagesLoader, ai as InferQuery, an as NavigationOpKind, ar as stack, at as ServerContextOptions, b as AppHandle, ba as BaseLogger, bi as RouteAddOptions, bn as NavigationRouterLike, br as SplitVisibility, bt as LruMap, c as createWebStorage, ca as resolveConfiguredMessages, ci as StripOptional, cn as PopToOperation, cr as NAVIGATION_NODE_KINDS, ct as generateUuid, d as BrowserAppConfig, da as detectPlatform, di as NumOptions, dn as PushOptions, dr as NavigationNodeKind, dt as removeHost, ea as MakeDependenciesOptions, ei as ConsoleLoggerFactory, en as NAVIGATION_OP_KINDS, er as isSplitNode, et as ConsoleEventRecorder, f as BrowserNavigationConfig, fa as EventRecorder, fi as StrOptions, fn as ReplaceTopOperation, fr as NavigationPath, ft as removeQueryParams, g as IslandOrchestrator, ga as ReportCallback, gi as oneOf, gn as createNavigationController, gr as ResolvedDestination, gt as None, h as IslandHandle, ha as MetricsFieldsProvider, hi as num, hn as SetVisibilityOperation, hr as Page, ht as getPWADisplayMode, i as History, ia as makeDependencies, ii as InferParams, in as NavigationDispatchContext, ir as split, it as BrowserContextOptions, j as registerActionHandlers, ja as ACTION_KINDS, ji as BeforeLoadGuard, jn as SerializedTabs, jr as classifyUrl, jt as SESSION_DEFAULT_KEY, k as createNavigationBridge, ka as ActionDispatcher, ki as runStandard, kn as SerializedSplitColumn, kr as HostCheckResult, kt as encodeSnapshot, l as IslandsShell, la as resolveMessages, li as optional, ln as PopToRootOperation, lr as NavigationError, lt as buildUrl, m as startBrowserApp, ma as ImpressionObserver, mi as int, mn as SelectTabOperation, mr as NavigationSnapshot, mt as PWADisplayMode, n as deserializeServerData, na as Net, ni as CompositeLoggerFactory, nn as NavigationController, nr as isTabsNode, nt as runAfterLoadGuards, o as DomRestoreOptions, oa as MessagesLoaderContext, oi as ParamsFor, on as NavigationOperation, or as tabs, ot as createBrowserContext, p as BrowserSessionConfig, pa as ImpressionEntry, pi as bool, pn as SelectColumnOperation, pr as NavigationPathStep, pt as removeScheme, q as englishPlural, qi as isPublicMarked, qn as setVisibility, qr as LocaleAttributes, qt as DefineNavigationOptions, r as tryScroll, ra as Storage, ri as ExtractParamNames, rn as NavigationControllerOptions, rr as leaf, rt as runBeforeLoadGuards, s as createDomRestore, sa as TranslationMessages, si as QuerySchemaMap, sn as PopOperation, sr as LeafNode, st as createServerContext, t as createPrefetchedIntentsFromDom, ta as MetricsRecorder, ti as CompositeLogger, tn as NavigationContextInput, tr as isStackNode, tt as CompositeEventRecorder, u as resolveIslandsShell, ua as PlatformInfo, ui as withDefault, un as PushOperation, ur as NavigationNode, ut as getBaseUrl, v as MountEntry, va as ReportingLoggerFactory, vi as uuid, vn as FullStateCodecOptions, vr as SplitColumn, vt as isNone, w as SessionHandle, wa as secureFetch, wi as ParamSchema, wn as decodeNavigationTreeParam, wr as Mapper, wt as createSessionStore, x as createAppHandle, xa as Logger, xi as RouteMatch, xn as createActiveLeafCodec, xr as StackNode, xt as UrlAdapterOptions, y as createIslandOrchestrator, ya as ReportingLoggerOptions, yi as RouteParams, yn as NavigationCodec, yr as SplitNode, yt as isSome, z as getLocaleAttributes, za as makeExternalUrlAction, zi as deny, zn as pop, zr as BaseItem, zt as SessionStoreOptions } from "./browser-DMw76sEo.mjs";
2
- export { ACTION_KINDS, Action, ActionDispatcher, ActionHandler, ActionHandlerDependencies, AfterLoadGuard, AppHandle, AsyncMapper, BASE_PAGE_FIELDS, BaseController, BaseItem, BaseLogger, BasePage, BaseShelf, BeforeLoadGuard, BrowserAppConfig, BrowserContextOptions, BrowserNavigationConfig, BrowserSessionConfig, CompositeEventRecorder, CompositeLogger, CompositeLoggerFactory, CompoundAction, ConsoleEventRecorder, ConsoleLogger, ConsoleLoggerFactory, Container, DEFAULT_NAV_PARAM, DEP_KEYS, DefineNavigationOptions, DefineRoutesOptions, DenyResult, DomRestore, DomRestoreOptions, EventRecorder, ExternalUrlAction, ExternalUrlDependencies, ExtractParamNames, FINESOFT_PUBLIC, FeatureFlags, FeatureFlagsProvider, FlowAction, FlowActionCallbacks, FlowActionDependencies, Framework, FrameworkConfig, FullStateCodecOptions, History, HostCheckResult, HostGuardError, HttpClient, HttpClientConfig, HttpError, HydrateOperation, ImpressionEntry, ImpressionObserver, ImpressionObserverOptions, InferOutput, InferParams, InferQuery, Intent, IntentController, IntentDispatcher, IntersectionImpressionObserver, IslandHandle, IslandOrchestrator, IslandOrchestratorOptions, IslandsShell, LeafNode, LocaleAttributes, LocaleInfo, Logger, Logger as LoggerInterface, LoggerFactory, LruMap, MakeDependenciesOptions, Mapper, MessagesLoader, MessagesLoaderContext, MetricsFieldsProvider, MetricsRecorder, MiddlewareResult, MountEntry, NAVIGATION_NODE_KINDS, NAVIGATION_OP_KINDS, NavigationBridgeDependencies, NavigationBrowserConfig, NavigationCodec, NavigationContext, NavigationContextInput, NavigationController, NavigationControllerOptions, NavigationDefinition, NavigationDispatchContext, NavigationError, NavigationHandle, NavigationInitial, NavigationNode, NavigationNodeKind, NavigationOpKind, NavigationOperation, NavigationPath, NavigationPathStep, NavigationRouterLike, NavigationSSRDefinition, NavigationScopedState, NavigationSnapshot, Net, NextResult, None, NumOptions, Optional, PWADisplayMode, Page, ParamSchema, ParamsFor, PlatformInfo, PluralCategory, PluralRuleProvider, PopOperation, PopToOperation, PopToRootOperation, PostLoadContext, PrefetchedIntent, PrefetchedIntents, PushOperation, PushOptions, QuerySchemaMap, RedirectResult, RenderMode, ReplaceTopOperation, ReportCallback, ReportingLogger, ReportingLoggerFactory, ReportingLoggerOptions, RequestInterceptor, RequestScopedKey, ResolvedDestination, ResolvedEntry, ResponseInterceptor, RewriteResult, RouteAddOptions, RouteDefinition, RouteMatch, RouteParams, Router, SESSION_DEFAULT_DEBOUNCE_MS, SESSION_DEFAULT_KEY, SESSION_DEFAULT_VERSION, SPLIT_VISIBILITIES, SafeErrorPageOptions, SecureFetchOptions, SelectColumnOperation, SelectTabOperation, SerializedLeaf, SerializedNavigation, SerializedSplit, SerializedSplitColumn, SerializedStack, SerializedTabs, ServerContextOptions, SessionBridgeOptions, SessionError, SessionErrorContext, SessionHandle, SessionNavigationAdapter, SessionSnapshot, SessionStateProvider, SessionStore, SessionStoreOptions, SessionUrlLocation, SetVisibilityOperation, SimpleTranslator, SimpleTranslatorOptions, SplitColumn, SplitColumnInit, SplitNode, SplitVisibility, StackNode, StandardIssue, StandardResult, StandardSchemaV1, Storage, StrOptions, StripOptional, TabsInit, TabsNode, TextDirection, TranslationMessages, Translator, UrlAdapterOptions, VoidEventRecorder, WithFieldsRecorder, bool, buildUrl, classifyHost, classifyUrl, collectAllLeaves, collectLeafKeys, collectVisibleDestinations, createActiveLeafCodec, createAppHandle, createBrowserContext, createDomRestore, createFlatStackCodec, createFullStateCodec, createIslandOrchestrator, createNavigationBridge, createNavigationController, createNavigationScopedState, createNavigationSessionAdapter, createPrefetchedIntentsFromDom, createServerContext, createSessionBridge, createSessionStore, createUrlSessionAdapter, createWebStorage, decodeNavigationTreeParam, decodeSnapshot, defaultShouldRestore, defineNavigation, defineRequestScopedKey, defineRoutes, deny, deserializeNavigation, deserializeServerData, detectPlatform, encodeNavigationTreeParam, encodeSnapshot, englishPlural, findNearestStack, findNode, generateUuid, getBaseUrl, getLocaleAttributes, getPWADisplayMode, getPublicFields, getTextDirection, int, interpolate, isCompoundAction, isExternalUrlAction, isFlowAction, isLeafNode, isNone, isPublicMarked, isRtl, isSome, isSplitNode, isStackNode, isTabsNode, isUrlLocation, islandContainerAttributes, leaf, makeDependencies, makeExternalUrlAction, makeFlowAction, makeLocaleInfo, makeSchema, mapEach, markPublic, next, num, oneOf, optional, pipe, pipeAsync, pop, popTo, popToRoot, push, redirect, registerActionHandlers, registerExternalUrlHandler, registerFlowActionHandler, removeHost, removeQueryParams, removeScheme, replaceTop, resetFilterCache, resolveActivePath, resolveConfiguredMessages, resolveIslandsShell, resolveLocaleFromUrl, resolveMessages, resolvePluralKey, rewrite, route, runAfterLoadGuards, runBeforeLoadGuards, runStandard, safeErrorPage, secureFetch, selectColumn, selectTab, serializeNavigation, serializeNavigationStable, sessionEntryKey, setHtmlLocaleAttributes, setVisibility, shouldLog, split, stableStringify, stack, startBrowserApp, str, tabs, tryScroll, uuid, visibleSplitColumns, withDefault };
1
+ import { $ as IntersectionImpressionObserver, $i as markPublic, $n as TabsInit, $r as shouldLog, $t as defineNavigation, A as ActionHandlerDependencies, Aa as IntentDispatcher, Ai as StandardIssue, An as SerializedSplitColumn, Ar as HostCheckResult, At as NavigationScopedState, B as getTextDirection, Ba as FlowAction, Bi as NextResult, Bn as pop, Br as BaseItem, Bt as SessionUrlLocation, C as SessionBridgeOptions, Ca as ReportingLoggerFactory, Ci as StripOptional, Cn as createFlatStackCodec, Cr as TabsNode, Ct as createUrlSessionAdapter, D as NavigationBridgeDependencies, Da as LoggerFactory, Di as list, Dn as SerializedLeaf, Dr as pipe, Dt as sessionEntryKey, E as defaultShouldRestore, Ea as Logger, Ei as isMultiValueSchema, En as encodeNavigationTreeParam, Er as mapEach, Et as createNavigationScopedState, F as ExternalUrlDependencies, Fa as ActionHandler, Fi as AfterLoadGuard, Fn as serializeNavigationStable, Fr as HttpClientConfig, Ft as SessionNavigationAdapter, G as PluralCategory, Ga as makeFlowAction, Gi as next, Gn as resolveActivePath, Gr as FrameworkConfig, Gt as defineRoute, H as makeLocaleInfo, Ha as isExternalUrlAction, Hi as RedirectResult, Hn as popToRoot, Hr as SafeErrorPageOptions, Ht as DefineRoutesOptions, I as registerExternalUrlHandler, Ia as ACTION_KINDS, Ii as BeforeLoadGuard, In as collectAllLeaves, Ir as HttpError, It as SessionSnapshot, J as interpolate, Ji as BASE_PAGE_FIELDS, Jn as setVisibility, Jr as LocaleAttributes, Jt as DefineNavigationOptions, K as PluralRuleProvider, Ki as redirect, Kn as selectColumn, Kr as PrefetchedIntent, Kt as defineRoutes, L as SimpleTranslator, La as Action, Li as DenyResult, Ln as collectVisibleDestinations, Lr as RequestInterceptor, Lt as SessionStateProvider, M as FlowActionCallbacks, Ma as IntentController, Mi as StandardSchemaV1, Mn as SerializedTabs, Mr as classifyUrl, Mt as SESSION_DEFAULT_VERSION, N as FlowActionDependencies, Na as Container, Ni as makeSchema, Nn as deserializeNavigation, Nr as HostGuardError, Nt as SessionError, O as NavigationHandle, Oa as SecureFetchOptions, Oi as InferOutput, On as SerializedNavigation, Or as pipeAsync, Ot as decodeSnapshot, P as registerFlowActionHandler, Pa as ActionDispatcher, Pi as runStandard, Pn as serializeNavigation, Pr as HttpClient, Pt as SessionErrorContext, Q as ImpressionObserverOptions, Qi as isPublicMarked, Qn as SplitColumnInit, Qr as resetFilterCache, Qt as NavigationSSRDefinition, R as SimpleTranslatorOptions, Ra as CompoundAction, Ri as MiddlewareResult, Rn as findNearestStack, Rr as ResponseInterceptor, Rt as SessionStore, S as SESSION_DEFAULT_DEBOUNCE_MS, Sa as ReportingLogger, Si as QuerySchemaMap, Sn as createActiveLeafCodec, Sr as StackNode, St as createNavigationSessionAdapter, T as createSessionBridge, Ta as BaseLogger, Ti as MultiValueSchema, Tn as decodeNavigationTreeParam, Tr as Mapper, Tt as collectLeafKeys, U as resolveLocaleFromUrl, Ua as isFlowAction, Ui as RewriteResult, Un as push, Ur as safeErrorPage, Ut as RenderMode, V as isRtl, Va as isCompoundAction, Vi as PostLoadContext, Vn as popTo, Vr as BaseShelf, Vt as isUrlLocation, W as setHtmlLocaleAttributes, Wa as makeExternalUrlAction, Wi as deny, Wn as replaceTop, Wr as Framework, Wt as RouteDefinition, X as WithFieldsRecorder, Xi as FINESOFT_PUBLIC, Xn as ResolvedEntry, Xr as TextDirection, Xt as NavigationDefinition, Y as resolvePluralKey, Yi as BasePage, Yn as visibleSplitColumns, Yr as LocaleInfo, Yt as NavigationBrowserConfig, Z as VoidEventRecorder, Zi as getPublicFields, Zn as islandContainerAttributes, Zr as Translator, Zt as NavigationInitial, _ as IslandOrchestratorOptions, _a as EventRecorder, _i as Router, _n as createNavigationController, _r as ResolvedDestination, _t as Optional, a as DomRestore, aa as MakeDependenciesOptions, ai as withDefault, an as NavigationDispatchContext, ar as split, at as ServerContextOptions, b as AppHandle, ba as MetricsFieldsProvider, bi as InferQuery, bn as NavigationCodec, br as SplitNode, bt as LruMap, c as createWebStorage, ca as Storage, ci as bool, cn as PopOperation, cr as LeafNode, ct as generateUuid, d as BrowserAppConfig, da as MessagesLoaderContext, di as oneOf, dn as PushOperation, dr as NavigationNode, dt as removeHost, ea as RequestScopedKey, ei as ConsoleLogger, en as HydrateOperation, er as isLeafNode, et as ConsoleEventRecorder, f as BrowserNavigationConfig, fa as TranslationMessages, fi as str, fn as PushOptions, fr as NavigationNodeKind, ft as removeQueryParams, g as IslandOrchestrator, ga as detectPlatform, gi as RouteMatch, gn as SetVisibilityOperation, gr as Page, gt as None, h as IslandHandle, ha as PlatformInfo, hi as RouteAddOptions, hn as SelectTabOperation, hr as NavigationSnapshot, ht as getPWADisplayMode, i as History, ia as FeatureFlagsProvider, ii as optional, in as NavigationControllerOptions, ir as leaf, it as BrowserContextOptions, j as registerActionHandlers, ja as Intent, ji as StandardResult, jn as SerializedStack, jr as classifyHost, jt as SESSION_DEFAULT_KEY, k as createNavigationBridge, ka as secureFetch, ki as ParamSchema, kn as SerializedSplit, kr as BaseController, kt as encodeSnapshot, l as IslandsShell, la as makeDependencies, li as int, ln as PopToOperation, lr as NAVIGATION_NODE_KINDS, lt as buildUrl, m as startBrowserApp, ma as resolveMessages, mi as RouteParams, mn as SelectColumnOperation, mr as NavigationPathStep, mt as PWADisplayMode, n as deserializeServerData, na as DEP_KEYS, ni as CompositeLogger, nn as NavigationContextInput, nr as isStackNode, nt as runAfterLoadGuards, o as DomRestoreOptions, oa as MetricsRecorder, oi as NumOptions, on as NavigationOpKind, or as stack, ot as createBrowserContext, p as BrowserSessionConfig, pa as resolveConfiguredMessages, pi as uuid, pn as ReplaceTopOperation, pr as NavigationPath, pt as removeScheme, q as englishPlural, qi as rewrite, qn as selectTab, qr as PrefetchedIntents, qt as route, r as tryScroll, ra as FeatureFlags, ri as CompositeLoggerFactory, rn as NavigationController, rr as isTabsNode, rt as runBeforeLoadGuards, s as createDomRestore, sa as Net, si as StrOptions, sn as NavigationOperation, sr as tabs, st as createServerContext, t as createPrefetchedIntentsFromDom, ta as defineRequestScopedKey, ti as ConsoleLoggerFactory, tn as NAVIGATION_OP_KINDS, tr as isSplitNode, tt as CompositeEventRecorder, u as resolveIslandsShell, ua as MessagesLoader, ui as num, un as PopToRootOperation, ur as NavigationError, ut as getBaseUrl, v as MountEntry, va as ImpressionEntry, vi as ExtractParamNames, vn as DEFAULT_NAV_PARAM, vr as SPLIT_VISIBILITIES, vt as isNone, w as SessionHandle, wa as ReportingLoggerOptions, wi as ListOptions, wn as createFullStateCodec, wr as AsyncMapper, wt as createSessionStore, x as createAppHandle, xa as ReportCallback, xi as ParamsFor, xn as NavigationRouterLike, xr as SplitVisibility, xt as UrlAdapterOptions, y as createIslandOrchestrator, ya as ImpressionObserver, yi as InferParams, yn as FullStateCodecOptions, yr as SplitColumn, yt as isSome, z as getLocaleAttributes, za as ExternalUrlAction, zi as NavigationContext, zn as findNode, zr as stableStringify, zt as SessionStoreOptions } from "./browser-BV2BBXm7.mjs";
2
+ export { ACTION_KINDS, type Action, ActionDispatcher, type ActionHandler, type ActionHandlerDependencies, type AfterLoadGuard, type AppHandle, type AsyncMapper, BASE_PAGE_FIELDS, BaseController, type BaseItem, BaseLogger, type BasePage, type BaseShelf, type BeforeLoadGuard, type BrowserAppConfig, type BrowserContextOptions, type BrowserNavigationConfig, type BrowserSessionConfig, CompositeEventRecorder, CompositeLogger, CompositeLoggerFactory, type CompoundAction, ConsoleEventRecorder, ConsoleLogger, ConsoleLoggerFactory, Container, DEFAULT_NAV_PARAM, DEP_KEYS, type DefineNavigationOptions, type DefineRoutesOptions, type DenyResult, type DomRestore, type DomRestoreOptions, type EventRecorder, type ExternalUrlAction, type ExternalUrlDependencies, type ExtractParamNames, FINESOFT_PUBLIC, type FeatureFlags, type FeatureFlagsProvider, type FlowAction, type FlowActionCallbacks, type FlowActionDependencies, Framework, type FrameworkConfig, type FullStateCodecOptions, History, type HostCheckResult, HostGuardError, HttpClient, type HttpClientConfig, HttpError, type HydrateOperation, type ImpressionEntry, type ImpressionObserver, type ImpressionObserverOptions, type InferOutput, type InferParams, type InferQuery, type Intent, type IntentController, IntentDispatcher, IntersectionImpressionObserver, type IslandHandle, type IslandOrchestrator, type IslandOrchestratorOptions, type IslandsShell, type LeafNode, type ListOptions, type LocaleAttributes, type LocaleInfo, type Logger, type Logger as LoggerInterface, type LoggerFactory, LruMap, type MakeDependenciesOptions, type Mapper, type MessagesLoader, type MessagesLoaderContext, type MetricsFieldsProvider, type MetricsRecorder, type MiddlewareResult, type MountEntry, type MultiValueSchema, NAVIGATION_NODE_KINDS, NAVIGATION_OP_KINDS, type NavigationBridgeDependencies, type NavigationBrowserConfig, type NavigationCodec, type NavigationContext, type NavigationContextInput, type NavigationController, type NavigationControllerOptions, type NavigationDefinition, type NavigationDispatchContext, NavigationError, type NavigationHandle, type NavigationInitial, type NavigationNode, type NavigationNodeKind, type NavigationOpKind, type NavigationOperation, type NavigationPath, type NavigationPathStep, type NavigationRouterLike, type NavigationSSRDefinition, type NavigationScopedState, type NavigationSnapshot, type Net, type NextResult, type None, type NumOptions, type Optional, type PWADisplayMode, type Page, type ParamSchema, type ParamsFor, type PlatformInfo, type PluralCategory, type PluralRuleProvider, type PopOperation, type PopToOperation, type PopToRootOperation, type PostLoadContext, type PrefetchedIntent, PrefetchedIntents, type PushOperation, type PushOptions, type QuerySchemaMap, type RedirectResult, type RenderMode, type ReplaceTopOperation, type ReportCallback, ReportingLogger, ReportingLoggerFactory, type ReportingLoggerOptions, type RequestInterceptor, type RequestScopedKey, type ResolvedDestination, type ResolvedEntry, type ResponseInterceptor, type RewriteResult, type RouteAddOptions, type RouteDefinition, type RouteMatch, type RouteParams, Router, SESSION_DEFAULT_DEBOUNCE_MS, SESSION_DEFAULT_KEY, SESSION_DEFAULT_VERSION, SPLIT_VISIBILITIES, type SafeErrorPageOptions, type SecureFetchOptions, type SelectColumnOperation, type SelectTabOperation, type SerializedLeaf, type SerializedNavigation, type SerializedSplit, type SerializedSplitColumn, type SerializedStack, type SerializedTabs, type ServerContextOptions, type SessionBridgeOptions, SessionError, type SessionErrorContext, type SessionHandle, type SessionNavigationAdapter, type SessionSnapshot, type SessionStateProvider, type SessionStore, type SessionStoreOptions, type SessionUrlLocation, type SetVisibilityOperation, SimpleTranslator, type SimpleTranslatorOptions, type SplitColumn, type SplitColumnInit, type SplitNode, type SplitVisibility, type StackNode, type StandardIssue, type StandardResult, type StandardSchemaV1, type Storage, type StrOptions, type StripOptional, type TabsInit, type TabsNode, type TextDirection, type TranslationMessages, type Translator, type UrlAdapterOptions, VoidEventRecorder, WithFieldsRecorder, bool, buildUrl, classifyHost, classifyUrl, collectAllLeaves, collectLeafKeys, collectVisibleDestinations, createActiveLeafCodec, createAppHandle, createBrowserContext, createDomRestore, createFlatStackCodec, createFullStateCodec, createIslandOrchestrator, createNavigationBridge, createNavigationController, createNavigationScopedState, createNavigationSessionAdapter, createPrefetchedIntentsFromDom, createServerContext, createSessionBridge, createSessionStore, createUrlSessionAdapter, createWebStorage, decodeNavigationTreeParam, decodeSnapshot, defaultShouldRestore, defineNavigation, defineRequestScopedKey, defineRoute, defineRoutes, deny, deserializeNavigation, deserializeServerData, detectPlatform, encodeNavigationTreeParam, encodeSnapshot, englishPlural, findNearestStack, findNode, generateUuid, getBaseUrl, getLocaleAttributes, getPWADisplayMode, getPublicFields, getTextDirection, int, interpolate, isCompoundAction, isExternalUrlAction, isFlowAction, isLeafNode, isMultiValueSchema, isNone, isPublicMarked, isRtl, isSome, isSplitNode, isStackNode, isTabsNode, isUrlLocation, islandContainerAttributes, leaf, list, makeDependencies, makeExternalUrlAction, makeFlowAction, makeLocaleInfo, makeSchema, mapEach, markPublic, next, num, oneOf, optional, pipe, pipeAsync, pop, popTo, popToRoot, push, redirect, registerActionHandlers, registerExternalUrlHandler, registerFlowActionHandler, removeHost, removeQueryParams, removeScheme, replaceTop, resetFilterCache, resolveActivePath, resolveConfiguredMessages, resolveIslandsShell, resolveLocaleFromUrl, resolveMessages, resolvePluralKey, rewrite, route, runAfterLoadGuards, runBeforeLoadGuards, runStandard, safeErrorPage, secureFetch, selectColumn, selectTab, serializeNavigation, serializeNavigationStable, sessionEntryKey, setHtmlLocaleAttributes, setVisibility, shouldLog, split, stableStringify, stack, startBrowserApp, str, tabs, tryScroll, uuid, visibleSplitColumns, withDefault };
package/dist/browser.mjs CHANGED
@@ -1 +1 @@
1
- import{$ as e,$t as t,A as n,An as r,At as i,B as a,Bn as o,Bt as s,C as c,Cn as l,Ct as u,D as d,Dn as f,Dt as p,E as m,En as h,Et as g,F as _,Fn as v,Ft as y,G as b,Gn as x,Gt as S,H as C,Hn as w,Ht as T,I as E,In as D,It as O,J as k,Jn as A,Jt as j,K as M,Kn as N,Kt as P,L as F,Ln as I,Lt as L,M as R,Mn as z,Mt as B,N as V,Nn as H,Nt as U,O as W,On as G,Ot as K,P as q,Pn as J,Pt as Y,Q as X,Qt as Z,R as Q,Rn as $,Rt as ee,S as te,Sn as ne,St as re,T as ie,Tn as ae,Tt as oe,U as se,Un as ce,Ut as le,V as ue,Vn as de,Vt as fe,W as pe,Wn as me,Wt as he,X as ge,Xt as _e,Y as ve,Yt as ye,Z as be,Zt as xe,_ as Se,_n as Ce,_t as we,a as Te,an as Ee,at as De,b as Oe,bn as ke,bt as Ae,c as je,cn as Me,ct as Ne,d as Pe,dn as Fe,dt as Ie,en as Le,et as Re,f as ze,fn as Be,ft as Ve,g as He,gn as Ue,gt as We,h as Ge,hn as Ke,ht as qe,i as Je,in as Ye,it as Xe,j as Ze,jn as Qe,jt as $e,k as et,kn as tt,kt as nt,l as rt,ln as it,lt as at,m as ot,mn as st,mt as ct,n as lt,nn as ut,nt as dt,o as ft,on as pt,ot as mt,p as ht,pn as gt,pt as _t,q as vt,qn as yt,qt as bt,r as xt,rn as St,rt as Ct,s as wt,sn as Tt,st as Et,t as Dt,tn as Ot,tt as kt,u as At,un as jt,ut as Mt,v as Nt,vn as Pt,vt as Ft,w as It,wn as Lt,wt as Rt,x as zt,xn as Bt,xt as Vt,y as Ht,yn as Ut,yt as Wt,z as Gt,zn as Kt,zt as qt}from"./browser-BIetJHp_.mjs";export{ce as ACTION_KINDS,w as ActionDispatcher,fe as BASE_PAGE_FIELDS,qt as BaseController,Ut as BaseLogger,zt as CompositeEventRecorder,ke as CompositeLogger,Bt as CompositeLoggerFactory,Be as ConsoleEventRecorder,Ke as ConsoleLogger,Ue as ConsoleLoggerFactory,o as Container,kt as DEFAULT_NAV_PARAM,it as DEP_KEYS,T as FINESOFT_PUBLIC,P as Framework,Ge as History,v as HostGuardError,D as HttpClient,I as HttpError,de as IntentDispatcher,Oe as IntersectionImpressionObserver,F as LruMap,U as NAVIGATION_NODE_KINDS,e as NAVIGATION_OP_KINDS,Y as NavigationError,bt as PrefetchedIntents,gt as ReportingLogger,st as ReportingLoggerFactory,Ee as Router,Je as SESSION_DEFAULT_DEBOUNCE_MS,M as SESSION_DEFAULT_KEY,vt as SESSION_DEFAULT_VERSION,y as SPLIT_VISIBILITIES,k as SessionError,ne as SimpleTranslator,Ht as VoidEventRecorder,Nt as WithFieldsRecorder,t as bool,et as buildUrl,$ as classifyHost,Kt as classifyUrl,Mt as collectAllLeaves,ue as collectLeafKeys,Ie as collectVisibleDestinations,dt as createActiveLeafCodec,ze as createAppHandle,m as createBrowserContext,Pe as createDomRestore,Ct as createFlatStackCodec,Xe as createFullStateCodec,At as createIslandOrchestrator,rt as createNavigationBridge,Re as createNavigationController,C as createNavigationScopedState,Q as createNavigationSessionAdapter,wt as createPrefetchedIntentsFromDom,d as createServerContext,Te as createSessionBridge,a as createSessionStore,Gt as createUrlSessionAdapter,xt as createWebStorage,De as decodeNavigationTreeParam,pe as decodeSnapshot,ft as defaultShouldRestore,X as defineNavigation,Me as defineRequestScopedKey,ge as defineRoutes,te as deny,Et as deserializeNavigation,je as deserializeServerData,Fe as detectPlatform,mt as encodeNavigationTreeParam,b as encodeSnapshot,l as englishPlural,Ve as findNearestStack,_t as findNode,W as generateUuid,n as getBaseUrl,G as getLocaleAttributes,q as getPWADisplayMode,le as getPublicFields,tt as getTextDirection,Le as int,Lt as interpolate,me as isCompoundAction,x as isExternalUrlAction,N as isFlowAction,oe as isLeafNode,_ as isNone,he as isPublicMarked,r as isRtl,E as isSome,g as isSplitNode,p as isStackNode,K as isTabsNode,ve as isUrlLocation,Rt as islandContainerAttributes,nt as leaf,jt as makeDependencies,yt as makeExternalUrlAction,A as makeFlowAction,Qe as makeLocaleInfo,pt as makeSchema,O as mapEach,S as markPublic,c as next,Ot as num,ut as oneOf,xe as optional,L as pipe,ee as pipeAsync,ct as pop,qe as popTo,We as popToRoot,we as push,It as redirect,ht as registerActionHandlers,Se as registerExternalUrlHandler,ot as registerFlowActionHandler,Ze as removeHost,R as removeQueryParams,V as removeScheme,Ft as replaceTop,Ce as resetFilterCache,Wt as resolveActivePath,h as resolveConfiguredMessages,Dt as resolveIslandsShell,z as resolveLocaleFromUrl,f as resolveMessages,ae as resolvePluralKey,ie as rewrite,be as route,ye as runAfterLoadGuards,_e as runBeforeLoadGuards,Tt as runStandard,s as safeErrorPage,J as secureFetch,Ae as selectColumn,Vt as selectTab,Ne as serializeNavigation,at as serializeNavigationStable,se as sessionEntryKey,H as setHtmlLocaleAttributes,re as setVisibility,Pt as shouldLog,i as split,j as stableStringify,$e as stack,lt as startBrowserApp,St as str,B as tabs,He as tryScroll,Ye as uuid,u as visibleSplitColumns,Z as withDefault};
1
+ import{$ as e,$t as t,A as n,An as r,At as i,B as a,Bn as o,Bt as s,C as c,Cn as l,Ct as u,D as d,Dn as f,Dt as p,E as m,En as h,Et as g,F as _,Fn as v,Ft as y,G as b,Gn as x,Gt as S,H as C,Hn as w,Ht as T,I as E,In as D,It as O,J as k,Jn as A,Jt as j,K as M,Kn as N,Kt as P,L as F,Ln as I,Lt as L,M as R,Mn as z,Mt as B,N as V,Nn as H,Nt as U,O as W,On as G,Ot as K,P as q,Pn as J,Pt as Y,Q as X,Qt as Z,R as Q,Rn as $,Rt as ee,S as te,Sn as ne,St as re,T as ie,Tn as ae,Tt as oe,U as se,Un as ce,Ut as le,V as ue,Vn as de,Vt as fe,W as pe,Wn as me,Wt as he,X as ge,Xn as _e,Xt as ve,Y as ye,Yn as be,Yt as xe,Z as Se,Zn as Ce,Zt as we,_ as Te,_n as Ee,_t as De,a as Oe,an as ke,at as Ae,b as je,bn as Me,bt as Ne,c as Pe,cn as Fe,ct as Ie,d as Le,dn as Re,dt as ze,en as Be,et as Ve,f as He,fn as Ue,ft as We,g as Ge,gn as Ke,gt as qe,h as Je,hn as Ye,ht as Xe,i as Ze,in as Qe,it as $e,j as et,jn as tt,jt as nt,k as rt,kn as it,kt as at,l as ot,ln as st,lt as ct,m as lt,mn as ut,mt as dt,n as ft,nn as pt,nt as mt,o as ht,on as gt,ot as _t,p as vt,pn as yt,pt as bt,q as xt,qn as St,qt as Ct,r as wt,rn as Tt,rt as Et,s as Dt,sn as Ot,st as kt,t as At,tn as jt,tt as Mt,u as Nt,un as Pt,ut as Ft,v as It,vn as Lt,vt as Rt,w as zt,wn as Bt,wt as Vt,x as Ht,xn as Ut,xt as Wt,y as Gt,yn as Kt,yt as qt,z as Jt,zn as Yt,zt as Xt}from"./browser-BHhVWXik.mjs";export{N as ACTION_KINDS,x as ActionDispatcher,T as BASE_PAGE_FIELDS,s as BaseController,ne as BaseLogger,Ht as CompositeEventRecorder,l as CompositeLogger,Bt as CompositeLoggerFactory,Ye as ConsoleEventRecorder,Lt as ConsoleLogger,Kt as ConsoleLoggerFactory,ce as Container,mt as DEFAULT_NAV_PARAM,Ue as DEP_KEYS,le as FINESOFT_PUBLIC,Ct as Framework,Je as History,$ as HostGuardError,Yt as HttpClient,o as HttpError,me as IntentDispatcher,je as IntersectionImpressionObserver,F as LruMap,Y as NAVIGATION_NODE_KINDS,Ve as NAVIGATION_OP_KINDS,y as NavigationError,j as PrefetchedIntents,Ke as ReportingLogger,Ee as ReportingLoggerFactory,gt as Router,Ze as SESSION_DEFAULT_DEBOUNCE_MS,M as SESSION_DEFAULT_KEY,xt as SESSION_DEFAULT_VERSION,O as SPLIT_VISIBILITIES,k as SessionError,ae as SimpleTranslator,Gt as VoidEventRecorder,It as WithFieldsRecorder,Be as bool,rt as buildUrl,de as classifyHost,w as classifyUrl,ze as collectAllLeaves,ue as collectLeafKeys,We as collectVisibleDestinations,Et as createActiveLeafCodec,He as createAppHandle,m as createBrowserContext,Le as createDomRestore,$e as createFlatStackCodec,Ae as createFullStateCodec,Nt as createIslandOrchestrator,ot as createNavigationBridge,Mt as createNavigationController,C as createNavigationScopedState,Q as createNavigationSessionAdapter,Dt as createPrefetchedIntentsFromDom,d as createServerContext,Oe as createSessionBridge,a as createSessionStore,Jt as createUrlSessionAdapter,wt as createWebStorage,_t as decodeNavigationTreeParam,pe as decodeSnapshot,ht as defaultShouldRestore,e as defineNavigation,Re as defineRequestScopedKey,ge as defineRoute,Se as defineRoutes,te as deny,Ie as deserializeNavigation,Pe as deserializeServerData,ut as detectPlatform,kt as encodeNavigationTreeParam,b as encodeSnapshot,h as englishPlural,bt as findNearestStack,dt as findNode,W as generateUuid,n as getBaseUrl,tt as getLocaleAttributes,q as getPWADisplayMode,he as getPublicFields,z as getTextDirection,jt as int,f as interpolate,St as isCompoundAction,A as isExternalUrlAction,be as isFlowAction,g as isLeafNode,st as isMultiValueSchema,_ as isNone,S as isPublicMarked,H as isRtl,E as isSome,p as isSplitNode,K as isStackNode,at as isTabsNode,ye as isUrlLocation,oe as islandContainerAttributes,i as leaf,Pt as list,yt as makeDependencies,_e as makeExternalUrlAction,Ce as makeFlowAction,J as makeLocaleInfo,Ot as makeSchema,L as mapEach,P as markPublic,c as next,pt as num,Tt as oneOf,Z as optional,ee as pipe,Xt as pipeAsync,Xe as pop,qe as popTo,De as popToRoot,Rt as push,zt as redirect,vt as registerActionHandlers,Te as registerExternalUrlHandler,lt as registerFlowActionHandler,et as removeHost,R as removeQueryParams,V as removeScheme,qt as replaceTop,Me as resetFilterCache,Ne as resolveActivePath,it as resolveConfiguredMessages,At as resolveIslandsShell,v as resolveLocaleFromUrl,r as resolveMessages,G as resolvePluralKey,ie as rewrite,X as route,ve as runAfterLoadGuards,we as runBeforeLoadGuards,Fe as runStandard,fe as safeErrorPage,I as secureFetch,Wt as selectColumn,re as selectTab,ct as serializeNavigation,Ft as serializeNavigationStable,se as sessionEntryKey,D as setHtmlLocaleAttributes,u as setVisibility,Ut as shouldLog,nt as split,xe as stableStringify,B as stack,ft as startBrowserApp,Qe as str,U as tabs,Ge as tryScroll,ke as uuid,Vt as visibleSplitColumns,t as withDefault};
package/dist/index.d.mts CHANGED
@@ -1,6 +1,5 @@
1
- import { $ as IntersectionImpressionObserver, $i as FeatureFlagsProvider, $n as isLeafNode, $r as ConsoleLogger, $t as HydrateOperation, A as ActionHandlerDependencies, Aa as ActionHandler, Ai as AfterLoadGuard, An as SerializedStack, Ar as classifyHost, At as NavigationScopedState, B as getTextDirection, Ba as makeFlowAction, Bi as next, Bn as popTo, Br as BaseShelf, Bt as SessionUrlLocation, C as SessionBridgeOptions, Ca as SecureFetchOptions, Ci as InferOutput, Cn as createFullStateCodec, Cr as AsyncMapper, Ct as createUrlSessionAdapter, D as NavigationBridgeDependencies, Da as IntentController, Di as StandardSchemaV1, Dn as SerializedNavigation, Dr as pipeAsync, Dt as sessionEntryKey, E as defaultShouldRestore, Ea as Intent, Ei as StandardResult, En as SerializedLeaf, Er as pipe, Et as createNavigationScopedState, F as ExternalUrlDependencies, Fa as FlowAction, Fi as NextResult, Fn as collectAllLeaves, Fr as HttpError, Ft as SessionNavigationAdapter, G as PluralCategory, Gi as FINESOFT_PUBLIC, Gn as selectColumn, Gr as PrefetchedIntent, Gt as defineRoutes, H as makeLocaleInfo, Hi as rewrite, Hn as push, Hr as safeErrorPage, Ht as DefineRoutesOptions, I as registerExternalUrlHandler, Ia as isCompoundAction, Ii as PostLoadContext, In as collectVisibleDestinations, Ir as RequestInterceptor, It as SessionSnapshot, J as interpolate, Ji as markPublic, Jn as visibleSplitColumns, Jr as LocaleInfo, Jt as NavigationBrowserConfig, K as PluralRuleProvider, Ki as getPublicFields, Kn as selectTab, Kr as PrefetchedIntents, Kt as route, L as SimpleTranslator, La as isExternalUrlAction, Li as RedirectResult, Ln as findNearestStack, Lr as ResponseInterceptor, Lt as SessionStateProvider, M as FlowActionCallbacks, Ma as Action, Mi as DenyResult, Mn as deserializeNavigation, Mr as HostGuardError, Mt as SESSION_DEFAULT_VERSION, N as FlowActionDependencies, Na as CompoundAction, Ni as MiddlewareResult, Nn as serializeNavigation, Nr as HttpClient, Nt as SessionError, O as NavigationHandle, Oa as Container, Oi as makeSchema, On as SerializedSplit, Or as BaseController, Ot as decodeSnapshot, P as registerFlowActionHandler, Pa as ExternalUrlAction, Pi as NavigationContext, Pn as serializeNavigationStable, Pr as HttpClientConfig, Pt as SessionErrorContext, Q as ImpressionObserverOptions, Qi as FeatureFlags, Qn as TabsInit, Qr as shouldLog, Qt as defineNavigation, R as SimpleTranslatorOptions, Ra as isFlowAction, Ri as RewriteResult, Rn as findNode, Rr as stableStringify, Rt as SessionStore, S as SESSION_DEFAULT_DEBOUNCE_MS, Sa as LoggerFactory, Si as Router, Sn as createFlatStackCodec, Sr as TabsNode, St as createNavigationSessionAdapter, T as createSessionBridge, Ta as IntentDispatcher, Ti as StandardIssue, Tn as encodeNavigationTreeParam, Tr as mapEach, Tt as collectLeafKeys, U as resolveLocaleFromUrl, Ui as BASE_PAGE_FIELDS, Un as replaceTop, Ur as Framework, Ut as RenderMode, V as isRtl, Vi as redirect, Vn as popToRoot, Vr as SafeErrorPageOptions, Vt as isUrlLocation, W as setHtmlLocaleAttributes, Wi as BasePage, Wn as resolveActivePath, Wr as FrameworkConfig, Wt as RouteDefinition, X as WithFieldsRecorder, Xi as defineRequestScopedKey, Xn as islandContainerAttributes, Xr as Translator, Xt as NavigationInitial, Y as resolvePluralKey, Yi as RequestScopedKey, Yn as ResolvedEntry, Yr as TextDirection, Yt as NavigationDefinition, Z as VoidEventRecorder, Zi as DEP_KEYS, Zn as SplitColumnInit, Zr as resetFilterCache, Zt as NavigationSSRDefinition, _ as IslandOrchestratorOptions, _a as ReportingLogger, _i as str, _n as DEFAULT_NAV_PARAM, _r as SPLIT_VISIBILITIES, _t as Optional, a as DomRestore, aa as MessagesLoader, ai as InferQuery, an as NavigationOpKind, ar as stack, at as ServerContextOptions, b as AppHandle, ba as BaseLogger, bi as RouteAddOptions, bn as NavigationRouterLike, br as SplitVisibility, bt as LruMap, c as createWebStorage, ca as resolveConfiguredMessages, ci as StripOptional, cn as PopToOperation, cr as NAVIGATION_NODE_KINDS, ct as generateUuid, d as BrowserAppConfig, da as detectPlatform, di as NumOptions, dn as PushOptions, dr as NavigationNodeKind, dt as removeHost, ea as MakeDependenciesOptions, ei as ConsoleLoggerFactory, en as NAVIGATION_OP_KINDS, er as isSplitNode, et as ConsoleEventRecorder, f as BrowserNavigationConfig, fa as EventRecorder, fi as StrOptions, fn as ReplaceTopOperation, fr as NavigationPath, ft as removeQueryParams, g as IslandOrchestrator, ga as ReportCallback, gi as oneOf, gn as createNavigationController, gr as ResolvedDestination, gt as None, h as IslandHandle, ha as MetricsFieldsProvider, hi as num, hn as SetVisibilityOperation, hr as Page, ht as getPWADisplayMode, i as History, ia as makeDependencies, ii as InferParams, in as NavigationDispatchContext, ir as split, it as BrowserContextOptions, j as registerActionHandlers, ja as ACTION_KINDS, ji as BeforeLoadGuard, jn as SerializedTabs, jr as classifyUrl, jt as SESSION_DEFAULT_KEY, k as createNavigationBridge, ka as ActionDispatcher, ki as runStandard, kn as SerializedSplitColumn, kr as HostCheckResult, kt as encodeSnapshot, l as IslandsShell, la as resolveMessages, li as optional, ln as PopToRootOperation, lr as NavigationError, lt as buildUrl, m as startBrowserApp, ma as ImpressionObserver, mi as int, mn as SelectTabOperation, mr as NavigationSnapshot, mt as PWADisplayMode, n as deserializeServerData, na as Net, ni as CompositeLoggerFactory, nn as NavigationController, nr as isTabsNode, nt as runAfterLoadGuards, o as DomRestoreOptions, oa as MessagesLoaderContext, oi as ParamsFor, on as NavigationOperation, or as tabs, ot as createBrowserContext, p as BrowserSessionConfig, pa as ImpressionEntry, pi as bool, pn as SelectColumnOperation, pr as NavigationPathStep, pt as removeScheme, q as englishPlural, qi as isPublicMarked, qn as setVisibility, qr as LocaleAttributes, qt as DefineNavigationOptions, r as tryScroll, ra as Storage, ri as ExtractParamNames, rn as NavigationControllerOptions, rr as leaf, rt as runBeforeLoadGuards, s as createDomRestore, sa as TranslationMessages, si as QuerySchemaMap, sn as PopOperation, sr as LeafNode, st as createServerContext, t as createPrefetchedIntentsFromDom, ta as MetricsRecorder, ti as CompositeLogger, tn as NavigationContextInput, tr as isStackNode, tt as CompositeEventRecorder, u as resolveIslandsShell, ua as PlatformInfo, ui as withDefault, un as PushOperation, ur as NavigationNode, ut as getBaseUrl, v as MountEntry, va as ReportingLoggerFactory, vi as uuid, vn as FullStateCodecOptions, vr as SplitColumn, vt as isNone, w as SessionHandle, wa as secureFetch, wi as ParamSchema, wn as decodeNavigationTreeParam, wr as Mapper, wt as createSessionStore, x as createAppHandle, xa as Logger, xi as RouteMatch, xn as createActiveLeafCodec, xr as StackNode, xt as UrlAdapterOptions, y as createIslandOrchestrator, ya as ReportingLoggerOptions, yi as RouteParams, yn as NavigationCodec, yr as SplitNode, yt as isSome, z as getLocaleAttributes, za as makeExternalUrlAction, zi as deny, zn as pop, zr as BaseItem, zt as SessionStoreOptions } from "./browser-DMw76sEo.mjs";
1
+ import { $ as IntersectionImpressionObserver, $i as markPublic, $n as TabsInit, $r as shouldLog, $t as defineNavigation, A as ActionHandlerDependencies, Aa as IntentDispatcher, Ai as StandardIssue, An as SerializedSplitColumn, Ar as HostCheckResult, At as NavigationScopedState, B as getTextDirection, Ba as FlowAction, Bi as NextResult, Bn as pop, Br as BaseItem, Bt as SessionUrlLocation, C as SessionBridgeOptions, Ca as ReportingLoggerFactory, Ci as StripOptional, Cn as createFlatStackCodec, Cr as TabsNode, Ct as createUrlSessionAdapter, D as NavigationBridgeDependencies, Da as LoggerFactory, Di as list, Dn as SerializedLeaf, Dr as pipe, Dt as sessionEntryKey, E as defaultShouldRestore, Ea as Logger, Ei as isMultiValueSchema, En as encodeNavigationTreeParam, Er as mapEach, Et as createNavigationScopedState, F as ExternalUrlDependencies, Fa as ActionHandler, Fi as AfterLoadGuard, Fn as serializeNavigationStable, Fr as HttpClientConfig, Ft as SessionNavigationAdapter, G as PluralCategory, Ga as makeFlowAction, Gi as next, Gn as resolveActivePath, Gr as FrameworkConfig, Gt as defineRoute, H as makeLocaleInfo, Ha as isExternalUrlAction, Hi as RedirectResult, Hn as popToRoot, Hr as SafeErrorPageOptions, Ht as DefineRoutesOptions, I as registerExternalUrlHandler, Ia as ACTION_KINDS, Ii as BeforeLoadGuard, In as collectAllLeaves, Ir as HttpError, It as SessionSnapshot, J as interpolate, Ji as BASE_PAGE_FIELDS, Jn as setVisibility, Jr as LocaleAttributes, Jt as DefineNavigationOptions, K as PluralRuleProvider, Ki as redirect, Kn as selectColumn, Kr as PrefetchedIntent, Kt as defineRoutes, L as SimpleTranslator, La as Action, Li as DenyResult, Ln as collectVisibleDestinations, Lr as RequestInterceptor, Lt as SessionStateProvider, M as FlowActionCallbacks, Ma as IntentController, Mi as StandardSchemaV1, Mn as SerializedTabs, Mr as classifyUrl, Mt as SESSION_DEFAULT_VERSION, N as FlowActionDependencies, Na as Container, Ni as makeSchema, Nn as deserializeNavigation, Nr as HostGuardError, Nt as SessionError, O as NavigationHandle, Oa as SecureFetchOptions, Oi as InferOutput, On as SerializedNavigation, Or as pipeAsync, Ot as decodeSnapshot, P as registerFlowActionHandler, Pa as ActionDispatcher, Pi as runStandard, Pn as serializeNavigation, Pr as HttpClient, Pt as SessionErrorContext, Q as ImpressionObserverOptions, Qi as isPublicMarked, Qn as SplitColumnInit, Qr as resetFilterCache, Qt as NavigationSSRDefinition, R as SimpleTranslatorOptions, Ra as CompoundAction, Ri as MiddlewareResult, Rn as findNearestStack, Rr as ResponseInterceptor, Rt as SessionStore, S as SESSION_DEFAULT_DEBOUNCE_MS, Sa as ReportingLogger, Si as QuerySchemaMap, Sn as createActiveLeafCodec, Sr as StackNode, St as createNavigationSessionAdapter, T as createSessionBridge, Ta as BaseLogger, Ti as MultiValueSchema, Tn as decodeNavigationTreeParam, Tr as Mapper, Tt as collectLeafKeys, U as resolveLocaleFromUrl, Ua as isFlowAction, Ui as RewriteResult, Un as push, Ur as safeErrorPage, Ut as RenderMode, V as isRtl, Va as isCompoundAction, Vi as PostLoadContext, Vn as popTo, Vr as BaseShelf, Vt as isUrlLocation, W as setHtmlLocaleAttributes, Wa as makeExternalUrlAction, Wi as deny, Wn as replaceTop, Wr as Framework, Wt as RouteDefinition, X as WithFieldsRecorder, Xi as FINESOFT_PUBLIC, Xn as ResolvedEntry, Xr as TextDirection, Xt as NavigationDefinition, Y as resolvePluralKey, Yi as BasePage, Yn as visibleSplitColumns, Yr as LocaleInfo, Yt as NavigationBrowserConfig, Z as VoidEventRecorder, Zi as getPublicFields, Zn as islandContainerAttributes, Zr as Translator, Zt as NavigationInitial, _ as IslandOrchestratorOptions, _a as EventRecorder, _i as Router, _n as createNavigationController, _r as ResolvedDestination, _t as Optional, a as DomRestore, aa as MakeDependenciesOptions, ai as withDefault, an as NavigationDispatchContext, ar as split, at as ServerContextOptions, b as AppHandle, ba as MetricsFieldsProvider, bi as InferQuery, bn as NavigationCodec, br as SplitNode, bt as LruMap, c as createWebStorage, ca as Storage, ci as bool, cn as PopOperation, cr as LeafNode, ct as generateUuid, d as BrowserAppConfig, da as MessagesLoaderContext, di as oneOf, dn as PushOperation, dr as NavigationNode, dt as removeHost, ea as RequestScopedKey, ei as ConsoleLogger, en as HydrateOperation, er as isLeafNode, et as ConsoleEventRecorder, f as BrowserNavigationConfig, fa as TranslationMessages, fi as str, fn as PushOptions, fr as NavigationNodeKind, ft as removeQueryParams, g as IslandOrchestrator, ga as detectPlatform, gi as RouteMatch, gn as SetVisibilityOperation, gr as Page, gt as None, h as IslandHandle, ha as PlatformInfo, hi as RouteAddOptions, hn as SelectTabOperation, hr as NavigationSnapshot, ht as getPWADisplayMode, i as History, ia as FeatureFlagsProvider, ii as optional, in as NavigationControllerOptions, ir as leaf, it as BrowserContextOptions, j as registerActionHandlers, ja as Intent, ji as StandardResult, jn as SerializedStack, jr as classifyHost, jt as SESSION_DEFAULT_KEY, k as createNavigationBridge, ka as secureFetch, ki as ParamSchema, kn as SerializedSplit, kr as BaseController, kt as encodeSnapshot, l as IslandsShell, la as makeDependencies, li as int, ln as PopToOperation, lr as NAVIGATION_NODE_KINDS, lt as buildUrl, m as startBrowserApp, ma as resolveMessages, mi as RouteParams, mn as SelectColumnOperation, mr as NavigationPathStep, mt as PWADisplayMode, n as deserializeServerData, na as DEP_KEYS, ni as CompositeLogger, nn as NavigationContextInput, nr as isStackNode, nt as runAfterLoadGuards, o as DomRestoreOptions, oa as MetricsRecorder, oi as NumOptions, on as NavigationOpKind, or as stack, ot as createBrowserContext, p as BrowserSessionConfig, pa as resolveConfiguredMessages, pi as uuid, pn as ReplaceTopOperation, pr as NavigationPath, pt as removeScheme, q as englishPlural, qi as rewrite, qn as selectTab, qr as PrefetchedIntents, qt as route, r as tryScroll, ra as FeatureFlags, ri as CompositeLoggerFactory, rn as NavigationController, rr as isTabsNode, rt as runBeforeLoadGuards, s as createDomRestore, sa as Net, si as StrOptions, sn as NavigationOperation, sr as tabs, st as createServerContext, t as createPrefetchedIntentsFromDom, ta as defineRequestScopedKey, ti as ConsoleLoggerFactory, tn as NAVIGATION_OP_KINDS, tr as isSplitNode, tt as CompositeEventRecorder, u as resolveIslandsShell, ua as MessagesLoader, ui as num, un as PopToRootOperation, ur as NavigationError, ut as getBaseUrl, v as MountEntry, va as ImpressionEntry, vi as ExtractParamNames, vn as DEFAULT_NAV_PARAM, vr as SPLIT_VISIBILITIES, vt as isNone, w as SessionHandle, wa as ReportingLoggerOptions, wi as ListOptions, wn as createFullStateCodec, wr as AsyncMapper, wt as createSessionStore, x as createAppHandle, xa as ReportCallback, xi as ParamsFor, xn as NavigationRouterLike, xr as SplitVisibility, xt as UrlAdapterOptions, y as createIslandOrchestrator, ya as ImpressionObserver, yi as InferParams, yn as FullStateCodecOptions, yr as SplitColumn, yt as isSome, z as getLocaleAttributes, za as ExternalUrlAction, zi as NavigationContext, zn as findNode, zr as stableStringify, zt as SessionStoreOptions } from "./browser-BV2BBXm7.mjs";
2
2
  import { Hono } from "hono";
3
- import * as _$node_fs0 from "node:fs";
4
3
  import { ViteDevServer } from "vite";
5
4
 
6
5
  //#region ../ssr/src/render.d.ts
@@ -360,7 +359,7 @@ interface AdapterContext {
360
359
  /** 默认 locale(CSR shell 使用) */
361
360
  defaultLocale?: string;
362
361
  vite: any;
363
- fs: typeof _$node_fs0;
362
+ fs: typeof import("node:fs");
364
363
  path: {
365
364
  resolve: (...args: string[]) => string;
366
365
  join: (...args: string[]) => string;
@@ -695,5 +694,5 @@ declare function finesoftFrontViteConfig(options?: FinesoftFrontViteOptions): {
695
694
  closeBundle(): Promise<void>;
696
695
  };
697
696
  //#endregion
698
- export { ACTION_KINDS, Action, ActionDispatcher, ActionHandler, ActionHandlerDependencies, type Adapter, type AdapterContext, AfterLoadGuard, AppHandle, AsyncMapper, BASE_PAGE_FIELDS, BaseController, BaseItem, BaseLogger, BasePage, BaseShelf, BeforeLoadGuard, BrowserAppConfig, BrowserContextOptions, BrowserNavigationConfig, BrowserSessionConfig, CompositeEventRecorder, CompositeLogger, CompositeLoggerFactory, CompoundAction, ConsoleEventRecorder, ConsoleLogger, ConsoleLoggerFactory, Container, DEFAULT_NAV_PARAM, DEP_KEYS, DefineNavigationOptions, DefineRoutesOptions, DenyResult, DomRestore, DomRestoreOptions, EventRecorder, ExternalUrlAction, ExternalUrlDependencies, ExtractParamNames, FINESOFT_PUBLIC, FeatureFlags, FeatureFlagsProvider, type FinesoftFrontViteOptions, FlowAction, FlowActionCallbacks, FlowActionDependencies, Framework, FrameworkConfig, FullStateCodecOptions, History, HostCheckResult, HostGuardError, HttpClient, HttpClientConfig, HttpError, HydrateOperation, ImpressionEntry, ImpressionObserver, ImpressionObserverOptions, InferOutput, InferParams, InferQuery, type InjectSSROptions, Intent, IntentController, IntentDispatcher, IntersectionImpressionObserver, IslandHandle, IslandOrchestrator, IslandOrchestratorOptions, IslandsShell, LeafNode, LocaleAttributes, LocaleInfo, Logger, Logger as LoggerInterface, LoggerFactory, LruMap, MakeDependenciesOptions, Mapper, MessagesLoader, MessagesLoaderContext, MetricsFieldsProvider, MetricsRecorder, MiddlewareResult, MountEntry, NAVIGATION_NODE_KINDS, NAVIGATION_OP_KINDS, NAVIGATION_TREE_INTENT_ID, NavigationBridgeDependencies, NavigationBrowserConfig, NavigationCodec, NavigationContext, NavigationContextInput, NavigationController, NavigationControllerOptions, NavigationDefinition, NavigationDispatchContext, NavigationError, NavigationHandle, NavigationInitial, NavigationNode, NavigationNodeKind, NavigationOpKind, NavigationOperation, NavigationPath, NavigationPathStep, NavigationRouterLike, NavigationSSRDefinition, NavigationScopedState, NavigationSnapshot, Net, NextResult, None, NumOptions, Optional, PWADisplayMode, Page, ParamSchema, ParamsFor, PlatformInfo, PluralCategory, PluralRuleProvider, PopOperation, PopToOperation, PopToRootOperation, PostLoadContext, PrefetchedIntent, PrefetchedIntents, type ProxyAuthConfig, type ProxyRouteConfig, PushOperation, PushOptions, QuerySchemaMap, RedirectResult, type RenderEntry, RenderMode, ReplaceTopOperation, ReportCallback, ReportingLogger, ReportingLoggerFactory, ReportingLoggerOptions, RequestInterceptor, RequestScopedKey, ResolvedDestination, ResolvedEntry, ResponseInterceptor, RewriteResult, RouteAddOptions, RouteDefinition, RouteMatch, RouteParams, Router, type RuntimeInfo, SESSION_DEFAULT_DEBOUNCE_MS, SESSION_DEFAULT_KEY, SESSION_DEFAULT_VERSION, SPLIT_VISIBILITIES, type SSRAppOptions, type SSRContext, type SSRModule, type SSRNavigationDefinition, type SSRNavigationRenderConfig, type SSRRenderConfig, type SSRRenderNavigationOptions, type SSRRenderNavigationResult, type SSRRenderOptions, type SSRRenderResult, SSR_PLACEHOLDERS, SafeErrorPageOptions, SecureFetchOptions, SelectColumnOperation, SelectTabOperation, type SerializeServerDataOptions, SerializedLeaf, SerializedNavigation, type SerializedNavigationTreePayload, SerializedSplit, SerializedSplitColumn, SerializedStack, SerializedTabs, type ServerConfig, ServerContextOptions, type ServerInstance, SessionBridgeOptions, SessionError, SessionErrorContext, SessionHandle, SessionNavigationAdapter, SessionSnapshot, SessionStateProvider, SessionStore, SessionStoreOptions, SessionUrlLocation, SetVisibilityOperation, SimpleTranslator, SimpleTranslatorOptions, SplitColumn, SplitColumnInit, SplitNode, SplitVisibility, StackNode, StandardIssue, StandardResult, StandardSchemaV1, type StartServerOptions, Storage, StrOptions, StripOptional, TabsInit, TabsNode, TextDirection, TranslationMessages, Translator, UrlAdapterOptions, VoidEventRecorder, WithFieldsRecorder, autoAdapter, bool, buildUrl, classifyHost, classifyUrl, cloudflareAdapter, collectAllLeaves, collectLeafKeys, collectVisibleDestinations, createActiveLeafCodec, createAppHandle, createBrowserContext, createDomRestore, createFlatStackCodec, createFullStateCodec, createIslandOrchestrator, createNavigationBridge, createNavigationController, createNavigationScopedState, createNavigationSessionAdapter, createPrefetchedIntentsFromDom, createSSRApp, createSSRNavigationRender, createSSRRender, createServer, createServerContext, createSessionBridge, createSessionStore, createUrlSessionAdapter, createWebStorage, decodeNavigationTreeParam, decodeSnapshot, defaultShouldRestore, defineNavigation, defineRequestScopedKey, defineRoutes, deny, deserializeNavigation, deserializeServerData, detectPlatform, detectRuntime, encodeNavigationTreeParam, encodeSnapshot, englishPlural, extractNavigationTree, findNearestStack, findNode, finesoftFrontViteConfig, generateProxyCode, generateUuid, getBaseUrl, getLocaleAttributes, getPWADisplayMode, getPublicFields, getTextDirection, injectCSRShell, injectSSRContent, int, interpolate, isCompoundAction, isExternalUrlAction, isFlowAction, isLeafNode, isNone, isPublicMarked, isRtl, isSome, isSplitNode, isStackNode, isTabsNode, isUrlLocation, islandContainerAttributes, leaf, makeDependencies, makeExternalUrlAction, makeFlowAction, makeLocaleInfo, makeSchema, mapEach, markPublic, netlifyAdapter, next, nodeAdapter, num, oneOf, optional, parseAcceptLanguage, pipe, pipeAsync, pop, popTo, popToRoot, push, redirect, registerActionHandlers, registerExternalUrlHandler, registerFlowActionHandler, registerProxyRoutes, removeHost, removeQueryParams, removeScheme, renderIslandsHtml, replaceTop, resetFilterCache, resolveActivePath, resolveAdapter, resolveConfiguredMessages, resolveIslandsShell, resolveLocaleFromUrl, resolveMessages, resolvePluralKey, resolveRoot, rewrite, route, runAfterLoadGuards, runBeforeLoadGuards, runStandard, safeErrorPage, secureFetch, selectColumn, selectTab, serializeNavigation, serializeNavigationStable, serializeServerData, sessionEntryKey, setHtmlLocaleAttributes, setVisibility, shouldLog, split, ssrRender, ssrRenderNavigation, stableStringify, stack, startBrowserApp, startServer, staticAdapter, str, stripNavigationTree, tabs, tryScroll, uuid, vercelAdapter, visibleSplitColumns, withDefault };
697
+ export { ACTION_KINDS, type Action, ActionDispatcher, type ActionHandler, type ActionHandlerDependencies, type Adapter, type AdapterContext, type AfterLoadGuard, type AppHandle, type AsyncMapper, BASE_PAGE_FIELDS, BaseController, type BaseItem, BaseLogger, type BasePage, type BaseShelf, type BeforeLoadGuard, type BrowserAppConfig, type BrowserContextOptions, type BrowserNavigationConfig, type BrowserSessionConfig, CompositeEventRecorder, CompositeLogger, CompositeLoggerFactory, type CompoundAction, ConsoleEventRecorder, ConsoleLogger, ConsoleLoggerFactory, Container, DEFAULT_NAV_PARAM, DEP_KEYS, type DefineNavigationOptions, type DefineRoutesOptions, type DenyResult, type DomRestore, type DomRestoreOptions, type EventRecorder, type ExternalUrlAction, type ExternalUrlDependencies, type ExtractParamNames, FINESOFT_PUBLIC, type FeatureFlags, type FeatureFlagsProvider, type FinesoftFrontViteOptions, type FlowAction, type FlowActionCallbacks, type FlowActionDependencies, Framework, type FrameworkConfig, type FullStateCodecOptions, History, type HostCheckResult, HostGuardError, HttpClient, type HttpClientConfig, HttpError, type HydrateOperation, type ImpressionEntry, type ImpressionObserver, type ImpressionObserverOptions, type InferOutput, type InferParams, type InferQuery, type InjectSSROptions, type Intent, type IntentController, IntentDispatcher, IntersectionImpressionObserver, type IslandHandle, type IslandOrchestrator, type IslandOrchestratorOptions, type IslandsShell, type LeafNode, type ListOptions, type LocaleAttributes, type LocaleInfo, type Logger, type Logger as LoggerInterface, type LoggerFactory, LruMap, type MakeDependenciesOptions, type Mapper, type MessagesLoader, type MessagesLoaderContext, type MetricsFieldsProvider, type MetricsRecorder, type MiddlewareResult, type MountEntry, type MultiValueSchema, NAVIGATION_NODE_KINDS, NAVIGATION_OP_KINDS, NAVIGATION_TREE_INTENT_ID, type NavigationBridgeDependencies, type NavigationBrowserConfig, type NavigationCodec, type NavigationContext, type NavigationContextInput, type NavigationController, type NavigationControllerOptions, type NavigationDefinition, type NavigationDispatchContext, NavigationError, type NavigationHandle, type NavigationInitial, type NavigationNode, type NavigationNodeKind, type NavigationOpKind, type NavigationOperation, type NavigationPath, type NavigationPathStep, type NavigationRouterLike, type NavigationSSRDefinition, type NavigationScopedState, type NavigationSnapshot, type Net, type NextResult, type None, type NumOptions, type Optional, type PWADisplayMode, type Page, type ParamSchema, type ParamsFor, type PlatformInfo, type PluralCategory, type PluralRuleProvider, type PopOperation, type PopToOperation, type PopToRootOperation, type PostLoadContext, type PrefetchedIntent, PrefetchedIntents, type ProxyAuthConfig, type ProxyRouteConfig, type PushOperation, type PushOptions, type QuerySchemaMap, type RedirectResult, type RenderEntry, type RenderMode, type ReplaceTopOperation, type ReportCallback, ReportingLogger, ReportingLoggerFactory, type ReportingLoggerOptions, type RequestInterceptor, type RequestScopedKey, type ResolvedDestination, type ResolvedEntry, type ResponseInterceptor, type RewriteResult, type RouteAddOptions, type RouteDefinition, type RouteMatch, type RouteParams, Router, type RuntimeInfo, SESSION_DEFAULT_DEBOUNCE_MS, SESSION_DEFAULT_KEY, SESSION_DEFAULT_VERSION, SPLIT_VISIBILITIES, type SSRAppOptions, type SSRContext, type SSRModule, type SSRNavigationDefinition, type SSRNavigationRenderConfig, type SSRRenderConfig, type SSRRenderNavigationOptions, type SSRRenderNavigationResult, type SSRRenderOptions, type SSRRenderResult, SSR_PLACEHOLDERS, type SafeErrorPageOptions, type SecureFetchOptions, type SelectColumnOperation, type SelectTabOperation, type SerializeServerDataOptions, type SerializedLeaf, type SerializedNavigation, type SerializedNavigationTreePayload, type SerializedSplit, type SerializedSplitColumn, type SerializedStack, type SerializedTabs, type ServerConfig, type ServerContextOptions, type ServerInstance, type SessionBridgeOptions, SessionError, type SessionErrorContext, type SessionHandle, type SessionNavigationAdapter, type SessionSnapshot, type SessionStateProvider, type SessionStore, type SessionStoreOptions, type SessionUrlLocation, type SetVisibilityOperation, SimpleTranslator, type SimpleTranslatorOptions, type SplitColumn, type SplitColumnInit, type SplitNode, type SplitVisibility, type StackNode, type StandardIssue, type StandardResult, type StandardSchemaV1, type StartServerOptions, type Storage, type StrOptions, type StripOptional, type TabsInit, type TabsNode, type TextDirection, type TranslationMessages, type Translator, type UrlAdapterOptions, VoidEventRecorder, WithFieldsRecorder, autoAdapter, bool, buildUrl, classifyHost, classifyUrl, cloudflareAdapter, collectAllLeaves, collectLeafKeys, collectVisibleDestinations, createActiveLeafCodec, createAppHandle, createBrowserContext, createDomRestore, createFlatStackCodec, createFullStateCodec, createIslandOrchestrator, createNavigationBridge, createNavigationController, createNavigationScopedState, createNavigationSessionAdapter, createPrefetchedIntentsFromDom, createSSRApp, createSSRNavigationRender, createSSRRender, createServer, createServerContext, createSessionBridge, createSessionStore, createUrlSessionAdapter, createWebStorage, decodeNavigationTreeParam, decodeSnapshot, defaultShouldRestore, defineNavigation, defineRequestScopedKey, defineRoute, defineRoutes, deny, deserializeNavigation, deserializeServerData, detectPlatform, detectRuntime, encodeNavigationTreeParam, encodeSnapshot, englishPlural, extractNavigationTree, findNearestStack, findNode, finesoftFrontViteConfig, generateProxyCode, generateUuid, getBaseUrl, getLocaleAttributes, getPWADisplayMode, getPublicFields, getTextDirection, injectCSRShell, injectSSRContent, int, interpolate, isCompoundAction, isExternalUrlAction, isFlowAction, isLeafNode, isMultiValueSchema, isNone, isPublicMarked, isRtl, isSome, isSplitNode, isStackNode, isTabsNode, isUrlLocation, islandContainerAttributes, leaf, list, makeDependencies, makeExternalUrlAction, makeFlowAction, makeLocaleInfo, makeSchema, mapEach, markPublic, netlifyAdapter, next, nodeAdapter, num, oneOf, optional, parseAcceptLanguage, pipe, pipeAsync, pop, popTo, popToRoot, push, redirect, registerActionHandlers, registerExternalUrlHandler, registerFlowActionHandler, registerProxyRoutes, removeHost, removeQueryParams, removeScheme, renderIslandsHtml, replaceTop, resetFilterCache, resolveActivePath, resolveAdapter, resolveConfiguredMessages, resolveIslandsShell, resolveLocaleFromUrl, resolveMessages, resolvePluralKey, resolveRoot, rewrite, route, runAfterLoadGuards, runBeforeLoadGuards, runStandard, safeErrorPage, secureFetch, selectColumn, selectTab, serializeNavigation, serializeNavigationStable, serializeServerData, sessionEntryKey, setHtmlLocaleAttributes, setVisibility, shouldLog, split, ssrRender, ssrRenderNavigation, stableStringify, stack, startBrowserApp, startServer, staticAdapter, str, stripNavigationTree, tabs, tryScroll, uuid, vercelAdapter, visibleSplitColumns, withDefault };
699
698
  //# sourceMappingURL=index.d.mts.map