Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@stackflow/react

Package Overview
Dependencies
Maintainers
2
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stackflow/react - npm Package Compare versions

Comparing version
0.21.2
to
0.21.3
+2
dist/shims/useTransition.d.ts
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"]
}

@@ -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": "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",
"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;
{
"name": "@stackflow/react",
"version": "0.21.2",
"version": "0.21.3",
"license": "MIT",

@@ -64,3 +64,3 @@ "exports": {

},
"gitHead": "be4a7845c2d5a7999cd172733a5690b1d2657b47"
"gitHead": "49e9bc061fc8f716489a3acad6d922d0476ee94e"
}

@@ -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();