@waypointjs/react 0.1.2 → 0.1.5

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.
package/dist/index.cjs CHANGED
@@ -5,7 +5,7 @@ var zustand = require('zustand');
5
5
  var core = require('@waypointjs/core');
6
6
 
7
7
  // src/useWaypoint.ts
8
- function useWaypoint(store) {
8
+ function useWaypoint(store, externalEnums) {
9
9
  const { schema, data, externalVars, currentStepId, isSubmitting } = zustand.useStore(
10
10
  store,
11
11
  (s) => ({
@@ -17,8 +17,8 @@ function useWaypoint(store) {
17
17
  })
18
18
  );
19
19
  const tree = react.useMemo(
20
- () => schema ? core.resolveTree(schema, data, externalVars) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
21
- [schema, data, externalVars]
20
+ () => schema ? core.resolveTree(schema, data, externalVars, externalEnums) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
21
+ [schema, data, externalVars, externalEnums]
22
22
  );
23
23
  const currentStep = react.useMemo(
24
24
  () => currentStepId ? tree.steps.find((s) => s.definition.id === currentStepId) : void 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["useStore","useMemo","resolveTree","getNextStep","getPreviousStep","calculateProgress","data"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>): WaypointState {\n const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["useStore","useMemo","resolveTree","getNextStep","getPreviousStep","calculateProgress","data"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { ExternalEnum, WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState {\n const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars, externalEnums)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars, externalEnums]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StoreApi } from 'zustand';
2
- import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ResolvedField } from '@waypointjs/core';
2
+ import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ExternalEnum, ResolvedField } from '@waypointjs/core';
3
3
 
4
4
  interface WaypointState {
5
5
  schema: WaypointRuntimeStore["schema"];
@@ -30,7 +30,7 @@ interface WaypointState {
30
30
  * @example
31
31
  * const { currentStep, progress, setFieldValue } = useWaypoint(store);
32
32
  */
33
- declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>): WaypointState;
33
+ declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState;
34
34
 
35
35
  interface WaypointHeadlessStep {
36
36
  step: ResolvedStep | undefined;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StoreApi } from 'zustand';
2
- import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ResolvedField } from '@waypointjs/core';
2
+ import { WaypointRuntimeStore, ResolvedStep, ResolvedTree, ExternalEnum, ResolvedField } from '@waypointjs/core';
3
3
 
4
4
  interface WaypointState {
5
5
  schema: WaypointRuntimeStore["schema"];
@@ -30,7 +30,7 @@ interface WaypointState {
30
30
  * @example
31
31
  * const { currentStep, progress, setFieldValue } = useWaypoint(store);
32
32
  */
33
- declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>): WaypointState;
33
+ declare function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState;
34
34
 
35
35
  interface WaypointHeadlessStep {
36
36
  step: ResolvedStep | undefined;
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { useStore } from 'zustand';
3
3
  import { resolveTree, getNextStep, getPreviousStep, calculateProgress } from '@waypointjs/core';
4
4
 
5
5
  // src/useWaypoint.ts
6
- function useWaypoint(store) {
6
+ function useWaypoint(store, externalEnums) {
7
7
  const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(
8
8
  store,
9
9
  (s) => ({
@@ -15,8 +15,8 @@ function useWaypoint(store) {
15
15
  })
16
16
  );
17
17
  const tree = useMemo(
18
- () => schema ? resolveTree(schema, data, externalVars) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
19
- [schema, data, externalVars]
18
+ () => schema ? resolveTree(schema, data, externalVars, externalEnums) : { steps: [], hiddenSteps: [], missingExternalVars: [] },
19
+ [schema, data, externalVars, externalEnums]
20
20
  );
21
21
  const currentStep = useMemo(
22
22
  () => currentStepId ? tree.steps.find((s) => s.definition.id === currentStepId) : void 0,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["data","useStore","useMemo","resolveTree"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>): WaypointState {\n const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/useWaypoint.ts","../src/useWaypointStep.ts"],"names":["data","useStore","useMemo","resolveTree"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport {\n resolveTree,\n calculateProgress,\n getNextStep,\n getPreviousStep,\n} from \"@waypointjs/core\";\nimport type { ExternalEnum, WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedStep, ResolvedTree } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointState {\n schema: WaypointRuntimeStore[\"schema\"];\n data: WaypointRuntimeStore[\"data\"];\n externalVars: WaypointRuntimeStore[\"externalVars\"];\n currentStepId: string | null;\n currentStep: ResolvedStep | undefined;\n nextStep: ResolvedStep | undefined;\n previousStep: ResolvedStep | undefined;\n tree: ResolvedTree;\n progress: number;\n isFirstStep: boolean;\n isLastStep: boolean;\n isSubmitting: boolean;\n missingExternalVars: string[];\n // Store actions\n setFieldValue(stepId: string, fieldId: string, value: unknown): void;\n setStepData(stepId: string, data: Record<string, unknown>): void;\n setExternalVar(varId: string, value: unknown): void;\n setCurrentStep(stepId: string): void;\n reset(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless hook for accessing and mutating the Waypoint runtime store.\n *\n * Router-agnostic — use `@waypointjs/next`'s `useWaypointStep()` for full\n * Next.js integration with form handling and automatic navigation.\n *\n * @example\n * const { currentStep, progress, setFieldValue } = useWaypoint(store);\n */\nexport function useWaypoint(store: StoreApi<WaypointRuntimeStore>, externalEnums?: ExternalEnum[]): WaypointState {\n const { schema, data, externalVars, currentStepId, isSubmitting } = useStore(\n store,\n (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n currentStepId: s.currentStepId,\n isSubmitting: s.isSubmitting,\n })\n );\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars, externalEnums)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars, externalEnums]\n );\n\n const currentStep = useMemo(\n () =>\n currentStepId\n ? tree.steps.find((s) => s.definition.id === currentStepId)\n : undefined,\n [tree.steps, currentStepId]\n );\n\n const nextStep = useMemo(\n () =>\n currentStepId ? getNextStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const previousStep = useMemo(\n () =>\n currentStepId ? getPreviousStep(tree.steps, currentStepId) : undefined,\n [tree.steps, currentStepId]\n );\n\n const progress = useMemo(\n () =>\n currentStepId ? calculateProgress(tree.steps, currentStepId) : 0,\n [tree.steps, currentStepId]\n );\n\n return {\n schema,\n data,\n externalVars,\n currentStepId,\n currentStep,\n nextStep,\n previousStep,\n tree,\n progress,\n isFirstStep: !previousStep,\n isLastStep: !nextStep,\n isSubmitting,\n missingExternalVars: tree.missingExternalVars,\n\n setFieldValue: (stepId, fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (stepId, data) =>\n store.getState().setStepData(stepId, data),\n setExternalVar: (varId, value) =>\n store.getState().setExternalVar(varId, value),\n setCurrentStep: (stepId) => store.getState().setCurrentStep(stepId),\n reset: () => store.getState().reset(),\n };\n}\n","import { useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { StoreApi } from \"zustand\";\n\nimport { resolveTree } from \"@waypointjs/core\";\nimport type { WaypointRuntimeStore } from \"@waypointjs/core\";\nimport type { ResolvedField, ResolvedStep } from \"@waypointjs/core\";\n\n// ---------------------------------------------------------------------------\n// Return type\n// ---------------------------------------------------------------------------\n\nexport interface WaypointHeadlessStep {\n step: ResolvedStep | undefined;\n /** Visible fields for this step */\n fields: ResolvedField[];\n /** Current persisted data for this step */\n stepData: Record<string, unknown>;\n setFieldValue(fieldId: string, value: unknown): void;\n setStepData(data: Record<string, unknown>): void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Headless (router-agnostic) hook that resolves a specific step's fields and data.\n *\n * Use `@waypointjs/next`'s `useWaypointStep()` for full Next.js integration\n * (form, validation, navigation).\n *\n * @param store - The runtime store instance from your context\n * @param stepId - The step id to resolve\n */\nexport function useWaypointStep(\n store: StoreApi<WaypointRuntimeStore>,\n stepId: string\n): WaypointHeadlessStep {\n const { schema, data, externalVars } = useStore(store, (s: WaypointRuntimeStore) => ({\n schema: s.schema,\n data: s.data,\n externalVars: s.externalVars,\n }));\n\n const tree = useMemo(\n () =>\n schema\n ? resolveTree(schema, data, externalVars)\n : { steps: [], hiddenSteps: [], missingExternalVars: [] },\n [schema, data, externalVars]\n );\n\n const step = useMemo(\n () => tree.steps.find((s) => s.definition.id === stepId),\n [tree.steps, stepId]\n );\n\n const visibleFields = useMemo(\n () => step?.fields.filter((f) => f.visible) ?? [],\n [step]\n );\n\n return {\n step,\n fields: visibleFields,\n stepData: data[stepId] ?? {},\n setFieldValue: (fieldId, value) =>\n store.getState().setFieldValue(stepId, fieldId, value),\n setStepData: (d) => store.getState().setStepData(stepId, d),\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waypointjs/react",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
4
  "description": "React hooks for waypoint journey navigation",
5
5
  "keywords": [
6
6
  "navigation",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "zustand": "^4.5.2",
29
- "@waypointjs/core": "0.1.2"
29
+ "@waypointjs/core": "0.1.5"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^20.19.33",