@picked/react 0.0.1-dev.1774244905386 → 0.0.1-dev.1774924249530

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,28 @@
1
- import { ValidationError } from '@picked/client';
2
- interface GetFormOptions {
3
- id: string;
1
+ import { FormInstance as CoreFormInstance, ErrorCallback, SubmitCallback, SuccessCallback } from '@picked/client/form';
2
+ interface UseFormOptions {
3
+ formId: string;
4
4
  title: string;
5
- onSuccess?: () => void | Promise<void>;
6
- onError?: (errors: ValidationError[]) => void | Promise<void>;
5
+ fieldIds: string[];
7
6
  }
8
- export declare function useForm(options: GetFormOptions): {
9
- form: {
10
- onsubmit: (event: SubmitEvent & {
11
- currentTarget: EventTarget & HTMLFormElement;
12
- }) => Promise<void>;
7
+ /**
8
+ * React FormInstance — identical to core but callback registration returns void
9
+ * (cleanup is handled automatically via useEffect, not by the consumer).
10
+ */
11
+ interface FormInstance<TFieldIds extends string = string> extends Omit<CoreFormInstance<TFieldIds>, 'form'> {
12
+ form: Omit<CoreFormInstance<TFieldIds>['form'], 'onBeforeSubmit' | 'onSuccess' | 'onError'> & {
13
+ onBeforeSubmit: (callback: SubmitCallback<TFieldIds>) => void;
14
+ onSuccess: (callback: SuccessCallback<TFieldIds>) => void;
15
+ onError: (callback: ErrorCallback) => void;
13
16
  };
14
- };
17
+ }
18
+ /**
19
+ * React hook wrapping the framework-agnostic createForm from @picked/client/form.
20
+ *
21
+ * - Injects client and experienceInstance from React context
22
+ * - Collects unsubscribe functions from callback registration and cleans them
23
+ * up on unmount via a single useEffect
24
+ * - Consumer DX: `form.onSuccess(cb)` — no hooks or lifecycle awareness needed
25
+ */
26
+ export declare function useForm({ formId, title, fieldIds }: UseFormOptions): FormInstance;
15
27
  export {};
16
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAQxE,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc;;0BAKd,WAAW,GAAG;YAAE,aAAa,EAAE,WAAW,GAAG,eAAe,CAAA;SAAE;;EA+G9F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,YAAY,IAAI,gBAAgB,EACrC,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAG5B,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;GAGG;AACH,UAAU,YAAY,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,IAAI,CACpE,gBAAgB,CAAC,SAAS,CAAC,EAC3B,MAAM,CACP;IACC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC,GAAG;QAC5F,cAAc,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;QAC7D,SAAS,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;QACzD,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;KAC3C,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,GAAG,YAAY,CAwCjF"}
@@ -1 +1 @@
1
- import{useExperience as e,usePicked as t}from"../hooks/client.js";import"../hooks/index.js";function n(n){let r=t(),i=e(),{id:a,title:o}=n;async function s(e){e.preventDefault(),r.eventBus({type:`form_submit`,form:{id:a,title:o},experience:i});let t=new FormData(e.currentTarget),s={data:{},push(e){let t=e.questionId,n=this.data[t];n&&Array.isArray(n)&&Array.isArray(e.value)?Array.isArray(n)&&Array.isArray(e.value)&&(typeof n[0]==`string`?this.data[t]=[...n,...e.value].map(String):typeof n[0]==`number`?this.data[t]=[...n,...e.value].map(Number):typeof n[0]==`boolean`?this.data[t]=[...n,...e.value].map(e=>!!e):this.data[t]=e.value):this.data[t]=e.value}};for(let[e,n]of t.entries()){let t=r.fields.getById(e).getState();if(!t)continue;let i=t.id;switch(t.type){case`text`:s.push({questionId:i,value:t.multiple?[String(n)]:String(n)});break;case`number`:s.push({questionId:i,value:t.multiple?[Number(n)]:Number(n)});break;case`boolean`:s.push({questionId:i,value:t.multiple?[n===`true`]:n===`true`});break}}let{errors:c}=await r.responses.commit(s.data);if(c.length>0){r.eventBus({type:`form_submit_error`,form:{id:a,title:o},exception:{reason:c},experience:i}),c.forEach(e=>{r.eventBus({type:`field_validation_error`,exception:{reason:[e]},experience:i})}),await n.onError?.(c);return}r.eventBus({type:`form_submit_success`,form:{id:a,title:o},experience:i}),await n.onSuccess?.()}return{form:{onsubmit:s}}}export{n as useForm};
1
+ import{useExperience as e,usePicked as t}from"../hooks/client.js";import"../hooks/index.js";import{useEffect as n,useMemo as r,useRef as i}from"react";import{createStore as a}from"effector";import{createForm as o}from"@picked/client/form";function s({formId:s,title:c,fieldIds:l}){let u=t(),d=e(),f=r(()=>a(c),[c]),p=r(()=>a(l),[l]),m=r(()=>o({client:u,experienceInstance:d},s,f,p),[u,d,s,f,p]),h=i([]);return n(()=>()=>{h.current.forEach(e=>e()),h.current=[]},[]),{form:r(()=>({...m.form,onBeforeSubmit:e=>{h.current.push(m.form.onBeforeSubmit(e))},onSuccess:e=>{h.current.push(m.form.onSuccess(e))},onError:e=>{h.current.push(m.form.onError(e))}}),[m]),fields:m.fields}}export{s as useForm};
@@ -1,41 +1,44 @@
1
- import { Field, Response } from '@picked/client';
2
- type FieldWithValue = Field & {
3
- value: Response | undefined;
4
- };
5
- interface StepWithLabel {
6
- id: string;
7
- label: string;
8
- }
1
+ import { EventCallable, Store } from 'effector';
2
+ import { ExperienceStep, ValidationError } from '@picked/client';
3
+ import { FormField, ErrorCallback, SubmitCallback, SubmitEventWithCurrentTarget, SuccessCallback } from '@picked/client/form';
9
4
  export interface StepContext {
10
- step: StepWithLabel;
11
- fields: FieldWithValue[];
12
- isActiveStep?: boolean;
5
+ step: Store<ExperienceStep>;
6
+ /** Reactive store of fields with current values, errors, touched state, and event handlers. */
7
+ fields: Store<FormField[]>;
8
+ isActive: boolean;
9
+ /** @deprecated Use `isActive` instead. */
10
+ isActiveStep: boolean;
11
+ form: {
12
+ /** HTML-safe attributes to spread onto a form element. */
13
+ props: {
14
+ onsubmit: EventCallable<SubmitEventWithCurrentTarget>;
15
+ };
16
+ /** Flat list of all current validation errors. */
17
+ errors: Store<ValidationError[]>;
18
+ /** Whether the form is currently submitting. */
19
+ submitting: Store<boolean>;
20
+ /** Register a callback to transform data before submission. Cleanup is automatic. */
21
+ onBeforeSubmit: (callback: SubmitCallback) => void;
22
+ /** Register a callback to run on successful submission. Cleanup is automatic. */
23
+ onSuccess: (callback: SuccessCallback) => void;
24
+ /** Register a callback to run on validation errors. Cleanup is automatic. */
25
+ onError: (callback: ErrorCallback) => void;
26
+ };
13
27
  }
14
28
  export declare const StepContextProvider: import('react').Context<StepContext | null>;
15
29
  /**
16
- * Returns the current step context, including step metadata and evaluated fields.
17
- * Must be used within a component wrapped by `StepContextProvider`.
18
- * @returns The step, its evaluated fields, and whether this is the active step.
19
- * @example
20
- * const { step, fields, isActiveStep } = useStep()
30
+ * Retrieves the step context from the nearest provider.
31
+ *
32
+ * @returns {StepContext} The current step context.
33
+ * @example useStep()
21
34
  */
22
- export declare function useStep(): {
23
- step: StepWithLabel;
24
- fields: FieldWithValue[];
25
- isActiveStep: boolean;
26
- };
35
+ export declare function useStep(): StepContext;
27
36
  /**
28
- * Creates and returns step context stores for the given step ID.
29
- * Evaluates field conditions reactively whenever fields or responses change.
30
- * @param stepId - The ID of the step to set context for.
31
- * @returns The step metadata, evaluated fields, and active step indicator.
32
- * @example
33
- * const { step, fields, isActiveStep } = useSetStepContext('step-123')
37
+ * Creates and provides step context for the given step ID.
38
+ *
39
+ * @param {string} stepId - The step identifier.
40
+ * @returns {StepContext} The step context with form, fields, and active state.
41
+ * @example useSetStepContext('step-1')
34
42
  */
35
- export declare function useSetStepContext(stepId: string): {
36
- step: StepWithLabel;
37
- fields: FieldWithValue[];
38
- isActiveStep: boolean;
39
- };
40
- export {};
43
+ export declare function useSetStepContext(stepId: string): StepContext;
41
44
  //# sourceMappingURL=step.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/hooks/step.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAA;AAMvF,KAAK,cAAc,GAAG,KAAK,GAAG;IAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAAA;AAC7D,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAOD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,eAAO,MAAM,mBAAmB,6CAA0C,CAAA;AAE1E;;;;;;GAMG;AACH,wBAAgB,OAAO;;;;EAWtB;AAeD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;;;;EA8G/C"}
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/hooks/step.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAI5B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAC3B,+FAA+F;IAC/F,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAA;IACrB,IAAI,EAAE;QACJ,0DAA0D;QAC1D,KAAK,EAAE;YACL,QAAQ,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAA;SACtD,CAAA;QACD,kDAAkD;QAClD,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;QAChC,gDAAgD;QAChD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1B,qFAAqF;QACrF,cAAc,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;QAClD,iFAAiF;QACjF,SAAS,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAA;QAC9C,6EAA6E;QAC7E,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;KAC3C,CAAA;CACF;AAED,eAAO,MAAM,mBAAmB,6CAA0C,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,WAAW,CAOrC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAkE7D"}
@@ -1 +1 @@
1
- import{useExperience as e,usePicked as t}from"./client.js";import{useStepRouter as n}from"../router/context.js";import{createContext as r,useContext as i,useMemo as a}from"react";import{attach as o,combine as s,createEffect as c,createStore as l,sample as u}from"effector";import{evaluateRuleLogic as d}from"@picked/client";import{useUnit as f}from"effector-react";var p=r(null);function m(){let e=i(p);if(!e)throw Error(`useStep must be used within a StepContextProvider`);return{step:e.step,fields:e.fields,isActiveStep:e.isActiveStep??!1}}function h(r){let i=e(),p=t(),{activeStep:m}=n(),h=a(()=>m?.id===r,[m?.id,r]),{stepContext:g}=a(()=>{let e=o({source:s({steps:s(i.treeStore.map(e=>e.steps),p.steps.listStore,(e,t)=>t.filter(t=>e.includes(t.id))),fields:p.fields.listStore,responses:p.responses.listStore}),mapParams:(e,t)=>t,effect:c(async({steps:e,fields:t,responses:n})=>{let i=e.find(e=>e.id===r);if(!i)throw Error(`Step with id "${r}" not found in the experience tree.`);let a=t.filter(e=>(i.fieldIds??[]).includes(e.id)),o=[];for(let e of a)e.condition?await d(p,e.condition)&&o.push(e):o.push(e);let s={};for(let e of n)s[e.fieldKey]=e;let c=o.map(e=>({...e,value:s[e.key]?.value}));return{step:{id:i.id,label:i.name??i.label},fields:c}})}),t=l({step:{id:r,label:``},fields:[]});return t.on(e.doneData,(e,t)=>t),u({clock:[p.fields.listStore,p.responses.listStore],target:e}),e(),{stepContextFx:e,stepContext:t}},[r,p,i]),_=f(g);return{step:_.step,fields:_.fields,isActiveStep:h}}export{p as StepContextProvider,h as useSetStepContext,m as useStep};
1
+ import{useExperience as e,usePicked as t}from"./client.js";import{useStepRouter as n}from"../router/context.js";import{createContext as r,useContext as i,useEffect as a,useMemo as o,useRef as s}from"react";import{createForm as c}from"@picked/client/form";var l=r(null);function u(){let e=i(l);if(!e)throw Error(`useStep must be used within a StepContextProvider`);return e}function d(r){let i=e(),l=t(),{activeStep:u}=n(),d=o(()=>u?.key===r,[u?.key,r]),f=o(()=>i.treeStore.map(e=>{let t=e.steps.find(e=>e.id===r);if(!t)throw Error(`Step with id "${r}" not found in the experience tree.`);return t}),[i,r]),p=o(()=>f.map(e=>e.name),[f]),m=o(()=>f.map(e=>e.fieldIds),[f]),h=o(()=>c({client:l,experienceInstance:i},r,p,m),[l,i,r,p,m]),g=s([]);a(()=>()=>{g.current.forEach(e=>e()),g.current=[]},[]);let _=o(()=>({...h.form,onBeforeSubmit:e=>{g.current.push(h.form.onBeforeSubmit(e))},onSuccess:e=>{g.current.push(h.form.onSuccess(e))},onError:e=>{g.current.push(h.form.onError(e))}}),[h]);return{step:f,fields:h.fields,isActive:d,isActiveStep:d,form:_}}export{l as StepContextProvider,d as useSetStepContext,u as useStep};
@@ -1 +1 @@
1
- import{useStepRouter as e}from"./context.js";import{StepContextProvider as t,useSetStepContext as n}from"../hooks/step.js";import{useEffect as r,useState as i}from"react";import{jsx as a}from"react/jsx-runtime";var o=({id:o,component:s,children:c})=>{let l={id:o},{registerStep:u,unregisterStep:d}=e(),[f,p]=i(null),m=n(o);return r(()=>(u(l),()=>d(l)),[u,d,l]),r(()=>{s&&typeof s!=`function`?Promise.resolve(s).then(e=>{typeof e==`object`&&`default`in e?p(()=>e.default):p(()=>e)}):typeof s==`function`&&p(()=>s)},[s]),s?f?a(t.Provider,{value:m,children:a(f,{})}):null:a(t.Provider,{value:m,children:c})};export{o as default};
1
+ import{useStepRouter as e}from"./context.js";import{StepContextProvider as t,useSetStepContext as n}from"../hooks/step.js";import{useEffect as r,useMemo as i,useState as a}from"react";import{jsx as o}from"react/jsx-runtime";function s({stepKey:s,id:c,component:l,children:u}){let d=s??c??``,f=i(()=>({id:d,key:d}),[d]),{registerStep:p,unregisterStep:m}=e(),h=i(()=>typeof l==`function`?l:null,[l]),[g,_]=a(null),v=n(d);r(()=>(p(f),()=>m(f)),[p,m,f]),r(()=>{l&&typeof l!=`function`&&Promise.resolve(l).then(e=>{typeof e==`object`&&`default`in e?_(()=>e.default):typeof e==`function`&&_(()=>e)})},[l]);let y=h??g;return l?y?o(t.Provider,{value:v,children:o(y,{})}):null:o(t.Provider,{value:v,children:u})}export{s as default};
@@ -1 +1 @@
1
- import{useExperience as e}from"../hooks/client.js";import{StepRouterProvider as t}from"./context.js";import"../hooks/index.js";import{useCallback as n,useEffect as r,useRef as i,useState as a}from"react";import{supportsWindow as o}from"@picked/client";import{useUnit as s}from"effector-react";import{jsx as c}from"react/jsx-runtime";var l=({children:l})=>{let{currentStepStore:u}=e(),d=s(u),[f,p]=a(null),m=i(!1),[h,g]=a([]),_=n(e=>{if(o())g(t=>[...t,e]);else{if(m.current)return;e.id===d?.id&&(p(e),m.current=!0)}},[d?.id]),v=n(e=>{g(t=>t.filter(t=>t!==e))},[]);r(()=>{p(h.find(e=>e.id===d?.id)||null)},[h,d?.id]);let y={activeStep:f,registerStep:_,unregisterStep:v};return d?.id?c(t,{value:y,children:l}):null};export{l as default};
1
+ import{useExperience as e}from"../hooks/client.js";import{StepRouterProvider as t}from"./context.js";import"../hooks/index.js";import{useCallback as n,useMemo as r,useRef as i,useState as a}from"react";import{supportsWindow as o}from"@picked/client";import{useUnit as s}from"effector-react";import{jsx as c}from"react/jsx-runtime";function l({children:l}){let{currentStepStore:u}=e(),d=s(u),f=i(!1),[p,m]=a([]),[h,g]=a(null),_=n(e=>{if(o())m(t=>[...t,e]);else{if(f.current)return;e.key===d?.key&&(g(e),f.current=!0)}},[d?.key]),v=n(e=>{m(t=>t.filter(t=>t!==e))},[]),y=r(()=>h??p.find(e=>e.key===d?.key)??null,[h,p,d?.key]),b=r(()=>({activeStep:y,registerStep:_,unregisterStep:v}),[y,_,v]);return d?.key?c(t,{value:b,children:l}):null}export{l as default};
@@ -1,5 +1,6 @@
1
1
  export interface Step {
2
2
  id: string;
3
+ key: string;
3
4
  }
4
5
  interface ContextOptions {
5
6
  activeStep?: Step | null;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/router/context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CACnC;AAID,eAAO,MAAM,kBAAkB,iDAA6B,CAAA;AAE5D,eAAO,MAAM,aAAa,sBAOzB,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/router/context.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CACnC;AAID,eAAO,MAAM,kBAAkB,iDAA6B,CAAA;AAE5D,eAAO,MAAM,aAAa,sBAOzB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/react",
3
- "version": "0.0.1-dev.1774244905386",
3
+ "version": "0.0.1-dev.1774924249530",
4
4
  "devDependencies": {
5
5
  "@picked/client": "workspace:*",
6
6
  "@repo/eslint-config": "workspace:*",
@@ -76,11 +76,16 @@
76
76
  "jscpd",
77
77
  "eslint",
78
78
  "tsgo"
79
+ ],
80
+ "ignoreDependencies": [
81
+ "@picked/client",
82
+ "@repo/eslint-config",
83
+ "@repo/typescript-config"
79
84
  ]
80
85
  },
81
86
  "module": "./dist/index.js",
82
87
  "peerDependencies": {
83
- "@picked/client": "0.0.1-dev.1774244905386",
88
+ "@picked/client": "0.0.1-dev.1774924249530",
84
89
  "effector": "^23.3.0",
85
90
  "effector-react": "^23.3.0",
86
91
  "react": "19.2.2",
@@ -100,7 +105,7 @@
100
105
  "lint:report": "eslint . -o './.reports/eslint.json' -f json || [ -f './.reports/eslint.json' ]",
101
106
  "size": "size-limit",
102
107
  "test": "vitest run",
103
- "test:coverage": "vitest run --coverage",
108
+ "test:coverage": "../../scripts/vitest-coverage.sh",
104
109
  "test:packaged-types": "attw --pack",
105
110
  "test:watch": "vitest",
106
111
  "type-check": "tsgo -p . --noEmit"