@yarlisai/guides
Produktunabhängige Guided-Tour-Engine — deklarative Schritte, Zielgruppen-Targeting, Lifecycle-Events.
Produktunabhängige Guided-Tour-Engine — deklarative Schritte, Plan-/Rollen-basiertes Zielgruppen-Targeting und Lifecycle-Events, mit driver.js- und Headless-Adaptern.
Installation
npm install @yarlisai/guides
# for the driver.js adapter:
npm install driver.jsSource: packages/guides ·
npm ·
CHANGELOG
Warum
@yarlisai/guides folgt dem Port/Adapter-Vertrag: Konsumenten hängen vom GuideEngine-Port ab und instanziieren zur Laufzeit einen Adapter. Die Engine weiß nichts von React, i18n, Plänen oder Analytics — Texte werden über einen Resolver aufgelöst übergeben, das Zielgruppen-Targeting ist deklarative Daten, und jeder Lifecycle-Übergang (started, step_viewed, cta_clicked, completed, skipped) wird als GuideEvent emittiert, damit der Host ihn persistieren oder tracken kann.
Mit v1 werden zwei Adapter ausgeliefert:
- headless — DOM-freie Engine (aus dem Haupt-Barrel exportiert) für Tests, CLI-Walkthroughs oder servergesteuerte Touren.
- driverjs — browserbasierte Popovers auf Basis von driver.js.
driver.jsist eine optionale Peer-Dependency, und der Adapter wird nur über den Unterpfad@yarlisai/guides/adapters/driverjsbereitgestellt, damit er nie in Bundles landet, die ihn nicht verwenden. Das CSS bleibt auf der Host-Seite (import 'driver.js/dist/driver.css') und wird über die konfigurierbarepopoverClassgestaltet.
Verwendung
import { createGuideEngine, registerGuide, getGuide } from '@yarlisai/guides'
registerGuide({
id: 'onboarding:build_agent',
version: '2026.06',
steps: [
{ id: 'canvas', anchor: 'canvas', i18nKey: 'tour.canvas' },
{
id: 'deploy',
anchor: 'deploy-button',
i18nKey: 'tour.deploy',
audience: { roles: ['admin', 'editor'] },
},
],
})
// Adapter selection is config — the chosen module is dynamic-imported.
const engine = await createGuideEngine('driverjs')
engine.start(getGuide('onboarding:build_agent')!, {
copy: (step) => ({ title: t(`${step.i18nKey}.title`), body: t(`${step.i18nKey}.body`) }),
labels: { next: t('next'), previous: t('back'), done: t('done'), progress: '{{current}}/{{total}}' },
context: { plan: 'free', role: 'admin' },
onEvent: (event) => analytics.track(event),
})Die README des Pakets enthält einen vollständigen Quickstart. mybotbox-platform selbst ist der Referenz-Konsument — apps/sat/lib/guides/ zeigt das Thin-Shim-Muster, und apps/sat/components/onboarding/ steuert die Produkttour über den Port.