@syntrologie/runtime-sdk 2.10.0 → 2.11.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/dist/actions/schema.js +4 -3
- package/dist/{chunk-XDYJ64IN.js → chunk-37TTQRH5.js} +2 -2
- package/dist/{chunk-OIDBMIRB.js → chunk-H3FAYTUV.js} +110 -138
- package/dist/chunk-H3FAYTUV.js.map +7 -0
- package/dist/chunk-JMHRHAEL.js +18 -0
- package/dist/chunk-JMHRHAEL.js.map +7 -0
- package/dist/{chunk-R5DNAIRI.js → chunk-NBFQGKSV.js} +3 -3
- package/dist/{chunk-BU4Z6PD7.js → chunk-Q77NT67W.js} +1 -16
- package/dist/{chunk-BU4Z6PD7.js.map → chunk-Q77NT67W.js.map} +1 -1
- package/dist/config/schema.js +3 -2
- package/dist/decisions/schema.js +2 -1
- package/dist/events/normalizers/posthog.d.ts +4 -50
- package/dist/events/types.d.ts +8 -25
- package/dist/index.js +14 -8
- package/dist/index.js.map +3 -3
- package/dist/react.js +5 -4
- package/dist/react.js.map +1 -1
- package/dist/replayMirror-QZ3GQ527.js +32 -0
- package/dist/replayMirror-QZ3GQ527.js.map +7 -0
- package/dist/smart-canvas.esm.js +51 -51
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +669 -148
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +51 -51
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/telemetry/adapters/posthog.d.ts +31 -0
- package/dist/telemetry/replayMirror.d.ts +7 -0
- package/dist/version.d.ts +1 -1
- package/package.json +8 -7
- package/dist/chunk-OIDBMIRB.js.map +0 -7
- /package/dist/{chunk-XDYJ64IN.js.map → chunk-37TTQRH5.js.map} +0 -0
- /package/dist/{chunk-R5DNAIRI.js.map → chunk-NBFQGKSV.js.map} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../../adaptives/adaptive-chatbot/dist/ChatAssistant.js", "../../adaptives/adaptive-chatbot/dist/useChat.js", "../../adaptives/adaptive-chatbot/dist/actionParser.js", "../../adaptives/adaptive-chatbot/dist/apiClient.js", "../../adaptives/adaptive-chatbot/dist/runtime.js", "../../adaptives/adaptive-faq/dist/executors.js", "../../adaptives/adaptive-faq/dist/FAQWidget.js", "../../../node_modules/marked/src/defaults.ts", "../../../node_modules/marked/src/rules.ts", "../../../node_modules/marked/src/helpers.ts", "../../../node_modules/marked/src/Tokenizer.ts", "../../../node_modules/marked/src/Lexer.ts", "../../../node_modules/marked/src/Renderer.ts", "../../../node_modules/marked/src/TextRenderer.ts", "../../../node_modules/marked/src/Parser.ts", "../../../node_modules/marked/src/Hooks.ts", "../../../node_modules/marked/src/Instance.ts", "../../../node_modules/marked/src/marked.ts", "../../adaptives/adaptive-faq/dist/runtime.js", "../../adaptives/adaptive-gamification/dist/runtime.js", "../../adaptives/adaptive-nav/dist/NavWidget.js", "../../adaptives/adaptive-nav/dist/runtime.js", "../src/apps/builtinRuntimeModules.generated.ts", "../src/components/TileWheel.tsx", "../src/config-validator.ts", "../src/overlays/schema.ts", "../src/overlays/fetcher.ts", "../src/SmartCanvasPortal.tsx", "../src/context/schema.ts", "../src/events/schema.ts", "../src/state/schema.ts"],
|
|
4
|
-
"sourcesContent": ["// ============================================================================\n// Early SynOS exposure for adaptive self-registration + shared React\n// ============================================================================\n// Adaptive bundles loaded via <script> (IIFE) check window.SynOS.appRegistry\n// to self-register. In the Chrome extension's dev mode, adaptives load BEFORE\n// Syntro.init() runs. Expose the singleton appRegistry here (module scope) so\n// it's available as soon as smart-canvas.min.js loads. Syntro.init() later\n// enriches the SynOS object with runtime/version but reuses the same registry.\n//\n// React and ReactDOM are also exposed here so that adaptive bundles built with\n// syntroReactPlugin can resolve their lazy shims via SynOS.React / SynOS.ReactDOM.\n// This makes the runtime SDK the single React owner \u2014 adaptives and the editor\n// SDK consume React from SynOS, never from their own bundles.\n\nimport React from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport * as ReactDOMClient from 'react-dom/client';\nimport { appRegistry as _earlyAppRegistry } from './apps';\nimport { registerBuiltinRuntimeModules } from './apps/builtinRuntimeModules.generated';\n\n// Build-time constants injected by esbuild `define` in build-cdn.js / build.js\ndeclare const __BUILD_TIMESTAMP__: string;\ndeclare const __BUILD_GIT_HASH__: string;\n\nexport const RUNTIME_SDK_BUILD =\n typeof __BUILD_TIMESTAMP__ !== 'undefined'\n ? `${__BUILD_TIMESTAMP__} (${__BUILD_GIT_HASH__})`\n : 'dev';\n\nexport * from './api';\nexport * from './components/ShadowCanvasOverlay';\nexport * from './components/TileCard';\nexport * from './components/TileWheel';\nexport * from './config-validator';\nexport * from './configFetcher';\nexport * from './controller';\nexport * from './experiments';\nexport * from './hooks/useShadowCanvasConfig';\n// Metrics for session-based targeting\nexport * from './metrics';\nexport * from './overlays/fetcher';\nexport * from './overlays/schema';\nexport * from './overlays/types';\nexport * from './ShadowRootContext';\nexport * from './SmartCanvasApp';\nexport * from './SmartCanvasElement';\nexport * from './SmartCanvasPortal';\nexport * from './telemetry';\nexport * from './types';\nexport * from './version';\n\n// ============================================================================\n// v2 Runtime Modules\n// ============================================================================\n\n// Actions - Unified execution layer for interventions\nexport * from './actions';\n// Anchor - Centralized DOM observation for anchor resolution\nexport * from './anchor';\n// Apps - SynOS app system\nexport * from './apps';\n// Context - Page/session/viewport state management\nexport * from './context';\n// Decisions - Strategy-based conditional rendering\nexport * from './decisions';\n// Events - Normalized event stream\nexport * from './events';\n// Events - Normalized event stream\nexport * from './events';\nexport type { NavigationDiagnostics, NavigationListener } from './navigation/NavigationMonitor';\n// Navigation - Centralized History API monitoring\nexport { NavigationMonitor } from './navigation/NavigationMonitor';\n// Notifications - Toast notification system\nexport * from './notifications';\n// React context for runtime access\nexport {\n RuntimeProvider,\n useDecision,\n usePageContext,\n useRuntime,\n useRuntimeContext,\n useRuntimeEvents,\n useRuntimeState,\n useSessionContext,\n useViewportContext,\n} from './RuntimeProvider';\nexport type { RuntimeMode, SmartCanvasRuntime, SmartCanvasRuntimeOptions } from './runtime';\n// Unified runtime\nexport { createSmartCanvasRuntime, RUNTIME_VERSION } from './runtime';\n// State - Persistent state storage with helpers\nexport * from './state';\n// State - Persistent state storage with helpers\nexport * from './state';\n// Surfaces - Managed surface system for rendering UI\nexport * from './surfaces';\n// Widgets - Mountable component registry\nexport * from './widgets';\n\n// ============================================================================\n// Single-token initialization\n// ============================================================================\n\nexport type { SyntroInitOptions, SyntroInitResult } from './bootstrap';\nexport { Syntro } from './bootstrap';\nexport type { SyntroTokenPayload } from './token';\nexport { decodeToken, encodeToken } from './token';\n\nif (typeof window !== 'undefined') {\n console.log(`[Syntro Runtime] Build: ${RUNTIME_SDK_BUILD}`);\n\n const existing = (window as any).SynOS;\n const registry = existing?.appRegistry || _earlyAppRegistry;\n (window as any).SynOS = {\n ...existing,\n appRegistry: registry,\n _runtimeBuild: RUNTIME_SDK_BUILD,\n React,\n ReactDOM: { ...ReactDOMClient, createPortal, flushSync },\n };\n\n // Register all built-in adaptive runtime modules at module load time.\n // This ensures executors, widgets, and event handlers are available\n // before Syntro.init() runs or any config is fetched.\n registerBuiltinRuntimeModules(registry);\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive Chatbot - ChatAssistant Component\n *\n * Main React component for the AI chat assistant widget.\n * Renders a message list with auto-scroll, loading indicator, and input form.\n */\nimport { base, purple, red, slateGrey } from '@syntro/design-system/tokens';\nimport React, { useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useChat } from './useChat';\n// ============================================================================\n// Styles\n// ============================================================================\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n touchAction: 'none',\n },\n messageList: {\n flex: 1,\n overflowY: 'auto',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n },\n messageBubble: {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n },\n userMessage: {\n alignSelf: 'flex-end',\n backgroundColor: purple[4],\n color: base.white,\n borderBottomRightRadius: '4px',\n },\n assistantMessage: {\n alignSelf: 'flex-start',\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n color: slateGrey[10],\n borderBottomLeftRadius: '4px',\n },\n loadingDots: {\n alignSelf: 'flex-start',\n padding: '8px 16px',\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n borderRadius: '12px',\n color: slateGrey[8],\n fontSize: '13px',\n },\n errorBanner: {\n padding: '8px 12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: red[4],\n fontSize: '13px',\n borderRadius: '8px',\n margin: '0 12px',\n },\n inputForm: {\n display: 'flex',\n gap: '8px',\n padding: '12px',\n borderTop: '1px solid rgba(255, 255, 255, 0.06)',\n },\n input: {\n flex: 1,\n padding: '8px 12px',\n borderRadius: '8px',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n color: slateGrey[12],\n fontSize: '14px',\n outline: 'none',\n fontFamily: 'inherit',\n },\n sendButton: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: purple[4],\n color: base.white,\n fontWeight: 600,\n fontSize: '13px',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n },\n sendButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n// ============================================================================\n// MessageBubble Component\n// ============================================================================\nfunction MessageBubble({ message }) {\n const isUser = message.role === 'user';\n const bubbleStyle = {\n ...styles.messageBubble,\n ...(isUser ? styles.userMessage : styles.assistantMessage),\n };\n return _jsx(\"div\", { style: bubbleStyle, children: message.text });\n}\nexport function ChatAssistant({ config, runtime, tileId }) {\n const { messages, isLoading, error, sendMessage, clearMessages: _clearMessages, } = useChat({\n backendUrl: config.backendUrl,\n tileId,\n runtime,\n greeting: config.greeting,\n maxHistory: config.maxHistory,\n mlflowRunId: config.mlflowRunId,\n });\n const messageListRef = useRef(null);\n const inputRef = useRef(null);\n // Auto-scroll to bottom on new messages\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, []);\n const handleSubmit = (e) => {\n e.preventDefault();\n const input = inputRef.current;\n if (!input || !input.value.trim() || isLoading)\n return;\n const text = input.value;\n input.value = '';\n sendMessage(text);\n };\n return (_jsxs(\"div\", { style: styles.container, \"data-testid\": \"chat-assistant\", children: [_jsxs(\"div\", { ref: messageListRef, style: styles.messageList, children: [messages.map((msg) => (_jsx(MessageBubble, { message: msg }, msg.id))), isLoading && _jsx(\"div\", { style: styles.loadingDots, children: \"Thinking...\" })] }), error && _jsx(\"div\", { style: styles.errorBanner, children: error }), _jsxs(\"form\", { onSubmit: handleSubmit, style: styles.inputForm, children: [_jsx(\"input\", { ref: inputRef, style: styles.input, placeholder: \"Ask anything...\", disabled: isLoading, \"data-testid\": \"chat-input\" }), _jsx(\"button\", { type: \"submit\", disabled: isLoading, style: {\n ...styles.sendButton,\n ...(isLoading ? styles.sendButtonDisabled : {}),\n }, \"data-testid\": \"chat-send\", children: \"Send\" })] })] }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\nexport const ChatAssistantMountableWidget = {\n mount(container, mountConfig) {\n const { config, runtime, tileId = 'chatbot-widget', } = (mountConfig || {});\n // React rendering when config + runtime + ReactDOM are available\n if (config && runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(ChatAssistant, {\n config,\n runtime,\n tileId,\n }));\n return () => {\n root.unmount();\n };\n }\n if (!config || !runtime) {\n container.innerHTML = `<div style=\"padding: 16px; color: ${slateGrey[8]};\">Chat widget requires config and runtime.</div>`;\n return () => {\n container.innerHTML = '';\n };\n }\n // HTML fallback\n container.innerHTML = `\n <div style=\"padding: 16px; font-family: system-ui; color: ${slateGrey[10]};\">\n <p style=\"margin: 0 0 8px; color: ${slateGrey[8]};\">${config.greeting || 'Hi! How can I help?'}</p>\n <p style=\"margin: 0; font-size: 12px; color: ${slateGrey[7]};\">Chat widget mounted. Awaiting React renderer.</p>\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default ChatAssistant;\n", "/**\n * Adaptive Chatbot - useChat Hook\n *\n * React hook managing chat message state, API communication,\n * history management, and action execution via the runtime ActionEngine.\n */\nimport { useCallback, useRef, useState } from 'react';\nimport { parseActions } from './actionParser';\nimport { sendMessage } from './apiClient';\nlet nextId = 0;\nfunction generateId() {\n return `msg-${Date.now()}-${++nextId}`;\n}\nexport function useChat(options) {\n const { backendUrl, tileId, runtime, greeting, maxHistory = 20, mlflowRunId, config } = options;\n const [messages, setMessages] = useState(() => {\n if (greeting) {\n return [\n {\n id: generateId(),\n role: 'assistant',\n text: greeting,\n timestamp: Date.now(),\n },\n ];\n }\n return [];\n });\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n const batchHandleRef = useRef(null);\n const send = useCallback(async (text) => {\n const trimmed = text.trim();\n if (!trimmed)\n return;\n setError(null);\n const userMessage = {\n id: generateId(),\n role: 'user',\n text: trimmed,\n timestamp: Date.now(),\n };\n setMessages((prev) => [...prev, userMessage]);\n setIsLoading(true);\n try {\n // Build history from current messages + new user message\n const currentMessages = [...messages, userMessage];\n const historySlice = currentMessages.slice(-maxHistory).map((m) => ({\n role: m.role,\n content: m.text,\n }));\n const response = await sendMessage(backendUrl, {\n message: trimmed,\n history: historySlice,\n mlflow_run_id: mlflowRunId,\n current_config: config,\n });\n // Parse actions from the LLM response\n const { displayText, actions } = parseActions(response.response);\n const assistantMessage = {\n id: generateId(),\n role: 'assistant',\n text: displayText,\n timestamp: Date.now(),\n };\n setMessages((prev) => [...prev, assistantMessage]);\n // Execute actions if present\n if (actions.length > 0) {\n // Revert previous batch\n if (batchHandleRef.current?.isApplied()) {\n await batchHandleRef.current.revertAll();\n }\n batchHandleRef.current = await runtime.actions.applyBatch(actions);\n runtime.events.publish('chatbot.actions_applied', {\n count: actions.length,\n kinds: actions.map((a) => a.kind),\n tileId,\n });\n }\n }\n catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(message);\n }\n finally {\n setIsLoading(false);\n }\n }, [backendUrl, messages, maxHistory, mlflowRunId, config, runtime, tileId]);\n const clearMessages = useCallback(() => {\n setMessages([]);\n setError(null);\n // Revert any active actions\n if (batchHandleRef.current?.isApplied()) {\n batchHandleRef.current.revertAll();\n batchHandleRef.current = null;\n }\n sessionStorage.removeItem(`syntro:chatbot:history:${tileId}`);\n }, [tileId]);\n return {\n messages,\n isLoading,\n error,\n sendMessage: send,\n clearMessages,\n };\n}\n", "/**\n * Adaptive Chatbot - Action Parser\n *\n * Extracts JSON action blocks from LLM markdown responses.\n * Actions are identified by having a `kind` field in a ```json code fence.\n */\nconst JSON_FENCE_RE = /```json\\s*\\n([\\s\\S]*?)```/g;\n/**\n * Parse an LLM response, extracting action blocks from JSON code fences.\n *\n * - Blocks with a `kind` field are treated as actions and removed from display text.\n * - Blocks without `kind` or with invalid JSON are left in the display text.\n */\nexport function parseActions(input) {\n const actions = [];\n let displayText = input;\n // Collect matches in reverse order so we can splice display text without index shifting\n const matches = [];\n let match;\n // Reset regex state\n JSON_FENCE_RE.lastIndex = 0;\n while ((match = JSON_FENCE_RE.exec(input)) !== null) {\n matches.push({\n fullMatch: match[0],\n json: match[1],\n index: match.index,\n });\n }\n // Process in reverse to preserve indices when removing from displayText\n for (let i = matches.length - 1; i >= 0; i--) {\n const { fullMatch, json } = matches[i];\n let parsed;\n try {\n parsed = JSON.parse(json);\n }\n catch {\n // Malformed JSON \u2014 leave in display text\n continue;\n }\n if (typeof parsed === 'object' &&\n parsed !== null &&\n 'kind' in parsed &&\n typeof parsed.kind === 'string') {\n actions.unshift(parsed);\n // Remove the action block from display text\n displayText = displayText.replace(fullMatch, '');\n }\n }\n // Clean up extra blank lines left from removed blocks\n displayText = displayText.replace(/\\n{3,}/g, '\\n\\n').trim();\n return { displayText, actions };\n}\n", "/**\n * Adaptive Chatbot - API Client\n *\n * Auth-aware fetch client that reads Stytch JWT from cookies\n * and workspace ID from localStorage.\n */\nexport class AuthError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AuthError';\n }\n}\n/**\n * Read auth credentials from browser cookie and localStorage.\n * Throws AuthError if credentials are missing.\n */\nexport function getAuthHeaders() {\n const cookieMatch = document.cookie.match(/stytch_session_jwt=([^;]*)/);\n if (!cookieMatch || !cookieMatch[1]) {\n throw new AuthError('No authentication token found');\n }\n const workspaceId = localStorage.getItem('syntrologie_workspace_id');\n if (!workspaceId) {\n throw new AuthError('No workspace ID found');\n }\n return {\n Authorization: `Bearer ${cookieMatch[1]}`,\n 'X-Workspace-Id': workspaceId,\n };\n}\n/**\n * Send a chat message to the backend.\n */\nexport async function sendMessage(url, request) {\n const authHeaders = getAuthHeaders();\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthError('Session expired or unauthorized');\n }\n throw new Error(`Chat request failed: ${response.status} ${response.statusText}`);\n }\n return response.json();\n}\n", "/**\n * Adaptive Chatbot - Runtime Module\n *\n * Runtime manifest for the AI chat assistant adaptive.\n * This is a widget-based adaptive with no action executors.\n */\nimport { ChatAssistantMountableWidget } from './ChatAssistant';\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\nexport const runtime = {\n id: 'adaptive-chatbot',\n version: '1.0.0',\n name: 'Chat Assistant',\n description: 'AI chat assistant with action execution capabilities',\n /** No action executors \u2014 chatbot uses existing action kinds via applyBatch */\n executors: [],\n /** Widget definitions for the runtime's WidgetRegistry */\n widgets: [\n {\n id: 'adaptive-chatbot:assistant',\n component: ChatAssistantMountableWidget,\n metadata: {\n name: 'Chat Assistant',\n description: 'AI-powered chat assistant that can execute DOM actions',\n icon: '\uD83D\uDCAC',\n },\n },\n ],\n};\nexport default runtime;\n", "/**\n * Adaptive FAQ - Action Executors\n *\n * Three executors that operate on the FAQStore:\n * - executeScrollToFaq: scroll to a FAQ item and optionally expand it\n * - executeToggleFaqItem: open / close / toggle a FAQ item\n * - executeUpdateFaq: add, remove, reorder, or replace FAQ items\n */\n// ============================================================================\n// Helpers\n// ============================================================================\n/**\n * Resolve a FAQ item by direct ID or by fuzzy question text match.\n * Throws if neither yields a result.\n */\nfunction resolveItem(store, itemId, itemQuestion) {\n if (itemId) {\n const found = store.getState().items.find((i) => i.config.id === itemId);\n if (found)\n return found;\n }\n if (itemQuestion) {\n const found = store.findByQuestion(itemQuestion);\n if (found)\n return found;\n }\n throw new Error('FAQ item not found');\n}\n// ============================================================================\n// executeScrollToFaq\n// ============================================================================\n/**\n * Scroll to a FAQ item in the DOM and optionally expand it.\n *\n * Looks up the item by `itemId` or `itemQuestion`, scrolls the matching\n * `[data-faq-item-id]` element into view, and expands it unless\n * `expand` is explicitly set to `false`.\n */\nexport async function executeScrollToFaq(action, context, store) {\n const item = resolveItem(store, action.itemId, action.itemQuestion);\n const { id } = item.config;\n // Expand the item unless explicitly told not to\n if (action.expand !== false) {\n store.expand(id);\n }\n // Scroll the DOM element into view (may be absent in test environments)\n const el = document.querySelector(`[data-faq-item-id=\"${id}\"]`);\n if (el) {\n el.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n });\n }\n // Publish analytics event\n context.publishEvent('faq:scroll_to', { itemId: id });\n return {\n cleanup: () => {\n // Optionally collapse on revert\n },\n };\n}\n// ============================================================================\n// executeToggleFaqItem\n// ============================================================================\n/**\n * Open, close, or toggle a FAQ item's expanded state.\n */\nexport async function executeToggleFaqItem(action, context, store) {\n const item = resolveItem(store, action.itemId, action.itemQuestion);\n const { id } = item.config;\n const desiredState = action.state ?? 'toggle';\n let newState;\n switch (desiredState) {\n case 'open':\n store.expand(id);\n newState = 'open';\n break;\n case 'closed':\n store.collapse(id);\n newState = 'closed';\n break;\n default: {\n const wasExpanded = store.getState().expandedItems.has(id);\n store.toggle(id);\n newState = wasExpanded ? 'closed' : 'open';\n break;\n }\n }\n context.publishEvent('faq:toggle', { itemId: id, newState });\n return {\n cleanup: () => {\n // Revert toggle on cleanup\n },\n };\n}\n// ============================================================================\n// executeUpdateFaq\n// ============================================================================\n/**\n * Add, remove, reorder, or replace FAQ items in the store.\n */\nexport async function executeUpdateFaq(action, context, store) {\n switch (action.operation) {\n case 'add': {\n const items = action.items ?? [];\n const position = action.position === 'prepend' ? 'prepend' : 'append';\n store.addItems(items, position);\n break;\n }\n case 'remove': {\n if (!action.itemId) {\n throw new Error('FAQ item not found');\n }\n // Verify the item exists before removing\n const exists = store.getState().items.some((i) => i.config.id === action.itemId);\n if (!exists) {\n throw new Error('FAQ item not found');\n }\n store.removeItem(action.itemId);\n break;\n }\n case 'reorder': {\n const order = action.order ?? [];\n store.reorderItems(order);\n break;\n }\n case 'replace': {\n const items = action.items ?? [];\n store.replaceItems(items);\n break;\n }\n }\n context.publishEvent('faq:update', { operation: action.operation });\n return {\n cleanup: () => {\n // Could snapshot previous state for undo\n },\n };\n}\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by adaptive-faq.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executorDefinitions = [\n { kind: 'faq:scroll_to', executor: executeScrollToFaq },\n { kind: 'faq:toggle_item', executor: executeToggleFaqItem },\n { kind: 'faq:update', executor: executeUpdateFaq },\n];\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive FAQ - FAQWidget Component\n *\n * React component that renders a collapsible Q&A accordion with per-item\n * conditional visibility based on triggerWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (faq:question) serve as configuration data for the parent widget.\n */\nimport { purple, slateGrey } from '@syntro/design-system/tokens';\nimport { Marked } from 'marked';\nimport React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nconst marked = new Marked({ async: false, gfm: true, breaks: true });\n// ============================================================================\n// Helpers\n// ============================================================================\n/** Extract plain text from an FAQAnswer for search matching */\nfunction getAnswerText(answer) {\n if (typeof answer === 'string')\n return answer;\n if (answer.type === 'rich')\n return answer.html;\n return answer.content;\n}\n/** Render an FAQAnswer based on its type */\nfunction renderAnswer(answer) {\n if (typeof answer === 'string') {\n return _jsx(\"p\", { style: { margin: 0 }, children: answer });\n }\n if (answer.type === 'rich') {\n // biome-ignore lint/security/noDangerouslySetInnerHtml: content is pre-sanitized by backend \u2014 FAQAnswer.html is CMS/config content, not user-controlled input\n return _jsx(\"div\", { style: { margin: 0 }, dangerouslySetInnerHTML: { __html: answer.html } });\n }\n // markdown \u2014 parse to HTML and render\n const html = marked.parse(answer.content);\n return (\n // biome-ignore lint/security/noDangerouslySetInnerHtml: markdown content is CMS/config content, not user-controlled input\n _jsx(\"div\", { style: { margin: 0 }, \"data-faq-markdown\": \"\", dangerouslySetInnerHTML: { __html: html } }));\n}\n/** Resolve feedback config into a normalized FeedbackConfig or null */\nfunction resolveFeedbackConfig(feedback) {\n if (!feedback)\n return null;\n if (feedback === true) {\n return { style: 'thumbs' };\n }\n return feedback;\n}\n/** Get the feedback prompt text */\nfunction getFeedbackPrompt(feedbackConfig) {\n return feedbackConfig.prompt || 'Was this helpful?';\n}\n// ============================================================================\n// Styles\n// ============================================================================\nconst baseStyles = {\n container: {\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '800px',\n margin: '0 auto',\n },\n searchWrapper: {\n marginBottom: '8px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n borderRadius: '8px',\n fontSize: '14px',\n outline: 'none',\n transition: 'border-color 0.15s ease',\n backgroundColor: 'var(--sc-content-search-background)',\n color: 'var(--sc-content-search-color)',\n },\n accordion: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n },\n item: {\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.15s ease',\n },\n question: {\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: 500,\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n },\n chevron: {\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n color: 'var(--sc-content-chevron-color, currentColor)',\n },\n answer: {\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: 1.6,\n overflow: 'hidden',\n transition: 'max-height 0.2s ease, padding 0.2s ease',\n },\n category: {\n display: 'inline-block',\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: '4px 8px',\n borderRadius: '4px',\n marginBottom: '8px',\n },\n categoryHeader: {\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: 700,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n marginTop: 'var(--sc-content-category-gap, 4px)',\n },\n feedback: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginTop: '12px',\n paddingTop: '10px',\n borderTop: '1px solid rgba(0, 0, 0, 0.08)',\n fontSize: '13px',\n },\n feedbackButton: {\n background: 'none',\n border: '1px solid transparent',\n cursor: 'pointer',\n fontSize: '16px',\n padding: '4px 8px',\n borderRadius: '4px',\n transition: 'background-color 0.15s ease, border-color 0.15s ease',\n },\n feedbackButtonSelected: {\n borderColor: 'rgba(0, 0, 0, 0.2)',\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n emptyState: {\n textAlign: 'center',\n padding: '48px 24px',\n fontSize: '14px',\n },\n noResults: {\n textAlign: 'center',\n padding: '32px 16px',\n fontSize: '14px',\n },\n};\nconst themeStyles = {\n light: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n searchInput: {\n border: `1px solid ${slateGrey[11]}`,\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n borderTop: 'var(--sc-content-border)',\n borderRight: 'var(--sc-content-border)',\n borderBottom: 'var(--sc-content-border)',\n borderLeft: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n },\n question: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n questionHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n answer: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n category: {\n backgroundColor: purple[8],\n color: purple[2],\n },\n categoryHeader: {\n color: slateGrey[7],\n },\n emptyState: {\n color: slateGrey[8],\n },\n feedbackPrompt: {\n color: slateGrey[7],\n },\n },\n dark: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n searchInput: {\n border: `1px solid ${slateGrey[5]}`,\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n borderTop: 'var(--sc-content-border)',\n borderRight: 'var(--sc-content-border)',\n borderBottom: 'var(--sc-content-border)',\n borderLeft: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n },\n question: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n questionHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n answer: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n category: {\n backgroundColor: purple[0],\n color: purple[6],\n },\n categoryHeader: {\n color: slateGrey[8],\n },\n emptyState: {\n color: slateGrey[7],\n },\n feedbackPrompt: {\n color: slateGrey[8],\n },\n },\n};\nfunction FAQItem({ item, isExpanded, isHighlighted, isLast, onToggle, theme, feedbackConfig, feedbackValue, onFeedback, }) {\n const [isHovered, setIsHovered] = useState(false);\n const colors = themeStyles[theme];\n const { question, answer } = item.config;\n const itemStyle = {\n ...baseStyles.item,\n ...colors.item,\n ...(isExpanded ? colors.itemExpanded : {}),\n ...(isHighlighted\n ? {\n boxShadow: '0 0 0 2px #6366f1, 0 0 12px rgba(99, 102, 241, 0.4)',\n transition: 'box-shadow 0.3s ease',\n }\n : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n };\n const questionStyle = {\n ...baseStyles.question,\n ...colors.question,\n ...(isHovered ? colors.questionHover : {}),\n };\n const chevronStyle = {\n ...baseStyles.chevron,\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n const answerStyle = {\n ...baseStyles.answer,\n ...colors.answer,\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n };\n const feedbackStyle = {\n ...baseStyles.feedback,\n ...colors.feedbackPrompt,\n };\n return (_jsxs(\"div\", { style: itemStyle, \"data-faq-item-id\": item.config.id, children: [_jsxs(\"button\", { type: \"button\", style: questionStyle, onClick: onToggle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), \"aria-expanded\": isExpanded, children: [_jsx(\"span\", { children: question }), _jsx(\"span\", { style: chevronStyle, children: '\\u203A' })] }), _jsxs(\"div\", { style: answerStyle, \"aria-hidden\": !isExpanded, children: [renderAnswer(answer), isExpanded && feedbackConfig && (_jsxs(\"div\", { style: feedbackStyle, children: [_jsx(\"span\", { children: getFeedbackPrompt(feedbackConfig) }), _jsx(\"button\", { type: \"button\", style: {\n ...baseStyles.feedbackButton,\n ...(feedbackValue === 'up' ? baseStyles.feedbackButtonSelected : {}),\n }, \"aria-label\": \"Thumbs up\", onClick: () => onFeedback(item.config.id, question, 'up'), children: '\\uD83D\\uDC4D' }), _jsx(\"button\", { type: \"button\", style: {\n ...baseStyles.feedbackButton,\n ...(feedbackValue === 'down' ? baseStyles.feedbackButtonSelected : {}),\n }, \"aria-label\": \"Thumbs down\", onClick: () => onFeedback(item.config.id, question, 'down'), children: '\\uD83D\\uDC4E' })] }))] })] }));\n}\n// ============================================================================\n// FAQWidget Component\n// ============================================================================\n/**\n * FAQWidget - Renders a collapsible Q&A accordion with per-item activation.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (FAQWidget) receives `config.actions` array\n * - Each action has optional `triggerWhen` for per-item visibility\n * - Parent evaluates triggerWhen and filters visible questions\n * - Parent manages expand state and re-rendering on context changes\n */\nexport function FAQWidget({ config, runtime, instanceId }) {\n // Force re-render when context/accumulator changes.\n // renderTick is used as a useMemo dependency to invalidate cached triggerWhen evaluations.\n const [renderTick, forceUpdate] = useReducer((x) => x + 1, 0);\n // Track expanded question IDs\n const [expandedIds, setExpandedIds] = useState(new Set());\n // Track which item is flash-highlighted from a deep-link\n const [highlightId, setHighlightId] = useState(null);\n // Search query state\n const [searchQuery, setSearchQuery] = useState('');\n // Track feedback state per item\n const [feedbackState, setFeedbackState] = useState(new Map());\n // Resolve feedback config\n const feedbackConfig = useMemo(() => resolveFeedbackConfig(config.feedback), [config.feedback]);\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n // Subscribe to accumulator changes for event_count-based triggerWhen\n useEffect(() => {\n if (!runtime.accumulator?.subscribe)\n return;\n return runtime.accumulator.subscribe(() => {\n forceUpdate();\n });\n }, [runtime.accumulator]);\n // Subscribe to faq:open:* events from overlay CTA clicks\n useEffect(() => {\n if (!runtime.events.subscribe)\n return;\n // Check EventBus history for pending faq:open events\n // (may have fired before this widget mounted, e.g. when canvas was closed)\n if (runtime.events.getRecent) {\n const recentEvents = runtime.events.getRecent({ patterns: ['^action\\\\.tooltip_cta_clicked$', '^action\\\\.modal_cta_clicked$'] }, 10);\n const pendingEvent = recentEvents\n .filter((e) => {\n const actionId = e.props?.actionId;\n return typeof actionId === 'string' && actionId.startsWith('faq:open:');\n })\n .pop(); // Most recent\n if (pendingEvent && Date.now() - pendingEvent.ts < 10000) {\n const questionId = pendingEvent.props.actionId.replace('faq:open:', '');\n setExpandedIds(new Set([questionId]));\n // Scroll into view after render\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${questionId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n }\n }\n // Subscribe to future CTA events\n const unsubscribe = runtime.events.subscribe({ patterns: ['^action\\\\.tooltip_cta_clicked$', '^action\\\\.modal_cta_clicked$'] }, (event) => {\n const actionId = event.props?.actionId;\n if (typeof actionId !== 'string' || !actionId.startsWith('faq:open:'))\n return;\n const questionId = actionId.replace('faq:open:', '');\n setExpandedIds(new Set([questionId]));\n // Scroll the question into view\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${questionId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n // Request canvas open (for future tile-based FAQ rendering)\n runtime.events.publish('canvas.requestOpen');\n });\n return unsubscribe;\n }, [runtime]);\n // Subscribe to notification.deep_link events (from insertHtml deepLink clicks + notification toasts)\n useEffect(() => {\n if (!runtime.events.subscribe)\n return;\n const handleDeepLink = (event) => {\n const tileId = event.props?.tileId;\n const itemId = event.props?.itemId;\n // Only handle if this deep link targets our tile\n if (tileId !== instanceId)\n return;\n if (!itemId)\n return;\n // Expand the target item\n setExpandedIds(new Set([itemId]));\n // Flash-highlight the item\n setHighlightId(itemId);\n setTimeout(() => setHighlightId(null), 1500);\n // Scroll into view after render\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${itemId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n };\n // Check recent events (may have fired before widget mounted, e.g. canvas was closed)\n if (runtime.events.getRecent) {\n const recent = runtime.events.getRecent({ names: ['notification.deep_link'] }, 5);\n const pending = recent\n .filter((e) => e.props?.tileId === instanceId && e.props?.itemId)\n .pop();\n if (pending && Date.now() - pending.ts < 10000) {\n handleDeepLink(pending);\n }\n }\n // Subscribe to future events\n const unsubscribe = runtime.events.subscribe({ names: ['notification.deep_link'] }, handleDeepLink);\n return unsubscribe;\n }, [runtime, instanceId]);\n // Filter visible questions based on per-item triggerWhen\n // biome-ignore lint/correctness/useExhaustiveDependencies: renderTick is intentionally included to force re-evaluation when the runtime's mutable context changes (subscribed above via forceUpdate)\n const visibleQuestions = useMemo(() => config.actions.filter((q) => {\n // No triggerWhen = always visible\n if (!q.triggerWhen)\n return true;\n // Evaluate the decision strategy\n const result = runtime.evaluateSync(q.triggerWhen);\n return result.value;\n }), [config.actions, runtime, renderTick]);\n // NOTE: faq:question_revealed is now published by useNotifyWatcher in\n // ShadowCanvasOverlay (always mounted), so it fires even with drawer closed.\n // Apply priority ordering\n const orderedQuestions = useMemo(() => {\n if (config.ordering === 'priority') {\n return [...visibleQuestions].sort((a, b) => (b.config.priority ?? 0) - (a.config.priority ?? 0));\n }\n // 'static' or undefined \u2014 preserve config order\n return visibleQuestions;\n }, [visibleQuestions, config.ordering]);\n // Apply search filter\n const filteredQuestions = useMemo(() => {\n if (!config.searchable || !searchQuery.trim()) {\n return orderedQuestions;\n }\n const query = searchQuery.toLowerCase();\n return orderedQuestions.filter((q) => q.config.question.toLowerCase().includes(query) ||\n getAnswerText(q.config.answer).toLowerCase().includes(query) ||\n q.config.category?.toLowerCase().includes(query));\n }, [orderedQuestions, searchQuery, config.searchable]);\n // Group by category\n const categoryGroups = useMemo(() => {\n const groups = new Map();\n for (const q of filteredQuestions) {\n const cat = q.config.category;\n if (!groups.has(cat)) {\n groups.set(cat, []);\n }\n groups.get(cat).push(q);\n }\n return groups;\n }, [filteredQuestions]);\n // Check if any items have categories\n const hasCategories = useMemo(() => filteredQuestions.some((q) => q.config.category), [filteredQuestions]);\n // Resolve theme (auto -> detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme && config.theme !== 'auto')\n return config.theme;\n // Check system preference (SSR-safe)\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n // Handle question toggle\n const handleToggle = useCallback((id) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (config.expandBehavior === 'single') {\n // Single mode: collapse all others\n if (prev.has(id)) {\n return new Set();\n }\n return new Set([id]);\n }\n // Multiple mode: toggle this one\n if (prev.has(id)) {\n next.delete(id);\n }\n else {\n next.add(id);\n }\n return next;\n });\n // Publish toggle event for analytics\n runtime.events.publish('faq:toggled', {\n instanceId,\n questionId: id,\n expanded: !expandedIds.has(id),\n timestamp: Date.now(),\n });\n }, [config.expandBehavior, runtime.events, instanceId, expandedIds]);\n // Handle feedback\n const handleFeedback = useCallback((itemId, question, value) => {\n setFeedbackState((prev) => {\n const next = new Map(prev);\n next.set(itemId, value);\n return next;\n });\n runtime.events.publish('faq:feedback', {\n itemId,\n question,\n value,\n });\n }, [runtime.events]);\n // Compute styles\n const containerStyle = {\n ...baseStyles.container,\n ...themeStyles[resolvedTheme].container,\n };\n const searchInputStyle = {\n ...baseStyles.searchInput,\n ...themeStyles[resolvedTheme].searchInput,\n };\n const emptyStateStyle = {\n ...baseStyles.emptyState,\n ...themeStyles[resolvedTheme].emptyState,\n };\n const categoryHeaderStyle = {\n ...baseStyles.categoryHeader,\n ...themeStyles[resolvedTheme].categoryHeader,\n };\n // Render a list of FAQ items\n const renderItems = (items) => items.map((q, index) => (_jsx(FAQItem, { item: q, isExpanded: expandedIds.has(q.config.id), isHighlighted: highlightId === q.config.id, isLast: index === items.length - 1, onToggle: () => handleToggle(q.config.id), theme: resolvedTheme, feedbackConfig: feedbackConfig, feedbackValue: feedbackState.get(q.config.id), onFeedback: handleFeedback }, q.config.id)));\n // Empty state (no visible questions at all)\n if (visibleQuestions.length === 0) {\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-faq\", children: _jsx(\"div\", { style: emptyStateStyle, children: \"You're all set for now! We'll surface answers here when they're relevant to what you're doing.\" }) }));\n }\n return (_jsxs(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-faq\", children: [config.searchable && (_jsxs(\"div\", { style: baseStyles.searchWrapper, children: [_jsx(\"style\", { children: `[data-adaptive-id=\"${instanceId}\"] input::placeholder { color: var(--sc-content-search-color, inherit); opacity: 0.7; }` }), _jsx(\"input\", { type: \"text\", placeholder: \"Search questions...\", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), style: searchInputStyle })] })), _jsx(\"div\", { style: baseStyles.accordion, children: hasCategories\n ? Array.from(categoryGroups.entries()).map(([category, items]) => (_jsxs(React.Fragment, { children: [category && (_jsx(\"div\", { style: categoryHeaderStyle, \"data-category-header\": category, children: category })), renderItems(items)] }, category ?? '__ungrouped')))\n : renderItems(filteredQuestions) }), config.searchable && filteredQuestions.length === 0 && searchQuery && (_jsxs(\"div\", { style: { ...baseStyles.noResults, ...themeStyles[resolvedTheme].emptyState }, children: [\"No questions found matching \\\"\", searchQuery, \"\\\"\"] }))] }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const FAQMountableWidget = {\n mount(container, config) {\n const { runtime, instanceId = 'faq-widget', ...faqConfig } = config || {\n expandBehavior: 'single',\n searchable: false,\n theme: 'auto',\n actions: [],\n };\n // React rendering when runtime + ReactDOM are available\n if (runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(FAQWidget, {\n config: faqConfig,\n runtime: runtime,\n instanceId,\n }));\n return () => {\n root.unmount();\n };\n }\n // HTML fallback when React is not available\n const questions = faqConfig.actions || [];\n container.innerHTML = `\n <div style=\"font-family: system-ui; max-width: 800px;\">\n ${questions\n .map((q) => `\n <div style=\"margin-bottom: 8px; padding: 16px; background: ${slateGrey[12]}; border-radius: 8px;\">\n <strong>${q.config.question}</strong>\n <p style=\"margin-top: 8px; color: ${slateGrey[6]};\">${getAnswerText(q.config.answer)}</p>\n </div>\n `)\n .join('')}\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default FAQWidget;\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults(): MarkedOptions {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n\nexport let _defaults = _getDefaults();\n\nexport function changeDefaults(newDefaults: MarkedOptions) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options: MarkedOptions;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer; // set by the lexer\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n let istask: RegExpExecArray | null = null;\n let ischecked: boolean | undefined;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer {\n tokens: TokensList;\n options: MarkedOptions;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n private tokenizer: _Tokenizer;\n private inlineQueue: { src: string, tokens: Token[] }[];\n\n constructor(options?: MarkedOptions) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer {\n options: MarkedOptions;\n parser!: _Parser; // set by the parser\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): string {\n return '';\n }\n\n code({ text, lang, escaped }: Tokens.Code): string {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote({ tokens }: Tokens.Blockquote): string {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n`;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag) : string {\n return text;\n }\n\n heading({ tokens, depth }: Tokens.Heading): string {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n }\n\n hr(token: Tokens.Hr): string {\n return '<hr>\\n';\n }\n\n list(token: Tokens.List): string {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(item: Tokens.ListItem): string {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n } else {\n itemBody += checkbox + ' ';\n }\n }\n\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n\n return `<li>${itemBody}</li>\\n`;\n }\n\n checkbox({ checked }: Tokens.Checkbox): string {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n\n paragraph({ tokens }: Tokens.Paragraph): string {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n }\n\n table(token: Tokens.Table): string {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow({ text }: Tokens.TableRow): string {\n return `<tr>\\n${text}</tr>\\n`;\n }\n\n tablecell(token: Tokens.TableCell): string {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): string {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n\n em({ tokens }: Tokens.Em): string {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n\n codespan({ text }: Tokens.Codespan): string {\n return `<code>${escape(text, true)}</code>`;\n }\n\n br(token: Tokens.Br): string {\n return '<br>';\n }\n\n del({ tokens }: Tokens.Del): string {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): string {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text);\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out;\n }\n\n text(token: Tokens.Text | Tokens.Escape) : string {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens)\n : ('escaped' in token && token.escaped ? token.text : escape(token.text));\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer {\n // no need for block level renderers\n strong({ text }: Tokens.Strong) {\n return text;\n }\n\n em({ text }: Tokens.Em) {\n return text;\n }\n\n codespan({ text }: Tokens.Codespan) {\n return text;\n }\n\n del({ text }: Tokens.Del) {\n return text;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag) {\n return text;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag) {\n return text;\n }\n\n link({ text }: Tokens.Link) {\n return '' + text;\n }\n\n image({ text }: Tokens.Image) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser {\n options: MarkedOptions;\n renderer: _Renderer;\n textRenderer: _TextRenderer;\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[], top = true): string {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i] as Tokens.Text;\n body += '\\n' + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n });\n } else {\n out += body;\n }\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer | _TextRenderer = this.renderer): string {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks {\n options: MarkedOptions;\n block?: boolean;\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: string) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n\n constructor(...args: MarkedExtension[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension[]) {\n const extensions: MarkedOptions['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions & { async: true }): Promise<string>;\n (src: string, options: MarkedOptions & { async: false }): string;\n (src: string, options?: MarkedOptions | null): string | Promise<string>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html) as string;\n }\n return html;\n } catch (e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\nmarked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "/**\n * Adaptive FAQ - Runtime Module\n *\n * Runtime manifest for the FAQ accordion adaptive.\n * Provides action executors and widget registration.\n */\nimport { executorDefinitions } from './executors';\nimport { FAQMountableWidget } from './FAQWidget';\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n/**\n * Runtime manifest for adaptive-faq.\n *\n * Provides:\n * - FAQ action executors (scroll_to, toggle_item, update)\n * - Widget-based accordion (compositional faq:question actions)\n */\nexport const runtime = {\n id: 'adaptive-faq',\n version: '2.0.0',\n name: 'FAQ Accordion',\n description: 'Collapsible Q&A accordion with actions, rich content, feedback, and personalization',\n /**\n * Action executors for programmatic FAQ interaction.\n */\n executors: executorDefinitions,\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-faq:accordion',\n component: FAQMountableWidget,\n metadata: {\n name: 'FAQ Accordion',\n description: 'Collapsible Q&A accordion with search, categories, and feedback',\n icon: '\u2753',\n subtitle: 'Curated just for you.',\n },\n },\n ],\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes faq:question_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props) {\n const actions = (props.actions ?? []);\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `faq:${a.config.id}`,\n strategy: a.triggerWhen,\n eventName: 'faq:question_revealed',\n eventProps: {\n questionId: a.config.id,\n question: a.config.question,\n title: a.notify.title,\n body: a.notify.body,\n icon: a.notify.icon,\n },\n }));\n },\n};\nexport default runtime;\n", "/**\n * Adaptive Gamification - Runtime Module\n *\n * Gamification actions: awardBadge, addPoints.\n * Provides gamification features like badges, points, and rewards.\n */\n// ============================================================================\n// Executors\n// ============================================================================\n/**\n * Execute an awardBadge action\n *\n * Note: This executor uses publishEvent to track badge awards.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAwardBadge = async (action, context) => {\n const { badgeId } = action;\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.badge_awarded', {\n badgeId,\n awardedAt: Date.now(),\n });\n return {\n cleanup: () => {\n // Badge awards are permanent, no cleanup needed\n },\n };\n};\n/**\n * Execute an addPoints action\n *\n * Note: This executor uses publishEvent to track points.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAddPoints = async (action, context) => {\n const { points, reason } = action;\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.points_added', {\n points,\n reason,\n timestamp: Date.now(),\n });\n return {\n cleanup: () => {\n // Points are permanent, no cleanup needed\n },\n };\n};\n// ============================================================================\n// Event Handlers\n// ============================================================================\n/**\n * Event handler for auto-awarding badges based on triggers.\n */\nexport const badgeTriggerHandler = {\n names: ['page_view', 'button_click'],\n handler: (_event, _ctx) => {\n // Auto-award badges based on event triggers\n // This would check badge trigger conditions in the config\n console.log('[Gamification] Event received for badge trigger check');\n },\n};\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'gamification:awardBadge', executor: executeAwardBadge },\n { kind: 'gamification:addPoints', executor: executeAddPoints },\n];\n/**\n * Event handlers provided by this app.\n */\nexport const eventHandlers = [badgeTriggerHandler];\n/**\n * App runtime manifest.\n */\nexport const runtime = {\n id: 'adaptive-gamification',\n version: '1.0.0',\n name: 'Gamification',\n description: 'Badges, rewards, points, and engagement mechanics',\n executors,\n eventHandlers,\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive Nav - NavWidget Component\n *\n * React component that renders a collapsible navigation tips accordion\n * with per-item conditional visibility based on triggerWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (nav:tip) serve as configuration data for the parent widget.\n */\nimport { purple, slateGrey } from '@syntro/design-system/tokens';\nimport React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\n// ============================================================================\n// Emoji \u2192 Lucide SVG inline mapping (no lucide-react dependency)\n// ============================================================================\nconst EMOJI_SVG_MAP = {\n '\uD83D\uDCB5': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/><path d=\"M6 12h.01M18 12h.01\"/></svg>',\n '\uD83C\uDFDB\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"3\" x2=\"21\" y1=\"22\" y2=\"22\"/><line x1=\"6\" x2=\"6\" y1=\"18\" y2=\"11\"/><line x1=\"10\" x2=\"10\" y1=\"18\" y2=\"11\"/><line x1=\"14\" x2=\"14\" y1=\"18\" y2=\"11\"/><line x1=\"18\" x2=\"18\" y1=\"18\" y2=\"11\"/><polygon points=\"12 2 20 7 4 7\"/></svg>',\n '\u23ED\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 4 15 12 5 20 5 4\"/><line x1=\"19\" x2=\"19\" y1=\"5\" y2=\"19\"/></svg>',\n '\u27A1\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/></svg>',\n '\uD83D\uDCA1': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg>',\n '\uD83D\uDCB0': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/><path d=\"M6 12h.01M18 12h.01\"/></svg>',\n '\uD83D\uDCCB': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"/><path d=\"M12 11h4\"/><path d=\"M12 16h4\"/><path d=\"M8 11h.01\"/><path d=\"M8 16h.01\"/></svg>',\n '\u2705': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/><path d=\"m9 11 3 3L22 4\"/></svg>',\n '\u26A0\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>',\n};\nfunction renderIcon(emoji) {\n return EMOJI_SVG_MAP[emoji] ?? escapeHtml(emoji);\n}\n// ============================================================================\n// Sanitization\n// ============================================================================\nfunction escapeHtml(str) {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n// ============================================================================\n// Styles\n// ============================================================================\nconst baseStyles = {\n container: {\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n accordion: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n },\n item: {\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.2s ease',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: 500,\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n },\n chevron: {\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n marginLeft: 'auto',\n flexShrink: 0,\n color: 'var(--sc-content-chevron-color, currentColor)',\n },\n icon: {\n fontSize: '16px',\n flexShrink: 0,\n },\n body: {\n overflow: 'hidden',\n transition: 'max-height 0.25s ease, padding-bottom 0.25s ease',\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n },\n description: {\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: '1.5',\n margin: 0,\n },\n linkButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '10px',\n padding: '6px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n border: 'none',\n transition: 'background-color 0.15s ease',\n },\n categoryHeader: {\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n },\n emptyState: {\n fontSize: '13px',\n padding: '16px',\n textAlign: 'center',\n },\n};\nconst themeStyles = {\n light: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n },\n header: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n headerHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n body: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n linkButton: {\n backgroundColor: 'var(--sc-color-primary, #6366f1)',\n color: '#ffffff',\n },\n categoryHeader: {\n color: slateGrey[7],\n },\n emptyState: {\n color: slateGrey[8],\n },\n },\n dark: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n },\n header: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n headerHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n body: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n linkButton: {\n backgroundColor: 'var(--sc-color-primary, #6366f1)',\n color: '#ffffff',\n },\n categoryHeader: {\n color: slateGrey[8],\n },\n emptyState: {\n color: slateGrey[7],\n },\n },\n};\n// ============================================================================\n// Helpers\n// ============================================================================\n/** Check if any of the given routes match the current page pathname */\nfunction routeMatchesCurrent(routes) {\n if (typeof window === 'undefined')\n return false;\n const current = window.location.pathname;\n return routes.some((route) => {\n // Strip query/hash from route if present\n const routePath = route.split('?')[0].split('#')[0];\n // Exact match or glob pattern (** suffix)\n if (routePath.endsWith('/**')) {\n return current.startsWith(routePath.slice(0, -3));\n }\n return current === routePath;\n });\n}\n/** Apply a brief pulse animation to an element, then remove it */\nfunction pulseElement(el) {\n const keyframes = [\n { boxShadow: '0 0 0 0 rgba(13, 148, 136, 0.5)' },\n { boxShadow: '0 0 0 8px rgba(13, 148, 136, 0)' },\n ];\n el.animate(keyframes, { duration: 600, iterations: 3, easing: 'ease-out' });\n}\nfunction NavTipItem({ item, isExpanded, isLast, onToggle, onNavigate, onFocusAnchor, theme, }) {\n const [isHovered, setIsHovered] = useState(false);\n const colors = themeStyles[theme];\n const { title, description, href, icon, external, anchor } = item.config;\n const itemStyle = {\n ...baseStyles.item,\n ...colors.item,\n ...(isExpanded ? colors.itemExpanded : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n };\n const headerStyle = {\n ...baseStyles.header,\n ...colors.header,\n ...(isHovered ? colors.headerHover : {}),\n };\n const chevronStyle = {\n ...baseStyles.chevron,\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n const bodyStyle = {\n ...baseStyles.body,\n ...colors.body,\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n };\n // Determine the effective navigation target from anchor or legacy href\n const effectiveHref = anchor\n ? Array.isArray(anchor.route)\n ? anchor.route[0]\n : anchor.route\n : href;\n // Same-page check: anchor exists, selector is meaningful, and route matches current page\n const isSamePage = anchor\n ? routeMatchesCurrent(Array.isArray(anchor.route) ? anchor.route : [anchor.route])\n : effectiveHref\n ? routeMatchesCurrent([effectiveHref])\n : false;\n const hasSelector = anchor?.selector && anchor.selector !== '*';\n const isFocusAction = isSamePage && hasSelector;\n const hasAction = !!effectiveHref || isFocusAction;\n const handleLinkClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (isFocusAction && anchor) {\n onFocusAnchor(anchor);\n }\n else if (effectiveHref) {\n onNavigate(effectiveHref, external ?? false);\n }\n };\n // CTA label\n const ctaLabel = isFocusAction ? `Focus \\u2192` : external ? `Go \\u2197` : `Go \\u2192`;\n return (_jsxs(\"div\", { style: itemStyle, \"data-nav-tip-id\": item.config.id, children: [_jsxs(\"button\", { type: \"button\", style: headerStyle, onClick: onToggle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), \"aria-expanded\": isExpanded, children: [icon && (_jsx(\"span\", { style: baseStyles.icon, dangerouslySetInnerHTML: { __html: renderIcon(icon) } })), _jsx(\"span\", { children: title }), _jsx(\"span\", { style: chevronStyle, children: '\\u203A' })] }), _jsxs(\"div\", { style: bodyStyle, \"aria-hidden\": !isExpanded, children: [_jsx(\"p\", { style: baseStyles.description, children: description }), hasAction && (_jsx(\"a\", { href: effectiveHref || '#', onClick: handleLinkClick, style: { ...baseStyles.linkButton, ...colors.linkButton }, target: external ? '_blank' : undefined, rel: external ? 'noopener noreferrer' : undefined, children: ctaLabel }))] })] }));\n}\n// ============================================================================\n// NavWidget Component\n// ============================================================================\n/**\n * NavWidget - Renders a collapsible navigation tips accordion.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (NavWidget) receives `config.actions` array\n * - Each action has optional `triggerWhen` for per-item visibility\n * - Parent evaluates triggerWhen and filters visible tips\n * - Parent manages expand state and re-rendering on context changes\n */\nexport function NavWidget({ config, runtime, instanceId }) {\n // Force re-render when context/accumulator changes.\n const [renderTick, forceUpdate] = useReducer((x) => x + 1, 0);\n // Track expanded tip IDs\n const [expandedIds, setExpandedIds] = useState(new Set());\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n // Subscribe to accumulator changes for event_count-based triggerWhen\n useEffect(() => {\n if (!runtime.accumulator?.subscribe)\n return;\n return runtime.accumulator.subscribe(() => {\n forceUpdate();\n });\n }, [runtime.accumulator]);\n // Filter visible tips based on per-item triggerWhen\n // biome-ignore lint/correctness/useExhaustiveDependencies: renderTick is intentionally included to force re-evaluation when the runtime's mutable context changes (subscribed above via forceUpdate)\n const visibleTips = useMemo(() => config.actions.filter((tip) => {\n if (!tip.triggerWhen)\n return true;\n try {\n const result = runtime.evaluateSync(tip.triggerWhen);\n return result.value;\n }\n catch {\n // If strategy evaluation fails, hide the tip (fail-closed)\n return false;\n }\n }), [config.actions, runtime, renderTick]);\n // Group by category\n const categoryGroups = useMemo(() => {\n const groups = new Map();\n for (const tip of visibleTips) {\n const cat = tip.config.category;\n if (!groups.has(cat)) {\n groups.set(cat, []);\n }\n groups.get(cat).push(tip);\n }\n return groups;\n }, [visibleTips]);\n // Check if any items have categories\n const hasCategories = useMemo(() => visibleTips.some((t) => t.config.category), [visibleTips]);\n // Resolve theme (auto \u2192 detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme && config.theme !== 'auto')\n return config.theme;\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n // Handle tip toggle\n const handleToggle = useCallback((id) => {\n setExpandedIds((prev) => {\n const wasExpanded = prev.has(id);\n let next;\n if (config.expandBehavior === 'single') {\n // In single mode, emit collapse events for any previously-expanded tips\n for (const prevId of prev) {\n if (prevId !== id) {\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: prevId,\n expanded: false,\n timestamp: Date.now(),\n });\n }\n }\n next = wasExpanded ? new Set() : new Set([id]);\n }\n else {\n next = new Set(prev);\n if (wasExpanded) {\n next.delete(id);\n }\n else {\n next.add(id);\n }\n }\n // Emit event for the clicked tip using fresh state from the updater\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: id,\n expanded: !wasExpanded,\n timestamp: Date.now(),\n });\n return next;\n });\n }, [config.expandBehavior, runtime.events, instanceId]);\n // Handle navigation with event publishing\n const handleNavigate = useCallback((href, external) => {\n // Reject dangerous URIs to prevent XSS\n const normalizedHref = href.trim().toLowerCase();\n if (normalizedHref.startsWith('javascript:') || normalizedHref.startsWith('data:')) {\n return;\n }\n runtime.events.publish('nav:tip_clicked', {\n instanceId,\n href,\n external,\n timestamp: Date.now(),\n });\n if (external) {\n window.open(href, '_blank', 'noopener,noreferrer');\n }\n else {\n // SPA navigation: pushState updates the URL, then popstate tells the\n // host app's router (e.g. React Router) to render the new page.\n // Cleanup functions in revertAll() are resilient to detached DOM nodes,\n // so no timing hack is needed between pushState and popstate.\n const url = new URL(href, window.location.origin);\n url.search = window.location.search;\n window.history.pushState(null, '', url.toString());\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n }, [runtime.events, instanceId]);\n // Handle same-page anchor focus: scroll + pulse + focus\n const handleFocusAnchor = useCallback((anchor) => {\n const el = document.querySelector(anchor.selector);\n if (!(el instanceof HTMLElement))\n return;\n runtime.events.publish('nav:tip_focused', {\n instanceId,\n selector: anchor.selector,\n route: anchor.route,\n timestamp: Date.now(),\n });\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n pulseElement(el);\n // Focus after scroll completes\n setTimeout(() => el.focus(), 400);\n }, [runtime.events, instanceId]);\n // Compute container styles\n const containerStyle = {\n ...baseStyles.container,\n ...themeStyles[resolvedTheme].container,\n };\n const categoryHeaderStyle = {\n ...baseStyles.categoryHeader,\n ...themeStyles[resolvedTheme].categoryHeader,\n };\n const emptyStateStyle = {\n ...baseStyles.emptyState,\n ...themeStyles[resolvedTheme].emptyState,\n };\n // Render a list of nav tip items\n const renderItems = (items) => items.map((tip, index) => (_jsx(NavTipItem, { item: tip, isExpanded: expandedIds.has(tip.config.id), isLast: index === items.length - 1, onToggle: () => handleToggle(tip.config.id), onNavigate: handleNavigate, onFocusAnchor: handleFocusAnchor, theme: resolvedTheme }, tip.config.id)));\n // Empty state\n if (visibleTips.length === 0) {\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-nav\", children: _jsx(\"div\", { style: emptyStateStyle, children: \"You're all set for now! We'll share helpful tips here when they're relevant to what you're doing.\" }) }));\n }\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-nav\", children: _jsx(\"div\", { style: baseStyles.accordion, children: hasCategories\n ? Array.from(categoryGroups.entries()).map(([category, items]) => (_jsxs(React.Fragment, { children: [category && (_jsx(\"div\", { style: categoryHeaderStyle, \"data-category-header\": category, children: category })), renderItems(items)] }, category ?? '__ungrouped')))\n : renderItems(visibleTips) }) }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const NavMountableWidget = {\n mount(container, config) {\n const { runtime, instanceId = 'nav-widget', ...navConfig } = config || {\n expandBehavior: 'single',\n theme: 'auto',\n actions: [],\n };\n // React rendering when runtime + ReactDOM are available\n if (runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(NavWidget, {\n config: navConfig,\n runtime: runtime,\n instanceId,\n }));\n return () => {\n root.unmount();\n };\n }\n // HTML fallback for non-React environments\n const tips = navConfig.actions || [];\n container.innerHTML = `\n <div style=\"font-family: system-ui; max-width: 100%;\">\n ${tips\n .map((tip) => `\n <div style=\"margin-bottom: 4px; padding: 12px 16px; background: ${slateGrey[12]}; border-radius: 8px;\">\n ${tip.config.icon ? `<span>${renderIcon(tip.config.icon)}</span> ` : ''}<strong>${escapeHtml(tip.config.title)}</strong>\n <p style=\"margin-top: 8px; color: ${slateGrey[6]}; font-size: 13px;\">${escapeHtml(tip.config.description)}</p>\n ${tip.config.href ? `<a href=\"${escapeHtml(tip.config.href)}\" style=\"color: ${purple[2]}; font-size: 13px;\">Go →</a>` : ''}\n </div>\n `)\n .join('')}\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default NavWidget;\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation tips accordion adaptive.\n * Includes widget-based nav tips and navigation action executors\n * (scrollTo, navigate) previously in adaptive-navigation.\n */\nimport { NavMountableWidget } from './NavWidget';\n// ============================================================================\n// Navigation Action Executors (merged from adaptive-navigation)\n// ============================================================================\n/**\n * Execute a scrollTo action\n */\nexport const executeScrollTo = async (action, context) => {\n const anchorEl = context.resolveAnchor(action.anchorId);\n if (!anchorEl) {\n console.error(`[adaptive-nav] Anchor not found for scrollTo, skipping: ${action.anchorId.selector}`);\n return { cleanup: () => { } };\n }\n // Scroll to element\n anchorEl.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n block: action.block ?? 'center',\n inline: action.inline ?? 'nearest',\n });\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:scrollTo',\n anchorId: action.anchorId,\n behavior: action.behavior ?? 'smooth',\n });\n return {\n cleanup: () => {\n // Optionally restore scroll position on revert\n },\n };\n};\n/**\n * Check if a URL is same-origin as the current page.\n * Relative URLs (e.g. \"/dashboard\") are always same-origin.\n */\nfunction isSameOrigin(url) {\n try {\n const parsed = new URL(url, window.location.origin);\n return parsed.origin === window.location.origin;\n }\n catch {\n // If URL parsing fails, fall back to full navigation\n return false;\n }\n}\n/**\n * Execute a navigate action\n */\nexport const executeNavigate = async (action, context) => {\n // Validate URL to prevent javascript: URLs\n const url = action.url.trim();\n if (url.toLowerCase().startsWith('javascript:')) {\n throw new Error('javascript: URLs are not allowed');\n }\n const target = action.target ?? '_self';\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:navigate',\n url: action.url,\n target,\n });\n if (target === '_blank') {\n // Open in new tab\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n else if (!action.forceFullNavigation && isSameOrigin(url)) {\n // SPA-aware: use pushState for same-origin URLs to avoid full page reload\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n else {\n // Full navigation for cross-origin URLs or when explicitly requested\n window.location.href = url;\n }\n return {\n cleanup: () => {\n // Navigation cannot be reverted\n },\n };\n};\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'navigation:scrollTo', executor: executeScrollTo },\n { kind: 'navigation:navigate', executor: executeNavigate },\n];\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Provides:\n * - Navigation action executors (scrollTo, navigate)\n * - Widget-based nav tips accordion (compositional nav:tip actions)\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '2.0.0',\n name: 'Navigation Tips',\n description: 'Navigation actions and accordion-based tips with per-item conditional visibility',\n /**\n * Navigation action executors (scrollTo, navigate).\n */\n executors,\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:tips',\n component: NavMountableWidget,\n metadata: {\n name: 'Navigation Tips',\n description: 'Accordion of contextual navigation tips with per-item visibility',\n icon: '\\u{1F9ED}',\n },\n },\n ],\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes nav:tip_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props) {\n const actions = (props.actions ?? []);\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `nav:${a.config.id}`,\n strategy: a.triggerWhen,\n eventName: 'nav:tip_revealed',\n eventProps: {\n tipId: a.config.id,\n title: a.notify.title,\n body: a.notify.body,\n icon: a.notify.icon,\n },\n }));\n },\n};\nexport default runtime;\n", "// AUTO-GENERATED \u2014 do not edit. Run `npm run generate:builtin-modules` to update.\nimport { runtime as r0 } from '@syntrologie/adapt-chatbot/runtime';\nimport { runtime as r1 } from '@syntrologie/adapt-content/runtime';\nimport { runtime as r2 } from '@syntrologie/adapt-faq/runtime';\nimport { runtime as r3 } from '@syntrologie/adapt-gamification/runtime';\nimport { runtime as r4 } from '@syntrologie/adapt-nav/runtime';\nimport { runtime as r5 } from '@syntrologie/adapt-overlays/runtime';\n\nconst allRuntimes = [r0, r1, r2, r3, r4, r5];\n\nexport const builtinAdaptiveManifests = allRuntimes.map((r: any) => ({\n id: r.id,\n version: r.version,\n name: r.name,\n description: r.description,\n runtime: {\n actions: (r.executors || []).map(({ kind, executor }: any) => ({ kind, executor })),\n widgets: r.widgets,\n notifyWatchers: r.notifyWatchers,\n events: r.eventHandlers,\n },\n editor: undefined,\n metadata: { isBuiltIn: true },\n}));\n\nexport function registerBuiltinRuntimeModules(\n registry: { has: (id: string) => boolean; register: (manifest: any) => void }\n): void {\n let count = 0;\n for (const manifest of builtinAdaptiveManifests) {\n if (!registry.has(manifest.id)) {\n registry.register(manifest);\n count++;\n }\n }\n console.log('[Syntro Runtime] Registered', count, 'built-in runtime modules');\n}\n", "import { useEffect, useMemo, useState } from 'react';\n\nimport type { TelemetryClient } from '../telemetry/types';\nimport type { TileConfig } from '../types';\n\nimport { TileCard } from './TileCard';\n\nexport interface TileWheelProps {\n tiles: TileConfig[];\n intervalMs?: number;\n telemetry?: TelemetryClient;\n}\n\nexport function TileWheel({ tiles, intervalMs = 7000, telemetry }: TileWheelProps) {\n const [index, setIndex] = useState(0);\n const ordered = useMemo(\n () => [...tiles].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),\n [tiles]\n );\n\n useEffect(() => {\n telemetry?.trackCanvasOpened('wheel');\n }, [telemetry]);\n\n useEffect(() => {\n if (ordered.length <= 1) return;\n const id = setInterval(() => {\n setIndex((prev) => (prev + 1) % ordered.length);\n }, intervalMs);\n return () => clearInterval(id);\n }, [ordered, intervalMs]);\n\n useEffect(() => {\n const current = ordered[index];\n if (current) {\n telemetry?.trackRectangleViewed(current.id, 'wheel');\n }\n }, [index, ordered, telemetry]);\n\n if (!ordered.length) return null;\n\n return (\n <div\n style={{\n position: 'relative',\n overflow: 'hidden',\n borderRadius: '1.5rem',\n border: 'var(--sc-tile-border)',\n background: 'var(--sc-tile-background)',\n padding: '1.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n data-shadow-canvas-id=\"wheel\"\n >\n <div\n style={{\n display: 'flex',\n transition: 'transform 700ms ease-out',\n transform: `translateX(-${index * 100}%)`,\n width: `${ordered.length * 100}%`,\n }}\n >\n {ordered.map((tile) => (\n <div key={tile.id} style={{ width: '100%', flexShrink: 0, padding: '0 1rem' }}>\n <TileCard config={tile} surface=\"wheel\" telemetry={telemetry} />\n </div>\n ))}\n </div>\n <div style={{ marginTop: '1rem', display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {ordered.map((tile, idx) => (\n <button\n type=\"button\"\n key={tile.id}\n style={{\n height: '0.5rem',\n width: '1.5rem',\n borderRadius: '9999px',\n background: idx === index ? 'var(--sc-color-primary)' : 'var(--sc-tile-text-color)',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n }}\n onClick={() => setIndex(idx)}\n />\n ))}\n </div>\n </div>\n );\n}\n", "/**\n * Config validation and migration for SDK versioning.\n *\n * This module handles:\n * - Validating configs against the current SDK schema version\n * - Migrating old config formats to current version\n * - Providing warnings for version mismatches\n */\n\nimport type { CanvasConfigResponse } from './types';\nimport { SDK_SCHEMA_VERSION } from './types';\n\n/**\n * Result of config validation.\n */\nexport interface ConfigValidationResult {\n /** Whether the config is valid and can be used */\n valid: boolean;\n\n /** Warning messages (non-fatal issues) */\n warnings: string[];\n\n /** Error messages (fatal issues that prevent usage) */\n errors: string[];\n\n /** Migrated config if old version was detected */\n migratedConfig?: CanvasConfigResponse;\n}\n\n/**\n * Parse a schema version string into major and minor numbers.\n */\nexport function parseVersion(version: string): { major: number; minor: number } {\n const parts = version.split('.');\n return {\n major: parseInt(parts[0] || '0', 10),\n minor: parseInt(parts[1] || '0', 10),\n };\n}\n\n/**\n * Validate and normalize a config, handling version mismatches.\n *\n * This function:\n * 1. Checks if config is valid object\n * 2. Compares config schema version with SDK version\n * 3. Migrates old configs to current version\n * 4. Returns validation result with warnings/errors\n *\n * @param config - Raw config from backend or fetcher\n * @returns Validation result with any migrations applied\n */\nexport function validateConfig(config: unknown): ConfigValidationResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Type check\n if (!config || typeof config !== 'object') {\n return {\n valid: false,\n errors: ['Config must be an object'],\n warnings,\n };\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n\n // Check required fields\n if (!typedConfig.tiles) {\n errors.push('Config missing required field: tiles');\n }\n if (!typedConfig.actions) {\n errors.push('Config missing required field: actions');\n }\n if (!typedConfig.fetchedAt) {\n errors.push('Config missing required field: fetchedAt');\n }\n\n if (errors.length > 0) {\n return { valid: false, errors, warnings };\n }\n\n // Check schema version\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n // Future schema version (newer backend)\n if (configVer.major > sdkVer.major) {\n warnings.push(\n `Config schema v${configVersion} is newer than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Some features may not work. Update SDK to latest version.`\n );\n }\n\n // Old schema version (older backend or missing version)\n if (configVer.major < sdkVer.major || !typedConfig.schemaVersion) {\n warnings.push(\n `Config schema v${configVersion} is older than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Migrating config to current version.`\n );\n return {\n valid: true,\n warnings,\n errors,\n migratedConfig: migrateConfig(typedConfig as CanvasConfigResponse, configVersion),\n };\n }\n\n // Compatible version (same major version)\n return {\n valid: true,\n warnings,\n errors,\n };\n}\n\n/**\n * Migrate old config format to current SDK version.\n *\n * This function applies all necessary transformations to bring\n * an old config up to the current schema version.\n *\n * @param config - Config to migrate\n * @param fromVersion - Version to migrate from\n * @returns Migrated config at current SDK version\n */\nfunction migrateConfig(config: CanvasConfigResponse, fromVersion: string): CanvasConfigResponse {\n let migrated = { ...config };\n\n const fromVer = parseVersion(fromVersion);\n\n // v1.x -> v2.x migration\n if (fromVer.major === 1) {\n migrated = migrateV1ToV2(migrated);\n }\n\n // Update schema version to current\n migrated.schemaVersion = SDK_SCHEMA_VERSION;\n\n return migrated;\n}\n\n/**\n * Migrate v1.x config to v2.0 format.\n *\n * Changes in v2.0:\n * - Introduced ActivationConfig to replace experiment field\n * - Unified ActionStep format\n * - Added schemaVersion field\n */\nfunction migrateV1ToV2(config: any): CanvasConfigResponse {\n const migrated: CanvasConfigResponse = {\n schemaVersion: '2.0',\n tiles: [],\n actions: config.actions || [],\n fetchedAt: config.fetchedAt || new Date().toISOString(),\n };\n\n // Migrate tiles\n if (config.tiles && Array.isArray(config.tiles)) {\n migrated.tiles = config.tiles.map((tile: any) => {\n const migratedTile = { ...tile };\n\n // Remove deprecated experiment field (strategy no longer supported on tiles)\n if (tile.experiment) {\n delete migratedTile.experiment;\n }\n\n return migratedTile;\n });\n }\n\n // Copy optional fields\n if (config.configVersion) migrated.configVersion = config.configVersion;\n if (config.canvasTitle) migrated.canvasTitle = config.canvasTitle;\n if (config.theme) migrated.theme = config.theme;\n if (config.launcher) migrated.launcher = config.launcher;\n return migrated;\n}\n\n/**\n * Check if a config needs migration.\n *\n * @param config - Config to check\n * @returns True if migration is needed\n */\nexport function needsMigration(config: unknown): boolean {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n return configVer.major < sdkVer.major || !typedConfig.schemaVersion;\n}\n", "import { z } from 'zod';\n\nexport const SelectorZ = z.union([\n z.object({ type: z.literal('data'), key: z.string(), value: z.string().optional() }),\n z.object({ type: z.literal('css'), value: z.string() }),\n z.object({ type: z.literal('aria'), role: z.string().optional(), label: z.string().optional() }),\n z.object({ type: z.literal('shadow-css'), value: z.string() }),\n z.object({ type: z.literal('ref'), el: z.any() }), // runtime-only\n]);\n\nexport const TooltipStepZ = z.object({\n kind: z.literal('tooltip'),\n id: z.string(),\n anchor: SelectorZ,\n content: z.object({ title: z.string().optional(), body: z.string() }),\n placement: z.enum(['top', 'bottom', 'left', 'right', 'auto']).optional(),\n offsetPx: z.number().optional(),\n blocking: z.boolean().optional(),\n trigger: z.enum(['immediate', 'hover', 'click']).optional(),\n dismiss: z\n .object({\n onEsc: z.boolean().optional(),\n closeButton: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const HighlightStepZ = z.object({\n kind: z.literal('highlight'),\n id: z.string(),\n anchor: SelectorZ,\n copy: z.string().optional(),\n ring: z.object({ paddingPx: z.number().optional(), radiusPx: z.number().optional() }).optional(),\n scrim: z.object({ opacity: z.number().optional() }).optional(),\n ringColor: z.string().optional(),\n blocking: z.boolean().optional(),\n dismiss: z\n .object({\n onClickOutside: z.boolean().optional(),\n onEsc: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const CanvasRecipeZ = z.object({\n id: z.string(),\n version: z.number(),\n routes: z.array(z.string()).optional(),\n steps: z.array(z.union([TooltipStepZ, HighlightStepZ])),\n});\n\nexport function validateRecipe(json: unknown) {\n return CanvasRecipeZ.parse(json);\n}\n", "import { type CanvasFetcherOptions, resolveConfigUri } from '../configFetcher';\n\nimport { CanvasRecipeZ } from './schema';\nimport type { CanvasRecipe } from './types';\n\nexport type OverlayRecipeFetcher = () => Promise<CanvasRecipe>;\n\nexport const createOverlayRecipeFetcher =\n ({\n configUri,\n experiments,\n featureKey = 'smart-canvas-overlay-uri',\n credentials = 'include',\n }: CanvasFetcherOptions = {}): OverlayRecipeFetcher =>\n async () => {\n const uri = resolveConfigUri({ configUri, experiments, featureKey });\n if (!uri) {\n throw new Error('SmartCanvas overlays: recipe URI missing (env + feature unset).');\n }\n const response = await fetch(uri, { credentials });\n if (!response.ok) {\n throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);\n }\n const json = await response.json();\n return CanvasRecipeZ.parse(json) as CanvasRecipe;\n };\n", "import { type ReactNode, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { SmartCanvasElement } from './SmartCanvasElement';\n\nexport interface SmartCanvasPortalProps {\n element: SmartCanvasElement | null;\n children: ReactNode;\n}\n\nexport function SmartCanvasPortal({ element, children }: SmartCanvasPortalProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n if (!element) {\n setMountNode(null);\n return;\n }\n setMountNode(element.getMountNode());\n return () => setMountNode(null);\n }, [element]);\n\n if (!mountNode) return null;\n return createPortal(children, mountNode);\n}\n", "/**\n * Zod schemas for RuntimeContext validation.\n */\nimport { z } from 'zod';\n\nexport const PageContextZ = z.object({\n url: z.string(),\n routeId: z.string().optional(),\n title: z.string().optional(),\n locale: z.string().optional(),\n});\n\nexport const PageHistoryEntryZ = z.object({\n url: z.string(),\n ts: z.number(),\n});\n\nexport const SessionContextZ = z.object({\n sessionId: z.string(),\n startTs: z.number(),\n pageHistory: z.array(PageHistoryEntryZ).optional(),\n});\n\nexport const ViewportContextZ = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport const BoundingBoxZ = z.object({\n x: z.number(),\n y: z.number(),\n w: z.number(),\n h: z.number(),\n});\n\nexport const AnchorStateZ = z.object({\n anchorId: z.string(),\n present: z.boolean(),\n visible: z.boolean().optional(),\n boundingBox: BoundingBoxZ.optional(),\n});\n\nexport const AugmentationZ = z.record(\n z.string(),\n z.union([z.number(), z.string(), z.boolean(), z.undefined()])\n);\n\nexport const RuntimeContextZ = z.object({\n page: PageContextZ,\n session: SessionContextZ,\n viewport: ViewportContextZ,\n anchors: z.array(AnchorStateZ).optional(),\n augmented: AugmentationZ.optional(),\n});\n\n/**\n * Validate a RuntimeContext object.\n */\nexport function validateRuntimeContext(data: unknown) {\n return RuntimeContextZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type RuntimeContextSchema = z.infer<typeof RuntimeContextZ>;\nexport type PageContextSchema = z.infer<typeof PageContextZ>;\nexport type SessionContextSchema = z.infer<typeof SessionContextZ>;\nexport type ViewportContextSchema = z.infer<typeof ViewportContextZ>;\nexport type AnchorStateSchema = z.infer<typeof AnchorStateZ>;\n", "/**\n * Zod schemas for event validation.\n */\nimport { z } from 'zod';\n\nexport const EventSourceZ = z.enum(['posthog', 'canvas', 'derived']);\n\nexport const NormalizedEventZ = z.object({\n ts: z.number(),\n name: z.string(),\n source: EventSourceZ,\n props: z.record(z.string(), z.unknown()).optional(),\n schemaVersion: z.string(),\n});\n\nexport const EventFilterZ = z.object({\n names: z.array(z.string()).optional(),\n patterns: z.array(z.string()).optional(),\n sources: z.array(EventSourceZ).optional(),\n});\n\n/**\n * Validate a NormalizedEvent object.\n */\nexport function validateNormalizedEvent(data: unknown) {\n return NormalizedEventZ.safeParse(data);\n}\n\n/**\n * Validate an EventFilter object.\n */\nexport function validateEventFilter(data: unknown) {\n return EventFilterZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type NormalizedEventSchema = z.infer<typeof NormalizedEventZ>;\nexport type EventFilterSchema = z.infer<typeof EventFilterZ>;\n", "/**\n * Zod schemas for state validation.\n */\nimport { z } from 'zod';\n\nexport const StoredValueZ = z.object({\n value: z.unknown(),\n expiresAt: z.number().optional(),\n});\n\nexport const FrequencyEntryZ = z.object({\n count: z.number(),\n resetAt: z.number().optional(),\n});\n\n/**\n * Validate a StoredValue object.\n */\nexport function validateStoredValue(data: unknown) {\n return StoredValueZ.safeParse(data);\n}\n\n/**\n * Validate a FrequencyEntry object.\n */\nexport function validateFrequencyEntry(data: unknown) {\n return FrequencyEntryZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type StoredValueSchema = z.infer<typeof StoredValueZ>;\nexport type FrequencyEntrySchema = z.infer<typeof FrequencyEntryZ>;\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../src/index.ts", "../../adaptives/adaptive-chatbot/dist/ChatAssistant.js", "../../adaptives/adaptive-chatbot/dist/useChat.js", "../../adaptives/adaptive-chatbot/dist/actionParser.js", "../../adaptives/adaptive-chatbot/dist/apiClient.js", "../../adaptives/adaptive-chatbot/dist/runtime.js", "../../adaptives/adaptive-faq/dist/executors.js", "../../adaptives/adaptive-faq/dist/FAQWidget.js", "../../../node_modules/marked/src/defaults.ts", "../../../node_modules/marked/src/rules.ts", "../../../node_modules/marked/src/helpers.ts", "../../../node_modules/marked/src/Tokenizer.ts", "../../../node_modules/marked/src/Lexer.ts", "../../../node_modules/marked/src/Renderer.ts", "../../../node_modules/marked/src/TextRenderer.ts", "../../../node_modules/marked/src/Parser.ts", "../../../node_modules/marked/src/Hooks.ts", "../../../node_modules/marked/src/Instance.ts", "../../../node_modules/marked/src/marked.ts", "../../adaptives/adaptive-faq/dist/runtime.js", "../../adaptives/adaptive-gamification/dist/runtime.js", "../../adaptives/adaptive-nav/dist/NavWidget.js", "../../adaptives/adaptive-nav/dist/runtime.js", "../src/apps/builtinRuntimeModules.generated.ts", "../src/components/TileWheel.tsx", "../src/config-validator.ts", "../src/overlays/schema.ts", "../src/overlays/fetcher.ts", "../src/SmartCanvasPortal.tsx", "../src/context/schema.ts", "../src/events/normalizers/posthog.ts", "../src/events/schema.ts", "../src/state/schema.ts"],
|
|
4
|
+
"sourcesContent": ["// ============================================================================\n// Early SynOS exposure for adaptive self-registration + shared React\n// ============================================================================\n// Adaptive bundles loaded via <script> (IIFE) check window.SynOS.appRegistry\n// to self-register. In the Chrome extension's dev mode, adaptives load BEFORE\n// Syntro.init() runs. Expose the singleton appRegistry here (module scope) so\n// it's available as soon as smart-canvas.min.js loads. Syntro.init() later\n// enriches the SynOS object with runtime/version but reuses the same registry.\n//\n// React and ReactDOM are also exposed here so that adaptive bundles built with\n// syntroReactPlugin can resolve their lazy shims via SynOS.React / SynOS.ReactDOM.\n// This makes the runtime SDK the single React owner \u2014 adaptives and the editor\n// SDK consume React from SynOS, never from their own bundles.\n\nimport React from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport * as ReactDOMClient from 'react-dom/client';\nimport { appRegistry as _earlyAppRegistry } from './apps';\nimport { registerBuiltinRuntimeModules } from './apps/builtinRuntimeModules.generated';\n\n// Build-time constants injected by esbuild `define` in build-cdn.js / build.js\ndeclare const __BUILD_TIMESTAMP__: string;\ndeclare const __BUILD_GIT_HASH__: string;\n\nexport const RUNTIME_SDK_BUILD =\n typeof __BUILD_TIMESTAMP__ !== 'undefined'\n ? `${__BUILD_TIMESTAMP__} (${__BUILD_GIT_HASH__})`\n : 'dev';\n\nexport * from './api';\nexport * from './components/ShadowCanvasOverlay';\nexport * from './components/TileCard';\nexport * from './components/TileWheel';\nexport * from './config-validator';\nexport * from './configFetcher';\nexport * from './controller';\nexport * from './experiments';\nexport * from './hooks/useShadowCanvasConfig';\n// Metrics for session-based targeting\nexport * from './metrics';\nexport * from './overlays/fetcher';\nexport * from './overlays/schema';\nexport * from './overlays/types';\nexport * from './ShadowRootContext';\nexport * from './SmartCanvasApp';\nexport * from './SmartCanvasElement';\nexport * from './SmartCanvasPortal';\nexport * from './telemetry';\nexport * from './types';\nexport * from './version';\n\n// ============================================================================\n// v2 Runtime Modules\n// ============================================================================\n\n// Actions - Unified execution layer for interventions\nexport * from './actions';\n// Anchor - Centralized DOM observation for anchor resolution\nexport * from './anchor';\n// Apps - SynOS app system\nexport * from './apps';\n// Context - Page/session/viewport state management\nexport * from './context';\n// Decisions - Strategy-based conditional rendering\nexport * from './decisions';\n// Events - Normalized event stream\nexport * from './events';\n// Events - Normalized event stream\nexport * from './events';\nexport type { NavigationDiagnostics, NavigationListener } from './navigation/NavigationMonitor';\n// Navigation - Centralized History API monitoring\nexport { NavigationMonitor } from './navigation/NavigationMonitor';\n// Notifications - Toast notification system\nexport * from './notifications';\n// React context for runtime access\nexport {\n RuntimeProvider,\n useDecision,\n usePageContext,\n useRuntime,\n useRuntimeContext,\n useRuntimeEvents,\n useRuntimeState,\n useSessionContext,\n useViewportContext,\n} from './RuntimeProvider';\nexport type { RuntimeMode, SmartCanvasRuntime, SmartCanvasRuntimeOptions } from './runtime';\n// Unified runtime\nexport { createSmartCanvasRuntime, RUNTIME_VERSION } from './runtime';\n// State - Persistent state storage with helpers\nexport * from './state';\n// State - Persistent state storage with helpers\nexport * from './state';\n// Surfaces - Managed surface system for rendering UI\nexport * from './surfaces';\n// Widgets - Mountable component registry\nexport * from './widgets';\n\n// ============================================================================\n// Single-token initialization\n// ============================================================================\n\nexport type { SyntroInitOptions, SyntroInitResult } from './bootstrap';\nexport { Syntro } from './bootstrap';\nexport type { SyntroTokenPayload } from './token';\nexport { decodeToken, encodeToken } from './token';\n\nif (typeof window !== 'undefined') {\n console.log(`[Syntro Runtime] Build: ${RUNTIME_SDK_BUILD}`);\n\n const existing = (window as any).SynOS;\n const registry = existing?.appRegistry || _earlyAppRegistry;\n (window as any).SynOS = {\n ...existing,\n appRegistry: registry,\n _runtimeBuild: RUNTIME_SDK_BUILD,\n React,\n ReactDOM: { ...ReactDOMClient, createPortal, flushSync },\n };\n\n // Register all built-in adaptive runtime modules at module load time.\n // This ensures executors, widgets, and event handlers are available\n // before Syntro.init() runs or any config is fetched.\n registerBuiltinRuntimeModules(registry);\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive Chatbot - ChatAssistant Component\n *\n * Main React component for the AI chat assistant widget.\n * Renders a message list with auto-scroll, loading indicator, and input form.\n */\nimport { base, purple, red, slateGrey } from '@syntro/design-system/tokens';\nimport React, { useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useChat } from './useChat';\n// ============================================================================\n// Styles\n// ============================================================================\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n touchAction: 'none',\n },\n messageList: {\n flex: 1,\n overflowY: 'auto',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n },\n messageBubble: {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n lineHeight: 1.5,\n wordBreak: 'break-word',\n },\n userMessage: {\n alignSelf: 'flex-end',\n backgroundColor: purple[4],\n color: base.white,\n borderBottomRightRadius: '4px',\n },\n assistantMessage: {\n alignSelf: 'flex-start',\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n color: slateGrey[10],\n borderBottomLeftRadius: '4px',\n },\n loadingDots: {\n alignSelf: 'flex-start',\n padding: '8px 16px',\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n borderRadius: '12px',\n color: slateGrey[8],\n fontSize: '13px',\n },\n errorBanner: {\n padding: '8px 12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: red[4],\n fontSize: '13px',\n borderRadius: '8px',\n margin: '0 12px',\n },\n inputForm: {\n display: 'flex',\n gap: '8px',\n padding: '12px',\n borderTop: '1px solid rgba(255, 255, 255, 0.06)',\n },\n input: {\n flex: 1,\n padding: '8px 12px',\n borderRadius: '8px',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n color: slateGrey[12],\n fontSize: '14px',\n outline: 'none',\n fontFamily: 'inherit',\n },\n sendButton: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: purple[4],\n color: base.white,\n fontWeight: 600,\n fontSize: '13px',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n },\n sendButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n// ============================================================================\n// MessageBubble Component\n// ============================================================================\nfunction MessageBubble({ message }) {\n const isUser = message.role === 'user';\n const bubbleStyle = {\n ...styles.messageBubble,\n ...(isUser ? styles.userMessage : styles.assistantMessage),\n };\n return _jsx(\"div\", { style: bubbleStyle, children: message.text });\n}\nexport function ChatAssistant({ config, runtime, tileId }) {\n const { messages, isLoading, error, sendMessage, clearMessages: _clearMessages, } = useChat({\n backendUrl: config.backendUrl,\n tileId,\n runtime,\n greeting: config.greeting,\n maxHistory: config.maxHistory,\n mlflowRunId: config.mlflowRunId,\n });\n const messageListRef = useRef(null);\n const inputRef = useRef(null);\n // Auto-scroll to bottom on new messages\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, []);\n const handleSubmit = (e) => {\n e.preventDefault();\n const input = inputRef.current;\n if (!input || !input.value.trim() || isLoading)\n return;\n const text = input.value;\n input.value = '';\n sendMessage(text);\n };\n return (_jsxs(\"div\", { style: styles.container, \"data-testid\": \"chat-assistant\", children: [_jsxs(\"div\", { ref: messageListRef, style: styles.messageList, children: [messages.map((msg) => (_jsx(MessageBubble, { message: msg }, msg.id))), isLoading && _jsx(\"div\", { style: styles.loadingDots, children: \"Thinking...\" })] }), error && _jsx(\"div\", { style: styles.errorBanner, children: error }), _jsxs(\"form\", { onSubmit: handleSubmit, style: styles.inputForm, children: [_jsx(\"input\", { ref: inputRef, style: styles.input, placeholder: \"Ask anything...\", disabled: isLoading, \"data-testid\": \"chat-input\" }), _jsx(\"button\", { type: \"submit\", disabled: isLoading, style: {\n ...styles.sendButton,\n ...(isLoading ? styles.sendButtonDisabled : {}),\n }, \"data-testid\": \"chat-send\", children: \"Send\" })] })] }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\nexport const ChatAssistantMountableWidget = {\n mount(container, mountConfig) {\n const { config, runtime, tileId = 'chatbot-widget', } = (mountConfig || {});\n // React rendering when config + runtime + ReactDOM are available\n if (config && runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(ChatAssistant, {\n config,\n runtime,\n tileId,\n }));\n return () => {\n root.unmount();\n };\n }\n if (!config || !runtime) {\n container.innerHTML = `<div style=\"padding: 16px; color: ${slateGrey[8]};\">Chat widget requires config and runtime.</div>`;\n return () => {\n container.innerHTML = '';\n };\n }\n // HTML fallback\n container.innerHTML = `\n <div style=\"padding: 16px; font-family: system-ui; color: ${slateGrey[10]};\">\n <p style=\"margin: 0 0 8px; color: ${slateGrey[8]};\">${config.greeting || 'Hi! How can I help?'}</p>\n <p style=\"margin: 0; font-size: 12px; color: ${slateGrey[7]};\">Chat widget mounted. Awaiting React renderer.</p>\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default ChatAssistant;\n", "/**\n * Adaptive Chatbot - useChat Hook\n *\n * React hook managing chat message state, API communication,\n * history management, and action execution via the runtime ActionEngine.\n */\nimport { useCallback, useRef, useState } from 'react';\nimport { parseActions } from './actionParser';\nimport { sendMessage } from './apiClient';\nlet nextId = 0;\nfunction generateId() {\n return `msg-${Date.now()}-${++nextId}`;\n}\nexport function useChat(options) {\n const { backendUrl, tileId, runtime, greeting, maxHistory = 20, mlflowRunId, config } = options;\n const [messages, setMessages] = useState(() => {\n if (greeting) {\n return [\n {\n id: generateId(),\n role: 'assistant',\n text: greeting,\n timestamp: Date.now(),\n },\n ];\n }\n return [];\n });\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n const batchHandleRef = useRef(null);\n const send = useCallback(async (text) => {\n const trimmed = text.trim();\n if (!trimmed)\n return;\n setError(null);\n const userMessage = {\n id: generateId(),\n role: 'user',\n text: trimmed,\n timestamp: Date.now(),\n };\n setMessages((prev) => [...prev, userMessage]);\n setIsLoading(true);\n try {\n // Build history from current messages + new user message\n const currentMessages = [...messages, userMessage];\n const historySlice = currentMessages.slice(-maxHistory).map((m) => ({\n role: m.role,\n content: m.text,\n }));\n const response = await sendMessage(backendUrl, {\n message: trimmed,\n history: historySlice,\n mlflow_run_id: mlflowRunId,\n current_config: config,\n });\n // Parse actions from the LLM response\n const { displayText, actions } = parseActions(response.response);\n const assistantMessage = {\n id: generateId(),\n role: 'assistant',\n text: displayText,\n timestamp: Date.now(),\n };\n setMessages((prev) => [...prev, assistantMessage]);\n // Execute actions if present\n if (actions.length > 0) {\n // Revert previous batch\n if (batchHandleRef.current?.isApplied()) {\n await batchHandleRef.current.revertAll();\n }\n batchHandleRef.current = await runtime.actions.applyBatch(actions);\n runtime.events.publish('chatbot.actions_applied', {\n count: actions.length,\n kinds: actions.map((a) => a.kind),\n tileId,\n });\n }\n }\n catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(message);\n }\n finally {\n setIsLoading(false);\n }\n }, [backendUrl, messages, maxHistory, mlflowRunId, config, runtime, tileId]);\n const clearMessages = useCallback(() => {\n setMessages([]);\n setError(null);\n // Revert any active actions\n if (batchHandleRef.current?.isApplied()) {\n batchHandleRef.current.revertAll();\n batchHandleRef.current = null;\n }\n sessionStorage.removeItem(`syntro:chatbot:history:${tileId}`);\n }, [tileId]);\n return {\n messages,\n isLoading,\n error,\n sendMessage: send,\n clearMessages,\n };\n}\n", "/**\n * Adaptive Chatbot - Action Parser\n *\n * Extracts JSON action blocks from LLM markdown responses.\n * Actions are identified by having a `kind` field in a ```json code fence.\n */\nconst JSON_FENCE_RE = /```json\\s*\\n([\\s\\S]*?)```/g;\n/**\n * Parse an LLM response, extracting action blocks from JSON code fences.\n *\n * - Blocks with a `kind` field are treated as actions and removed from display text.\n * - Blocks without `kind` or with invalid JSON are left in the display text.\n */\nexport function parseActions(input) {\n const actions = [];\n let displayText = input;\n // Collect matches in reverse order so we can splice display text without index shifting\n const matches = [];\n let match;\n // Reset regex state\n JSON_FENCE_RE.lastIndex = 0;\n while ((match = JSON_FENCE_RE.exec(input)) !== null) {\n matches.push({\n fullMatch: match[0],\n json: match[1],\n index: match.index,\n });\n }\n // Process in reverse to preserve indices when removing from displayText\n for (let i = matches.length - 1; i >= 0; i--) {\n const { fullMatch, json } = matches[i];\n let parsed;\n try {\n parsed = JSON.parse(json);\n }\n catch {\n // Malformed JSON \u2014 leave in display text\n continue;\n }\n if (typeof parsed === 'object' &&\n parsed !== null &&\n 'kind' in parsed &&\n typeof parsed.kind === 'string') {\n actions.unshift(parsed);\n // Remove the action block from display text\n displayText = displayText.replace(fullMatch, '');\n }\n }\n // Clean up extra blank lines left from removed blocks\n displayText = displayText.replace(/\\n{3,}/g, '\\n\\n').trim();\n return { displayText, actions };\n}\n", "/**\n * Adaptive Chatbot - API Client\n *\n * Auth-aware fetch client that reads Stytch JWT from cookies\n * and workspace ID from localStorage.\n */\nexport class AuthError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AuthError';\n }\n}\n/**\n * Read auth credentials from browser cookie and localStorage.\n * Throws AuthError if credentials are missing.\n */\nexport function getAuthHeaders() {\n const cookieMatch = document.cookie.match(/stytch_session_jwt=([^;]*)/);\n if (!cookieMatch || !cookieMatch[1]) {\n throw new AuthError('No authentication token found');\n }\n const workspaceId = localStorage.getItem('syntrologie_workspace_id');\n if (!workspaceId) {\n throw new AuthError('No workspace ID found');\n }\n return {\n Authorization: `Bearer ${cookieMatch[1]}`,\n 'X-Workspace-Id': workspaceId,\n };\n}\n/**\n * Send a chat message to the backend.\n */\nexport async function sendMessage(url, request) {\n const authHeaders = getAuthHeaders();\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthError('Session expired or unauthorized');\n }\n throw new Error(`Chat request failed: ${response.status} ${response.statusText}`);\n }\n return response.json();\n}\n", "/**\n * Adaptive Chatbot - Runtime Module\n *\n * Runtime manifest for the AI chat assistant adaptive.\n * This is a widget-based adaptive with no action executors.\n */\nimport { ChatAssistantMountableWidget } from './ChatAssistant';\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\nexport const runtime = {\n id: 'adaptive-chatbot',\n version: '1.0.0',\n name: 'Chat Assistant',\n description: 'AI chat assistant with action execution capabilities',\n /** No action executors \u2014 chatbot uses existing action kinds via applyBatch */\n executors: [],\n /** Widget definitions for the runtime's WidgetRegistry */\n widgets: [\n {\n id: 'adaptive-chatbot:assistant',\n component: ChatAssistantMountableWidget,\n metadata: {\n name: 'Chat Assistant',\n description: 'AI-powered chat assistant that can execute DOM actions',\n icon: '\uD83D\uDCAC',\n },\n },\n ],\n};\nexport default runtime;\n", "/**\n * Adaptive FAQ - Action Executors\n *\n * Three executors that operate on the FAQStore:\n * - executeScrollToFaq: scroll to a FAQ item and optionally expand it\n * - executeToggleFaqItem: open / close / toggle a FAQ item\n * - executeUpdateFaq: add, remove, reorder, or replace FAQ items\n */\n// ============================================================================\n// Helpers\n// ============================================================================\n/**\n * Resolve a FAQ item by direct ID or by fuzzy question text match.\n * Throws if neither yields a result.\n */\nfunction resolveItem(store, itemId, itemQuestion) {\n if (itemId) {\n const found = store.getState().items.find((i) => i.config.id === itemId);\n if (found)\n return found;\n }\n if (itemQuestion) {\n const found = store.findByQuestion(itemQuestion);\n if (found)\n return found;\n }\n throw new Error('FAQ item not found');\n}\n// ============================================================================\n// executeScrollToFaq\n// ============================================================================\n/**\n * Scroll to a FAQ item in the DOM and optionally expand it.\n *\n * Looks up the item by `itemId` or `itemQuestion`, scrolls the matching\n * `[data-faq-item-id]` element into view, and expands it unless\n * `expand` is explicitly set to `false`.\n */\nexport async function executeScrollToFaq(action, context, store) {\n const item = resolveItem(store, action.itemId, action.itemQuestion);\n const { id } = item.config;\n // Expand the item unless explicitly told not to\n if (action.expand !== false) {\n store.expand(id);\n }\n // Scroll the DOM element into view (may be absent in test environments)\n const el = document.querySelector(`[data-faq-item-id=\"${id}\"]`);\n if (el) {\n el.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n });\n }\n // Publish analytics event\n context.publishEvent('faq:scroll_to', { itemId: id });\n return {\n cleanup: () => {\n // Optionally collapse on revert\n },\n };\n}\n// ============================================================================\n// executeToggleFaqItem\n// ============================================================================\n/**\n * Open, close, or toggle a FAQ item's expanded state.\n */\nexport async function executeToggleFaqItem(action, context, store) {\n const item = resolveItem(store, action.itemId, action.itemQuestion);\n const { id } = item.config;\n const desiredState = action.state ?? 'toggle';\n let newState;\n switch (desiredState) {\n case 'open':\n store.expand(id);\n newState = 'open';\n break;\n case 'closed':\n store.collapse(id);\n newState = 'closed';\n break;\n default: {\n const wasExpanded = store.getState().expandedItems.has(id);\n store.toggle(id);\n newState = wasExpanded ? 'closed' : 'open';\n break;\n }\n }\n context.publishEvent('faq:toggle', { itemId: id, newState });\n return {\n cleanup: () => {\n // Revert toggle on cleanup\n },\n };\n}\n// ============================================================================\n// executeUpdateFaq\n// ============================================================================\n/**\n * Add, remove, reorder, or replace FAQ items in the store.\n */\nexport async function executeUpdateFaq(action, context, store) {\n switch (action.operation) {\n case 'add': {\n const items = action.items ?? [];\n const position = action.position === 'prepend' ? 'prepend' : 'append';\n store.addItems(items, position);\n break;\n }\n case 'remove': {\n if (!action.itemId) {\n throw new Error('FAQ item not found');\n }\n // Verify the item exists before removing\n const exists = store.getState().items.some((i) => i.config.id === action.itemId);\n if (!exists) {\n throw new Error('FAQ item not found');\n }\n store.removeItem(action.itemId);\n break;\n }\n case 'reorder': {\n const order = action.order ?? [];\n store.reorderItems(order);\n break;\n }\n case 'replace': {\n const items = action.items ?? [];\n store.replaceItems(items);\n break;\n }\n }\n context.publishEvent('faq:update', { operation: action.operation });\n return {\n cleanup: () => {\n // Could snapshot previous state for undo\n },\n };\n}\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by adaptive-faq.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executorDefinitions = [\n { kind: 'faq:scroll_to', executor: executeScrollToFaq },\n { kind: 'faq:toggle_item', executor: executeToggleFaqItem },\n { kind: 'faq:update', executor: executeUpdateFaq },\n];\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive FAQ - FAQWidget Component\n *\n * React component that renders a collapsible Q&A accordion with per-item\n * conditional visibility based on triggerWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (faq:question) serve as configuration data for the parent widget.\n */\nimport { purple, slateGrey } from '@syntro/design-system/tokens';\nimport { Marked } from 'marked';\nimport React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nconst marked = new Marked({ async: false, gfm: true, breaks: true });\n// ============================================================================\n// Helpers\n// ============================================================================\n/** Extract plain text from an FAQAnswer for search matching */\nfunction getAnswerText(answer) {\n if (typeof answer === 'string')\n return answer;\n if (answer.type === 'rich')\n return answer.html;\n return answer.content;\n}\n/** Render an FAQAnswer based on its type */\nfunction renderAnswer(answer) {\n if (typeof answer === 'string') {\n return _jsx(\"p\", { style: { margin: 0 }, children: answer });\n }\n if (answer.type === 'rich') {\n // biome-ignore lint/security/noDangerouslySetInnerHtml: content is pre-sanitized by backend \u2014 FAQAnswer.html is CMS/config content, not user-controlled input\n return _jsx(\"div\", { style: { margin: 0 }, dangerouslySetInnerHTML: { __html: answer.html } });\n }\n // markdown \u2014 parse to HTML and render\n const html = marked.parse(answer.content);\n return (\n // biome-ignore lint/security/noDangerouslySetInnerHtml: markdown content is CMS/config content, not user-controlled input\n _jsx(\"div\", { style: { margin: 0 }, \"data-faq-markdown\": \"\", dangerouslySetInnerHTML: { __html: html } }));\n}\n/** Resolve feedback config into a normalized FeedbackConfig or null */\nfunction resolveFeedbackConfig(feedback) {\n if (!feedback)\n return null;\n if (feedback === true) {\n return { style: 'thumbs' };\n }\n return feedback;\n}\n/** Get the feedback prompt text */\nfunction getFeedbackPrompt(feedbackConfig) {\n return feedbackConfig.prompt || 'Was this helpful?';\n}\n// ============================================================================\n// Styles\n// ============================================================================\nconst baseStyles = {\n container: {\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '800px',\n margin: '0 auto',\n },\n searchWrapper: {\n marginBottom: '8px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n borderRadius: '8px',\n fontSize: '14px',\n outline: 'none',\n transition: 'border-color 0.15s ease',\n backgroundColor: 'var(--sc-content-search-background)',\n color: 'var(--sc-content-search-color)',\n },\n accordion: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n },\n item: {\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.15s ease',\n },\n question: {\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: 500,\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n },\n chevron: {\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n color: 'var(--sc-content-chevron-color, currentColor)',\n },\n answer: {\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: 1.6,\n overflow: 'hidden',\n transition: 'max-height 0.2s ease, padding 0.2s ease',\n },\n category: {\n display: 'inline-block',\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: '4px 8px',\n borderRadius: '4px',\n marginBottom: '8px',\n },\n categoryHeader: {\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: 700,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n marginTop: 'var(--sc-content-category-gap, 4px)',\n },\n feedback: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginTop: '12px',\n paddingTop: '10px',\n borderTop: '1px solid rgba(0, 0, 0, 0.08)',\n fontSize: '13px',\n },\n feedbackButton: {\n background: 'none',\n border: '1px solid transparent',\n cursor: 'pointer',\n fontSize: '16px',\n padding: '4px 8px',\n borderRadius: '4px',\n transition: 'background-color 0.15s ease, border-color 0.15s ease',\n },\n feedbackButtonSelected: {\n borderColor: 'rgba(0, 0, 0, 0.2)',\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n emptyState: {\n textAlign: 'center',\n padding: '48px 24px',\n fontSize: '14px',\n },\n noResults: {\n textAlign: 'center',\n padding: '32px 16px',\n fontSize: '14px',\n },\n};\nconst themeStyles = {\n light: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n searchInput: {\n border: `1px solid ${slateGrey[11]}`,\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n borderTop: 'var(--sc-content-border)',\n borderRight: 'var(--sc-content-border)',\n borderBottom: 'var(--sc-content-border)',\n borderLeft: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n },\n question: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n questionHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n answer: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n category: {\n backgroundColor: purple[8],\n color: purple[2],\n },\n categoryHeader: {\n color: slateGrey[7],\n },\n emptyState: {\n color: slateGrey[8],\n },\n feedbackPrompt: {\n color: slateGrey[7],\n },\n },\n dark: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n searchInput: {\n border: `1px solid ${slateGrey[5]}`,\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n borderTop: 'var(--sc-content-border)',\n borderRight: 'var(--sc-content-border)',\n borderBottom: 'var(--sc-content-border)',\n borderLeft: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n },\n question: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n questionHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n answer: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n category: {\n backgroundColor: purple[0],\n color: purple[6],\n },\n categoryHeader: {\n color: slateGrey[8],\n },\n emptyState: {\n color: slateGrey[7],\n },\n feedbackPrompt: {\n color: slateGrey[8],\n },\n },\n};\nfunction FAQItem({ item, isExpanded, isHighlighted, isLast, onToggle, theme, feedbackConfig, feedbackValue, onFeedback, }) {\n const [isHovered, setIsHovered] = useState(false);\n const colors = themeStyles[theme];\n const { question, answer } = item.config;\n const itemStyle = {\n ...baseStyles.item,\n ...colors.item,\n ...(isExpanded ? colors.itemExpanded : {}),\n ...(isHighlighted\n ? {\n boxShadow: '0 0 0 2px #6366f1, 0 0 12px rgba(99, 102, 241, 0.4)',\n transition: 'box-shadow 0.3s ease',\n }\n : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n };\n const questionStyle = {\n ...baseStyles.question,\n ...colors.question,\n ...(isHovered ? colors.questionHover : {}),\n };\n const chevronStyle = {\n ...baseStyles.chevron,\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n const answerStyle = {\n ...baseStyles.answer,\n ...colors.answer,\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n };\n const feedbackStyle = {\n ...baseStyles.feedback,\n ...colors.feedbackPrompt,\n };\n return (_jsxs(\"div\", { style: itemStyle, \"data-faq-item-id\": item.config.id, children: [_jsxs(\"button\", { type: \"button\", style: questionStyle, onClick: onToggle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), \"aria-expanded\": isExpanded, children: [_jsx(\"span\", { children: question }), _jsx(\"span\", { style: chevronStyle, children: '\\u203A' })] }), _jsxs(\"div\", { style: answerStyle, \"aria-hidden\": !isExpanded, children: [renderAnswer(answer), isExpanded && feedbackConfig && (_jsxs(\"div\", { style: feedbackStyle, children: [_jsx(\"span\", { children: getFeedbackPrompt(feedbackConfig) }), _jsx(\"button\", { type: \"button\", style: {\n ...baseStyles.feedbackButton,\n ...(feedbackValue === 'up' ? baseStyles.feedbackButtonSelected : {}),\n }, \"aria-label\": \"Thumbs up\", onClick: () => onFeedback(item.config.id, question, 'up'), children: '\\uD83D\\uDC4D' }), _jsx(\"button\", { type: \"button\", style: {\n ...baseStyles.feedbackButton,\n ...(feedbackValue === 'down' ? baseStyles.feedbackButtonSelected : {}),\n }, \"aria-label\": \"Thumbs down\", onClick: () => onFeedback(item.config.id, question, 'down'), children: '\\uD83D\\uDC4E' })] }))] })] }));\n}\n// ============================================================================\n// FAQWidget Component\n// ============================================================================\n/**\n * FAQWidget - Renders a collapsible Q&A accordion with per-item activation.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (FAQWidget) receives `config.actions` array\n * - Each action has optional `triggerWhen` for per-item visibility\n * - Parent evaluates triggerWhen and filters visible questions\n * - Parent manages expand state and re-rendering on context changes\n */\nexport function FAQWidget({ config, runtime, instanceId }) {\n // Force re-render when context/accumulator changes.\n // renderTick is used as a useMemo dependency to invalidate cached triggerWhen evaluations.\n const [renderTick, forceUpdate] = useReducer((x) => x + 1, 0);\n // Track expanded question IDs\n const [expandedIds, setExpandedIds] = useState(new Set());\n // Track which item is flash-highlighted from a deep-link\n const [highlightId, setHighlightId] = useState(null);\n // Search query state\n const [searchQuery, setSearchQuery] = useState('');\n // Track feedback state per item\n const [feedbackState, setFeedbackState] = useState(new Map());\n // Resolve feedback config\n const feedbackConfig = useMemo(() => resolveFeedbackConfig(config.feedback), [config.feedback]);\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n // Subscribe to accumulator changes for event_count-based triggerWhen\n useEffect(() => {\n if (!runtime.accumulator?.subscribe)\n return;\n return runtime.accumulator.subscribe(() => {\n forceUpdate();\n });\n }, [runtime.accumulator]);\n // Subscribe to faq:open:* events from overlay CTA clicks\n useEffect(() => {\n if (!runtime.events.subscribe)\n return;\n // Check EventBus history for pending faq:open events\n // (may have fired before this widget mounted, e.g. when canvas was closed)\n if (runtime.events.getRecent) {\n const recentEvents = runtime.events.getRecent({ patterns: ['^action\\\\.tooltip_cta_clicked$', '^action\\\\.modal_cta_clicked$'] }, 10);\n const pendingEvent = recentEvents\n .filter((e) => {\n const actionId = e.props?.actionId;\n return typeof actionId === 'string' && actionId.startsWith('faq:open:');\n })\n .pop(); // Most recent\n if (pendingEvent && Date.now() - pendingEvent.ts < 10000) {\n const questionId = pendingEvent.props.actionId.replace('faq:open:', '');\n setExpandedIds(new Set([questionId]));\n // Scroll into view after render\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${questionId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n }\n }\n // Subscribe to future CTA events\n const unsubscribe = runtime.events.subscribe({ patterns: ['^action\\\\.tooltip_cta_clicked$', '^action\\\\.modal_cta_clicked$'] }, (event) => {\n const actionId = event.props?.actionId;\n if (typeof actionId !== 'string' || !actionId.startsWith('faq:open:'))\n return;\n const questionId = actionId.replace('faq:open:', '');\n setExpandedIds(new Set([questionId]));\n // Scroll the question into view\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${questionId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n // Request canvas open (for future tile-based FAQ rendering)\n runtime.events.publish('canvas.requestOpen');\n });\n return unsubscribe;\n }, [runtime]);\n // Subscribe to notification.deep_link events (from insertHtml deepLink clicks + notification toasts)\n useEffect(() => {\n if (!runtime.events.subscribe)\n return;\n const handleDeepLink = (event) => {\n const tileId = event.props?.tileId;\n const itemId = event.props?.itemId;\n // Only handle if this deep link targets our tile\n if (tileId !== instanceId)\n return;\n if (!itemId)\n return;\n // Expand the target item\n setExpandedIds(new Set([itemId]));\n // Flash-highlight the item\n setHighlightId(itemId);\n setTimeout(() => setHighlightId(null), 1500);\n // Scroll into view after render\n requestAnimationFrame(() => {\n const el = document.querySelector(`[data-faq-item-id=\"${itemId}\"]`);\n if (el)\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n };\n // Check recent events (may have fired before widget mounted, e.g. canvas was closed)\n if (runtime.events.getRecent) {\n const recent = runtime.events.getRecent({ names: ['notification.deep_link'] }, 5);\n const pending = recent\n .filter((e) => e.props?.tileId === instanceId && e.props?.itemId)\n .pop();\n if (pending && Date.now() - pending.ts < 10000) {\n handleDeepLink(pending);\n }\n }\n // Subscribe to future events\n const unsubscribe = runtime.events.subscribe({ names: ['notification.deep_link'] }, handleDeepLink);\n return unsubscribe;\n }, [runtime, instanceId]);\n // Filter visible questions based on per-item triggerWhen\n // biome-ignore lint/correctness/useExhaustiveDependencies: renderTick is intentionally included to force re-evaluation when the runtime's mutable context changes (subscribed above via forceUpdate)\n const visibleQuestions = useMemo(() => config.actions.filter((q) => {\n // No triggerWhen = always visible\n if (!q.triggerWhen)\n return true;\n // Evaluate the decision strategy\n const result = runtime.evaluateSync(q.triggerWhen);\n return result.value;\n }), [config.actions, runtime, renderTick]);\n // NOTE: faq:question_revealed is now published by useNotifyWatcher in\n // ShadowCanvasOverlay (always mounted), so it fires even with drawer closed.\n // Apply priority ordering\n const orderedQuestions = useMemo(() => {\n if (config.ordering === 'priority') {\n return [...visibleQuestions].sort((a, b) => (b.config.priority ?? 0) - (a.config.priority ?? 0));\n }\n // 'static' or undefined \u2014 preserve config order\n return visibleQuestions;\n }, [visibleQuestions, config.ordering]);\n // Apply search filter\n const filteredQuestions = useMemo(() => {\n if (!config.searchable || !searchQuery.trim()) {\n return orderedQuestions;\n }\n const query = searchQuery.toLowerCase();\n return orderedQuestions.filter((q) => q.config.question.toLowerCase().includes(query) ||\n getAnswerText(q.config.answer).toLowerCase().includes(query) ||\n q.config.category?.toLowerCase().includes(query));\n }, [orderedQuestions, searchQuery, config.searchable]);\n // Group by category\n const categoryGroups = useMemo(() => {\n const groups = new Map();\n for (const q of filteredQuestions) {\n const cat = q.config.category;\n if (!groups.has(cat)) {\n groups.set(cat, []);\n }\n groups.get(cat).push(q);\n }\n return groups;\n }, [filteredQuestions]);\n // Check if any items have categories\n const hasCategories = useMemo(() => filteredQuestions.some((q) => q.config.category), [filteredQuestions]);\n // Resolve theme (auto -> detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme && config.theme !== 'auto')\n return config.theme;\n // Check system preference (SSR-safe)\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n // Handle question toggle\n const handleToggle = useCallback((id) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (config.expandBehavior === 'single') {\n // Single mode: collapse all others\n if (prev.has(id)) {\n return new Set();\n }\n return new Set([id]);\n }\n // Multiple mode: toggle this one\n if (prev.has(id)) {\n next.delete(id);\n }\n else {\n next.add(id);\n }\n return next;\n });\n // Publish toggle event for analytics\n runtime.events.publish('faq:toggled', {\n instanceId,\n questionId: id,\n expanded: !expandedIds.has(id),\n timestamp: Date.now(),\n });\n }, [config.expandBehavior, runtime.events, instanceId, expandedIds]);\n // Handle feedback\n const handleFeedback = useCallback((itemId, question, value) => {\n setFeedbackState((prev) => {\n const next = new Map(prev);\n next.set(itemId, value);\n return next;\n });\n runtime.events.publish('faq:feedback', {\n itemId,\n question,\n value,\n });\n }, [runtime.events]);\n // Compute styles\n const containerStyle = {\n ...baseStyles.container,\n ...themeStyles[resolvedTheme].container,\n };\n const searchInputStyle = {\n ...baseStyles.searchInput,\n ...themeStyles[resolvedTheme].searchInput,\n };\n const emptyStateStyle = {\n ...baseStyles.emptyState,\n ...themeStyles[resolvedTheme].emptyState,\n };\n const categoryHeaderStyle = {\n ...baseStyles.categoryHeader,\n ...themeStyles[resolvedTheme].categoryHeader,\n };\n // Render a list of FAQ items\n const renderItems = (items) => items.map((q, index) => (_jsx(FAQItem, { item: q, isExpanded: expandedIds.has(q.config.id), isHighlighted: highlightId === q.config.id, isLast: index === items.length - 1, onToggle: () => handleToggle(q.config.id), theme: resolvedTheme, feedbackConfig: feedbackConfig, feedbackValue: feedbackState.get(q.config.id), onFeedback: handleFeedback }, q.config.id)));\n // Empty state (no visible questions at all)\n if (visibleQuestions.length === 0) {\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-faq\", children: _jsx(\"div\", { style: emptyStateStyle, children: \"You're all set for now! We'll surface answers here when they're relevant to what you're doing.\" }) }));\n }\n return (_jsxs(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-faq\", children: [config.searchable && (_jsxs(\"div\", { style: baseStyles.searchWrapper, children: [_jsx(\"style\", { children: `[data-adaptive-id=\"${instanceId}\"] input::placeholder { color: var(--sc-content-search-color, inherit); opacity: 0.7; }` }), _jsx(\"input\", { type: \"text\", placeholder: \"Search questions...\", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), style: searchInputStyle })] })), _jsx(\"div\", { style: baseStyles.accordion, children: hasCategories\n ? Array.from(categoryGroups.entries()).map(([category, items]) => (_jsxs(React.Fragment, { children: [category && (_jsx(\"div\", { style: categoryHeaderStyle, \"data-category-header\": category, children: category })), renderItems(items)] }, category ?? '__ungrouped')))\n : renderItems(filteredQuestions) }), config.searchable && filteredQuestions.length === 0 && searchQuery && (_jsxs(\"div\", { style: { ...baseStyles.noResults, ...themeStyles[resolvedTheme].emptyState }, children: [\"No questions found matching \\\"\", searchQuery, \"\\\"\"] }))] }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const FAQMountableWidget = {\n mount(container, config) {\n const { runtime, instanceId = 'faq-widget', ...faqConfig } = config || {\n expandBehavior: 'single',\n searchable: false,\n theme: 'auto',\n actions: [],\n };\n // React rendering when runtime + ReactDOM are available\n if (runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(FAQWidget, {\n config: faqConfig,\n runtime: runtime,\n instanceId,\n }));\n return () => {\n root.unmount();\n };\n }\n // HTML fallback when React is not available\n const questions = faqConfig.actions || [];\n container.innerHTML = `\n <div style=\"font-family: system-ui; max-width: 800px;\">\n ${questions\n .map((q) => `\n <div style=\"margin-bottom: 8px; padding: 16px; background: ${slateGrey[12]}; border-radius: 8px;\">\n <strong>${q.config.question}</strong>\n <p style=\"margin-top: 8px; color: ${slateGrey[6]};\">${getAnswerText(q.config.answer)}</p>\n </div>\n `)\n .join('')}\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default FAQWidget;\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults(): MarkedOptions {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n\nexport let _defaults = _getDefaults();\n\nexport function changeDefaults(newDefaults: MarkedOptions) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options: MarkedOptions;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer; // set by the lexer\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n let istask: RegExpExecArray | null = null;\n let ischecked: boolean | undefined;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer {\n tokens: TokensList;\n options: MarkedOptions;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n private tokenizer: _Tokenizer;\n private inlineQueue: { src: string, tokens: Token[] }[];\n\n constructor(options?: MarkedOptions) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer {\n options: MarkedOptions;\n parser!: _Parser; // set by the parser\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): string {\n return '';\n }\n\n code({ text, lang, escaped }: Tokens.Code): string {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote({ tokens }: Tokens.Blockquote): string {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n`;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag) : string {\n return text;\n }\n\n heading({ tokens, depth }: Tokens.Heading): string {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n }\n\n hr(token: Tokens.Hr): string {\n return '<hr>\\n';\n }\n\n list(token: Tokens.List): string {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(item: Tokens.ListItem): string {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n } else {\n itemBody += checkbox + ' ';\n }\n }\n\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n\n return `<li>${itemBody}</li>\\n`;\n }\n\n checkbox({ checked }: Tokens.Checkbox): string {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n\n paragraph({ tokens }: Tokens.Paragraph): string {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n }\n\n table(token: Tokens.Table): string {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow({ text }: Tokens.TableRow): string {\n return `<tr>\\n${text}</tr>\\n`;\n }\n\n tablecell(token: Tokens.TableCell): string {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): string {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n\n em({ tokens }: Tokens.Em): string {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n\n codespan({ text }: Tokens.Codespan): string {\n return `<code>${escape(text, true)}</code>`;\n }\n\n br(token: Tokens.Br): string {\n return '<br>';\n }\n\n del({ tokens }: Tokens.Del): string {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): string {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text);\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out;\n }\n\n text(token: Tokens.Text | Tokens.Escape) : string {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens)\n : ('escaped' in token && token.escaped ? token.text : escape(token.text));\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer {\n // no need for block level renderers\n strong({ text }: Tokens.Strong) {\n return text;\n }\n\n em({ text }: Tokens.Em) {\n return text;\n }\n\n codespan({ text }: Tokens.Codespan) {\n return text;\n }\n\n del({ text }: Tokens.Del) {\n return text;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag) {\n return text;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag) {\n return text;\n }\n\n link({ text }: Tokens.Link) {\n return '' + text;\n }\n\n image({ text }: Tokens.Image) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser {\n options: MarkedOptions;\n renderer: _Renderer;\n textRenderer: _TextRenderer;\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[], top = true): string {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i] as Tokens.Text;\n body += '\\n' + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n });\n } else {\n out += body;\n }\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer | _TextRenderer = this.renderer): string {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks {\n options: MarkedOptions;\n block?: boolean;\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: string) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n\n constructor(...args: MarkedExtension[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension[]) {\n const extensions: MarkedOptions['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions & { async: true }): Promise<string>;\n (src: string, options: MarkedOptions & { async: false }): string;\n (src: string, options?: MarkedOptions | null): string | Promise<string>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html) as string;\n }\n return html;\n } catch (e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\nmarked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "/**\n * Adaptive FAQ - Runtime Module\n *\n * Runtime manifest for the FAQ accordion adaptive.\n * Provides action executors and widget registration.\n */\nimport { executorDefinitions } from './executors';\nimport { FAQMountableWidget } from './FAQWidget';\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n/**\n * Runtime manifest for adaptive-faq.\n *\n * Provides:\n * - FAQ action executors (scroll_to, toggle_item, update)\n * - Widget-based accordion (compositional faq:question actions)\n */\nexport const runtime = {\n id: 'adaptive-faq',\n version: '2.0.0',\n name: 'FAQ Accordion',\n description: 'Collapsible Q&A accordion with actions, rich content, feedback, and personalization',\n /**\n * Action executors for programmatic FAQ interaction.\n */\n executors: executorDefinitions,\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-faq:accordion',\n component: FAQMountableWidget,\n metadata: {\n name: 'FAQ Accordion',\n description: 'Collapsible Q&A accordion with search, categories, and feedback',\n icon: '\u2753',\n subtitle: 'Curated just for you.',\n },\n },\n ],\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes faq:question_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props) {\n const actions = (props.actions ?? []);\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `faq:${a.config.id}`,\n strategy: a.triggerWhen,\n eventName: 'faq:question_revealed',\n eventProps: {\n questionId: a.config.id,\n question: a.config.question,\n title: a.notify.title,\n body: a.notify.body,\n icon: a.notify.icon,\n },\n }));\n },\n};\nexport default runtime;\n", "/**\n * Adaptive Gamification - Runtime Module\n *\n * Gamification actions: awardBadge, addPoints.\n * Provides gamification features like badges, points, and rewards.\n */\n// ============================================================================\n// Executors\n// ============================================================================\n/**\n * Execute an awardBadge action\n *\n * Note: This executor uses publishEvent to track badge awards.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAwardBadge = async (action, context) => {\n const { badgeId } = action;\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.badge_awarded', {\n badgeId,\n awardedAt: Date.now(),\n });\n return {\n cleanup: () => {\n // Badge awards are permanent, no cleanup needed\n },\n };\n};\n/**\n * Execute an addPoints action\n *\n * Note: This executor uses publishEvent to track points.\n * State management is handled at the app level via AppContext,\n * not at the action executor level.\n */\nexport const executeAddPoints = async (action, context) => {\n const { points, reason } = action;\n // Emit telemetry event (state management handled at app level)\n context.publishEvent('gamification.points_added', {\n points,\n reason,\n timestamp: Date.now(),\n });\n return {\n cleanup: () => {\n // Points are permanent, no cleanup needed\n },\n };\n};\n// ============================================================================\n// Event Handlers\n// ============================================================================\n/**\n * Event handler for auto-awarding badges based on triggers.\n */\nexport const badgeTriggerHandler = {\n names: ['page_view', 'button_click'],\n handler: (_event, _ctx) => {\n // Auto-award badges based on event triggers\n // This would check badge trigger conditions in the config\n console.log('[Gamification] Event received for badge trigger check');\n },\n};\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'gamification:awardBadge', executor: executeAwardBadge },\n { kind: 'gamification:addPoints', executor: executeAddPoints },\n];\n/**\n * Event handlers provided by this app.\n */\nexport const eventHandlers = [badgeTriggerHandler];\n/**\n * App runtime manifest.\n */\nexport const runtime = {\n id: 'adaptive-gamification',\n version: '1.0.0',\n name: 'Gamification',\n description: 'Badges, rewards, points, and engagement mechanics',\n executors,\n eventHandlers,\n};\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Adaptive Nav - NavWidget Component\n *\n * React component that renders a collapsible navigation tips accordion\n * with per-item conditional visibility based on triggerWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (nav:tip) serve as configuration data for the parent widget.\n */\nimport { purple, slateGrey } from '@syntro/design-system/tokens';\nimport React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\n// ============================================================================\n// Emoji \u2192 Lucide SVG inline mapping (no lucide-react dependency)\n// ============================================================================\nconst EMOJI_SVG_MAP = {\n '\uD83D\uDCB5': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/><path d=\"M6 12h.01M18 12h.01\"/></svg>',\n '\uD83C\uDFDB\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"3\" x2=\"21\" y1=\"22\" y2=\"22\"/><line x1=\"6\" x2=\"6\" y1=\"18\" y2=\"11\"/><line x1=\"10\" x2=\"10\" y1=\"18\" y2=\"11\"/><line x1=\"14\" x2=\"14\" y1=\"18\" y2=\"11\"/><line x1=\"18\" x2=\"18\" y1=\"18\" y2=\"11\"/><polygon points=\"12 2 20 7 4 7\"/></svg>',\n '\u23ED\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 4 15 12 5 20 5 4\"/><line x1=\"19\" x2=\"19\" y1=\"5\" y2=\"19\"/></svg>',\n '\u27A1\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/></svg>',\n '\uD83D\uDCA1': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg>',\n '\uD83D\uDCB0': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/><path d=\"M6 12h.01M18 12h.01\"/></svg>',\n '\uD83D\uDCCB': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"/><path d=\"M12 11h4\"/><path d=\"M12 16h4\"/><path d=\"M8 11h.01\"/><path d=\"M8 16h.01\"/></svg>',\n '\u2705': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/><path d=\"m9 11 3 3L22 4\"/></svg>',\n '\u26A0\uFE0F': '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>',\n};\nfunction renderIcon(emoji) {\n return EMOJI_SVG_MAP[emoji] ?? escapeHtml(emoji);\n}\n// ============================================================================\n// Sanitization\n// ============================================================================\nfunction escapeHtml(str) {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n// ============================================================================\n// Styles\n// ============================================================================\nconst baseStyles = {\n container: {\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n accordion: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n },\n item: {\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.2s ease',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: 500,\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n },\n chevron: {\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n marginLeft: 'auto',\n flexShrink: 0,\n color: 'var(--sc-content-chevron-color, currentColor)',\n },\n icon: {\n fontSize: '16px',\n flexShrink: 0,\n },\n body: {\n overflow: 'hidden',\n transition: 'max-height 0.25s ease, padding-bottom 0.25s ease',\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n },\n description: {\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: '1.5',\n margin: 0,\n },\n linkButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '10px',\n padding: '6px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n border: 'none',\n transition: 'background-color 0.15s ease',\n },\n categoryHeader: {\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n },\n emptyState: {\n fontSize: '13px',\n padding: '16px',\n textAlign: 'center',\n },\n};\nconst themeStyles = {\n light: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n },\n header: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n headerHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n body: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n linkButton: {\n backgroundColor: 'var(--sc-color-primary, #6366f1)',\n color: '#ffffff',\n },\n categoryHeader: {\n color: slateGrey[7],\n },\n emptyState: {\n color: slateGrey[8],\n },\n },\n dark: {\n container: {\n backgroundColor: 'transparent',\n color: 'inherit',\n },\n item: {\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n },\n header: {\n backgroundColor: 'transparent',\n color: 'var(--sc-content-text-color)',\n },\n headerHover: {\n backgroundColor: 'var(--sc-content-background-hover)',\n },\n body: {\n color: 'var(--sc-content-text-secondary-color)',\n },\n linkButton: {\n backgroundColor: 'var(--sc-color-primary, #6366f1)',\n color: '#ffffff',\n },\n categoryHeader: {\n color: slateGrey[8],\n },\n emptyState: {\n color: slateGrey[7],\n },\n },\n};\n// ============================================================================\n// Helpers\n// ============================================================================\n/** Check if any of the given routes match the current page pathname */\nfunction routeMatchesCurrent(routes) {\n if (typeof window === 'undefined')\n return false;\n const current = window.location.pathname;\n return routes.some((route) => {\n // Strip query/hash from route if present\n const routePath = route.split('?')[0].split('#')[0];\n // Exact match or glob pattern (** suffix)\n if (routePath.endsWith('/**')) {\n return current.startsWith(routePath.slice(0, -3));\n }\n return current === routePath;\n });\n}\n/** Apply a brief pulse animation to an element, then remove it */\nfunction pulseElement(el) {\n const keyframes = [\n { boxShadow: '0 0 0 0 rgba(13, 148, 136, 0.5)' },\n { boxShadow: '0 0 0 8px rgba(13, 148, 136, 0)' },\n ];\n el.animate(keyframes, { duration: 600, iterations: 3, easing: 'ease-out' });\n}\nfunction NavTipItem({ item, isExpanded, isLast, onToggle, onNavigate, onFocusAnchor, theme, }) {\n const [isHovered, setIsHovered] = useState(false);\n const colors = themeStyles[theme];\n const { title, description, href, icon, external, anchor } = item.config;\n const itemStyle = {\n ...baseStyles.item,\n ...colors.item,\n ...(isExpanded ? colors.itemExpanded : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n };\n const headerStyle = {\n ...baseStyles.header,\n ...colors.header,\n ...(isHovered ? colors.headerHover : {}),\n };\n const chevronStyle = {\n ...baseStyles.chevron,\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n const bodyStyle = {\n ...baseStyles.body,\n ...colors.body,\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n };\n // Determine the effective navigation target from anchor or legacy href\n const effectiveHref = anchor\n ? Array.isArray(anchor.route)\n ? anchor.route[0]\n : anchor.route\n : href;\n // Same-page check: anchor exists, selector is meaningful, and route matches current page\n const isSamePage = anchor\n ? routeMatchesCurrent(Array.isArray(anchor.route) ? anchor.route : [anchor.route])\n : effectiveHref\n ? routeMatchesCurrent([effectiveHref])\n : false;\n const hasSelector = anchor?.selector && anchor.selector !== '*';\n const isFocusAction = isSamePage && hasSelector;\n const hasAction = !!effectiveHref || isFocusAction;\n const handleLinkClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (isFocusAction && anchor) {\n onFocusAnchor(anchor);\n }\n else if (effectiveHref) {\n onNavigate(effectiveHref, external ?? false);\n }\n };\n // CTA label\n const ctaLabel = isFocusAction ? `Focus \\u2192` : external ? `Go \\u2197` : `Go \\u2192`;\n return (_jsxs(\"div\", { style: itemStyle, \"data-nav-tip-id\": item.config.id, children: [_jsxs(\"button\", { type: \"button\", style: headerStyle, onClick: onToggle, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), \"aria-expanded\": isExpanded, children: [icon && (_jsx(\"span\", { style: baseStyles.icon, dangerouslySetInnerHTML: { __html: renderIcon(icon) } })), _jsx(\"span\", { children: title }), _jsx(\"span\", { style: chevronStyle, children: '\\u203A' })] }), _jsxs(\"div\", { style: bodyStyle, \"aria-hidden\": !isExpanded, children: [_jsx(\"p\", { style: baseStyles.description, children: description }), hasAction && (_jsx(\"a\", { href: effectiveHref || '#', onClick: handleLinkClick, style: { ...baseStyles.linkButton, ...colors.linkButton }, target: external ? '_blank' : undefined, rel: external ? 'noopener noreferrer' : undefined, children: ctaLabel }))] })] }));\n}\n// ============================================================================\n// NavWidget Component\n// ============================================================================\n/**\n * NavWidget - Renders a collapsible navigation tips accordion.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (NavWidget) receives `config.actions` array\n * - Each action has optional `triggerWhen` for per-item visibility\n * - Parent evaluates triggerWhen and filters visible tips\n * - Parent manages expand state and re-rendering on context changes\n */\nexport function NavWidget({ config, runtime, instanceId }) {\n // Force re-render when context/accumulator changes.\n const [renderTick, forceUpdate] = useReducer((x) => x + 1, 0);\n // Track expanded tip IDs\n const [expandedIds, setExpandedIds] = useState(new Set());\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n // Subscribe to accumulator changes for event_count-based triggerWhen\n useEffect(() => {\n if (!runtime.accumulator?.subscribe)\n return;\n return runtime.accumulator.subscribe(() => {\n forceUpdate();\n });\n }, [runtime.accumulator]);\n // Filter visible tips based on per-item triggerWhen\n // biome-ignore lint/correctness/useExhaustiveDependencies: renderTick is intentionally included to force re-evaluation when the runtime's mutable context changes (subscribed above via forceUpdate)\n const visibleTips = useMemo(() => config.actions.filter((tip) => {\n if (!tip.triggerWhen)\n return true;\n try {\n const result = runtime.evaluateSync(tip.triggerWhen);\n return result.value;\n }\n catch {\n // If strategy evaluation fails, hide the tip (fail-closed)\n return false;\n }\n }), [config.actions, runtime, renderTick]);\n // Group by category\n const categoryGroups = useMemo(() => {\n const groups = new Map();\n for (const tip of visibleTips) {\n const cat = tip.config.category;\n if (!groups.has(cat)) {\n groups.set(cat, []);\n }\n groups.get(cat).push(tip);\n }\n return groups;\n }, [visibleTips]);\n // Check if any items have categories\n const hasCategories = useMemo(() => visibleTips.some((t) => t.config.category), [visibleTips]);\n // Resolve theme (auto \u2192 detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme && config.theme !== 'auto')\n return config.theme;\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n // Handle tip toggle\n const handleToggle = useCallback((id) => {\n setExpandedIds((prev) => {\n const wasExpanded = prev.has(id);\n let next;\n if (config.expandBehavior === 'single') {\n // In single mode, emit collapse events for any previously-expanded tips\n for (const prevId of prev) {\n if (prevId !== id) {\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: prevId,\n expanded: false,\n timestamp: Date.now(),\n });\n }\n }\n next = wasExpanded ? new Set() : new Set([id]);\n }\n else {\n next = new Set(prev);\n if (wasExpanded) {\n next.delete(id);\n }\n else {\n next.add(id);\n }\n }\n // Emit event for the clicked tip using fresh state from the updater\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: id,\n expanded: !wasExpanded,\n timestamp: Date.now(),\n });\n return next;\n });\n }, [config.expandBehavior, runtime.events, instanceId]);\n // Handle navigation with event publishing\n const handleNavigate = useCallback((href, external) => {\n // Reject dangerous URIs to prevent XSS\n const normalizedHref = href.trim().toLowerCase();\n if (normalizedHref.startsWith('javascript:') || normalizedHref.startsWith('data:')) {\n return;\n }\n runtime.events.publish('nav:tip_clicked', {\n instanceId,\n href,\n external,\n timestamp: Date.now(),\n });\n if (external) {\n window.open(href, '_blank', 'noopener,noreferrer');\n }\n else {\n // SPA navigation: pushState updates the URL, then popstate tells the\n // host app's router (e.g. React Router) to render the new page.\n // Cleanup functions in revertAll() are resilient to detached DOM nodes,\n // so no timing hack is needed between pushState and popstate.\n const url = new URL(href, window.location.origin);\n url.search = window.location.search;\n window.history.pushState(null, '', url.toString());\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n }, [runtime.events, instanceId]);\n // Handle same-page anchor focus: scroll + pulse + focus\n const handleFocusAnchor = useCallback((anchor) => {\n const el = document.querySelector(anchor.selector);\n if (!(el instanceof HTMLElement))\n return;\n runtime.events.publish('nav:tip_focused', {\n instanceId,\n selector: anchor.selector,\n route: anchor.route,\n timestamp: Date.now(),\n });\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n pulseElement(el);\n // Focus after scroll completes\n setTimeout(() => el.focus(), 400);\n }, [runtime.events, instanceId]);\n // Compute container styles\n const containerStyle = {\n ...baseStyles.container,\n ...themeStyles[resolvedTheme].container,\n };\n const categoryHeaderStyle = {\n ...baseStyles.categoryHeader,\n ...themeStyles[resolvedTheme].categoryHeader,\n };\n const emptyStateStyle = {\n ...baseStyles.emptyState,\n ...themeStyles[resolvedTheme].emptyState,\n };\n // Render a list of nav tip items\n const renderItems = (items) => items.map((tip, index) => (_jsx(NavTipItem, { item: tip, isExpanded: expandedIds.has(tip.config.id), isLast: index === items.length - 1, onToggle: () => handleToggle(tip.config.id), onNavigate: handleNavigate, onFocusAnchor: handleFocusAnchor, theme: resolvedTheme }, tip.config.id)));\n // Empty state\n if (visibleTips.length === 0) {\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-nav\", children: _jsx(\"div\", { style: emptyStateStyle, children: \"You're all set for now! We'll share helpful tips here when they're relevant to what you're doing.\" }) }));\n }\n return (_jsx(\"div\", { style: containerStyle, \"data-adaptive-id\": instanceId, \"data-adaptive-type\": \"adaptive-nav\", children: _jsx(\"div\", { style: baseStyles.accordion, children: hasCategories\n ? Array.from(categoryGroups.entries()).map(([category, items]) => (_jsxs(React.Fragment, { children: [category && (_jsx(\"div\", { style: categoryHeaderStyle, \"data-category-header\": category, children: category })), renderItems(items)] }, category ?? '__ungrouped')))\n : renderItems(visibleTips) }) }));\n}\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const NavMountableWidget = {\n mount(container, config) {\n const { runtime, instanceId = 'nav-widget', ...navConfig } = config || {\n expandBehavior: 'single',\n theme: 'auto',\n actions: [],\n };\n // React rendering when runtime + ReactDOM are available\n if (runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(React.createElement(NavWidget, {\n config: navConfig,\n runtime: runtime,\n instanceId,\n }));\n return () => {\n root.unmount();\n };\n }\n // HTML fallback for non-React environments\n const tips = navConfig.actions || [];\n container.innerHTML = `\n <div style=\"font-family: system-ui; max-width: 100%;\">\n ${tips\n .map((tip) => `\n <div style=\"margin-bottom: 4px; padding: 12px 16px; background: ${slateGrey[12]}; border-radius: 8px;\">\n ${tip.config.icon ? `<span>${renderIcon(tip.config.icon)}</span> ` : ''}<strong>${escapeHtml(tip.config.title)}</strong>\n <p style=\"margin-top: 8px; color: ${slateGrey[6]}; font-size: 13px;\">${escapeHtml(tip.config.description)}</p>\n ${tip.config.href ? `<a href=\"${escapeHtml(tip.config.href)}\" style=\"color: ${purple[2]}; font-size: 13px;\">Go →</a>` : ''}\n </div>\n `)\n .join('')}\n </div>\n `;\n return () => {\n container.innerHTML = '';\n };\n },\n};\nexport default NavWidget;\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation tips accordion adaptive.\n * Includes widget-based nav tips and navigation action executors\n * (scrollTo, navigate) previously in adaptive-navigation.\n */\nimport { NavMountableWidget } from './NavWidget';\n// ============================================================================\n// Navigation Action Executors (merged from adaptive-navigation)\n// ============================================================================\n/**\n * Execute a scrollTo action\n */\nexport const executeScrollTo = async (action, context) => {\n const anchorEl = context.resolveAnchor(action.anchorId);\n if (!anchorEl) {\n console.error(`[adaptive-nav] Anchor not found for scrollTo, skipping: ${action.anchorId.selector}`);\n return { cleanup: () => { } };\n }\n // Scroll to element\n anchorEl.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n block: action.block ?? 'center',\n inline: action.inline ?? 'nearest',\n });\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:scrollTo',\n anchorId: action.anchorId,\n behavior: action.behavior ?? 'smooth',\n });\n return {\n cleanup: () => {\n // Optionally restore scroll position on revert\n },\n };\n};\n/**\n * Check if a URL is same-origin as the current page.\n * Relative URLs (e.g. \"/dashboard\") are always same-origin.\n */\nfunction isSameOrigin(url) {\n try {\n const parsed = new URL(url, window.location.origin);\n return parsed.origin === window.location.origin;\n }\n catch {\n // If URL parsing fails, fall back to full navigation\n return false;\n }\n}\n/**\n * Execute a navigate action\n */\nexport const executeNavigate = async (action, context) => {\n // Validate URL to prevent javascript: URLs\n const url = action.url.trim();\n if (url.toLowerCase().startsWith('javascript:')) {\n throw new Error('javascript: URLs are not allowed');\n }\n const target = action.target ?? '_self';\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:navigate',\n url: action.url,\n target,\n });\n if (target === '_blank') {\n // Open in new tab\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n else if (!action.forceFullNavigation && isSameOrigin(url)) {\n // SPA-aware: use pushState for same-origin URLs to avoid full page reload\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n else {\n // Full navigation for cross-origin URLs or when explicitly requested\n window.location.href = url;\n }\n return {\n cleanup: () => {\n // Navigation cannot be reverted\n },\n };\n};\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'navigation:scrollTo', executor: executeScrollTo },\n { kind: 'navigation:navigate', executor: executeNavigate },\n];\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Provides:\n * - Navigation action executors (scrollTo, navigate)\n * - Widget-based nav tips accordion (compositional nav:tip actions)\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '2.0.0',\n name: 'Navigation Tips',\n description: 'Navigation actions and accordion-based tips with per-item conditional visibility',\n /**\n * Navigation action executors (scrollTo, navigate).\n */\n executors,\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:tips',\n component: NavMountableWidget,\n metadata: {\n name: 'Navigation Tips',\n description: 'Accordion of contextual navigation tips with per-item visibility',\n icon: '\\u{1F9ED}',\n },\n },\n ],\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes nav:tip_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props) {\n const actions = (props.actions ?? []);\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `nav:${a.config.id}`,\n strategy: a.triggerWhen,\n eventName: 'nav:tip_revealed',\n eventProps: {\n tipId: a.config.id,\n title: a.notify.title,\n body: a.notify.body,\n icon: a.notify.icon,\n },\n }));\n },\n};\nexport default runtime;\n", "// AUTO-GENERATED \u2014 do not edit. Run `npm run generate:builtin-modules` to update.\nimport { runtime as r0 } from '@syntrologie/adapt-chatbot/runtime';\nimport { runtime as r1 } from '@syntrologie/adapt-content/runtime';\nimport { runtime as r2 } from '@syntrologie/adapt-faq/runtime';\nimport { runtime as r3 } from '@syntrologie/adapt-gamification/runtime';\nimport { runtime as r4 } from '@syntrologie/adapt-nav/runtime';\nimport { runtime as r5 } from '@syntrologie/adapt-overlays/runtime';\n\nconst allRuntimes = [r0, r1, r2, r3, r4, r5];\n\nexport const builtinAdaptiveManifests = allRuntimes.map((r: any) => ({\n id: r.id,\n version: r.version,\n name: r.name,\n description: r.description,\n runtime: {\n actions: (r.executors || []).map(({ kind, executor }: any) => ({ kind, executor })),\n widgets: r.widgets,\n notifyWatchers: r.notifyWatchers,\n events: r.eventHandlers,\n },\n editor: undefined,\n metadata: { isBuiltIn: true },\n}));\n\nexport function registerBuiltinRuntimeModules(\n registry: { has: (id: string) => boolean; register: (manifest: any) => void }\n): void {\n let count = 0;\n for (const manifest of builtinAdaptiveManifests) {\n if (!registry.has(manifest.id)) {\n registry.register(manifest);\n count++;\n }\n }\n console.log('[Syntro Runtime] Registered', count, 'built-in runtime modules');\n}\n", "import { useEffect, useMemo, useState } from 'react';\n\nimport type { TelemetryClient } from '../telemetry/types';\nimport type { TileConfig } from '../types';\n\nimport { TileCard } from './TileCard';\n\nexport interface TileWheelProps {\n tiles: TileConfig[];\n intervalMs?: number;\n telemetry?: TelemetryClient;\n}\n\nexport function TileWheel({ tiles, intervalMs = 7000, telemetry }: TileWheelProps) {\n const [index, setIndex] = useState(0);\n const ordered = useMemo(\n () => [...tiles].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),\n [tiles]\n );\n\n useEffect(() => {\n telemetry?.trackCanvasOpened('wheel');\n }, [telemetry]);\n\n useEffect(() => {\n if (ordered.length <= 1) return;\n const id = setInterval(() => {\n setIndex((prev) => (prev + 1) % ordered.length);\n }, intervalMs);\n return () => clearInterval(id);\n }, [ordered, intervalMs]);\n\n useEffect(() => {\n const current = ordered[index];\n if (current) {\n telemetry?.trackRectangleViewed(current.id, 'wheel');\n }\n }, [index, ordered, telemetry]);\n\n if (!ordered.length) return null;\n\n return (\n <div\n style={{\n position: 'relative',\n overflow: 'hidden',\n borderRadius: '1.5rem',\n border: 'var(--sc-tile-border)',\n background: 'var(--sc-tile-background)',\n padding: '1.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n data-shadow-canvas-id=\"wheel\"\n >\n <div\n style={{\n display: 'flex',\n transition: 'transform 700ms ease-out',\n transform: `translateX(-${index * 100}%)`,\n width: `${ordered.length * 100}%`,\n }}\n >\n {ordered.map((tile) => (\n <div key={tile.id} style={{ width: '100%', flexShrink: 0, padding: '0 1rem' }}>\n <TileCard config={tile} surface=\"wheel\" telemetry={telemetry} />\n </div>\n ))}\n </div>\n <div style={{ marginTop: '1rem', display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {ordered.map((tile, idx) => (\n <button\n type=\"button\"\n key={tile.id}\n style={{\n height: '0.5rem',\n width: '1.5rem',\n borderRadius: '9999px',\n background: idx === index ? 'var(--sc-color-primary)' : 'var(--sc-tile-text-color)',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n }}\n onClick={() => setIndex(idx)}\n />\n ))}\n </div>\n </div>\n );\n}\n", "/**\n * Config validation and migration for SDK versioning.\n *\n * This module handles:\n * - Validating configs against the current SDK schema version\n * - Migrating old config formats to current version\n * - Providing warnings for version mismatches\n */\n\nimport type { CanvasConfigResponse } from './types';\nimport { SDK_SCHEMA_VERSION } from './types';\n\n/**\n * Result of config validation.\n */\nexport interface ConfigValidationResult {\n /** Whether the config is valid and can be used */\n valid: boolean;\n\n /** Warning messages (non-fatal issues) */\n warnings: string[];\n\n /** Error messages (fatal issues that prevent usage) */\n errors: string[];\n\n /** Migrated config if old version was detected */\n migratedConfig?: CanvasConfigResponse;\n}\n\n/**\n * Parse a schema version string into major and minor numbers.\n */\nexport function parseVersion(version: string): { major: number; minor: number } {\n const parts = version.split('.');\n return {\n major: parseInt(parts[0] || '0', 10),\n minor: parseInt(parts[1] || '0', 10),\n };\n}\n\n/**\n * Validate and normalize a config, handling version mismatches.\n *\n * This function:\n * 1. Checks if config is valid object\n * 2. Compares config schema version with SDK version\n * 3. Migrates old configs to current version\n * 4. Returns validation result with warnings/errors\n *\n * @param config - Raw config from backend or fetcher\n * @returns Validation result with any migrations applied\n */\nexport function validateConfig(config: unknown): ConfigValidationResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Type check\n if (!config || typeof config !== 'object') {\n return {\n valid: false,\n errors: ['Config must be an object'],\n warnings,\n };\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n\n // Check required fields\n if (!typedConfig.tiles) {\n errors.push('Config missing required field: tiles');\n }\n if (!typedConfig.actions) {\n errors.push('Config missing required field: actions');\n }\n if (!typedConfig.fetchedAt) {\n errors.push('Config missing required field: fetchedAt');\n }\n\n if (errors.length > 0) {\n return { valid: false, errors, warnings };\n }\n\n // Check schema version\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n // Future schema version (newer backend)\n if (configVer.major > sdkVer.major) {\n warnings.push(\n `Config schema v${configVersion} is newer than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Some features may not work. Update SDK to latest version.`\n );\n }\n\n // Old schema version (older backend or missing version)\n if (configVer.major < sdkVer.major || !typedConfig.schemaVersion) {\n warnings.push(\n `Config schema v${configVersion} is older than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Migrating config to current version.`\n );\n return {\n valid: true,\n warnings,\n errors,\n migratedConfig: migrateConfig(typedConfig as CanvasConfigResponse, configVersion),\n };\n }\n\n // Compatible version (same major version)\n return {\n valid: true,\n warnings,\n errors,\n };\n}\n\n/**\n * Migrate old config format to current SDK version.\n *\n * This function applies all necessary transformations to bring\n * an old config up to the current schema version.\n *\n * @param config - Config to migrate\n * @param fromVersion - Version to migrate from\n * @returns Migrated config at current SDK version\n */\nfunction migrateConfig(config: CanvasConfigResponse, fromVersion: string): CanvasConfigResponse {\n let migrated = { ...config };\n\n const fromVer = parseVersion(fromVersion);\n\n // v1.x -> v2.x migration\n if (fromVer.major === 1) {\n migrated = migrateV1ToV2(migrated);\n }\n\n // Update schema version to current\n migrated.schemaVersion = SDK_SCHEMA_VERSION;\n\n return migrated;\n}\n\n/**\n * Migrate v1.x config to v2.0 format.\n *\n * Changes in v2.0:\n * - Introduced ActivationConfig to replace experiment field\n * - Unified ActionStep format\n * - Added schemaVersion field\n */\nfunction migrateV1ToV2(config: any): CanvasConfigResponse {\n const migrated: CanvasConfigResponse = {\n schemaVersion: '2.0',\n tiles: [],\n actions: config.actions || [],\n fetchedAt: config.fetchedAt || new Date().toISOString(),\n };\n\n // Migrate tiles\n if (config.tiles && Array.isArray(config.tiles)) {\n migrated.tiles = config.tiles.map((tile: any) => {\n const migratedTile = { ...tile };\n\n // Remove deprecated experiment field (strategy no longer supported on tiles)\n if (tile.experiment) {\n delete migratedTile.experiment;\n }\n\n return migratedTile;\n });\n }\n\n // Copy optional fields\n if (config.configVersion) migrated.configVersion = config.configVersion;\n if (config.canvasTitle) migrated.canvasTitle = config.canvasTitle;\n if (config.theme) migrated.theme = config.theme;\n if (config.launcher) migrated.launcher = config.launcher;\n return migrated;\n}\n\n/**\n * Check if a config needs migration.\n *\n * @param config - Config to check\n * @returns True if migration is needed\n */\nexport function needsMigration(config: unknown): boolean {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n return configVer.major < sdkVer.major || !typedConfig.schemaVersion;\n}\n", "import { z } from 'zod';\n\nexport const SelectorZ = z.union([\n z.object({ type: z.literal('data'), key: z.string(), value: z.string().optional() }),\n z.object({ type: z.literal('css'), value: z.string() }),\n z.object({ type: z.literal('aria'), role: z.string().optional(), label: z.string().optional() }),\n z.object({ type: z.literal('shadow-css'), value: z.string() }),\n z.object({ type: z.literal('ref'), el: z.any() }), // runtime-only\n]);\n\nexport const TooltipStepZ = z.object({\n kind: z.literal('tooltip'),\n id: z.string(),\n anchor: SelectorZ,\n content: z.object({ title: z.string().optional(), body: z.string() }),\n placement: z.enum(['top', 'bottom', 'left', 'right', 'auto']).optional(),\n offsetPx: z.number().optional(),\n blocking: z.boolean().optional(),\n trigger: z.enum(['immediate', 'hover', 'click']).optional(),\n dismiss: z\n .object({\n onEsc: z.boolean().optional(),\n closeButton: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const HighlightStepZ = z.object({\n kind: z.literal('highlight'),\n id: z.string(),\n anchor: SelectorZ,\n copy: z.string().optional(),\n ring: z.object({ paddingPx: z.number().optional(), radiusPx: z.number().optional() }).optional(),\n scrim: z.object({ opacity: z.number().optional() }).optional(),\n ringColor: z.string().optional(),\n blocking: z.boolean().optional(),\n dismiss: z\n .object({\n onClickOutside: z.boolean().optional(),\n onEsc: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const CanvasRecipeZ = z.object({\n id: z.string(),\n version: z.number(),\n routes: z.array(z.string()).optional(),\n steps: z.array(z.union([TooltipStepZ, HighlightStepZ])),\n});\n\nexport function validateRecipe(json: unknown) {\n return CanvasRecipeZ.parse(json);\n}\n", "import { type CanvasFetcherOptions, resolveConfigUri } from '../configFetcher';\n\nimport { CanvasRecipeZ } from './schema';\nimport type { CanvasRecipe } from './types';\n\nexport type OverlayRecipeFetcher = () => Promise<CanvasRecipe>;\n\nexport const createOverlayRecipeFetcher =\n ({\n configUri,\n experiments,\n featureKey = 'smart-canvas-overlay-uri',\n credentials = 'include',\n }: CanvasFetcherOptions = {}): OverlayRecipeFetcher =>\n async () => {\n const uri = resolveConfigUri({ configUri, experiments, featureKey });\n if (!uri) {\n throw new Error('SmartCanvas overlays: recipe URI missing (env + feature unset).');\n }\n const response = await fetch(uri, { credentials });\n if (!response.ok) {\n throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);\n }\n const json = await response.json();\n return CanvasRecipeZ.parse(json) as CanvasRecipe;\n };\n", "import { type ReactNode, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { SmartCanvasElement } from './SmartCanvasElement';\n\nexport interface SmartCanvasPortalProps {\n element: SmartCanvasElement | null;\n children: ReactNode;\n}\n\nexport function SmartCanvasPortal({ element, children }: SmartCanvasPortalProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n if (!element) {\n setMountNode(null);\n return;\n }\n setMountNode(element.getMountNode());\n return () => setMountNode(null);\n }, [element]);\n\n if (!mountNode) return null;\n return createPortal(children, mountNode);\n}\n", "/**\n * Zod schemas for RuntimeContext validation.\n */\nimport { z } from 'zod';\n\nexport const PageContextZ = z.object({\n url: z.string(),\n routeId: z.string().optional(),\n title: z.string().optional(),\n locale: z.string().optional(),\n});\n\nexport const PageHistoryEntryZ = z.object({\n url: z.string(),\n ts: z.number(),\n});\n\nexport const SessionContextZ = z.object({\n sessionId: z.string(),\n startTs: z.number(),\n pageHistory: z.array(PageHistoryEntryZ).optional(),\n});\n\nexport const ViewportContextZ = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport const BoundingBoxZ = z.object({\n x: z.number(),\n y: z.number(),\n w: z.number(),\n h: z.number(),\n});\n\nexport const AnchorStateZ = z.object({\n anchorId: z.string(),\n present: z.boolean(),\n visible: z.boolean().optional(),\n boundingBox: BoundingBoxZ.optional(),\n});\n\nexport const AugmentationZ = z.record(\n z.string(),\n z.union([z.number(), z.string(), z.boolean(), z.undefined()])\n);\n\nexport const RuntimeContextZ = z.object({\n page: PageContextZ,\n session: SessionContextZ,\n viewport: ViewportContextZ,\n anchors: z.array(AnchorStateZ).optional(),\n augmented: AugmentationZ.optional(),\n});\n\n/**\n * Validate a RuntimeContext object.\n */\nexport function validateRuntimeContext(data: unknown) {\n return RuntimeContextZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type RuntimeContextSchema = z.infer<typeof RuntimeContextZ>;\nexport type PageContextSchema = z.infer<typeof PageContextZ>;\nexport type SessionContextSchema = z.infer<typeof SessionContextZ>;\nexport type ViewportContextSchema = z.infer<typeof ViewportContextZ>;\nexport type AnchorStateSchema = z.infer<typeof AnchorStateZ>;\n", "/**\n * PostHog Event Normalizer \u2014 re-exported from @syntrologie/event-processor.\n *\n * The canonical implementation now lives in the event-processor package\n * so it can be shared between runtime-sdk (browser) and the data pipeline.\n */\nexport {\n createPostHogNormalizer,\n normalizePostHogEvent,\n shouldNormalizeEvent,\n} from '@syntrologie/event-processor/normalizers/posthog';\n", "/**\n * Zod schemas for event validation.\n */\nimport { z } from 'zod';\n\nexport const EventSourceZ = z.enum(['posthog', 'canvas', 'derived']);\n\nexport const NormalizedEventZ = z.object({\n ts: z.number(),\n name: z.string(),\n source: EventSourceZ,\n props: z.record(z.string(), z.unknown()).optional(),\n schemaVersion: z.string(),\n});\n\nexport const EventFilterZ = z.object({\n names: z.array(z.string()).optional(),\n patterns: z.array(z.string()).optional(),\n sources: z.array(EventSourceZ).optional(),\n});\n\n/**\n * Validate a NormalizedEvent object.\n */\nexport function validateNormalizedEvent(data: unknown) {\n return NormalizedEventZ.safeParse(data);\n}\n\n/**\n * Validate an EventFilter object.\n */\nexport function validateEventFilter(data: unknown) {\n return EventFilterZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type NormalizedEventSchema = z.infer<typeof NormalizedEventZ>;\nexport type EventFilterSchema = z.infer<typeof EventFilterZ>;\n", "/**\n * Zod schemas for state validation.\n */\nimport { z } from 'zod';\n\nexport const StoredValueZ = z.object({\n value: z.unknown(),\n expiresAt: z.number().optional(),\n});\n\nexport const FrequencyEntryZ = z.object({\n count: z.number(),\n resetAt: z.number().optional(),\n});\n\n/**\n * Validate a StoredValue object.\n */\nexport function validateStoredValue(data: unknown) {\n return StoredValueZ.safeParse(data);\n}\n\n/**\n * Validate a FrequencyEntry object.\n */\nexport function validateFrequencyEntry(data: unknown) {\n return FrequencyEntryZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type StoredValueSchema = z.infer<typeof StoredValueZ>;\nexport type FrequencyEntrySchema = z.infer<typeof FrequencyEntryZ>;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React", "createPortal", "useRef", "options", "runtime", "_a", "runtime", "sendMessage", "useRef", "runtime", "_a", "_jsx", "_jsxs", "escape", "html", "_a", "link", "lexer", "options", "list", "tag", "text", "parser", "tokens", "args", "ret", "walkTokens", "parse", "src", "React", "useCallback", "useEffect", "useState", "createRoot", "marked", "_jsx", "html", "_jsxs", "runtime", "_a", "runtime", "_a", "runtime", "_jsx", "_jsxs", "React", "useCallback", "useEffect", "useMemo", "useReducer", "useState", "createRoot", "_a", "baseStyles", "themeStyles", "_jsxs", "_jsx", "runtime", "_a", "executors", "runtime", "runtime", "useEffect", "useMemo", "useState", "useState", "useMemo", "_a", "useEffect", "useState", "z", "z", "z", "React", "createPortal"]
|
|
7
7
|
}
|