ontheway-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -0
- package/dist/checklist.cjs +319 -0
- package/dist/checklist.cjs.map +1 -0
- package/dist/checklist.d.cts +58 -0
- package/dist/checklist.d.ts +58 -0
- package/dist/checklist.js +314 -0
- package/dist/checklist.js.map +1 -0
- package/dist/chunk-254YHUN3.cjs +26 -0
- package/dist/chunk-254YHUN3.cjs.map +1 -0
- package/dist/chunk-DDAAVRWG.js +23 -0
- package/dist/chunk-DDAAVRWG.js.map +1 -0
- package/dist/chunk-NRUQU5AR.cjs +94 -0
- package/dist/chunk-NRUQU5AR.cjs.map +1 -0
- package/dist/chunk-OKJ5GEH3.js +358 -0
- package/dist/chunk-OKJ5GEH3.js.map +1 -0
- package/dist/chunk-RNQLNLNI.js +91 -0
- package/dist/chunk-RNQLNLNI.js.map +1 -0
- package/dist/chunk-UE3T6TSM.cjs +361 -0
- package/dist/chunk-UE3T6TSM.cjs.map +1 -0
- package/dist/components.cjs +211 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.d.cts +51 -0
- package/dist/components.d.ts +51 -0
- package/dist/components.js +205 -0
- package/dist/components.js.map +1 -0
- package/dist/devtools.cjs +733 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +18 -0
- package/dist/devtools.d.ts +18 -0
- package/dist/devtools.js +727 -0
- package/dist/devtools.js.map +1 -0
- package/dist/index.cjs +19 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +163 -0
- package/dist/index.d.ts +163 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +18 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +68 -0
- package/dist/react.d.ts +68 -0
- package/dist/react.js +5 -0
- package/dist/react.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools.tsx"],"names":["_a"],"mappings":"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","file":"devtools.js","sourcesContent":["'use client'\n\n/**\n * OnTheWay DevTools\n * \n * Development-only floating panel for recording onboarding steps.\n * Auto-disabled in production. Steps are saved directly to OnTheWay backend.\n * \n * Usage:\n * import { OnTheWayDevTools } from '@ontheway/sdk/devtools'\n * \n * // In your app root (only runs in development):\n * if (process.env.NODE_ENV === 'development') {\n * OnTheWayDevTools.init({ projectId: 'xxx', apiKey: 'otw_xxx' })\n * }\n * \n * React:\n * <OnTheWayDevToolsPanel projectId=\"xxx\" apiKey=\"otw_xxx\" />\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\n// ---- Types ----\n\ninterface DevToolsConfig {\n projectId: string\n apiKey: string\n serverUrl?: string\n}\n\ninterface RecordedStep {\n id: string\n selector: string\n tagName: string\n innerText: string\n title: string\n description: string\n position: 'auto' | 'top' | 'bottom' | 'left' | 'right'\n spotlight: boolean\n url: string\n}\n\ninterface Task {\n id: string\n name: string\n slug: string\n steps: unknown[]\n enabled: boolean\n}\n\n// ---- Selector Generator (same logic as recorder-snippet.js) ----\n\nfunction genSelector(el: Element): string {\n const ds = (el as HTMLElement).dataset\n if (ds?.onthewayId) return `[data-ontheway-id=\"${ds.onthewayId}\"]`\n\n if (el.id && !/^[\\d:]/.test(el.id)) {\n try {\n if (document.querySelectorAll('#' + CSS.escape(el.id)).length === 1) return '#' + CSS.escape(el.id)\n } catch {}\n }\n\n const parts: string[] = []\n let cur: Element | null = el\n while (cur && cur !== document.body && cur !== document.documentElement && parts.length < 4) {\n let p = cur.tagName.toLowerCase()\n if (cur.id && !/^[\\d:]/.test(cur.id)) { parts.unshift('#' + CSS.escape(cur.id)); break }\n const cls = Array.from(cur.classList || [])\n .filter(c => !/^(w-|h-|p-|m-|text-|bg-|flex|grid|border|rounded|hover:|focus:|sm:|md:|lg:|xl:)/.test(c))\n .slice(0, 2)\n if (cls.length) p += '.' + cls.map(c => CSS.escape(c)).join('.')\n const parent = cur.parentElement\n if (parent) {\n const sibs = Array.from(parent.children).filter(s => s.tagName === cur!.tagName)\n if (sibs.length > 1) p += `:nth-child(${sibs.indexOf(cur) + 1})`\n }\n parts.unshift(p)\n cur = cur.parentElement\n }\n\n const sel = parts.join(' > ')\n try { if (document.querySelector(sel) === el) return sel } catch {}\n\n // Fallback: full path\n parts.length = 0\n cur = el\n while (cur && cur !== document.body) {\n const parentEl: Element | null = cur.parentElement\n if (!parentEl) break\n parts.unshift(cur.tagName.toLowerCase() + ':nth-child(' + (Array.from(parentEl.children).indexOf(cur) + 1) + ')')\n cur = parentEl\n }\n return 'body > ' + parts.join(' > ')\n}\n\n// ---- React DevTools Panel ----\n\ninterface DevToolsPanelProps {\n projectId: string\n apiKey: string\n serverUrl?: string\n}\n\nexport function OnTheWayDevToolsPanel({ projectId, apiKey, serverUrl }: DevToolsPanelProps) {\n const [minimized, setMinimized] = useState(true)\n const [tab, setTab] = useState<'record' | 'tasks'>('record')\n\n // Recording state\n const [recording, setRecording] = useState(false)\n const [steps, setSteps] = useState<RecordedStep[]>([])\n const [editingStep, setEditingStep] = useState<string | null>(null)\n const [taskName, setTaskName] = useState('')\n const [taskSlug, setTaskSlug] = useState('')\n const [trigger, setTrigger] = useState<'manual' | 'auto' | 'first-visit'>('manual')\n const [saving, setSaving] = useState(false)\n const [saveMsg, setSaveMsg] = useState('')\n\n // AI generation\n const [aiIntent, setAiIntent] = useState('')\n const [aiGenerating, setAiGenerating] = useState(false)\n\n // Tasks list\n const [tasks, setTasks] = useState<Task[]>([])\n const [loadingTasks, setLoadingTasks] = useState(false)\n\n const highlightRef = useRef<HTMLDivElement | null>(null)\n const hoveredRef = useRef<Element | null>(null)\n const panelRef = useRef<HTMLDivElement | null>(null)\n\n const baseUrl = serverUrl || (typeof window !== 'undefined' ? window.location.origin : '')\n\n // ---- Fetch tasks ----\n const fetchTasks = useCallback(async () => {\n setLoadingTasks(true)\n try {\n const res = await fetch(`${baseUrl}/api/sdk/${projectId}/config`)\n const data = await res.json()\n setTasks((data.tasks || []).map((t: { id: string; slug: string; trigger: string; steps: unknown[] }) => ({\n id: t.id,\n name: t.slug.replace(/[-_]/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase()),\n slug: t.slug,\n steps: t.steps,\n enabled: true,\n })))\n } catch {\n setTasks([])\n }\n setLoadingTasks(false)\n }, [baseUrl, projectId])\n\n useEffect(() => {\n if (tab === 'tasks' && !minimized) fetchTasks()\n }, [tab, minimized, fetchTasks])\n\n // ---- Recording logic ----\n const isOurElement = useCallback((el: Element) => {\n return panelRef.current?.contains(el) || highlightRef.current?.contains(el) ||\n el.id === 'otw-devtools-highlight'\n }, [])\n\n const onMouseMove = useCallback((e: MouseEvent) => {\n const el = document.elementFromPoint(e.clientX, e.clientY)\n if (!el || el === hoveredRef.current || isOurElement(el)) return\n hoveredRef.current = el\n if (!highlightRef.current) {\n const div = document.createElement('div')\n div.id = 'otw-devtools-highlight'\n div.style.cssText = 'position:fixed;pointer-events:none;z-index:2147483645;border:2px solid #3b82f6;background:rgba(59,130,246,0.15);border-radius:3px;transition:all .08s ease'\n document.documentElement.appendChild(div)\n highlightRef.current = div\n }\n const r = el.getBoundingClientRect()\n const h = highlightRef.current\n h.style.display = 'block'\n h.style.top = r.top + 'px'\n h.style.left = r.left + 'px'\n h.style.width = r.width + 'px'\n h.style.height = r.height + 'px'\n }, [isOurElement])\n\n const onMouseLeave = useCallback(() => {\n if (highlightRef.current) highlightRef.current.style.display = 'none'\n hoveredRef.current = null\n }, [])\n\n const onClick = useCallback((e: MouseEvent) => {\n const el = e.target as Element\n if (isOurElement(el)) return\n e.preventDefault()\n e.stopPropagation()\n\n const r = el.getBoundingClientRect()\n const text = (el as HTMLElement).innerText?.trim().substring(0, 60) || ''\n const step: RecordedStep = {\n id: 'step_' + Date.now(),\n selector: genSelector(el),\n tagName: el.tagName.toLowerCase(),\n innerText: text,\n title: `Step ${steps.length + 1}`,\n description: 'Click here to continue',\n position: 'auto',\n spotlight: true,\n url: location.href,\n }\n setSteps(prev => [...prev, step])\n setEditingStep(step.id)\n\n // Flash feedback\n const orig = (el as HTMLElement).style.outline;\n (el as HTMLElement).style.outline = '3px solid #22c55e'\n setTimeout(() => { (el as HTMLElement).style.outline = orig }, 400)\n }, [isOurElement, steps.length])\n\n const startRecording = useCallback(() => {\n setRecording(true)\n document.addEventListener('mousemove', onMouseMove, true)\n document.addEventListener('mouseleave', onMouseLeave, true)\n document.addEventListener('click', onClick, true)\n }, [onMouseMove, onMouseLeave, onClick])\n\n const stopRecording = useCallback(() => {\n setRecording(false)\n document.removeEventListener('mousemove', onMouseMove, true)\n document.removeEventListener('mouseleave', onMouseLeave, true)\n document.removeEventListener('click', onClick, true)\n if (highlightRef.current) {\n highlightRef.current.remove()\n highlightRef.current = null\n }\n hoveredRef.current = null\n }, [onMouseMove, onMouseLeave, onClick])\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n document.removeEventListener('mousemove', onMouseMove, true)\n document.removeEventListener('mouseleave', onMouseLeave, true)\n document.removeEventListener('click', onClick, true)\n highlightRef.current?.remove()\n }\n }, [onMouseMove, onMouseLeave, onClick])\n\n // Auto slug from name\n useEffect(() => {\n if (taskName) {\n setTaskSlug(taskName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''))\n }\n }, [taskName])\n\n // ---- Step operations ----\n const updateStep = (id: string, updates: Partial<RecordedStep>) => {\n setSteps(prev => prev.map(s => s.id === id ? { ...s, ...updates } : s))\n }\n\n const deleteStep = (id: string) => {\n setSteps(prev => prev.filter(s => s.id !== id))\n if (editingStep === id) setEditingStep(null)\n }\n\n const moveStep = (id: string, dir: 'up' | 'down') => {\n setSteps(prev => {\n const i = prev.findIndex(s => s.id === id)\n if (i === -1) return prev\n if (dir === 'up' && i === 0) return prev\n if (dir === 'down' && i === prev.length - 1) return prev\n const next = [...prev]\n const j = dir === 'up' ? i - 1 : i + 1\n ;[next[i], next[j]] = [next[j], next[i]]\n return next\n })\n }\n\n // ---- DOM extraction for AI ----\n const extractDOM = useCallback(() => {\n const walk = (el: Element, depth: number): string => {\n if (depth > 6) return ''\n const tag = el.tagName.toLowerCase()\n // Skip our devtools, scripts, styles, hidden elements\n if (['script', 'style', 'noscript', 'svg', 'path'].includes(tag)) return ''\n if (el.id?.startsWith('otw-')) return ''\n if ((el as HTMLElement).offsetParent === null && tag !== 'body' && tag !== 'html') return ''\n\n const attrs: string[] = []\n if (el.id) attrs.push(`id=\"${el.id}\"`)\n if (el.className && typeof el.className === 'string') {\n const cls = el.className.split(/\\s+/).filter(c =>\n !/^(w-|h-|p-|m-|text-|bg-|flex|grid|border|rounded|shadow|transition|transform|hover:|focus:|sm:|md:|lg:|xl:|2xl:)/.test(c)\n ).slice(0, 3).join(' ')\n if (cls) attrs.push(`class=\"${cls}\"`)\n }\n if ((el as HTMLInputElement).type) attrs.push(`type=\"${(el as HTMLInputElement).type}\"`)\n if ((el as HTMLInputElement).name) attrs.push(`name=\"${(el as HTMLInputElement).name}\"`)\n if ((el as HTMLInputElement).placeholder) attrs.push(`placeholder=\"${(el as HTMLInputElement).placeholder}\"`)\n if ((el as HTMLAnchorElement).href && tag === 'a') attrs.push(`href=\"...\"`)\n const ds = (el as HTMLElement).dataset\n if (ds?.onthewayId) attrs.push(`data-ontheway-id=\"${ds.onthewayId}\"`)\n\n const indent = ' '.repeat(depth)\n const attrStr = attrs.length ? ' ' + attrs.join(' ') : ''\n\n // Leaf text\n const text = Array.from(el.childNodes)\n .filter(n => n.nodeType === 3)\n .map(n => n.textContent?.trim())\n .filter(Boolean)\n .join(' ')\n .substring(0, 60)\n\n const children = Array.from(el.children)\n .map(c => walk(c, depth + 1))\n .filter(Boolean)\n .join('\\n')\n\n if (!children && !text && !['input', 'button', 'img', 'video', 'iframe'].includes(tag)) {\n return ''\n }\n\n if (!children) {\n return `${indent}<${tag}${attrStr}>${text ? ' ' + text + ' ' : ''}</${tag}>`\n }\n return `${indent}<${tag}${attrStr}>${text ? ' ' + text : ''}\\n${children}\\n${indent}</${tag}>`\n }\n\n return walk(document.body, 0)\n }, [])\n\n // ---- AI Generate ----\n const aiGenerate = useCallback(async () => {\n if (!aiIntent.trim()) {\n setSaveMsg('❌ Describe what the tour should do')\n return\n }\n setAiGenerating(true)\n setSaveMsg('')\n\n try {\n const dom = extractDOM()\n const res = await fetch(`${baseUrl}/api/ai/generate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n intent: aiIntent,\n dom,\n url: location.href,\n taskName: taskName || undefined,\n }),\n })\n\n const data = await res.json()\n\n if (data.steps && data.steps.length > 0) {\n const newSteps: RecordedStep[] = data.steps.map((s: Record<string, unknown>, i: number) => ({\n id: 'ai_' + Date.now() + '_' + i,\n selector: (s.selector as string) || '',\n tagName: '',\n innerText: '',\n title: (s.title as string) || `Step ${i + 1}`,\n description: (s.content as string) || (s.description as string) || '',\n position: (s.position as RecordedStep['position']) || 'auto',\n spotlight: s.spotlight !== false,\n url: location.href,\n }))\n\n setSteps(prev => [...prev, ...newSteps])\n if (!taskName && data.taskName) {\n setTaskName(data.taskName)\n }\n setEditingStep(newSteps[0].id)\n setSaveMsg(`✨ ${newSteps.length} steps generated (${data.source})`)\n } else {\n setSaveMsg('❌ No steps generated')\n }\n } catch {\n setSaveMsg('❌ AI generation failed')\n }\n setAiGenerating(false)\n }, [aiIntent, baseUrl, extractDOM, taskName])\n\n // ---- Save task ----\n const saveTask = async () => {\n if (!taskName || !taskSlug || steps.length === 0) {\n setSaveMsg('❌ Fill name + at least 1 step')\n return\n }\n setSaving(true)\n setSaveMsg('')\n try {\n const res = await fetch(`${baseUrl}/api/projects/${projectId}/tasks`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: taskName,\n slug: taskSlug,\n trigger,\n steps: steps.map(s => ({\n selector: s.selector,\n title: s.title,\n content: s.description,\n position: s.position,\n spotlight: s.spotlight,\n })),\n }),\n })\n if (res.ok) {\n setSaveMsg('✅ Saved!')\n setSteps([])\n setTaskName('')\n setTaskSlug('')\n setEditingStep(null)\n stopRecording()\n } else {\n const err = await res.json()\n setSaveMsg('❌ ' + (err.error || 'Failed'))\n }\n } catch (e) {\n setSaveMsg('❌ Network error')\n }\n setSaving(false)\n }\n\n const currentStep = steps.find(s => s.id === editingStep)\n\n // ---- Styles (inline, no Tailwind dependency) ----\n const S = {\n panel: {\n position: 'fixed' as const,\n bottom: 16,\n right: 16,\n zIndex: 2147483646,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 13,\n color: '#1f2937',\n },\n card: {\n width: 360,\n maxHeight: '80vh',\n background: '#fff',\n borderRadius: 12,\n boxShadow: '0 8px 40px rgba(0,0,0,0.18)',\n border: '1px solid #e5e7eb',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 14px',\n background: '#111',\n color: '#fff',\n fontSize: 13,\n fontWeight: 600,\n },\n tabs: {\n display: 'flex',\n borderBottom: '1px solid #e5e7eb',\n },\n tab: (active: boolean) => ({\n flex: 1,\n padding: '8px 0',\n border: 'none',\n background: active ? '#fff' : '#f9fafb',\n borderBottom: active ? '2px solid #111' : '2px solid transparent',\n cursor: 'pointer',\n fontSize: 12,\n fontWeight: active ? 600 : 400,\n color: active ? '#111' : '#6b7280',\n }),\n body: {\n flex: 1,\n overflow: 'auto' as const,\n maxHeight: 'calc(80vh - 100px)',\n },\n section: {\n padding: '10px 14px',\n borderBottom: '1px solid #f3f4f6',\n },\n input: {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #d1d5db',\n borderRadius: 6,\n fontSize: 12,\n marginTop: 4,\n boxSizing: 'border-box' as const,\n },\n select: {\n padding: '6px 8px',\n border: '1px solid #d1d5db',\n borderRadius: 6,\n fontSize: 12,\n marginTop: 4,\n },\n btn: (color: string, disabled = false) => ({\n padding: '6px 14px',\n border: 'none',\n borderRadius: 6,\n background: disabled ? '#d1d5db' : color,\n color: '#fff',\n fontSize: 12,\n fontWeight: 600,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }),\n btnOutline: {\n padding: '6px 14px',\n border: '1px solid #d1d5db',\n borderRadius: 6,\n background: '#fff',\n fontSize: 12,\n cursor: 'pointer',\n },\n stepItem: (active: boolean) => ({\n padding: '8px 10px',\n margin: '4px 0',\n borderRadius: 6,\n border: active ? '1px solid #3b82f6' : '1px solid #e5e7eb',\n background: active ? '#eff6ff' : '#fff',\n cursor: 'pointer',\n }),\n fab: {\n width: 48,\n height: 48,\n borderRadius: '50%',\n border: 'none',\n background: '#111',\n color: '#fff',\n fontSize: 22,\n cursor: 'pointer',\n boxShadow: '0 4px 16px rgba(0,0,0,0.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n label: {\n fontSize: 11,\n fontWeight: 600,\n color: '#6b7280',\n marginBottom: 2,\n display: 'block',\n },\n recDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n background: '#ef4444',\n animation: 'otw-blink 1s ease-in-out infinite',\n display: 'inline-block',\n marginRight: 6,\n },\n }\n\n // ---- Inject blink animation ----\n useEffect(() => {\n if (document.getElementById('otw-devtools-style')) return\n const style = document.createElement('style')\n style.id = 'otw-devtools-style'\n style.textContent = '@keyframes otw-blink{0%,100%{opacity:1}50%{opacity:0.3}}'\n document.head.appendChild(style)\n return () => { style.remove() }\n }, [])\n\n // Inline SVG logo (same as public/logo.svg but as data URI)\n const logoSvg = `data:image/svg+xml,${encodeURIComponent('<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\" fill=\"none\"><rect width=\"40\" height=\"40\" rx=\"10\" fill=\"#111\"/><path d=\"M12 32 C12 24,16 22,20 20 C24 18,28 16,28 8\" stroke=\"#22c55e\" stroke-width=\"3.5\" stroke-linecap=\"round\" fill=\"none\"/><path d=\"M12 32 C12 24,16 22,20 20 C24 18,28 16,28 8\" stroke=\"#fff\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-dasharray=\"2.5 3.5\" fill=\"none\" opacity=\"0.6\"/><circle cx=\"28\" cy=\"8\" r=\"3.5\" fill=\"#22c55e\"/><circle cx=\"28\" cy=\"8\" r=\"1.5\" fill=\"#111\"/><circle cx=\"12\" cy=\"32\" r=\"2.5\" fill=\"#fff\" opacity=\"0.9\"/></svg>')}`\n\n if (minimized) {\n return (\n <div ref={panelRef} style={S.panel}>\n <button\n onClick={() => setMinimized(false)}\n style={{\n ...S.fab,\n ...(recording ? { background: '#22c55e', boxShadow: '0 0 20px rgba(34,197,94,0.5)' } : {}),\n }}\n title=\"OnTheWay DevTools\"\n >\n {recording ? (\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <span style={S.recDot} />\n </span>\n ) : <img src={logoSvg} alt=\"OTW\" style={{ width: 24, height: 24 }} />}\n </button>\n </div>\n )\n }\n\n return (\n <div ref={panelRef} style={S.panel}>\n <div style={S.card}>\n {/* Header */}\n <div style={S.header}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <img src={logoSvg} alt=\"OTW\" style={{ width: 18, height: 18 }} />\n OnTheWay DevTools\n </span>\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n {recording && <span style={{ display: 'flex', alignItems: 'center', fontSize: 11 }}><span style={S.recDot} /> REC</span>}\n <button onClick={() => setMinimized(true)} style={{ background: 'none', border: 'none', color: '#fff', cursor: 'pointer', fontSize: 16 }}>−</button>\n </div>\n </div>\n\n {/* Tabs */}\n <div style={S.tabs}>\n <button style={S.tab(tab === 'record')} onClick={() => setTab('record')}>\n ⏺ Record\n </button>\n <button style={S.tab(tab === 'tasks')} onClick={() => setTab('tasks')}>\n 📋 Tasks ({tasks.length})\n </button>\n </div>\n\n {/* Body */}\n <div style={S.body}>\n {tab === 'record' ? (\n <>\n {/* Task config */}\n <div style={S.section}>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n <div>\n <label style={S.label}>Task Name</label>\n <input style={S.input} value={taskName} onChange={e => setTaskName(e.target.value)} placeholder=\"Welcome Tour\" />\n </div>\n <div>\n <label style={S.label}>Trigger</label>\n <select style={{ ...S.select, width: '100%' }} value={trigger} onChange={e => setTrigger(e.target.value as typeof trigger)}>\n <option value=\"manual\">Manual</option>\n <option value=\"auto\">Auto</option>\n <option value=\"first-visit\">First Visit</option>\n </select>\n </div>\n </div>\n {taskSlug && <div style={{ fontSize: 11, color: '#9ca3af', marginTop: 4 }}>slug: {taskSlug}</div>}\n </div>\n\n {/* Recording controls */}\n <div style={{ ...S.section, display: 'flex', gap: 8, flexWrap: 'wrap' }}>\n {!recording ? (\n <button style={S.btn('#22c55e')} onClick={startRecording}>\n ⏺ Record\n </button>\n ) : (\n <button style={S.btn('#ef4444')} onClick={stopRecording}>\n ⏹ Stop\n </button>\n )}\n <button style={S.btn('#111', saving || steps.length === 0 || !taskName)} onClick={saveTask} disabled={saving || steps.length === 0 || !taskName}>\n {saving ? '...' : '💾 Save'}\n </button>\n </div>\n\n {/* AI Generate */}\n <div style={S.section}>\n <label style={S.label}>✨ AI Generate</label>\n <div style={{ display: 'flex', gap: 6, marginTop: 4 }}>\n <input\n style={{ ...S.input, flex: 1, marginTop: 0 }}\n value={aiIntent}\n onChange={e => setAiIntent(e.target.value)}\n placeholder=\"e.g. Guide new users to create their first project\"\n onKeyDown={e => { if (e.key === 'Enter' && !aiGenerating) aiGenerate() }}\n />\n <button\n style={S.btn('#7c3aed', aiGenerating || !aiIntent.trim())}\n onClick={aiGenerate}\n disabled={aiGenerating || !aiIntent.trim()}\n >\n {aiGenerating ? '...' : '✨'}\n </button>\n </div>\n {saveMsg && <div style={{ fontSize: 11, marginTop: 4, color: saveMsg.startsWith('✅') || saveMsg.startsWith('✨') ? '#16a34a' : saveMsg.startsWith('❌') ? '#dc2626' : '#6b7280' }}>{saveMsg}</div>}\n </div>\n\n {/* Steps */}\n <div style={S.section}>\n <label style={{ ...S.label, marginBottom: 6 }}>Steps ({steps.length})</label>\n {steps.length === 0 ? (\n <div style={{ textAlign: 'center', padding: '16px 0', color: '#9ca3af', fontSize: 12 }}>\n {recording ? 'Click elements on the page to capture steps' : 'Click Record to start'}\n </div>\n ) : (\n steps.map((step, i) => (\n <div\n key={step.id}\n style={S.stepItem(editingStep === step.id)}\n onClick={() => setEditingStep(editingStep === step.id ? null : step.id)}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ fontWeight: 500, fontSize: 12 }}>\n <span style={{ color: '#9ca3af', marginRight: 6 }}>{i + 1}</span>\n {step.title}\n </span>\n <div style={{ display: 'flex', gap: 4 }}>\n <button onClick={e => { e.stopPropagation(); moveStep(step.id, 'up') }} disabled={i === 0}\n style={{ ...S.btnOutline, padding: '2px 6px', fontSize: 10 }}>↑</button>\n <button onClick={e => { e.stopPropagation(); moveStep(step.id, 'down') }} disabled={i === steps.length - 1}\n style={{ ...S.btnOutline, padding: '2px 6px', fontSize: 10 }}>↓</button>\n <button onClick={e => { e.stopPropagation(); deleteStep(step.id) }}\n style={{ ...S.btnOutline, padding: '2px 6px', fontSize: 10, color: '#ef4444' }}>✕</button>\n </div>\n </div>\n <div style={{ fontSize: 10, color: '#9ca3af', fontFamily: 'monospace', marginTop: 2, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {step.selector}\n </div>\n\n {/* Inline editor */}\n {editingStep === step.id && (\n <div style={{ marginTop: 8, display: 'flex', flexDirection: 'column', gap: 6 }}\n onClick={e => e.stopPropagation()}>\n <div>\n <label style={S.label}>Selector</label>\n <input style={{ ...S.input, fontFamily: 'monospace' }} value={step.selector}\n onChange={e => updateStep(step.id, { selector: e.target.value })} />\n </div>\n <div>\n <label style={S.label}>Title</label>\n <input style={S.input} value={step.title}\n onChange={e => updateStep(step.id, { title: e.target.value })} />\n </div>\n <div>\n <label style={S.label}>Description</label>\n <input style={S.input} value={step.description}\n onChange={e => updateStep(step.id, { description: e.target.value })} />\n </div>\n <div style={{ display: 'flex', gap: 8 }}>\n <div style={{ flex: 1 }}>\n <label style={S.label}>Position</label>\n <select style={{ ...S.select, width: '100%' }} value={step.position}\n onChange={e => updateStep(step.id, { position: e.target.value as RecordedStep['position'] })}>\n <option value=\"auto\">Auto</option>\n <option value=\"top\">Top</option>\n <option value=\"bottom\">Bottom</option>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n <div style={{ display: 'flex', alignItems: 'end', paddingBottom: 2 }}>\n <label style={{ fontSize: 11, display: 'flex', alignItems: 'center', gap: 4 }}>\n <input type=\"checkbox\" checked={step.spotlight}\n onChange={e => updateStep(step.id, { spotlight: e.target.checked })} />\n Spotlight\n </label>\n </div>\n </div>\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </>\n ) : (\n /* Tasks tab */\n <div style={S.section}>\n {loadingTasks ? (\n <div style={{ textAlign: 'center', padding: 16, color: '#9ca3af' }}>Loading...</div>\n ) : tasks.length === 0 ? (\n <div style={{ textAlign: 'center', padding: 16, color: '#9ca3af' }}>No tasks yet</div>\n ) : (\n tasks.map(task => (\n <div key={task.id} style={{ ...S.stepItem(false), display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div>\n <div style={{ fontWeight: 500, fontSize: 12 }}>{task.name}</div>\n <div style={{ fontSize: 10, color: '#9ca3af' }}>{task.slug} · {task.steps.length} steps</div>\n </div>\n <button\n style={S.btn('#111')}\n onClick={() => {\n // Preview using Driver.js\n if ((window as any).ontheway) {\n (window as any).ontheway.start(task.slug)\n }\n }}\n >▶</button>\n </div>\n ))\n )}\n <button style={{ ...S.btnOutline, width: '100%', marginTop: 8 }} onClick={fetchTasks}>\n ↻ Refresh\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ---- Vanilla JS init (non-React) ----\n\nexport const OnTheWayDevTools = {\n init(config: DevToolsConfig) {\n if (typeof window === 'undefined') return\n if (typeof document === 'undefined') return\n\n // Lazy: inject a minimal DOM-based devtools without React\n // For React apps, use <OnTheWayDevToolsPanel /> instead\n console.log(\n '%c🛤️ OnTheWay DevTools %c Use <OnTheWayDevToolsPanel /> in React, or import the standalone recorder-snippet.js',\n 'background:#22c55e;color:#fff;padding:4px 8px;border-radius:4px;font-weight:bold',\n 'color:#666'\n )\n\n // Auto-inject recorder-snippet as fallback\n const script = document.createElement('script')\n script.src = (config.serverUrl || '') + '/recorder-snippet.js'\n script.dataset.session = 'devtools_' + Date.now().toString(36)\n script.dataset.server = config.serverUrl || window.location.origin\n document.head.appendChild(script)\n }\n}\n\nexport default OnTheWayDevToolsPanel\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var chunkUE3T6TSM_cjs = require('./chunk-UE3T6TSM.cjs');
|
|
6
|
+
require('./chunk-254YHUN3.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Object.defineProperty(exports, "OnTheWay", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () { return chunkUE3T6TSM_cjs.OnTheWay; }
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "default", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return chunkUE3T6TSM_cjs.src_default; }
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=index.cjs.map
|
|
19
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OnTheWay SDK
|
|
3
|
+
* Lightweight onboarding SDK based on Driver.js
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* import { OnTheWay } from '@ontheway/sdk'
|
|
7
|
+
* const otw = new OnTheWay({ projectId: 'PROJECT_ID' })
|
|
8
|
+
* otw.start('task-slug')
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* State persisted to sessionStorage so a tour can survive page navigations.
|
|
12
|
+
*/
|
|
13
|
+
interface CrossPageTourState {
|
|
14
|
+
/** Task slug that is currently running */
|
|
15
|
+
taskSlug: string;
|
|
16
|
+
/** Index of the step to resume from */
|
|
17
|
+
stepIndex: number;
|
|
18
|
+
/** ISO timestamp when the tour started */
|
|
19
|
+
startedAt: string;
|
|
20
|
+
}
|
|
21
|
+
/** Configuration passed to the OnTheWay constructor */
|
|
22
|
+
interface OnTheWayConfig {
|
|
23
|
+
projectId: string;
|
|
24
|
+
apiUrl?: string;
|
|
25
|
+
/** Custom Driver.js CSS URL. Set to `false` to disable auto-injection. */
|
|
26
|
+
driverCssUrl?: string | false;
|
|
27
|
+
onComplete?: (taskId: string) => void;
|
|
28
|
+
onSkip?: (taskId: string, stepIndex: number) => void;
|
|
29
|
+
}
|
|
30
|
+
/** A single task returned by the server or configured locally */
|
|
31
|
+
interface TaskConfig {
|
|
32
|
+
id: string;
|
|
33
|
+
slug: string;
|
|
34
|
+
trigger: 'auto' | 'manual' | 'first-visit' | 'condition';
|
|
35
|
+
steps: StepConfig[];
|
|
36
|
+
targeting?: {
|
|
37
|
+
urlPattern?: string;
|
|
38
|
+
newUsersOnly?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Condition callback evaluated at auto-start time.
|
|
41
|
+
* Return `true` to trigger the tour.
|
|
42
|
+
* Only used when `trigger === 'condition'`.
|
|
43
|
+
*/
|
|
44
|
+
condition?: () => boolean;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Configuration for a single step in a tour */
|
|
48
|
+
interface StepConfig {
|
|
49
|
+
element: string;
|
|
50
|
+
popover: {
|
|
51
|
+
title: string;
|
|
52
|
+
description: string;
|
|
53
|
+
side?: 'top' | 'bottom' | 'left' | 'right';
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Optional URL this step should be shown on.
|
|
57
|
+
* If the current page does not match, the SDK will navigate to it and
|
|
58
|
+
* resume the tour aftehe page loads.
|
|
59
|
+
*/
|
|
60
|
+
url?: string;
|
|
61
|
+
}
|
|
62
|
+
/** @internal Runtime state of the SDK */
|
|
63
|
+
interface SDKState {
|
|
64
|
+
loaded: boolean;
|
|
65
|
+
tasks: TaskConfig[];
|
|
66
|
+
completedTasks: Set<string>;
|
|
67
|
+
}
|
|
68
|
+
declare class OnTheWay {
|
|
69
|
+
private config;
|
|
70
|
+
private state;
|
|
71
|
+
private driverInstance;
|
|
72
|
+
private visitorId;
|
|
73
|
+
/** Condition functions registered via `registerCondition` */
|
|
74
|
+
private conditions;
|
|
75
|
+
constructor(config: OnTheWayConfig);
|
|
76
|
+
private init;
|
|
77
|
+
private getOrCreateVisitorId;
|
|
78
|
+
private loadCompletedTasks;
|
|
79
|
+
private saveCompletedTask;
|
|
80
|
+
private fetchTasks;
|
|
81
|
+
private handleAutoStart;
|
|
82
|
+
/**
|
|
83
|
+
* Save cross-page tour state so it survives navigation.
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
private saveCrossPageState;
|
|
87
|
+
/**
|
|
88
|
+
* Clear cross-page tour state.
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
private clearCrossPageState;
|
|
92
|
+
/**
|
|
93
|
+
* Attempt to resume a cross-page tour from sessionStorage.
|
|
94
|
+
* @returns `true` if a tour was resumed, `false` otherwise.
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
private resumeCrossPageTour;
|
|
98
|
+
/**
|
|
99
|
+
* Check whether a step's URL matches the current page.
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
private stepUrlMatches;
|
|
103
|
+
/**
|
|
104
|
+
* Start a task at a specific step index (used for cross-page resume).
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
private startAtStep;
|
|
108
|
+
/**
|
|
109
|
+
* Register a condition function for a task slug.
|
|
110
|
+
* When the task trigger is `'condition'`, this function will be evaluated
|
|
111
|
+
* during auto-start to decide whether to show the tour.
|
|
112
|
+
*
|
|
113
|
+
* @param slug - Task slug to attach the condition to
|
|
114
|
+
* @param fn - Predicate that returns `true` to trigger the tour
|
|
115
|
+
*/
|
|
116
|
+
registerCondition(slug: string, fn: () => boolean): void;
|
|
117
|
+
/**
|
|
118
|
+
* Re-evaluate conditions and auto-start eligible tasks.
|
|
119
|
+
* Call this when application state changes (e.g. data loaded) and
|
|
120
|
+
* condition-based tours should be re-checked.
|
|
121
|
+
*/
|
|
122
|
+
checkConditions(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Start a task by slug or ID
|
|
125
|
+
*/
|
|
126
|
+
start(slugOrId: string): void;
|
|
127
|
+
/**
|
|
128
|
+
* Reset a task (allow it to show again)
|
|
129
|
+
*/
|
|
130
|
+
reset(slugOrId: string): void;
|
|
131
|
+
/**
|
|
132
|
+
* Reset all tasks for this project
|
|
133
|
+
*/
|
|
134
|
+
resetAll(): void;
|
|
135
|
+
private trackCompletion;
|
|
136
|
+
/**
|
|
137
|
+
* Get the project ID this SDK instance was configured with.
|
|
138
|
+
*/
|
|
139
|
+
getProjectId(): string;
|
|
140
|
+
/**
|
|
141
|
+
* Check if SDK is loaded
|
|
142
|
+
*/
|
|
143
|
+
isReady(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Check if a task has been completed
|
|
146
|
+
*/
|
|
147
|
+
isTaskCompleted(slugOrId: string): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Get list of available tasks
|
|
150
|
+
*/
|
|
151
|
+
getTasks(): TaskConfig[];
|
|
152
|
+
/**
|
|
153
|
+
* Get the set of completed task IDs
|
|
154
|
+
*/
|
|
155
|
+
getCompletedTaskIds(): Set<string>;
|
|
156
|
+
/**
|
|
157
|
+
* Get pending cross-page tour state, if any.
|
|
158
|
+
* Useful for the React provider to check on mount.
|
|
159
|
+
*/
|
|
160
|
+
static getCrossPageState(): CrossPageTourState | null;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { type CrossPageTourState, OnTheWay, type OnTheWayConfig, type SDKState, type StepConfig, type TaskConfig, OnTheWay as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OnTheWay SDK
|
|
3
|
+
* Lightweight onboarding SDK based on Driver.js
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* import { OnTheWay } from '@ontheway/sdk'
|
|
7
|
+
* const otw = new OnTheWay({ projectId: 'PROJECT_ID' })
|
|
8
|
+
* otw.start('task-slug')
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* State persisted to sessionStorage so a tour can survive page navigations.
|
|
12
|
+
*/
|
|
13
|
+
interface CrossPageTourState {
|
|
14
|
+
/** Task slug that is currently running */
|
|
15
|
+
taskSlug: string;
|
|
16
|
+
/** Index of the step to resume from */
|
|
17
|
+
stepIndex: number;
|
|
18
|
+
/** ISO timestamp when the tour started */
|
|
19
|
+
startedAt: string;
|
|
20
|
+
}
|
|
21
|
+
/** Configuration passed to the OnTheWay constructor */
|
|
22
|
+
interface OnTheWayConfig {
|
|
23
|
+
projectId: string;
|
|
24
|
+
apiUrl?: string;
|
|
25
|
+
/** Custom Driver.js CSS URL. Set to `false` to disable auto-injection. */
|
|
26
|
+
driverCssUrl?: string | false;
|
|
27
|
+
onComplete?: (taskId: string) => void;
|
|
28
|
+
onSkip?: (taskId: string, stepIndex: number) => void;
|
|
29
|
+
}
|
|
30
|
+
/** A single task returned by the server or configured locally */
|
|
31
|
+
interface TaskConfig {
|
|
32
|
+
id: string;
|
|
33
|
+
slug: string;
|
|
34
|
+
trigger: 'auto' | 'manual' | 'first-visit' | 'condition';
|
|
35
|
+
steps: StepConfig[];
|
|
36
|
+
targeting?: {
|
|
37
|
+
urlPattern?: string;
|
|
38
|
+
newUsersOnly?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Condition callback evaluated at auto-start time.
|
|
41
|
+
* Return `true` to trigger the tour.
|
|
42
|
+
* Only used when `trigger === 'condition'`.
|
|
43
|
+
*/
|
|
44
|
+
condition?: () => boolean;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Configuration for a single step in a tour */
|
|
48
|
+
interface StepConfig {
|
|
49
|
+
element: string;
|
|
50
|
+
popover: {
|
|
51
|
+
title: string;
|
|
52
|
+
description: string;
|
|
53
|
+
side?: 'top' | 'bottom' | 'left' | 'right';
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Optional URL this step should be shown on.
|
|
57
|
+
* If the current page does not match, the SDK will navigate to it and
|
|
58
|
+
* resume the tour aftehe page loads.
|
|
59
|
+
*/
|
|
60
|
+
url?: string;
|
|
61
|
+
}
|
|
62
|
+
/** @internal Runtime state of the SDK */
|
|
63
|
+
interface SDKState {
|
|
64
|
+
loaded: boolean;
|
|
65
|
+
tasks: TaskConfig[];
|
|
66
|
+
completedTasks: Set<string>;
|
|
67
|
+
}
|
|
68
|
+
declare class OnTheWay {
|
|
69
|
+
private config;
|
|
70
|
+
private state;
|
|
71
|
+
private driverInstance;
|
|
72
|
+
private visitorId;
|
|
73
|
+
/** Condition functions registered via `registerCondition` */
|
|
74
|
+
private conditions;
|
|
75
|
+
constructor(config: OnTheWayConfig);
|
|
76
|
+
private init;
|
|
77
|
+
private getOrCreateVisitorId;
|
|
78
|
+
private loadCompletedTasks;
|
|
79
|
+
private saveCompletedTask;
|
|
80
|
+
private fetchTasks;
|
|
81
|
+
private handleAutoStart;
|
|
82
|
+
/**
|
|
83
|
+
* Save cross-page tour state so it survives navigation.
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
private saveCrossPageState;
|
|
87
|
+
/**
|
|
88
|
+
* Clear cross-page tour state.
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
private clearCrossPageState;
|
|
92
|
+
/**
|
|
93
|
+
* Attempt to resume a cross-page tour from sessionStorage.
|
|
94
|
+
* @returns `true` if a tour was resumed, `false` otherwise.
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
private resumeCrossPageTour;
|
|
98
|
+
/**
|
|
99
|
+
* Check whether a step's URL matches the current page.
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
private stepUrlMatches;
|
|
103
|
+
/**
|
|
104
|
+
* Start a task at a specific step index (used for cross-page resume).
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
private startAtStep;
|
|
108
|
+
/**
|
|
109
|
+
* Register a condition function for a task slug.
|
|
110
|
+
* When the task trigger is `'condition'`, this function will be evaluated
|
|
111
|
+
* during auto-start to decide whether to show the tour.
|
|
112
|
+
*
|
|
113
|
+
* @param slug - Task slug to attach the condition to
|
|
114
|
+
* @param fn - Predicate that returns `true` to trigger the tour
|
|
115
|
+
*/
|
|
116
|
+
registerCondition(slug: string, fn: () => boolean): void;
|
|
117
|
+
/**
|
|
118
|
+
* Re-evaluate conditions and auto-start eligible tasks.
|
|
119
|
+
* Call this when application state changes (e.g. data loaded) and
|
|
120
|
+
* condition-based tours should be re-checked.
|
|
121
|
+
*/
|
|
122
|
+
checkConditions(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Start a task by slug or ID
|
|
125
|
+
*/
|
|
126
|
+
start(slugOrId: string): void;
|
|
127
|
+
/**
|
|
128
|
+
* Reset a task (allow it to show again)
|
|
129
|
+
*/
|
|
130
|
+
reset(slugOrId: string): void;
|
|
131
|
+
/**
|
|
132
|
+
* Reset all tasks for this project
|
|
133
|
+
*/
|
|
134
|
+
resetAll(): void;
|
|
135
|
+
private trackCompletion;
|
|
136
|
+
/**
|
|
137
|
+
* Get the project ID this SDK instance was configured with.
|
|
138
|
+
*/
|
|
139
|
+
getProjectId(): string;
|
|
140
|
+
/**
|
|
141
|
+
* Check if SDK is loaded
|
|
142
|
+
*/
|
|
143
|
+
isReady(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Check if a task has been completed
|
|
146
|
+
*/
|
|
147
|
+
isTaskCompleted(slugOrId: string): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Get list of available tasks
|
|
150
|
+
*/
|
|
151
|
+
getTasks(): TaskConfig[];
|
|
152
|
+
/**
|
|
153
|
+
* Get the set of completed task IDs
|
|
154
|
+
*/
|
|
155
|
+
getCompletedTaskIds(): Set<string>;
|
|
156
|
+
/**
|
|
157
|
+
* Get pending cross-page tour state, if any.
|
|
158
|
+
* Useful for the React provider to check on mount.
|
|
159
|
+
*/
|
|
160
|
+
static getCrossPageState(): CrossPageTourState | null;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { type CrossPageTourState, OnTheWay, type OnTheWayConfig, type SDKState, type StepConfig, type TaskConfig, OnTheWay as default };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/react.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkNRUQU5AR_cjs = require('./chunk-NRUQU5AR.cjs');
|
|
4
|
+
require('./chunk-UE3T6TSM.cjs');
|
|
5
|
+
require('./chunk-254YHUN3.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "OnTheWayProvider", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkNRUQU5AR_cjs.OnTheWayProvider; }
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "useOnTheWay", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkNRUQU5AR_cjs.useOnTheWay; }
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=react.cjs.map
|
|
18
|
+
//# sourceMappingURL=react.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"react.cjs"}
|
package/dist/react.d.cts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { OnTheWay } from './index.cjs';
|
|
4
|
+
|
|
5
|
+
/** Context value exposed by the OnTheWay provider */
|
|
6
|
+
interface OnTheWayContextValue {
|
|
7
|
+
/** SDK instance, null before initialisation */
|
|
8
|
+
otw: OnTheWay | null;
|
|
9
|
+
/** Whether the SDK has finished loading */
|
|
10
|
+
ready: boolean;
|
|
11
|
+
/** Start a tour by slug or ID */
|
|
12
|
+
start: (slugOrId: string) => void;
|
|
13
|
+
/** Reset a specific task */
|
|
14
|
+
reset: (slugOrId: string) => void;
|
|
15
|
+
/** Reset all tasks */
|
|
16
|
+
resetAll: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Register a condition function for conditional triggers.
|
|
19
|
+
* The function is evaluated during auto-start when the task trigger is `'condition'`.
|
|
20
|
+
*/
|
|
21
|
+
registerCondition: (slug: string, fn: () => boolean) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Re-evaluate conditions and start eligible tours.
|
|
24
|
+
* Call after state changes that might satisfy a condition.
|
|
25
|
+
*/
|
|
26
|
+
checkConditions: () => void;
|
|
27
|
+
/** Check whether a given task has been completed */
|
|
28
|
+
isTaskCompleted: (slugOrId: string) => boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Props for the OnTheWayProvider component */
|
|
31
|
+
interface OnTheWayProviderProps {
|
|
32
|
+
projectId: string;
|
|
33
|
+
apiUrl?: string;
|
|
34
|
+
onComplete?: (taskId: string) => void;
|
|
35
|
+
onSkip?: (taskId: string, stepIndex: number) => void;
|
|
36
|
+
children: ReactNode;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Provides the OnTheWay SDK to descendant components.
|
|
40
|
+
*
|
|
41
|
+
* Wrap your application (or a subtree) with this provider so that
|
|
42
|
+
* `useOnTheWay()` returns the SDK instance.
|
|
43
|
+
*
|
|
44
|
+
* On mount the provider also checks for any pending cross-page tour
|
|
45
|
+
* (persisted in `sessionStorage`) and resumes it automatically.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <OnTheWayProvider projectId="proj_abc">
|
|
50
|
+
* <App />
|
|
51
|
+
* </OnTheWayProvider>
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
declare function OnTheWayProvider({ projectId, apiUrl, onComplete, onSkip, children, }: OnTheWayProviderProps): react_jsx_runtime.JSX.Element;
|
|
55
|
+
/**
|
|
56
|
+
* Access the OnTheWay SDK from any component wrapped by `<OnTheWayProvider>`.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* function HelpButton() {
|
|
61
|
+
* const { start } = useOnTheWay()
|
|
62
|
+
* return <button onClick={() => start('welcome')}>Help</button>
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
declare function useOnTheWay(): OnTheWayContextValue;
|
|
67
|
+
|
|
68
|
+
export { type OnTheWayContextValue, OnTheWayProvider, type OnTheWayProviderProps, useOnTheWay };
|