@stackflow/react
Advanced tools
| import React from "react"; | ||
| export declare const useTransition: typeof React.useTransition; |
| import type { ActivityStep } from "@stackflow/core"; | ||
| /** | ||
| * Get current step | ||
| */ | ||
| export declare function useStep(): ActivityStep | null; |
| import React from "react"; | ||
| export const useTransition: typeof React.useTransition = | ||
| React.useTransition ?? (() => [false, (cb: () => void) => cb()]); |
| import type { ActivityStep } from "@stackflow/core"; | ||
| import { useContext } from "react"; | ||
| import { ActivityContext } from "./activity/ActivityProvider"; | ||
| /** | ||
| * Get current step | ||
| */ | ||
| export function useStep(): ActivityStep | null { | ||
| const { steps, id } = useContext(ActivityContext); | ||
| return steps.filter((step) => step.id !== id).at(-1) ?? null; | ||
| } |
+1
-0
@@ -10,2 +10,3 @@ export * from "./activity/ActivityComponentType"; | ||
| export * from "./useEnterDoneEffect"; | ||
| export * from "./useStep"; | ||
| export * from "./useStepActions"; |
+89
-67
@@ -51,3 +51,5 @@ "use strict"; | ||
| useActivityParams: () => useActivityParams, | ||
| useEnterDoneEffect: () => useEnterDoneEffect, | ||
| useStack: () => useStack, | ||
| useStep: () => useStep, | ||
| useStepActions: () => useStepActions | ||
@@ -130,3 +132,3 @@ }); | ||
| var import_core7 = require("@stackflow/core"); | ||
| var import_react18 = __toESM(require("react")); | ||
| var import_react19 = __toESM(require("react")); | ||
@@ -146,3 +148,3 @@ // src/activity/makeActivityId.ts | ||
| // src/core/CoreProvider.tsx | ||
| var import_react9 = __toESM(require("react")); | ||
| var import_react10 = __toESM(require("react")); | ||
@@ -168,7 +170,12 @@ // src/shims/useDeferredValue.ts | ||
| // src/shims/useTransition.ts | ||
| var import_react9 = __toESM(require("react")); | ||
| var _a3; | ||
| var useTransition = (_a3 = import_react9.default.useTransition) != null ? _a3 : () => [false, (cb) => cb()]; | ||
| // src/core/CoreProvider.tsx | ||
| var CoreActionsContext = (0, import_react9.createContext)( | ||
| var CoreActionsContext = (0, import_react10.createContext)( | ||
| null | ||
| ); | ||
| var CoreStateContext = (0, import_react9.createContext)(null); | ||
| var CoreStateContext = (0, import_react10.createContext)(null); | ||
| var CoreProvider = ({ | ||
@@ -184,5 +191,5 @@ coreStore, | ||
| const deferredStack = useDeferredValue(stack); | ||
| return /* @__PURE__ */ import_react9.default.createElement(CoreStateContext.Provider, { | ||
| return /* @__PURE__ */ import_react10.default.createElement(CoreStateContext.Provider, { | ||
| value: deferredStack | ||
| }, /* @__PURE__ */ import_react9.default.createElement(CoreActionsContext.Provider, { | ||
| }, /* @__PURE__ */ import_react10.default.createElement(CoreActionsContext.Provider, { | ||
| value: coreStore.actions | ||
@@ -194,22 +201,22 @@ }, children)); | ||
| // src/core/useCoreActions.ts | ||
| var import_react10 = __toESM(require("react")); | ||
| var useCoreActions = () => import_react10.default.useContext(CoreActionsContext); | ||
| var import_react11 = __toESM(require("react")); | ||
| var useCoreActions = () => import_react11.default.useContext(CoreActionsContext); | ||
| // src/core/useCoreState.ts | ||
| var import_react11 = __toESM(require("react")); | ||
| var useCoreState = () => import_react11.default.useContext(CoreStateContext); | ||
| var import_react12 = __toESM(require("react")); | ||
| var useCoreState = () => import_react12.default.useContext(CoreStateContext); | ||
| // src/MainRenderer.tsx | ||
| var import_react15 = __toESM(require("react")); | ||
| var import_react16 = __toESM(require("react")); | ||
| // src/PluginRenderer.tsx | ||
| var import_react14 = __toESM(require("react")); | ||
| var import_react15 = __toESM(require("react")); | ||
| // src/plugins/PluginsProvider.tsx | ||
| var import_react12 = __toESM(require("react")); | ||
| var PluginsContext = (0, import_react12.createContext)(null); | ||
| var import_react13 = __toESM(require("react")); | ||
| var PluginsContext = (0, import_react13.createContext)(null); | ||
| var PluginsProvider = ({ | ||
| children, | ||
| value | ||
| }) => /* @__PURE__ */ import_react12.default.createElement(PluginsContext.Provider, { | ||
| }) => /* @__PURE__ */ import_react13.default.createElement(PluginsContext.Provider, { | ||
| value | ||
@@ -220,5 +227,5 @@ }, children); | ||
| // src/plugins/usePlugins.ts | ||
| var import_react13 = require("react"); | ||
| var import_react14 = require("react"); | ||
| function usePlugins() { | ||
| return (0, import_react13.useContext)(PluginsContext); | ||
| return (0, import_react14.useContext)(PluginsContext); | ||
| } | ||
@@ -242,8 +249,8 @@ | ||
| const Activity = activityComponentMap[activity.name]; | ||
| let output = /* @__PURE__ */ import_react14.default.createElement(Activity, { | ||
| let output = /* @__PURE__ */ import_react15.default.createElement(Activity, { | ||
| params: activity.params | ||
| }); | ||
| plugins.forEach((p) => { | ||
| var _a5, _b; | ||
| output = (_b = (_a5 = p.wrapActivity) == null ? void 0 : _a5.call(p, { | ||
| var _a4, _b; | ||
| output = (_b = (_a4 = p.wrapActivity) == null ? void 0 : _a4.call(p, { | ||
| activity: __spreadProps(__spreadValues({}, activity), { | ||
@@ -254,5 +261,5 @@ render: () => output | ||
| }); | ||
| return /* @__PURE__ */ import_react14.default.createElement(StackProvider, { | ||
| return /* @__PURE__ */ import_react15.default.createElement(StackProvider, { | ||
| value: stack | ||
| }, /* @__PURE__ */ import_react14.default.createElement(ActivityProvider, { | ||
| }, /* @__PURE__ */ import_react15.default.createElement(ActivityProvider, { | ||
| key: activity.id, | ||
@@ -280,3 +287,3 @@ value: __spreadValues(__spreadValues({}, activity), overrideActivity) | ||
| ); | ||
| (0, import_react15.useEffect)(() => { | ||
| (0, import_react16.useEffect)(() => { | ||
| if (renderingPlugins.length === 0) { | ||
@@ -288,3 +295,3 @@ console.warn( | ||
| }, [renderingPlugins]); | ||
| let output = /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, renderingPlugins.map((plugin) => /* @__PURE__ */ import_react15.default.createElement(PluginRenderer_default, { | ||
| let output = /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, renderingPlugins.map((plugin) => /* @__PURE__ */ import_react16.default.createElement(PluginRenderer_default, { | ||
| key: plugin.key, | ||
@@ -295,4 +302,4 @@ activityComponentMap, | ||
| plugins.forEach((plugin) => { | ||
| var _a5, _b; | ||
| output = (_b = (_a5 = plugin.wrapStack) == null ? void 0 : _a5.call(plugin, { | ||
| var _a4, _b; | ||
| output = (_b = (_a4 = plugin.wrapStack) == null ? void 0 : _a4.call(plugin, { | ||
| stack: __spreadProps(__spreadValues({}, coreState), { | ||
@@ -311,3 +318,3 @@ render() { | ||
| // src/useActions.ts | ||
| var import_react16 = __toESM(require("react")); | ||
| var import_react17 = require("react"); | ||
| function parseActionOptions(options) { | ||
@@ -323,8 +330,6 @@ if (!options) { | ||
| } | ||
| var _a3; | ||
| var useTransition = (_a3 = import_react16.default.useTransition) != null ? _a3 : () => [false, (cb) => cb()]; | ||
| function useActions() { | ||
| const coreActions = useCoreActions(); | ||
| const [pending] = useTransition(); | ||
| return (0, import_react16.useMemo)( | ||
| return (0, import_react17.useMemo)( | ||
| () => ({ | ||
@@ -345,6 +350,6 @@ pending, | ||
| replace(activityName, activityParams, options) { | ||
| var _a5; | ||
| var _a4; | ||
| const activityId = makeActivityId(); | ||
| coreActions == null ? void 0 : coreActions.replace({ | ||
| activityId: (_a5 = options == null ? void 0 : options.activityId) != null ? _a5 : makeActivityId(), | ||
| activityId: (_a4 = options == null ? void 0 : options.activityId) != null ? _a4 : makeActivityId(), | ||
| activityName, | ||
@@ -369,9 +374,7 @@ activityParams, | ||
| // src/useStepActions.ts | ||
| var import_react17 = __toESM(require("react")); | ||
| var _a4; | ||
| var useTransition2 = (_a4 = import_react17.default.useTransition) != null ? _a4 : () => [false, (cb) => cb()]; | ||
| var import_react18 = require("react"); | ||
| var useStepActions = () => { | ||
| const coreActions = useCoreActions(); | ||
| const [pending] = useTransition2(); | ||
| return (0, import_react17.useMemo)( | ||
| const [pending] = useTransition(); | ||
| return (0, import_react18.useMemo)( | ||
| () => ({ | ||
@@ -419,3 +422,3 @@ pending, | ||
| function stackflow(options) { | ||
| var _a5; | ||
| var _a4; | ||
| if (typeof window !== "undefined") { | ||
@@ -428,7 +431,7 @@ const html = window.document.documentElement; | ||
| } | ||
| const plugins = ((_a5 = options.plugins) != null ? _a5 : []).flat(Infinity).map((p) => p); | ||
| const plugins = ((_a4 = options.plugins) != null ? _a4 : []).flat(Infinity).map((p) => p); | ||
| const pluginInstances = plugins.map((plugin) => plugin()); | ||
| const activityComponentMap = Object.entries(options.activities).reduce( | ||
| (acc, [key, Activity]) => __spreadProps(__spreadValues({}, acc), { | ||
| [key]: "component" in Activity ? import_react18.default.memo(Activity.component) : import_react18.default.memo(Activity) | ||
| [key]: "component" in Activity ? import_react19.default.memo(Activity.component) : import_react19.default.memo(Activity) | ||
| }), | ||
@@ -456,4 +459,4 @@ {} | ||
| const [getCoreStore, setCoreStore] = makeRef(); | ||
| const Stack = import_react18.default.memo((props) => { | ||
| const coreStore = (0, import_react18.useMemo)(() => { | ||
| const Stack = import_react19.default.memo((props) => { | ||
| const coreStore = (0, import_react19.useMemo)(() => { | ||
| const prevCoreStore = getCoreStore(); | ||
@@ -474,6 +477,6 @@ if (isBrowser && prevCoreStore) { | ||
| (initialEvents, pluginInstance) => { | ||
| var _a6, _b, _c; | ||
| var _a5, _b, _c; | ||
| return (_c = (_b = pluginInstance.overrideInitialEvents) == null ? void 0 : _b.call(pluginInstance, { | ||
| initialEvents, | ||
| initialContext: (_a6 = props.initialContext) != null ? _a6 : {} | ||
| initialContext: (_a5 = props.initialContext) != null ? _a5 : {} | ||
| })) != null ? _c : initialEvents; | ||
@@ -507,7 +510,7 @@ }, | ||
| }, []); | ||
| return /* @__PURE__ */ import_react18.default.createElement(PluginsProvider, { | ||
| return /* @__PURE__ */ import_react19.default.createElement(PluginsProvider, { | ||
| value: pluginInstances | ||
| }, /* @__PURE__ */ import_react18.default.createElement(CoreProvider, { | ||
| }, /* @__PURE__ */ import_react19.default.createElement(CoreProvider, { | ||
| coreStore | ||
| }, /* @__PURE__ */ import_react18.default.createElement(MainRenderer_default, { | ||
| }, /* @__PURE__ */ import_react19.default.createElement(MainRenderer_default, { | ||
| activityComponentMap | ||
@@ -529,3 +532,3 @@ }))); | ||
| } | ||
| activityComponentMap[activity.name] = import_react18.default.memo(activity.component); | ||
| activityComponentMap[activity.name] = import_react19.default.memo(activity.component); | ||
| staticCoreStore.actions.dispatchEvent("ActivityRegistered", { | ||
@@ -551,13 +554,13 @@ activityName: activity.name, | ||
| getStack() { | ||
| var _a6, _b; | ||
| return (_b = (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.getStack()) != null ? _b : staticCoreStore.actions.getStack(); | ||
| var _a5, _b; | ||
| return (_b = (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.getStack()) != null ? _b : staticCoreStore.actions.getStack(); | ||
| }, | ||
| dispatchEvent(name, parameters) { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.dispatchEvent(name, parameters); | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.dispatchEvent(name, parameters); | ||
| }, | ||
| push(activityName, activityParams, options2) { | ||
| var _a6; | ||
| var _a5; | ||
| const activityId = makeActivityId(); | ||
| (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.push({ | ||
| (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.push({ | ||
| activityId, | ||
@@ -573,4 +576,4 @@ activityName, | ||
| replace(activityName, activityParams, options2) { | ||
| var _a6, _b, _c; | ||
| const activityId = (_a6 = options2 == null ? void 0 : options2.activityId) != null ? _a6 : makeActivityId(); | ||
| var _a5, _b, _c; | ||
| const activityId = (_a5 = options2 == null ? void 0 : options2.activityId) != null ? _a5 : makeActivityId(); | ||
| (_c = getCoreStore()) == null ? void 0 : _c.actions.replace({ | ||
@@ -587,4 +590,4 @@ activityId: (_b = options2 == null ? void 0 : options2.activityId) != null ? _b : makeActivityId(), | ||
| pop(options2) { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.pop({ | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.pop({ | ||
| skipExitActiveState: parseActionOptions2(options2).skipActiveState | ||
@@ -594,5 +597,5 @@ }); | ||
| stepPush(params) { | ||
| var _a6; | ||
| var _a5; | ||
| const stepId = makeStepId(); | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepPush({ | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepPush({ | ||
| stepId, | ||
@@ -603,5 +606,5 @@ stepParams: params | ||
| stepReplace(params) { | ||
| var _a6; | ||
| var _a5; | ||
| const stepId = makeStepId(); | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepReplace({ | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepReplace({ | ||
| stepId, | ||
@@ -612,4 +615,4 @@ stepParams: params | ||
| stepPop() { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepPop({}); | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepPop({}); | ||
| } | ||
@@ -621,3 +624,3 @@ } | ||
| // src/useActiveEffect.ts | ||
| var import_react19 = require("react"); | ||
| var import_react20 = require("react"); | ||
| var noop = () => { | ||
@@ -627,3 +630,3 @@ }; | ||
| const { isActive } = useActivity(); | ||
| (0, import_react19.useEffect)(() => { | ||
| (0, import_react20.useEffect)(() => { | ||
| if (isActive) { | ||
@@ -637,3 +640,22 @@ return effect(); | ||
| // src/useEnterDoneEffect.ts | ||
| var import_react20 = require("react"); | ||
| var import_react21 = require("react"); | ||
| var noop2 = () => { | ||
| }; | ||
| var useEnterDoneEffect = (effect, deps = []) => { | ||
| const { isTop, transitionState } = useActivity(); | ||
| (0, import_react21.useEffect)(() => { | ||
| if (isTop && transitionState === "enter-done") { | ||
| return effect(); | ||
| } | ||
| return noop2; | ||
| }, [isTop, transitionState, ...deps]); | ||
| }; | ||
| // src/useStep.ts | ||
| var import_react22 = require("react"); | ||
| function useStep() { | ||
| var _a4; | ||
| const { steps, id: id3 } = (0, import_react22.useContext)(ActivityContext); | ||
| return (_a4 = steps.filter((step) => step.id !== id3).at(-1)) != null ? _a4 : null; | ||
| } | ||
| //# sourceMappingURL=index.js.map |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts", "../src/activity/useActivity.ts", "../src/activity/ActivityProvider.tsx", "../src/utils/makeRef.ts", "../src/utils/useMemoDeep.ts", "../src/activity/useActivityParams.ts", "../src/stack/useStack.ts", "../src/stack/StackProvider.tsx", "../src/stackflow.tsx", "../src/activity/makeActivityId.ts", "../src/activity/makeStepId.ts", "../src/core/CoreProvider.tsx", "../src/shims/useDeferredValue.ts", "../src/shims/useSyncExternalStore.ts", "../src/core/useCoreActions.ts", "../src/core/useCoreState.ts", "../src/MainRenderer.tsx", "../src/PluginRenderer.tsx", "../src/plugins/PluginsProvider.tsx", "../src/plugins/usePlugins.ts", "../src/useActions.ts", "../src/useStepActions.ts", "../src/useActiveEffect.ts", "../src/useEnterDoneEffect.ts"], | ||
| "sourcesContent": ["export * from \"./activity/ActivityComponentType\";\nexport * from \"./activity/useActivity\";\nexport * from \"./activity/useActivityParams\";\nexport * from \"./stack/useStack\";\nexport * from \"./stackflow\";\nexport * from \"./StackflowReactPlugin\";\nexport * from \"./useActions\";\nexport * from \"./useActiveEffect\";\nexport * from \"./useEnterDoneEffect\";\nexport * from \"./useStepActions\";\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity state\n */\nexport const useActivity = () => useContext(ActivityContext);\n", "import type { Activity } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const ActivityContext = createContext<Activity>(null as any);\n\ninterface ActivityProviderProps {\n children: React.ReactNode;\n value: Activity;\n}\nexport const ActivityProvider: React.FC<ActivityProviderProps> = ({\n children,\n value,\n}) => (\n <ActivityContext.Provider value={useMemoDeep(value)}>\n {children}\n </ActivityContext.Provider>\n);\n\nActivityProvider.displayName = \"ActivityProvider\";\n", "export function makeRef<T>(): [() => T | null, (value: T) => void] {\n const ref: {\n value: T | null;\n } = {\n value: null,\n };\n function get() {\n return ref.value;\n }\n function set(value: T) {\n ref.value = value;\n }\n\n return [get, set];\n}\n", "import { useEffect, useRef } from \"react\";\nimport compare from \"react-fast-compare\";\n\nexport function useMemoDeep<T>(next: T) {\n const previousRef = useRef(next);\n const previous = previousRef.current;\n const isEqual = compare(previous, next);\n\n useEffect(() => {\n if (!isEqual) {\n previousRef.current = next;\n }\n });\n\n return isEqual ? previous : next;\n}\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity parameters\n */\nexport function useActivityParams<\n T extends { [key in keyof T]: string | undefined },\n>(): T {\n return useContext(ActivityContext).params as T;\n}\n", "import { useContext } from \"react\";\n\nimport { StackContext } from \"./StackProvider\";\n\n/**\n * Get overall stack state\n */\nexport const useStack = () => useContext(StackContext);\n", "import type { Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const StackContext = createContext<Stack>(null as any);\n\ninterface StackProviderProps {\n children: React.ReactNode;\n value: Stack;\n}\nexport const StackProvider: React.FC<StackProviderProps> = ({\n children,\n value,\n}) => (\n <StackContext.Provider value={useMemoDeep(value)}>\n {children}\n </StackContext.Provider>\n);\n\nStackProvider.displayName = \"StackProvider\";\n", "import type {\n ActivityRegisteredEvent,\n CoreStore,\n PushedEvent,\n StackflowActions,\n StepPushedEvent,\n} from \"@stackflow/core\";\nimport { makeCoreStore, makeEvent } from \"@stackflow/core\";\nimport React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId, makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { CoreProvider } from \"./core\";\nimport MainRenderer from \"./MainRenderer\";\nimport { PluginsProvider } from \"./plugins\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { UseActionsOutputType } from \"./useActions\";\nimport { useActions } from \"./useActions\";\nimport type {\n UseStepActions,\n UseStepActionsOutputType,\n} from \"./useStepActions\";\nimport { useStepActions } from \"./useStepActions\";\nimport { makeRef } from \"./utils\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type StackComponentType = React.FC<{\n initialContext?: any;\n}>;\n\ntype StackflowPluginsEntry<T extends BaseActivities> =\n | StackflowReactPlugin<T>\n | StackflowPluginsEntry<T>[];\n\nexport type StackflowOptions<T extends BaseActivities> = {\n /**\n * Register activities used in your app\n */\n activities: T;\n\n /**\n * Transition duration for stack animation (millisecond)\n */\n transitionDuration: number;\n\n /**\n * Set the first activity to load at the bottom\n * (It can be overwritten by plugin)\n */\n initialActivity?: () => Extract<keyof T, string>;\n\n /**\n * Inject stackflow plugins\n */\n plugins?: Array<StackflowPluginsEntry<T>>;\n};\n\nexport type StackflowOutput<T extends BaseActivities> = {\n /**\n * Return activities\n */\n activities: T;\n\n /**\n * Created `<Stack />` component\n */\n Stack: StackComponentType;\n\n /**\n * Created `useFlow()` hooks\n */\n useFlow: () => UseActionsOutputType<T>;\n\n /**\n * Created `useStepFlow()` hooks\n */\n useStepFlow: UseStepActions<T>;\n\n /**\n * Add activity imperatively\n */\n addActivity: (options: {\n name: string;\n component: ActivityComponentType<any>;\n paramsSchema?: ActivityRegisteredEvent[\"activityParamsSchema\"];\n }) => void;\n\n /**\n * Add plugin imperatively\n */\n addPlugin: (plugin: StackflowPluginsEntry<T>) => void;\n\n /**\n * Created action triggers\n */\n actions: Pick<StackflowActions, \"dispatchEvent\" | \"getStack\"> &\n Pick<UseActionsOutputType<T>, \"push\" | \"pop\" | \"replace\"> &\n Pick<UseStepActionsOutputType<{}>, \"stepPush\" | \"stepReplace\" | \"stepPop\">;\n};\n\n/**\n * Make `<Stack />` component and `useFlow()` hooks that strictly typed with `activities`\n */\nexport function stackflow<T extends BaseActivities>(\n options: StackflowOptions<T>,\n): StackflowOutput<T> {\n if (typeof window !== \"undefined\") {\n const html = window.document.documentElement;\n\n // <html style=\"--stackflow-transition-duration:350ms;\">\n html.style.setProperty(\n \"--stackflow-transition-duration\",\n `${options.transitionDuration}ms`,\n );\n }\n\n const plugins = (options.plugins ?? [])\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>);\n const pluginInstances = plugins.map((plugin) => plugin());\n\n const activityComponentMap = Object.entries(options.activities).reduce(\n (acc, [key, Activity]) => ({\n ...acc,\n [key]:\n \"component\" in Activity\n ? React.memo(Activity.component)\n : React.memo(Activity),\n }),\n {} as {\n [key: string]: ActivityComponentType;\n },\n );\n\n const enoughPastTime = () =>\n new Date().getTime() - options.transitionDuration * 2;\n\n const staticCoreStore = makeCoreStore({\n initialEvents: [\n makeEvent(\"Initialized\", {\n transitionDuration: options.transitionDuration,\n eventDate: enoughPastTime(),\n }),\n ...Object.entries(options.activities).map(([activityName, Activity]) =>\n makeEvent(\"ActivityRegistered\", {\n activityName,\n eventDate: enoughPastTime(),\n ...(\"component\" in Activity\n ? {\n activityParamsSchema: Activity.paramsSchema,\n }\n : null),\n }),\n ),\n ],\n plugins: [],\n });\n\n const [getCoreStore, setCoreStore] = makeRef<CoreStore>();\n\n const Stack: StackComponentType = React.memo((props) => {\n const coreStore = useMemo(() => {\n const prevCoreStore = getCoreStore();\n\n // In a browser environment,\n // memoize `coreStore` so that only one `coreStore` exists throughout the entire app.\n if (isBrowser && prevCoreStore) {\n return prevCoreStore;\n }\n\n const initialPushedEventsByOption = options.initialActivity\n ? [\n makeEvent(\"Pushed\", {\n activityId: makeActivityId(),\n activityName: options.initialActivity(),\n activityParams: {},\n eventDate: enoughPastTime(),\n skipEnterActiveState: false,\n }),\n ]\n : [];\n\n const initialPushedEvents = pluginInstances.reduce<\n (PushedEvent | StepPushedEvent)[]\n >(\n (initialEvents, pluginInstance) =>\n pluginInstance.overrideInitialEvents?.({\n initialEvents,\n initialContext: props.initialContext ?? {},\n }) ?? initialEvents,\n initialPushedEventsByOption,\n );\n\n const isInitialActivityIgnored =\n initialPushedEvents.length > 0 &&\n initialPushedEventsByOption.length > 0 &&\n initialPushedEvents !== initialPushedEventsByOption;\n\n if (isInitialActivityIgnored) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` Some plugin overrides an \"initialActivity\" option.` +\n ` The \"initialActivity\" option you set to \"${initialPushedEventsByOption[0].activityName}\" in the \"stackflow\" is ignored.`,\n );\n }\n\n if (initialPushedEvents.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no initial activity.` +\n \" If you want to set the initial activity,\" +\n \" add the `initialActivity` option of the `stackflow()` function or\" +\n \" add a plugin that sets the initial activity. (e.g. `@stackflow/plugin-history-sync`)\",\n );\n }\n\n const store = makeCoreStore({\n initialEvents: [\n ...staticCoreStore.pullEvents(),\n ...initialPushedEvents,\n ],\n plugins,\n });\n\n if (isBrowser) {\n store.init();\n setCoreStore(store);\n }\n\n return store;\n }, []);\n\n return (\n <PluginsProvider value={pluginInstances}>\n <CoreProvider coreStore={coreStore}>\n <MainRenderer activityComponentMap={activityComponentMap} />\n </CoreProvider>\n </PluginsProvider>\n );\n });\n\n Stack.displayName = \"Stack\";\n\n return {\n activities: options.activities,\n Stack,\n useFlow: useActions,\n useStepFlow: useStepActions,\n addActivity(activity) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addActivity()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n activityComponentMap[activity.name] = React.memo(activity.component);\n\n staticCoreStore.actions.dispatchEvent(\"ActivityRegistered\", {\n activityName: activity.name,\n activityParamsSchema: activity.paramsSchema,\n eventDate: enoughPastTime(),\n });\n },\n addPlugin(plugin) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addPlugin()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n [plugin]\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>)\n .forEach((p) => {\n plugins.push(p);\n pluginInstances.push(p());\n });\n },\n actions: {\n getStack() {\n return (\n getCoreStore()?.actions.getStack() ??\n staticCoreStore.actions.getStack()\n );\n },\n dispatchEvent(name, parameters) {\n return getCoreStore()?.actions.dispatchEvent(name, parameters);\n },\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n getCoreStore()?.actions.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = options?.activityId ?? makeActivityId();\n\n getCoreStore()?.actions.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n return getCoreStore()?.actions.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n stepPush(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n return getCoreStore()?.actions.stepPop({});\n },\n },\n };\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeActivityId() {\n return id();\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeStepId() {\n return id();\n}\n", "import type { CoreStore, Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useDeferredValue, useSyncExternalStore } from \"../shims\";\n\nexport const CoreActionsContext = createContext<CoreStore[\"actions\"]>(\n null as any,\n);\nexport const CoreStateContext = createContext<Stack>(null as any);\n\nexport interface CoreProviderProps {\n coreStore: CoreStore;\n children: React.ReactNode;\n}\nexport const CoreProvider: React.FC<CoreProviderProps> = ({\n coreStore,\n children,\n}) => {\n const stack = useSyncExternalStore(\n coreStore.subscribe,\n coreStore.actions.getStack,\n coreStore.actions.getStack,\n );\n\n const deferredStack = useDeferredValue(stack);\n\n return (\n <CoreStateContext.Provider value={deferredStack}>\n <CoreActionsContext.Provider value={coreStore.actions}>\n {children}\n </CoreActionsContext.Provider>\n </CoreStateContext.Provider>\n );\n};\n\nCoreProvider.displayName = \"CoreProvider\";\n", "import React from \"react\";\n\nexport const useDeferredValue: typeof React.useDeferredValue =\n React.useDeferredValue ?? ((value) => value);\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useSyncExternalStore: typeof React.useSyncExternalStore =\n React.useSyncExternalStore ??\n ((subscribe, getSnapshot) => {\n const [state, setState] = useState(() => getSnapshot());\n\n useEffect(() => {\n const dispose = subscribe(() => {\n setState(() => getSnapshot());\n });\n\n return dispose;\n });\n\n return state;\n });\n", "import React from \"react\";\n\nimport { CoreActionsContext } from \"./CoreProvider\";\n\nexport const useCoreActions = () => React.useContext(CoreActionsContext);\n", "import React from \"react\";\n\nimport { CoreStateContext } from \"./CoreProvider\";\n\nexport const useCoreState = () => React.useContext(CoreStateContext);\n", "import React, { useEffect } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport PluginRenderer from \"./PluginRenderer\";\nimport { usePlugins } from \"./plugins\";\nimport type { WithRequired } from \"./utils\";\n\ninterface MainRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n}\nconst MainRenderer: React.FC<MainRendererProps> = ({\n activityComponentMap,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n const renderingPlugins = plugins.filter(\n (plugin): plugin is WithRequired<typeof plugin, \"render\"> =>\n !!plugin.render,\n );\n\n useEffect(() => {\n if (renderingPlugins.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no rendering plugin, so \"<Stack />\" doesn't render anything.` +\n ` If you want to render some UI, use \"@stackflow/plugin-renderer-basic\"` +\n ` or add another rendering plugin.`,\n );\n }\n }, [renderingPlugins]);\n\n let output = (\n <>\n {renderingPlugins.map((plugin) => (\n <PluginRenderer\n key={plugin.key}\n activityComponentMap={activityComponentMap}\n plugin={plugin}\n />\n ))}\n </>\n );\n\n plugins.forEach((plugin) => {\n output =\n plugin.wrapStack?.({\n stack: {\n ...coreState,\n render() {\n return output;\n },\n },\n }) ?? output;\n });\n\n return output;\n};\n\nMainRenderer.displayName = \"MainRenderer\";\n\nexport default MainRenderer;\n", "import React from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { ActivityProvider } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport { usePlugins } from \"./plugins\";\nimport { StackProvider } from \"./stack\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { WithRequired } from \"./utils\";\n\ninterface PluginRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n plugin: WithRequired<ReturnType<StackflowReactPlugin>, \"render\">;\n}\nconst PluginRenderer: React.FC<PluginRendererProps> = ({\n activityComponentMap,\n plugin,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n return plugin.render({\n stack: {\n ...coreState,\n render(overrideStack) {\n const stack = {\n ...coreState,\n ...overrideStack,\n };\n\n return {\n activities: stack.activities.map((activity) => ({\n ...activity,\n key: activity.id,\n render(overrideActivity) {\n const Activity = activityComponentMap[activity.name];\n\n let output: React.ReactNode = (\n <Activity params={activity.params} />\n );\n\n plugins.forEach((p) => {\n output =\n p.wrapActivity?.({\n activity: {\n ...activity,\n render: () => output,\n },\n }) ?? output;\n });\n\n return (\n <StackProvider value={stack}>\n <ActivityProvider\n key={activity.id}\n value={{\n ...activity,\n ...overrideActivity,\n }}\n >\n {output}\n </ActivityProvider>\n </StackProvider>\n );\n },\n })),\n };\n },\n },\n });\n};\n\nPluginRenderer.displayName = \"PluginRenderer\";\n\nexport default PluginRenderer;\n", "import React, { createContext } from \"react\";\n\nimport type { StackflowReactPlugin } from \"../StackflowReactPlugin\";\n\nexport type PluginsContextValue = Array<ReturnType<StackflowReactPlugin>>;\nexport const PluginsContext = createContext<PluginsContextValue>(null as any);\n\ninterface PluginsProviderProps {\n children: React.ReactNode;\n value: PluginsContextValue;\n}\nexport const PluginsProvider: React.FC<PluginsProviderProps> = ({\n children,\n value,\n}) => (\n <PluginsContext.Provider value={value}>{children}</PluginsContext.Provider>\n);\n\nPluginsProvider.displayName = \"PluginsProvider\";\n", "import { useContext } from \"react\";\n\nimport { PluginsContext } from \"./PluginsProvider\";\n\nexport function usePlugins() {\n return useContext(PluginsContext);\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type UseActionsOutputType<T extends BaseActivities> = {\n /**\n * Is transition pending\n */\n pending: boolean;\n\n /**\n * Push new activity\n */\n push: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Push new activity in the top and remove current top activity when new activity is activated\n */\n replace: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n activityId?: string;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Remove top activity\n */\n pop: (options?: { animate?: boolean }) => void;\n};\n\nconst useTransition: () => [boolean, React.TransitionStartFunction] =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n\nexport function useActions<\n T extends BaseActivities,\n>(): UseActionsOutputType<T> {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n coreActions?.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n }),\n [coreActions?.push, coreActions?.replace, coreActions?.pop, pending],\n );\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\n\nexport type UseStepActionsOutputType<P> = {\n pending: boolean;\n stepPush: (params: P, options?: {}) => void;\n stepReplace: (params: P, options?: {}) => void;\n stepPop: (options?: {}) => void;\n};\n\nexport type UseStepActions<T extends BaseActivities = {}> = <\n K extends Extract<keyof T, string>,\n>(\n activityName: K,\n) => UseStepActionsOutputType<\n T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {}\n>;\n\nconst useTransition: () => [boolean, React.TransitionStartFunction] =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n\nexport const useStepActions: UseStepActions = () => {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n stepPush(params) {\n const stepId = makeStepId();\n\n coreActions?.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n coreActions?.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n coreActions?.stepPop({});\n },\n }),\n [\n coreActions?.stepPush,\n coreActions?.stepReplace,\n coreActions?.stepPop,\n pending,\n ],\n );\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useActiveEffect = (effect: React.EffectCallback) => {\n const { isActive } = useActivity();\n\n useEffect(() => {\n if (isActive) {\n return effect();\n }\n\n return noop;\n }, [isActive]);\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst useEnterDoneEffect = (\n effect: React.EffectCallback,\n deps: React.DependencyList = [],\n) => {\n const { isTop, transitionState } = useActivity();\n\n useEffect(() => {\n if (isTop && transitionState === \"enter-done\") {\n return effect();\n }\n }, [isTop, transitionState, ...deps]);\n};\n\nexport default useEnterDoneEffect;\n"], | ||
| "mappings": "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", | ||
| "names": ["import_react", "import_react", "compare", "React", "import_react", "import_react", "import_react", "React", "import_core", "import_react", "import_core", "import_react", "import_react", "React", "import_react", "_a", "React", "React", "import_react", "React", "import_react", "React", "import_react", "import_react", "import_react", "React", "import_react", "React", "_a", "React", "_a", "import_react", "_a", "React", "import_react", "_a", "useTransition", "React", "parseActionOptions", "_a", "React", "options", "import_react", "import_react"] | ||
| "sources": ["../src/index.ts", "../src/activity/useActivity.ts", "../src/activity/ActivityProvider.tsx", "../src/utils/makeRef.ts", "../src/utils/useMemoDeep.ts", "../src/activity/useActivityParams.ts", "../src/stack/useStack.ts", "../src/stack/StackProvider.tsx", "../src/stackflow.tsx", "../src/activity/makeActivityId.ts", "../src/activity/makeStepId.ts", "../src/core/CoreProvider.tsx", "../src/shims/useDeferredValue.ts", "../src/shims/useSyncExternalStore.ts", "../src/shims/useTransition.ts", "../src/core/useCoreActions.ts", "../src/core/useCoreState.ts", "../src/MainRenderer.tsx", "../src/PluginRenderer.tsx", "../src/plugins/PluginsProvider.tsx", "../src/plugins/usePlugins.ts", "../src/useActions.ts", "../src/useStepActions.ts", "../src/useActiveEffect.ts", "../src/useEnterDoneEffect.ts", "../src/useStep.ts"], | ||
| "sourcesContent": ["export * from \"./activity/ActivityComponentType\";\nexport * from \"./activity/useActivity\";\nexport * from \"./activity/useActivityParams\";\nexport * from \"./stack/useStack\";\nexport * from \"./stackflow\";\nexport * from \"./StackflowReactPlugin\";\nexport * from \"./useActions\";\nexport * from \"./useActiveEffect\";\nexport * from \"./useEnterDoneEffect\";\nexport * from \"./useStep\";\nexport * from \"./useStepActions\";\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity state\n */\nexport const useActivity = () => useContext(ActivityContext);\n", "import type { Activity } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const ActivityContext = createContext<Activity>(null as any);\n\ninterface ActivityProviderProps {\n children: React.ReactNode;\n value: Activity;\n}\nexport const ActivityProvider: React.FC<ActivityProviderProps> = ({\n children,\n value,\n}) => (\n <ActivityContext.Provider value={useMemoDeep(value)}>\n {children}\n </ActivityContext.Provider>\n);\n\nActivityProvider.displayName = \"ActivityProvider\";\n", "export function makeRef<T>(): [() => T | null, (value: T) => void] {\n const ref: {\n value: T | null;\n } = {\n value: null,\n };\n function get() {\n return ref.value;\n }\n function set(value: T) {\n ref.value = value;\n }\n\n return [get, set];\n}\n", "import { useEffect, useRef } from \"react\";\nimport compare from \"react-fast-compare\";\n\nexport function useMemoDeep<T>(next: T) {\n const previousRef = useRef(next);\n const previous = previousRef.current;\n const isEqual = compare(previous, next);\n\n useEffect(() => {\n if (!isEqual) {\n previousRef.current = next;\n }\n });\n\n return isEqual ? previous : next;\n}\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity parameters\n */\nexport function useActivityParams<\n T extends { [key in keyof T]: string | undefined },\n>(): T {\n return useContext(ActivityContext).params as T;\n}\n", "import { useContext } from \"react\";\n\nimport { StackContext } from \"./StackProvider\";\n\n/**\n * Get overall stack state\n */\nexport const useStack = () => useContext(StackContext);\n", "import type { Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const StackContext = createContext<Stack>(null as any);\n\ninterface StackProviderProps {\n children: React.ReactNode;\n value: Stack;\n}\nexport const StackProvider: React.FC<StackProviderProps> = ({\n children,\n value,\n}) => (\n <StackContext.Provider value={useMemoDeep(value)}>\n {children}\n </StackContext.Provider>\n);\n\nStackProvider.displayName = \"StackProvider\";\n", "import type {\n ActivityRegisteredEvent,\n CoreStore,\n PushedEvent,\n StackflowActions,\n StepPushedEvent,\n} from \"@stackflow/core\";\nimport { makeCoreStore, makeEvent } from \"@stackflow/core\";\nimport React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId, makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { CoreProvider } from \"./core\";\nimport MainRenderer from \"./MainRenderer\";\nimport { PluginsProvider } from \"./plugins\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { UseActionsOutputType } from \"./useActions\";\nimport { useActions } from \"./useActions\";\nimport type {\n UseStepActions,\n UseStepActionsOutputType,\n} from \"./useStepActions\";\nimport { useStepActions } from \"./useStepActions\";\nimport { makeRef } from \"./utils\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type StackComponentType = React.FC<{\n initialContext?: any;\n}>;\n\ntype StackflowPluginsEntry<T extends BaseActivities> =\n | StackflowReactPlugin<T>\n | StackflowPluginsEntry<T>[];\n\nexport type StackflowOptions<T extends BaseActivities> = {\n /**\n * Register activities used in your app\n */\n activities: T;\n\n /**\n * Transition duration for stack animation (millisecond)\n */\n transitionDuration: number;\n\n /**\n * Set the first activity to load at the bottom\n * (It can be overwritten by plugin)\n */\n initialActivity?: () => Extract<keyof T, string>;\n\n /**\n * Inject stackflow plugins\n */\n plugins?: Array<StackflowPluginsEntry<T>>;\n};\n\nexport type StackflowOutput<T extends BaseActivities> = {\n /**\n * Return activities\n */\n activities: T;\n\n /**\n * Created `<Stack />` component\n */\n Stack: StackComponentType;\n\n /**\n * Created `useFlow()` hooks\n */\n useFlow: () => UseActionsOutputType<T>;\n\n /**\n * Created `useStepFlow()` hooks\n */\n useStepFlow: UseStepActions<T>;\n\n /**\n * Add activity imperatively\n */\n addActivity: (options: {\n name: string;\n component: ActivityComponentType<any>;\n paramsSchema?: ActivityRegisteredEvent[\"activityParamsSchema\"];\n }) => void;\n\n /**\n * Add plugin imperatively\n */\n addPlugin: (plugin: StackflowPluginsEntry<T>) => void;\n\n /**\n * Created action triggers\n */\n actions: Pick<StackflowActions, \"dispatchEvent\" | \"getStack\"> &\n Pick<UseActionsOutputType<T>, \"push\" | \"pop\" | \"replace\"> &\n Pick<UseStepActionsOutputType<{}>, \"stepPush\" | \"stepReplace\" | \"stepPop\">;\n};\n\n/**\n * Make `<Stack />` component and `useFlow()` hooks that strictly typed with `activities`\n */\nexport function stackflow<T extends BaseActivities>(\n options: StackflowOptions<T>,\n): StackflowOutput<T> {\n if (typeof window !== \"undefined\") {\n const html = window.document.documentElement;\n\n // <html style=\"--stackflow-transition-duration:350ms;\">\n html.style.setProperty(\n \"--stackflow-transition-duration\",\n `${options.transitionDuration}ms`,\n );\n }\n\n const plugins = (options.plugins ?? [])\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>);\n const pluginInstances = plugins.map((plugin) => plugin());\n\n const activityComponentMap = Object.entries(options.activities).reduce(\n (acc, [key, Activity]) => ({\n ...acc,\n [key]:\n \"component\" in Activity\n ? React.memo(Activity.component)\n : React.memo(Activity),\n }),\n {} as {\n [key: string]: ActivityComponentType;\n },\n );\n\n const enoughPastTime = () =>\n new Date().getTime() - options.transitionDuration * 2;\n\n const staticCoreStore = makeCoreStore({\n initialEvents: [\n makeEvent(\"Initialized\", {\n transitionDuration: options.transitionDuration,\n eventDate: enoughPastTime(),\n }),\n ...Object.entries(options.activities).map(([activityName, Activity]) =>\n makeEvent(\"ActivityRegistered\", {\n activityName,\n eventDate: enoughPastTime(),\n ...(\"component\" in Activity\n ? {\n activityParamsSchema: Activity.paramsSchema,\n }\n : null),\n }),\n ),\n ],\n plugins: [],\n });\n\n const [getCoreStore, setCoreStore] = makeRef<CoreStore>();\n\n const Stack: StackComponentType = React.memo((props) => {\n const coreStore = useMemo(() => {\n const prevCoreStore = getCoreStore();\n\n // In a browser environment,\n // memoize `coreStore` so that only one `coreStore` exists throughout the entire app.\n if (isBrowser && prevCoreStore) {\n return prevCoreStore;\n }\n\n const initialPushedEventsByOption = options.initialActivity\n ? [\n makeEvent(\"Pushed\", {\n activityId: makeActivityId(),\n activityName: options.initialActivity(),\n activityParams: {},\n eventDate: enoughPastTime(),\n skipEnterActiveState: false,\n }),\n ]\n : [];\n\n const initialPushedEvents = pluginInstances.reduce<\n (PushedEvent | StepPushedEvent)[]\n >(\n (initialEvents, pluginInstance) =>\n pluginInstance.overrideInitialEvents?.({\n initialEvents,\n initialContext: props.initialContext ?? {},\n }) ?? initialEvents,\n initialPushedEventsByOption,\n );\n\n const isInitialActivityIgnored =\n initialPushedEvents.length > 0 &&\n initialPushedEventsByOption.length > 0 &&\n initialPushedEvents !== initialPushedEventsByOption;\n\n if (isInitialActivityIgnored) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` Some plugin overrides an \"initialActivity\" option.` +\n ` The \"initialActivity\" option you set to \"${initialPushedEventsByOption[0].activityName}\" in the \"stackflow\" is ignored.`,\n );\n }\n\n if (initialPushedEvents.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no initial activity.` +\n \" If you want to set the initial activity,\" +\n \" add the `initialActivity` option of the `stackflow()` function or\" +\n \" add a plugin that sets the initial activity. (e.g. `@stackflow/plugin-history-sync`)\",\n );\n }\n\n const store = makeCoreStore({\n initialEvents: [\n ...staticCoreStore.pullEvents(),\n ...initialPushedEvents,\n ],\n plugins,\n });\n\n if (isBrowser) {\n store.init();\n setCoreStore(store);\n }\n\n return store;\n }, []);\n\n return (\n <PluginsProvider value={pluginInstances}>\n <CoreProvider coreStore={coreStore}>\n <MainRenderer activityComponentMap={activityComponentMap} />\n </CoreProvider>\n </PluginsProvider>\n );\n });\n\n Stack.displayName = \"Stack\";\n\n return {\n activities: options.activities,\n Stack,\n useFlow: useActions,\n useStepFlow: useStepActions,\n addActivity(activity) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addActivity()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n activityComponentMap[activity.name] = React.memo(activity.component);\n\n staticCoreStore.actions.dispatchEvent(\"ActivityRegistered\", {\n activityName: activity.name,\n activityParamsSchema: activity.paramsSchema,\n eventDate: enoughPastTime(),\n });\n },\n addPlugin(plugin) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addPlugin()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n [plugin]\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>)\n .forEach((p) => {\n plugins.push(p);\n pluginInstances.push(p());\n });\n },\n actions: {\n getStack() {\n return (\n getCoreStore()?.actions.getStack() ??\n staticCoreStore.actions.getStack()\n );\n },\n dispatchEvent(name, parameters) {\n return getCoreStore()?.actions.dispatchEvent(name, parameters);\n },\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n getCoreStore()?.actions.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = options?.activityId ?? makeActivityId();\n\n getCoreStore()?.actions.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n return getCoreStore()?.actions.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n stepPush(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n return getCoreStore()?.actions.stepPop({});\n },\n },\n };\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeActivityId() {\n return id();\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeStepId() {\n return id();\n}\n", "import type { CoreStore, Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useDeferredValue, useSyncExternalStore } from \"../shims\";\n\nexport const CoreActionsContext = createContext<CoreStore[\"actions\"]>(\n null as any,\n);\nexport const CoreStateContext = createContext<Stack>(null as any);\n\nexport interface CoreProviderProps {\n coreStore: CoreStore;\n children: React.ReactNode;\n}\nexport const CoreProvider: React.FC<CoreProviderProps> = ({\n coreStore,\n children,\n}) => {\n const stack = useSyncExternalStore(\n coreStore.subscribe,\n coreStore.actions.getStack,\n coreStore.actions.getStack,\n );\n\n const deferredStack = useDeferredValue(stack);\n\n return (\n <CoreStateContext.Provider value={deferredStack}>\n <CoreActionsContext.Provider value={coreStore.actions}>\n {children}\n </CoreActionsContext.Provider>\n </CoreStateContext.Provider>\n );\n};\n\nCoreProvider.displayName = \"CoreProvider\";\n", "import React from \"react\";\n\nexport const useDeferredValue: typeof React.useDeferredValue =\n React.useDeferredValue ?? ((value) => value);\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useSyncExternalStore: typeof React.useSyncExternalStore =\n React.useSyncExternalStore ??\n ((subscribe, getSnapshot) => {\n const [state, setState] = useState(() => getSnapshot());\n\n useEffect(() => {\n const dispose = subscribe(() => {\n setState(() => getSnapshot());\n });\n\n return dispose;\n });\n\n return state;\n });\n", "import React from \"react\";\n\nexport const useTransition: typeof React.useTransition =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n", "import React from \"react\";\n\nimport { CoreActionsContext } from \"./CoreProvider\";\n\nexport const useCoreActions = () => React.useContext(CoreActionsContext);\n", "import React from \"react\";\n\nimport { CoreStateContext } from \"./CoreProvider\";\n\nexport const useCoreState = () => React.useContext(CoreStateContext);\n", "import React, { useEffect } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport PluginRenderer from \"./PluginRenderer\";\nimport { usePlugins } from \"./plugins\";\nimport type { WithRequired } from \"./utils\";\n\ninterface MainRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n}\nconst MainRenderer: React.FC<MainRendererProps> = ({\n activityComponentMap,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n const renderingPlugins = plugins.filter(\n (plugin): plugin is WithRequired<typeof plugin, \"render\"> =>\n !!plugin.render,\n );\n\n useEffect(() => {\n if (renderingPlugins.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no rendering plugin, so \"<Stack />\" doesn't render anything.` +\n ` If you want to render some UI, use \"@stackflow/plugin-renderer-basic\"` +\n ` or add another rendering plugin.`,\n );\n }\n }, [renderingPlugins]);\n\n let output = (\n <>\n {renderingPlugins.map((plugin) => (\n <PluginRenderer\n key={plugin.key}\n activityComponentMap={activityComponentMap}\n plugin={plugin}\n />\n ))}\n </>\n );\n\n plugins.forEach((plugin) => {\n output =\n plugin.wrapStack?.({\n stack: {\n ...coreState,\n render() {\n return output;\n },\n },\n }) ?? output;\n });\n\n return output;\n};\n\nMainRenderer.displayName = \"MainRenderer\";\n\nexport default MainRenderer;\n", "import React from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { ActivityProvider } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport { usePlugins } from \"./plugins\";\nimport { StackProvider } from \"./stack\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { WithRequired } from \"./utils\";\n\ninterface PluginRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n plugin: WithRequired<ReturnType<StackflowReactPlugin>, \"render\">;\n}\nconst PluginRenderer: React.FC<PluginRendererProps> = ({\n activityComponentMap,\n plugin,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n return plugin.render({\n stack: {\n ...coreState,\n render(overrideStack) {\n const stack = {\n ...coreState,\n ...overrideStack,\n };\n\n return {\n activities: stack.activities.map((activity) => ({\n ...activity,\n key: activity.id,\n render(overrideActivity) {\n const Activity = activityComponentMap[activity.name];\n\n let output: React.ReactNode = (\n <Activity params={activity.params} />\n );\n\n plugins.forEach((p) => {\n output =\n p.wrapActivity?.({\n activity: {\n ...activity,\n render: () => output,\n },\n }) ?? output;\n });\n\n return (\n <StackProvider value={stack}>\n <ActivityProvider\n key={activity.id}\n value={{\n ...activity,\n ...overrideActivity,\n }}\n >\n {output}\n </ActivityProvider>\n </StackProvider>\n );\n },\n })),\n };\n },\n },\n });\n};\n\nPluginRenderer.displayName = \"PluginRenderer\";\n\nexport default PluginRenderer;\n", "import React, { createContext } from \"react\";\n\nimport type { StackflowReactPlugin } from \"../StackflowReactPlugin\";\n\nexport type PluginsContextValue = Array<ReturnType<StackflowReactPlugin>>;\nexport const PluginsContext = createContext<PluginsContextValue>(null as any);\n\ninterface PluginsProviderProps {\n children: React.ReactNode;\n value: PluginsContextValue;\n}\nexport const PluginsProvider: React.FC<PluginsProviderProps> = ({\n children,\n value,\n}) => (\n <PluginsContext.Provider value={value}>{children}</PluginsContext.Provider>\n);\n\nPluginsProvider.displayName = \"PluginsProvider\";\n", "import { useContext } from \"react\";\n\nimport { PluginsContext } from \"./PluginsProvider\";\n\nexport function usePlugins() {\n return useContext(PluginsContext);\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\nimport { useTransition } from \"./shims\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type UseActionsOutputType<T extends BaseActivities> = {\n /**\n * Is transition pending\n */\n pending: boolean;\n\n /**\n * Push new activity\n */\n push: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Push new activity in the top and remove current top activity when new activity is activated\n */\n replace: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n activityId?: string;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Remove top activity\n */\n pop: (options?: { animate?: boolean }) => void;\n};\n\nexport function useActions<\n T extends BaseActivities,\n>(): UseActionsOutputType<T> {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n coreActions?.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n }),\n [coreActions?.push, coreActions?.replace, coreActions?.pop, pending],\n );\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\nimport { useTransition } from \"./shims\";\n\nexport type UseStepActionsOutputType<P> = {\n pending: boolean;\n stepPush: (params: P, options?: {}) => void;\n stepReplace: (params: P, options?: {}) => void;\n stepPop: (options?: {}) => void;\n};\n\nexport type UseStepActions<T extends BaseActivities = {}> = <\n K extends Extract<keyof T, string>,\n>(\n activityName: K,\n) => UseStepActionsOutputType<\n T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {}\n>;\n\nexport const useStepActions: UseStepActions = () => {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n stepPush(params) {\n const stepId = makeStepId();\n\n coreActions?.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n coreActions?.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n coreActions?.stepPop({});\n },\n }),\n [\n coreActions?.stepPush,\n coreActions?.stepReplace,\n coreActions?.stepPop,\n pending,\n ],\n );\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useActiveEffect = (effect: React.EffectCallback) => {\n const { isActive } = useActivity();\n\n useEffect(() => {\n if (isActive) {\n return effect();\n }\n\n return noop;\n }, [isActive]);\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useEnterDoneEffect = (\n effect: React.EffectCallback,\n deps: React.DependencyList = [],\n) => {\n const { isTop, transitionState } = useActivity();\n\n useEffect(() => {\n if (isTop && transitionState === \"enter-done\") {\n return effect();\n }\n\n return noop;\n }, [isTop, transitionState, ...deps]);\n};\n", "import type { ActivityStep } from \"@stackflow/core\";\nimport { useContext } from \"react\";\n\nimport { ActivityContext } from \"./activity/ActivityProvider\";\n\n/**\n * Get current step\n */\nexport function useStep(): ActivityStep | null {\n const { steps, id } = useContext(ActivityContext);\n\n return steps.filter((step) => step.id !== id).at(-1) ?? null;\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["import_react", "import_react", "compare", "React", "import_react", "import_react", "import_react", "React", "import_core", "import_react", "import_core", "import_react", "import_react", "React", "import_react", "_a", "React", "import_react", "_a", "React", "React", "import_react", "React", "import_react", "React", "import_react", "import_react", "import_react", "React", "import_react", "React", "_a", "React", "_a", "import_react", "_a", "import_react", "parseActionOptions", "_a", "React", "options", "import_react", "import_react", "noop", "import_react", "_a", "id"] | ||
| } |
+77
-55
@@ -94,3 +94,3 @@ var __defProp = Object.defineProperty; | ||
| import { makeCoreStore, makeEvent } from "@stackflow/core"; | ||
| import React13, { useMemo as useMemo3 } from "react"; | ||
| import React14, { useMemo as useMemo3 } from "react"; | ||
@@ -110,3 +110,3 @@ // src/activity/makeActivityId.ts | ||
| // src/core/CoreProvider.tsx | ||
| import React5, { createContext as createContext3 } from "react"; | ||
| import React6, { createContext as createContext3 } from "react"; | ||
@@ -132,2 +132,7 @@ // src/shims/useDeferredValue.ts | ||
| // src/shims/useTransition.ts | ||
| import React5 from "react"; | ||
| var _a3; | ||
| var useTransition = (_a3 = React5.useTransition) != null ? _a3 : () => [false, (cb) => cb()]; | ||
| // src/core/CoreProvider.tsx | ||
@@ -148,5 +153,5 @@ var CoreActionsContext = createContext3( | ||
| const deferredStack = useDeferredValue(stack); | ||
| return /* @__PURE__ */ React5.createElement(CoreStateContext.Provider, { | ||
| return /* @__PURE__ */ React6.createElement(CoreStateContext.Provider, { | ||
| value: deferredStack | ||
| }, /* @__PURE__ */ React5.createElement(CoreActionsContext.Provider, { | ||
| }, /* @__PURE__ */ React6.createElement(CoreActionsContext.Provider, { | ||
| value: coreStore.actions | ||
@@ -158,17 +163,17 @@ }, children)); | ||
| // src/core/useCoreActions.ts | ||
| import React6 from "react"; | ||
| var useCoreActions = () => React6.useContext(CoreActionsContext); | ||
| import React7 from "react"; | ||
| var useCoreActions = () => React7.useContext(CoreActionsContext); | ||
| // src/core/useCoreState.ts | ||
| import React7 from "react"; | ||
| var useCoreState = () => React7.useContext(CoreStateContext); | ||
| import React8 from "react"; | ||
| var useCoreState = () => React8.useContext(CoreStateContext); | ||
| // src/MainRenderer.tsx | ||
| import React10, { useEffect as useEffect3 } from "react"; | ||
| import React11, { useEffect as useEffect3 } from "react"; | ||
| // src/PluginRenderer.tsx | ||
| import React9 from "react"; | ||
| import React10 from "react"; | ||
| // src/plugins/PluginsProvider.tsx | ||
| import React8, { createContext as createContext4 } from "react"; | ||
| import React9, { createContext as createContext4 } from "react"; | ||
| var PluginsContext = createContext4(null); | ||
@@ -178,3 +183,3 @@ var PluginsProvider = ({ | ||
| value | ||
| }) => /* @__PURE__ */ React8.createElement(PluginsContext.Provider, { | ||
| }) => /* @__PURE__ */ React9.createElement(PluginsContext.Provider, { | ||
| value | ||
@@ -206,8 +211,8 @@ }, children); | ||
| const Activity = activityComponentMap[activity.name]; | ||
| let output = /* @__PURE__ */ React9.createElement(Activity, { | ||
| let output = /* @__PURE__ */ React10.createElement(Activity, { | ||
| params: activity.params | ||
| }); | ||
| plugins.forEach((p) => { | ||
| var _a5, _b; | ||
| output = (_b = (_a5 = p.wrapActivity) == null ? void 0 : _a5.call(p, { | ||
| var _a4, _b; | ||
| output = (_b = (_a4 = p.wrapActivity) == null ? void 0 : _a4.call(p, { | ||
| activity: __spreadProps(__spreadValues({}, activity), { | ||
@@ -218,5 +223,5 @@ render: () => output | ||
| }); | ||
| return /* @__PURE__ */ React9.createElement(StackProvider, { | ||
| return /* @__PURE__ */ React10.createElement(StackProvider, { | ||
| value: stack | ||
| }, /* @__PURE__ */ React9.createElement(ActivityProvider, { | ||
| }, /* @__PURE__ */ React10.createElement(ActivityProvider, { | ||
| key: activity.id, | ||
@@ -251,3 +256,3 @@ value: __spreadValues(__spreadValues({}, activity), overrideActivity) | ||
| }, [renderingPlugins]); | ||
| let output = /* @__PURE__ */ React10.createElement(React10.Fragment, null, renderingPlugins.map((plugin) => /* @__PURE__ */ React10.createElement(PluginRenderer_default, { | ||
| let output = /* @__PURE__ */ React11.createElement(React11.Fragment, null, renderingPlugins.map((plugin) => /* @__PURE__ */ React11.createElement(PluginRenderer_default, { | ||
| key: plugin.key, | ||
@@ -258,4 +263,4 @@ activityComponentMap, | ||
| plugins.forEach((plugin) => { | ||
| var _a5, _b; | ||
| output = (_b = (_a5 = plugin.wrapStack) == null ? void 0 : _a5.call(plugin, { | ||
| var _a4, _b; | ||
| output = (_b = (_a4 = plugin.wrapStack) == null ? void 0 : _a4.call(plugin, { | ||
| stack: __spreadProps(__spreadValues({}, coreState), { | ||
@@ -274,3 +279,3 @@ render() { | ||
| // src/useActions.ts | ||
| import React11, { useMemo } from "react"; | ||
| import { useMemo } from "react"; | ||
| function parseActionOptions(options) { | ||
@@ -286,4 +291,2 @@ if (!options) { | ||
| } | ||
| var _a3; | ||
| var useTransition = (_a3 = React11.useTransition) != null ? _a3 : () => [false, (cb) => cb()]; | ||
| function useActions() { | ||
@@ -308,6 +311,6 @@ const coreActions = useCoreActions(); | ||
| replace(activityName, activityParams, options) { | ||
| var _a5; | ||
| var _a4; | ||
| const activityId = makeActivityId(); | ||
| coreActions == null ? void 0 : coreActions.replace({ | ||
| activityId: (_a5 = options == null ? void 0 : options.activityId) != null ? _a5 : makeActivityId(), | ||
| activityId: (_a4 = options == null ? void 0 : options.activityId) != null ? _a4 : makeActivityId(), | ||
| activityName, | ||
@@ -332,8 +335,6 @@ activityParams, | ||
| // src/useStepActions.ts | ||
| import React12, { useMemo as useMemo2 } from "react"; | ||
| var _a4; | ||
| var useTransition2 = (_a4 = React12.useTransition) != null ? _a4 : () => [false, (cb) => cb()]; | ||
| import { useMemo as useMemo2 } from "react"; | ||
| var useStepActions = () => { | ||
| const coreActions = useCoreActions(); | ||
| const [pending] = useTransition2(); | ||
| const [pending] = useTransition(); | ||
| return useMemo2( | ||
@@ -382,3 +383,3 @@ () => ({ | ||
| function stackflow(options) { | ||
| var _a5; | ||
| var _a4; | ||
| if (typeof window !== "undefined") { | ||
@@ -391,7 +392,7 @@ const html = window.document.documentElement; | ||
| } | ||
| const plugins = ((_a5 = options.plugins) != null ? _a5 : []).flat(Infinity).map((p) => p); | ||
| const plugins = ((_a4 = options.plugins) != null ? _a4 : []).flat(Infinity).map((p) => p); | ||
| const pluginInstances = plugins.map((plugin) => plugin()); | ||
| const activityComponentMap = Object.entries(options.activities).reduce( | ||
| (acc, [key, Activity]) => __spreadProps(__spreadValues({}, acc), { | ||
| [key]: "component" in Activity ? React13.memo(Activity.component) : React13.memo(Activity) | ||
| [key]: "component" in Activity ? React14.memo(Activity.component) : React14.memo(Activity) | ||
| }), | ||
@@ -419,3 +420,3 @@ {} | ||
| const [getCoreStore, setCoreStore] = makeRef(); | ||
| const Stack = React13.memo((props) => { | ||
| const Stack = React14.memo((props) => { | ||
| const coreStore = useMemo3(() => { | ||
@@ -437,6 +438,6 @@ const prevCoreStore = getCoreStore(); | ||
| (initialEvents, pluginInstance) => { | ||
| var _a6, _b, _c; | ||
| var _a5, _b, _c; | ||
| return (_c = (_b = pluginInstance.overrideInitialEvents) == null ? void 0 : _b.call(pluginInstance, { | ||
| initialEvents, | ||
| initialContext: (_a6 = props.initialContext) != null ? _a6 : {} | ||
| initialContext: (_a5 = props.initialContext) != null ? _a5 : {} | ||
| })) != null ? _c : initialEvents; | ||
@@ -470,7 +471,7 @@ }, | ||
| }, []); | ||
| return /* @__PURE__ */ React13.createElement(PluginsProvider, { | ||
| return /* @__PURE__ */ React14.createElement(PluginsProvider, { | ||
| value: pluginInstances | ||
| }, /* @__PURE__ */ React13.createElement(CoreProvider, { | ||
| }, /* @__PURE__ */ React14.createElement(CoreProvider, { | ||
| coreStore | ||
| }, /* @__PURE__ */ React13.createElement(MainRenderer_default, { | ||
| }, /* @__PURE__ */ React14.createElement(MainRenderer_default, { | ||
| activityComponentMap | ||
@@ -492,3 +493,3 @@ }))); | ||
| } | ||
| activityComponentMap[activity.name] = React13.memo(activity.component); | ||
| activityComponentMap[activity.name] = React14.memo(activity.component); | ||
| staticCoreStore.actions.dispatchEvent("ActivityRegistered", { | ||
@@ -514,13 +515,13 @@ activityName: activity.name, | ||
| getStack() { | ||
| var _a6, _b; | ||
| return (_b = (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.getStack()) != null ? _b : staticCoreStore.actions.getStack(); | ||
| var _a5, _b; | ||
| return (_b = (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.getStack()) != null ? _b : staticCoreStore.actions.getStack(); | ||
| }, | ||
| dispatchEvent(name, parameters) { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.dispatchEvent(name, parameters); | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.dispatchEvent(name, parameters); | ||
| }, | ||
| push(activityName, activityParams, options2) { | ||
| var _a6; | ||
| var _a5; | ||
| const activityId = makeActivityId(); | ||
| (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.push({ | ||
| (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.push({ | ||
| activityId, | ||
@@ -536,4 +537,4 @@ activityName, | ||
| replace(activityName, activityParams, options2) { | ||
| var _a6, _b, _c; | ||
| const activityId = (_a6 = options2 == null ? void 0 : options2.activityId) != null ? _a6 : makeActivityId(); | ||
| var _a5, _b, _c; | ||
| const activityId = (_a5 = options2 == null ? void 0 : options2.activityId) != null ? _a5 : makeActivityId(); | ||
| (_c = getCoreStore()) == null ? void 0 : _c.actions.replace({ | ||
@@ -550,4 +551,4 @@ activityId: (_b = options2 == null ? void 0 : options2.activityId) != null ? _b : makeActivityId(), | ||
| pop(options2) { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.pop({ | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.pop({ | ||
| skipExitActiveState: parseActionOptions2(options2).skipActiveState | ||
@@ -557,5 +558,5 @@ }); | ||
| stepPush(params) { | ||
| var _a6; | ||
| var _a5; | ||
| const stepId = makeStepId(); | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepPush({ | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepPush({ | ||
| stepId, | ||
@@ -566,5 +567,5 @@ stepParams: params | ||
| stepReplace(params) { | ||
| var _a6; | ||
| var _a5; | ||
| const stepId = makeStepId(); | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepReplace({ | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepReplace({ | ||
| stepId, | ||
@@ -575,4 +576,4 @@ stepParams: params | ||
| stepPop() { | ||
| var _a6; | ||
| return (_a6 = getCoreStore()) == null ? void 0 : _a6.actions.stepPop({}); | ||
| var _a5; | ||
| return (_a5 = getCoreStore()) == null ? void 0 : _a5.actions.stepPop({}); | ||
| } | ||
@@ -599,2 +600,21 @@ } | ||
| import { useEffect as useEffect5 } from "react"; | ||
| var noop2 = () => { | ||
| }; | ||
| var useEnterDoneEffect = (effect, deps = []) => { | ||
| const { isTop, transitionState } = useActivity(); | ||
| useEffect5(() => { | ||
| if (isTop && transitionState === "enter-done") { | ||
| return effect(); | ||
| } | ||
| return noop2; | ||
| }, [isTop, transitionState, ...deps]); | ||
| }; | ||
| // src/useStep.ts | ||
| import { useContext as useContext5 } from "react"; | ||
| function useStep() { | ||
| var _a4; | ||
| const { steps, id: id3 } = useContext5(ActivityContext); | ||
| return (_a4 = steps.filter((step) => step.id !== id3).at(-1)) != null ? _a4 : null; | ||
| } | ||
| export { | ||
@@ -606,5 +626,7 @@ stackflow, | ||
| useActivityParams, | ||
| useEnterDoneEffect, | ||
| useStack, | ||
| useStep, | ||
| useStepActions | ||
| }; | ||
| //# sourceMappingURL=index.mjs.map |
| { | ||
| "version": 3, | ||
| "sources": ["../src/activity/useActivity.ts", "../src/activity/ActivityProvider.tsx", "../src/utils/makeRef.ts", "../src/utils/useMemoDeep.ts", "../src/activity/useActivityParams.ts", "../src/stack/useStack.ts", "../src/stack/StackProvider.tsx", "../src/stackflow.tsx", "../src/activity/makeActivityId.ts", "../src/activity/makeStepId.ts", "../src/core/CoreProvider.tsx", "../src/shims/useDeferredValue.ts", "../src/shims/useSyncExternalStore.ts", "../src/core/useCoreActions.ts", "../src/core/useCoreState.ts", "../src/MainRenderer.tsx", "../src/PluginRenderer.tsx", "../src/plugins/PluginsProvider.tsx", "../src/plugins/usePlugins.ts", "../src/useActions.ts", "../src/useStepActions.ts", "../src/useActiveEffect.ts", "../src/useEnterDoneEffect.ts"], | ||
| "sourcesContent": ["import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity state\n */\nexport const useActivity = () => useContext(ActivityContext);\n", "import type { Activity } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const ActivityContext = createContext<Activity>(null as any);\n\ninterface ActivityProviderProps {\n children: React.ReactNode;\n value: Activity;\n}\nexport const ActivityProvider: React.FC<ActivityProviderProps> = ({\n children,\n value,\n}) => (\n <ActivityContext.Provider value={useMemoDeep(value)}>\n {children}\n </ActivityContext.Provider>\n);\n\nActivityProvider.displayName = \"ActivityProvider\";\n", "export function makeRef<T>(): [() => T | null, (value: T) => void] {\n const ref: {\n value: T | null;\n } = {\n value: null,\n };\n function get() {\n return ref.value;\n }\n function set(value: T) {\n ref.value = value;\n }\n\n return [get, set];\n}\n", "import { useEffect, useRef } from \"react\";\nimport compare from \"react-fast-compare\";\n\nexport function useMemoDeep<T>(next: T) {\n const previousRef = useRef(next);\n const previous = previousRef.current;\n const isEqual = compare(previous, next);\n\n useEffect(() => {\n if (!isEqual) {\n previousRef.current = next;\n }\n });\n\n return isEqual ? previous : next;\n}\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity parameters\n */\nexport function useActivityParams<\n T extends { [key in keyof T]: string | undefined },\n>(): T {\n return useContext(ActivityContext).params as T;\n}\n", "import { useContext } from \"react\";\n\nimport { StackContext } from \"./StackProvider\";\n\n/**\n * Get overall stack state\n */\nexport const useStack = () => useContext(StackContext);\n", "import type { Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const StackContext = createContext<Stack>(null as any);\n\ninterface StackProviderProps {\n children: React.ReactNode;\n value: Stack;\n}\nexport const StackProvider: React.FC<StackProviderProps> = ({\n children,\n value,\n}) => (\n <StackContext.Provider value={useMemoDeep(value)}>\n {children}\n </StackContext.Provider>\n);\n\nStackProvider.displayName = \"StackProvider\";\n", "import type {\n ActivityRegisteredEvent,\n CoreStore,\n PushedEvent,\n StackflowActions,\n StepPushedEvent,\n} from \"@stackflow/core\";\nimport { makeCoreStore, makeEvent } from \"@stackflow/core\";\nimport React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId, makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { CoreProvider } from \"./core\";\nimport MainRenderer from \"./MainRenderer\";\nimport { PluginsProvider } from \"./plugins\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { UseActionsOutputType } from \"./useActions\";\nimport { useActions } from \"./useActions\";\nimport type {\n UseStepActions,\n UseStepActionsOutputType,\n} from \"./useStepActions\";\nimport { useStepActions } from \"./useStepActions\";\nimport { makeRef } from \"./utils\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type StackComponentType = React.FC<{\n initialContext?: any;\n}>;\n\ntype StackflowPluginsEntry<T extends BaseActivities> =\n | StackflowReactPlugin<T>\n | StackflowPluginsEntry<T>[];\n\nexport type StackflowOptions<T extends BaseActivities> = {\n /**\n * Register activities used in your app\n */\n activities: T;\n\n /**\n * Transition duration for stack animation (millisecond)\n */\n transitionDuration: number;\n\n /**\n * Set the first activity to load at the bottom\n * (It can be overwritten by plugin)\n */\n initialActivity?: () => Extract<keyof T, string>;\n\n /**\n * Inject stackflow plugins\n */\n plugins?: Array<StackflowPluginsEntry<T>>;\n};\n\nexport type StackflowOutput<T extends BaseActivities> = {\n /**\n * Return activities\n */\n activities: T;\n\n /**\n * Created `<Stack />` component\n */\n Stack: StackComponentType;\n\n /**\n * Created `useFlow()` hooks\n */\n useFlow: () => UseActionsOutputType<T>;\n\n /**\n * Created `useStepFlow()` hooks\n */\n useStepFlow: UseStepActions<T>;\n\n /**\n * Add activity imperatively\n */\n addActivity: (options: {\n name: string;\n component: ActivityComponentType<any>;\n paramsSchema?: ActivityRegisteredEvent[\"activityParamsSchema\"];\n }) => void;\n\n /**\n * Add plugin imperatively\n */\n addPlugin: (plugin: StackflowPluginsEntry<T>) => void;\n\n /**\n * Created action triggers\n */\n actions: Pick<StackflowActions, \"dispatchEvent\" | \"getStack\"> &\n Pick<UseActionsOutputType<T>, \"push\" | \"pop\" | \"replace\"> &\n Pick<UseStepActionsOutputType<{}>, \"stepPush\" | \"stepReplace\" | \"stepPop\">;\n};\n\n/**\n * Make `<Stack />` component and `useFlow()` hooks that strictly typed with `activities`\n */\nexport function stackflow<T extends BaseActivities>(\n options: StackflowOptions<T>,\n): StackflowOutput<T> {\n if (typeof window !== \"undefined\") {\n const html = window.document.documentElement;\n\n // <html style=\"--stackflow-transition-duration:350ms;\">\n html.style.setProperty(\n \"--stackflow-transition-duration\",\n `${options.transitionDuration}ms`,\n );\n }\n\n const plugins = (options.plugins ?? [])\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>);\n const pluginInstances = plugins.map((plugin) => plugin());\n\n const activityComponentMap = Object.entries(options.activities).reduce(\n (acc, [key, Activity]) => ({\n ...acc,\n [key]:\n \"component\" in Activity\n ? React.memo(Activity.component)\n : React.memo(Activity),\n }),\n {} as {\n [key: string]: ActivityComponentType;\n },\n );\n\n const enoughPastTime = () =>\n new Date().getTime() - options.transitionDuration * 2;\n\n const staticCoreStore = makeCoreStore({\n initialEvents: [\n makeEvent(\"Initialized\", {\n transitionDuration: options.transitionDuration,\n eventDate: enoughPastTime(),\n }),\n ...Object.entries(options.activities).map(([activityName, Activity]) =>\n makeEvent(\"ActivityRegistered\", {\n activityName,\n eventDate: enoughPastTime(),\n ...(\"component\" in Activity\n ? {\n activityParamsSchema: Activity.paramsSchema,\n }\n : null),\n }),\n ),\n ],\n plugins: [],\n });\n\n const [getCoreStore, setCoreStore] = makeRef<CoreStore>();\n\n const Stack: StackComponentType = React.memo((props) => {\n const coreStore = useMemo(() => {\n const prevCoreStore = getCoreStore();\n\n // In a browser environment,\n // memoize `coreStore` so that only one `coreStore` exists throughout the entire app.\n if (isBrowser && prevCoreStore) {\n return prevCoreStore;\n }\n\n const initialPushedEventsByOption = options.initialActivity\n ? [\n makeEvent(\"Pushed\", {\n activityId: makeActivityId(),\n activityName: options.initialActivity(),\n activityParams: {},\n eventDate: enoughPastTime(),\n skipEnterActiveState: false,\n }),\n ]\n : [];\n\n const initialPushedEvents = pluginInstances.reduce<\n (PushedEvent | StepPushedEvent)[]\n >(\n (initialEvents, pluginInstance) =>\n pluginInstance.overrideInitialEvents?.({\n initialEvents,\n initialContext: props.initialContext ?? {},\n }) ?? initialEvents,\n initialPushedEventsByOption,\n );\n\n const isInitialActivityIgnored =\n initialPushedEvents.length > 0 &&\n initialPushedEventsByOption.length > 0 &&\n initialPushedEvents !== initialPushedEventsByOption;\n\n if (isInitialActivityIgnored) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` Some plugin overrides an \"initialActivity\" option.` +\n ` The \"initialActivity\" option you set to \"${initialPushedEventsByOption[0].activityName}\" in the \"stackflow\" is ignored.`,\n );\n }\n\n if (initialPushedEvents.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no initial activity.` +\n \" If you want to set the initial activity,\" +\n \" add the `initialActivity` option of the `stackflow()` function or\" +\n \" add a plugin that sets the initial activity. (e.g. `@stackflow/plugin-history-sync`)\",\n );\n }\n\n const store = makeCoreStore({\n initialEvents: [\n ...staticCoreStore.pullEvents(),\n ...initialPushedEvents,\n ],\n plugins,\n });\n\n if (isBrowser) {\n store.init();\n setCoreStore(store);\n }\n\n return store;\n }, []);\n\n return (\n <PluginsProvider value={pluginInstances}>\n <CoreProvider coreStore={coreStore}>\n <MainRenderer activityComponentMap={activityComponentMap} />\n </CoreProvider>\n </PluginsProvider>\n );\n });\n\n Stack.displayName = \"Stack\";\n\n return {\n activities: options.activities,\n Stack,\n useFlow: useActions,\n useStepFlow: useStepActions,\n addActivity(activity) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addActivity()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n activityComponentMap[activity.name] = React.memo(activity.component);\n\n staticCoreStore.actions.dispatchEvent(\"ActivityRegistered\", {\n activityName: activity.name,\n activityParamsSchema: activity.paramsSchema,\n eventDate: enoughPastTime(),\n });\n },\n addPlugin(plugin) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addPlugin()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n [plugin]\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>)\n .forEach((p) => {\n plugins.push(p);\n pluginInstances.push(p());\n });\n },\n actions: {\n getStack() {\n return (\n getCoreStore()?.actions.getStack() ??\n staticCoreStore.actions.getStack()\n );\n },\n dispatchEvent(name, parameters) {\n return getCoreStore()?.actions.dispatchEvent(name, parameters);\n },\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n getCoreStore()?.actions.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = options?.activityId ?? makeActivityId();\n\n getCoreStore()?.actions.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n return getCoreStore()?.actions.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n stepPush(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n return getCoreStore()?.actions.stepPop({});\n },\n },\n };\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeActivityId() {\n return id();\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeStepId() {\n return id();\n}\n", "import type { CoreStore, Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useDeferredValue, useSyncExternalStore } from \"../shims\";\n\nexport const CoreActionsContext = createContext<CoreStore[\"actions\"]>(\n null as any,\n);\nexport const CoreStateContext = createContext<Stack>(null as any);\n\nexport interface CoreProviderProps {\n coreStore: CoreStore;\n children: React.ReactNode;\n}\nexport const CoreProvider: React.FC<CoreProviderProps> = ({\n coreStore,\n children,\n}) => {\n const stack = useSyncExternalStore(\n coreStore.subscribe,\n coreStore.actions.getStack,\n coreStore.actions.getStack,\n );\n\n const deferredStack = useDeferredValue(stack);\n\n return (\n <CoreStateContext.Provider value={deferredStack}>\n <CoreActionsContext.Provider value={coreStore.actions}>\n {children}\n </CoreActionsContext.Provider>\n </CoreStateContext.Provider>\n );\n};\n\nCoreProvider.displayName = \"CoreProvider\";\n", "import React from \"react\";\n\nexport const useDeferredValue: typeof React.useDeferredValue =\n React.useDeferredValue ?? ((value) => value);\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useSyncExternalStore: typeof React.useSyncExternalStore =\n React.useSyncExternalStore ??\n ((subscribe, getSnapshot) => {\n const [state, setState] = useState(() => getSnapshot());\n\n useEffect(() => {\n const dispose = subscribe(() => {\n setState(() => getSnapshot());\n });\n\n return dispose;\n });\n\n return state;\n });\n", "import React from \"react\";\n\nimport { CoreActionsContext } from \"./CoreProvider\";\n\nexport const useCoreActions = () => React.useContext(CoreActionsContext);\n", "import React from \"react\";\n\nimport { CoreStateContext } from \"./CoreProvider\";\n\nexport const useCoreState = () => React.useContext(CoreStateContext);\n", "import React, { useEffect } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport PluginRenderer from \"./PluginRenderer\";\nimport { usePlugins } from \"./plugins\";\nimport type { WithRequired } from \"./utils\";\n\ninterface MainRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n}\nconst MainRenderer: React.FC<MainRendererProps> = ({\n activityComponentMap,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n const renderingPlugins = plugins.filter(\n (plugin): plugin is WithRequired<typeof plugin, \"render\"> =>\n !!plugin.render,\n );\n\n useEffect(() => {\n if (renderingPlugins.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no rendering plugin, so \"<Stack />\" doesn't render anything.` +\n ` If you want to render some UI, use \"@stackflow/plugin-renderer-basic\"` +\n ` or add another rendering plugin.`,\n );\n }\n }, [renderingPlugins]);\n\n let output = (\n <>\n {renderingPlugins.map((plugin) => (\n <PluginRenderer\n key={plugin.key}\n activityComponentMap={activityComponentMap}\n plugin={plugin}\n />\n ))}\n </>\n );\n\n plugins.forEach((plugin) => {\n output =\n plugin.wrapStack?.({\n stack: {\n ...coreState,\n render() {\n return output;\n },\n },\n }) ?? output;\n });\n\n return output;\n};\n\nMainRenderer.displayName = \"MainRenderer\";\n\nexport default MainRenderer;\n", "import React from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { ActivityProvider } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport { usePlugins } from \"./plugins\";\nimport { StackProvider } from \"./stack\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { WithRequired } from \"./utils\";\n\ninterface PluginRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n plugin: WithRequired<ReturnType<StackflowReactPlugin>, \"render\">;\n}\nconst PluginRenderer: React.FC<PluginRendererProps> = ({\n activityComponentMap,\n plugin,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n return plugin.render({\n stack: {\n ...coreState,\n render(overrideStack) {\n const stack = {\n ...coreState,\n ...overrideStack,\n };\n\n return {\n activities: stack.activities.map((activity) => ({\n ...activity,\n key: activity.id,\n render(overrideActivity) {\n const Activity = activityComponentMap[activity.name];\n\n let output: React.ReactNode = (\n <Activity params={activity.params} />\n );\n\n plugins.forEach((p) => {\n output =\n p.wrapActivity?.({\n activity: {\n ...activity,\n render: () => output,\n },\n }) ?? output;\n });\n\n return (\n <StackProvider value={stack}>\n <ActivityProvider\n key={activity.id}\n value={{\n ...activity,\n ...overrideActivity,\n }}\n >\n {output}\n </ActivityProvider>\n </StackProvider>\n );\n },\n })),\n };\n },\n },\n });\n};\n\nPluginRenderer.displayName = \"PluginRenderer\";\n\nexport default PluginRenderer;\n", "import React, { createContext } from \"react\";\n\nimport type { StackflowReactPlugin } from \"../StackflowReactPlugin\";\n\nexport type PluginsContextValue = Array<ReturnType<StackflowReactPlugin>>;\nexport const PluginsContext = createContext<PluginsContextValue>(null as any);\n\ninterface PluginsProviderProps {\n children: React.ReactNode;\n value: PluginsContextValue;\n}\nexport const PluginsProvider: React.FC<PluginsProviderProps> = ({\n children,\n value,\n}) => (\n <PluginsContext.Provider value={value}>{children}</PluginsContext.Provider>\n);\n\nPluginsProvider.displayName = \"PluginsProvider\";\n", "import { useContext } from \"react\";\n\nimport { PluginsContext } from \"./PluginsProvider\";\n\nexport function usePlugins() {\n return useContext(PluginsContext);\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type UseActionsOutputType<T extends BaseActivities> = {\n /**\n * Is transition pending\n */\n pending: boolean;\n\n /**\n * Push new activity\n */\n push: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Push new activity in the top and remove current top activity when new activity is activated\n */\n replace: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n activityId?: string;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Remove top activity\n */\n pop: (options?: { animate?: boolean }) => void;\n};\n\nconst useTransition: () => [boolean, React.TransitionStartFunction] =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n\nexport function useActions<\n T extends BaseActivities,\n>(): UseActionsOutputType<T> {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n coreActions?.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n }),\n [coreActions?.push, coreActions?.replace, coreActions?.pop, pending],\n );\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\n\nexport type UseStepActionsOutputType<P> = {\n pending: boolean;\n stepPush: (params: P, options?: {}) => void;\n stepReplace: (params: P, options?: {}) => void;\n stepPop: (options?: {}) => void;\n};\n\nexport type UseStepActions<T extends BaseActivities = {}> = <\n K extends Extract<keyof T, string>,\n>(\n activityName: K,\n) => UseStepActionsOutputType<\n T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {}\n>;\n\nconst useTransition: () => [boolean, React.TransitionStartFunction] =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n\nexport const useStepActions: UseStepActions = () => {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n stepPush(params) {\n const stepId = makeStepId();\n\n coreActions?.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n coreActions?.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n coreActions?.stepPop({});\n },\n }),\n [\n coreActions?.stepPush,\n coreActions?.stepReplace,\n coreActions?.stepPop,\n pending,\n ],\n );\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useActiveEffect = (effect: React.EffectCallback) => {\n const { isActive } = useActivity();\n\n useEffect(() => {\n if (isActive) {\n return effect();\n }\n\n return noop;\n }, [isActive]);\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst useEnterDoneEffect = (\n effect: React.EffectCallback,\n deps: React.DependencyList = [],\n) => {\n const { isTop, transitionState } = useActivity();\n\n useEffect(() => {\n if (isTop && transitionState === \"enter-done\") {\n return effect();\n }\n }, [isTop, transitionState, ...deps]);\n};\n\nexport default useEnterDoneEffect;\n"], | ||
| "mappings": "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", | ||
| "names": ["useContext", "useContext", "useContext", "React", "createContext", "createContext", "React", "useContext", "React", "useMemo", "id", "React", "createContext", "React", "React", "useEffect", "_a", "createContext", "React", "React", "React", "React", "React", "React", "useEffect", "React", "React", "createContext", "useContext", "useContext", "React", "_a", "useEffect", "React", "_a", "React", "_a", "React", "React", "useMemo", "_a", "useTransition", "React", "useMemo", "parseActionOptions", "_a", "React", "useMemo", "options", "useEffect", "useEffect", "useEffect"] | ||
| "sources": ["../src/activity/useActivity.ts", "../src/activity/ActivityProvider.tsx", "../src/utils/makeRef.ts", "../src/utils/useMemoDeep.ts", "../src/activity/useActivityParams.ts", "../src/stack/useStack.ts", "../src/stack/StackProvider.tsx", "../src/stackflow.tsx", "../src/activity/makeActivityId.ts", "../src/activity/makeStepId.ts", "../src/core/CoreProvider.tsx", "../src/shims/useDeferredValue.ts", "../src/shims/useSyncExternalStore.ts", "../src/shims/useTransition.ts", "../src/core/useCoreActions.ts", "../src/core/useCoreState.ts", "../src/MainRenderer.tsx", "../src/PluginRenderer.tsx", "../src/plugins/PluginsProvider.tsx", "../src/plugins/usePlugins.ts", "../src/useActions.ts", "../src/useStepActions.ts", "../src/useActiveEffect.ts", "../src/useEnterDoneEffect.ts", "../src/useStep.ts"], | ||
| "sourcesContent": ["import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity state\n */\nexport const useActivity = () => useContext(ActivityContext);\n", "import type { Activity } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const ActivityContext = createContext<Activity>(null as any);\n\ninterface ActivityProviderProps {\n children: React.ReactNode;\n value: Activity;\n}\nexport const ActivityProvider: React.FC<ActivityProviderProps> = ({\n children,\n value,\n}) => (\n <ActivityContext.Provider value={useMemoDeep(value)}>\n {children}\n </ActivityContext.Provider>\n);\n\nActivityProvider.displayName = \"ActivityProvider\";\n", "export function makeRef<T>(): [() => T | null, (value: T) => void] {\n const ref: {\n value: T | null;\n } = {\n value: null,\n };\n function get() {\n return ref.value;\n }\n function set(value: T) {\n ref.value = value;\n }\n\n return [get, set];\n}\n", "import { useEffect, useRef } from \"react\";\nimport compare from \"react-fast-compare\";\n\nexport function useMemoDeep<T>(next: T) {\n const previousRef = useRef(next);\n const previous = previousRef.current;\n const isEqual = compare(previous, next);\n\n useEffect(() => {\n if (!isEqual) {\n previousRef.current = next;\n }\n });\n\n return isEqual ? previous : next;\n}\n", "import { useContext } from \"react\";\n\nimport { ActivityContext } from \"./ActivityProvider\";\n\n/**\n * Get current activity parameters\n */\nexport function useActivityParams<\n T extends { [key in keyof T]: string | undefined },\n>(): T {\n return useContext(ActivityContext).params as T;\n}\n", "import { useContext } from \"react\";\n\nimport { StackContext } from \"./StackProvider\";\n\n/**\n * Get overall stack state\n */\nexport const useStack = () => useContext(StackContext);\n", "import type { Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useMemoDeep } from \"../utils\";\n\nexport const StackContext = createContext<Stack>(null as any);\n\ninterface StackProviderProps {\n children: React.ReactNode;\n value: Stack;\n}\nexport const StackProvider: React.FC<StackProviderProps> = ({\n children,\n value,\n}) => (\n <StackContext.Provider value={useMemoDeep(value)}>\n {children}\n </StackContext.Provider>\n);\n\nStackProvider.displayName = \"StackProvider\";\n", "import type {\n ActivityRegisteredEvent,\n CoreStore,\n PushedEvent,\n StackflowActions,\n StepPushedEvent,\n} from \"@stackflow/core\";\nimport { makeCoreStore, makeEvent } from \"@stackflow/core\";\nimport React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId, makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { CoreProvider } from \"./core\";\nimport MainRenderer from \"./MainRenderer\";\nimport { PluginsProvider } from \"./plugins\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { UseActionsOutputType } from \"./useActions\";\nimport { useActions } from \"./useActions\";\nimport type {\n UseStepActions,\n UseStepActionsOutputType,\n} from \"./useStepActions\";\nimport { useStepActions } from \"./useStepActions\";\nimport { makeRef } from \"./utils\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type StackComponentType = React.FC<{\n initialContext?: any;\n}>;\n\ntype StackflowPluginsEntry<T extends BaseActivities> =\n | StackflowReactPlugin<T>\n | StackflowPluginsEntry<T>[];\n\nexport type StackflowOptions<T extends BaseActivities> = {\n /**\n * Register activities used in your app\n */\n activities: T;\n\n /**\n * Transition duration for stack animation (millisecond)\n */\n transitionDuration: number;\n\n /**\n * Set the first activity to load at the bottom\n * (It can be overwritten by plugin)\n */\n initialActivity?: () => Extract<keyof T, string>;\n\n /**\n * Inject stackflow plugins\n */\n plugins?: Array<StackflowPluginsEntry<T>>;\n};\n\nexport type StackflowOutput<T extends BaseActivities> = {\n /**\n * Return activities\n */\n activities: T;\n\n /**\n * Created `<Stack />` component\n */\n Stack: StackComponentType;\n\n /**\n * Created `useFlow()` hooks\n */\n useFlow: () => UseActionsOutputType<T>;\n\n /**\n * Created `useStepFlow()` hooks\n */\n useStepFlow: UseStepActions<T>;\n\n /**\n * Add activity imperatively\n */\n addActivity: (options: {\n name: string;\n component: ActivityComponentType<any>;\n paramsSchema?: ActivityRegisteredEvent[\"activityParamsSchema\"];\n }) => void;\n\n /**\n * Add plugin imperatively\n */\n addPlugin: (plugin: StackflowPluginsEntry<T>) => void;\n\n /**\n * Created action triggers\n */\n actions: Pick<StackflowActions, \"dispatchEvent\" | \"getStack\"> &\n Pick<UseActionsOutputType<T>, \"push\" | \"pop\" | \"replace\"> &\n Pick<UseStepActionsOutputType<{}>, \"stepPush\" | \"stepReplace\" | \"stepPop\">;\n};\n\n/**\n * Make `<Stack />` component and `useFlow()` hooks that strictly typed with `activities`\n */\nexport function stackflow<T extends BaseActivities>(\n options: StackflowOptions<T>,\n): StackflowOutput<T> {\n if (typeof window !== \"undefined\") {\n const html = window.document.documentElement;\n\n // <html style=\"--stackflow-transition-duration:350ms;\">\n html.style.setProperty(\n \"--stackflow-transition-duration\",\n `${options.transitionDuration}ms`,\n );\n }\n\n const plugins = (options.plugins ?? [])\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>);\n const pluginInstances = plugins.map((plugin) => plugin());\n\n const activityComponentMap = Object.entries(options.activities).reduce(\n (acc, [key, Activity]) => ({\n ...acc,\n [key]:\n \"component\" in Activity\n ? React.memo(Activity.component)\n : React.memo(Activity),\n }),\n {} as {\n [key: string]: ActivityComponentType;\n },\n );\n\n const enoughPastTime = () =>\n new Date().getTime() - options.transitionDuration * 2;\n\n const staticCoreStore = makeCoreStore({\n initialEvents: [\n makeEvent(\"Initialized\", {\n transitionDuration: options.transitionDuration,\n eventDate: enoughPastTime(),\n }),\n ...Object.entries(options.activities).map(([activityName, Activity]) =>\n makeEvent(\"ActivityRegistered\", {\n activityName,\n eventDate: enoughPastTime(),\n ...(\"component\" in Activity\n ? {\n activityParamsSchema: Activity.paramsSchema,\n }\n : null),\n }),\n ),\n ],\n plugins: [],\n });\n\n const [getCoreStore, setCoreStore] = makeRef<CoreStore>();\n\n const Stack: StackComponentType = React.memo((props) => {\n const coreStore = useMemo(() => {\n const prevCoreStore = getCoreStore();\n\n // In a browser environment,\n // memoize `coreStore` so that only one `coreStore` exists throughout the entire app.\n if (isBrowser && prevCoreStore) {\n return prevCoreStore;\n }\n\n const initialPushedEventsByOption = options.initialActivity\n ? [\n makeEvent(\"Pushed\", {\n activityId: makeActivityId(),\n activityName: options.initialActivity(),\n activityParams: {},\n eventDate: enoughPastTime(),\n skipEnterActiveState: false,\n }),\n ]\n : [];\n\n const initialPushedEvents = pluginInstances.reduce<\n (PushedEvent | StepPushedEvent)[]\n >(\n (initialEvents, pluginInstance) =>\n pluginInstance.overrideInitialEvents?.({\n initialEvents,\n initialContext: props.initialContext ?? {},\n }) ?? initialEvents,\n initialPushedEventsByOption,\n );\n\n const isInitialActivityIgnored =\n initialPushedEvents.length > 0 &&\n initialPushedEventsByOption.length > 0 &&\n initialPushedEvents !== initialPushedEventsByOption;\n\n if (isInitialActivityIgnored) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` Some plugin overrides an \"initialActivity\" option.` +\n ` The \"initialActivity\" option you set to \"${initialPushedEventsByOption[0].activityName}\" in the \"stackflow\" is ignored.`,\n );\n }\n\n if (initialPushedEvents.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no initial activity.` +\n \" If you want to set the initial activity,\" +\n \" add the `initialActivity` option of the `stackflow()` function or\" +\n \" add a plugin that sets the initial activity. (e.g. `@stackflow/plugin-history-sync`)\",\n );\n }\n\n const store = makeCoreStore({\n initialEvents: [\n ...staticCoreStore.pullEvents(),\n ...initialPushedEvents,\n ],\n plugins,\n });\n\n if (isBrowser) {\n store.init();\n setCoreStore(store);\n }\n\n return store;\n }, []);\n\n return (\n <PluginsProvider value={pluginInstances}>\n <CoreProvider coreStore={coreStore}>\n <MainRenderer activityComponentMap={activityComponentMap} />\n </CoreProvider>\n </PluginsProvider>\n );\n });\n\n Stack.displayName = \"Stack\";\n\n return {\n activities: options.activities,\n Stack,\n useFlow: useActions,\n useStepFlow: useStepActions,\n addActivity(activity) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addActivity()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n activityComponentMap[activity.name] = React.memo(activity.component);\n\n staticCoreStore.actions.dispatchEvent(\"ActivityRegistered\", {\n activityName: activity.name,\n activityParamsSchema: activity.paramsSchema,\n eventDate: enoughPastTime(),\n });\n },\n addPlugin(plugin) {\n if (getCoreStore()) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n \" `addPlugin()` API cannot be called after a `<Stack />` component has been rendered\",\n );\n\n return;\n }\n\n [plugin]\n .flat(Infinity as 0)\n .map((p) => p as StackflowReactPlugin<T>)\n .forEach((p) => {\n plugins.push(p);\n pluginInstances.push(p());\n });\n },\n actions: {\n getStack() {\n return (\n getCoreStore()?.actions.getStack() ??\n staticCoreStore.actions.getStack()\n );\n },\n dispatchEvent(name, parameters) {\n return getCoreStore()?.actions.dispatchEvent(name, parameters);\n },\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n getCoreStore()?.actions.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = options?.activityId ?? makeActivityId();\n\n getCoreStore()?.actions.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n return getCoreStore()?.actions.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n stepPush(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n return getCoreStore()?.actions.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n return getCoreStore()?.actions.stepPop({});\n },\n },\n };\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeActivityId() {\n return id();\n}\n", "import { id } from \"@stackflow/core\";\n\nexport function makeStepId() {\n return id();\n}\n", "import type { CoreStore, Stack } from \"@stackflow/core\";\nimport React, { createContext } from \"react\";\n\nimport { useDeferredValue, useSyncExternalStore } from \"../shims\";\n\nexport const CoreActionsContext = createContext<CoreStore[\"actions\"]>(\n null as any,\n);\nexport const CoreStateContext = createContext<Stack>(null as any);\n\nexport interface CoreProviderProps {\n coreStore: CoreStore;\n children: React.ReactNode;\n}\nexport const CoreProvider: React.FC<CoreProviderProps> = ({\n coreStore,\n children,\n}) => {\n const stack = useSyncExternalStore(\n coreStore.subscribe,\n coreStore.actions.getStack,\n coreStore.actions.getStack,\n );\n\n const deferredStack = useDeferredValue(stack);\n\n return (\n <CoreStateContext.Provider value={deferredStack}>\n <CoreActionsContext.Provider value={coreStore.actions}>\n {children}\n </CoreActionsContext.Provider>\n </CoreStateContext.Provider>\n );\n};\n\nCoreProvider.displayName = \"CoreProvider\";\n", "import React from \"react\";\n\nexport const useDeferredValue: typeof React.useDeferredValue =\n React.useDeferredValue ?? ((value) => value);\n", "import React, { useEffect, useState } from \"react\";\n\nexport const useSyncExternalStore: typeof React.useSyncExternalStore =\n React.useSyncExternalStore ??\n ((subscribe, getSnapshot) => {\n const [state, setState] = useState(() => getSnapshot());\n\n useEffect(() => {\n const dispose = subscribe(() => {\n setState(() => getSnapshot());\n });\n\n return dispose;\n });\n\n return state;\n });\n", "import React from \"react\";\n\nexport const useTransition: typeof React.useTransition =\n React.useTransition ?? (() => [false, (cb: () => void) => cb()]);\n", "import React from \"react\";\n\nimport { CoreActionsContext } from \"./CoreProvider\";\n\nexport const useCoreActions = () => React.useContext(CoreActionsContext);\n", "import React from \"react\";\n\nimport { CoreStateContext } from \"./CoreProvider\";\n\nexport const useCoreState = () => React.useContext(CoreStateContext);\n", "import React, { useEffect } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport PluginRenderer from \"./PluginRenderer\";\nimport { usePlugins } from \"./plugins\";\nimport type { WithRequired } from \"./utils\";\n\ninterface MainRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n}\nconst MainRenderer: React.FC<MainRendererProps> = ({\n activityComponentMap,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n const renderingPlugins = plugins.filter(\n (plugin): plugin is WithRequired<typeof plugin, \"render\"> =>\n !!plugin.render,\n );\n\n useEffect(() => {\n if (renderingPlugins.length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `Stackflow -` +\n ` There is no rendering plugin, so \"<Stack />\" doesn't render anything.` +\n ` If you want to render some UI, use \"@stackflow/plugin-renderer-basic\"` +\n ` or add another rendering plugin.`,\n );\n }\n }, [renderingPlugins]);\n\n let output = (\n <>\n {renderingPlugins.map((plugin) => (\n <PluginRenderer\n key={plugin.key}\n activityComponentMap={activityComponentMap}\n plugin={plugin}\n />\n ))}\n </>\n );\n\n plugins.forEach((plugin) => {\n output =\n plugin.wrapStack?.({\n stack: {\n ...coreState,\n render() {\n return output;\n },\n },\n }) ?? output;\n });\n\n return output;\n};\n\nMainRenderer.displayName = \"MainRenderer\";\n\nexport default MainRenderer;\n", "import React from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { ActivityProvider } from \"./activity\";\nimport { useCoreState } from \"./core\";\nimport { usePlugins } from \"./plugins\";\nimport { StackProvider } from \"./stack\";\nimport type { StackflowReactPlugin } from \"./StackflowReactPlugin\";\nimport type { WithRequired } from \"./utils\";\n\ninterface PluginRendererProps {\n activityComponentMap: {\n [key: string]: ActivityComponentType;\n };\n plugin: WithRequired<ReturnType<StackflowReactPlugin>, \"render\">;\n}\nconst PluginRenderer: React.FC<PluginRendererProps> = ({\n activityComponentMap,\n plugin,\n}) => {\n const coreState = useCoreState();\n const plugins = usePlugins();\n\n return plugin.render({\n stack: {\n ...coreState,\n render(overrideStack) {\n const stack = {\n ...coreState,\n ...overrideStack,\n };\n\n return {\n activities: stack.activities.map((activity) => ({\n ...activity,\n key: activity.id,\n render(overrideActivity) {\n const Activity = activityComponentMap[activity.name];\n\n let output: React.ReactNode = (\n <Activity params={activity.params} />\n );\n\n plugins.forEach((p) => {\n output =\n p.wrapActivity?.({\n activity: {\n ...activity,\n render: () => output,\n },\n }) ?? output;\n });\n\n return (\n <StackProvider value={stack}>\n <ActivityProvider\n key={activity.id}\n value={{\n ...activity,\n ...overrideActivity,\n }}\n >\n {output}\n </ActivityProvider>\n </StackProvider>\n );\n },\n })),\n };\n },\n },\n });\n};\n\nPluginRenderer.displayName = \"PluginRenderer\";\n\nexport default PluginRenderer;\n", "import React, { createContext } from \"react\";\n\nimport type { StackflowReactPlugin } from \"../StackflowReactPlugin\";\n\nexport type PluginsContextValue = Array<ReturnType<StackflowReactPlugin>>;\nexport const PluginsContext = createContext<PluginsContextValue>(null as any);\n\ninterface PluginsProviderProps {\n children: React.ReactNode;\n value: PluginsContextValue;\n}\nexport const PluginsProvider: React.FC<PluginsProviderProps> = ({\n children,\n value,\n}) => (\n <PluginsContext.Provider value={value}>{children}</PluginsContext.Provider>\n);\n\nPluginsProvider.displayName = \"PluginsProvider\";\n", "import { useContext } from \"react\";\n\nimport { PluginsContext } from \"./PluginsProvider\";\n\nexport function usePlugins() {\n return useContext(PluginsContext);\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeActivityId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\nimport { useTransition } from \"./shims\";\n\nfunction parseActionOptions(options?: { animate?: boolean }) {\n if (!options) {\n return { skipActiveState: false };\n }\n\n const isNullableAnimateOption =\n options.animate === undefined || options.animate == null;\n if (isNullableAnimateOption) {\n return { skipActiveState: false };\n }\n\n return { skipActiveState: !options.animate };\n}\n\nexport type UseActionsOutputType<T extends BaseActivities> = {\n /**\n * Is transition pending\n */\n pending: boolean;\n\n /**\n * Push new activity\n */\n push: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Push new activity in the top and remove current top activity when new activity is activated\n */\n replace: <K extends Extract<keyof T, string>>(\n activityName: K,\n params: T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {},\n options?: {\n animate?: boolean;\n activityId?: string;\n },\n ) => {\n activityId: string;\n };\n\n /**\n * Remove top activity\n */\n pop: (options?: { animate?: boolean }) => void;\n};\n\nexport function useActions<\n T extends BaseActivities,\n>(): UseActionsOutputType<T> {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n push(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.push({\n activityId,\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n replace(activityName, activityParams, options) {\n const activityId = makeActivityId();\n\n coreActions?.replace({\n activityId: options?.activityId ?? makeActivityId(),\n activityName,\n activityParams,\n skipEnterActiveState: parseActionOptions(options).skipActiveState,\n });\n\n return {\n activityId,\n };\n },\n pop(options) {\n coreActions?.pop({\n skipExitActiveState: parseActionOptions(options).skipActiveState,\n });\n },\n }),\n [coreActions?.push, coreActions?.replace, coreActions?.pop, pending],\n );\n}\n", "import React, { useMemo } from \"react\";\n\nimport type { ActivityComponentType } from \"./activity\";\nimport { makeStepId } from \"./activity\";\nimport type { BaseActivities } from \"./BaseActivities\";\nimport { useCoreActions } from \"./core\";\nimport { useTransition } from \"./shims\";\n\nexport type UseStepActionsOutputType<P> = {\n pending: boolean;\n stepPush: (params: P, options?: {}) => void;\n stepReplace: (params: P, options?: {}) => void;\n stepPop: (options?: {}) => void;\n};\n\nexport type UseStepActions<T extends BaseActivities = {}> = <\n K extends Extract<keyof T, string>,\n>(\n activityName: K,\n) => UseStepActionsOutputType<\n T[K] extends\n | ActivityComponentType<infer U>\n | { component: ActivityComponentType<infer U> }\n ? U\n : {}\n>;\n\nexport const useStepActions: UseStepActions = () => {\n const coreActions = useCoreActions();\n const [pending] = useTransition();\n\n return useMemo(\n () => ({\n pending,\n stepPush(params) {\n const stepId = makeStepId();\n\n coreActions?.stepPush({\n stepId,\n stepParams: params,\n });\n },\n stepReplace(params) {\n const stepId = makeStepId();\n\n coreActions?.stepReplace({\n stepId,\n stepParams: params,\n });\n },\n stepPop() {\n coreActions?.stepPop({});\n },\n }),\n [\n coreActions?.stepPush,\n coreActions?.stepReplace,\n coreActions?.stepPop,\n pending,\n ],\n );\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useActiveEffect = (effect: React.EffectCallback) => {\n const { isActive } = useActivity();\n\n useEffect(() => {\n if (isActive) {\n return effect();\n }\n\n return noop;\n }, [isActive]);\n};\n", "import { useEffect } from \"react\";\n\nimport { useActivity } from \"./activity/useActivity\";\n\nconst noop = () => {};\n\nexport const useEnterDoneEffect = (\n effect: React.EffectCallback,\n deps: React.DependencyList = [],\n) => {\n const { isTop, transitionState } = useActivity();\n\n useEffect(() => {\n if (isTop && transitionState === \"enter-done\") {\n return effect();\n }\n\n return noop;\n }, [isTop, transitionState, ...deps]);\n};\n", "import type { ActivityStep } from \"@stackflow/core\";\nimport { useContext } from \"react\";\n\nimport { ActivityContext } from \"./activity/ActivityProvider\";\n\n/**\n * Get current step\n */\nexport function useStep(): ActivityStep | null {\n const { steps, id } = useContext(ActivityContext);\n\n return steps.filter((step) => step.id !== id).at(-1) ?? null;\n}\n"], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;;;ACC3B,OAAO,SAAS,qBAAqB;;;ACD9B,SAAS,UAAmD;AACjE,QAAM,MAEF;AAAA,IACF,OAAO;AAAA,EACT;AACA,WAAS,MAAM;AACb,WAAO,IAAI;AAAA,EACb;AACA,WAAS,IAAI,OAAU;AACrB,QAAI,QAAQ;AAAA,EACd;AAEA,SAAO,CAAC,KAAK,GAAG;AAClB;;;ACdA,SAAS,WAAW,cAAc;AAClC,OAAO,aAAa;AAEb,SAAS,YAAe,MAAS;AACtC,QAAM,cAAc,OAAO,IAAI;AAC/B,QAAM,WAAW,YAAY;AAC7B,QAAM,UAAU,QAAQ,UAAU,IAAI;AAEtC,YAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,CAAC;AAED,SAAO,UAAU,WAAW;AAC9B;;;AFVO,IAAM,kBAAkB,cAAwB,IAAW;AAM3D,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AACF,MACE,oCAAC,gBAAgB,UAAhB;AAAA,EAAyB,OAAO,YAAY,KAAK;AAAA,GAC/C,QACH;AAGF,iBAAiB,cAAc;;;ADbxB,IAAM,cAAc,MAAM,WAAW,eAAe;;;AIP3D,SAAS,cAAAA,mBAAkB;AAOpB,SAAS,oBAET;AACL,SAAOC,YAAW,eAAe,EAAE;AACrC;;;ACXA,SAAS,cAAAC,mBAAkB;;;ACC3B,OAAOC,UAAS,iBAAAC,sBAAqB;AAI9B,IAAM,eAAeC,eAAqB,IAAW;AAMrD,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AACF,MACE,gBAAAC,OAAA,cAAC,aAAa,UAAb;AAAA,EAAsB,OAAO,YAAY,KAAK;AAAA,GAC5C,QACH;AAGF,cAAc,cAAc;;;ADbrB,IAAM,WAAW,MAAMC,YAAW,YAAY;;;AEArD,SAAS,eAAe,iBAAiB;AACzC,OAAOC,WAAS,WAAAC,gBAAe;;;ACR/B,SAAS,UAAU;AAEZ,SAAS,iBAAiB;AAC/B,SAAO,GAAG;AACZ;;;ACJA,SAAS,MAAAC,WAAU;AAEZ,SAAS,aAAa;AAC3B,SAAOA,IAAG;AACZ;;;ACHA,OAAOC,UAAS,iBAAAC,sBAAqB;;;ACDrC,OAAOC,YAAW;AAAlB;AAEO,IAAM,oBACX,KAAAA,OAAM,qBAAN,YAA2B,CAAC,UAAU;;;ACHxC,OAAOC,UAAS,aAAAC,YAAW,gBAAgB;AAA3C,IAAAC;AAEO,IAAM,wBACXA,MAAAF,OAAM,yBAAN,OAAAE,MACC,CAAC,WAAW,gBAAgB;AAC3B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,MAAM,YAAY,CAAC;AAEtD,EAAAD,WAAU,MAAM;AACd,UAAM,UAAU,UAAU,MAAM;AAC9B,eAAS,MAAM,YAAY,CAAC;AAAA,IAC9B,CAAC;AAED,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;;;AChBF,OAAOE,YAAW;AAAlB,IAAAC;AAEO,IAAM,iBACXA,MAAAD,OAAM,kBAAN,OAAAC,MAAwB,MAAM,CAAC,OAAO,CAAC,OAAmB,GAAG,CAAC;;;AHEzD,IAAM,qBAAqBC;AAAA,EAChC;AACF;AACO,IAAM,mBAAmBA,eAAqB,IAAW;AAMzD,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ;AAAA,IACZ,UAAU;AAAA,IACV,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ;AAAA,EACpB;AAEA,QAAM,gBAAgB,iBAAiB,KAAK;AAE5C,SACE,gBAAAC,OAAA,cAAC,iBAAiB,UAAjB;AAAA,IAA0B,OAAO;AAAA,KAChC,gBAAAA,OAAA,cAAC,mBAAmB,UAAnB;AAAA,IAA4B,OAAO,UAAU;AAAA,KAC3C,QACH,CACF;AAEJ;AAEA,aAAa,cAAc;;;AInC3B,OAAOC,YAAW;AAIX,IAAM,iBAAiB,MAAMC,OAAM,WAAW,kBAAkB;;;ACJvE,OAAOC,YAAW;AAIX,IAAM,eAAe,MAAMC,OAAM,WAAW,gBAAgB;;;ACJnE,OAAOC,WAAS,aAAAC,kBAAiB;;;ACAjC,OAAOC,aAAW;;;ACAlB,OAAOC,UAAS,iBAAAC,sBAAqB;AAK9B,IAAM,iBAAiBA,eAAmC,IAAW;AAMrE,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AACF,MACE,gBAAAD,OAAA,cAAC,eAAe,UAAf;AAAA,EAAwB;AAAA,GAAe,QAAS;AAGnD,gBAAgB,cAAc;;;AClB9B,SAAS,cAAAE,mBAAkB;AAIpB,SAAS,aAAa;AAC3B,SAAOC,YAAW,cAAc;AAClC;;;AFUA,IAAM,iBAAgD,CAAC;AAAA,EACrD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,YAAY,aAAa;AAC/B,QAAM,UAAU,WAAW;AAE3B,SAAO,OAAO,OAAO;AAAA,IACnB,OAAO,iCACF,YADE;AAAA,MAEL,OAAO,eAAe;AACpB,cAAM,QAAQ,kCACT,YACA;AAGL,eAAO;AAAA,UACL,YAAY,MAAM,WAAW,IAAI,CAAC,aAAc,iCAC3C,WAD2C;AAAA,YAE9C,KAAK,SAAS;AAAA,YACd,OAAO,kBAAkB;AACvB,oBAAM,WAAW,qBAAqB,SAAS;AAE/C,kBAAI,SACF,gBAAAC,QAAA,cAAC;AAAA,gBAAS,QAAQ,SAAS;AAAA,eAAQ;AAGrC,sBAAQ,QAAQ,CAAC,MAAM;AA3CrC,oBAAAC,KAAA;AA4CgB,0BACE,MAAAA,MAAA,EAAE,iBAAF,gBAAAA,IAAA,QAAiB;AAAA,kBACf,UAAU,iCACL,WADK;AAAA,oBAER,QAAQ,MAAM;AAAA,kBAChB;AAAA,gBACF,OALA,YAKM;AAAA,cACV,CAAC;AAED,qBACE,gBAAAD,QAAA,cAAC;AAAA,gBAAc,OAAO;AAAA,iBACpB,gBAAAA,QAAA,cAAC;AAAA,gBACC,KAAK,SAAS;AAAA,gBACd,OAAO,kCACF,WACA;AAAA,iBAGJ,MACH,CACF;AAAA,YAEJ;AAAA,UACF,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAe,cAAc;AAE7B,IAAO,yBAAQ;;;AD/Df,IAAM,eAA4C,CAAC;AAAA,EACjD;AACF,MAAM;AACJ,QAAM,YAAY,aAAa;AAC/B,QAAM,UAAU,WAAW;AAE3B,QAAM,mBAAmB,QAAQ;AAAA,IAC/B,CAAC,WACC,CAAC,CAAC,OAAO;AAAA,EACb;AAEA,EAAAE,WAAU,MAAM;AACd,QAAI,iBAAiB,WAAW,GAAG;AAEjC,cAAQ;AAAA,QACN;AAAA,MAIF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,gBAAgB,CAAC;AAErB,MAAI,SACF,gBAAAC,QAAA,cAAAA,QAAA,gBACG,iBAAiB,IAAI,CAAC,WACrB,gBAAAA,QAAA,cAAC;AAAA,IACC,KAAK,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,GACF,CACD,CACH;AAGF,UAAQ,QAAQ,CAAC,WAAW;AAhD9B,QAAAC,KAAA;AAiDI,cACE,MAAAA,MAAA,OAAO,cAAP,gBAAAA,IAAA,aAAmB;AAAA,MACjB,OAAO,iCACF,YADE;AAAA,QAEL,SAAS;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,OAPA,YAOM;AAAA,EACV,CAAC;AAED,SAAO;AACT;AAEA,aAAa,cAAc;AAE3B,IAAO,uBAAQ;;;AIjEf,SAAgB,eAAe;AAQ/B,SAAS,mBAAmB,SAAiC;AAC3D,MAAI,CAAC,SAAS;AACZ,WAAO,EAAE,iBAAiB,MAAM;AAAA,EAClC;AAEA,QAAM,0BACJ,QAAQ,YAAY,UAAa,QAAQ,WAAW;AACtD,MAAI,yBAAyB;AAC3B,WAAO,EAAE,iBAAiB,MAAM;AAAA,EAClC;AAEA,SAAO,EAAE,iBAAiB,CAAC,QAAQ,QAAQ;AAC7C;AAiDO,SAAS,aAEa;AAC3B,QAAM,cAAc,eAAe;AACnC,QAAM,CAAC,OAAO,IAAI,cAAc;AAEhC,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,KAAK,cAAc,gBAAgB,SAAS;AAC1C,cAAM,aAAa,eAAe;AAElC,mDAAa,KAAK;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA,sBAAsB,mBAAmB,OAAO,EAAE;AAAA,QACpD;AAEA,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,cAAc,gBAAgB,SAAS;AA5FrD,YAAAC;AA6FQ,cAAM,aAAa,eAAe;AAElC,mDAAa,QAAQ;AAAA,UACnB,aAAYA,MAAA,mCAAS,eAAT,OAAAA,MAAuB,eAAe;AAAA,UAClD;AAAA,UACA;AAAA,UACA,sBAAsB,mBAAmB,OAAO,EAAE;AAAA,QACpD;AAEA,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,MACA,IAAI,SAAS;AACX,mDAAa,IAAI;AAAA,UACf,qBAAqB,mBAAmB,OAAO,EAAE;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,2CAAa,MAAM,2CAAa,SAAS,2CAAa,KAAK,OAAO;AAAA,EACrE;AACF;;;AClHA,SAAgB,WAAAC,gBAAe;AA2BxB,IAAM,iBAAiC,MAAM;AAClD,QAAM,cAAc,eAAe;AACnC,QAAM,CAAC,OAAO,IAAI,cAAc;AAEhC,SAAOC;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA,SAAS,QAAQ;AACf,cAAM,SAAS,WAAW;AAE1B,mDAAa,SAAS;AAAA,UACpB;AAAA,UACA,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,YAAY,QAAQ;AAClB,cAAM,SAAS,WAAW;AAE1B,mDAAa,YAAY;AAAA,UACvB;AAAA,UACA,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,UAAU;AACR,mDAAa,QAAQ,CAAC;AAAA,MACxB;AAAA,IACF;AAAA,IACA;AAAA,MACE,2CAAa;AAAA,MACb,2CAAa;AAAA,MACb,2CAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;AdnCA,IAAM,YAAY,OAAO,WAAW;AAEpC,SAASC,oBAAmB,SAAiC;AAC3D,MAAI,CAAC,SAAS;AACZ,WAAO,EAAE,iBAAiB,MAAM;AAAA,EAClC;AAEA,QAAM,0BACJ,QAAQ,YAAY,UAAa,QAAQ,WAAW;AACtD,MAAI,yBAAyB;AAC3B,WAAO,EAAE,iBAAiB,MAAM;AAAA,EAClC;AAEA,SAAO,EAAE,iBAAiB,CAAC,QAAQ,QAAQ;AAC7C;AA+EO,SAAS,UACd,SACoB;AAzHtB,MAAAC;AA0HE,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,OAAO,OAAO,SAAS;AAG7B,SAAK,MAAM;AAAA,MACT;AAAA,MACA,GAAG,QAAQ;AAAA,IACb;AAAA,EACF;AAEA,QAAM,YAAWA,MAAA,QAAQ,YAAR,OAAAA,MAAmB,CAAC,GAClC,KAAK,QAAa,EAClB,IAAI,CAAC,MAAM,CAA4B;AAC1C,QAAM,kBAAkB,QAAQ,IAAI,CAAC,WAAW,OAAO,CAAC;AAExD,QAAM,uBAAuB,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAAA,IAC9D,CAAC,KAAK,CAAC,KAAK,QAAQ,MAAO,iCACtB,MADsB;AAAA,MAEzB,CAAC,MACC,eAAe,WACXC,QAAM,KAAK,SAAS,SAAS,IAC7BA,QAAM,KAAK,QAAQ;AAAA,IAC3B;AAAA,IACA,CAAC;AAAA,EAGH;AAEA,QAAM,iBAAiB,MACrB,IAAI,KAAK,EAAE,QAAQ,IAAI,QAAQ,qBAAqB;AAEtD,QAAM,kBAAkB,cAAc;AAAA,IACpC,eAAe;AAAA,MACb,UAAU,eAAe;AAAA,QACvB,oBAAoB,QAAQ;AAAA,QAC5B,WAAW,eAAe;AAAA,MAC5B,CAAC;AAAA,MACD,GAAG,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAAA,QAAI,CAAC,CAAC,cAAc,QAAQ,MAChE,UAAU,sBAAsB;AAAA,UAC9B;AAAA,UACA,WAAW,eAAe;AAAA,WACtB,eAAe,WACf;AAAA,UACE,sBAAsB,SAAS;AAAA,QACjC,IACA,KACL;AAAA,MACH;AAAA,IACF;AAAA,IACA,SAAS,CAAC;AAAA,EACZ,CAAC;AAED,QAAM,CAAC,cAAc,YAAY,IAAI,QAAmB;AAExD,QAAM,QAA4BA,QAAM,KAAK,CAAC,UAAU;AACtD,UAAM,YAAYC,SAAQ,MAAM;AAC9B,YAAM,gBAAgB,aAAa;AAInC,UAAI,aAAa,eAAe;AAC9B,eAAO;AAAA,MACT;AAEA,YAAM,8BAA8B,QAAQ,kBACxC;AAAA,QACE,UAAU,UAAU;AAAA,UAClB,YAAY,eAAe;AAAA,UAC3B,cAAc,QAAQ,gBAAgB;AAAA,UACtC,gBAAgB,CAAC;AAAA,UACjB,WAAW,eAAe;AAAA,UAC1B,sBAAsB;AAAA,QACxB,CAAC;AAAA,MACH,IACA,CAAC;AAEL,YAAM,sBAAsB,gBAAgB;AAAA,QAG1C,CAAC,eAAe,mBAAgB;AAzMxC,cAAAF,KAAA;AA0MU,4CAAe,0BAAf,wCAAuC;AAAA,YACrC;AAAA,YACA,iBAAgBA,MAAA,MAAM,mBAAN,OAAAA,MAAwB,CAAC;AAAA,UAC3C,OAHA,YAGM;AAAA;AAAA,QACR;AAAA,MACF;AAEA,YAAM,2BACJ,oBAAoB,SAAS,KAC7B,4BAA4B,SAAS,KACrC,wBAAwB;AAE1B,UAAI,0BAA0B;AAE5B,gBAAQ;AAAA,UACN,2GAE+C,4BAA4B,GAAG;AAAA,QAChF;AAAA,MACF;AAEA,UAAI,oBAAoB,WAAW,GAAG;AAEpC,gBAAQ;AAAA,UACN;AAAA,QAKF;AAAA,MACF;AAEA,YAAM,QAAQ,cAAc;AAAA,QAC1B,eAAe;AAAA,UACb,GAAG,gBAAgB,WAAW;AAAA,UAC9B,GAAG;AAAA,QACL;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,WAAW;AACb,cAAM,KAAK;AACX,qBAAa,KAAK;AAAA,MACpB;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WACE,gBAAAC,QAAA,cAAC;AAAA,MAAgB,OAAO;AAAA,OACtB,gBAAAA,QAAA,cAAC;AAAA,MAAa;AAAA,OACZ,gBAAAA,QAAA,cAAC;AAAA,MAAa;AAAA,KAA4C,CAC5D,CACF;AAAA,EAEJ,CAAC;AAED,QAAM,cAAc;AAEpB,SAAO;AAAA,IACL,YAAY,QAAQ;AAAA,IACpB;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,YAAY,UAAU;AACpB,UAAI,aAAa,GAAG;AAElB,gBAAQ;AAAA,UACN;AAAA,QAEF;AAEA;AAAA,MACF;AAEA,2BAAqB,SAAS,QAAQA,QAAM,KAAK,SAAS,SAAS;AAEnE,sBAAgB,QAAQ,cAAc,sBAAsB;AAAA,QAC1D,cAAc,SAAS;AAAA,QACvB,sBAAsB,SAAS;AAAA,QAC/B,WAAW,eAAe;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,IACA,UAAU,QAAQ;AAChB,UAAI,aAAa,GAAG;AAElB,gBAAQ;AAAA,UACN;AAAA,QAEF;AAEA;AAAA,MACF;AAEA,OAAC,MAAM,EACJ,KAAK,QAAa,EAClB,IAAI,CAAC,MAAM,CAA4B,EACvC,QAAQ,CAAC,MAAM;AACd,gBAAQ,KAAK,CAAC;AACd,wBAAgB,KAAK,EAAE,CAAC;AAAA,MAC1B,CAAC;AAAA,IACL;AAAA,IACA,SAAS;AAAA,MACP,WAAW;AAjTjB,YAAAD,KAAA;AAkTQ,gBACE,MAAAA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,eAAxB,YACA,gBAAgB,QAAQ,SAAS;AAAA,MAErC;AAAA,MACA,cAAc,MAAM,YAAY;AAvTtC,YAAAA;AAwTQ,gBAAOA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,cAAc,MAAM;AAAA,MACrD;AAAA,MACA,KAAK,cAAc,gBAAgBG,UAAS;AA1TlD,YAAAH;AA2TQ,cAAM,aAAa,eAAe;AAElC,SAAAA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,KAAK;AAAA,UAC3B;AAAA,UACA;AAAA,UACA;AAAA,UACA,sBAAsBD,oBAAmBI,QAAO,EAAE;AAAA,QACpD;AAEA,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,cAAc,gBAAgBA,UAAS;AAxUrD,YAAAH,KAAA;AAyUQ,cAAM,cAAaA,MAAAG,YAAA,gBAAAA,SAAS,eAAT,OAAAH,MAAuB,eAAe;AAEzD,2BAAa,MAAb,mBAAgB,QAAQ,QAAQ;AAAA,UAC9B,aAAY,KAAAG,YAAA,gBAAAA,SAAS,eAAT,YAAuB,eAAe;AAAA,UAClD;AAAA,UACA;AAAA,UACA,sBAAsBJ,oBAAmBI,QAAO,EAAE;AAAA,QACpD;AAEA,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,MACA,IAAIA,UAAS;AAtVnB,YAAAH;AAuVQ,gBAAOA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,IAAI;AAAA,UACjC,qBAAqBD,oBAAmBI,QAAO,EAAE;AAAA,QACnD;AAAA,MACF;AAAA,MACA,SAAS,QAAQ;AA3VvB,YAAAH;AA4VQ,cAAM,SAAS,WAAW;AAE1B,gBAAOA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,SAAS;AAAA,UACtC;AAAA,UACA,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,YAAY,QAAQ;AAnW1B,YAAAA;AAoWQ,cAAM,SAAS,WAAW;AAE1B,gBAAOA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,YAAY;AAAA,UACzC;AAAA,UACA,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,UAAU;AA3WhB,YAAAA;AA4WQ,gBAAOA,MAAA,aAAa,MAAb,gBAAAA,IAAgB,QAAQ,QAAQ,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACF;;;AehXA,SAAS,aAAAI,kBAAiB;AAI1B,IAAM,OAAO,MAAM;AAAC;AAEb,IAAM,kBAAkB,CAAC,WAAiC;AAC/D,QAAM,EAAE,SAAS,IAAI,YAAY;AAEjC,EAAAC,WAAU,MAAM;AACd,QAAI,UAAU;AACZ,aAAO,OAAO;AAAA,IAChB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AACf;;;AChBA,SAAS,aAAAC,kBAAiB;AAI1B,IAAMC,QAAO,MAAM;AAAC;AAEb,IAAM,qBAAqB,CAChC,QACA,OAA6B,CAAC,MAC3B;AACH,QAAM,EAAE,OAAO,gBAAgB,IAAI,YAAY;AAE/C,EAAAC,WAAU,MAAM;AACd,QAAI,SAAS,oBAAoB,cAAc;AAC7C,aAAO,OAAO;AAAA,IAChB;AAEA,WAAOD;AAAA,EACT,GAAG,CAAC,OAAO,iBAAiB,GAAG,IAAI,CAAC;AACtC;;;AClBA,SAAS,cAAAE,mBAAkB;AAOpB,SAAS,UAA+B;AAR/C,MAAAC;AASE,QAAM,EAAE,OAAO,IAAAC,IAAG,IAAIC,YAAW,eAAe;AAEhD,UAAOF,MAAA,MAAM,OAAO,CAAC,SAAS,KAAK,OAAOC,GAAE,EAAE,GAAG,EAAE,MAA5C,OAAAD,MAAiD;AAC1D;", | ||
| "names": ["useContext", "useContext", "useContext", "React", "createContext", "createContext", "React", "useContext", "React", "useMemo", "id", "React", "createContext", "React", "React", "useEffect", "_a", "React", "_a", "createContext", "React", "React", "React", "React", "React", "React", "useEffect", "React", "React", "createContext", "useContext", "useContext", "React", "_a", "useEffect", "React", "_a", "_a", "useMemo", "useMemo", "parseActionOptions", "_a", "React", "useMemo", "options", "useEffect", "useEffect", "useEffect", "noop", "useEffect", "useContext", "_a", "id", "useContext"] | ||
| } |
| export * from "./useDeferredValue"; | ||
| export * from "./useSyncExternalStore"; | ||
| export * from "./useTransition"; |
| /// <reference types="react" /> | ||
| declare const useEnterDoneEffect: (effect: React.EffectCallback, deps?: import("react").DependencyList) => void; | ||
| export default useEnterDoneEffect; | ||
| export declare const useEnterDoneEffect: (effect: React.EffectCallback, deps?: import("react").DependencyList) => void; |
+2
-2
| { | ||
| "name": "@stackflow/react", | ||
| "version": "0.21.2", | ||
| "version": "0.21.3", | ||
| "license": "MIT", | ||
@@ -64,3 +64,3 @@ "exports": { | ||
| }, | ||
| "gitHead": "be4a7845c2d5a7999cd172733a5690b1d2657b47" | ||
| "gitHead": "49e9bc061fc8f716489a3acad6d922d0476ee94e" | ||
| } |
+1
-0
@@ -10,2 +10,3 @@ export * from "./activity/ActivityComponentType"; | ||
| export * from "./useEnterDoneEffect"; | ||
| export * from "./useStep"; | ||
| export * from "./useStepActions"; |
| export * from "./useDeferredValue"; | ||
| export * from "./useSyncExternalStore"; | ||
| export * from "./useTransition"; |
@@ -7,2 +7,3 @@ import React, { useMemo } from "react"; | ||
| import { useCoreActions } from "./core"; | ||
| import { useTransition } from "./shims"; | ||
@@ -70,5 +71,2 @@ function parseActionOptions(options?: { animate?: boolean }) { | ||
| const useTransition: () => [boolean, React.TransitionStartFunction] = | ||
| React.useTransition ?? (() => [false, (cb: () => void) => cb()]); | ||
| export function useActions< | ||
@@ -75,0 +73,0 @@ T extends BaseActivities, |
@@ -5,3 +5,5 @@ import { useEffect } from "react"; | ||
| const useEnterDoneEffect = ( | ||
| const noop = () => {}; | ||
| export const useEnterDoneEffect = ( | ||
| effect: React.EffectCallback, | ||
@@ -16,5 +18,5 @@ deps: React.DependencyList = [], | ||
| } | ||
| return noop; | ||
| }, [isTop, transitionState, ...deps]); | ||
| }; | ||
| export default useEnterDoneEffect; |
@@ -7,2 +7,3 @@ import React, { useMemo } from "react"; | ||
| import { useCoreActions } from "./core"; | ||
| import { useTransition } from "./shims"; | ||
@@ -28,5 +29,2 @@ export type UseStepActionsOutputType<P> = { | ||
| const useTransition: () => [boolean, React.TransitionStartFunction] = | ||
| React.useTransition ?? (() => [false, (cb: () => void) => cb()]); | ||
| export const useStepActions: UseStepActions = () => { | ||
@@ -33,0 +31,0 @@ const coreActions = useCoreActions(); |
156787
2.18%79
5.33%2345
2.72%