UNPKG

ui-ingredients

Version:

Headless component library for Svelte powered by zag

38 lines (37 loc) 1.3 kB
import { normalizeProps, useMachine } from '@zag-js/svelte'; import * as tour from '@zag-js/tour'; import { getEnvironmentContext } from '../EnvironmentProvider/EnvironmentProviderContext.svelte.js'; import { getLocaleContext } from '../LocaleProvider/LocaleProviderContext.svelte.js'; import { parts } from './Tour.anatomy.js'; export function createTour(props) { const locale = getLocaleContext(); const environment = getEnvironmentContext(); const steps = $derived.by(() => { return props().steps?.map((step, index) => ({ id: `tour:${props().id}:step:${index}`, ...step, })); }); const service = useMachine(tour.machine, () => ({ dir: locale?.().dir, getRootNode: environment?.().getRootNode, ...props(), steps, })); return () => { const api = tour.connect(service, normalizeProps); return { ...api, getTriggerProps() { return { id: `tour:${props().id}:trigger`, onclick() { api.start(); }, 'data-state': api.open ? 'open' : 'closed', ...parts.trigger.attrs, }; }, }; }; }