@vef-framework-react/core 2.1.6 → 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/cjs/http/client.cjs +1 -1
  2. package/dist/cjs/index.cjs +1 -1
  3. package/dist/cjs/motion/index.cjs +1 -1
  4. package/dist/cjs/store/unbound.cjs +1 -1
  5. package/dist/es/ai/index.js +1 -1
  6. package/dist/es/api/client.js +1 -1
  7. package/dist/es/api/constants.js +1 -1
  8. package/dist/es/api/helpers.js +1 -1
  9. package/dist/es/api/index.js +1 -1
  10. package/dist/es/auth/helpers.js +1 -1
  11. package/dist/es/auth/index.js +1 -1
  12. package/dist/es/context/api-client.js +1 -1
  13. package/dist/es/context/app.js +1 -1
  14. package/dist/es/context/context-selector.js +1 -1
  15. package/dist/es/context/disabled.js +1 -1
  16. package/dist/es/context/index.js +1 -1
  17. package/dist/es/dnd/index.js +1 -1
  18. package/dist/es/http/client.js +13 -13
  19. package/dist/es/http/constants.js +1 -1
  20. package/dist/es/http/errors.js +1 -1
  21. package/dist/es/http/helpers.js +1 -1
  22. package/dist/es/http/index.js +1 -1
  23. package/dist/es/immer/index.js +1 -1
  24. package/dist/es/index.js +24 -24
  25. package/dist/es/motion/features.js +1 -1
  26. package/dist/es/motion/index.js +1 -1
  27. package/dist/es/motion/motion-provider.js +1 -1
  28. package/dist/es/query/constants.js +1 -1
  29. package/dist/es/query/helpers.js +1 -1
  30. package/dist/es/query/hooks.js +10 -10
  31. package/dist/es/query/index.js +1 -1
  32. package/dist/es/sse/client.js +1 -1
  33. package/dist/es/sse/helpers.js +1 -1
  34. package/dist/es/sse/index.js +1 -1
  35. package/dist/es/state/index.js +1 -1
  36. package/dist/es/state-machine/index.js +1 -1
  37. package/dist/es/store/bound.js +1 -1
  38. package/dist/es/store/index.js +1 -1
  39. package/dist/es/store/unbound.js +43 -30
  40. package/dist/es/store/use-deep.js +1 -1
  41. package/dist/types/context/types.d.ts +3 -2
  42. package/dist/types/dnd/index.d.ts +1 -1
  43. package/dist/types/http/client.d.ts +3 -1
  44. package/dist/types/index.d.ts +3 -3
  45. package/dist/types/query/hooks.d.ts +1 -1
  46. package/dist/types/query/index.d.ts +1 -1
  47. package/dist/types/store/bound.d.ts +2 -0
  48. package/dist/types/store/index.d.ts +1 -1
  49. package/dist/types/store/types.d.ts +10 -1
  50. package/dist/types/store/unbound.d.ts +5 -2
  51. package/package.json +11 -11
