@storybook/addon-onboarding
Version:
Storybook Onboarding: Help new users learn how to write stories
33 lines (31 loc) • 2.27 kB
JavaScript
import {
ADDON_CONTROLS_ID,
ADDON_ID
} from "./_browser-chunks/chunk-VFOIHBP2.js";
import "./_browser-chunks/chunk-UBBB7RW7.js";
// src/manager.tsx
import React, { Suspense, lazy } from "react";
import { createRoot } from "react-dom/client";
import { STORY_SPECIFIED } from "storybook/internal/core-events";
import { addons, internal_universalChecklistStore as checklistStore } from "storybook/manager-api";
var Onboarding = lazy(() => import("./_browser-chunks/Onboarding-ISBUXTH6.js")), Survey = lazy(() => import("./_browser-chunks/Survey-ONUNS54C.js")), root = null, render = (node) => {
let container = document.getElementById("storybook-addon-onboarding");
container || (container = document.createElement("div"), container.id = "storybook-addon-onboarding", document.body.appendChild(container)), root = root ?? createRoot(container), root.render(React.createElement(Suspense, { fallback: React.createElement("div", null) }, node));
};
addons.register(ADDON_ID, async (api) => {
let { path, queryParams } = api.getUrlState(), isOnboarding = path === "/onboarding" || queryParams.onboarding === "true", isSurvey = queryParams.onboarding === "survey", hasCompletedSurvey = await new Promise((resolve) => {
let unsubscribe = checklistStore.onStateChange(({ loaded, items }) => {
loaded && (unsubscribe(), resolve(items.onboardingSurvey.status === "accepted"));
});
});
if (isSurvey)
return hasCompletedSurvey ? null : render(React.createElement(Survey, { api }));
if (await new Promise((resolve) => api.once(STORY_SPECIFIED, resolve)), !(!!api.getData("example-button--primary") || !!document.getElementById("example-button--primary"))) {
console.warn(
"[@storybook/addon-onboarding] It seems like you have finished the onboarding experience in Storybook! Therefore this addon is not necessary anymore and will not be loaded. You are free to remove it from your project. More info: https://github.com/storybookjs/storybook/tree/next/code/addons/onboarding#uninstalling"
);
return;
}
if (!(!isOnboarding || window.innerWidth < 730))
return api.togglePanel(!0), api.togglePanelPosition("bottom"), api.setSelectedPanel(ADDON_CONTROLS_ID), render(React.createElement(Onboarding, { api, hasCompletedSurvey }));
});