@jfdevelops/react-multi-step-form 1.0.0-alpha.24 → 1.0.0-alpha.26

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.
@@ -3,11 +3,17 @@ let react = require("react");
3
3
  //#region src/hooks/use-selector.ts
4
4
  function createUseSelector(createCtx, subscribe) {
5
5
  return (selector) => {
6
- return (0, react.useSyncExternalStore)(subscribe, () => {
7
- return selector(createCtx());
8
- }, () => {
9
- return selector(createCtx());
10
- });
6
+ const snapshotCacheRef = (0, react.useRef)(null);
7
+ const getSnapshot = () => {
8
+ const newValue = selector(createCtx());
9
+ if (snapshotCacheRef.current === null) {
10
+ snapshotCacheRef.current = { value: newValue };
11
+ return newValue;
12
+ }
13
+ if (!Object.is(snapshotCacheRef.current.value, newValue)) snapshotCacheRef.current = { value: newValue };
14
+ return snapshotCacheRef.current.value;
15
+ };
16
+ return (0, react.useSyncExternalStore)(subscribe, () => getSnapshot(), () => getSnapshot());
11
17
  };
12
18
  }
13
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-selector.cjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,yCACE,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
1
+ {"version":3,"file":"use-selector.cjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore, useRef } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n const snapshotCacheRef = useRef<{ value: selected } | null>(null);\n\n const getSnapshot = () => {\n const currentCtx = createCtx();\n const newValue = selector(currentCtx);\n\n // Cache the result to ensure stable reference\n if (snapshotCacheRef.current === null) {\n snapshotCacheRef.current = { value: newValue };\n\n return newValue;\n }\n\n // Only update if the value actually changed\n if (!Object.is(snapshotCacheRef.current.value, newValue)) {\n snapshotCacheRef.current = { value: newValue };\n }\n\n return snapshotCacheRef.current.value;\n };\n\n return useSyncExternalStore(\n subscribe,\n () => getSnapshot(),\n () => getSnapshot()\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;EACH,MAAM,qCAAsD,KAAK;EAEjE,MAAM,oBAAoB;GAExB,MAAM,WAAW,SADE,WAAW,CACO;AAGrC,OAAI,iBAAiB,YAAY,MAAM;AACrC,qBAAiB,UAAU,EAAE,OAAO,UAAU;AAE9C,WAAO;;AAIT,OAAI,CAAC,OAAO,GAAG,iBAAiB,QAAQ,OAAO,SAAS,CACtD,kBAAiB,UAAU,EAAE,OAAO,UAAU;AAGhD,UAAO,iBAAiB,QAAQ;;AAGlC,yCACE,iBACM,aAAa,QACb,aAAa,CACpB"}
@@ -1,13 +1,19 @@
1
- import { useSyncExternalStore } from "react";
1
+ import { useRef, useSyncExternalStore } from "react";
2
2
 
3
3
  //#region src/hooks/use-selector.ts
4
4
  function createUseSelector(createCtx, subscribe) {
5
5
  return (selector) => {
6
- return useSyncExternalStore(subscribe, () => {
7
- return selector(createCtx());
8
- }, () => {
9
- return selector(createCtx());
10
- });
6
+ const snapshotCacheRef = useRef(null);
7
+ const getSnapshot = () => {
8
+ const newValue = selector(createCtx());
9
+ if (snapshotCacheRef.current === null) {
10
+ snapshotCacheRef.current = { value: newValue };
11
+ return newValue;
12
+ }
13
+ if (!Object.is(snapshotCacheRef.current.value, newValue)) snapshotCacheRef.current = { value: newValue };
14
+ return snapshotCacheRef.current.value;
15
+ };
16
+ return useSyncExternalStore(subscribe, () => getSnapshot(), () => getSnapshot());
11
17
  };
12
18
  }
13
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-selector.mjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,SAAO,qBACL,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
1
+ {"version":3,"file":"use-selector.mjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore, useRef } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n const snapshotCacheRef = useRef<{ value: selected } | null>(null);\n\n const getSnapshot = () => {\n const currentCtx = createCtx();\n const newValue = selector(currentCtx);\n\n // Cache the result to ensure stable reference\n if (snapshotCacheRef.current === null) {\n snapshotCacheRef.current = { value: newValue };\n\n return newValue;\n }\n\n // Only update if the value actually changed\n if (!Object.is(snapshotCacheRef.current.value, newValue)) {\n snapshotCacheRef.current = { value: newValue };\n }\n\n return snapshotCacheRef.current.value;\n };\n\n return useSyncExternalStore(\n subscribe,\n () => getSnapshot(),\n () => getSnapshot()\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;EACH,MAAM,mBAAmB,OAAmC,KAAK;EAEjE,MAAM,oBAAoB;GAExB,MAAM,WAAW,SADE,WAAW,CACO;AAGrC,OAAI,iBAAiB,YAAY,MAAM;AACrC,qBAAiB,UAAU,EAAE,OAAO,UAAU;AAE9C,WAAO;;AAIT,OAAI,CAAC,OAAO,GAAG,iBAAiB,QAAQ,OAAO,SAAS,CACtD,kBAAiB,UAAU,EAAE,OAAO,UAAU;AAGhD,UAAO,iBAAiB,QAAQ;;AAGlC,SAAO,qBACL,iBACM,aAAa,QACb,aAAa,CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfdevelops/react-multi-step-form",
3
- "version": "1.0.0-alpha.24",
3
+ "version": "1.0.0-alpha.26",
4
4
  "description": "",
5
5
  "repository": "https://github.com/jfdevelops/multi-step-form",
6
6
  "type": "module",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "use-sync-external-store": "^1.6.0",
39
- "@jfdevelops/multi-step-form-core": "1.0.0-alpha.18"
39
+ "@jfdevelops/multi-step-form-core": "1.0.0-alpha.19"
40
40
  },
41
41
  "publishConfig": {
42
42
  "access": "public",