@@ -1 +1 @@
1
- const e=require(`../_internal/_rolldown/runtime.cjs`),t=require(`./constants.cjs`),n=require(`./errors.cjs`);let r=require(`@vef-framework-react/shared`),i=require(`axios`);i=e.__toESM(i);var a=class{#e;#t;#n=!1;#r=[];constructor(e){this.#t=e;let{baseUrl:n,timeout:a=t.DEFAULT_TIMEOUT}=e;this.#e=i.default.create({baseURL:n,allowAbsoluteUrls:!0,timeout:a,headers:{"Content-Type":`application/json`},paramsSerializer:e=>(0,r.encodeQueryString)(e,{arrayFormat:`repeat`,skipNulls:!0,charset:`utf-8`}),responseType:`json`,responseEncoding:`utf-8`,validateStatus:e=>e>=200&&e<300,withCredentials:!1,timeoutErrorMessage:`请求超时`}),this.initInterceptors()}initInterceptors(){this.#e.interceptors.request.use(this.handleRequest.bind(this),this.handleRequestError.bind(this)),this.#e.interceptors.response.use(this.handleResponse.bind(this),this.handleResponseError.bind(this))}matchesCode(e,t){return(0,r.isArray)(t)?t.includes(e):e===t}async handleRequest(e){let n=e.headers[t.SKIP_AUTH_HEADER]===`1`;if(this.#n&&!n&&!await new Promise(e=>{this.#r.push(e)}))throw Error(`登录已过期, 请重新登录`);return n?delete e.headers[t.SKIP_AUTH_HEADER]:await this.injectAccessToken(e),this.replacePathParams(e),e}handleRequestError(e){let{showErrorMessage:t}=this.#t,n=`发起请求失败: ${(e instanceof Error?e.message:String(e))||`未知错误`}`;return t?t(n):console.error(`[HttpClient] ${n}`),Promise.reject(e)}handleResponse(e){let{showWarningMessage:t,okCode:r=0}=this.#t,{code:i,message:a,data:o}=e.data;if(this.matchesCode(i,r))return e;throw t?t(a):console.warn(`[HttpClient] [${e.config.method}: ${e.config.url}] 返回错误: ${a}`),new n.BusinessError(i,a,o)}async handleResponseError(e){if(e instanceof i.CanceledError){if(e.response){let{method:t,url:n}=e.response.config;console.warn(`[HttpClient] [${t}: ${n}] 被取消`)}return}let{response:t}=e;if(!t)throw this.logError(`请求失败: ${e.message||`未知错误`}`),e;let{status:n,config:r,data:a}=t,{code:o,message:s}=a,c=`[${r.method}: ${r.url}]`;switch(n){case 400:this.logWarning(s,`${c} 参数错误: ${s}`);break;case 401:await this.handleUnauthorized(e,o,c);break;case 403:this.#t.showWarningMessage?.(`${s}, 请联系管理员为您开通`),console.warn(`[HttpClient] ${c} 访问被拒绝: ${s}`),await this.#t.onAccessDenied?.();break;default:this.logError(s,`${c} 返回错误: ${s}`)}throw e}async handleUnauthorized(e,t,n){let{tokenExpiredCode:r=[]}=this.#t;if(!this.matchesCode(t,r)){await this.#t.onUnauthenticated?.();return}if(this.#n)throw e;if(await this.tryRefreshToken())return this.retryRequest(e.response.config);this.logInfo(`登录已过期, 请重新登录`),await this.#t.onUnauthenticated?.()}logInfo(e){this.#t.showInfoMessage?this.#t.showInfoMessage(e):console.info(`[HttpClient] ${e}`)}logWarning(e,t){this.#t.showWarningMessage?this.#t.showWarningMessage(e):console.warn(`[HttpClient] ${t??e}`)}logError(e,t){this.#t.showErrorMessage?this.#t.showErrorMessage(e):console.error(`[HttpClient] ${t??e}`)}async injectAccessToken(e){let{getAuthTokens:t}=this.#t;if(!t)return;let n=await t();n?.accessToken&&(e.headers.Authorization=`Bearer ${n.accessToken}`)}replacePathParams(e){let{url:n,params:i={}}=e;!n||!t.PATH_PARAM_REGEX.test(n)||(t.PATH_PARAM_REGEX.lastIndex=0,e.url=n.replaceAll(t.PATH_PARAM_REGEX,(e,t)=>{if(!Object.hasOwn(i,t))return console.warn(`[HttpClient] 接口: ${n} 路径参数 ${t} 未在查询参数中定义, 请检查`),`unknown`;let a=i[t];return(0,r.isNullish)(a)?(console.warn(`[HttpClient] 接口: ${n} 路径参数 ${t} 在查询参数中为空, 请检查`),`unknown`):String(a)}))}async ensureTokenRefreshed(e=!0){if(this.#n)return new Promise(e=>{this.#r.push(e)});let t=await this.tryRefreshToken();return!t&&e&&await this.#t.onUnauthenticated?.(),t}async tryRefreshToken(){let{getAuthTokens:e,refreshToken:t,setAuthTokens:n}=this.#t;if(!e||!t||!n)return!1;this.#n=!0;let r=!1;try{let i=await e();if(!i)return!1;let a=await t(i);return await n(Object.freeze(a)),r=!0,!0}catch(e){return console.error(`[HttpClient] 刷新令牌失败: ${e}`),!1}finally{this.#n=!1;for(let e of this.#r)e(r);this.#r=[]}}async retryRequest(e){let t={...e};return await this.injectAccessToken(t),this.#e(t)}async get(e,t){return(await this.#e.get(e,t)).data}async post(e,t){let{data:n,...r}=t??{};return(await this.#e.post(e,n,r)).data}async put(e,t){let{data:n,...r}=t??{};return(await this.#e.put(e,n,r)).data}async delete(e,t){return(await this.#e.delete(e,t)).data}async upload(e,t){let{data:n,onProgress:i,...a}=t??{};return(await this.#e.postForm(e,n,{...a,onUploadProgress:(0,r.isFunction)(i)?i:void 0})).data}async download(e,n){let{onProgress:i,filename:a,...o}=n??{},{data:s,headers:c}=await this.#e.get(e,{...o,responseType:`blob`,responseEncoding:`binary`,onDownloadProgress:(0,r.isFunction)(i)?i:void 0});try{let e=JSON.parse(await s.text());throw Error(e.message)}catch{}let l=c[`content-disposition`];if(!(0,r.isString)(l))return;let u=t.CONTENT_DISPOSITION_FILENAME_REGEX.exec(l);if(!u?.groups?.name)return;let d=decodeURIComponent(u.groups.name),f=URL.createObjectURL(s);try{let e=document.createElement(`a`);e.href=f,e.download=(0,r.isFunction)(a)?a(d):a??d,e.click()}finally{URL.revokeObjectURL(f)}}};exports.HttpClient=a;
1
+ const e=require(`../_internal/_rolldown/runtime.cjs`),t=require(`./constants.cjs`),n=require(`./errors.cjs`);let r=require(`@vef-framework-react/shared`),i=require(`axios`);i=e.__toESM(i,1);var a=class{#e;#t;#n=!1;#r=[];constructor(e){this.#t=e;let{baseUrl:n,timeout:a=t.DEFAULT_TIMEOUT}=e;this.#e=i.default.create({baseURL:n,allowAbsoluteUrls:!0,timeout:a,headers:{"Content-Type":`application/json`},paramsSerializer:e=>(0,r.encodeQueryString)(e,{arrayFormat:`repeat`,skipNulls:!0,charset:`utf-8`}),responseType:`json`,responseEncoding:`utf-8`,validateStatus:e=>e>=200&&e<300,withCredentials:!1,timeoutErrorMessage:`请求超时`}),this.initInterceptors()}initInterceptors(){this.#e.interceptors.request.use(this.handleRequest.bind(this),this.handleRequestError.bind(this)),this.#e.interceptors.response.use(this.handleResponse.bind(this),this.handleResponseError.bind(this))}matchesCode(e,t){return(0,r.isArray)(t)?t.includes(e):e===t}async handleRequest(e){let n=e.headers[t.SKIP_AUTH_HEADER]===`1`;if(this.#n&&!n&&!await new Promise(e=>{this.#r.push(e)}))throw Error(`登录已过期, 请重新登录`);return n?delete e.headers[t.SKIP_AUTH_HEADER]:await this.injectAccessToken(e),this.replacePathParams(e),e}handleRequestError(e){let{showErrorMessage:t}=this.#t,n=`发起请求失败: ${(e instanceof Error?e.message:String(e))||`未知错误`}`;return t?t(n):console.error(`[HttpClient] ${n}`),Promise.reject(e)}handleResponse(e){let{showWarningMessage:t,okCode:r=0}=this.#t,{code:i,message:a,data:o}=e.data;if(this.matchesCode(i,r))return e;throw t?t(a):console.warn(`[HttpClient] [${e.config.method}: ${e.config.url}] 返回错误: ${a}`),new n.BusinessError(i,a,o)}async handleResponseError(e){if(e instanceof i.CanceledError){if(e.response){let{method:t,url:n}=e.response.config;console.warn(`[HttpClient] [${t}: ${n}] 被取消`)}return}let{response:t}=e;if(!t)throw this.logError(`请求失败: ${e.message||`未知错误`}`),e;let{status:n,config:r,data:a}=t,{code:o,message:s}=a,c=`[${r.method}: ${r.url}]`;switch(n){case 400:this.logWarning(s,`${c} 参数错误: ${s}`);break;case 401:await this.handleUnauthorized(e,o,c);break;case 403:this.#t.showWarningMessage?.(`${s}, 请联系管理员为您开通`),console.warn(`[HttpClient] ${c} 访问被拒绝: ${s}`),await this.#t.onAccessDenied?.();break;default:this.logError(s,`${c} 返回错误: ${s}`)}throw e}async handleUnauthorized(e,t,n){let{tokenExpiredCode:r=[]}=this.#t;if(!this.matchesCode(t,r)){await this.#t.onUnauthenticated?.();return}if(this.#n)throw e;if(await this.tryRefreshToken())return this.retryRequest(e.response.config);this.logInfo(`登录已过期, 请重新登录`),await this.#t.onUnauthenticated?.()}logInfo(e){this.#t.showInfoMessage?this.#t.showInfoMessage(e):console.info(`[HttpClient] ${e}`)}logWarning(e,t){this.#t.showWarningMessage?this.#t.showWarningMessage(e):console.warn(`[HttpClient] ${t??e}`)}logError(e,t){this.#t.showErrorMessage?this.#t.showErrorMessage(e):console.error(`[HttpClient] ${t??e}`)}async injectAccessToken(e){let{getAuthTokens:t}=this.#t;if(!t)return;let n=await t();n?.accessToken&&(e.headers.Authorization=`Bearer ${n.accessToken}`)}replacePathParams(e){let{url:n,params:i={}}=e;!n||!t.PATH_PARAM_REGEX.test(n)||(t.PATH_PARAM_REGEX.lastIndex=0,e.url=n.replaceAll(t.PATH_PARAM_REGEX,(e,t)=>{if(!Object.hasOwn(i,t))return console.warn(`[HttpClient] 接口: ${n} 路径参数 ${t} 未在查询参数中定义, 请检查`),`unknown`;let a=i[t];return(0,r.isNullish)(a)?(console.warn(`[HttpClient] 接口: ${n} 路径参数 ${t} 在查询参数中为空, 请检查`),`unknown`):String(a)}))}async ensureTokenRefreshed(e=!0){if(this.#n)return new Promise(e=>{this.#r.push(e)});let t=await this.tryRefreshToken();return!t&&e&&await this.#t.onUnauthenticated?.(),t}async tryRefreshToken(){let{getAuthTokens:e,refreshToken:t,setAuthTokens:n}=this.#t;if(!e||!t||!n)return!1;this.#n=!0;let r=!1;try{let i=await e();if(!i)return!1;let a=await t(i);return await n(Object.freeze(a)),r=!0,!0}catch(e){return console.error(`[HttpClient] 刷新令牌失败: ${e}`),!1}finally{this.#n=!1;for(let e of this.#r)e(r);this.#r=[]}}async retryRequest(e){let t={...e};return await this.injectAccessToken(t),this.#e(t)}async get(e,t){return(await this.#e.get(e,t)).data}async post(e,t){let{data:n,...r}=t??{};return(await this.#e.post(e,n,r)).data}async put(e,t){let{data:n,...r}=t??{};return(await this.#e.put(e,n,r)).data}async delete(e,t){return(await this.#e.delete(e,t)).data}async upload(e,t){let{data:n,onProgress:i,...a}=t??{};return(await this.#e.postForm(e,n,{...a,onUploadProgress:(0,r.isFunction)(i)?i:void 0})).data}async download(e,n){let{method:i=`get`,data:a,onProgress:o,filename:s,...c}=n??{},l={...c,responseType:`blob`,responseEncoding:`binary`,onDownloadProgress:(0,r.isFunction)(o)?o:void 0},{data:u,headers:d}=i===`post`?await this.#e.post(e,a,l):await this.#e.get(e,l);try{let e=JSON.parse(await u.text());throw Error(e.message)}catch{}let f=d[`content-disposition`];if(!(0,r.isString)(f))return;let p=t.CONTENT_DISPOSITION_FILENAME_REGEX.exec(f);if(!p?.groups?.name)return;let m=decodeURIComponent(p.groups.name),h=URL.createObjectURL(u);try{let e=document.createElement(`a`);e.href=h,e.download=(0,r.isFunction)(s)?s(m):s??m,e.click()}finally{URL.revokeObjectURL(h)}}};exports.HttpClient=a;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_internal/_rolldown/runtime.cjs`);const e=require(`./http/constants.cjs`),t=require(`./query/hooks.cjs`),n=require(`./api/constants.cjs`),r=require(`./api/client.cjs`),i=require(`./api/helpers.cjs`),a=require(`./auth/helpers.cjs`),o=require(`./context/api-client.cjs`),s=require(`./context/app.cjs`),c=require(`./context/context-selector.cjs`),l=require(`./context/disabled.cjs`),u=require(`./motion/motion-provider.cjs`),d=require(`./sse/client.cjs`),f=require(`./sse/helpers.cjs`),p=require(`./state-machine/index.cjs`),m=require(`./store/bound.cjs`),h=require(`./store/unbound.cjs`),g=require(`./store/use-deep.cjs`);let _=require(`clsx`),v=require(`xstate`),y=require(`motion/react`),b=require(`jotai`),x=require(`@dnd-kit/abstract/modifiers`),S=require(`ai`),C=require(`@hello-pangea/dnd`),w=require(`@dnd-kit/react`),T=require(`@dnd-kit/dom/modifiers`),E=require(`immer`),D=require(`@tanstack/react-query`),O=require(`motion/react-m`),k=require(`@dnd-kit/helpers`),A=require(`@xstate/react`),j=require(`use-immer`),M=require(`zustand/shallow`),N=require(`@dnd-kit/react/sortable`);Object.defineProperty(exports,`Actor`,{enumerable:!0,get:function(){return v.Actor}}),Object.defineProperty(exports,`AnimatePresence`,{enumerable:!0,get:function(){return y.AnimatePresence}}),exports.ApiClient=r.ApiClient,exports.ApiClientProvider=o.ApiClientProvider,exports.AppContextProvider=s.AppContextProvider,Object.defineProperty(exports,`AtomStoreProvider`,{enumerable:!0,get:function(){return b.Provider}}),Object.defineProperty(exports,`AxisModifier`,{enumerable:!0,get:function(){return x.AxisModifier}}),Object.defineProperty(exports,`DefaultChatTransport`,{enumerable:!0,get:function(){return S.DefaultChatTransport}}),exports.DisabledProvider=l.DisabledProvider,Object.defineProperty(exports,`DragDropContext`,{enumerable:!0,get:function(){return C.DragDropContext}}),Object.defineProperty(exports,`DragDropProvider`,{enumerable:!0,get:function(){return w.DragDropProvider}}),Object.defineProperty(exports,`DragOverlay`,{enumerable:!0,get:function(){return w.DragOverlay}}),Object.defineProperty(exports,`Draggable`,{enumerable:!0,get:function(){return C.Draggable}}),Object.defineProperty(exports,`Droppable`,{enumerable:!0,get:function(){return C.Droppable}}),exports.HTTP_CLIENT=n.HTTP_CLIENT,Object.defineProperty(exports,`KeyboardSensor`,{enumerable:!0,get:function(){return w.KeyboardSensor}}),Object.defineProperty(exports,`LayoutGroup`,{enumerable:!0,get:function(){return y.LayoutGroup}}),exports.MotionProvider=u.default,Object.defineProperty(exports,`PointerSensor`,{enumerable:!0,get:function(){return w.PointerSensor}}),exports.QUERY_CLIENT=n.QUERY_CLIENT,Object.defineProperty(exports,`Reorder`,{enumerable:!0,get:function(){return y.Reorder}}),Object.defineProperty(exports,`RestrictToElement`,{enumerable:!0,get:function(){return T.RestrictToElement}}),Object.defineProperty(exports,`RestrictToHorizontalAxis`,{enumerable:!0,get:function(){return x.RestrictToHorizontalAxis}}),Object.defineProperty(exports,`RestrictToVerticalAxis`,{enumerable:!0,get:function(){return x.RestrictToVerticalAxis}}),Object.defineProperty(exports,`RestrictToWindow`,{enumerable:!0,get:function(){return T.RestrictToWindow}}),Object.defineProperty(exports,`SnapModifier`,{enumerable:!0,get:function(){return x.SnapModifier}}),exports.SseClient=d.SseClient,Object.defineProperty(exports,`TextStreamChatTransport`,{enumerable:!0,get:function(){return S.TextStreamChatTransport}}),Object.defineProperty(exports,`applyPatches`,{enumerable:!0,get:function(){return E.applyPatches}}),Object.defineProperty(exports,`atom`,{enumerable:!0,get:function(){return b.atom}}),exports.checkPermission=a.checkPermission,Object.defineProperty(exports,`clsx`,{enumerable:!0,get:function(){return _.clsx}}),Object.defineProperty(exports,`createActor`,{enumerable:!0,get:function(){return v.createActor}}),exports.createApiClient=i.createApiClient,Object.defineProperty(exports,`createAtomStore`,{enumerable:!0,get:function(){return b.createStore}}),exports.createComponentStore=h.createComponentStore,exports.createContextWithSelector=c.createContextWithSelector,Object.defineProperty(exports,`createMachine`,{enumerable:!0,get:function(){return v.createMachine}}),exports.createPersistedStore=m.createPersistedStore,exports.createSseClient=f.createSseClient,exports.createStore=m.createStore,Object.defineProperty(exports,`currentState`,{enumerable:!0,get:function(){return E.current}}),Object.defineProperty(exports,`getDefaultAtomStore`,{enumerable:!0,get:function(){return b.getDefaultStore}}),Object.defineProperty(exports,`getToolName`,{enumerable:!0,get:function(){return S.getToolName}}),Object.defineProperty(exports,`getToolOrDynamicToolName`,{enumerable:!0,get:function(){return S.getToolOrDynamicToolName}}),Object.defineProperty(exports,`isDataUIPart`,{enumerable:!0,get:function(){return S.isDataUIPart}}),Object.defineProperty(exports,`isDeepEqualData`,{enumerable:!0,get:function(){return S.isDeepEqualData}}),Object.defineProperty(exports,`isFileUIPart`,{enumerable:!0,get:function(){return S.isFileUIPart}}),Object.defineProperty(exports,`isReasoningUIPart`,{enumerable:!0,get:function(){return S.isReasoningUIPart}}),Object.defineProperty(exports,`isTextUIPart`,{enumerable:!0,get:function(){return S.isTextUIPart}}),Object.defineProperty(exports,`isToolOrDynamicToolUIPart`,{enumerable:!0,get:function(){return S.isToolOrDynamicToolUIPart}}),Object.defineProperty(exports,`isToolUIPart`,{enumerable:!0,get:function(){return S.isToolUIPart}}),Object.defineProperty(exports,`keepPreviousData`,{enumerable:!0,get:function(){return D.keepPreviousData}}),Object.defineProperty(exports,`matchMutation`,{enumerable:!0,get:function(){return D.matchMutation}}),Object.defineProperty(exports,`matchQuery`,{enumerable:!0,get:function(){return D.matchQuery}}),Object.defineProperty(exports,`motion`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`moveArrayItem`,{enumerable:!0,get:function(){return k.arrayMove}}),Object.defineProperty(exports,`moveDragItem`,{enumerable:!0,get:function(){return k.move}}),Object.defineProperty(exports,`originalState`,{enumerable:!0,get:function(){return E.original}}),Object.defineProperty(exports,`parsePartialJson`,{enumerable:!0,get:function(){return S.parsePartialJson}}),Object.defineProperty(exports,`produce`,{enumerable:!0,get:function(){return E.produce}}),Object.defineProperty(exports,`produceWithPatches`,{enumerable:!0,get:function(){return E.produceWithPatches}}),Object.defineProperty(exports,`restrictShapeToBoundingRectangle`,{enumerable:!0,get:function(){return x.restrictShapeToBoundingRectangle}}),exports.skipAuthenticationHeader=e.SKIP_AUTH_HEADER,exports.skipAuthenticationValue=e.SKIP_AUTH_VALUE,Object.defineProperty(exports,`skipQueryToken`,{enumerable:!0,get:function(){return D.skipToken}}),Object.defineProperty(exports,`swapArrayItem`,{enumerable:!0,get:function(){return k.arraySwap}}),Object.defineProperty(exports,`swapDragItem`,{enumerable:!0,get:function(){return k.swap}}),Object.defineProperty(exports,`updateContext`,{enumerable:!0,get:function(){return v.assign}}),exports.useActor=p.useActor,Object.defineProperty(exports,`useActorRef`,{enumerable:!0,get:function(){return A.useActorRef}}),exports.useApiClient=o.useApiClient,exports.useAppContext=s.useAppContext,Object.defineProperty(exports,`useAtom`,{enumerable:!0,get:function(){return b.useAtom}}),Object.defineProperty(exports,`useAtomStore`,{enumerable:!0,get:function(){return b.useStore}}),Object.defineProperty(exports,`useAtomValue`,{enumerable:!0,get:function(){return b.useAtomValue}}),exports.useDeep=g.useDeep,exports.useDisabled=l.useDisabled,Object.defineProperty(exports,`useDragControls`,{enumerable:!0,get:function(){return y.useDragControls}}),Object.defineProperty(exports,`useDragDropMonitor`,{enumerable:!0,get:function(){return w.useDragDropMonitor}}),Object.defineProperty(exports,`useDraggable`,{enumerable:!0,get:function(){return w.useDraggable}}),Object.defineProperty(exports,`useDroppable`,{enumerable:!0,get:function(){return w.useDroppable}}),Object.defineProperty(exports,`useImmer`,{enumerable:!0,get:function(){return j.useImmer}}),Object.defineProperty(exports,`useImmerReducer`,{enumerable:!0,get:function(){return j.useImmerReducer}}),Object.defineProperty(exports,`useInView`,{enumerable:!0,get:function(){return y.useInView}}),exports.useInfiniteQuery=t.useInfiniteQuery,exports.useIsFetching=t.useIsFetching,exports.useIsMutating=t.useIsMutating,exports.useMutation=t.useMutation,exports.useMutationState=t.useMutationState,exports.useQueries=t.useQueries,exports.useQuery=t.useQuery,Object.defineProperty(exports,`useQueryErrorResetBoundary`,{enumerable:!0,get:function(){return D.useQueryErrorResetBoundary}}),Object.defineProperty(exports,`useSetAtom`,{enumerable:!0,get:function(){return b.useSetAtom}}),Object.defineProperty(exports,`useShallow`,{enumerable:!0,get:function(){return M.useShallow}}),Object.defineProperty(exports,`useSortable`,{enumerable:!0,get:function(){return N.useSortable}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_internal/_rolldown/runtime.cjs`);const e=require(`./http/constants.cjs`),t=require(`./query/hooks.cjs`),n=require(`./api/constants.cjs`),r=require(`./api/client.cjs`),i=require(`./api/helpers.cjs`),a=require(`./auth/helpers.cjs`),o=require(`./context/api-client.cjs`),s=require(`./context/app.cjs`),c=require(`./context/context-selector.cjs`),l=require(`./context/disabled.cjs`),u=require(`./motion/motion-provider.cjs`),d=require(`./sse/client.cjs`),f=require(`./sse/helpers.cjs`),p=require(`./state-machine/index.cjs`),m=require(`./store/bound.cjs`),h=require(`./store/unbound.cjs`),g=require(`./store/use-deep.cjs`);let _=require(`clsx`),v=require(`xstate`),y=require(`motion/react`),b=require(`jotai`),x=require(`@dnd-kit/abstract/modifiers`),S=require(`ai`),C=require(`@hello-pangea/dnd`),w=require(`@dnd-kit/react`),T=require(`@dnd-kit/dom/modifiers`),E=require(`immer`),D=require(`@tanstack/react-query`),O=require(`motion/react-m`),k=require(`@dnd-kit/helpers`),A=require(`@xstate/react`),j=require(`use-immer`),M=require(`zustand/shallow`),N=require(`@dnd-kit/react/sortable`);Object.defineProperty(exports,`Actor`,{enumerable:!0,get:function(){return v.Actor}}),Object.defineProperty(exports,`AnimatePresence`,{enumerable:!0,get:function(){return y.AnimatePresence}}),exports.ApiClient=r.ApiClient,exports.ApiClientProvider=o.ApiClientProvider,exports.AppContextProvider=s.AppContextProvider,Object.defineProperty(exports,`AtomStoreProvider`,{enumerable:!0,get:function(){return b.Provider}}),Object.defineProperty(exports,`AxisModifier`,{enumerable:!0,get:function(){return x.AxisModifier}}),Object.defineProperty(exports,`DefaultChatTransport`,{enumerable:!0,get:function(){return S.DefaultChatTransport}}),exports.DisabledProvider=l.DisabledProvider,Object.defineProperty(exports,`DragDropContext`,{enumerable:!0,get:function(){return C.DragDropContext}}),Object.defineProperty(exports,`DragDropProvider`,{enumerable:!0,get:function(){return w.DragDropProvider}}),Object.defineProperty(exports,`DragOverlay`,{enumerable:!0,get:function(){return w.DragOverlay}}),Object.defineProperty(exports,`Draggable`,{enumerable:!0,get:function(){return C.Draggable}}),Object.defineProperty(exports,`Droppable`,{enumerable:!0,get:function(){return C.Droppable}}),exports.HTTP_CLIENT=n.HTTP_CLIENT,Object.defineProperty(exports,`KeyboardSensor`,{enumerable:!0,get:function(){return w.KeyboardSensor}}),Object.defineProperty(exports,`LayoutGroup`,{enumerable:!0,get:function(){return y.LayoutGroup}}),exports.MotionProvider=u.default,Object.defineProperty(exports,`PointerSensor`,{enumerable:!0,get:function(){return w.PointerSensor}}),exports.QUERY_CLIENT=n.QUERY_CLIENT,Object.defineProperty(exports,`Reorder`,{enumerable:!0,get:function(){return y.Reorder}}),Object.defineProperty(exports,`RestrictToElement`,{enumerable:!0,get:function(){return T.RestrictToElement}}),Object.defineProperty(exports,`RestrictToHorizontalAxis`,{enumerable:!0,get:function(){return x.RestrictToHorizontalAxis}}),Object.defineProperty(exports,`RestrictToVerticalAxis`,{enumerable:!0,get:function(){return x.RestrictToVerticalAxis}}),Object.defineProperty(exports,`RestrictToWindow`,{enumerable:!0,get:function(){return T.RestrictToWindow}}),Object.defineProperty(exports,`SnapModifier`,{enumerable:!0,get:function(){return x.SnapModifier}}),exports.SseClient=d.SseClient,Object.defineProperty(exports,`TextStreamChatTransport`,{enumerable:!0,get:function(){return S.TextStreamChatTransport}}),Object.defineProperty(exports,`applyPatches`,{enumerable:!0,get:function(){return E.applyPatches}}),Object.defineProperty(exports,`atom`,{enumerable:!0,get:function(){return b.atom}}),exports.checkPermission=a.checkPermission,Object.defineProperty(exports,`clsx`,{enumerable:!0,get:function(){return _.clsx}}),Object.defineProperty(exports,`createActor`,{enumerable:!0,get:function(){return v.createActor}}),exports.createApiClient=i.createApiClient,Object.defineProperty(exports,`createAtomStore`,{enumerable:!0,get:function(){return b.createStore}}),exports.createComponentStore=h.createComponentStore,exports.createContextWithSelector=c.createContextWithSelector,Object.defineProperty(exports,`createMachine`,{enumerable:!0,get:function(){return v.createMachine}}),exports.createPersistedStore=m.createPersistedStore,exports.createSseClient=f.createSseClient,exports.createStore=m.createStore,Object.defineProperty(exports,`currentState`,{enumerable:!0,get:function(){return E.current}}),Object.defineProperty(exports,`getDefaultAtomStore`,{enumerable:!0,get:function(){return b.getDefaultStore}}),Object.defineProperty(exports,`getToolName`,{enumerable:!0,get:function(){return S.getToolName}}),Object.defineProperty(exports,`getToolOrDynamicToolName`,{enumerable:!0,get:function(){return S.getToolOrDynamicToolName}}),Object.defineProperty(exports,`isDataUIPart`,{enumerable:!0,get:function(){return S.isDataUIPart}}),Object.defineProperty(exports,`isDeepEqualData`,{enumerable:!0,get:function(){return S.isDeepEqualData}}),Object.defineProperty(exports,`isFileUIPart`,{enumerable:!0,get:function(){return S.isFileUIPart}}),Object.defineProperty(exports,`isReasoningUIPart`,{enumerable:!0,get:function(){return S.isReasoningUIPart}}),Object.defineProperty(exports,`isTextUIPart`,{enumerable:!0,get:function(){return S.isTextUIPart}}),Object.defineProperty(exports,`isToolOrDynamicToolUIPart`,{enumerable:!0,get:function(){return S.isToolOrDynamicToolUIPart}}),Object.defineProperty(exports,`isToolUIPart`,{enumerable:!0,get:function(){return S.isToolUIPart}}),Object.defineProperty(exports,`keepPreviousData`,{enumerable:!0,get:function(){return D.keepPreviousData}}),Object.defineProperty(exports,`matchMutation`,{enumerable:!0,get:function(){return D.matchMutation}}),Object.defineProperty(exports,`matchQuery`,{enumerable:!0,get:function(){return D.matchQuery}}),Object.defineProperty(exports,`motion`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`moveArrayItem`,{enumerable:!0,get:function(){return k.arrayMove}}),Object.defineProperty(exports,`moveDragItem`,{enumerable:!0,get:function(){return k.move}}),Object.defineProperty(exports,`originalState`,{enumerable:!0,get:function(){return E.original}}),Object.defineProperty(exports,`parsePartialJson`,{enumerable:!0,get:function(){return S.parsePartialJson}}),Object.defineProperty(exports,`produce`,{enumerable:!0,get:function(){return E.produce}}),Object.defineProperty(exports,`produceWithPatches`,{enumerable:!0,get:function(){return E.produceWithPatches}}),Object.defineProperty(exports,`restrictShapeToBoundingRectangle`,{enumerable:!0,get:function(){return x.restrictShapeToBoundingRectangle}}),exports.skipAuthenticationHeader=e.SKIP_AUTH_HEADER,exports.skipAuthenticationValue=e.SKIP_AUTH_VALUE,Object.defineProperty(exports,`skipQueryToken`,{enumerable:!0,get:function(){return D.skipToken}}),Object.defineProperty(exports,`swapArrayItem`,{enumerable:!0,get:function(){return k.arraySwap}}),Object.defineProperty(exports,`swapDragItem`,{enumerable:!0,get:function(){return k.swap}}),Object.defineProperty(exports,`updateContext`,{enumerable:!0,get:function(){return v.assign}}),exports.useActor=p.useActor,Object.defineProperty(exports,`useActorRef`,{enumerable:!0,get:function(){return A.useActorRef}}),exports.useApiClient=o.useApiClient,exports.useAppContext=s.useAppContext,Object.defineProperty(exports,`useAtom`,{enumerable:!0,get:function(){return b.useAtom}}),Object.defineProperty(exports,`useAtomStore`,{enumerable:!0,get:function(){return b.useStore}}),Object.defineProperty(exports,`useAtomValue`,{enumerable:!0,get:function(){return b.useAtomValue}}),exports.useDeep=g.useDeep,exports.useDisabled=l.useDisabled,Object.defineProperty(exports,`useDragControls`,{enumerable:!0,get:function(){return y.useDragControls}}),Object.defineProperty(exports,`useDragDropMonitor`,{enumerable:!0,get:function(){return w.useDragDropMonitor}}),Object.defineProperty(exports,`useDraggable`,{enumerable:!0,get:function(){return w.useDraggable}}),Object.defineProperty(exports,`useDroppable`,{enumerable:!0,get:function(){return w.useDroppable}}),Object.defineProperty(exports,`useImmer`,{enumerable:!0,get:function(){return j.useImmer}}),Object.defineProperty(exports,`useImmerReducer`,{enumerable:!0,get:function(){return j.useImmerReducer}}),Object.defineProperty(exports,`useInView`,{enumerable:!0,get:function(){return y.useInView}}),exports.useInfiniteQuery=t.useInfiniteQuery,exports.useIsFetching=t.useIsFetching,exports.useIsMutating=t.useIsMutating,exports.useMutation=t.useMutation,exports.useMutationState=t.useMutationState,exports.useQueries=t.useQueries,exports.useQuery=t.useQuery,Object.defineProperty(exports,`useQueryClient`,{enumerable:!0,get:function(){return D.useQueryClient}}),Object.defineProperty(exports,`useQueryErrorResetBoundary`,{enumerable:!0,get:function(){return D.useQueryErrorResetBoundary}}),Object.defineProperty(exports,`useSetAtom`,{enumerable:!0,get:function(){return b.useSetAtom}}),Object.defineProperty(exports,`useShallow`,{enumerable:!0,get:function(){return M.useShallow}}),Object.defineProperty(exports,`useSortable`,{enumerable:!0,get:function(){return N.useSortable}});
@@ -1 +1 @@
1
- const e=require(`../_internal/_rolldown/runtime.cjs`);require(`./motion-provider.cjs`),require(`motion/react`);let t=require(`motion/react-m`);t=e.__toESM(t);
1
+ const e=require(`../_internal/_rolldown/runtime.cjs`);require(`./motion-provider.cjs`),require(`motion/react`);let t=require(`motion/react-m`);t=e.__toESM(t,1);
@@ -1 +1 @@
1
- require(`../_internal/_rolldown/runtime.cjs`);let e=require(`@vef-framework-react/shared`),t=require(`react`),n=require(`@emotion/react/jsx-runtime`),r=require(`motion/react`),i=require(`zustand`),a=require(`zustand/middleware`),o=require(`zustand/middleware/immer`);var s=new Map;function c(c,l){let u=`${c}StoreContext`,d=s.get(u);d||(d=(0,t.createContext)(null),d.displayName=u,s.set(u,d));let f=d;function p({children:s,initialState:c}){let u=(0,t.useRef)(null),d=(0,t.useRef)(!1),p=(0,t.useRef)(c);return p.current=c,(!u.current||!d.current)&&(u.current=(0,i.createStore)()((0,a.subscribeWithSelector)((0,o.immer)(l))),d.current=!0),(0,r.useIsomorphicLayoutEffect)(()=>{!(0,e.isPlainObject)(p.current)||!u.current||u.current.setState(t=>{(0,e.mergeWith)(t,p.current,!0)})},[]),(0,n.jsx)(f,{value:u.current,children:s})}function m(){let e=(0,t.use)(f);if(!e){let e=`${c}Store is not found in the React context. Ensure the component is wrapped in ${c}StoreProvider.`;throw Error(e+``)}return e}function h(e){let t=m();return(0,i.useStore)(t,e)}return{StoreProvider:p,useStoreApi:m,useStore:h}}exports.createComponentStore=c;
1
+ require(`../_internal/_rolldown/runtime.cjs`);let e=require(`@vef-framework-react/shared`),t=require(`react`),n=require(`@emotion/react/jsx-runtime`),r=require(`motion/react`),i=require(`zustand`),a=require(`zustand/middleware`),o=require(`zustand/middleware/immer`);var s=`__VEF_COMPONENT_STORE__`,c=new Map;function l(l,u,d){let f=`${l}StoreContext`,p=c.get(f);p||(p=(0,t.createContext)(null),p.displayName=f,c.set(f,p));let m=p;function h({children:c,initialState:l,storageKey:f}){let p=(0,t.useRef)(null),h=(0,t.useRef)(!1),g=(0,t.useRef)(l);if(g.current=l,!p.current||!h.current){let t=u;if(f&&d){let n=`${s}${(0,e.constantCase)(f)}__`,r=d.storage===`local`?localStorage:sessionStorage;p.current=(0,i.createStore)()((0,a.subscribeWithSelector)((0,a.persist)((0,o.immer)(t),{name:n,version:1,storage:(0,a.createJSONStorage)(()=>r),partialize:d.selector??e.identity})))}else p.current=(0,i.createStore)()((0,a.subscribeWithSelector)((0,o.immer)(t)));h.current=!0}return(0,r.useIsomorphicLayoutEffect)(()=>{!(0,e.isPlainObject)(g.current)||!p.current||p.current.setState(t=>{(0,e.mergeWith)(t,g.current,!0)})},[]),(0,n.jsx)(m,{value:p.current,children:c})}function g(){let e=(0,t.use)(m);if(!e){let e=`${l}Store is not found in the React context. Ensure the component is wrapped in ${l}StoreProvider.`;throw Error(e+``)}return e}function _(e){let t=g();return(0,i.useStore)(t,e)}return{StoreProvider:h,useStoreApi:g,useStore:_}}exports.createComponentStore=l;
@@ -1,3 +1,3 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { DefaultChatTransport as e, TextStreamChatTransport as t, getToolName as n, getToolOrDynamicToolName as r, isDataUIPart as i, isDeepEqualData as a, isFileUIPart as o, isReasoningUIPart as s, isTextUIPart as c, isToolOrDynamicToolUIPart as l, isToolUIPart as u, parsePartialJson as d } from "ai";
3
3
  export { e as DefaultChatTransport, t as TextStreamChatTransport, n as getToolName, r as getToolOrDynamicToolName, i as isDataUIPart, a as isDeepEqualData, o as isFileUIPart, s as isReasoningUIPart, c as isTextUIPart, l as isToolOrDynamicToolUIPart, u as isToolUIPart, d as parsePartialJson };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { createHttpClient as e } from "../http/helpers.js";
3
3
  import { createQueryClient as t } from "../query/helpers.js";
4
4
  import { HTTP_CLIENT as n, PROXIED_METHODS as r, QUERY_CLIENT as i } from "./constants.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { HTTP_CLIENT_KEY as e } from "../http/constants.js";
3
3
  import { QUERY_CLIENT_KEY as t } from "../query/constants.js";
4
4
  //#region src/api/constants.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { ApiClient as e } from "./client.js";
3
3
  //#region src/api/helpers.ts
4
4
  function t(t) {
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./constants.js";
3
3
  import "./client.js";
4
4
  import "./helpers.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { isNullish as e, isString as t } from "@vef-framework-react/shared";
3
3
  //#region src/auth/helpers.ts
4
4
  function n(n, r, i = "any") {
@@ -1,2 +1,2 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./helpers.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { QUERY_CLIENT as e } from "../api/constants.js";
3
3
  import { QueryClientProvider as t } from "@tanstack/react-query";
4
4
  import { createContext as n, use as r } from "react";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { createContext as e, use as t } from "react";
3
3
  //#region src/context/app.ts
4
4
  var n = e({}), r = n.Provider;
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { isFunction as e } from "@vef-framework-react/shared";
3
3
  import { createContext as t, use as n, useEffect as r, useState as i, useSyncExternalStore as a } from "react";
4
4
  import { jsx as o } from "@emotion/react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { createContext as e, use as t } from "react";
3
3
  //#region src/context/disabled.ts
4
4
  var n = e(!1);
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./api-client.js";
3
3
  import "./app.js";
4
4
  import "./context-selector.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { AxisModifier as e, RestrictToHorizontalAxis as t, RestrictToVerticalAxis as n, SnapModifier as r, restrictShapeToBoundingRectangle as i } from "@dnd-kit/abstract/modifiers";
3
3
  import { RestrictToElement as a, RestrictToWindow as o } from "@dnd-kit/dom/modifiers";
4
4
  import { arrayMove as s, arraySwap as c, move as l, swap as u } from "@dnd-kit/helpers";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { CONTENT_DISPOSITION_FILENAME_REGEX as e, DEFAULT_TIMEOUT as t, PATH_PARAM_REGEX as n, SKIP_AUTH_HEADER as r } from "./constants.js";
3
3
  import { BusinessError as i } from "./errors.js";
4
4
  import { encodeQueryString as a, isArray as o, isFunction as s, isNullish as c, isString as l } from "@vef-framework-react/shared";
@@ -160,26 +160,26 @@ var f = class {
160
160
  })).data;
161
161
  }
162
162
  async download(t, n) {
163
- let { onProgress: r, filename: i, ...a } = n ?? {}, { data: o, headers: c } = await this.#e.get(t, {
164
- ...a,
163
+ let { method: r = "get", data: i, onProgress: a, filename: o, ...c } = n ?? {}, u = {
164
+ ...c,
165
165
  responseType: "blob",
166
166
  responseEncoding: "binary",
167
- onDownloadProgress: s(r) ? r : void 0
168
- });
167
+ onDownloadProgress: s(a) ? a : void 0
168
+ }, { data: d, headers: f } = r === "post" ? await this.#e.post(t, i, u) : await this.#e.get(t, u);
169
169
  try {
170
- let e = JSON.parse(await o.text());
170
+ let e = JSON.parse(await d.text());
171
171
  throw Error(e.message);
172
172
  } catch {}
173
- let u = c["content-disposition"];
174
- if (!l(u)) return;
175
- let d = e.exec(u);
176
- if (!d?.groups?.name) return;
177
- let f = decodeURIComponent(d.groups.name), p = URL.createObjectURL(o);
173
+ let p = f["content-disposition"];
174
+ if (!l(p)) return;
175
+ let m = e.exec(p);
176
+ if (!m?.groups?.name) return;
177
+ let h = decodeURIComponent(m.groups.name), g = URL.createObjectURL(d);
178
178
  try {
179
179
  let e = document.createElement("a");
180
- e.href = p, e.download = s(i) ? i(f) : i ?? f, e.click();
180
+ e.href = g, e.download = s(o) ? o(h) : o ?? h, e.click();
181
181
  } finally {
182
- URL.revokeObjectURL(p);
182
+ URL.revokeObjectURL(g);
183
183
  }
184
184
  }
185
185
  };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  //#region src/http/constants.ts
3
3
  var e = "__vef_http_client_key", t = /:(?<key>\w+)/g, n = /filename[^;=\n]*=(?<name>(?<quote>['"]).*?\2|[^;\n]*)/, r = "X-Skip-Authentication", i = "1", a = 3e4;
4
4
  //#endregion
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  //#region src/http/errors.ts
3
3
  var e = class extends Error {
4
4
  code;
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./errors.js";
3
3
  import { HttpClient as e } from "./client.js";
4
4
  //#region src/http/helpers.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./constants.js";
3
3
  import "./errors.js";
4
4
  import "./client.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { applyPatches as e, current as t, enableMapSet as n, enablePatches as r, original as i, produce as a, produceWithPatches as o, setAutoFreeze as s } from "immer";
3
3
  import { useImmer as c, useImmerReducer as l } from "use-immer";
4
4
  n(), r(), s(!1);
package/dist/es/index.js CHANGED
@@ -1,27 +1,27 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { DefaultChatTransport as e, TextStreamChatTransport as t, getToolName as n, getToolOrDynamicToolName as r, isDataUIPart as i, isDeepEqualData as a, isFileUIPart as o, isReasoningUIPart as s, isTextUIPart as c, isToolOrDynamicToolUIPart as l, isToolUIPart as u, parsePartialJson as d } from "./ai/index.js";
3
3
  import { SKIP_AUTH_HEADER as f, SKIP_AUTH_VALUE as p } from "./http/constants.js";
4
4
  import { keepPreviousData as m } from "./query/helpers.js";
5
- import { matchMutation as h, matchQuery as g, skipQueryToken as _, useInfiniteQuery as v, useIsFetching as y, useIsMutating as b, useMutation as x, useMutationState as S, useQueries as C, useQuery as w, useQueryErrorResetBoundary as T } from "./query/hooks.js";
6
- import { HTTP_CLIENT as E, QUERY_CLIENT as D } from "./api/constants.js";
7
- import { ApiClient as O } from "./api/client.js";
8
- import { createApiClient as k } from "./api/helpers.js";
9
- import { checkPermission as A } from "./auth/helpers.js";
10
- import { ApiClientProvider as j, useApiClient as M } from "./context/api-client.js";
11
- import { AppContextProvider as N, useAppContext as P } from "./context/app.js";
12
- import { createContextWithSelector as F } from "./context/context-selector.js";
13
- import { DisabledProvider as I, useDisabled as L } from "./context/disabled.js";
14
- import { AxisModifier as R, DragDropContext as z, DragDropProvider as B, DragOverlay as V, Draggable as H, Droppable as U, KeyboardSensor as W, PointerSensor as G, RestrictToElement as K, RestrictToHorizontalAxis as q, RestrictToVerticalAxis as J, RestrictToWindow as Y, SnapModifier as X, moveArrayItem as Z, moveDragItem as Q, restrictShapeToBoundingRectangle as $, swapArrayItem as ee, swapDragItem as te, useDragDropMonitor as ne, useDraggable as re, useDroppable as ie, useSortable as ae } from "./dnd/index.js";
15
- import { applyPatches as oe, currentState as se, originalState as ce, produce as le, produceWithPatches as ue, useImmer as de, useImmerReducer as fe } from "./immer/index.js";
16
- import pe from "./motion/motion-provider.js";
17
- import { AnimatePresence as me, LayoutGroup as he, Reorder as ge, motion as _e, useDragControls as ve, useInView as ye } from "./motion/index.js";
18
- import { SseClient as be } from "./sse/client.js";
19
- import { createSseClient as xe } from "./sse/helpers.js";
20
- import { AtomStoreProvider as Se, atom as Ce, createAtomStore as we, getDefaultAtomStore as Te, useAtom as Ee, useAtomStore as De, useAtomValue as Oe, useSetAtom as ke } from "./state/index.js";
21
- import { Actor as Ae, createActor as je, createMachine as Me, updateContext as Ne, useActor as Pe, useActorRef as Fe } from "./state-machine/index.js";
22
- import { createPersistedStore as Ie, createStore as Le } from "./store/bound.js";
23
- import { createComponentStore as Re } from "./store/unbound.js";
24
- import { useDeep as ze } from "./store/use-deep.js";
25
- import { useShallow as Be } from "./store/index.js";
26
- import { clsx as Ve } from "clsx";
27
- export { Ae as Actor, me as AnimatePresence, O as ApiClient, j as ApiClientProvider, N as AppContextProvider, Se as AtomStoreProvider, R as AxisModifier, e as DefaultChatTransport, I as DisabledProvider, z as DragDropContext, B as DragDropProvider, V as DragOverlay, H as Draggable, U as Droppable, E as HTTP_CLIENT, W as KeyboardSensor, he as LayoutGroup, pe as MotionProvider, G as PointerSensor, D as QUERY_CLIENT, ge as Reorder, K as RestrictToElement, q as RestrictToHorizontalAxis, J as RestrictToVerticalAxis, Y as RestrictToWindow, X as SnapModifier, be as SseClient, t as TextStreamChatTransport, oe as applyPatches, Ce as atom, A as checkPermission, Ve as clsx, je as createActor, k as createApiClient, we as createAtomStore, Re as createComponentStore, F as createContextWithSelector, Me as createMachine, Ie as createPersistedStore, xe as createSseClient, Le as createStore, se as currentState, Te as getDefaultAtomStore, n as getToolName, r as getToolOrDynamicToolName, i as isDataUIPart, a as isDeepEqualData, o as isFileUIPart, s as isReasoningUIPart, c as isTextUIPart, l as isToolOrDynamicToolUIPart, u as isToolUIPart, m as keepPreviousData, h as matchMutation, g as matchQuery, _e as motion, Z as moveArrayItem, Q as moveDragItem, ce as originalState, d as parsePartialJson, le as produce, ue as produceWithPatches, $ as restrictShapeToBoundingRectangle, f as skipAuthenticationHeader, p as skipAuthenticationValue, _ as skipQueryToken, ee as swapArrayItem, te as swapDragItem, Ne as updateContext, Pe as useActor, Fe as useActorRef, M as useApiClient, P as useAppContext, Ee as useAtom, De as useAtomStore, Oe as useAtomValue, ze as useDeep, L as useDisabled, ve as useDragControls, ne as useDragDropMonitor, re as useDraggable, ie as useDroppable, de as useImmer, fe as useImmerReducer, ye as useInView, v as useInfiniteQuery, y as useIsFetching, b as useIsMutating, x as useMutation, S as useMutationState, C as useQueries, w as useQuery, T as useQueryErrorResetBoundary, ke as useSetAtom, Be as useShallow, ae as useSortable };
5
+ import { matchMutation as h, matchQuery as g, skipQueryToken as _, useInfiniteQuery as v, useIsFetching as y, useIsMutating as b, useMutation as x, useMutationState as S, useQueries as C, useQuery as w, useQueryClient as T, useQueryErrorResetBoundary as E } from "./query/hooks.js";
6
+ import { HTTP_CLIENT as D, QUERY_CLIENT as O } from "./api/constants.js";
7
+ import { ApiClient as k } from "./api/client.js";
8
+ import { createApiClient as A } from "./api/helpers.js";
9
+ import { checkPermission as j } from "./auth/helpers.js";
10
+ import { ApiClientProvider as M, useApiClient as N } from "./context/api-client.js";
11
+ import { AppContextProvider as P, useAppContext as F } from "./context/app.js";
12
+ import { createContextWithSelector as I } from "./context/context-selector.js";
13
+ import { DisabledProvider as L, useDisabled as R } from "./context/disabled.js";
14
+ import { AxisModifier as z, DragDropContext as B, DragDropProvider as V, DragOverlay as H, Draggable as U, Droppable as W, KeyboardSensor as G, PointerSensor as K, RestrictToElement as q, RestrictToHorizontalAxis as J, RestrictToVerticalAxis as Y, RestrictToWindow as X, SnapModifier as Z, moveArrayItem as Q, moveDragItem as $, restrictShapeToBoundingRectangle as ee, swapArrayItem as te, swapDragItem as ne, useDragDropMonitor as re, useDraggable as ie, useDroppable as ae, useSortable as oe } from "./dnd/index.js";
15
+ import { applyPatches as se, currentState as ce, originalState as le, produce as ue, produceWithPatches as de, useImmer as fe, useImmerReducer as pe } from "./immer/index.js";
16
+ import me from "./motion/motion-provider.js";
17
+ import { AnimatePresence as he, LayoutGroup as ge, Reorder as _e, motion as ve, useDragControls as ye, useInView as be } from "./motion/index.js";
18
+ import { SseClient as xe } from "./sse/client.js";
19
+ import { createSseClient as Se } from "./sse/helpers.js";
20
+ import { AtomStoreProvider as Ce, atom as we, createAtomStore as Te, getDefaultAtomStore as Ee, useAtom as De, useAtomStore as Oe, useAtomValue as ke, useSetAtom as Ae } from "./state/index.js";
21
+ import { Actor as je, createActor as Me, createMachine as Ne, updateContext as Pe, useActor as Fe, useActorRef as Ie } from "./state-machine/index.js";
22
+ import { createPersistedStore as Le, createStore as Re } from "./store/bound.js";
23
+ import { createComponentStore as ze } from "./store/unbound.js";
24
+ import { useDeep as Be } from "./store/use-deep.js";
25
+ import { useShallow as Ve } from "./store/index.js";
26
+ import { clsx as He } from "clsx";
27
+ export { je as Actor, he as AnimatePresence, k as ApiClient, M as ApiClientProvider, P as AppContextProvider, Ce as AtomStoreProvider, z as AxisModifier, e as DefaultChatTransport, L as DisabledProvider, B as DragDropContext, V as DragDropProvider, H as DragOverlay, U as Draggable, W as Droppable, D as HTTP_CLIENT, G as KeyboardSensor, ge as LayoutGroup, me as MotionProvider, K as PointerSensor, O as QUERY_CLIENT, _e as Reorder, q as RestrictToElement, J as RestrictToHorizontalAxis, Y as RestrictToVerticalAxis, X as RestrictToWindow, Z as SnapModifier, xe as SseClient, t as TextStreamChatTransport, se as applyPatches, we as atom, j as checkPermission, He as clsx, Me as createActor, A as createApiClient, Te as createAtomStore, ze as createComponentStore, I as createContextWithSelector, Ne as createMachine, Le as createPersistedStore, Se as createSseClient, Re as createStore, ce as currentState, Ee as getDefaultAtomStore, n as getToolName, r as getToolOrDynamicToolName, i as isDataUIPart, a as isDeepEqualData, o as isFileUIPart, s as isReasoningUIPart, c as isTextUIPart, l as isToolOrDynamicToolUIPart, u as isToolUIPart, m as keepPreviousData, h as matchMutation, g as matchQuery, ve as motion, Q as moveArrayItem, $ as moveDragItem, le as originalState, d as parsePartialJson, ue as produce, de as produceWithPatches, ee as restrictShapeToBoundingRectangle, f as skipAuthenticationHeader, p as skipAuthenticationValue, _ as skipQueryToken, te as swapArrayItem, ne as swapDragItem, Pe as updateContext, Fe as useActor, Ie as useActorRef, N as useApiClient, F as useAppContext, De as useAtom, Oe as useAtomStore, ke as useAtomValue, Be as useDeep, R as useDisabled, ye as useDragControls, re as useDragDropMonitor, ie as useDraggable, ae as useDroppable, fe as useImmer, pe as useImmerReducer, be as useInView, v as useInfiniteQuery, y as useIsFetching, b as useIsMutating, x as useMutation, S as useMutationState, C as useQueries, w as useQuery, T as useQueryClient, E as useQueryErrorResetBoundary, Ae as useSetAtom, Ve as useShallow, oe as useSortable };
@@ -1,3 +1,3 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { domMax as e } from "motion/react";
3
3
  export { e as default };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./motion-provider.js";
3
3
  import { AnimatePresence as e, LayoutGroup as t, Reorder as n, useDragControls as r, useInView as i } from "motion/react";
4
4
  import * as a from "motion/react-m";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { generateId as e } from "@vef-framework-react/shared";
3
3
  import { useState as t } from "react";
4
4
  import { jsx as n } from "@emotion/react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  //#region src/query/constants.ts
3
3
  var e = "__vef_query_client_key";
4
4
  //#endregion
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { hashKey as e, isPlainObject as t } from "@vef-framework-react/shared";
3
3
  import { MutationCache as n, QueryClient as r, keepPreviousData as i, matchQuery as a } from "@tanstack/react-query";
4
4
  //#region src/query/helpers.ts
@@ -1,26 +1,26 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
2
- import { matchMutation as e, matchQuery as t, skipToken as n, useInfiniteQuery as r, useIsFetching as i, useIsMutating as a, useMutation as o, useMutationState as s, useQueries as c, useQuery as l, useQueryErrorResetBoundary as u } from "@tanstack/react-query";
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
+ import { matchMutation as e, matchQuery as t, skipToken as n, useInfiniteQuery as r, useIsFetching as i, useIsMutating as a, useMutation as o, useMutationState as s, useQueries as c, useQuery as l, useQueryClient as u, useQueryErrorResetBoundary as d } from "@tanstack/react-query";
3
3
  //#region src/query/hooks.ts
4
- function d(e) {
4
+ function f(e) {
5
5
  return l(e);
6
6
  }
7
- function f(e) {
7
+ function p(e) {
8
8
  return r(e);
9
9
  }
10
- function p(e) {
10
+ function m(e) {
11
11
  return c(e);
12
12
  }
13
- function m(e) {
13
+ function h(e) {
14
14
  return o(e);
15
15
  }
16
- function h(e) {
16
+ function g(e) {
17
17
  return s(e);
18
18
  }
19
- function g(e) {
19
+ function _(e) {
20
20
  return i(e);
21
21
  }
22
- function _(e) {
22
+ function v(e) {
23
23
  return a(e);
24
24
  }
25
25
  //#endregion
26
- export { e as matchMutation, t as matchQuery, n as skipQueryToken, f as useInfiniteQuery, g as useIsFetching, _ as useIsMutating, m as useMutation, h as useMutationState, p as useQueries, d as useQuery, u as useQueryErrorResetBoundary };
26
+ export { e as matchMutation, t as matchQuery, n as skipQueryToken, p as useInfiniteQuery, _ as useIsFetching, v as useIsMutating, h as useMutation, g as useMutationState, m as useQueries, f as useQuery, u as useQueryClient, d as useQueryErrorResetBoundary };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./constants.js";
3
3
  import "./helpers.js";
4
4
  import "./hooks.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { isString as e } from "@vef-framework-react/shared";
3
3
  import { fetchEventSource as t } from "@microsoft/fetch-event-source";
4
4
  //#region src/sse/client.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { SseClient as e } from "./client.js";
3
3
  //#region src/sse/helpers.ts
4
4
  function t(t) {
@@ -1,3 +1,3 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./client.js";
3
3
  import "./helpers.js";
@@ -1,3 +1,3 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { Provider as e, atom as t, createStore as n, getDefaultStore as r, useAtom as i, useAtomValue as a, useSetAtom as o, useStore as s } from "jotai";
3
3
  export { e as AtomStoreProvider, t as atom, n as createAtomStore, r as getDefaultAtomStore, i as useAtom, s as useAtomStore, a as useAtomValue, o as useSetAtom };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { useActorRef as e, useActorRef as t, useSelector as n } from "@xstate/react";
3
3
  import { Actor as r, assign as i, createActor as a, createMachine as o } from "xstate";
4
4
  //#region src/state-machine/index.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { constantCase as e, identity as t } from "@vef-framework-react/shared";
3
3
  import { create as n } from "zustand";
4
4
  import { createJSONStorage as r, persist as i, subscribeWithSelector as a } from "zustand/middleware";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import "./bound.js";
3
3
  import "./unbound.js";
4
4
  import "./use-deep.js";
@@ -1,44 +1,57 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
2
- import { isPlainObject as e, mergeWith as t } from "@vef-framework-react/shared";
3
- import { createContext as n, use as r, useRef as i } from "react";
4
- import { jsx as a } from "@emotion/react/jsx-runtime";
5
- import { useIsomorphicLayoutEffect as o } from "motion/react";
6
- import { createStore as s, useStore as c } from "zustand";
7
- import { subscribeWithSelector as l } from "zustand/middleware";
8
- import { immer as u } from "zustand/middleware/immer";
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
+ import { constantCase as e, identity as t, isPlainObject as n, mergeWith as r } from "@vef-framework-react/shared";
3
+ import { createContext as i, use as a, useRef as o } from "react";
4
+ import { jsx as s } from "@emotion/react/jsx-runtime";
5
+ import { useIsomorphicLayoutEffect as c } from "motion/react";
6
+ import { createStore as l, useStore as u } from "zustand";
7
+ import { createJSONStorage as d, persist as f, subscribeWithSelector as p } from "zustand/middleware";
8
+ import { immer as m } from "zustand/middleware/immer";
9
9
  //#region src/store/unbound.tsx
10
- var d = /* @__PURE__ */ new Map();
11
- function f(f, p) {
12
- let m = `${f}StoreContext`, h = d.get(m);
13
- h || (h = n(null), h.displayName = m, d.set(m, h));
14
- let g = h;
15
- function _({ children: n, initialState: r }) {
16
- let c = i(null), d = i(!1), f = i(r);
17
- return f.current = r, (!c.current || !d.current) && (c.current = s()(l(u(p))), d.current = !0), o(() => {
18
- !e(f.current) || !c.current || c.current.setState((e) => {
19
- t(e, f.current, !0);
10
+ var h = "__VEF_COMPONENT_STORE__", g = /* @__PURE__ */ new Map();
11
+ function _(_, v, y) {
12
+ let b = `${_}StoreContext`, x = g.get(b);
13
+ x || (x = i(null), x.displayName = b, g.set(b, x));
14
+ let S = x;
15
+ function C({ children: i, initialState: a, storageKey: u }) {
16
+ let g = o(null), _ = o(!1), b = o(a);
17
+ if (b.current = a, !g.current || !_.current) {
18
+ let n = v;
19
+ if (u && y) {
20
+ let r = `${h}${e(u)}__`, i = y.storage === "local" ? localStorage : sessionStorage;
21
+ g.current = l()(p(f(m(n), {
22
+ name: r,
23
+ version: 1,
24
+ storage: d(() => i),
25
+ partialize: y.selector ?? t
26
+ })));
27
+ } else g.current = l()(p(m(n)));
28
+ _.current = !0;
29
+ }
30
+ return c(() => {
31
+ !n(b.current) || !g.current || g.current.setState((e) => {
32
+ r(e, b.current, !0);
20
33
  });
21
- }, []), /* @__PURE__ */ a(g, {
22
- value: c.current,
23
- children: n
34
+ }, []), /* @__PURE__ */ s(S, {
35
+ value: g.current,
36
+ children: i
24
37
  });
25
38
  }
26
- function v() {
27
- let e = r(g);
39
+ function w() {
40
+ let e = a(S);
28
41
  if (!e) {
29
- let e = `${f}Store is not found in the React context. Ensure the component is wrapped in ${f}StoreProvider.`;
42
+ let e = `${_}Store is not found in the React context. Ensure the component is wrapped in ${_}StoreProvider.`;
30
43
  throw Error(e + "");
31
44
  }
32
45
  return e;
33
46
  }
34
- function y(e) {
35
- return c(v(), e);
47
+ function T(e) {
48
+ return u(w(), e);
36
49
  }
37
50
  return {
38
- StoreProvider: _,
39
- useStoreApi: v,
40
- useStore: y
51
+ StoreProvider: C,
52
+ useStoreApi: w,
53
+ useStore: T
41
54
  };
42
55
  }
43
56
  //#endregion
44
- export { f as createComponentStore };
57
+ export { _ as createComponentStore };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/core v2.1.6 made by Venus | 2026-04-01T03:01:30.887Z */
1
+ /*! @vef-framework-react/core v2.1.8 made by Venus | 2026-04-25T10:51:12.309Z */
2
2
  import { isDeepEqual as e } from "@vef-framework-react/shared";
3
3
  import { useRef as t } from "react";
4
4
  //#region src/store/use-deep.ts
@@ -16,9 +16,10 @@ export interface AppContext {
16
16
  */
17
17
  hasPermission?: (token: string) => boolean;
18
18
  /**
19
- * The query function for the data dictionary.
19
+ * The query function for fetching data dictionary entries.
20
+ * Accepts an array of dictionary keys and returns a record mapping each key to its options.
20
21
  */
21
- dataDictQueryFn?: QueryFunction<DataOption[], string>;
22
+ dictionaryQueryFn?: QueryFunction<Record<string, DataOption[]>, string[]>;
22
23
  /**
23
24
  * The base URL for file access.
24
25
  */
@@ -1,7 +1,7 @@
1
1
  export { AxisModifier, restrictShapeToBoundingRectangle, RestrictToHorizontalAxis, RestrictToVerticalAxis, SnapModifier } from '@dnd-kit/abstract/modifiers';
2
2
  export { RestrictToElement, RestrictToWindow } from '@dnd-kit/dom/modifiers';
3
3
  export { arrayMove as moveArrayItem, move as moveDragItem, arraySwap as swapArrayItem, swap as swapDragItem } from '@dnd-kit/helpers';
4
- export type { DragDropEventHandlers, DragDropEvents } from '@dnd-kit/react';
4
+ export type { BeforeDragStartEvent, CollisionEvent, DragDropEventHandlers, DragEndEvent, DragMoveEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/react';
5
5
  export { DragDropProvider, DragOverlay, KeyboardSensor, PointerSensor, useDragDropMonitor, useDraggable, useDroppable } from '@dnd-kit/react';
6
6
  export { useSortable } from '@dnd-kit/react/sortable';
7
7
  export type { DragDropContextProps, DraggableChildrenFn, DraggableId, DraggableLocation, DraggableProps, DraggableProvided, DraggableProvidedDraggableProps, DraggableProvidedDragHandleProps, DraggableRubric, DraggableStateSnapshot, DroppableId, DroppableProps, DroppableProvided, DroppableProvidedProps, DroppableStateSnapshot, DropResult, OnBeforeCaptureResponder, OnBeforeDragStartResponder, OnDragEndResponder, OnDragStartResponder, OnDragUpdateResponder } from '@hello-pangea/dnd';
@@ -104,7 +104,9 @@ export declare class HttpClient {
104
104
  /**
105
105
  * Download file as blob and trigger browser download.
106
106
  */
107
- download<P = unknown>(url: string, options?: RequestOptions & {
107
+ download<D = unknown, P = unknown>(url: string, options?: RequestOptions & {
108
+ method?: "get" | "post";
109
+ data?: D;
108
110
  params?: P;
109
111
  onProgress?: (progress: AxiosProgressEvent) => void;
110
112
  filename?: string | ((filename: string) => string);
@@ -3,14 +3,14 @@ export { ApiClient, createApiClient, HTTP_CLIENT, QUERY_CLIENT, type ApiClientOp
3
3
  export { checkPermission, type PermissionCheckMode } from './auth';
4
4
  export { type DataOption, type DataOptionWithPinyin, type PaginationParams, type PaginationResult } from './common';
5
5
  export { ApiClientProvider, AppContextProvider, createContextWithSelector, DisabledProvider, useApiClient, useAppContext, useDisabled, type AppContext, type SelectorContextProviderProps, type SelectorContextResult, type UseSelectorContext } from './context';
6
- export { AxisModifier, DragDropContext, DragDropProvider, Draggable, DragOverlay, Droppable, KeyboardSensor, moveArrayItem, moveDragItem, PointerSensor, restrictShapeToBoundingRectangle, RestrictToElement, RestrictToHorizontalAxis, RestrictToVerticalAxis, RestrictToWindow, SnapModifier, swapArrayItem, swapDragItem, useDragDropMonitor, useDraggable, useDroppable, useSortable, type DragDropContextProps, type DragDropEventHandlers, type DragDropEvents, type DraggableChildrenFn, type DraggableId, type DraggableLocation, type DraggableProps, type DraggableProvided, type DraggableProvidedDraggableProps, type DraggableProvidedDragHandleProps, type DraggableRubric, type DraggableStateSnapshot, type DroppableId, type DroppableProps, type DroppableProvided, type DroppableProvidedProps, type DroppableStateSnapshot, type DropResult, type OnBeforeCaptureResponder, type OnBeforeDragStartResponder, type OnDragEndResponder, type OnDragStartResponder, type OnDragUpdateResponder } from './dnd';
6
+ export { AxisModifier, DragDropContext, DragDropProvider, Draggable, DragOverlay, Droppable, KeyboardSensor, moveArrayItem, moveDragItem, PointerSensor, restrictShapeToBoundingRectangle, RestrictToElement, RestrictToHorizontalAxis, RestrictToVerticalAxis, RestrictToWindow, SnapModifier, swapArrayItem, swapDragItem, useDragDropMonitor, useDraggable, useDroppable, useSortable, type BeforeDragStartEvent, type CollisionEvent, type DragDropContextProps, type DragDropEventHandlers, type DragEndEvent, type DraggableChildrenFn, type DraggableId, type DraggableLocation, type DraggableProps, type DraggableProvided, type DraggableProvidedDraggableProps, type DraggableProvidedDragHandleProps, type DraggableRubric, type DraggableStateSnapshot, type DragMoveEvent, type DragOverEvent, type DragStartEvent, type DroppableId, type DroppableProps, type DroppableProvided, type DroppableProvidedProps, type DroppableStateSnapshot, type DropResult, type OnBeforeCaptureResponder, type OnBeforeDragStartResponder, type OnDragEndResponder, type OnDragStartResponder, type OnDragUpdateResponder } from './dnd';
7
7
  export type { ApiResult, AuthTokens, BusinessError, HttpClient, HttpClientOptions, isBusinessError, ProgressEvent, RequestOptions } from './http';
8
8
  export { skipAuthenticationHeader, skipAuthenticationValue } from './http';
9
9
  export { applyPatches, currentState, originalState, produce, produceWithPatches, useImmer, useImmerReducer } from './immer';
10
10
  export { AnimatePresence, LayoutGroup, motion, MotionProvider, Reorder, useDragControls, useInView, type MotionProps, type ResolvedValues, type TargetAndTransition, type Transition, type Variant, type VariantLabels, type Variants } from './motion';
11
- export { keepPreviousData, matchMutation, matchQuery, skipQueryToken, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useMutationState, useQueries, useQuery, useQueryErrorResetBoundary, type DefinedInitialDataOptions, type DefinedUseQueryResult, type InitialDataFunction, type MutationFunctionContext, type MutationMeta, type MutationScope, type PlaceholderDataFunction, type QueryClientOptions, type QueryKeyHashFunction, type QueryMeta, type RefetchOptions, type RetryDelayFunction, type RetryDelayValue, type RetryValue, type ShouldRetryFunction, type SkipQueryToken, type StaleTime, type UndefinedInitialDataOptions, type UseInfiniteQueryOptions, type UseMutationResult, type UseQueryOptions, type UseQueryResult } from './query';
11
+ export { keepPreviousData, matchMutation, matchQuery, skipQueryToken, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useMutationState, useQueries, useQuery, useQueryClient, useQueryErrorResetBoundary, type DefinedInitialDataOptions, type DefinedUseQueryResult, type InitialDataFunction, type MutationFunctionContext, type MutationMeta, type MutationScope, type PlaceholderDataFunction, type QueryClientOptions, type QueryKeyHashFunction, type QueryMeta, type RefetchOptions, type RetryDelayFunction, type RetryDelayValue, type RetryValue, type ShouldRetryFunction, type SkipQueryToken, type StaleTime, type UndefinedInitialDataOptions, type UseInfiniteQueryOptions, type UseMutationResult, type UseQueryOptions, type UseQueryResult } from './query';
12
12
  export { createSseClient, SseClient, type SseClientOptions, type SseEventHandlers, type SseMessageEvent, type SseRequestConfig } from './sse';
13
13
  export { atom, AtomStoreProvider, createAtomStore, getDefaultAtomStore, useAtom, useAtomStore, useAtomValue, useSetAtom, type Atom, type AtomGetter, type AtomSetter, type ExtractAtomArgs, type ExtractAtomResult, type ExtractAtomValue, type PrimitiveAtom, type SetStateAction, type WritableAtom } from './state';
14
14
  export { Actor, createActor, createMachine, updateContext, useActor, useActorRef, type ActorLogic, type ActorOptions, type AnyActorLogic, type AnyMachineSnapshot, type AnyStateMachine, type MachineConfig, type MachineContext, type MachineSnapshot, type RequiredActorOptionsKeys, type SnapshotFrom, type StateMachine } from './state-machine';
15
- export { createComponentStore, createPersistedStore, createStore, useDeep, useShallow, type PersistenceOptions, type ReturnedComponentStoreResult, type SliceStateCreator, type StoreProviderProps, type UnboundStore, type UseBoundStore, type UseBoundStoreWithPersist, type UseStore } from './store';
15
+ export { createComponentStore, createPersistedStore, createStore, useDeep, useShallow, type PersistenceOptions, type ComponentStoreResult as ReturnedComponentStoreResult, type SliceStateCreator, type StoreProviderProps, type UnboundStore, type UseBoundStore, type UseBoundStoreWithPersist, type UseStore } from './store';
16
16
  export { clsx, type ClassArray, type ClassDictionary, type ClassValue } from 'clsx';
@@ -24,4 +24,4 @@ export declare function useIsFetching(filters?: QueryFilters): number;
24
24
  * Hook for getting the count of currently executing mutations
25
25
  */
26
26
  export declare function useIsMutating(filters?: MutationFilters): number;
27
- export { matchMutation, matchQuery, skipToken as skipQueryToken, useQueryErrorResetBoundary } from '@tanstack/react-query';
27
+ export { matchMutation, matchQuery, skipToken as skipQueryToken, useQueryClient, useQueryErrorResetBoundary } from '@tanstack/react-query';
@@ -1,4 +1,4 @@
1
1
  export { QUERY_CLIENT_KEY } from './constants';
2
2
  export { createQueryClient, keepPreviousData } from './helpers';
3
- export { matchMutation, matchQuery, skipQueryToken, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useMutationState, useQueries, useQuery, useQueryErrorResetBoundary } from './hooks';
3
+ export { matchMutation, matchQuery, skipQueryToken, useInfiniteQuery, useIsFetching, useIsMutating, useMutation, useMutationState, useQueries, useQuery, useQueryClient, useQueryErrorResetBoundary } from './hooks';
4
4
  export type * from './types';
@@ -1,3 +1,5 @@
1
+ import "zustand/middleware";
2
+ import "zustand/middleware/immer";
1
3
  import { StateCreator } from 'zustand';
2
4
  import { PersistenceOptions, UseBoundStore, UseBoundStoreWithPersist } from './types';
3
5
  /**
@@ -1,5 +1,5 @@
1
1
  export { createPersistedStore, createStore } from './bound';
2
2
  export type * from './types';
3
- export { createComponentStore, type ComponentStoreResult as ReturnedComponentStoreResult, type UseStore } from './unbound';
3
+ export { createComponentStore, type ComponentStoreResult, type UseStore } from './unbound';
4
4
  export { useDeep } from './use-deep';
5
5
  export { useShallow } from 'zustand/shallow';
@@ -1,3 +1,5 @@
1
+ import "zustand/middleware";
2
+ import "zustand/middleware/immer";
1
3
  import { If, IsNever } from '@vef-framework-react/shared';
2
4
  import { Draft } from 'immer';
3
5
  import { PropsWithChildren } from 'react';
@@ -49,7 +51,14 @@ export interface PersistenceOptions<TState, TSelectedState = TState> {
49
51
  /**
50
52
  * The props of the store provider
51
53
  */
52
- export type StoreProviderProps<TInitialState> = PropsWithChildren<If<IsNever<TInitialState>, {
54
+ export type StoreProviderProps<TInitialState> = PropsWithChildren<{
55
+ /**
56
+ * Storage key for state persistence.
57
+ * Only takes effect when the store is created with persistence options.
58
+ * Different instances should use different keys.
59
+ */
60
+ storageKey?: string;
61
+ } & If<IsNever<TInitialState>, {
53
62
  /**
54
63
  * The initial state of the store
55
64
  */
@@ -1,5 +1,6 @@
1
+ import { Except } from '@vef-framework-react/shared';
1
2
  import { ComponentType } from 'react';
2
- import { ComponentStoreInitializer, StoreProviderProps, UnboundStore } from './types';
3
+ import { ComponentStoreInitializer, PersistenceOptions, StoreProviderProps, UnboundStore } from './types';
3
4
  /**
4
5
  * Hook signature for accessing store state with optional selector
5
6
  */
@@ -20,6 +21,8 @@ export interface ComponentStoreResult<TState, TInitialState extends Partial<TSta
20
21
  *
21
22
  * @param name - The name of the store (used for context display name and error messages)
22
23
  * @param initializer - The Zustand state initializer function
24
+ * @param persistOptions - Optional persistence configuration. When provided, the StoreProvider
25
+ * accepts a `storageKey` prop to enable state persistence via Zustand's persist middleware.
23
26
  * @returns Object containing StoreProvider, useStoreApi, and useStore
24
27
  */
25
- export declare function createComponentStore<TState, TInitialState extends Partial<TState> = never>(name: string, initializer: ComponentStoreInitializer<TState>): ComponentStoreResult<TState, TInitialState>;
28
+ export declare function createComponentStore<TState, TInitialState extends Partial<TState> = never>(name: string, initializer: ComponentStoreInitializer<TState>, persistOptions?: Except<PersistenceOptions<TState, Partial<TState>>, "name">): ComponentStoreResult<TState, TInitialState>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vef-framework-react/core",
3
3
  "type": "module",
4
- "version": "2.1.6",
4
+ "version": "2.1.8",
5
5
  "private": false,
6
6
  "description": "Core features for VEF framework",
7
7
  "author": {
@@ -48,28 +48,28 @@
48
48
  "react": ">=19"
49
49
  },
50
50
  "dependencies": {
51
- "@dnd-kit/abstract": "^0.3.2",
52
- "@dnd-kit/dom": "^0.3.2",
53
- "@dnd-kit/helpers": "^0.3.2",
54
- "@dnd-kit/react": "^0.3.2",
51
+ "@dnd-kit/abstract": "^0.4.0",
52
+ "@dnd-kit/dom": "^0.4.0",
53
+ "@dnd-kit/helpers": "^0.4.0",
54
+ "@dnd-kit/react": "^0.4.0",
55
55
  "@emotion/react": "^11.14.0",
56
56
  "@hello-pangea/dnd": "^18.0.1",
57
57
  "@microsoft/fetch-event-source": "^2.0.1",
58
- "@tanstack/react-query": "^5.96.0",
58
+ "@tanstack/react-query": "^5.100.1",
59
59
  "@xstate/react": "^6.1.0",
60
- "ai": "6.0.142",
61
- "axios": "^1.14.0",
60
+ "ai": "6.0.168",
61
+ "axios": "^1.15.2",
62
62
  "clsx": "^2.1.1",
63
63
  "immer": "^11.1.4",
64
- "jotai": "^2.19.0",
64
+ "jotai": "^2.19.1",
65
65
  "motion": "^12.38.0",
66
66
  "use-immer": "^0.11.0",
67
67
  "xstate": "^5.30.0",
68
68
  "zustand": "^5.0.12",
69
- "@vef-framework-react/shared": "2.1.6"
69
+ "@vef-framework-react/shared": "2.1.8"
70
70
  },
71
71
  "devDependencies": {
72
- "react": "^19.2.4"
72
+ "react": "^19.2.5"
73
73
  },
74
74
  "scripts": {
75
75
  "clean": "rimraf dist",