puredocs_v2 1.0.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/LICENSE +46 -0
- package/README.md +164 -0
- package/dist/api/http-client.d.ts +14 -0
- package/dist/api/snippets.d.ts +15 -0
- package/dist/components/app.d.ts +7 -0
- package/dist/components/layout/empty-state-page.d.ts +11 -0
- package/dist/components/layout/page-layout.d.ts +9 -0
- package/dist/components/modals/auth-modal.d.ts +17 -0
- package/dist/components/modals/modal-base.d.ts +15 -0
- package/dist/components/modals/search-modal.d.ts +6 -0
- package/dist/components/nav/route-nav.d.ts +2 -0
- package/dist/components/nav/sidebar.d.ts +13 -0
- package/dist/components/pages/endpoint.d.ts +3 -0
- package/dist/components/pages/overview.d.ts +2 -0
- package/dist/components/pages/tag-page.d.ts +2 -0
- package/dist/components/pages/webhook.d.ts +3 -0
- package/dist/components/shared/connection-settings.d.ts +2 -0
- package/dist/components/shared/copy-button.d.ts +12 -0
- package/dist/components/shared/editor-panel.d.ts +14 -0
- package/dist/components/shared/example-picker.d.ts +20 -0
- package/dist/components/shared/responses.d.ts +27 -0
- package/dist/components/shared/schema-viewer.d.ts +17 -0
- package/dist/components/shared/summary.d.ts +5 -0
- package/dist/components/shared/try-it.d.ts +20 -0
- package/dist/components/ui/badge.d.ts +24 -0
- package/dist/components/ui/breadcrumb.d.ts +12 -0
- package/dist/components/ui/button.d.ts +17 -0
- package/dist/components/ui/card.d.ts +25 -0
- package/dist/components/ui/index.d.ts +20 -0
- package/dist/components/ui/input.d.ts +20 -0
- package/dist/components/ui/lock-icon.d.ts +8 -0
- package/dist/components/ui/section.d.ts +8 -0
- package/dist/components/ui/select.d.ts +20 -0
- package/dist/core/auth-storage.d.ts +3 -0
- package/dist/core/effects.d.ts +33 -0
- package/dist/core/parser.d.ts +7 -0
- package/dist/core/persistence.d.ts +12 -0
- package/dist/core/router.d.ts +40 -0
- package/dist/core/search.d.ts +5 -0
- package/dist/core/security.d.ts +16 -0
- package/dist/core/state.d.ts +24 -0
- package/dist/core/theme.d.ts +9 -0
- package/dist/core/types.d.ts +291 -0
- package/dist/core/validation.d.ts +17 -0
- package/dist/helpers/debounce.d.ts +1 -0
- package/dist/helpers/schema-utils.d.ts +2 -0
- package/dist/helpers/text.d.ts +2 -0
- package/dist/helpers/validation-ui.d.ts +4 -0
- package/dist/index.d.ts +34 -0
- package/dist/lib/dom.d.ts +17 -0
- package/dist/lib/highlight.d.ts +8 -0
- package/dist/lib/icons.d.ts +24 -0
- package/dist/puredocs.cjs +49 -0
- package/dist/puredocs.cjs.map +1 -0
- package/dist/puredocs.css +1 -0
- package/dist/puredocs.js +5324 -0
- package/dist/puredocs.js.map +1 -0
- package/dist/puredocs.umd.js +49 -0
- package/dist/puredocs.umd.js.map +1 -0
- package/dist/server.cjs +117 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.js +116 -0
- package/dist/server.js.map +1 -0
- package/dist/services/env.d.ts +7 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puredocs.js","sources":["../src/core/state.ts","../src/core/router.ts","../src/core/security.ts","../node_modules/js-yaml/dist/js-yaml.mjs","../src/core/parser.ts","../src/core/search.ts","../src/core/theme.ts","../src/helpers/text.ts","../src/lib/dom.ts","../src/lib/icons.ts","../src/core/effects.ts","../src/services/env.ts","../src/components/ui/select.ts","../src/components/ui/input.ts","../src/components/ui/button.ts","../src/components/ui/badge.ts","../src/components/ui/card.ts","../src/components/ui/section.ts","../src/components/ui/breadcrumb.ts","../src/components/ui/lock-icon.ts","../src/components/modals/modal-base.ts","../src/components/modals/auth-modal.ts","../src/components/modals/search-modal.ts","../src/components/nav/sidebar.ts","../src/components/shared/summary.ts","../src/components/shared/connection-settings.ts","../src/components/pages/overview.ts","../src/helpers/schema-utils.ts","../src/components/shared/schema-viewer.ts","../src/api/http-client.ts","../src/api/snippets.ts","../src/components/shared/example-picker.ts","../src/lib/highlight.ts","../src/core/validation.ts","../src/helpers/validation-ui.ts","../src/components/shared/editor-panel.ts","../src/components/shared/copy-button.ts","../src/components/shared/try-it.ts","../src/components/shared/responses.ts","../src/components/nav/route-nav.ts","../src/components/pages/endpoint.ts","../src/components/pages/tag-page.ts","../src/components/pages/webhook.ts","../src/components/layout/page-layout.ts","../src/components/layout/empty-state-page.ts","../src/components/app.ts","../src/core/persistence.ts","../src/core/auth-storage.ts","../src/helpers/debounce.ts","../src/index.ts"],"sourcesContent":["import type { PortalState, AuthState, TryItState, RouteInfo } from './types';\n\ntype Listener = (state: PortalState) => void;\ntype PartialUpdate = Partial<PortalState>;\n\n/** Simple reactive state store */\nclass Store {\n private state: PortalState;\n private listeners: Set<Listener> = new Set();\n\n constructor() {\n this.state = this.defaultState();\n }\n\n private defaultState(): PortalState {\n return {\n spec: null,\n loading: true,\n error: null,\n route: { type: 'overview' },\n theme: 'light',\n sidebarOpen: true,\n searchOpen: false,\n activeEnvironment: 'default',\n environments: [{ name: 'default', baseUrl: '' }],\n initialEnvironments: [{ name: 'default', baseUrl: '' }],\n auth: { schemes: {}, activeScheme: '', token: '', locked: false, source: 'manual' },\n tryItState: null,\n };\n }\n\n get(): PortalState {\n return this.state;\n }\n\n set(update: PartialUpdate): void {\n this.state = { ...this.state, ...update };\n this.notify();\n }\n\n setAuth(update: Partial<AuthState>): void {\n this.state = {\n ...this.state,\n auth: { ...this.state.auth, ...update },\n };\n this.notify();\n }\n\n /** Update a specific scheme value and sync token if it's the active scheme */\n setSchemeValue(schemeName: string, value: string): void {\n const schemes = { ...this.state.auth.schemes, [schemeName]: value };\n const activeScheme = schemeName; // selecting a scheme makes it active\n const token = value;\n this.state = {\n ...this.state,\n auth: { ...this.state.auth, schemes, activeScheme, token, source: 'manual' },\n };\n this.notify();\n }\n\n setTryIt(update: Partial<TryItState> | null): void {\n if (update === null) {\n this.state = { ...this.state, tryItState: null };\n } else {\n this.state = {\n ...this.state,\n tryItState: { ...this.state.tryItState!, ...update },\n };\n }\n this.notify();\n }\n\n setRoute(route: RouteInfo): void {\n this.state = { ...this.state, route };\n this.notify();\n }\n\n /** Switch active environment */\n setActiveEnvironment(name: string): void {\n this.state = { ...this.state, activeEnvironment: name };\n this.notify();\n }\n\n subscribe(fn: Listener): () => void {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n\n private notify(): void {\n for (const fn of this.listeners) {\n try {\n fn(this.state);\n } catch (e) {\n console.error('[ApiPortal] Subscriber error:', e);\n }\n }\n }\n\n reset(): void {\n this.state = this.defaultState();\n this.listeners.clear();\n }\n}\n\nexport const store = new Store();\n","import type { RouteInfo } from './types';\nimport { store } from './state';\n\n// ─── Constants ───\n\nconst HTTP_METHODS = new Set([\n 'get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace',\n]);\n\n// ─── Lifecycle ───\n\n/** Initialize the hash-based router */\nexport function initRouter(base = ''): void {\n window.addEventListener('hashchange', handleRouteChange);\n handleRouteChange();\n}\n\n/** Remove all router event listeners */\nexport function destroyRouter(): void {\n window.removeEventListener('hashchange', handleRouteChange);\n}\n\n// ─── Navigation ───\n\n/** Push a new hash path and trigger a route change */\nexport function navigate(path: string): void {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n window.location.hash = normalizedPath;\n}\n\n// ─── URL Building ───\n\n/**\n * Build a human-readable URL from a RouteInfo object.\n *\n * URL patterns:\n * #/ → Overview\n * #/{tag} → Tag page\n * #/{tag}/{method}/{apiPath} → Endpoint\n * #/schemas/{name} → Schema\n * #/webhooks/{name} → Webhook\n * #/guides/{path} → Guide\n *\n * Examples:\n * #/users → \"Users\" tag page\n * #/users/get/users/{id} → GET /users/{id} in \"Users\" tag\n * #/pets/post/pets → POST /pets in \"Pets\" tag\n * #/schemas/UserResponse → Schema \"UserResponse\"\n */\nexport function buildPath(route: RouteInfo): string {\n switch (route.type) {\n case 'overview':\n return '/';\n\n case 'tag':\n return `/${slugifyTag(route.tag || '')}`;\n\n case 'endpoint': {\n const tag = route.tag || 'default';\n const method = (route.method || 'get').toLowerCase();\n const apiPath = route.path || '/';\n // apiPath starts with \"/\" so the result is: /{tagSlug}/{method}{apiPath}\n return `/${slugifyTag(tag)}/${method}${apiPath}`;\n }\n\n case 'schema':\n return route.schemaName ? `/schemas/${encodeURIComponent(route.schemaName)}` : '/schemas';\n\n case 'webhook':\n return route.webhookName ? `/webhooks/${encodeURIComponent(route.webhookName)}` : '/webhooks';\n\n case 'guide':\n return `/guides/${encodeURIComponent(route.guidePath || '')}`;\n\n default:\n return '/';\n }\n}\n\n// ─── URL Parsing ───\n\n/**\n * Parse a raw hash path into a RouteInfo object.\n *\n * Handles URL-encoded segments, normalizes slashes,\n * and strips query strings.\n */\nexport function parsePath(rawPath: string): RouteInfo {\n const normalized = normalizePath(rawPath);\n\n if (normalized === '/' || normalized === '') return { type: 'overview' };\n\n // Split into segments (skip the leading empty segment from \"/\")\n const segments = normalized.slice(1).split('/');\n if (segments.length === 0) return { type: 'overview' };\n\n const first = safeDecode(segments[0]).toLowerCase();\n\n // Reserved prefix: /schemas or /schemas/{name...}\n if (first === 'schemas') {\n if (segments.length >= 2) {\n return { type: 'schema', schemaName: safeDecode(segments.slice(1).join('/')) };\n }\n return { type: 'schema' };\n }\n\n // Reserved prefix: /webhooks or /webhooks/{name...}\n if (first === 'webhooks') {\n if (segments.length >= 2) {\n return { type: 'webhook', webhookName: safeDecode(segments.slice(1).join('/')) };\n }\n return { type: 'webhook' };\n }\n\n // Reserved prefix: /guides/{path...}\n if (first === 'guides' && segments.length >= 2) {\n return {\n type: 'guide',\n guidePath: safeDecode(segments.slice(1).join('/')),\n };\n }\n\n // Single segment → tag page: /{tag}\n if (segments.length === 1) {\n return { type: 'tag', tag: safeDecode(segments[0]) };\n }\n\n // Second segment might be an HTTP method → endpoint: /{tag}/{method}/{path...}\n const second = segments[1].toLowerCase();\n\n if (HTTP_METHODS.has(second)) {\n const tag = safeDecode(segments[0]);\n const method = second;\n // Reconstruct the API path from remaining segments (decode each for browser compat)\n const apiPath = segments.length > 2\n ? '/' + segments.slice(2).map(safeDecode).join('/')\n : '/';\n return { type: 'endpoint', tag, method, path: apiPath };\n }\n\n // Fallback: treat first segment as a tag page\n return { type: 'tag', tag: safeDecode(segments[0]) };\n}\n\n// ─── Tag Slug Utility ───\n\n/**\n * Convert a tag name to a URL-friendly slug.\n *\n * \"User Management\" → \"user-management\"\n * \"Pets\" → \"pets\"\n * \"auth/v2\" → \"auth-v2\"\n */\nexport function slugifyTag(tag: string): string {\n return tag\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n// ─── Private Helpers ───\n\n/** Safely decode a URI component, returning the original on failure */\nfunction safeDecode(segment: string): string {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\n/** Read the current hash, stripping the leading # */\nfunction getCurrentPath(): string {\n const hash = window.location.hash;\n if (!hash || hash === '#' || hash === '#/') return '/';\n // Remove the leading #\n return hash.slice(1);\n}\n\n/** Called on hashchange — parses the hash and updates the store */\nfunction handleRouteChange(): void {\n const path = getCurrentPath();\n const route = parsePath(path);\n store.setRoute(route);\n}\n\nfunction normalizePath(rawPath: string): string {\n const pathOnly = rawPath.split('?')[0] || '/';\n const withLeadingSlash = pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n return withLeadingSlash.replace(/\\/+/g, '/').replace(/\\/+$/, '') || '/';\n}\n","import type {\n OperationSecurityInfo,\n ResolvedSecuritySchemeRequirement,\n SecurityRequirement,\n SecurityScheme,\n} from './types';\n\nexport interface OperationAuthResolved {\n headers: Record<string, string>;\n query: Record<string, string>;\n cookies: Record<string, string>;\n matchedSchemeNames: string[];\n}\n\nexport function normalizeSecurityRequirements(raw: unknown): SecurityRequirement[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) return [];\n const requirements: SecurityRequirement[] = [];\n for (const candidate of raw) {\n if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) continue;\n const requirement: SecurityRequirement = {};\n for (const [schemeName, scopesRaw] of Object.entries(candidate as Record<string, unknown>)) {\n const scopes = Array.isArray(scopesRaw)\n ? scopesRaw.map((scope) => String(scope))\n : [];\n requirement[schemeName] = scopes;\n }\n requirements.push(requirement);\n }\n return requirements;\n}\n\nexport function resolveOperationSecurityInfo(\n requirements: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n explicitlyNoAuth: boolean,\n): OperationSecurityInfo {\n if (!requirements || requirements.length === 0) {\n return { explicitlyNoAuth, requirements: [] };\n }\n\n const resolved: ResolvedSecuritySchemeRequirement[][] = requirements.map((requirement) => (\n Object.entries(requirement).map(([schemeName, scopes]) => ({\n schemeName,\n scopes: Array.isArray(scopes) ? scopes : [],\n scheme: securitySchemes[schemeName],\n }))\n ));\n\n return { explicitlyNoAuth, requirements: resolved };\n}\n\nexport function hasOperationAuth(info: OperationSecurityInfo | undefined): boolean {\n return Boolean(info && !info.explicitlyNoAuth && info.requirements.length > 0);\n}\n\nexport function getSecuritySchemeBadge(scheme: SecurityScheme | undefined): string {\n if (!scheme) return 'Auth';\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') return 'Bearer';\n if (s === 'basic') return 'Basic';\n return 'HTTP';\n }\n if (scheme.type === 'apiKey') return 'API Key';\n if (scheme.type === 'oauth2') return 'OAuth2';\n if (scheme.type === 'openIdConnect') return 'OpenID Connect';\n return scheme.type || 'Auth';\n}\n\nexport function getOperationSecurityBadges(info: OperationSecurityInfo | undefined): string[] {\n if (!hasOperationAuth(info)) return [];\n const seen = new Set<string>();\n const badges: string[] = [];\n for (const requirement of info!.requirements) {\n for (const item of requirement) {\n const badge = getSecuritySchemeBadge(item.scheme);\n if (seen.has(badge)) continue;\n seen.add(badge);\n badges.push(badge);\n }\n }\n return badges;\n}\n\nexport function formatOperationAuthBadge(info: OperationSecurityInfo | undefined): string | null {\n const badges = getOperationSecurityBadges(info);\n if (badges.length === 0) return null;\n if (badges.length === 1) return `${badges[0]} required`;\n return `${badges[0]} +${badges.length - 1} required`;\n}\n\nexport function formatOperationAuthTitle(info: OperationSecurityInfo | undefined): string {\n if (!hasOperationAuth(info)) return 'Authentication not required';\n const groups = info!.requirements.map((requirement) => (\n requirement.map((item) => {\n const badge = getSecuritySchemeBadge(item.scheme);\n if (item.scopes.length > 0) return `${badge} [${item.scopes.join(', ')}]`;\n return badge;\n }).join(' + ')\n ));\n return `Requires authentication: ${groups.join(' OR ')}`;\n}\n\nexport function resolveOperationAuth(\n info: OperationSecurityInfo | undefined,\n configuredSchemes: Record<string, string>,\n activeScheme: string,\n fallbackToken: string,\n): OperationAuthResolved {\n const empty: OperationAuthResolved = { headers: {}, query: {}, cookies: {}, matchedSchemeNames: [] };\n if (!hasOperationAuth(info)) return empty;\n\n for (const requirement of info!.requirements) {\n const allConfigured = requirement.every((item) => Boolean(configuredSchemes[item.schemeName]));\n if (!allConfigured && requirement.length > 0) continue;\n const resolved = materializeRequirement(requirement, configuredSchemes);\n if (Object.keys(resolved.headers).length > 0 || Object.keys(resolved.query).length > 0 || Object.keys(resolved.cookies).length > 0) {\n return resolved;\n }\n }\n\n if (!fallbackToken || !activeScheme) return empty;\n const fallbackItem: ResolvedSecuritySchemeRequirement = {\n schemeName: activeScheme,\n scopes: [],\n };\n const resolved = materializeRequirement([fallbackItem], { ...configuredSchemes, [activeScheme]: fallbackToken });\n return resolved;\n}\n\nexport function getOperationAuthHeaderPlaceholders(info: OperationSecurityInfo | undefined): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!hasOperationAuth(info)) return headers;\n const firstRequirement = info!.requirements[0] || [];\n for (const item of firstRequirement) {\n const scheme = item.scheme;\n if (!scheme) continue;\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') headers.Authorization = 'Bearer <token>';\n else if (s === 'basic') headers.Authorization = 'Basic <credentials>';\n else headers.Authorization = '<token>';\n continue;\n }\n if (scheme.type === 'apiKey' && scheme.in === 'header' && scheme.name) {\n headers[scheme.name] = `<${scheme.name}>`;\n }\n }\n return headers;\n}\n\nfunction materializeRequirement(\n requirement: ResolvedSecuritySchemeRequirement[],\n configuredSchemes: Record<string, string>,\n): OperationAuthResolved {\n const result: OperationAuthResolved = { headers: {}, query: {}, cookies: {}, matchedSchemeNames: [] };\n for (const item of requirement) {\n const scheme = item.scheme;\n const value = configuredSchemes[item.schemeName];\n if (!scheme || !value) continue;\n result.matchedSchemeNames.push(item.schemeName);\n\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') result.headers.Authorization = `Bearer ${value}`;\n else if (s === 'basic') result.headers.Authorization = `Basic ${value}`;\n else result.headers.Authorization = value;\n continue;\n }\n\n if (scheme.type === 'oauth2' || scheme.type === 'openIdConnect') {\n result.headers.Authorization = `Bearer ${value}`;\n continue;\n }\n\n if (scheme.type === 'apiKey' && scheme.name) {\n if (scheme.in === 'query') result.query[scheme.name] = value;\n else if (scheme.in === 'cookie') result.cookies[scheme.name] = value;\n else result.headers[scheme.name] = value;\n }\n }\n return result;\n}\n","\n/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out\n// c = flow-in ⇒ ns-plain-safe-in\n// c = block-key ⇒ ns-plain-safe-out\n// c = flow-key ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )\n// | ( /* An ns-char preceding */ “#” )\n// | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”\n // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, jsYaml as default, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n","import type {\n ParsedSpec, SpecInfo, SpecServer, SpecTag, SpecOperation,\n SpecParameter, SpecRequestBody, SpecResponse, SpecResponseHeader, SpecMediaType,\n SpecExample, SchemaObject, SecurityScheme, SpecWebhook, SpecCallback, SecurityRequirement,\n} from './types';\nimport { normalizeSecurityRequirements, resolveOperationSecurityInfo } from './security';\nimport { load as loadYaml } from 'js-yaml';\n\nconst MAX_REF_DEPTH = 50;\nconst MAX_CYCLE_REFS = 200;\n\n/** Parse and normalize an OpenAPI 3.x spec */\nexport function parseSpec(raw: Record<string, unknown>): ParsedSpec {\n const info = parseInfo(raw.info as Record<string, unknown> || {});\n const servers = parseServers(raw.servers as Record<string, unknown>[] || []);\n const components = (raw.components || {}) as Record<string, unknown>;\n const schemas = resolveAllRefs(components.schemas as Record<string, unknown> || {}, raw);\n const securitySchemes = parseSecuritySchemes(components.securitySchemes as Record<string, unknown> || {});\n const rootSecurity = normalizeSecurityRequirements(raw.security);\n const rawPaths = raw.paths as Record<string, Record<string, unknown>> || {};\n const paths: Record<string, Record<string, unknown>> = {};\n for (const [path, methods] of Object.entries(rawPaths)) {\n if (!path.startsWith('/docs')) paths[path] = methods as Record<string, unknown>;\n }\n const operations = parseOperations(paths, raw, rootSecurity, securitySchemes);\n const tags = groupByTags(operations, raw.tags as Array<Record<string, unknown>> || []);\n const webhooks = parseWebhooks(raw.webhooks as Record<string, Record<string, unknown>> || {}, raw, rootSecurity, securitySchemes);\n\n return { raw, info, servers, tags, operations, schemas, securitySchemes, webhooks };\n}\n\nfunction parseInfo(raw: Record<string, unknown>): SpecInfo {\n return {\n title: String(raw.title || 'API'),\n description: raw.description ? String(raw.description) : undefined,\n version: String(raw.version || '1.0.0'),\n contact: raw.contact as SpecInfo['contact'],\n license: raw.license as SpecInfo['license'],\n };\n}\n\nfunction parseServers(raw: Record<string, unknown>[]): SpecServer[] {\n return raw.map((s) => ({\n url: String(s.url || '/'),\n description: s.description ? String(s.description) : undefined,\n variables: s.variables as SpecServer['variables'],\n }));\n}\n\nfunction parseSecuritySchemes(raw: Record<string, unknown>): Record<string, SecurityScheme> {\n const result: Record<string, SecurityScheme> = {};\n for (const [name, scheme] of Object.entries(raw)) {\n const s = scheme as Record<string, unknown>;\n result[name] = {\n type: String(s.type || ''),\n scheme: s.scheme ? String(s.scheme) : undefined,\n bearerFormat: s.bearerFormat ? String(s.bearerFormat) : undefined,\n description: s.description ? String(s.description) : undefined,\n in: s.in ? String(s.in) : undefined,\n name: s.name ? String(s.name) : undefined,\n openIdConnectUrl: s.openIdConnectUrl ? String(s.openIdConnectUrl) : undefined,\n flows: s.flows && typeof s.flows === 'object' ? s.flows as SecurityScheme['flows'] : undefined,\n };\n }\n return result;\n}\n\n/* ─── $ref Resolution ─── */\n\nconst refCache = new Map<string, unknown>();\nlet refCount = 0;\n\nfunction resolveRef(ref: string, root: Record<string, unknown>): unknown {\n if (refCache.has(ref)) return refCache.get(ref);\n\n if (++refCount > MAX_CYCLE_REFS) return { type: 'object', description: '[Circular reference]' };\n\n const parts = ref.replace(/^#\\//, '').split('/').map((p) => decodeURIComponent(p.replace(/~1/g, '/').replace(/~0/g, '~')));\n let current: unknown = root;\n\n for (const part of parts) {\n if (current && typeof current === 'object' && !Array.isArray(current)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n\n refCache.set(ref, current);\n return current;\n}\n\nfunction deepResolve(node: unknown, root: Record<string, unknown>, depth = 0, seen = new Set<string>()): unknown {\n if (depth > MAX_REF_DEPTH) return node;\n if (!node || typeof node !== 'object') return node;\n if (Array.isArray(node)) return node.map((item) => deepResolve(item, root, depth + 1, seen));\n\n const obj = node as Record<string, unknown>;\n\n if (typeof obj.$ref === 'string') {\n const ref = obj.$ref;\n if (seen.has(ref)) return { type: 'object', description: '[Circular reference]' };\n\n const newSeen = new Set(seen);\n newSeen.add(ref);\n const resolved = resolveRef(ref, root);\n if (resolved && typeof resolved === 'object') {\n return deepResolve(resolved, root, depth + 1, newSeen);\n }\n return resolved;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = deepResolve(value, root, depth + 1, seen);\n }\n return result;\n}\n\nfunction resolveAllRefs(schemas: Record<string, unknown>, root: Record<string, unknown>): Record<string, SchemaObject> {\n refCache.clear();\n refCount = 0;\n const result: Record<string, SchemaObject> = {};\n for (const [name, schema] of Object.entries(schemas)) {\n result[name] = deepResolve(schema, root) as SchemaObject;\n }\n return result;\n}\n\n/* ─── Operations ─── */\n\nfunction parseOperations(\n paths: Record<string, Record<string, unknown>>,\n root: Record<string, unknown>,\n rootSecurity: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecOperation[] {\n refCache.clear();\n refCount = 0;\n const ops: SpecOperation[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [pathStr, pathItem] of Object.entries(paths)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n const pathSecurity = normalizeSecurityRequirements(pathItem.security);\n\n // Path-level parameters\n const pathParams = Array.isArray(pathItem.parameters)\n ? pathItem.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n\n for (const method of methods) {\n const op = pathItem[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n\n const operation = parseOperation(\n method,\n pathStr,\n op,\n pathParams,\n root,\n pathSecurity,\n rootSecurity,\n securitySchemes,\n );\n ops.push(operation);\n }\n }\n\n return ops;\n}\n\nfunction parseOperation(\n method: string,\n path: string,\n op: Record<string, unknown>,\n pathParams: Record<string, unknown>[],\n root: Record<string, unknown>,\n pathSecurity: SecurityRequirement[] | undefined = undefined,\n rootSecurity: SecurityRequirement[] | undefined = undefined,\n securitySchemes: Record<string, SecurityScheme> = {},\n): SpecOperation {\n const opParams = Array.isArray(op.parameters)\n ? op.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n\n // Merge path-level and operation-level parameters (operation overrides)\n const mergedParams = [...pathParams];\n for (const p of opParams) {\n const idx = mergedParams.findIndex((mp) => mp.name === p.name && mp.in === p.in);\n if (idx >= 0) mergedParams[idx] = p;\n else mergedParams.push(p);\n }\n\n const parameters = mapParameters(mergedParams, root);\n let requestBody = mapRequestBody(op.requestBody, root);\n\n // x-doc-examples → requestBody.content[].examples\n if (Array.isArray(op['x-doc-examples'])) {\n const docExamples = op['x-doc-examples'] as Array<Record<string, unknown>>;\n const bodyExamples: Array<{ summary: string; value: unknown }> = [];\n\n for (let i = 0; i < docExamples.length; i++) {\n const ex = docExamples[i];\n const scenario = ex.scenario ? String(ex.scenario) : `Example ${i + 1}`;\n const req = ex.request as Record<string, unknown> | undefined;\n const body = req?.body;\n if (body === undefined) continue;\n bodyExamples.push({ summary: scenario, value: body });\n }\n\n if (bodyExamples.length > 0) {\n if (!requestBody) requestBody = { required: false, content: {} };\n const jsonContent = requestBody.content['application/json'] || requestBody.content['application/vnd.api+json'] || {};\n if (!requestBody.content['application/json']) {\n requestBody.content['application/json'] = jsonContent;\n }\n const target = requestBody.content['application/json'];\n if (!target.examples) target.examples = {};\n for (let i = 0; i < bodyExamples.length; i++) {\n const be = bodyExamples[i];\n const base = be.summary.replace(/[^a-zA-Z0-9\\u0430-\\u044f\\u0410-\\u042f\\u0451\\u0401]/g, '-').replace(/-+/g, '-').slice(0, 40) || 'ex';\n const key = `${base}-${i}`.replace(/^-/, '');\n target.examples[key] = { summary: be.summary, description: be.summary, value: be.value };\n }\n }\n }\n\n const responses = mapResponses(op.responses, root);\n\n const tags = Array.isArray(op.tags) ? op.tags.map(String) : ['default'];\n const operationId = String(op.operationId || `${method}_${path.replace(/[^a-zA-Z0-9]/g, '_')}`);\n const hasOwnSecurity = Object.prototype.hasOwnProperty.call(op, 'security');\n const operationSecurity = normalizeSecurityRequirements(op.security);\n const mergedSecurity = hasOwnSecurity ? operationSecurity : (pathSecurity ?? rootSecurity);\n const explicitlyNoAuth = hasOwnSecurity && Array.isArray(operationSecurity) && operationSecurity.length === 0;\n\n // Callbacks\n const callbacks = parseCallbacks(op.callbacks as Record<string, unknown> | undefined, root, securitySchemes);\n\n const result: SpecOperation = {\n operationId,\n method,\n path,\n summary: op.summary ? String(op.summary) : undefined,\n description: op.description ? String(op.description) : undefined,\n tags,\n deprecated: Boolean(op.deprecated),\n security: mergedSecurity,\n resolvedSecurity: resolveOperationSecurityInfo(mergedSecurity, securitySchemes, explicitlyNoAuth),\n parameters,\n requestBody,\n responses,\n };\n if (callbacks.length > 0) result.callbacks = callbacks;\n return result;\n}\n\n/* ─── Webhooks ─── */\n\nfunction parseWebhooks(\n webhooks: Record<string, Record<string, unknown>>,\n root: Record<string, unknown>,\n rootSecurity: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecWebhook[] {\n if (!webhooks || typeof webhooks !== 'object') return [];\n const result: SpecWebhook[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [name, pathItem] of Object.entries(webhooks)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n const resolved = deepResolve(pathItem, root) as Record<string, unknown>;\n const pathSecurity = normalizeSecurityRequirements(resolved.security);\n\n for (const method of methods) {\n const op = resolved[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n const hasOwnSecurity = Object.prototype.hasOwnProperty.call(op, 'security');\n const operationSecurity = normalizeSecurityRequirements(op.security);\n const mergedSecurity = hasOwnSecurity ? operationSecurity : (pathSecurity ?? rootSecurity);\n const explicitlyNoAuth = hasOwnSecurity && Array.isArray(operationSecurity) && operationSecurity.length === 0;\n\n const opParams = Array.isArray(op.parameters)\n ? op.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n const parameters = mapParameters(opParams, root);\n const requestBody = mapRequestBody(op.requestBody, root);\n const responses = mapResponses(op.responses, root);\n\n result.push({\n name,\n method,\n path: name,\n summary: op.summary ? String(op.summary) : undefined,\n description: op.description ? String(op.description) : undefined,\n security: mergedSecurity,\n resolvedSecurity: resolveOperationSecurityInfo(mergedSecurity, securitySchemes, explicitlyNoAuth),\n parameters,\n requestBody,\n responses,\n });\n }\n }\n return result;\n}\n\nfunction mapParameters(\n rawParams: Record<string, unknown>[],\n root: Record<string, unknown>,\n): SpecParameter[] {\n return rawParams.map((param) => ({\n name: String(param.name || ''),\n in: String(param.in || 'query') as SpecParameter['in'],\n required: Boolean(param.required),\n description: param.description ? String(param.description) : undefined,\n schema: param.schema ? deepResolve(param.schema, root) as SchemaObject : undefined,\n example: param.example,\n examples: param.examples ? parseExamples(param.examples as Record<string, unknown>) : undefined,\n deprecated: Boolean(param.deprecated),\n }));\n}\n\nfunction mapRequestBody(\n rawRequestBody: unknown,\n root: Record<string, unknown>,\n): SpecRequestBody | undefined {\n if (!rawRequestBody) return undefined;\n const requestBody = deepResolve(rawRequestBody, root) as Record<string, unknown>;\n return {\n description: requestBody.description ? String(requestBody.description) : undefined,\n required: Boolean(requestBody.required),\n content: parseContent(requestBody.content as Record<string, unknown> || {}, root),\n };\n}\n\nfunction parseResponseHeaders(\n rawHeaders: unknown,\n root: Record<string, unknown>,\n): Record<string, SpecResponseHeader> {\n const result: Record<string, SpecResponseHeader> = {};\n if (!rawHeaders || typeof rawHeaders !== 'object') return result;\n\n for (const [name, raw] of Object.entries(rawHeaders as Record<string, unknown>)) {\n if (!raw || typeof raw !== 'object') continue;\n const resolved = deepResolve(raw, root) as Record<string, unknown>;\n const schema = resolved.schema as SchemaObject | undefined;\n const example = (resolved.example ?? (schema && typeof schema === 'object' ? schema.example : undefined)) as unknown;\n result[name] = {\n description: resolved.description ? String(resolved.description) : undefined,\n required: Boolean(resolved.required),\n schema: schema && typeof schema === 'object' ? (deepResolve(schema, root) as SchemaObject) : undefined,\n example: example !== undefined ? example : undefined,\n deprecated: Boolean(resolved.deprecated),\n };\n }\n return result;\n}\n\nfunction mapResponses(\n rawResponses: unknown,\n root: Record<string, unknown>,\n): Record<string, SpecResponse> {\n const responses: Record<string, SpecResponse> = {};\n if (!rawResponses || typeof rawResponses !== 'object') return responses;\n\n for (const [code, rawResponse] of Object.entries(rawResponses as Record<string, unknown>)) {\n const response = deepResolve(rawResponse, root) as Record<string, unknown>;\n const rawHeaders = response.headers;\n responses[code] = {\n statusCode: code,\n description: response.description ? String(response.description) : undefined,\n headers: rawHeaders ? parseResponseHeaders(rawHeaders, root) : undefined,\n content: response.content ? parseContent(response.content as Record<string, unknown>, root) : undefined,\n };\n }\n\n return responses;\n}\n\n/* ─── Callbacks ─── */\n\nfunction parseCallbacks(\n callbacks: Record<string, unknown> | undefined,\n root: Record<string, unknown>,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecCallback[] {\n if (!callbacks || typeof callbacks !== 'object') return [];\n const result: SpecCallback[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [name, callbackItem] of Object.entries(callbacks)) {\n const resolved = deepResolve(callbackItem, root) as Record<string, Record<string, unknown>>;\n if (!resolved || typeof resolved !== 'object') continue;\n const ops: SpecOperation[] = [];\n\n for (const [urlExpr, pathItem] of Object.entries(resolved)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n for (const method of methods) {\n const op = pathItem[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n ops.push(parseOperation(method, urlExpr, op, [], root, undefined, undefined, securitySchemes));\n }\n }\n\n if (ops.length > 0) {\n result.push({ name, operations: ops });\n }\n }\n return result;\n}\n\nfunction parseContent(content: Record<string, unknown>, root: Record<string, unknown>): Record<string, SpecMediaType> {\n const result: Record<string, SpecMediaType> = {};\n for (const [mediaType, value] of Object.entries(content)) {\n const mt = value as Record<string, unknown>;\n result[mediaType] = {\n schema: mt.schema ? deepResolve(mt.schema, root) as SchemaObject : undefined,\n example: mt.example,\n examples: mt.examples ? parseExamples(mt.examples as Record<string, unknown>) : undefined,\n };\n }\n return result;\n}\n\nfunction parseExamples(examples: Record<string, unknown>): Record<string, SpecExample> {\n const result: Record<string, SpecExample> = {};\n for (const [name, ex] of Object.entries(examples)) {\n const e = ex as Record<string, unknown>;\n result[name] = {\n summary: e.summary ? String(e.summary) : undefined,\n description: e.description ? String(e.description) : undefined,\n value: e.value,\n };\n }\n return result;\n}\n\nfunction groupByTags(operations: SpecOperation[], rawTags: Array<Record<string, unknown>>): SpecTag[] {\n const tagMap = new Map<string, SpecOperation[]>();\n const tagDescriptions = new Map<string, string>();\n\n for (const t of rawTags) {\n tagDescriptions.set(String(t.name), String(t.description || ''));\n }\n\n for (const op of operations) {\n for (const tag of op.tags) {\n if (!tagMap.has(tag)) tagMap.set(tag, []);\n tagMap.get(tag)!.push(op);\n }\n }\n\n // Maintain tag order from spec, then add any unregistered tags\n const orderedTags: SpecTag[] = [];\n const seen = new Set<string>();\n\n for (const t of rawTags) {\n const name = String(t.name);\n if (seen.has(name)) continue;\n seen.add(name);\n orderedTags.push({\n name,\n description: tagDescriptions.get(name),\n operations: tagMap.get(name) || [],\n });\n }\n\n for (const [name, ops] of tagMap) {\n if (seen.has(name)) continue;\n seen.add(name);\n orderedTags.push({ name, description: tagDescriptions.get(name), operations: ops });\n }\n\n return orderedTags;\n}\n\n/* ─── Example Generation ─── */\n\n/** Generate a sample value from a schema when no example is provided */\nexport function generateExample(schema: SchemaObject | undefined): unknown {\n if (!schema) return undefined;\n if (schema.example !== undefined) return schema.example;\n if (schema.default !== undefined) return schema.default;\n if (schema.enum && schema.enum.length > 0) return schema.enum[0];\n\n switch (schema.type) {\n case 'string':\n if (schema.format === 'date-time') return '2025-01-15T10:30:00Z';\n if (schema.format === 'date') return '2025-01-15';\n if (schema.format === 'email') return 'user@example.com';\n if (schema.format === 'uri' || schema.format === 'url') return 'https://example.com';\n if (schema.format === 'uuid') return '550e8400-e29b-41d4-a716-446655440000';\n if (schema.format === 'password') return '********';\n return 'string';\n\n case 'number':\n case 'integer':\n if (schema.minimum !== undefined) return schema.minimum;\n return schema.type === 'integer' ? 0 : 0.0;\n\n case 'boolean':\n return true;\n\n case 'array':\n if (schema.items) {\n const item = generateExample(schema.items);\n return item !== undefined ? [item] : [];\n }\n return [];\n\n case 'object': {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [key, prop] of Object.entries(schema.properties)) {\n obj[key] = generateExample(prop);\n }\n }\n return obj;\n }\n\n default:\n // Handle allOf, oneOf, anyOf\n if (schema.allOf && schema.allOf.length > 0) {\n const merged: Record<string, unknown> = {};\n for (const sub of schema.allOf) {\n const ex = generateExample(sub);\n if (ex && typeof ex === 'object' && !Array.isArray(ex)) {\n Object.assign(merged, ex);\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n }\n if (schema.oneOf && schema.oneOf.length > 0) return generateExample(schema.oneOf[0]);\n if (schema.anyOf && schema.anyOf.length > 0) return generateExample(schema.anyOf[0]);\n if (schema.properties) {\n const obj: Record<string, unknown> = {};\n for (const [key, prop] of Object.entries(schema.properties)) {\n obj[key] = generateExample(prop);\n }\n return obj;\n }\n return undefined;\n }\n}\n\n/** Load spec from URL (JSON or YAML) */\nexport async function loadSpec(url: string): Promise<Record<string, unknown>> {\n const response = await fetch(url);\n if (!response.ok) throw new Error(`Failed to load spec: ${response.status} ${response.statusText}`);\n const text = await response.text();\n\n // Try JSON first\n try {\n return JSON.parse(text);\n } catch {\n try {\n return loadYaml(text) as Record<string, unknown>;\n } catch {\n throw new Error('Failed to parse spec as JSON or YAML');\n }\n }\n}\n","import type { ParsedSpec, SearchEntry } from './types';\nimport { formatOperationAuthBadge, formatOperationAuthTitle, hasOperationAuth } from './security';\n\nlet index: SearchEntry[] = [];\nconst searchTypePriority: Record<SearchEntry['type'], number> = {\n operation: 0,\n tag: 1,\n schema: 2,\n webhook: 3,\n};\n\n/** Build search index from parsed spec */\nexport function buildSearchIndex(spec: ParsedSpec): void {\n index = [];\n\n // Index tags\n for (const tag of spec.tags) {\n index.push({\n type: 'tag',\n title: tag.name,\n subtitle: tag.description,\n tag: tag.name,\n keywords: `${tag.name} ${tag.description || ''}`.toLowerCase(),\n });\n }\n\n // Index operations\n for (const op of spec.operations) {\n index.push({\n type: 'operation',\n title: op.summary || op.operationId,\n subtitle: op.path,\n method: op.method,\n requiresAuth: hasOperationAuth(op.resolvedSecurity),\n authBadge: formatOperationAuthBadge(op.resolvedSecurity) || undefined,\n authTitle: hasOperationAuth(op.resolvedSecurity) ? formatOperationAuthTitle(op.resolvedSecurity) : undefined,\n resolvedSecurity: op.resolvedSecurity,\n path: op.path,\n tag: op.tags[0],\n operationId: op.operationId,\n keywords: `${op.method} ${op.path} ${op.summary || ''} ${op.description || ''} ${op.operationId} ${op.tags.join(' ')}`.toLowerCase(),\n });\n }\n\n // Index schemas\n for (const [name, schema] of Object.entries(spec.schemas)) {\n index.push({\n type: 'schema',\n title: name,\n subtitle: (schema.description as string) || 'Schema',\n schemaName: name,\n keywords: `${name} ${(schema.description as string) || ''} schema model`.toLowerCase(),\n });\n }\n\n // Index webhooks\n if (spec.webhooks) {\n for (const wh of spec.webhooks) {\n index.push({\n type: 'webhook',\n title: wh.summary || wh.name,\n subtitle: `${wh.method.toUpperCase()} Webhook`,\n method: wh.method,\n webhookName: wh.name,\n keywords: `${wh.name} ${wh.method} ${wh.summary || ''} ${wh.description || ''} webhook`.toLowerCase(),\n });\n }\n }\n}\n\n/** Search the index with a query string */\nexport function search(query: string, limit = 20): SearchEntry[] {\n if (!query.trim()) return [];\n\n const terms = query.toLowerCase().trim().split(/\\s+/);\n const scored: Array<{ entry: SearchEntry; score: number }> = [];\n\n for (const entry of index) {\n let score = 0;\n let allMatch = true;\n\n for (const term of terms) {\n if (entry.keywords.includes(term)) {\n score += 1;\n // Bonus for title match\n if (entry.title.toLowerCase().includes(term)) score += 3;\n // Bonus for exact path match\n if (entry.path?.toLowerCase().includes(term)) score += 2;\n // Bonus for method match\n if (entry.method?.toLowerCase() === term) score += 2;\n } else {\n allMatch = false;\n }\n }\n\n if (allMatch && score > 0) {\n scored.push({ entry, score });\n }\n }\n\n return scored\n .sort((a, b) => {\n const pa = searchTypePriority[a.entry.type] ?? 99;\n const pb = searchTypePriority[b.entry.type] ?? 99;\n if (pa !== pb) return pa - pb;\n if (b.score !== a.score) return b.score - a.score;\n return a.entry.title.localeCompare(b.entry.title);\n })\n .slice(0, limit)\n .map((s) => s.entry);\n}\n\n","import { store } from './state';\n\nexport interface ThemeConfig {\n primaryColor?: string;\n}\n\nconst THEME_KEY = 'puredocs-theme';\n\n/** Theme class switching only and optional config overrides */\nexport function applyTheme(root: HTMLElement, themeMode: 'light' | 'dark', config?: ThemeConfig): void {\n const isSwitch = root.classList.contains('light') || root.classList.contains('dark');\n\n /* Enable smooth 0.5s transition for theme changes (not for initial paint) */\n if (isSwitch) {\n root.classList.add('theme-transitioning');\n }\n\n root.classList.remove('light', 'dark');\n root.classList.add(`${themeMode}`);\n\n /* Config overrides (primary) — from PortalConfig */\n if (config?.primaryColor) {\n root.style.setProperty('--primary-color', config.primaryColor);\n } else {\n root.style.removeProperty('--primary-color');\n }\n\n /* Remove transition class after animation completes */\n if (isSwitch) {\n setTimeout(() => root.classList.remove('theme-transitioning'), 550);\n }\n}\n\n/** Toggle between light and dark theme */\nexport function toggleTheme(): void {\n const current = store.get().theme;\n const next = current === 'light' ? 'dark' : 'light';\n store.set({ theme: next });\n try {\n localStorage.setItem(THEME_KEY, next);\n } catch { /* noop */ }\n}\n\n/** Detect initial theme */\nexport function detectTheme(preference?: 'light' | 'dark' | 'auto'): 'light' | 'dark' {\n if (preference && preference !== 'auto') return preference;\n try {\n const stored = localStorage.getItem(THEME_KEY);\n if (stored === 'light' || stored === 'dark') return stored;\n } catch { /* noop */ }\n if (window.matchMedia?.('(prefers-color-scheme: dark)').matches) return 'dark';\n return 'light';\n}\n","export function looksLikeJson(str: string): boolean {\n const text = str.trim();\n return (text.startsWith('{') && text.endsWith('}')) || (text.startsWith('[') && text.endsWith(']'));\n}\n\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n","/**\n * Lightweight DOM helper utilities.\n * No virtual DOM — direct, efficient DOM manipulation.\n */\nimport { escapeHtml as escapeHtmlImpl } from '../helpers/text';\n\ntype Attrs = Record<string, string | boolean | number | EventListener | undefined>;\ntype Child = HTMLElement | SVGElement | string | null | undefined | false;\n\n/** Create an HTML element with attributes and children */\nexport function h(tag: string, attrs?: Attrs | null, ...children: Child[]): HTMLElement {\n const el = document.createElement(tag);\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined || value === false) continue;\n if (key.startsWith('on') && typeof value === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), value as EventListener);\n } else if (key === 'className') {\n el.className = String(value);\n } else if (key === 'innerHTML') {\n el.innerHTML = String(value);\n } else if (key === 'textContent') {\n el.textContent = String(value);\n } else if (value === true) {\n el.setAttribute(key, '');\n } else {\n el.setAttribute(key, String(value));\n }\n }\n }\n\n for (const child of children) {\n if (child === null || child === undefined || child === false) continue;\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n } else {\n el.appendChild(child);\n }\n }\n\n return el;\n}\n\n/** Clear all children of an element */\nexport function clear(el: HTMLElement): void {\n while (el.firstChild) el.removeChild(el.firstChild);\n}\n\n/** Replace all children of a container */\nexport function render(container: HTMLElement, ...children: Child[]): void {\n clear(container);\n for (const child of children) {\n if (child === null || child === undefined || child === false) continue;\n if (typeof child === 'string') {\n container.appendChild(document.createTextNode(child));\n } else {\n container.appendChild(child);\n }\n }\n}\n\n/** Escape HTML to prevent XSS */\nexport function escapeHtml(str: string): string {\n return escapeHtmlImpl(str);\n}\n\n/** Copy text to clipboard */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // Fallback\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;left:-9999px';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n }\n}\n\n/** Format bytes to human readable */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / k ** i).toFixed(i > 0 ? 1 : 0)} ${sizes[i]}`;\n}\n\n/** Format duration in ms to human readable */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)} ms`;\n return `${(ms / 1000).toFixed(2)} s`;\n}\n","/** SVG icon set — clean, consistent 20x20 Lucide-inspired icons */\n\nconst icon = (d: string, opts?: { strokeWidth?: number; fill?: string }) =>\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"${opts?.fill || 'none'}\" stroke=\"currentColor\" stroke-width=\"${opts?.strokeWidth || 1.75}\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${d}</svg>`;\n\nexport const icons = {\n search: icon('<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>'),\n close: icon('<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>'),\n plus: icon('<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>'),\n chevronDown: icon('<path d=\"m6 9 6 6 6-6\"/>'),\n chevronRight: icon('<path d=\"m9 18 6-6-6-6\"/>'),\n chevronLeft: icon('<path d=\"m15 18-6-6 6-6\"/>'),\n menu: icon('<line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>'),\n sun: icon('<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>'),\n moon: icon('<path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\"/>'),\n copy: icon('<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>'),\n check: icon('<path d=\"M20 6 9 17l-5-5\"/>'),\n /** Closed padlock — requires auth (red) */\n lock: icon('<rect width=\"14\" height=\"11\" x=\"5\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M8 11V7a4 4 0 1 1 8 0v4\"/>'),\n /** Open padlock — auth configured (green) */\n unlock: icon('<rect width=\"14\" height=\"11\" x=\"5\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M16 11V7a4 4 0 1 0-8 0v1\"/>'),\n send: icon('<path d=\"m22 2-7 20-4-9-9-4Z\"/><path d=\"m22 2-11 11\"/>'),\n key: icon('<path d=\"m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4\"/>'),\n globe: icon('<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>'),\n server: icon('<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>'),\n warning: icon('<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-3Z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>'),\n settings: icon('<path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>'),\n} as const;\n","import type { PortalState } from './types';\n\ntype EffectHandler = (state: PortalState) => void;\ntype CleanupFn = () => void;\n\n/**\n * Page-scoped reactive effects manager.\n *\n * Each page component registers its own effects at render time via `useEffects()`.\n * When state changes (env / auth) without a route change, `notifyEffects()` runs\n * all registered handlers so every component can update itself.\n * On route change, `disposeEffects()` tears everything down cleanly.\n *\n * This replaces the monolithic `updateEnvironmentState` in app.ts — each component\n * now owns its reactive behaviour.\n */\nclass Effects {\n private handlers = new Map<string, EffectHandler>();\n private cleanupFns: CleanupFn[] = [];\n\n /** Register a named reactive handler that runs on every state change */\n on(key: string, handler: EffectHandler): void {\n this.handlers.set(key, handler);\n }\n\n /** Register a cleanup callback (runs on dispose) */\n onCleanup(fn: CleanupFn): void {\n this.cleanupFns.push(fn);\n }\n\n /** Run all registered handlers with current state */\n notify(state: PortalState): void {\n for (const handler of this.handlers.values()) {\n try {\n handler(state);\n } catch (e) {\n console.error('[Effects] handler error:', e);\n }\n }\n }\n\n /** Dispose: run cleanups and clear all handlers */\n dispose(): void {\n for (const fn of this.cleanupFns) {\n try { fn(); } catch { /* ignore */ }\n }\n this.cleanupFns.length = 0;\n this.handlers.clear();\n }\n}\n\nlet current: Effects | null = null;\n\n/** Get the current page effects instance (creates one if needed) */\nexport function useEffects(): Effects {\n if (!current) current = new Effects();\n return current;\n}\n\n/** Notify all page effects of a state change (env / auth) */\nexport function notifyEffects(state: PortalState): void {\n current?.notify(state);\n}\n\n/** Dispose current effects — call on route change / unmount */\nexport function disposeEffects(): void {\n current?.dispose();\n current = null;\n}\n","import type { PortalState } from '../core/types';\n\nexport function getActiveEnvironment(state: PortalState) {\n return state.environments.find((env) => env.name === state.activeEnvironment) || state.environments[0];\n}\n\nexport function getBaseUrl(state: PortalState): string {\n const env = getActiveEnvironment(state);\n return env?.baseUrl || state.spec?.servers[0]?.url || window.location.origin;\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n return String(baseUrl || '').replace(/\\/$/, '');\n}\n\nexport function formatBaseUrlForDisplay(baseUrl: string): string {\n const normalized = normalizeBaseUrl(baseUrl);\n return normalized.replace(/^https?:\\/\\//i, '');\n}\n\nexport function getNormalizedBaseUrl(state: PortalState): string {\n return normalizeBaseUrl(getBaseUrl(state));\n}\n\nexport function getDisplayBaseUrl(state: PortalState): string {\n return formatBaseUrlForDisplay(getBaseUrl(state));\n}\n","/**\n * Unified Select primitive.\n * Base styles — by select tag (forms.css).\n * variant: inline → data-variant=\"inline\"\n */\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n ariaLabel?: string;\n onChange?: (value: string) => void;\n className?: string;\n variant?: 'default' | 'inline';\n invalid?: boolean;\n dataAttrs?: Record<string, string>;\n}\n\nexport function createSelect(props: SelectProps): HTMLSelectElement {\n const { options, value, ariaLabel, onChange, className, variant = 'default', invalid, dataAttrs } = props;\n\n const el = document.createElement('select');\n if (variant === 'inline') el.setAttribute('data-variant', 'inline');\n const classes: string[] = [];\n if (invalid) classes.push('invalid');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n\n if (dataAttrs) {\n for (const [k, v] of Object.entries(dataAttrs)) {\n el.dataset[k] = v;\n }\n }\n\n for (const opt of options) {\n const o = document.createElement('option');\n o.value = opt.value;\n o.textContent = opt.label;\n if (value !== undefined && opt.value === value) o.selected = true;\n el.appendChild(o);\n }\n\n if (onChange) {\n el.addEventListener('change', () => onChange(el.value));\n }\n\n return el;\n}\n","/**\n * Unified Input primitive.\n * Base styles — by input tag (forms.css).\n */\n\nexport type InputModifier = 'filled' | 'invalid';\n\nexport interface InputProps {\n type?: string;\n placeholder?: string;\n value?: string;\n ariaLabel?: string;\n required?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n modifiers?: InputModifier[];\n dataAttrs?: Record<string, string>;\n className?: string;\n onInput?: (value: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport function createInput(props: InputProps): HTMLInputElement {\n const {\n type = 'text',\n placeholder,\n value,\n ariaLabel,\n required,\n readOnly,\n invalid,\n modifiers,\n dataAttrs,\n className,\n onInput,\n onChange,\n } = props;\n\n const el = document.createElement('input');\n el.type = type;\n el.setAttribute('autocomplete', 'off');\n const classes: string[] = [];\n if (modifiers?.includes('filled')) classes.push('filled');\n if (invalid) classes.push('invalid');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (placeholder) el.placeholder = placeholder;\n if (value !== undefined) el.value = value;\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n if (required) el.required = true;\n if (readOnly) el.readOnly = true;\n\n if (dataAttrs) {\n for (const [k, v] of Object.entries(dataAttrs)) {\n el.dataset[k] = v;\n }\n }\n\n if (onInput) {\n el.addEventListener('input', () => onInput(el.value));\n }\n if (onChange) {\n el.addEventListener('change', () => onChange(el.value));\n }\n\n return el;\n}\n","/**\n * Unified Button primitive.\n * Variants: 'primary' | 'secondary' | 'ghost' | 'icon'\n * Uses CSS classes: `.btn` + utility/modifier classes.\n */\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'icon';\n\nexport interface ButtonProps {\n variant?: ButtonVariant;\n label?: string;\n icon?: string; // SVG string (innerHTML)\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n onClick?: (e: Event) => void;\n}\n\nconst VARIANT_MODIFIERS: Record<ButtonVariant, string[]> = {\n primary: ['primary', 'm'],\n secondary: ['secondary', 'm'],\n ghost: ['s', 'u-text-muted'],\n icon: ['icon', 'm', 'u-text-muted'],\n};\n\nexport function getButtonClasses(variant: ButtonVariant = 'secondary'): string[] {\n return ['btn', ...VARIANT_MODIFIERS[variant]];\n}\n\nexport function createButton(props: ButtonProps): HTMLButtonElement {\n const { variant = 'secondary', label, icon, ariaLabel, disabled, className, onClick } = props;\n\n const el = document.createElement('button');\n el.type = 'button';\n\n const classes = getButtonClasses(variant);\n if (className) classes.push(...className.split(/\\s+/).filter(Boolean));\n el.className = classes.join(' ');\n\n if (icon) {\n const span = document.createElement('span');\n span.className = 'btn-icon-slot';\n span.innerHTML = icon;\n el.appendChild(span);\n }\n\n if (label) {\n const text = document.createElement('span');\n text.textContent = label;\n el.appendChild(text);\n }\n\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n if (disabled) el.disabled = true;\n\n if (onClick) {\n el.addEventListener('click', onClick);\n }\n\n return el;\n}\n","export type BadgeSize = 's' | 'm' | 'l';\nexport type BadgeKind = 'method' | 'status' | 'webhook' | 'required' | 'chip';\nexport type BadgeColor = 'default' | 'transparent' | 'primary' | 'green' | 'blue' | 'orange' | 'purple' | 'red';\n\nexport interface BadgeProps {\n text: string;\n kind?: BadgeKind;\n color?: BadgeColor;\n size?: BadgeSize;\n /** @deprecated All badges are monospace by default. */\n mono?: boolean;\n className?: string;\n method?: string;\n statusCode?: string;\n}\n\nfunction colorClass(color: BadgeColor): string {\n if (color === 'default' || color === 'transparent') return 'u-text-muted';\n if (color === 'primary') return 'u-text-accent';\n return `u-text-${color}`;\n}\n\nfunction bgClass(color: BadgeColor): string {\n if (color === 'default') return 'u-bg-surface-hover';\n if (color === 'transparent') return 'u-bg-transparent';\n if (color === 'primary') return 'u-bg-accent-soft';\n return `u-bg-${color}-soft`;\n}\n\nfunction getMethodColor(method: string): BadgeColor {\n const m = method.toLowerCase();\n if (m === 'get') return 'green';\n if (m === 'post') return 'blue';\n if (m === 'put' || m === 'patch') return 'orange';\n if (m === 'delete') return 'red';\n return 'default';\n}\n\nfunction getStatusColor(code: string): BadgeColor {\n const normalized = code.trim();\n if (normalized.startsWith('2')) return 'green';\n if (normalized.startsWith('3')) return 'blue';\n if (normalized.startsWith('4')) return 'orange';\n if (normalized.startsWith('5')) return 'red';\n return 'default';\n}\n\nfunction resolveColor(props: BadgeProps, kind: BadgeKind): BadgeColor {\n if (props.color) return props.color;\n if (kind === 'method') return getMethodColor(props.method || props.text);\n if (kind === 'status') return getStatusColor(props.statusCode || props.text);\n if (kind === 'webhook') return 'purple';\n if (kind === 'required') return 'orange';\n return 'default';\n}\n\n/** Unified Badge primitive (`.badge` + kind + size + optional modifiers). */\nexport function createBadge(props: BadgeProps): HTMLElement {\n const el = document.createElement('span');\n const kind = props.kind || 'chip';\n const color = resolveColor(props, kind);\n const size = props.size || 'm';\n const classes = ['badge', size];\n\n if (kind === 'status') classes.push('status');\n if (kind === 'required') classes.push('required');\n\n classes.push(colorClass(color), bgClass(color));\n\n if (props.className) classes.push(props.className);\n el.className = classes.join(' ');\n el.textContent = props.text;\n return el;\n}\n\n/** Tab button based on badge. Used for Body/Headers, Code Example, etc. */\nexport function createTab(text: string, options?: { active?: boolean; context?: boolean }): HTMLButtonElement {\n const active = options?.active ?? false;\n const context = options?.context ?? false;\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = `badge m interactive${active ? ' is-active' : ''}`;\n if (context) btn.dataset.badgeContext = 'true';\n btn.textContent = text;\n return btn;\n}\n\n/** Tab button with response code (200, 404, etc.). Inherits badge + status styles. */\nexport function createResponseCodeTab(code: string, active = false): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n const color = getStatusColor(code);\n const classes = ['badge', 'status', 'm', 'interactive', colorClass(color)];\n if (active) classes.push('is-active', bgClass(color));\n btn.className = classes.join(' ');\n btn.dataset.badgeGroup = 'response-code';\n btn.dataset.badgeColor = color;\n btn.textContent = code;\n return btn;\n}\n\nexport function setResponseCodeTabActive(btn: HTMLElement, active: boolean): void {\n btn.classList.remove(\n 'u-bg-surface-hover',\n 'u-bg-transparent',\n 'u-bg-green-soft',\n 'u-bg-blue-soft',\n 'u-bg-orange-soft',\n 'u-bg-purple-soft',\n 'u-bg-red-soft',\n );\n btn.classList.toggle('is-active', active);\n if (!active) return;\n const color = (btn.dataset.badgeColor as BadgeColor | undefined) || 'default';\n btn.classList.add(bgClass(color));\n}\n","/**\n * Unified Card primitive.\n *\n * Structural card: `.card` with `.card-head` and `.card-content`\n * Simple card: `.card.simple` for overview, servers, etc.\n */\nimport { createBadge } from './badge';\n\nexport interface CardProps {\n /** If true — creates a simple card (`.card.simple`), otherwise structural (`.card`) */\n simple?: boolean;\n /** Interactive flag (adds interactive) */\n interactive?: boolean;\n /** Active flag (adds active) */\n active?: boolean;\n /** Additional classes */\n className?: string;\n /** Click handler */\n onClick?: (e: Event) => void;\n}\n\n/** Creates a simple or structural card */\nexport function createCard(props?: CardProps): HTMLElement {\n const { simple, interactive, active, className, onClick } = props || {};\n\n const el = document.createElement('div');\n const classes = ['card'];\n if (simple) classes.push('simple');\n if (interactive) classes.push('interactive');\n if (active) classes.push('active');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (onClick) {\n if (!el.classList.contains('interactive')) {\n el.classList.add('interactive');\n }\n el.addEventListener('click', onClick);\n }\n\n return el;\n}\n\n/** Creates header for structural card */\nexport function createCardHeader(...children: (HTMLElement | string)[]): HTMLElement {\n const header = document.createElement('div');\n header.className = 'card-head';\n for (const child of children) {\n if (typeof child === 'string') {\n const span = document.createElement('span');\n span.textContent = child;\n header.append(span);\n } else {\n header.append(child);\n }\n }\n return header;\n}\n\n/** Creates body for structural card */\nexport function createCardBody(variant?: 'default' | 'code' | 'no-padding'): HTMLElement {\n const body = document.createElement('div');\n const classes = ['card-content'];\n if (variant === 'code') classes.push('code');\n else if (variant === 'no-padding') classes.push('flush');\n body.className = classes.join(' ');\n return body;\n}\n\nexport interface CardHeaderRowOptions {\n title: string | HTMLElement;\n leading?: HTMLElement | string;\n trailing?: HTMLElement | string | number;\n className?: string;\n}\n\nfunction normalizeNode(node: HTMLElement | string | number): HTMLElement {\n if (typeof node === 'string' || typeof node === 'number') {\n const span = document.createElement('span');\n span.textContent = String(node);\n return span;\n }\n return node;\n}\n\nexport function createCardHeaderRow(options: CardHeaderRowOptions): HTMLElement {\n const row = document.createElement('div');\n row.className = `card-row${options.className ? ` ${options.className}` : ''}`;\n if (options.leading !== undefined) row.append(normalizeNode(options.leading));\n row.append(typeof options.title === 'string'\n ? Object.assign(document.createElement('h3'), { textContent: options.title })\n : options.title);\n if (options.trailing !== undefined) {\n const trailingEl =\n typeof options.trailing === 'string' || typeof options.trailing === 'number'\n ? createBadge({ text: String(options.trailing), kind: 'chip', size: 'm', mono: true })\n : normalizeNode(options.trailing);\n row.append(trailingEl);\n }\n return row;\n}\n","import { h } from '../../lib/dom';\nimport { createBadge } from './badge';\n\nexport interface SectionOptions {\n title?: string;\n titleEl?: HTMLElement;\n badge?: string | number | HTMLElement;\n className?: string;\n}\n\nfunction normalizeChild(child: HTMLElement | string): HTMLElement {\n return typeof child === 'string' ? h('span', { textContent: child }) : child;\n}\n\nfunction createSectionTitle(title: string): HTMLElement {\n return h('h2', { textContent: title });\n}\n\nexport function createSectionTitleWrap(title: string | HTMLElement, badge?: string | number | HTMLElement): HTMLElement {\n const wrap = h('div', { className: 'section-head' });\n wrap.append(typeof title === 'string' ? createSectionTitle(title) : title);\n if (badge !== undefined) {\n wrap.append(typeof badge === 'string' || typeof badge === 'number'\n ? createBadge({ text: String(badge), kind: 'chip', size: 'm' })\n : badge);\n }\n return wrap;\n}\n\nexport function createSection(options: SectionOptions, ...children: (HTMLElement | string)[]): HTMLElement {\n const section = h('div', { className: `block section${options.className ? ` ${options.className}` : ''}` });\n if (options.titleEl) {\n section.append(options.titleEl);\n } else if (options.title) {\n if (options.badge !== undefined) {\n section.append(createSectionTitleWrap(options.title, options.badge));\n } else {\n section.append(createSectionTitle(options.title));\n }\n }\n for (const child of children) section.append(normalizeChild(child));\n return section;\n}\n","import { h } from '../../lib/dom';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n className?: string;\n onClick?: (e: Event) => void;\n}\n\nexport interface BreadcrumbOptions {\n className?: string;\n leading?: HTMLElement[];\n trailing?: HTMLElement[];\n}\n\nexport function createBreadcrumb(\n items: BreadcrumbItem[],\n options?: BreadcrumbOptions,\n): HTMLElement {\n const nav = h('nav', {\n className: `breadcrumb${options?.className ? ` ${options.className}` : ''}`,\n 'aria-label': 'Breadcrumb',\n });\n const main = h('div', { className: 'breadcrumb-main' });\n\n if (options?.leading?.length) {\n main.append(...options.leading);\n }\n\n items.forEach((item, index) => {\n if (index > 0) {\n main.append(h('span', { className: 'breadcrumb-sep', textContent: '/' }));\n }\n if (item.href || item.onClick) {\n const link = h('a', {\n className: `breadcrumb-item${item.className ? ` ${item.className}` : ''}`,\n href: item.href || '#',\n textContent: item.label,\n });\n if (item.onClick) link.addEventListener('click', item.onClick);\n main.append(link);\n return;\n }\n main.append(h('span', {\n className: item.className || 'breadcrumb-segment',\n textContent: item.label,\n }));\n });\n nav.append(main);\n\n if (options?.trailing?.length) {\n nav.append(h('div', { className: 'breadcrumb-trailing' }, ...options.trailing));\n }\n\n return nav;\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\n\nexport interface CreateLockIconOptions {\n configured: boolean;\n variant?: 'tag' | 'nav' | 'endpoint';\n label?: string;\n title?: string;\n}\n\n/** Common factory for lock/unlock icons in navigation, cards, and endpoint */\nexport function createLockIcon(options: CreateLockIconOptions): HTMLElement {\n const { configured, variant = 'tag', label, title } = options;\n const ariaLabel = label || title;\n const iconHtml = configured ? icons.unlock : icons.lock;\n\n const baseClass = variant === 'tag' ? 'tag-op-lock'\n : variant === 'nav' ? 'nav-item-lock'\n : 'endpoint-meta-icon';\n\n const mod = variant !== 'endpoint' ? ` ${baseClass}--${configured ? 'configured' : 'required'}` : '';\n\n return h('span', {\n className: `${baseClass}${mod}`.trim(),\n innerHTML: iconHtml,\n ...(ariaLabel ? { 'aria-label': ariaLabel } : {}),\n });\n}\n","import { h } from '../../lib/dom';\n\nexport interface ModalBaseOptions {\n overlayClass: string;\n modalClass: string;\n role?: string;\n ariaLabel: string;\n dataOverlayAttr: string;\n onClose?: () => void;\n}\n\nexport interface ModalBase {\n overlay: HTMLElement;\n modal: HTMLElement;\n mount: (target?: ParentNode | null) => void;\n close: () => void;\n}\n\nexport function createModalBase(options: ModalBaseOptions): ModalBase {\n const overlay = h('div', { className: options.overlayClass });\n overlay.setAttribute(options.dataOverlayAttr, 'true');\n const modal = h('div', {\n className: options.modalClass,\n role: options.role || 'dialog',\n 'aria-label': options.ariaLabel,\n 'aria-modal': 'true',\n });\n overlay.append(modal);\n\n let isClosed = false;\n const close = () => {\n if (isClosed) return;\n isClosed = true;\n overlay.remove();\n options.onClose?.();\n };\n\n overlay.addEventListener('click', (event: Event) => {\n if (event.target === overlay) close();\n });\n overlay.addEventListener('keydown', (event: Event) => {\n if ((event as KeyboardEvent).key === 'Escape') {\n event.preventDefault();\n close();\n }\n }, true);\n\n return {\n overlay,\n modal,\n mount: (target?: ParentNode | null) => {\n (target || document.querySelector('.root') || document.body).appendChild(overlay);\n },\n close,\n };\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { createButton, createInput } from '../ui';\nimport { createModalBase, type ModalBase } from './modal-base';\nimport type { OperationSecurityInfo, SecurityRequirement, SecurityScheme } from '../../core/types';\nimport {\n getOperationAuthHeaderPlaceholders,\n getSecuritySchemeBadge,\n resolveOperationAuth,\n resolveOperationSecurityInfo,\n} from '../../core/security';\n\nlet modalBase: ModalBase | null = null;\nlet cleanupAuthModalSync: (() => void) | null = null;\n\nfunction cleanupModalSync(): void {\n cleanupAuthModalSync?.();\n cleanupAuthModalSync = null;\n}\n\nfunction close() {\n cleanupModalSync();\n if (modalBase) modalBase.close();\n modalBase = null;\n}\n\n/** Human-readable label for a security scheme */\nfunction schemeLabel(scheme: SecurityScheme): string {\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') return 'Bearer Token';\n if (s === 'basic') return 'Basic Auth';\n return `HTTP ${scheme.scheme || ''}`;\n }\n if (scheme.type === 'apiKey') {\n const loc = scheme.in === 'header' ? 'Header' : scheme.in === 'query' ? 'Query' : scheme.in === 'cookie' ? 'Cookie' : '';\n return `API Key (${loc}: ${scheme.name || '?'})`;\n }\n if (scheme.type === 'oauth2') return 'OAuth 2.0';\n if (scheme.type === 'openIdConnect') return 'OpenID Connect';\n return scheme.type;\n}\n\n/** Short type badge text */\nfunction schemeBadge(scheme: SecurityScheme): string {\n return getSecuritySchemeBadge(scheme);\n}\n\nfunction focusNextFrame(input: HTMLInputElement): void {\n requestAnimationFrame(() => input.focus());\n}\n\nfunction createModalField(label: string, input: HTMLElement): HTMLElement {\n const row = h('div', { className: 'modal field' });\n row.append(h('label', { className: 'modal label', textContent: label }), input);\n return row;\n}\n\nfunction createModalTextInput(options: {\n placeholder: string;\n value: string;\n ariaLabel: string;\n type?: 'text' | 'password';\n}): HTMLInputElement {\n return createInput({\n className: 'modal input',\n placeholder: options.placeholder,\n value: options.value,\n ariaLabel: options.ariaLabel,\n type: options.type,\n });\n}\n\nfunction encodeUtf8Base64(value: string): string {\n try {\n const bytes = new TextEncoder().encode(value);\n let binary = '';\n bytes.forEach((byte) => { binary += String.fromCharCode(byte); });\n return btoa(binary);\n } catch {\n return btoa(unescape(encodeURIComponent(value)));\n }\n}\n\nfunction decodeUtf8Base64(value: string): string {\n try {\n const binary = atob(value);\n const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch {\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return '';\n }\n }\n}\n\nfunction decodeBasicAuth(value: string): { username: string; password: string } {\n if (!value) return { username: '', password: '' };\n try {\n const decoded = decodeUtf8Base64(value);\n const parts = decoded.split(':');\n return {\n username: parts[0] || '',\n password: parts.slice(1).join(':') || '',\n };\n } catch {\n return { username: '', password: '' };\n }\n}\n\n/** Render input fields for a specific scheme type */\nfunction renderSchemeFields(name: string, scheme: SecurityScheme, container: HTMLElement): void {\n clear(container);\n\n const currentValue = store.get().auth.schemes[name] || '';\n const type = scheme.type;\n const schemeLower = (scheme.scheme || '').toLowerCase();\n\n if (type === 'http' && schemeLower === 'bearer') {\n // Bearer token — single password input\n const row = h('div', { className: 'modal field' });\n const inputWrap = h('div', { className: 'modal input-wrap' });\n const input = createModalTextInput({\n placeholder: 'Bearer token...',\n value: currentValue,\n ariaLabel: 'Bearer token',\n type: 'password',\n });\n const toggleVis = createButton({\n variant: 'icon',\n icon: icons.key,\n ariaLabel: 'Show/Hide',\n className: 'l secondary u-text-muted',\n onClick: () => { input.type = input.type === 'password' ? 'text' : 'password'; },\n });\n input.addEventListener('input', () => store.setSchemeValue(name, input.value));\n inputWrap.append(input, toggleVis);\n row.append(h('label', { className: 'modal label', textContent: 'Token' }), inputWrap);\n container.append(row);\n focusNextFrame(input);\n } else if (type === 'http' && schemeLower === 'basic') {\n // Basic auth — username + password\n const credentials = decodeBasicAuth(currentValue);\n const userInput = createModalTextInput({\n placeholder: 'Username',\n value: credentials.username,\n ariaLabel: 'Username',\n });\n container.append(createModalField('Username', userInput));\n\n const passInput = createModalTextInput({\n placeholder: 'Password',\n value: credentials.password,\n ariaLabel: 'Password',\n type: 'password',\n });\n container.append(createModalField('Password', passInput));\n\n const updateBasic = () => {\n const raw = `${userInput.value}:${passInput.value}`;\n const encoded = raw === ':' ? '' : encodeUtf8Base64(raw);\n store.setSchemeValue(name, encoded);\n };\n userInput.addEventListener('input', updateBasic);\n passInput.addEventListener('input', updateBasic);\n\n focusNextFrame(userInput);\n } else if (type === 'apiKey') {\n // API Key — single input\n const row = h('div', { className: 'modal field' });\n const inputWrap = h('div', { className: 'modal input-wrap' });\n const input = createModalTextInput({\n placeholder: `${scheme.name || 'API key'}...`,\n value: currentValue,\n ariaLabel: 'API key',\n type: 'password',\n });\n\n const toggleVis = createButton({\n variant: 'icon',\n icon: icons.key,\n ariaLabel: 'Show/Hide',\n className: 'l secondary u-text-muted',\n onClick: () => { input.type = input.type === 'password' ? 'text' : 'password'; },\n });\n\n input.addEventListener('input', () => {\n store.setSchemeValue(name, input.value);\n });\n\n inputWrap.append(input, toggleVis);\n row.append(h('label', { className: 'modal label', textContent: `API Key (${scheme.name || 'key'})` }), inputWrap);\n container.append(row);\n\n focusNextFrame(input);\n } else {\n // OAuth2 / OpenID / unknown — just show a token input as fallback\n const input = createModalTextInput({\n placeholder: 'Token...',\n value: currentValue,\n ariaLabel: 'Token',\n type: 'password',\n });\n\n input.addEventListener('input', () => {\n store.setSchemeValue(name, input.value);\n });\n\n container.append(createModalField('Token / Credential', input));\n focusNextFrame(input);\n }\n}\n\n/** Open authentication settings modal */\nexport function openAuthModal(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n initialScheme?: string,\n): void {\n if (modalBase) close();\n\n const schemes = Object.entries(securitySchemes);\n if (schemes.length === 0) return;\n\n const shell = createModalBase({\n overlayClass: 'modal overlay',\n modalClass: 'modal container',\n ariaLabel: 'Authentication Settings',\n dataOverlayAttr: 'data-auth-overlay',\n onClose: () => {\n cleanupModalSync();\n modalBase = null;\n },\n });\n modalBase = shell;\n const modal = shell.modal;\n\n // Header\n const header = h('div', { className: 'modal header' });\n header.append(h('h2', { className: 'modal title', textContent: 'Authentication' }));\n const closeBtn = createButton({ variant: 'icon', icon: icons.close, ariaLabel: 'Close', onClick: close });\n header.append(closeBtn);\n modal.append(header);\n\n // Body\n const body = h('div', { className: 'modal body' });\n\n // Scheme tabs (if multiple)\n let selectedName = initialScheme || store.get().auth.activeScheme || schemes[0][0];\n // Ensure selectedName is valid\n if (!securitySchemes[selectedName]) selectedName = schemes[0][0];\n\n const fieldsContainer = h('div', { className: 'modal fields' });\n\n if (schemes.length > 1) {\n const tabs = h('div', { className: 'modal tabs' });\n const tabByScheme = new Map<string, HTMLButtonElement>();\n const tabButtons: HTMLButtonElement[] = [];\n const renderTabContent = (tab: HTMLButtonElement, name: string, scheme: SecurityScheme): void => {\n const configured = isSchemeConfigured(name);\n tab.setAttribute('data-configured', configured ? 'true' : 'false');\n clear(tab);\n\n if (configured) {\n const check = h('span', { className: 'modal tab-check', 'aria-hidden': 'true' });\n check.innerHTML = icons.check;\n tab.append(check);\n }\n\n tab.append(h('span', { className: 'modal tab-label', textContent: schemeBadge(scheme) }));\n };\n\n for (const [name, scheme] of schemes) {\n const tab = h('button', {\n type: 'button',\n className: 'modal tab',\n 'aria-pressed': name === selectedName ? 'true' : 'false',\n }) as HTMLButtonElement;\n renderTabContent(tab, name, scheme);\n\n tab.addEventListener('click', () => {\n if (selectedName === name) return;\n selectedName = name;\n for (const t of tabButtons) t.setAttribute('aria-pressed', 'false');\n tab.setAttribute('aria-pressed', 'true');\n updateDescription();\n renderSchemeFields(name, scheme, fieldsContainer);\n });\n\n tabByScheme.set(name, tab);\n tabButtons.push(tab);\n tabs.append(tab);\n }\n\n cleanupAuthModalSync = store.subscribe(() => {\n for (const [name, scheme] of schemes) {\n const tab = tabByScheme.get(name);\n if (!tab) continue;\n renderTabContent(tab, name, scheme);\n }\n });\n\n body.append(tabs);\n }\n\n // Scheme description\n const descEl = h('div', { className: 'modal scheme-desc' });\n function updateDescription() {\n const scheme = securitySchemes[selectedName];\n if (!scheme) return;\n clear(descEl);\n const title = h('div', { className: 'modal scheme-title', textContent: schemeLabel(scheme) });\n descEl.append(title);\n if (scheme.description) {\n descEl.append(h('div', { className: 'modal scheme-text', textContent: scheme.description }));\n }\n }\n updateDescription();\n body.append(descEl);\n\n // Fields\n const currentScheme = securitySchemes[selectedName];\n if (currentScheme) {\n renderSchemeFields(selectedName, currentScheme, fieldsContainer);\n }\n body.append(fieldsContainer);\n\n modal.append(body);\n\n // Footer\n const footer = h('div', { className: 'modal footer' });\n\n const clearBtn = createButton({\n variant: 'ghost',\n label: 'Reset',\n onClick: () => {\n store.setSchemeValue(selectedName, '');\n const scheme = securitySchemes[selectedName];\n if (scheme) renderSchemeFields(selectedName, scheme, fieldsContainer);\n },\n });\n\n const doneBtn = createButton({ variant: 'primary', label: 'Done', onClick: close });\n\n footer.append(clearBtn, h('div', { className: 'grow' }), doneBtn);\n modal.append(footer);\n\n shell.mount(portalRoot ?? document.querySelector('.root') ?? document.body);\n}\n\n/** Get human-readable configured scheme label for display */\nexport function getSchemeStatusLabel(name: string, scheme: SecurityScheme): string {\n const value = store.get().auth.schemes[name];\n if (!value) return 'Not configured';\n return `Configured ${schemeBadge(scheme)}`;\n}\n\n/** Check if a specific scheme is configured */\nexport function isSchemeConfigured(name: string): boolean {\n return !!(store.get().auth.schemes[name]);\n}\n\n/** Check if operation's auth requirements are satisfied (token/schemes configured) */\nexport function isOperationAuthConfigured(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): boolean {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n const resolved = resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token);\n return Object.keys(resolved.headers).length > 0 ||\n Object.keys(resolved.query).length > 0 ||\n Object.keys(resolved.cookies).length > 0;\n}\n\n/** Resolve auth headers for an operation's security requirements */\nexport function resolveAuthHeaders(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).headers;\n}\n\n/** Resolve auth query params for an operation's security requirements */\nexport function resolveAuthQuery(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).query;\n}\n\n/** Resolve auth cookie values for an operation's security requirements */\nexport function resolveAuthCookies(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).cookies;\n}\n\n/** Get placeholder header value for display (when no token configured) */\nexport function getAuthHeaderPlaceholder(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n return getOperationAuthHeaderPlaceholders(info);\n}\n\nfunction toOperationSecurityInfo(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): OperationSecurityInfo | undefined {\n if (!security) return undefined;\n if (Array.isArray(security)) return resolveOperationSecurityInfo(security, securitySchemes, false);\n return security;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { search } from '../../core/search';\nimport { navigate, buildPath } from '../../core/router';\nimport { createBadge, createInput } from '../ui';\nimport { createModalBase, type ModalBase } from './modal-base';\nimport { isOperationAuthConfigured } from './auth-modal';\nimport type { SearchEntry } from '../../core/types';\n\nlet focusedIndex = -1;\nlet modalBase: ModalBase | null = null;\nlet shortcutHandler: ((event: KeyboardEvent) => void) | null = null;\n\n/** Render and show the search modal */\nexport function showSearchModal(): void {\n // Close existing\n closeSearchModal();\n\n const shell = createModalBase({\n overlayClass: 'modal overlay search-modal-overlay',\n modalClass: 'modal container search-modal',\n ariaLabel: 'Search API',\n dataOverlayAttr: 'data-search-overlay',\n onClose: () => {\n modalBase = null;\n store.set({ searchOpen: false });\n },\n });\n modalBase = shell;\n const modal = shell.modal;\n\n // Input\n const inputWrap = h('div', { className: 'search-input-wrap' });\n inputWrap.innerHTML = icons.search;\n const input = createInput({\n className: 'search-input',\n placeholder: 'Search endpoints, schemas...',\n ariaLabel: 'Search',\n });\n const escHint = h('kbd', { textContent: 'ESC', className: 'kbd' });\n inputWrap.append(input, escHint);\n modal.append(inputWrap);\n\n // Results\n const results = h('div', { className: 'search-results', role: 'listbox' });\n const empty = h('div', { className: 'search-empty', textContent: 'Type to search across endpoints and schemas' });\n results.append(empty);\n modal.append(results);\n\n // Footer\n const footer = h('div', { className: 'search-footer' });\n footer.innerHTML = '<span><kbd class=\"kbd\">↑</kbd> <kbd class=\"kbd\">↓</kbd> Navigate</span><span><kbd class=\"kbd\">↵</kbd> Select</span><span><kbd class=\"kbd\">ESC</kbd> Close</span>';\n modal.append(footer);\n\n // Mount inside root to inherit theme CSS variables\n shell.mount(document.querySelector('.root') ?? document.body);\n\n // Focus input\n requestAnimationFrame(() => input.focus());\n focusedIndex = -1;\n\n // Search handler\n let currentResults: SearchEntry[] = [];\n input.addEventListener('input', () => {\n const query = input.value;\n currentResults = search(query);\n renderResults(results, currentResults);\n setFocusedResult(results, currentResults.length > 0 ? 0 : -1);\n });\n\n // Keyboard navigation\n input.addEventListener('keydown', (e: Event) => {\n const ke = e as KeyboardEvent;\n if (ke.key === 'ArrowDown') {\n ke.preventDefault();\n if (currentResults.length > 0) {\n setFocusedResult(results, Math.min(focusedIndex + 1, currentResults.length - 1));\n }\n } else if (ke.key === 'ArrowUp') {\n ke.preventDefault();\n if (currentResults.length > 0) {\n setFocusedResult(results, Math.max(focusedIndex - 1, 0));\n }\n } else if (ke.key === 'Enter') {\n ke.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < currentResults.length) {\n selectResult(currentResults[focusedIndex]);\n }\n } else if (ke.key === 'Escape') {\n ke.preventDefault();\n closeSearchModal();\n }\n });\n}\n\n/** Close the search modal */\nexport function closeSearchModal(): void {\n if (modalBase) {\n modalBase.close();\n return;\n }\n const overlay = document.querySelector('[data-search-overlay]');\n if (overlay) overlay.remove();\n store.set({ searchOpen: false });\n}\n\nfunction renderResults(container: HTMLElement, results: SearchEntry[]): void {\n clear(container);\n\n if (results.length === 0) {\n container.append(h('div', { className: 'search-empty', textContent: 'No results found' }));\n return;\n }\n\n const fragment = document.createDocumentFragment();\n results.forEach((entry, i) => {\n const item = h('div', {\n className: 'search-result',\n role: 'option',\n 'aria-selected': 'false',\n 'data-index': String(i),\n });\n\n if (entry.method) {\n item.append(createBadge({\n text: entry.method.toUpperCase(),\n kind: 'method',\n method: entry.method,\n mono: true,\n }));\n } else if (entry.type === 'schema') {\n item.append(createBadge({ text: 'SCH', kind: 'chip', size: 'm', mono: true }));\n } else if (entry.type === 'tag') {\n item.append(createBadge({ text: 'TAG', kind: 'chip', size: 'm', mono: true }));\n }\n\n const info = h('div', { className: 'search-result-info min-w-0' });\n info.append(h('span', { className: 'search-result-title', textContent: entry.title }));\n if (entry.subtitle) {\n info.append(h('span', { className: 'search-result-subtitle', textContent: entry.subtitle }));\n }\n item.append(info);\n if (entry.method && entry.requiresAuth && entry.resolvedSecurity) {\n const spec = store.get().spec;\n const configured = isOperationAuthConfigured(entry.resolvedSecurity, spec?.securitySchemes || {});\n item.append(h('span', {\n className: `search-result-lock search-result-lock--${configured ? 'configured' : 'required'}`,\n innerHTML: configured ? icons.unlock : icons.lock,\n 'aria-label': entry.authTitle || 'Requires authentication',\n }));\n }\n\n item.addEventListener('click', () => selectResult(entry));\n item.addEventListener('mouseenter', () => {\n setFocusedResult(container, i);\n });\n\n fragment.append(item);\n });\n container.append(fragment);\n}\n\nfunction setFocusedResult(container: HTMLElement, index: number): void {\n if (focusedIndex === index) return;\n\n if (focusedIndex >= 0) {\n const prev = container.querySelector<HTMLElement>(`.search-result[data-index=\"${focusedIndex}\"]`);\n if (prev) {\n prev.classList.remove('focused');\n prev.setAttribute('aria-selected', 'false');\n }\n }\n\n focusedIndex = index;\n if (index < 0) return;\n\n const next = container.querySelector<HTMLElement>(`.search-result[data-index=\"${index}\"]`);\n if (!next) return;\n next.classList.add('focused');\n next.setAttribute('aria-selected', 'true');\n next.scrollIntoView({ block: 'nearest' });\n}\n\nfunction selectResult(entry: SearchEntry): void {\n closeSearchModal();\n\n if (entry.type === 'operation') {\n navigate(buildPath({\n type: 'endpoint',\n tag: entry.tag || 'default',\n method: entry.method!,\n path: entry.path!,\n operationId: entry.operationId,\n }));\n } else if (entry.type === 'schema') {\n navigate(buildPath({ type: 'schema', schemaName: entry.schemaName! }));\n } else if (entry.type === 'tag' && entry.tag) {\n navigate(buildPath({ type: 'tag', tag: entry.tag }));\n } else if (entry.type === 'webhook' && entry.webhookName) {\n navigate(buildPath({ type: 'webhook', webhookName: entry.webhookName }));\n }\n}\n\n/** Setup global keyboard shortcut for search */\nexport function setupSearchShortcut(): () => void {\n if (shortcutHandler) {\n document.removeEventListener('keydown', shortcutHandler);\n }\n\n shortcutHandler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n const state = store.get();\n if (state.searchOpen) {\n closeSearchModal();\n } else {\n store.set({ searchOpen: true });\n showSearchModal();\n }\n }\n };\n\n document.addEventListener('keydown', shortcutHandler);\n\n return () => {\n if (shortcutHandler) {\n document.removeEventListener('keydown', shortcutHandler);\n shortcutHandler = null;\n }\n };\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { navigate, buildPath, parsePath, slugifyTag } from '../../core/router';\nimport { toggleTheme } from '../../core/theme';\nimport { formatBaseUrlForDisplay } from '../../services/env';\nimport { showSearchModal } from '../modals/search-modal';\nimport { openAuthModal } from '../modals/auth-modal';\nimport { isOperationAuthConfigured, isSchemeConfigured } from '../modals/auth-modal';\nimport { formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport { createBadge, createSelect, createInput, createLockIcon } from '../ui';\nimport type { PortalConfig } from '../../core/types';\nimport type { SpecTag, SpecOperation, RouteInfo } from '../../core/types';\n\n/** Update active state of items and expand group with active route */\nexport function updateSidebarActiveState(container: HTMLElement, currentRoute: RouteInfo): void {\n const items = container.querySelectorAll('.nav-item');\n let activeEl: HTMLAnchorElement | null = null;\n\n for (const el of items) {\n const a = el as HTMLAnchorElement;\n const routeFromDataset = parseRouteFromDataset(a);\n const href = a.getAttribute('href');\n if (!href && !routeFromDataset) continue;\n const path = href?.startsWith('#') ? href.slice(1) : href || '';\n const route = routeFromDataset || parsePath(path);\n const isActive = isRouteMatch(route, currentRoute);\n el.classList.toggle('active', isActive);\n if (isActive) {\n a.setAttribute('aria-current', 'page');\n activeEl = a;\n } else {\n a.removeAttribute('aria-current');\n }\n }\n\n // Expand group containing active endpoint or tag\n const activeGroup = activeEl ? (activeEl.closest('.nav-group') as HTMLElement | null) : null;\n if (activeGroup) {\n const activeHeader = activeGroup.querySelector('.nav-group-header');\n const activeItems = activeGroup.querySelector('.nav-group-items');\n if (activeHeader instanceof HTMLElement && activeItems instanceof HTMLElement) {\n setNavGroupExpanded(activeHeader, activeItems, true);\n }\n }\n\n const tagToExpand = currentRoute.type === 'endpoint' ? currentRoute.tag\n : currentRoute.type === 'tag' ? currentRoute.tag\n : null;\n const expandSlug = currentRoute.type === 'schema' ? 'schemas'\n : currentRoute.type === 'webhook' ? 'webhooks'\n : tagToExpand ? slugifyTag(tagToExpand) : null;\n\n if (expandSlug) {\n const group = container.querySelector(`[data-nav-tag=\"${CSS.escape(expandSlug)}\"]`) as HTMLElement | null;\n if (group) {\n const header = group.querySelector('.nav-group-header');\n const itemsWrap = group.querySelector('.nav-group-items');\n if (header instanceof HTMLElement && itemsWrap instanceof HTMLElement) {\n setNavGroupExpanded(header, itemsWrap, true);\n }\n }\n }\n\n // Scroll group header to top so the full group is visible\n if (activeEl) {\n requestAnimationFrame(() => {\n const group = (activeEl as HTMLElement).closest('.nav-group');\n const scrollTarget = group?.querySelector('.nav-group-header') as HTMLElement | null;\n if (scrollTarget) {\n scrollTarget.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else {\n (activeEl as HTMLElement).scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n });\n }\n}\n\n/**\n * Lightweight update: patch only auth-related elements in the sidebar\n * (lock icons on endpoints + top auth button) without full re-render.\n */\nexport function updateSidebarAuthState(container: HTMLElement): void {\n const state = store.get();\n const spec = state.spec;\n if (!spec) return;\n\n const schemes = spec.securitySchemes || {};\n\n // 1. Update the auth button icon (lock / unlock)\n const authBtn = container.querySelector('[data-sidebar-auth-btn]') as HTMLElement | null;\n if (authBtn) {\n const schemeNames = Object.keys(schemes);\n const activeScheme = state.auth.activeScheme || schemeNames[0] || '';\n const hasToken = isSchemeConfigured(activeScheme);\n authBtn.innerHTML = hasToken ? icons.unlock : icons.lock;\n authBtn.classList.toggle('active', hasToken);\n }\n\n // 2. Update lock icons inside nav items\n const lockSlots = container.querySelectorAll('[data-lock-slot]');\n // Build a quick lookup: operationId -> SpecOperation\n const opById = new Map<string, SpecOperation>();\n const opByKey = new Map<string, SpecOperation>();\n for (const op of spec.operations) {\n if (op.operationId) opById.set(op.operationId, op);\n opByKey.set(`${op.method.toLowerCase()} ${op.path}`, op);\n }\n\n for (const slot of lockSlots) {\n const navItem = slot.closest('.nav-item') as HTMLElement | null;\n if (!navItem) continue;\n\n const opId = navItem.dataset.routeOperationId;\n const method = navItem.dataset.routeMethod;\n const path = navItem.dataset.routePath;\n const op = (opId && opById.get(opId)) || (method && path ? opByKey.get(`${method.toLowerCase()} ${path}`) : null);\n if (!op) continue;\n\n const configured = isOperationAuthConfigured(op.resolvedSecurity, schemes);\n const newLock = createLockIcon({\n configured,\n variant: 'nav',\n title: formatOperationAuthTitle(op.resolvedSecurity),\n });\n slot.innerHTML = '';\n slot.append(newLock);\n }\n}\n\n/** Render the sidebar navigation */\nexport function renderSidebar(container: HTMLElement, config: PortalConfig): void {\n const state = store.get();\n const spec = state.spec;\n if (!spec) return;\n\n clear(container);\n\n const title = config.title || spec.info.title || 'API Docs';\n const version = spec.info.version ? `v${spec.info.version}` : '';\n\n // Top section: collapse + MS name + description\n const topSection = h('div', { className: 'top' });\n const collapseBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted',\n 'aria-label': 'Collapse sidebar',\n });\n collapseBtn.innerHTML = icons.chevronLeft;\n collapseBtn.addEventListener('click', () => store.set({ sidebarOpen: false }));\n\n const titleBlock = h('a', { className: 'title', href: '/', textContent: title });\n titleBlock.addEventListener('click', (e: Event) => { e.preventDefault(); navigate('/'); });\n\n const titleWrap = h('div', { className: 'title-wrap' });\n titleWrap.append(titleBlock);\n if (version) titleWrap.append(h('span', { className: 'version', textContent: version }));\n topSection.append(collapseBtn, titleWrap);\n\n // Auth button moved to top bar\n if (spec.securitySchemes && Object.keys(spec.securitySchemes).length > 0) {\n const schemeNames = Object.keys(spec.securitySchemes);\n const activeScheme = state.auth.activeScheme || schemeNames[0] || '';\n const hasToken = isSchemeConfigured(activeScheme);\n\n const authBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted theme',\n 'aria-label': 'Configure authentication',\n 'data-sidebar-auth-btn': '',\n });\n authBtn.innerHTML = hasToken ? icons.unlock : icons.lock;\n authBtn.classList.toggle('active', hasToken);\n authBtn.addEventListener('click', () => {\n const currentState = store.get();\n const currentScheme = currentState.auth.activeScheme || schemeNames[0] || '';\n openAuthModal(\n spec!.securitySchemes, \n (container.closest('.root') as HTMLElement | null) ?? undefined, \n currentScheme,\n );\n });\n\n topSection.append(authBtn);\n }\n\n const themeBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted theme',\n 'aria-label': 'Toggle theme',\n });\n themeBtn.innerHTML = store.get().theme === 'light' ? icons.moon : icons.sun;\n themeBtn.addEventListener('click', () => {\n toggleTheme();\n themeBtn.innerHTML = store.get().theme === 'light' ? icons.moon : icons.sun;\n });\n\n container.append(topSection);\n\n // Environment selector\n if (state.environments.length > 1) {\n const envSelect = renderEnvironmentSelector(state);\n container.append(envSelect);\n }\n\n // Search\n const searchWrap = h('div', { className: 'search' });\n const searchIcon = h('span', { className: 'search-icon', innerHTML: icons.search });\n const searchInput = createInput({\n className: 'search-input',\n placeholder: 'Search endpoints...',\n ariaLabel: 'Search endpoints',\n });\n const kbd = h('span', { className: 'kbd', textContent: '⌘K' });\n\n searchInput.addEventListener('focus', () => {\n store.set({ searchOpen: true });\n searchInput.blur();\n showSearchModal();\n });\n\n searchWrap.append(searchIcon, searchInput, kbd);\n container.append(searchWrap);\n\n // Navigation\n const nav = h('nav', { className: 'nav', 'aria-label': 'API navigation' });\n\n // Overview link — highlighted first item (icon in 60px slot like method badge for alignment)\n const overviewItem = createOverviewNavItem({ type: 'overview' }, state.route);\n nav.append(overviewItem);\n\n // Tag groups\n for (const tag of spec.tags) {\n if (tag.operations.length === 0) continue;\n const group = createTagGroup(tag, state.route, state);\n nav.append(group);\n }\n\n // Webhooks section\n if (spec.webhooks && spec.webhooks.length > 0) {\n const whGroup = h('div', { className: 'nav-group', 'data-nav-tag': 'webhooks' });\n const whListRoute: RouteInfo = { type: 'webhook' };\n const whHeader = createLinkedGroupHeader('Webhooks', spec.webhooks.length, whListRoute, state.route);\n const whItems = h('div', { className: 'nav-group-items collapsed' });\n\n for (const wh of spec.webhooks) {\n const route: RouteInfo = { type: 'webhook', webhookName: wh.name };\n const item = createNavItem(wh.summary || wh.name, wh.method, route, state.route);\n item.classList.add('nav-item-webhook');\n whItems.append(item);\n }\n\n whHeader.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.nav-group-link')) return;\n setNavGroupExpanded(whHeader, whItems);\n });\n\n const whLink = whHeader.querySelector('.nav-group-link');\n if (whLink) whLink.addEventListener('click', () => setNavGroupExpanded(whHeader, whItems, true), { capture: true });\n\n const isActiveWebhook = state.route.type === 'webhook';\n setNavGroupExpanded(whHeader, whItems, isActiveWebhook, { instant: true });\n whGroup.append(whHeader, whItems);\n nav.append(whGroup);\n }\n\n // Schemas section\n const schemaNames = Object.keys(spec.schemas);\n if (schemaNames.length > 0) {\n const schemasGroup = h('div', { className: 'nav-group' });\n const schemasListRoute: RouteInfo = { type: 'schema' };\n const schemasHeader = createLinkedGroupHeader('Schemas', schemaNames.length, schemasListRoute, state.route);\n const schemasItems = h('div', { className: 'nav-group-items collapsed' });\n\n for (const name of schemaNames) {\n const route: RouteInfo = { type: 'schema', schemaName: name };\n const item = createNavItem(name, undefined, route, state.route);\n schemasItems.append(item);\n }\n\n schemasHeader.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.nav-group-link')) return;\n setNavGroupExpanded(schemasHeader, schemasItems);\n });\n\n const schemasLink = schemasHeader.querySelector('.nav-group-link');\n if (schemasLink) schemasLink.addEventListener('click', () => setNavGroupExpanded(schemasHeader, schemasItems, true), { capture: true });\n\n const isActiveSchema = state.route.type === 'schema';\n setNavGroupExpanded(schemasHeader, schemasItems, isActiveSchema, { instant: true });\n schemasGroup.setAttribute('data-nav-tag', 'schemas');\n schemasGroup.append(schemasHeader, schemasItems);\n nav.append(schemasGroup);\n }\n\n container.append(nav);\n\n // Footer: credit + theme button\n const footer = h('div', { className: 'footer' });\n\n // Logo button\n const logoBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted theme',\n 'aria-label': 'PureDocs',\n });\n // Import the logo SVG content\n logoBtn.innerHTML = `<svg viewBox=\"0 0 593 465\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(0,465) scale(0.1,-0.1)\" fill=\"currentColor\" stroke=\"none\">\n <path d=\"M895 4308 c-41 -15 -105 -56 -128 -82 -10 -12 -28 -41 -40 -66 l-22 -45 -3 -983 c-2 -618 1 -983 7 -980 5 1 66 37 135 78 l126 75 1 335 c1 184 3 570 4 857 4 588 1 569 78 604 40 18 83 19 1140 19 l1097 0 0 -192 c0 -106 3 -264 7 -351 7 -173 14 -195 76 -241 27 -20 43 -21 385 -26 l357 -5 3 -1363 c2 -1336 2 -1365 -18 -1408 -34 -78 22 -74 -962 -74 l-873 0 -50 -26 c-28 -15 -109 -60 -181 -101 l-131 -74 -287 -1 -287 -2 -29 30 c-16 16 -51 58 -77 92 -45 59 -63 73 -278 201 l-230 137 -3 -175 c-2 -142 0 -184 13 -218 21 -54 84 -119 143 -146 l47 -22 1640 0 1640 0 51 27 c27 14 67 45 87 67 71 79 67 -20 67 1607 0 804 -3 1475 -6 1491 -4 23 -122 147 -474 502 l-467 471 -1264 -1 c-877 0 -1273 -4 -1294 -11z\"/>\n <path d=\"M5361 3645 c-2 -51 -36 -167 -69 -231 -64 -126 -193 -201 -407 -237 -11 -2 10 -9 46 -15 239 -43 359 -147 414 -357 8 -32 15 -74 15 -93 0 -19 4 -31 10 -27 6 3 10 18 10 32 0 48 32 157 62 215 62 116 174 191 343 227 50 10 78 19 64 20 -44 2 -180 41 -232 67 -113 58 -185 161 -223 319 -9 39 -20 79 -25 90 -6 17 -8 15 -8 -10z\"/>\n <path d=\"M1354 3527 c-3 -8 -4 -45 -2 -83 l3 -69 743 -3 742 -2 0 85 0 85 -740 0 c-612 0 -742 -2 -746 -13z\"/>\n <path d=\"M1350 3005 l0 -75 1185 0 1186 0 -3 68 -3 67 -120 6 c-66 4 -598 7 -1182 8 l-1063 1 0 -75z\"/>\n <path d=\"M2033 2638 c-6 -7 -41 -137 -78 -288 -79 -327 -349 -1427 -405 -1656 -22 -89 -40 -170 -40 -181 0 -23 -11 -20 208 -49 115 -16 134 -16 146 -3 7 7 35 102 61 209 26 107 87 359 136 560 49 201 125 514 169 695 44 182 96 393 115 469 21 87 30 146 25 155 -7 13 -150 58 -311 97 -9 3 -21 -1 -26 -8z\"/>\n <path d=\"M4810 2585 c0 -28 -34 -68 -73 -85 l-38 -17 30 -12 c36 -16 66 -47 82 -86 l12 -30 8 29 c10 36 42 71 80 87 l30 12 -38 17 c-39 17 -73 57 -73 85 0 8 -4 15 -10 15 -5 0 -10 -7 -10 -15z\"/>\n <path d=\"M2706 2230 c-48 -58 -136 -197 -136 -217 0 -20 121 -106 587 -416 84 -56 153 -106 153 -110 0 -4 -34 -29 -75 -55 -68 -43 -272 -171 -510 -321 -49 -32 -150 -95 -222 -141 -73 -46 -133 -88 -133 -93 0 -5 35 -63 77 -129 52 -80 84 -120 99 -124 23 -6 174 85 739 441 182 115 345 216 438 273 77 47 107 83 107 132 0 22 -5 50 -11 64 -7 15 -77 69 -173 134 -843 570 -877 592 -898 592 -9 0 -28 -14 -42 -30z\"/>\n <path d=\"M1205 2171 c-145 -90 -429 -266 -510 -316 -374 -230 -527 -328 -544 -349 -7 -8 -15 -34 -18 -57 -9 -61 17 -102 91 -146 67 -40 298 -183 650 -403 298 -185 323 -200 346 -200 22 0 160 211 160 245 0 12 -8 29 -17 38 -18 15 -433 278 -610 386 -51 30 -93 58 -93 61 0 5 526 336 710 447 36 22 66 47 68 55 2 9 -30 69 -70 134 -65 105 -77 119 -103 122 -17 1 -43 -6 -60 -17z\"/>\n </g>\n </svg>`;\n logoBtn.addEventListener('click', () => {\n window.open('https://puredocs.dev', '_blank', 'noopener,noreferrer');\n });\n\n const credit = h('a', {\n className: 'credit',\n href: 'https://puredocs.dev',\n target: '_blank',\n rel: 'noopener noreferrer',\n });\n credit.textContent = `puredocs.dev${version ? ` ${version}` : ''}`;\n \n footer.append(logoBtn, credit);\n\n // Theme button moved to footer\n footer.append(themeBtn);\n\n container.append(footer);\n\n // Scroll group header to top after initial render\n requestAnimationFrame(() => {\n const activeItem = nav.querySelector('.nav-item.active') as HTMLElement | null;\n if (activeItem) {\n const group = activeItem.closest('.nav-group');\n const scrollTarget = group?.querySelector('.nav-group-header') as HTMLElement | null;\n if (scrollTarget) {\n scrollTarget.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else {\n activeItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n });\n}\n\nfunction createTagGroup(tag: SpecTag, currentRoute: RouteInfo, state: { route: RouteInfo }): HTMLElement {\n const group = h('div', { className: 'nav-group', 'data-nav-tag': slugifyTag(tag.name) });\n const header = createTagGroupHeader(tag, currentRoute);\n const items = h('div', { className: 'nav-group-items collapsed' });\n\n const tagSlug = slugifyTag(tag.name);\n const isActiveTag = (currentRoute.type === 'tag' && slugifyTag(currentRoute.tag || '') === tagSlug)\n || tag.operations.some((op) => isRouteMatch(routeForOp(op, tag.name), currentRoute));\n\n for (const op of tag.operations) {\n const route = routeForOp(op, tag.name);\n const item = createEndpointNavItem(op, route, currentRoute);\n items.append(item);\n }\n\n header.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.nav-group-link')) return;\n setNavGroupExpanded(header, items);\n });\n\n const link = header.querySelector('.nav-group-link');\n if (link) {\n link.addEventListener('click', (e: Event) => {\n setNavGroupExpanded(header, items, true);\n }, { capture: true });\n }\n\n setNavGroupExpanded(header, items, isActiveTag, { instant: true });\n\n group.append(header, items);\n return group;\n}\n\nfunction createTagGroupHeader(tag: SpecTag, currentRoute: RouteInfo): HTMLElement {\n const tagSlug = slugifyTag(tag.name);\n const isActiveTag = (currentRoute.type === 'tag' && slugifyTag(currentRoute.tag || '') === tagSlug)\n || tag.operations.some((op) => isRouteMatch(routeForOp(op, tag.name), currentRoute));\n\n const header = h('div', { className: 'nav-group-header focus-ring', 'aria-expanded': String(isActiveTag), tabIndex: 0 });\n\n const chevronBtn = h('button', {\n type: 'button',\n className: 'nav-group-chevron',\n 'aria-label': isActiveTag ? 'Collapse' : 'Expand',\n });\n chevronBtn.innerHTML = icons.chevronRight;\n chevronBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n header.click();\n });\n\n const link = h('a', {\n className: 'nav-group-link',\n href: buildPath({ type: 'tag', tag: tag.name }),\n });\n link.append(\n h('span', { className: 'nav-group-title', textContent: tag.name }),\n h('span', { className: 'nav-group-count', textContent: String(tag.operations.length) }),\n );\n link.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath({ type: 'tag', tag: tag.name }));\n });\n\n header.append(chevronBtn, link);\n\n header.addEventListener('keydown', (e: Event) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n chevronBtn.click();\n }\n });\n\n return header;\n}\n\nfunction createLinkedGroupHeader(name: string, count: number, listRoute: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = currentRoute.type === listRoute.type;\n\n const header = h('div', { className: 'nav-group-header focus-ring', 'aria-expanded': String(isActive), tabIndex: 0 });\n\n const chevronBtn = h('button', {\n type: 'button',\n className: 'nav-group-chevron',\n 'aria-label': isActive ? 'Collapse' : 'Expand',\n });\n chevronBtn.innerHTML = icons.chevronRight;\n chevronBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n header.click();\n });\n\n const link = h('a', {\n className: 'nav-group-link',\n href: buildPath(listRoute),\n });\n link.append(\n h('span', { className: 'nav-group-title', textContent: name }),\n h('span', { className: 'nav-group-count', textContent: String(count) }),\n );\n link.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(listRoute));\n });\n\n header.append(chevronBtn, link);\n\n header.addEventListener('keydown', (e: Event) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n chevronBtn.click();\n }\n });\n\n return header;\n}\n\nfunction createGroupHeader(name: string, count: number): HTMLElement {\n const header = h('div', { className: 'nav-group-header focus-ring', role: 'button', 'aria-expanded': 'true', tabindex: '0' });\n\n const chevronBtn = h('button', {\n type: 'button',\n className: 'nav-group-chevron',\n 'aria-label': 'Toggle section',\n });\n chevronBtn.innerHTML = icons.chevronRight;\n chevronBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n header.click();\n });\n\n const label = h('span', { className: 'nav-group-link nav-group-link--static' });\n label.append(\n h('span', { className: 'nav-group-title', textContent: name }),\n h('span', { className: 'nav-group-count', textContent: String(count) }),\n );\n header.append(chevronBtn, label);\n\n header.addEventListener('keydown', (e: Event) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n header.click();\n }\n });\n\n return header;\n}\n\nconst NAV_EXPAND_DURATION = 260;\nconst NAV_EASING = 'cubic-bezier(0.25, 0.8, 0.25, 1)';\nconst activeExpandAnims = new WeakMap<HTMLElement, Animation>();\n\nfunction setNavGroupExpanded(\n header: HTMLElement,\n items: HTMLElement,\n expanded: boolean = !header.classList.contains('expanded'),\n options: { instant?: boolean } = {},\n): void {\n const wasExpanded = header.classList.contains('expanded');\n if (wasExpanded === expanded) return;\n\n const running = activeExpandAnims.get(items);\n if (running) {\n running.cancel();\n activeExpandAnims.delete(items);\n }\n\n header.classList.toggle('expanded', expanded);\n header.setAttribute('aria-expanded', String(expanded));\n updateGroupChevronAriaLabel(header, expanded);\n\n if (options.instant) {\n items.classList.toggle('collapsed', !expanded);\n items.style.maxHeight = '';\n items.style.overflow = '';\n return;\n }\n\n if (expanded) {\n items.classList.remove('collapsed');\n items.style.maxHeight = 'none';\n items.style.overflow = 'hidden';\n const endHeight = items.scrollHeight;\n items.style.maxHeight = '0';\n const anim = items.animate(\n [{ maxHeight: '0px' }, { maxHeight: `${endHeight}px` }],\n { duration: NAV_EXPAND_DURATION, easing: NAV_EASING, fill: 'forwards' },\n );\n activeExpandAnims.set(items, anim);\n anim.finished\n .then(() => {\n activeExpandAnims.delete(items);\n items.style.maxHeight = '';\n items.style.overflow = '';\n })\n .catch(() => {\n activeExpandAnims.delete(items);\n });\n } else {\n items.classList.remove('collapsed');\n const startHeight = items.scrollHeight;\n items.style.maxHeight = `${startHeight}px`;\n items.style.overflow = 'hidden';\n const anim = items.animate(\n [{ maxHeight: `${startHeight}px` }, { maxHeight: '0px' }],\n { duration: NAV_EXPAND_DURATION, easing: NAV_EASING, fill: 'forwards' },\n );\n activeExpandAnims.set(items, anim);\n anim.finished\n .then(() => {\n activeExpandAnims.delete(items);\n items.style.maxHeight = '';\n items.style.overflow = '';\n items.classList.add('collapsed');\n })\n .catch(() => {\n activeExpandAnims.delete(items);\n });\n }\n}\n\nfunction updateGroupChevronAriaLabel(header: HTMLElement, expanded: boolean): void {\n const chevron = header.querySelector('.nav-group-chevron');\n if (!(chevron instanceof HTMLElement)) return;\n chevron.setAttribute('aria-label', expanded ? 'Collapse' : 'Expand');\n}\n\nfunction createNavItem(label: string, method: string | undefined, route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item${isActive ? ' active' : ''}`,\n href: buildPath(route),\n role: 'link',\n 'aria-current': isActive ? 'page' : undefined,\n });\n\n const methodBadge = method\n ? createBadge({\n text: method.toUpperCase(),\n kind: 'method',\n method,\n mono: true,\n })\n : createBadge({\n text: 'GET',\n kind: 'method',\n method: 'get',\n mono: true,\n className: 'placeholder',\n });\n if (!method) methodBadge.setAttribute('aria-hidden', 'true');\n item.append(methodBadge);\n\n item.append(h('span', { className: 'nav-item-label', textContent: label }));\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction createOverviewNavItem(route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item nav-item-overview${isActive ? ' active' : ''}`,\n href: buildPath(route),\n role: 'link',\n 'aria-current': isActive ? 'page' : undefined,\n });\n\n const iconSlot = h('span', { className: 'nav-overview-icon-slot' });\n iconSlot.innerHTML = icons.globe;\n const label = h('span', { className: 'nav-item-label', textContent: 'Overview' });\n\n item.append(iconSlot, label);\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction createEndpointNavItem(op: SpecOperation, route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item${isActive ? ' active' : ''}${op.deprecated ? ' deprecated' : ''}`,\n href: buildPath(route),\n 'aria-current': isActive ? 'page' : undefined,\n });\n item.dataset.routeType = 'endpoint';\n if (route.operationId) item.dataset.routeOperationId = route.operationId;\n if (route.method) item.dataset.routeMethod = route.method;\n if (route.path) item.dataset.routePath = route.path;\n if (route.tag) item.dataset.routeTag = route.tag;\n\n const spec = store.get().spec;\n const needsAuth = hasOperationAuth(op.resolvedSecurity);\n const lockEl = needsAuth\n ? createLockIcon({\n configured: isOperationAuthConfigured(op.resolvedSecurity, spec?.securitySchemes || {}),\n variant: 'nav',\n title: formatOperationAuthTitle(op.resolvedSecurity),\n })\n : null;\n\n // Wrap lock in a slot so updateSidebarAuthState can patch it in-place\n const lockSlot = needsAuth ? h('span', { 'data-lock-slot': '' }) : null;\n if (lockSlot && lockEl) lockSlot.append(lockEl);\n\n item.append(\n createBadge({\n text: op.method.toUpperCase(),\n kind: 'method',\n method: op.method,\n mono: true,\n }),\n h('span', { className: 'nav-item-label', textContent: op.summary || op.path }),\n ...(lockSlot ? [lockSlot] : []),\n );\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction routeForOp(op: SpecOperation, tag: string): RouteInfo {\n return {\n type: 'endpoint',\n tag,\n method: op.method,\n path: op.path,\n operationId: op.operationId,\n };\n}\n\nfunction isRouteMatch(a: RouteInfo, b: RouteInfo): boolean {\n if (a.type !== b.type) return false;\n if (a.type === 'overview') return true;\n if (a.type === 'tag') return slugifyTag(a.tag || '') === slugifyTag(b.tag || '');\n if (a.type === 'endpoint') {\n if (a.operationId && b.operationId) return a.operationId === b.operationId;\n const methodA = (a.method || '').toLowerCase();\n const methodB = (b.method || '').toLowerCase();\n return methodA === methodB && normalizeEndpointPath(a.path) === normalizeEndpointPath(b.path);\n }\n if (a.type === 'schema') return a.schemaName === b.schemaName;\n if (a.type === 'webhook') return a.webhookName === b.webhookName;\n return false;\n}\n\nfunction normalizeEndpointPath(path: string | undefined): string {\n if (!path) return '/';\n const normalized = path.replace(/\\/+/g, '/').replace(/\\/+$/, '');\n return normalized || '/';\n}\n\nfunction parseRouteFromDataset(link: HTMLAnchorElement): RouteInfo | null {\n const { routeType } = link.dataset;\n if (!routeType) return null;\n\n if (routeType === 'endpoint') {\n return {\n type: 'endpoint',\n operationId: link.dataset.routeOperationId || undefined,\n method: link.dataset.routeMethod || undefined,\n path: link.dataset.routePath || undefined,\n tag: link.dataset.routeTag || undefined,\n };\n }\n\n return null;\n}\n\n/* ─── Environment Selector ─── */\n\n/** Update the sidebar env <select> value to match current activeEnvironment */\nexport function updateSidebarEnvironment(container: HTMLElement): void {\n const select = container.querySelector('select.env') as HTMLSelectElement | null;\n if (select) {\n const active = store.get().activeEnvironment;\n if (select.value !== active) select.value = active;\n }\n}\n\nfunction renderEnvironmentSelector(state: ReturnType<typeof store.get>): HTMLSelectElement {\n const canonical = state.initialEnvironments || state.environments;\n const options = state.environments.map((env) => {\n const c = canonical.find((e) => e.name === env.name);\n const url = formatBaseUrlForDisplay((c?.baseUrl ?? env.baseUrl) || '');\n return { value: env.name, label: url || '(no URL)' };\n });\n\n const select = createSelect({\n options,\n value: state.activeEnvironment,\n ariaLabel: 'Select server environment',\n onChange: (value) => store.setActiveEnvironment(value),\n className: 'env',\n });\n\n return select;\n}\n","import { h } from '../../lib/dom';\nimport { createBadge } from '../ui';\n\nexport interface SnapshotMetric {\n label: string;\n value: string | number;\n}\n\nexport function createSummaryLine(\n metrics: SnapshotMetric[],\n methodCounts: Record<string, number>,\n emptyText: string = 'No operations',\n): HTMLElement {\n const wrap = h('div', { className: 'summary-line' });\n\n for (const metric of metrics) {\n wrap.append(createBadge({\n text: `${metric.value} ${metric.label}`,\n kind: 'chip',\n size: 'm',\n }));\n }\n\n const orderedMethods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];\n\n for (const method of orderedMethods) {\n const count = methodCounts[method] || 0;\n if (count === 0) continue;\n wrap.append(createBadge({\n kind: 'method',\n method,\n size: 'm',\n text: `${count} ${method.toUpperCase()}`,\n }));\n }\n\n if (!wrap.childNodes.length) {\n wrap.append(createBadge({\n text: emptyText,\n kind: 'chip',\n size: 'm',\n }));\n }\n\n return wrap;\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { openAuthModal } from '../modals/auth-modal';\nimport { isSchemeConfigured } from '../modals/auth-modal';\nimport { createCard, createButton, createSection } from '../ui';\nimport type { SecurityScheme } from '../../core/types';\n\nexport function createConnectionSettingsSections(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n): HTMLElement[] {\n const sections: HTMLElement[] = [];\n\n const authSection = createAuthenticationSection(securitySchemes, portalRoot);\n if (authSection) sections.push(authSection);\n\n return sections;\n}\n\nfunction createAuthenticationSection(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n): HTMLElement | null {\n if (Object.keys(securitySchemes).length === 0) return null;\n\n const authSection = createSection({ title: 'Authentication' });\n\n for (const [name, scheme] of Object.entries(securitySchemes)) {\n const configured = isSchemeConfigured(name);\n const card = createCard({ className: 'card-group card-auth' });\n\n const top = h('div', { className: 'card-auth-main' });\n\n const info = h('div', { className: 'card-info card-auth-info' });\n const typeText = `${scheme.type}${scheme.scheme ? ` / ${scheme.scheme}` : ''}`;\n info.append(\n h('h3', { textContent: name }),\n h('p', { className: 'card-auth-type', textContent: typeText }),\n );\n\n if (scheme.description) {\n info.append(h('p', { className: 'card-auth-desc', textContent: String(scheme.description) }));\n }\n\n const configureBtn = createButton({\n variant: 'secondary',\n icon: configured ? icons.check : icons.settings,\n label: configured ? 'Success' : 'Set',\n className: `card-auth-config${configured ? ' active is-configured' : ''}`,\n onClick: (event) => {\n event.stopPropagation();\n openAuthModal(securitySchemes, portalRoot, name);\n },\n });\n\n top.append(info);\n card.append(top, configureBtn);\n\n authSection.append(card);\n }\n\n return authSection;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { useEffects } from '../../core/effects';\nimport { navigate, buildPath } from '../../core/router';\nimport { createSummaryLine } from '../shared/summary';\nimport { createConnectionSettingsSections } from '../shared/connection-settings';\nimport { createBadge, createCard, createSection } from '../ui';\nimport { hasOperationAuth } from '../../core/security';\nimport type { SpecTag } from '../../core/types';\n\n/** Render the API overview page */\nexport async function renderOverview(pageSlot: HTMLElement, _asideSlot: HTMLElement): Promise<void> {\n clear(pageSlot);\n\n const spec = store.get().spec;\n if (!spec) return;\n\n const header = h('div', { className: 'block header' });\n const titleWrap = h('div', { className: 'title' });\n titleWrap.append(\n h('h1', { textContent: spec.info.title }),\n h('span', { className: 'version', textContent: `v${spec.info.version}` }),\n );\n header.append(titleWrap);\n\n if (spec.info.description) {\n header.append(h('p', { textContent: spec.info.description }));\n }\n\n pageSlot.append(header);\n\n const authRequiredCount = spec.operations.filter((op) => hasOperationAuth(op.resolvedSecurity)).length;\n const deprecatedCount = spec.operations.filter((op) => op.deprecated).length;\n const methods = getMethodBreakdownFromOperations(spec.operations);\n\n pageSlot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [\n { label: 'Endpoints', value: spec.operations.length },\n { label: 'Auth Required', value: authRequiredCount },\n { label: 'Deprecated', value: deprecatedCount },\n ],\n methods,\n 'No operations',\n ),\n ));\n\n if (spec.servers.length > 0) {\n const serversSection = createSection({ title: 'Servers' });\n\n const curState = store.get();\n const initialEnvs = curState.initialEnvironments || curState.environments;\n const serverCards: { el: HTMLElement; envName: string }[] = [];\n\n for (const server of spec.servers) {\n const env = initialEnvs.find((e) => e.baseUrl === server.url);\n const envName = env?.name || '';\n const isActive = envName === curState.activeEnvironment;\n const item = createCard({\n interactive: true,\n active: isActive,\n className: 'card-group',\n onClick: () => {\n // Dynamic lookup: always resolve from current store state\n const st = store.get();\n const envs = st.initialEnvironments || st.environments;\n const target = envs.find((e) => e.baseUrl === server.url);\n if (target && target.name !== st.activeEnvironment) {\n store.setActiveEnvironment(target.name);\n }\n },\n });\n const info = h('div', { className: 'card-info' });\n const nameWrap = h('div', { className: 'inline-cluster inline-cluster-sm' });\n const iconEl = h('span', { className: 'icon-muted' });\n iconEl.innerHTML = icons.server;\n nameWrap.append(iconEl, h('code', { textContent: server.url }));\n info.append(nameWrap);\n if (server.description) {\n info.append(h('p', { textContent: server.description }));\n }\n const badges = h('div', { className: 'card-badges' });\n item.append(info, badges);\n serversSection.append(item);\n serverCards.push({ el: item, envName });\n }\n\n // Reactive: update active server card when environment changes\n const updateServerCards = (state: { activeEnvironment: string }) => {\n for (const { el, envName } of serverCards) {\n el.classList.toggle('active', envName === state.activeEnvironment);\n }\n };\n\n useEffects().on('overview:servers', updateServerCards);\n\n pageSlot.append(serversSection);\n }\n\n const portalRoot = (pageSlot.closest('.root') as HTMLElement | null) ?? undefined;\n const connectionSections = createConnectionSettingsSections(spec.securitySchemes || {}, portalRoot);\n for (const section of connectionSections) {\n pageSlot.append(section);\n }\n\n if (spec.tags.length > 0) {\n const tagsSection = createSection({ title: 'API Groups' });\n\n for (const tag of spec.tags) {\n if (tag.operations.length === 0) continue;\n tagsSection.append(createTagCard(tag));\n }\n\n pageSlot.append(tagsSection);\n }\n\n if (spec.webhooks && spec.webhooks.length > 0) {\n const webhooksSection = createSection({ title: 'Webhooks' });\n\n for (const wh of spec.webhooks) {\n const card = createCard({\n interactive: true,\n className: 'card-group',\n onClick: () => navigate(buildPath({ type: 'webhook', webhookName: wh.name })),\n });\n\n const badges = h('div', { className: 'card-badges' });\n badges.append(\n createBadge({ text: 'WH', kind: 'webhook', size: 's', mono: true }),\n createBadge({ text: wh.method.toUpperCase(), kind: 'method', method: wh.method, size: 's', mono: true }),\n );\n const top = h('div', { className: 'card-group-top' });\n top.append(h('h3', { className: 'card-group-title', textContent: wh.summary || wh.name }), badges);\n const desc = h('p', {\n className: 'card-group-description',\n textContent: wh.description || `${wh.method.toUpperCase()} webhook`,\n });\n card.append(top, desc);\n webhooksSection.append(card);\n }\n\n pageSlot.append(webhooksSection);\n }\n\n}\n\nfunction createTagCard(tag: SpecTag): HTMLElement {\n const card = createCard({\n interactive: true,\n className: 'card-group',\n onClick: () => navigate(buildPath({ type: 'tag', tag: tag.name })),\n });\n\n const methodBreakdown = getMethodBreakdown(tag);\n const badges = h('div', { className: 'card-badges' });\n for (const [method, count] of Object.entries(methodBreakdown)) {\n const badge = createBadge({\n text: method.toUpperCase(),\n kind: 'method',\n method,\n size: 'm',\n mono: true,\n });\n badge.textContent = `${count} ${method.toUpperCase()}`;\n badges.append(badge);\n }\n\n const top = h('div', { className: 'card-group-top' });\n top.append(h('h3', { className: 'card-group-title', textContent: tag.name }), badges);\n const desc = h('p', {\n className: 'card-group-description',\n textContent: tag.description || `${tag.operations.length} endpoints`,\n });\n\n card.append(top, desc);\n\n return card;\n}\n\nfunction getMethodBreakdownFromOperations(operations: { method: string }[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n\nfunction getMethodBreakdown(tag: SpecTag): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of tag.operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n","import type { SchemaObject } from '../core/types';\n\nexport function getSchemaTypeLabel(schema: SchemaObject): string {\n if (!schema) return 'any';\n if (schema.$ref) return schema.$ref.split('/').pop() || 'ref';\n\n let type = schema.type || '';\n if (schema.allOf) type = 'allOf';\n else if (schema.oneOf) type = 'oneOf';\n else if (schema.anyOf) type = 'anyOf';\n else if (schema.enum) type = 'enum';\n else if (schema.format) type += `<${schema.format}>`;\n\n if (schema.type === 'array' && schema.items && !schema.enum) {\n const itemType = schema.items.type || schema.items.$ref?.split('/').pop() || 'any';\n type = `${itemType}[]`;\n }\n\n if (schema.nullable) type += ' | null';\n return type || 'object';\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { createBadge, createCard, createCardHeader, createCardBody, createCardHeaderRow } from '../ui';\nimport { getSchemaTypeLabel } from '../../helpers/schema-utils';\nimport type { SchemaObject, SpecParameter } from '../../core/types';\n\ntype RowData = { row: HTMLElement; children: HTMLElement }[];\n\nexport interface SchemaBodyResult {\n body: HTMLElement;\n toggleCollapse: () => void;\n isExpanded: () => boolean;\n hasExpandable: boolean;\n}\n\n/** Render only the schema tree body (no card wrapper). For custom headers (e.g. Responses). */\nexport function renderSchemaBody(schema: SchemaObject): SchemaBodyResult {\n const container = h('div', { className: 'schema' });\n const body = h('div', { className: 'body' });\n container.append(body);\n const rowData: RowData = [];\n renderSchemaNode(body, schema, '', 0, new Set(), rowData);\n const hasExpandable = rowData.length > 0;\n const isExpanded = () => rowData.some(({ children }) => children.style.display !== 'none');\n const toggleCollapse = () => {\n const nextExpanded = !isExpanded();\n setRowsExpanded(rowData, nextExpanded);\n };\n return { body: container, toggleCollapse, isExpanded, hasExpandable };\n}\n\n/** Render an expandable schema tree viewer */\nexport function renderSchemaViewer(schema: SchemaObject, title?: string | HTMLElement): HTMLElement {\n const container = createCard();\n const rootType = getSchemaTypeLabel(schema);\n\n const body = createCardBody('no-padding');\n const schemaContainer = h('div', { className: 'schema' });\n const schemaBody = h('div', { className: 'body' });\n schemaContainer.append(schemaBody);\n const rowData: RowData = [];\n renderSchemaNode(schemaBody, schema, '', 0, new Set(), rowData);\n body.append(schemaContainer);\n\n if (title) {\n const header = createCardHeader();\n const titleEl = typeof title === 'string' ? h('h3', { textContent: title }) : title;\n const hasNestedLevels = rowData.length > 0;\n const anyExpanded = hasNestedLevels && rowData.some(({ children }) => children.style.display !== 'none');\n const typeBadge = createBadge({ text: rootType, kind: 'chip', color: 'primary', size: 'm', mono: true });\n const collapseBtn = hasNestedLevels\n ? h('button', {\n className: anyExpanded ? 'schema-collapse-btn is-expanded' : 'schema-collapse-btn',\n type: 'button',\n 'aria-label': anyExpanded ? 'Collapse all fields' : 'Expand all fields',\n })\n : null;\n\n if (collapseBtn) {\n collapseBtn.innerHTML = icons.chevronDown;\n collapseBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n const nextExpanded = !collapseBtn.classList.contains('is-expanded');\n setRowsExpanded(rowData, nextExpanded);\n collapseBtn.classList.toggle('is-expanded', nextExpanded);\n collapseBtn.setAttribute('aria-label', nextExpanded ? 'Collapse all fields' : 'Expand all fields');\n });\n }\n\n if (titleEl.classList.contains('card-row')) {\n titleEl.classList.add('schema-header-row');\n titleEl.append(typeBadge);\n if (collapseBtn) titleEl.append(collapseBtn);\n header.append(titleEl);\n } else {\n const headerRow = h('div', { className: 'card-row schema-header-row' });\n headerRow.append(titleEl, typeBadge);\n if (collapseBtn) headerRow.append(collapseBtn);\n header.append(headerRow);\n }\n\n container.prepend(header);\n }\n\n container.append(body);\n return container;\n}\n\nexport interface ParametersCardOptions {\n headerTitle: string;\n withEnumAndDefault?: boolean;\n}\n\n/** Parameters in the same style as schema (flat list). */\nexport function renderParametersCard(params: SpecParameter[], options: ParametersCardOptions): HTMLElement {\n const { headerTitle, withEnumAndDefault = true } = options;\n\n const rowsEl = params.map((p) => {\n const row = h('div', { className: 'schema-row role-flat role-params' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: p.name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n metaWrap.append(createBadge({\n text: p.schema ? getSchemaTypeLabel(p.schema) : 'unknown',\n kind: 'chip',\n color: 'primary',\n size: 'm',\n mono: true,\n }));\n if (p.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (p.description) {\n descCol.append(h('p', { textContent: p.description }));\n }\n const enumValues = p.schema?.enum;\n const hasDefault = p.schema?.default !== undefined;\n if (withEnumAndDefault && ((enumValues && enumValues.length > 0) || hasDefault)) {\n const enumWrap = h('div', { className: 'schema-enum-values' });\n if (hasDefault) {\n enumWrap.append(createBadge({\n text: `Default: ${JSON.stringify(p.schema!.default)}`,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n }\n if (enumValues) {\n for (const val of enumValues) {\n const str = String(val);\n if (str === p.in) continue; /* don't duplicate path/query — already in header */\n enumWrap.append(createBadge({ text: str, kind: 'chip', size: 's', mono: true }));\n }\n }\n descCol.append(enumWrap);\n }\n if (descCol.children.length > 0) row.append(descCol);\n\n return row;\n });\n\n const card = createCard();\n const body = createCardBody('no-padding');\n const paramsWrap = h('div', { className: 'params' });\n const paramsBody = h('div', { className: 'body role-params' });\n paramsBody.append(...rowsEl);\n paramsWrap.append(paramsBody);\n body.append(paramsWrap);\n card.append(\n createCardHeader(createCardHeaderRow({ title: headerTitle })),\n body,\n );\n return card;\n}\n\nfunction addExpandableNode(\n parent: HTMLElement,\n key: string,\n childSchema: SchemaObject,\n depth: number,\n required: boolean,\n seen: Set<SchemaObject>,\n rowData?: RowData,\n): void {\n const type = getSchemaTypeLabel(childSchema);\n const expandable = hasChildren(childSchema);\n const row = createRow(key, type, childSchema, depth, expandable, required);\n parent.append(row);\n\n if (expandable) {\n const childContainer = h('div', { className: 'schema-children' });\n childContainer.style.display = 'block';\n\n const newSeen = new Set(seen);\n newSeen.add(childSchema);\n renderChildren(childContainer, childSchema, depth + 1, newSeen, rowData);\n parent.append(childContainer);\n rowData?.push({ row, children: childContainer });\n\n row.querySelector('.schema-toggle')?.classList.add('is-expanded');\n row.classList.add('focus-ring');\n row.setAttribute('aria-expanded', 'true');\n row.setAttribute('tabindex', '0');\n row.addEventListener('click', () => {\n const isExpanded = childContainer.style.display !== 'none';\n setRowExpanded(row, childContainer, !isExpanded);\n });\n row.addEventListener('keydown', (event) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n const isExpanded = childContainer.style.display !== 'none';\n setRowExpanded(row, childContainer, !isExpanded);\n });\n }\n}\n\nfunction renderSchemaNode(\n parent: HTMLElement,\n schema: SchemaObject,\n key: string,\n depth: number,\n seen: Set<SchemaObject>,\n rowData?: RowData,\n): void {\n if (seen.has(schema)) {\n parent.append(createRow(key || '[circular]', 'circular', { description: '' }, depth, false, false));\n return;\n }\n\n if (depth === 0 && !key) {\n const newSeen = new Set(seen);\n newSeen.add(schema);\n renderChildren(parent, schema, depth, newSeen, rowData);\n return;\n }\n\n addExpandableNode(parent, key, schema, depth, false, seen, rowData);\n}\n\nfunction renderChildren(parent: HTMLElement, schema: SchemaObject, depth: number, seen: Set<SchemaObject>, rowData?: RowData): void {\n const required = new Set(schema.required || []);\n\n if (schema.properties) {\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n addExpandableNode(parent, propName, propSchema, depth, required.has(propName), seen, rowData);\n }\n }\n\n if (schema.items && schema.type === 'array') {\n addExpandableNode(parent, '[item]', schema.items, depth, false, seen, rowData);\n }\n\n for (const keyword of ['allOf', 'oneOf', 'anyOf'] as const) {\n const variants = schema[keyword];\n if (Array.isArray(variants)) {\n for (let i = 0; i < variants.length; i++) {\n addExpandableNode(parent, `${keyword}[${i}]`, variants[i] as SchemaObject, depth, false, seen, rowData);\n }\n }\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n addExpandableNode(parent, '[additionalProperties]', schema.additionalProperties as SchemaObject, depth, false, seen, rowData);\n }\n}\n\nfunction createRow(\n key: string,\n type: string,\n schema: SchemaObject,\n depth: number,\n expandable: boolean,\n required: boolean,\n): HTMLElement {\n const rowClass = [\n 'schema-row',\n depth === 0 ? 'is-root' : '',\n depth === 0 && !expandable ? 'is-leaf' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const row = h('div', { className: rowClass, role: expandable ? 'button' : undefined });\n row.setAttribute('data-depth', String(depth));\n row.style.setProperty('--schema-depth', String(depth));\n\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrapper = h('div', { className: 'schema-name-wrapper' });\n if (expandable) {\n nameWrapper.append(h('span', { className: 'schema-toggle', innerHTML: icons.chevronRight }));\n } else {\n nameWrapper.append(h('span', { className: 'schema-spacer' }));\n }\n nameWrapper.append(h('span', { textContent: key }));\n mainRow.append(nameWrapper);\n\n const metaWrapper = h('div', { className: 'schema-meta-wrapper' });\n metaWrapper.append(createBadge({ text: type, kind: 'chip', color: 'primary', size: 'm', mono: true }));\n if (required) {\n metaWrapper.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n mainRow.append(metaWrapper);\n\n row.append(mainRow);\n\n const descCol = h('div', { className: `schema-desc-col${depth === 0 ? ' is-root' : ''}` });\n if (schema.description) {\n descCol.append(h('p', { textContent: String(schema.description) }));\n }\n const enumValues = schema.enum;\n const hasEnumValues = Array.isArray(enumValues) && enumValues.length > 0;\n const defaultValue = schema.default;\n const hasDefaultValue = defaultValue !== undefined;\n const isDefaultInEnum = hasEnumValues && hasDefaultValue\n ? enumValues.some((val) => schemaValuesEqual(val, defaultValue))\n : false;\n\n const constraints = getConstraints(schema, !hasEnumValues || !hasDefaultValue);\n if (constraints.length > 0 || hasEnumValues) {\n const constraintsRow = h('div', { className: 'schema-constraints-row' });\n for (const c of constraints) {\n constraintsRow.append(createBadge({\n text: c,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n }\n if (hasEnumValues) {\n const orderedEnumValues = hasDefaultValue && isDefaultInEnum\n ? [defaultValue, ...enumValues.filter((val) => !schemaValuesEqual(val, defaultValue))]\n : enumValues;\n\n if (hasDefaultValue && !isDefaultInEnum) {\n constraintsRow.append(createBadge({\n text: `default: ${stringifySchemaValue(defaultValue)}`,\n kind: 'chip',\n size: 's',\n mono: true,\n className: 'schema-enum-value is-default',\n }));\n }\n\n for (const val of orderedEnumValues) {\n const isDefaultValue = hasDefaultValue && schemaValuesEqual(val, defaultValue);\n constraintsRow.append(createBadge({\n text: isDefaultValue ? `default: ${stringifySchemaValue(val)}` : stringifySchemaValue(val),\n kind: 'chip',\n size: 's',\n mono: true,\n className: isDefaultValue ? 'schema-enum-value is-default' : 'schema-enum-value',\n }));\n }\n }\n descCol.append(constraintsRow);\n }\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n\n return row;\n}\n\nfunction hasChildren(schema: SchemaObject): boolean {\n if (schema.properties && Object.keys(schema.properties).length > 0) return true;\n if (schema.type === 'array' && schema.items) return true;\n if (schema.allOf || schema.oneOf || schema.anyOf) return true;\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') return true;\n return false;\n}\n\nfunction getConstraints(schema: SchemaObject, includeDefault: boolean = true): string[] {\n const parts: string[] = [];\n if (schema.minLength !== undefined) parts.push(`minLength: ${schema.minLength}`);\n if (schema.maxLength !== undefined) parts.push(`maxLength: ${schema.maxLength}`);\n if (schema.minimum !== undefined) parts.push(`minimum: ${schema.minimum}`);\n if (schema.maximum !== undefined) parts.push(`maximum: ${schema.maximum}`);\n if (schema.pattern) parts.push(`pattern: ${schema.pattern}`);\n if (schema.minItems !== undefined) parts.push(`minItems: ${schema.minItems}`);\n if (schema.maxItems !== undefined) parts.push(`maxItems: ${schema.maxItems}`);\n if (schema.uniqueItems) parts.push('uniqueItems: true');\n if (includeDefault && schema.default !== undefined) parts.push(`default: ${stringifySchemaValue(schema.default)}`);\n if (schema.deprecated) parts.push('deprecated: true');\n if (schema.readOnly) parts.push('readOnly: true');\n if (schema.writeOnly) parts.push('writeOnly: true');\n return parts;\n}\n\nfunction setRowsExpanded(rows: RowData, expanded: boolean): void {\n for (const { row, children } of rows) {\n setRowExpanded(row, children, expanded);\n }\n}\n\nfunction setRowExpanded(row: HTMLElement, children: HTMLElement, expanded: boolean): void {\n children.style.display = expanded ? 'block' : 'none';\n row.querySelector('.schema-toggle')?.classList.toggle('is-expanded', expanded);\n row.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n}\n\nfunction stringifySchemaValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (value === null) return 'null';\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction schemaValuesEqual(left: unknown, right: unknown): boolean {\n if (left === right) return true;\n try {\n return JSON.stringify(left) === JSON.stringify(right);\n } catch {\n return String(left) === String(right);\n }\n}\n","import type { TryItResponse } from '../core/types';\nimport { store } from '../core/state';\n\ninterface RequestConfig {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: string | FormData;\n /** Timeout in ms */\n timeout?: number;\n}\n\n/** Execute an HTTP request for the Try It console */\nexport async function executeRequest(config: RequestConfig): Promise<TryItResponse> {\n const { method, url, headers = {}, body, timeout = 30000 } = config;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n const start = performance.now();\n\n try {\n const isFormData = typeof FormData !== 'undefined' && body instanceof FormData;\n const fetchOptions: RequestInit = {\n method: method.toUpperCase(),\n headers: isFormData ? undefined : headers,\n signal: controller.signal,\n credentials: 'include',\n };\n\n // For FormData, don't set Content-Type — browser adds boundary automatically\n // Also skip headers object to avoid overriding Content-Type\n if (isFormData) {\n // Re-add non-Content-Type headers\n const cleanHeaders: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() !== 'content-type') cleanHeaders[k] = v;\n }\n if (Object.keys(cleanHeaders).length > 0) fetchOptions.headers = cleanHeaders;\n }\n\n if (body && !['GET', 'HEAD'].includes(method.toUpperCase())) {\n fetchOptions.body = body;\n }\n\n const response = await fetch(url, fetchOptions);\n const duration = performance.now() - start;\n const responseBody = await response.text();\n const size = new TextEncoder().encode(responseBody).length;\n\n // Collect response headers (lowercase keys for case-insensitive lookup)\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key.toLowerCase()] = value;\n });\n\n // Auto-capture Bearer token\n autoCaptureBearerToken(responseBody, responseHeaders);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n body: responseBody,\n duration,\n size,\n };\n } catch (error) {\n const duration = performance.now() - start;\n if ((error as Error).name === 'AbortError') {\n return {\n status: 0,\n statusText: 'Request timed out',\n headers: {},\n body: `Request timed out after ${timeout}ms`,\n duration,\n size: 0,\n };\n }\n return {\n status: 0,\n statusText: 'Network Error',\n headers: {},\n body: (error as Error).message || 'Unknown network error',\n duration,\n size: 0,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Auto-capture Bearer token from response */\nfunction autoCaptureBearerToken(body: string, headers: Record<string, string>): void {\n const auth = store.get().auth;\n if (auth.locked) return;\n\n // Find bearer scheme name from spec\n const spec = store.get().spec;\n let bearerSchemeName = auth.activeScheme;\n if (spec) {\n for (const [name, scheme] of Object.entries(spec.securitySchemes)) {\n if (scheme.type === 'http' && scheme.scheme?.toLowerCase() === 'bearer') {\n bearerSchemeName = name;\n break;\n }\n }\n }\n\n // Priority 1: x-new-access-token header (lowercase after normalize)\n const headerToken = headers['x-new-access-token'];\n if (headerToken) {\n if (bearerSchemeName) {\n store.setSchemeValue(bearerSchemeName, headerToken);\n store.setAuth({ source: 'auto-header' });\n } else {\n store.setAuth({ token: headerToken, source: 'auto-header' });\n }\n return;\n }\n\n // Priority 2: accessToken from JSON response body\n try {\n const json = JSON.parse(body);\n const token = json.accessToken || json.access_token || json.token;\n if (typeof token === 'string' && token.length > 10) {\n if (bearerSchemeName) {\n store.setSchemeValue(bearerSchemeName, token);\n store.setAuth({ source: 'auto-body' });\n } else {\n store.setAuth({ token, source: 'auto-body' });\n }\n }\n } catch {\n // Not JSON — skip\n }\n}\n\n/** Build full URL from base, path, and parameters */\nexport function buildRequestUrl(\n baseUrl: string,\n pathTemplate: string,\n pathParams: Record<string, string>,\n queryParams: Record<string, string>,\n): string {\n let url = pathTemplate;\n\n // Replace path parameters\n for (const [key, value] of Object.entries(pathParams)) {\n url = url.replace(`{${key}}`, encodeURIComponent(value));\n }\n\n // Build full URL\n const base = baseUrl.replace(/\\/+$/, '');\n const fullUrl = base + url;\n\n // Add query parameters\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(queryParams)) {\n if (value) searchParams.set(key, value);\n }\n\n const queryString = searchParams.toString();\n return queryString ? `${fullUrl}?${queryString}` : fullUrl;\n}\n","interface SnippetParams {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: string;\n}\n\ntype Language = 'curl' | 'javascript' | 'python' | 'go' | 'rust';\n\nexport interface Snippet {\n language: Language;\n label: string;\n code: string;\n}\n\n/** Generate code snippets for multiple languages */\nexport function generateSnippets(params: SnippetParams): Snippet[] {\n return [\n { language: 'curl', label: 'cURL', code: generateCurl(params) },\n { language: 'javascript', label: 'JavaScript', code: generateJS(params) },\n { language: 'python', label: 'Python', code: generatePython(params) },\n { language: 'go', label: 'Go', code: generateGo(params) },\n { language: 'rust', label: 'Rust', code: generateRust(params) },\n ];\n}\n\nfunction generateCurl({ method, url, headers, body }: SnippetParams): string {\n const lines = [`curl -X ${method.toUpperCase()} '${url}'`];\n\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` -H '${key}: ${value}'`);\n }\n\n if (body) {\n lines.push(` -d '${body}'`);\n }\n\n return lines.join(' \\\\\\n');\n}\n\nfunction generateJS({ method, url, headers, body }: SnippetParams): string {\n const opts: string[] = [];\n opts.push(` method: '${method.toUpperCase()}'`);\n\n const headerEntries = Object.entries(headers);\n if (headerEntries.length > 0) {\n const h = headerEntries.map(([k, v]) => ` '${k}': '${v}'`).join(',\\n');\n opts.push(` headers: {\\n${h}\\n }`);\n }\n\n if (body) {\n opts.push(` body: JSON.stringify(${body})`);\n }\n\n return `const response = await fetch('${url}', {\\n${opts.join(',\\n')}\\n});\\n\\nconst data = await response.json();\\nconsole.log(data);`;\n}\n\nfunction generatePython({ method, url, headers, body }: SnippetParams): string {\n const lines = ['import requests', ''];\n\n const headerEntries = Object.entries(headers);\n if (headerEntries.length > 0) {\n const h = headerEntries.map(([k, v]) => ` \"${k}\": \"${v}\"`).join(',\\n');\n lines.push(`headers = {\\n${h}\\n}`);\n }\n\n if (body) {\n lines.push(`payload = ${body}`);\n }\n\n const args = [`\"${url}\"`];\n if (headerEntries.length > 0) args.push('headers=headers');\n if (body) args.push('json=payload');\n\n lines.push('');\n lines.push(`response = requests.${method.toLowerCase()}(${args.join(', ')})`);\n lines.push('print(response.json())');\n\n return lines.join('\\n');\n}\n\nfunction generateGo({ method, url, headers, body }: SnippetParams): string {\n const lines = [\n 'package main',\n '',\n 'import (',\n ' \"fmt\"',\n ' \"io\"',\n ' \"net/http\"',\n ];\n\n if (body) {\n lines.push(' \"strings\"');\n }\n\n lines.push(')', '', 'func main() {');\n\n if (body) {\n lines.push(` body := strings.NewReader(\\`${body}\\`)`);\n lines.push(` req, err := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", body)`);\n } else {\n lines.push(` req, err := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", nil)`);\n }\n\n lines.push(' if err != nil {');\n lines.push(' panic(err)');\n lines.push(' }');\n\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` req.Header.Set(\"${key}\", \"${value}\")`);\n }\n\n lines.push('');\n lines.push(' resp, err := http.DefaultClient.Do(req)');\n lines.push(' if err != nil {');\n lines.push(' panic(err)');\n lines.push(' }');\n lines.push(' defer resp.Body.Close()');\n lines.push('');\n lines.push(' data, _ := io.ReadAll(resp.Body)');\n lines.push(' fmt.Println(string(data))');\n lines.push('}');\n\n return lines.join('\\n');\n}\n\nfunction generateRust({ method, url, headers, body }: SnippetParams): string {\n const lines = [\n 'use reqwest::header::{HeaderMap, HeaderValue};',\n '',\n '#[tokio::main]',\n 'async fn main() -> Result<(), reqwest::Error> {',\n ' let client = reqwest::Client::new();',\n ];\n\n const headerEntries = Object.entries(headers);\n if (headerEntries.length > 0) {\n lines.push('');\n lines.push(' let mut headers = HeaderMap::new();');\n for (const [key, value] of headerEntries) {\n lines.push(` headers.insert(\"${key}\", HeaderValue::from_static(\"${value}\"));`);\n }\n }\n\n lines.push('');\n\n const m = method.toLowerCase();\n const builderParts = [` let response = client.${m}(\"${url}\")`];\n\n if (headerEntries.length > 0) {\n builderParts.push(' .headers(headers)');\n }\n\n if (body) {\n builderParts.push(` .body(r#\"${body}\"#.to_string())`);\n }\n\n builderParts.push(' .send()');\n builderParts.push(' .await?;');\n\n lines.push(builderParts.join('\\n'));\n lines.push('');\n lines.push(' let body = response.text().await?;');\n lines.push(' println!(\"{}\", body);');\n lines.push('');\n lines.push(' Ok(())');\n lines.push('}');\n\n return lines.join('\\n');\n}\n","import type { SpecMediaType, SpecExample, SpecParameter } from '../../core/types';\nimport { generateExample } from '../../core/parser';\n\nexport interface ParamExampleSet {\n name: string;\n summary?: string;\n values: Record<string, string>;\n}\n\n/** Extract example sets from path/query parameters (for GET, DELETE etc.) */\nexport function extractParamExampleSets(params: SpecParameter[]): ParamExampleSet[] {\n if (params.length === 0) return [];\n\n const getParamValue = (param: SpecParameter, setName: string | null, enumIdx?: number): string => {\n if (setName && param.examples?.[setName] !== undefined) {\n const ex = param.examples[setName] as SpecExample | { value?: unknown };\n const v = (ex as { value?: unknown })?.value ?? (ex as SpecExample).value;\n if (v !== undefined && v !== null) return String(v);\n }\n if (enumIdx !== undefined && param.schema?.enum && param.schema.enum[enumIdx] !== undefined) {\n return String(param.schema.enum[enumIdx]);\n }\n if (param.example !== undefined && param.example !== null) return String(param.example);\n if (param.schema?.example !== undefined && param.schema.example !== null) return String(param.schema.example);\n if (param.schema?.default !== undefined && param.schema.default !== null) return String(param.schema.default);\n if (param.schema?.enum && param.schema.enum.length > 0) return String(param.schema.enum[0]);\n if (param.schema?.type === 'integer' || param.schema?.type === 'number') return '0';\n if (param.schema?.type === 'boolean') return 'true';\n return param.in === 'path' ? 'id' : 'value';\n };\n\n const setNames = new Set<string>();\n for (const param of params) {\n if (param.examples && typeof param.examples === 'object') {\n for (const name of Object.keys(param.examples)) setNames.add(name);\n }\n }\n\n const sets: ParamExampleSet[] = [];\n\n if (setNames.size > 0) {\n for (const name of setNames) {\n const values: Record<string, string> = {};\n for (const param of params) {\n values[param.name] = getParamValue(param, name);\n }\n const firstParam = params.find((p) => p.examples?.[name]);\n const ex = firstParam?.examples?.[name] as SpecExample | undefined;\n sets.push({ name, summary: ex?.summary, values });\n }\n } else {\n const paramWithEnum = params.find((p) => p.schema?.enum && p.schema.enum.length > 1);\n if (paramWithEnum?.schema?.enum) {\n for (let i = 0; i < paramWithEnum.schema.enum.length; i++) {\n const values: Record<string, string> = {};\n for (const param of params) {\n values[param.name] = param === paramWithEnum ? getParamValue(param, null, i) : getParamValue(param, null);\n }\n const label = String(paramWithEnum.schema.enum[i]);\n sets.push({ name: label, values });\n }\n } else {\n const defaultValues: Record<string, string> = {};\n for (const param of params) {\n defaultValues[param.name] = getParamValue(param, null);\n }\n sets.push({ name: 'Default', values: defaultValues });\n }\n }\n\n return sets;\n}\n\nexport interface ExampleOption {\n name: string;\n summary?: string;\n description?: string;\n value: unknown;\n}\n\n/** Extract named examples from a media type, with schema fallback */\nexport function extractExamples(mediaType: SpecMediaType): ExampleOption[] {\n const options: ExampleOption[] = [];\n\n // Named examples (OAS 3.x)\n if (mediaType.examples && typeof mediaType.examples === 'object') {\n for (const [name, ex] of Object.entries(mediaType.examples)) {\n options.push({\n name,\n summary: ex.summary,\n description: ex.description,\n value: ex.value,\n });\n }\n }\n\n // Single example\n if (options.length === 0 && mediaType.example !== undefined) {\n options.push({ name: 'Default', value: mediaType.example });\n }\n\n // Schema-generated fallback\n if (options.length === 0 && mediaType.schema) {\n const generated = generateExample(mediaType.schema);\n if (generated !== undefined) {\n options.push({ name: 'Generated', value: generated });\n }\n }\n\n return options;\n}\n\n/** Get display label for example, without duplicating summary/description */\nexport function getExampleLabel(ex: ExampleOption): string {\n const parts = [ex.summary, ex.description].filter(Boolean);\n return [...new Set(parts)].join(' — ') || ex.name;\n}\n\n/** Format an example value as pretty JSON string */\nexport function formatExampleValue(value: unknown): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","/**\n * Custom regex-based syntax highlighter — zero dependencies.\n * Supports: JSON, JavaScript, Bash/curl, Go, Python, Rust.\n * ~90 lines TS → ~1.4 KB min → ~0.6 KB gzip (vs ~18 KB for highlight.js).\n */\nimport { escapeHtml, looksLikeJson } from '../helpers/text';\n\ntype Rule = [RegExp, string];\n\n/* ─── Language rules (ordered by priority) ─── */\n\nconst JSON_RULES: Rule[] = [\n [/\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/g, 'property'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/g, 'string'],\n [/-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, 'number'],\n [/\\b(?:true|false|null)\\b/g, 'literal'],\n [/[{}[\\]:,]/g, 'punctuation'],\n];\n\nconst BASH_RULES: Rule[] = [\n [/#.*/g, 'comment'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"|'[^']*'/g, 'string'],\n [/\\$\\w+|\\$\\{[^}]+\\}/g, 'sign'],\n [/--?\\w[\\w-]*/g, 'sign'],\n [/\\b(?:curl|wget|echo|export|if|then|else|fi|for|do|done|while|case|esac|function|return|local|set|unset|source|cd|ls|cat|grep|sed|awk|chmod|mkdir|rm|cp|mv|sudo|apt|brew|npm|pip|docker|http|https)\\b/g, 'keyword'],\n [/-?\\b\\d+(?:\\.\\d+)?\\b/g, 'number'],\n];\n\nconst GO_RULES: Rule[] = [\n [/\\/\\/.*/g, 'comment'],\n [/\\/\\*[\\s\\S]*?\\*\\//g, 'comment'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"|`[^`]*`/g, 'string'],\n [/\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go|goto|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/g, 'keyword'],\n [/\\b(?:bool|byte|error|float32|float64|int|int8|int16|int32|int64|rune|string|uint|uint8|uint16|uint32|uint64|uintptr|true|false|nil|iota)\\b/g, 'literal'],\n [/-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, 'number'],\n [/[{}[\\]();:.,]/g, 'punctuation'],\n];\n\nconst JS_RULES: Rule[] = [\n [/\\/\\/.*/g, 'comment'],\n [/\\/\\*[\\s\\S]*?\\*\\//g, 'comment'],\n [/`(?:[^`\\\\]|\\\\.)*`/g, 'string'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/g, 'string'],\n [/\\b(?:async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|export|extends|finally|for|from|function|if|import|in|instanceof|let|new|of|return|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\\b/g, 'keyword'],\n [/\\b(?:true|false|null|undefined|NaN|Infinity)\\b/g, 'literal'],\n [/\\b(?:console|document|window|fetch|Promise|Array|Object|String|Number|Boolean|Map|Set|JSON|Math|Date|RegExp|Error)\\b/g, 'sign'],\n [/-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, 'number'],\n [/[{}[\\]();:.,]/g, 'punctuation'],\n];\n\nconst PYTHON_RULES: Rule[] = [\n [/#.*/g, 'comment'],\n [/\"\"\"[\\s\\S]*?\"\"\"|'''[\\s\\S]*?'''/g, 'string'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/g, 'string'],\n [/\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|raise|return|try|while|with|yield)\\b/g, 'keyword'],\n [/\\b(?:True|False|None)\\b/g, 'literal'],\n [/@\\w+/g, 'sign'],\n [/-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, 'number'],\n [/[{}[\\]():.,;]/g, 'punctuation'],\n];\n\nconst RUST_RULES: Rule[] = [\n [/\\/\\/.*/g, 'comment'],\n [/\\/\\*[\\s\\S]*?\\*\\//g, 'comment'],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/g, 'string'],\n [/\\b(?:as|async|await|break|const|continue|crate|dyn|else|enum|extern|fn|for|if|impl|in|let|loop|match|mod|move|mut|pub|ref|return|self|Self|static|struct|super|trait|type|unsafe|use|where|while|yield)\\b/g, 'keyword'],\n [/\\b(?:true|false|None|Some|Ok|Err)\\b/g, 'literal'],\n [/\\b(?:i8|i16|i32|i64|i128|isize|u8|u16|u32|u64|u128|usize|f32|f64|bool|char|str|String|Vec|Box|Option|Result|HashMap|HashSet|Rc|Arc|Mutex|Cell|RefCell)\\b/g, 'sign'],\n [/\\b(?:println!|print!|format!|vec!|panic!|assert!|assert_eq!|assert_ne!|todo!|unimplemented!|unreachable!|eprintln!|eprint!|write!|writeln!)/g, 'sign'],\n [/-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, 'number'],\n [/[{}[\\]();:.,]/g, 'punctuation'],\n];\n\nconst LANG_MAP: Record<string, Rule[]> = {\n json: JSON_RULES,\n javascript: JS_RULES,\n js: JS_RULES,\n typescript: JS_RULES,\n ts: JS_RULES,\n bash: BASH_RULES,\n curl: BASH_RULES,\n go: GO_RULES,\n python: PYTHON_RULES,\n py: PYTHON_RULES,\n rust: RUST_RULES,\n rs: RUST_RULES,\n};\n\n/* ─── Engine ─── */\n\nfunction applyRules(code: string, rules: Rule[]): string {\n let result = '';\n let pos = 0;\n\n while (pos < code.length) {\n let best: { start: number; end: number; cls: string } | null = null;\n\n for (const [re, cls] of rules) {\n re.lastIndex = pos;\n const m = re.exec(code);\n if (m && (!best || m.index < best.start || (m.index === best.start && m[0].length > best.end - best.start))) {\n best = { start: m.index, end: m.index + m[0].length, cls };\n }\n }\n\n if (!best) {\n result += escapeHtml(code.slice(pos));\n break;\n }\n\n if (best.start > pos) result += escapeHtml(code.slice(pos, best.start));\n result += `<span class=\"hl-${best.cls}\">${escapeHtml(code.slice(best.start, best.end))}</span>`;\n pos = best.end;\n }\n\n return result;\n}\n\nexport function highlightCode(code: string, language: string): string {\n const rules = LANG_MAP[language] ?? (looksLikeJson(code) ? JSON_RULES : null);\n if (!rules) return escapeHtml(code);\n return applyRules(code, rules);\n}\n\nexport { looksLikeJson };\n","import type { SchemaObject, SpecOperation, SpecParameter } from './types';\n\nexport interface ValidationError {\n field: string;\n message: string;\n /** 'param' | 'body' */\n kind: 'param' | 'body';\n}\n\nexport interface ValidationResult {\n valid: boolean;\n message?: string;\n}\n\n/** Validate a single parameter value against its schema */\nexport function validateParam(value: string, param: SpecParameter): ValidationResult {\n const schema = param.schema;\n\n // Required check\n if (param.required && (!value || value.trim() === '')) {\n return { valid: false, message: 'Required field' };\n }\n\n // Empty non-required — skip\n if (!value || value.trim() === '') {\n return { valid: true };\n }\n\n if (!schema) return { valid: true };\n\n // Type-based checks\n if (schema.type === 'integer') {\n if (!/^-?\\d+$/.test(value.trim())) {\n return { valid: false, message: 'Must be an integer' };\n }\n const num = parseInt(value, 10);\n return validateNumberConstraints(num, schema);\n }\n\n if (schema.type === 'number') {\n if (isNaN(Number(value.trim()))) {\n return { valid: false, message: 'Must be a number' };\n }\n const num = parseFloat(value);\n return validateNumberConstraints(num, schema);\n }\n\n if (schema.type === 'boolean') {\n if (!['true', 'false', '1', '0'].includes(value.trim().toLowerCase())) {\n return { valid: false, message: 'Must be true or false' };\n }\n }\n\n // Enum\n if (schema.enum && schema.enum.length > 0) {\n if (!schema.enum.some((e) => String(e) === value.trim())) {\n return { valid: false, message: `Allowed: ${schema.enum.map(String).join(', ')}` };\n }\n }\n\n // String constraints\n if (schema.type === 'string' || !schema.type) {\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n return { valid: false, message: `Min length: ${schema.minLength}` };\n }\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n return { valid: false, message: `Max length: ${schema.maxLength}` };\n }\n if (schema.pattern) {\n try {\n const re = new RegExp(schema.pattern);\n if (!re.test(value)) {\n return { valid: false, message: `Must match pattern: ${schema.pattern}` };\n }\n } catch {\n // invalid regex in spec — skip\n }\n }\n }\n\n return { valid: true };\n}\n\nfunction validateNumberConstraints(num: number, schema: SchemaObject): ValidationResult {\n if (schema.minimum !== undefined && num < schema.minimum) {\n return { valid: false, message: `Minimum: ${schema.minimum}` };\n }\n if (schema.maximum !== undefined && num > schema.maximum) {\n return { valid: false, message: `Maximum: ${schema.maximum}` };\n }\n return { valid: true };\n}\n\n/** Validate the request body string */\nexport function validateBody(\n bodyStr: string,\n contentType: string,\n schema?: SchemaObject,\n required?: boolean,\n): ValidationResult {\n if (required && (!bodyStr || bodyStr.trim() === '')) {\n return { valid: false, message: 'Request body is required' };\n }\n\n if (!bodyStr || bodyStr.trim() === '') {\n return { valid: true };\n }\n\n // JSON validation\n if (contentType.includes('json')) {\n try {\n JSON.parse(bodyStr);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Invalid JSON';\n return { valid: false, message: `Invalid JSON: ${msg}` };\n }\n }\n\n return { valid: true };\n}\n\n/** Validate all fields in a Try It form. Returns array of errors (empty = valid). */\nexport function validateAll(\n container: HTMLElement,\n operation: SpecOperation,\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Validate params\n const paramInputs = container.querySelectorAll('[data-param-name]') as NodeListOf<HTMLInputElement>;\n paramInputs.forEach((input) => {\n const paramName = input.getAttribute('data-param-name')!;\n const param = operation.parameters.find((p) => p.name === paramName);\n if (!param) return;\n\n const result = validateParam(input.value, param);\n if (!result.valid) {\n errors.push({ field: paramName, message: result.message || 'Invalid', kind: 'param' });\n }\n });\n\n // Validate body\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n const schema = operation.requestBody.content?.[defaultCT]?.schema;\n\n const bodyTextarea = container.querySelector('[data-field=\"body\"]') as HTMLTextAreaElement | null;\n const bodyStr = bodyTextarea?.value || '';\n\n // Skip body validation for multipart (files handled separately)\n if (!defaultCT.includes('multipart')) {\n const result = validateBody(bodyStr, defaultCT, schema, operation.requestBody.required);\n if (!result.valid) {\n errors.push({ field: 'body', message: result.message || 'Invalid body', kind: 'body' });\n }\n }\n }\n\n return errors;\n}\n","import { h } from '../lib/dom';\nimport type { ValidationError } from '../core/validation';\n\nexport function clearValidationErrors(container: HTMLElement): void {\n container.querySelectorAll('.validation-error').forEach((el) => {\n el.textContent = '';\n el.classList.remove('visible');\n });\n container.querySelectorAll('.invalid').forEach((el) => {\n el.classList.remove('invalid');\n });\n}\n\nexport function showValidationErrors(container: HTMLElement, errors: ValidationError[]): void {\n for (const err of errors) {\n const errorEl = container.querySelector(`[data-error-for=\"${err.field}\"]`);\n if (errorEl) {\n errorEl.textContent = err.message;\n errorEl.classList.add('visible');\n }\n if (err.kind === 'param') {\n const input = container.querySelector(`[data-param-name=\"${err.field}\"]`) as HTMLElement | null;\n if (input) input.classList.add('invalid');\n } else if (err.kind === 'body') {\n const textarea = container.querySelector('[data-field=\"body\"]') as HTMLElement | null;\n if (textarea) textarea.classList.add('invalid');\n }\n }\n}\n\nexport function createErrorPlaceholder(field: string): HTMLElement {\n return h('span', { className: 'validation-error', 'data-error-for': field });\n}\n","import { h } from '../../lib/dom';\nimport { highlightCode } from '../../lib/highlight';\n\n/**\n * Auto-resize a plain textarea to fit its content.\n * Used for response body/headers textareas (NOT the editor panel).\n */\nexport function autoResizeTextarea(ta: HTMLTextAreaElement): void {\n ta.style.height = '0';\n ta.style.height = `${ta.scrollHeight}px`;\n}\n\nexport function createEditorPanel(\n initialValue: string,\n lang: string,\n options?: { dataField?: string; onInput?: () => void },\n): {\n wrap: HTMLElement;\n textarea: HTMLTextAreaElement;\n setValue: (v: string, highlightLang?: string) => void;\n syncLayout: () => void;\n} {\n const editorWrap = h('div', { className: 'body-editor' });\n\n const highlightPre = h('pre', { className: 'body-highlight' });\n const highlightCodeEl = h('code', {});\n highlightPre.append(highlightCodeEl);\n\n const textarea = h('textarea', {\n className: 'textarea-json',\n spellcheck: 'false',\n rows: '1',\n autocomplete: 'off',\n ...(options?.dataField ? { 'data-field': options.dataField } : {}),\n }) as HTMLTextAreaElement;\n textarea.value = initialValue;\n\n /** Update the highlighted <pre> to mirror the textarea content */\n const applyHighlight = (text: string, hlLang: string) => {\n // A trailing newline is collapsed by <pre> — append a space to keep it visible\n const display = text.endsWith('\\n') ? text + ' ' : (text || ' ');\n highlightCodeEl.innerHTML = highlightCode(display, hlLang);\n };\n\n applyHighlight(initialValue, lang);\n\n textarea.addEventListener('input', () => {\n applyHighlight(textarea.value, lang);\n options?.onInput?.();\n });\n\n editorWrap.append(highlightPre, textarea);\n\n return {\n wrap: editorWrap,\n textarea,\n setValue: (v, hlLang) => {\n textarea.value = v;\n applyHighlight(v, hlLang ?? lang);\n },\n syncLayout: () => {}, // no-op — CSS Grid handles layout\n };\n}\n","import { copyToClipboard } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { createButton } from '../ui';\n\nconst COPY_FEEDBACK_MS = 1500;\n\nexport interface CopyButtonOptions {\n getText: () => string | Promise<string>;\n ariaLabel?: string;\n copiedAriaLabel?: string;\n className?: string;\n onCopied?: () => void;\n}\n\n/**\n * Shared icon button with copy/check feedback.\n * Keeps copy interaction consistent across endpoint/try-it panels.\n */\nexport function createCopyButton(options: CopyButtonOptions): HTMLButtonElement {\n const ariaLabel = options.ariaLabel || 'Copy';\n const copiedAriaLabel = options.copiedAriaLabel || 'Copied';\n\n const btn = createButton({\n variant: 'icon',\n icon: icons.copy,\n ariaLabel,\n className: options.className,\n onClick: async () => {\n const text = await options.getText();\n await copyToClipboard(text);\n btn.innerHTML = icons.check;\n btn.setAttribute('aria-label', copiedAriaLabel);\n options.onCopied?.();\n setTimeout(() => {\n btn.innerHTML = icons.copy;\n btn.setAttribute('aria-label', ariaLabel);\n }, COPY_FEEDBACK_MS);\n },\n });\n return btn;\n}\n","import { h, clear, formatDuration, formatBytes } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { useEffects } from '../../core/effects';\nimport { executeRequest, buildRequestUrl } from '../../api/http-client';\nimport { generateSnippets } from '../../api/snippets';\nimport { extractExamples, extractParamExampleSets, formatExampleValue, getExampleLabel } from './example-picker';\nimport { getBaseUrl } from '../../services/env';\nimport { highlightCode, looksLikeJson } from '../../lib/highlight';\nimport { resolveAuthHeaders, resolveAuthQuery, resolveAuthCookies, getAuthHeaderPlaceholder } from '../modals/auth-modal';\nimport { hasOperationAuth } from '../../core/security';\nimport { validateAll } from '../../core/validation';\nimport { clearValidationErrors, showValidationErrors, createErrorPlaceholder } from '../../helpers/validation-ui';\nimport { createEditorPanel, autoResizeTextarea } from './editor-panel';\nimport { createCopyButton } from './copy-button';\nimport { createSelect, createInput, createButton, createBadge, createTab, createResponseCodeTab } from '../ui';\nimport type { SpecOperation, SpecParameter, TryItResponse, SchemaObject } from '../../core/types';\n\nexport interface InitialResponseExample {\n statusCode: string;\n statusText: string;\n body: string;\n}\n\nexport interface TryItConfig {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: string | FormData;\n}\n\n/** Collect current request config from Try It form (path, query, headers, body) */\nexport function collectRequestConfig(container: HTMLElement, operation: SpecOperation): TryItConfig {\n return collectRequestConfigImpl(container, operation);\n}\n\n/** Render the Try It interactive console */\nexport function renderTryIt(\n operation: SpecOperation,\n container: HTMLElement,\n initialResponse?: InitialResponseExample | null,\n options?: { onConfigChange?: (config: TryItConfig) => void; extraContent?: HTMLElement },\n): void {\n clear(container);\n container.classList.add('try-it');\n const tryItLayout = h('div', { className: 'body' });\n\n // Request + Code Examples (combined block with tabs + Send button)\n const responseSection = h('div', { className: 'block section' });\n responseSection.append(h('h2', { textContent: 'Response' }));\n const responseContainer = h('div', { 'data-response': 'true' });\n if (initialResponse) {\n renderResponse(responseContainer, {\n status: parseInt(initialResponse.statusCode, 10) || 200,\n statusText: initialResponse.statusText || 'OK',\n headers: {},\n body: initialResponse.body,\n duration: 0,\n size: 0,\n });\n } else {\n const placeholder = h('div', { className: 'placeholder' });\n placeholder.append(h('span', { textContent: 'Execute request to see response' }));\n responseContainer.append(placeholder);\n }\n responseSection.append(responseContainer);\n\n tryItLayout.append(renderRequestCodeBlock(operation, container, {\n onConfigChange: options?.onConfigChange,\n onSendRequest: async (sendBtn: HTMLButtonElement) => {\n clearValidationErrors(container);\n const errors = validateAll(container, operation);\n if (errors.length > 0) {\n showValidationErrors(container, errors);\n return;\n }\n const config = collectRequestConfigImpl(container, operation);\n sendBtn.setAttribute('disabled', '');\n sendBtn.innerHTML = '';\n sendBtn.append(h('span', { className: 'spinner spinner-sm' }), h('span', null, 'Sending...'));\n try {\n const response = await executeRequest(config);\n renderResponse(responseContainer, response);\n } catch (err) {\n renderResponse(responseContainer, {\n status: 0,\n statusText: 'Error',\n headers: {},\n body: (err as Error).message,\n duration: 0,\n size: 0,\n });\n } finally {\n sendBtn.removeAttribute('disabled');\n sendBtn.innerHTML = icons.send;\n sendBtn.append(h('span', null, 'Send Request'));\n }\n },\n }));\n\n tryItLayout.append(responseSection);\n container.append(tryItLayout);\n\n if (options?.onConfigChange) {\n let debounceTimer: ReturnType<typeof setTimeout>;\n const notify = () => {\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n const config = collectRequestConfigImpl(container, operation);\n options.onConfigChange!(config);\n }, 120);\n };\n container.addEventListener('input', notify);\n container.addEventListener('change', notify);\n }\n\n // No body textarea auto-resize needed — CSS Grid overlay handles sizing\n}\n\n/** Combined Request Body / Query / Path + Code Examples block with tabs */\nfunction renderRequestCodeBlock(\n operation: SpecOperation,\n tryItBody: HTMLElement,\n options?: { onConfigChange?: (config: TryItConfig) => void; onSendRequest?: (sendBtn: HTMLButtonElement) => Promise<void> },\n): HTMLElement {\n const onConfigChange = options?.onConfigChange;\n const pathParams = operation.parameters.filter((p) => p.in === 'path');\n const queryParams = operation.parameters.filter((p) => p.in === 'query');\n const paramExampleSets = extractParamExampleSets([...pathParams, ...queryParams]);\n\n // Extract body examples early for the Examples picker inside the card\n let bodyExamples: ReturnType<typeof extractExamples> = [];\n if (operation.requestBody) {\n const ct = Object.keys(operation.requestBody.content || {})[0] || 'application/json';\n if (!ct.includes('multipart')) {\n const mt = operation.requestBody.content?.[ct];\n if (mt) bodyExamples = extractExamples(mt);\n }\n }\n let bodyEditorRef: { setValue: (v: string, lang?: string) => void; syncLayout: () => void } | null = null;\n\n // First tab unified for all operations\n const firstTabLabel = 'Request';\n\n const snippets = generateSnippets({\n method: operation.method,\n url: '', // will be updated\n headers: {},\n body: operation.requestBody ? '{ ... }' : undefined,\n });\n\n const getCodeParams = (): { method: string; url: string; headers: Record<string, string>; body?: string } => {\n const config = collectRequestConfigImpl(tryItBody, operation);\n let bodyStr: string | undefined;\n if (typeof config.body === 'string') bodyStr = config.body;\n else if (config.body instanceof FormData) bodyStr = '{ /* multipart form-data */ }';\n else if (operation.requestBody) bodyStr = '{ ... }';\n return {\n method: config.method,\n url: config.url,\n headers: config.headers || {},\n body: bodyStr,\n };\n };\n\n const getBodyTextForCopy = (): string => {\n const config = collectRequestConfigImpl(tryItBody, operation);\n if (typeof config.body === 'string') return config.body;\n if (config.body instanceof FormData) {\n const lines: string[] = [];\n config.body.forEach((value, key) => {\n if (value instanceof File) {\n lines.push(`${key}: [File ${value.name}]`);\n return;\n }\n lines.push(`${key}: ${String(value)}`);\n });\n return lines.join('\\n');\n }\n return '';\n };\n\n const updateSnippetsCode = (\n editor: { setValue: (v: string, lang?: string) => void },\n snippetIndex: number,\n ) => {\n const params = getCodeParams();\n const items = generateSnippets(params);\n const sn = items[snippetIndex] || items[0];\n if (sn) editor.setValue(sn.code, sn.language);\n };\n\n const section = h('div', { className: 'block section tabs-code' });\n const sectionBody = h('div', { className: 'body' });\n const sectionTitle = h('h2', { textContent: 'Request' });\n section.append(sectionTitle, sectionBody);\n const state = store.get();\n const card = h('div', { className: 'card' });\n const header = h('div', { className: 'card-head' });\n const tabsWrap = h('div', { className: 'tabs tabs-code' });\n\n const tabButtons: HTMLElement[] = [];\n let activeTabIndex = 0;\n const showResolvedRoute = true;\n let routePreviewInput: HTMLInputElement | null = null;\n let routePreviewEl: HTMLElement | null = null;\n let syncRequestBodyEditor: (() => void) | null = null;\n\n // Panel for first tab (Body/Query/Path)\n let firstTabPanel: HTMLElement | null = null;\n if (firstTabLabel) {\n const tabBtn = createTab(firstTabLabel, { active: true, context: true });\n tabButtons.push(tabBtn);\n\n firstTabPanel = h('div', { className: 'panel is-request', 'data-tab': 'first' });\n\n // Examples picker — first item in the card panel\n const hasParamExamples = paramExampleSets.length > 1 && (pathParams.length > 0 || queryParams.length > 0);\n const hasBodyExamples = bodyExamples.length > 1;\n if (hasParamExamples || hasBodyExamples) {\n const examplesGroup = h('div', { className: 'params-group' });\n examplesGroup.append(h('h3', { textContent: 'Examples' }));\n if (hasParamExamples) {\n examplesGroup.append(createSelect({\n options: paramExampleSets.map((ex) => ({ value: ex.name, label: ex.summary || ex.name })),\n value: paramExampleSets[0].name,\n ariaLabel: 'Select parameter example',\n className: 'example-select',\n onChange: (val) => {\n const chosen = paramExampleSets.find((e) => e.name === val);\n if (chosen) {\n applyParamValues(tryItBody, chosen.values);\n tryItBody.dispatchEvent(new Event('input', { bubbles: true }));\n }\n },\n }));\n }\n if (hasBodyExamples) {\n examplesGroup.append(createSelect({\n options: bodyExamples.map((ex) => ({ value: ex.name, label: getExampleLabel(ex) })),\n value: bodyExamples[0].name,\n ariaLabel: 'Select body example',\n className: 'example-select',\n onChange: (val) => {\n const chosen = bodyExamples.find((e) => e.name === val);\n if (chosen && bodyEditorRef) {\n bodyEditorRef.setValue(formatExampleValue(chosen.value), 'json');\n bodyEditorRef.syncLayout();\n onConfigChange?.(collectRequestConfigImpl(tryItBody, operation));\n }\n },\n }));\n }\n firstTabPanel.append(examplesGroup);\n }\n\n // Headers — first (swapped with body/params)\n const headersSection = h('div', { className: 'headers-section' });\n const headersHeader = h('div', { className: 'field-header' });\n headersHeader.append(h('h3', { textContent: 'Headers' }));\n const headersContainer = h('div', { className: 'headers-list' });\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n headersContainer.append(createHeaderRow('Content-Type', defaultCT));\n }\n if (hasOperationAuth(operation.resolvedSecurity) && state.spec) {\n const authHeaders = resolveAuthHeaders(operation.resolvedSecurity, state.spec.securitySchemes);\n const placeholders = getAuthHeaderPlaceholder(operation.resolvedSecurity, state.spec.securitySchemes);\n const merged = { ...placeholders, ...authHeaders };\n for (const [headerName, headerValue] of Object.entries(merged)) {\n headersContainer.append(createHeaderRow(headerName, headerValue));\n }\n }\n for (const param of operation.parameters.filter((p) => p.in === 'header')) {\n headersContainer.append(createHeaderRow(param.name, String(param.example || '')));\n }\n const addHeaderBtn = createButton({\n variant: 'icon',\n icon: icons.plus,\n ariaLabel: 'Add header',\n className: 'field-copy-btn',\n onClick: () => headersContainer.append(createHeaderRow('', '')),\n });\n headersHeader.append(addHeaderBtn);\n headersSection.append(headersHeader, headersContainer);\n firstTabPanel.append(headersSection);\n\n if (pathParams.length > 0 || queryParams.length > 0) {\n const paramsSection = h('div', { className: 'params-group' });\n paramsSection.append(h('h3', { textContent: 'Parameters' }));\n\n if (pathParams.length > 0) {\n const pathGroup = h('div', { className: 'params-group' });\n if (queryParams.length > 0) {\n pathGroup.append(h('h3', { textContent: 'Path' }));\n }\n for (const param of pathParams) {\n pathGroup.append(createParamInput(param, paramExampleSets[0]?.values[param.name]));\n }\n paramsSection.append(pathGroup);\n }\n\n if (queryParams.length > 0) {\n const queryGroup = h('div', { className: 'params-group' });\n if (pathParams.length > 0) {\n queryGroup.append(h('h3', { textContent: 'Query' }));\n }\n for (const param of queryParams) {\n queryGroup.append(createParamInput(param, paramExampleSets[0]?.values[param.name]));\n }\n paramsSection.append(queryGroup);\n }\n\n firstTabPanel.append(paramsSection);\n }\n\n if (showResolvedRoute) {\n const routePreview = h('div', { className: 'route-preview' });\n const routePreviewHeader = h('div', { className: 'field-header' });\n routePreviewHeader.append(h('h3', { textContent: 'URL' }));\n const copyRouteBtn = createCopyButton({\n ariaLabel: 'Copy URL',\n getText: () => routePreviewInput?.value || collectRequestConfigImpl(tryItBody, operation).url,\n });\n routePreviewInput = createInput({\n type: 'text',\n ariaLabel: 'Request URL',\n readOnly: true,\n modifiers: ['filled'],\n className: 'route-input',\n });\n const routeInputRow = h('div', { className: 'route-input-row' });\n routeInputRow.append(routePreviewInput, copyRouteBtn);\n routePreview.append(routePreviewHeader, routeInputRow);\n routePreviewEl = routePreview;\n }\n\n if (operation.requestBody) {\n const bodySection = h('div', { className: 'body-section' });\n const bodyHeader = h('div', { className: 'field-header' });\n bodyHeader.append(h('h3', { textContent: 'Body' }));\n const copyBodyBtn = createCopyButton({\n ariaLabel: 'Copy body',\n className: 'field-copy-btn',\n getText: getBodyTextForCopy,\n });\n bodyHeader.append(copyBodyBtn);\n bodySection.append(bodyHeader);\n\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n const isMultipart = defaultCT.includes('multipart');\n const mediaType = operation.requestBody.content?.[defaultCT];\n\n if (isMultipart && mediaType?.schema) {\n const formWrap = h('div', { className: 'multipart', 'data-field': 'multipart' });\n const schema = mediaType.schema;\n const properties = schema.properties || {};\n const requiredFields = schema.required || [];\n for (const [fieldName, fieldSchema] of Object.entries(properties)) {\n const isBinary = fieldSchema.format === 'binary' || fieldSchema.format === 'base64'\n || (fieldSchema.type === 'string' && fieldSchema.format === 'binary');\n const isRequired = requiredFields.includes(fieldName);\n const fieldRow = h('div', { className: `params row${isRequired ? ' is-required' : ''}` });\n const fieldLabel = h('span', { className: 'label', textContent: fieldName });\n if (isRequired) fieldLabel.append(createRequiredStar());\n if (isBinary) {\n const fileInput = h('input', {\n type: 'file',\n autocomplete: 'off',\n 'data-multipart-field': fieldName,\n 'data-multipart-type': 'file',\n }) as HTMLInputElement;\n fieldRow.append(fieldLabel, fileInput);\n } else {\n const textInput = createInput({\n placeholder: fieldSchema.description || fieldName,\n value: fieldSchema.default !== undefined ? String(fieldSchema.default) : '',\n dataAttrs: { multipartField: fieldName, multipartType: 'text' },\n });\n fieldRow.append(fieldLabel, textInput);\n }\n formWrap.append(fieldRow);\n }\n bodySection.append(formWrap);\n } else {\n const initialExample = bodyExamples[0];\n const initialVal = initialExample ? formatExampleValue(initialExample.value) : '';\n const editor = createEditorPanel(initialVal, 'json', {\n dataField: 'body',\n onInput: () => onConfigChange?.(collectRequestConfigImpl(tryItBody, operation)),\n });\n bodyEditorRef = editor;\n syncRequestBodyEditor = editor.syncLayout;\n bodySection.append(editor.wrap);\n }\n bodySection.append(createErrorPlaceholder('body'));\n firstTabPanel.append(bodySection);\n }\n }\n\n // Panels for languages (cURL, JavaScript, ...) — unified editor\n const initialParams = getCodeParams();\n const initialSnippets = generateSnippets(initialParams);\n const langEditor = createEditorPanel(\n initialSnippets[0]?.code ?? '',\n initialSnippets[0]?.language ?? 'bash',\n );\n const langPanel = h('div', { className: 'panel', 'data-tab': 'lang' });\n const codeExampleSection = h('div', { className: 'body-section' });\n const codeExampleHeader = h('div', { className: 'field-header' });\n codeExampleHeader.append(h('h3', { textContent: 'Code Example' }));\n const copyCodeBtn = createCopyButton({\n ariaLabel: 'Copy code',\n className: 'field-copy-btn',\n getText: () => langEditor.textarea.value,\n });\n codeExampleHeader.append(copyCodeBtn);\n codeExampleSection.append(codeExampleHeader, langEditor.wrap);\n langPanel.append(codeExampleSection);\n\n for (let i = 0; i < snippets.length; i++) {\n const sn = snippets[i];\n const tabBtn = createTab(sn.label, { active: !firstTabLabel && i === 0 });\n tabButtons.push(tabBtn);\n }\n\n header.append(tabsWrap);\n\n const allPanels: HTMLElement[] = firstTabLabel && firstTabPanel ? [firstTabPanel, langPanel] : [langPanel];\n\n const setPanelVisible = (panel: HTMLElement, visible: boolean): void => {\n if (!visible) {\n panel.style.display = 'none';\n return;\n }\n panel.style.display = panel.classList.contains('is-request') ? 'flex' : 'block';\n };\n\n for (let i = 0; i < tabButtons.length; i++) {\n tabsWrap.append(tabButtons[i]);\n const idx = i;\n tabButtons[i].addEventListener('click', () => {\n tabButtons.forEach((t) => t.classList.remove('is-active'));\n tabButtons[idx].classList.add('is-active');\n activeTabIndex = idx;\n if (firstTabLabel) {\n if (firstTabPanel) setPanelVisible(firstTabPanel, idx === 0);\n setPanelVisible(langPanel, idx !== 0);\n if (idx === 0) {\n syncRequestBodyEditor?.();\n }\n if (idx > 0) updateSnippetsCode(langEditor, idx - 1);\n } else {\n setPanelVisible(langPanel, true);\n updateSnippetsCode(langEditor, idx);\n }\n });\n }\n\n const cardBody = h('div', { className: 'card-content flush' });\n const panelsContainer = h('div', { className: 'panels' });\n if (firstTabLabel) {\n if (firstTabPanel) setPanelVisible(firstTabPanel, true);\n setPanelVisible(langPanel, false);\n } else {\n setPanelVisible(langPanel, true);\n }\n panelsContainer.append(...allPanels);\n cardBody.append(panelsContainer);\n\n if (options?.onSendRequest) {\n const sendBtn = createButton({\n variant: 'primary',\n icon: icons.send,\n label: 'Send Request',\n className: 'send-btn',\n });\n sendBtn.addEventListener('click', () => options.onSendRequest!(sendBtn));\n if (firstTabLabel) {\n if (routePreviewEl) {\n firstTabPanel?.append(routePreviewEl);\n }\n const sendBtnWrap = h('div', { className: 'send-inline' });\n sendBtnWrap.append(sendBtn);\n firstTabPanel?.append(sendBtnWrap);\n } else {\n const sendBtnWrap = h('div', { className: 'send-bottom' });\n sendBtnWrap.append(sendBtn);\n cardBody.append(sendBtnWrap);\n }\n }\n if (!options?.onSendRequest && firstTabLabel && routePreviewEl) {\n firstTabPanel?.append(routePreviewEl);\n }\n\n card.append(header, cardBody);\n sectionBody.append(card);\n\n const notify = () => {\n if (routePreviewInput) {\n routePreviewInput.value = collectRequestConfigImpl(tryItBody, operation).url;\n }\n onConfigChange?.(collectRequestConfigImpl(tryItBody, operation));\n if (activeTabIndex > 0 || !firstTabLabel) {\n updateSnippetsCode(langEditor, firstTabLabel ? activeTabIndex - 1 : activeTabIndex);\n }\n };\n tryItBody.addEventListener('input', notify);\n tryItBody.addEventListener('change', notify);\n \n // Defer initial notify until the next microtask to ensure all DOM elements are ready\n queueMicrotask(() => {\n notify();\n syncRequestBodyEditor?.();\n });\n\n // Subscribe to environment changes to update URL and code snippets\n const effects = useEffects();\n effects.on('try-it:env-change', () => {\n notify();\n });\n\n return section;\n}\n\nfunction getParamExampleValue(param: SpecParameter, fromSet?: string): string {\n if (fromSet !== undefined) return fromSet;\n if (param.example !== undefined && param.example !== null) return String(param.example);\n if (param.schema?.example !== undefined && param.schema.example !== null) return String(param.schema.example);\n if (param.schema?.default !== undefined && param.schema.default !== null) return String(param.schema.default);\n if (param.schema?.enum && param.schema.enum.length > 0) return String(param.schema.enum[0]);\n if (param.schema?.type === 'integer' || param.schema?.type === 'number') return '0';\n if (param.schema?.type === 'boolean') return 'true';\n return param.in === 'path' ? 'id' : 'value';\n}\n\nfunction applyParamValues(container: HTMLElement, values: Record<string, string>): void {\n const inputs = container.querySelectorAll('[data-param-name]') as NodeListOf<HTMLInputElement>;\n inputs.forEach((input) => {\n const name = input.getAttribute('data-param-name');\n if (name && values[name] !== undefined) input.value = values[name];\n });\n}\n\nfunction createParamInput(param: SpecParameter, initialValue?: string): HTMLElement {\n const wrapper = h('div', { className: `params row${param.required ? ' is-required' : ''}` });\n\n const label = h('span', {\n className: 'label',\n textContent: param.name,\n });\n\n if (param.required) {\n label.append(createRequiredStar());\n }\n\n const schema = param.schema;\n let inputEl: HTMLElement;\n\n // Enum → select\n if (schema?.enum && schema.enum.length > 0) {\n const enumOptions = param.required\n ? schema.enum.map((val) => ({ value: String(val), label: String(val) }))\n : [{ value: '', label: '— select —' }, ...schema.enum.map((val) => ({ value: String(val), label: String(val) }))];\n\n const select = createSelect({\n options: enumOptions,\n value: getParamExampleValue(param, initialValue),\n dataAttrs: { paramName: param.name, paramIn: param.in },\n });\n inputEl = select;\n } else {\n // Determine input type\n const inputType = (schema?.type === 'integer' || schema?.type === 'number') ? 'number' : 'text';\n const input = createInput({\n type: inputType,\n placeholder: param.description || param.name,\n value: getParamExampleValue(param, initialValue),\n dataAttrs: { paramName: param.name, paramIn: param.in },\n });\n\n if (schema?.type === 'integer') input.setAttribute('step', '1');\n if (schema?.minimum !== undefined) input.setAttribute('min', String(schema.minimum));\n if (schema?.maximum !== undefined) input.setAttribute('max', String(schema.maximum));\n\n inputEl = input;\n }\n\n // Validation error placeholder\n const errorEl = createErrorPlaceholder(param.name);\n\n wrapper.append(label, inputEl, errorEl);\n return wrapper;\n}\n\nfunction createRequiredStar(): HTMLElement {\n return h('span', {\n className: 'required-star',\n textContent: '*',\n 'aria-hidden': 'true',\n });\n}\n\nexport function createHeaderRow(name: string, value: string): HTMLElement {\n const row = h('div', { className: 'header-row' });\n const nameInput = createInput({\n placeholder: 'Header name',\n value: name,\n dataAttrs: { headerName: 'true' },\n });\n const valueInput = createInput({\n placeholder: 'Value',\n value,\n dataAttrs: { headerValue: 'true' },\n });\n\n const removeBtn = createButton({\n variant: 'icon',\n icon: icons.close,\n ariaLabel: 'Remove header',\n onClick: () => row.remove(),\n });\n\n row.append(nameInput, valueInput, removeBtn);\n return row;\n}\n\nfunction collectRequestConfigImpl(container: HTMLElement, operation: SpecOperation): TryItConfig {\n const state = store.get();\n const baseUrl = getBaseUrl(state);\n\n // Collect path params\n const pathParamInputs = container.querySelectorAll('[data-param-in=\"path\"]') as NodeListOf<HTMLInputElement>;\n const pathParams: Record<string, string> = {};\n pathParamInputs.forEach((input) => {\n pathParams[input.getAttribute('data-param-name')!] = input.value;\n });\n\n // Collect query params\n const queryParamInputs = container.querySelectorAll('[data-param-in=\"query\"]') as NodeListOf<HTMLInputElement>;\n const queryParams: Record<string, string> = {};\n queryParamInputs.forEach((input) => {\n const name = input.getAttribute('data-param-name')!;\n if (input.value) queryParams[name] = input.value;\n });\n\n if (state.spec && hasOperationAuth(operation.resolvedSecurity)) {\n const authQuery = resolveAuthQuery(operation.resolvedSecurity, state.spec.securitySchemes);\n for (const [name, value] of Object.entries(authQuery)) {\n if (!(name in queryParams)) queryParams[name] = value;\n }\n }\n\n // Collect headers\n const headerRows = container.querySelectorAll('.header-row');\n const headers: Record<string, string> = {};\n headerRows.forEach((row) => {\n const nameInput = row.querySelector('[data-header-name]') as HTMLInputElement;\n const valueInput = row.querySelector('[data-header-value]') as HTMLInputElement;\n if (nameInput?.value && valueInput?.value) {\n headers[nameInput.value] = valueInput.value;\n }\n });\n\n if (state.spec && hasOperationAuth(operation.resolvedSecurity)) {\n const authCookies = resolveAuthCookies(operation.resolvedSecurity, state.spec.securitySchemes);\n const cookiePairs = Object.entries(authCookies).map(([name, value]) => `${name}=${value}`);\n if (cookiePairs.length > 0) {\n const existingCookie = headers.Cookie || headers.cookie || '';\n headers.Cookie = existingCookie ? `${existingCookie}; ${cookiePairs.join('; ')}` : cookiePairs.join('; ');\n delete headers.cookie;\n }\n }\n\n // Collect body — multipart or text\n const multipartWrap = container.querySelector('[data-field=\"multipart\"]');\n let requestBody: string | FormData | undefined;\n\n if (multipartWrap) {\n const formData = new FormData();\n const fields = multipartWrap.querySelectorAll('[data-multipart-field]') as NodeListOf<HTMLInputElement>;\n fields.forEach((field) => {\n const fieldName = field.getAttribute('data-multipart-field')!;\n const fieldType = field.getAttribute('data-multipart-type');\n if (fieldType === 'file' && field.files && field.files.length > 0) {\n formData.append(fieldName, field.files[0]);\n } else if (fieldType === 'text' && field.value) {\n formData.append(fieldName, field.value);\n }\n });\n requestBody = formData;\n // Remove Content-Type header — browser sets it with boundary\n delete headers['Content-Type'];\n } else {\n const bodyTextarea = container.querySelector('[data-field=\"body\"]') as HTMLTextAreaElement;\n requestBody = bodyTextarea?.value || undefined;\n }\n\n const url = buildRequestUrl(baseUrl, operation.path, pathParams, queryParams);\n\n return { method: operation.method, url, headers, body: requestBody };\n}\n\nfunction renderResponse(container: HTMLElement, response: TryItResponse): void {\n clear(container);\n\n const el = h('div', { className: 'card' });\n\n // One row in header: Body|Headers | meta | response code | Copy\n const header = h('div', { className: 'card-head response-header' });\n const bodyTab = createTab('Body', { active: true });\n const headersTab = createTab(`Headers (${Object.keys(response.headers).length})`);\n const tabs = h('div', { className: 'tabs tabs-code' });\n tabs.append(bodyTab, headersTab);\n\n const metaEl = h('div', {\n className: 'meta',\n innerHTML: `<span>${formatDuration(response.duration)}</span><span>${formatBytes(response.size)}</span>`,\n });\n const codeBadge = createBadge({\n text: String(response.status),\n kind: 'status',\n statusCode: String(response.status),\n size: 'm',\n });\n\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy response',\n getText: () => response.body,\n onCopied: () => showCopyToast('Response copied'),\n });\n\n header.append(tabs, metaEl, codeBadge, copyBtn);\n el.append(header);\n\n // Body content — single mode, no Pretty/Raw\n const bodyWrapper = h('div', { className: 'card-content flush' });\n const bodyContent = h('div', { className: 'response-pane' });\n const bodyInner = h('div', { className: 'pane-inner' });\n const pre = h('pre', { className: 'code-display' });\n const codeEl = h('code', {});\n const displayText = formatResponseBody(response.body, true);\n codeEl.innerHTML = highlightCode(displayText, looksLikeJson(displayText) ? 'json' : '');\n pre.append(codeEl);\n bodyInner.append(pre);\n bodyContent.append(bodyInner);\n\n const headersContent = h('div', { className: 'response-pane', style: 'display:none' });\n const headersInner = h('div', { className: 'pane-inner' });\n const headersTextarea = h('textarea', {\n readonly: true,\n wrap: 'off',\n spellcheck: 'false',\n autocomplete: 'off',\n }) as HTMLTextAreaElement;\n headersTextarea.value = Object.entries(response.headers).map(([k, v]) => `${k}: ${v}`).join('\\n');\n autoResizeTextarea(headersTextarea);\n headersInner.append(headersTextarea);\n headersContent.append(headersInner);\n\n bodyWrapper.append(bodyContent, headersContent);\n el.append(bodyWrapper);\n\n bodyTab.addEventListener('click', () => {\n bodyTab.classList.add('is-active');\n headersTab.classList.remove('is-active');\n bodyContent.style.display = 'block';\n headersContent.style.display = 'none';\n });\n\n headersTab.addEventListener('click', () => {\n headersTab.classList.add('is-active');\n bodyTab.classList.remove('is-active');\n bodyContent.style.display = 'none';\n headersContent.style.display = 'block';\n requestAnimationFrame(() => autoResizeTextarea(headersTextarea));\n });\n\n container.append(el);\n}\n\nfunction formatResponseBody(body: string, pretty: boolean): string {\n if (!pretty) return body;\n try {\n return JSON.stringify(JSON.parse(body), null, 2);\n } catch {\n return body;\n }\n}\n\nfunction showCopyToast(message: string): void {\n const existing = document.querySelector('.copy-toast');\n if (existing) existing.remove();\n\n const toast = h('div', { className: 'copy-toast', textContent: message });\n document.body.append(toast);\n setTimeout(() => toast.remove(), 2000);\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { renderSchemaBody } from './schema-viewer';\nimport { getSchemaTypeLabel } from '../../helpers/schema-utils';\nimport { createBadge } from '../ui';\nimport type { SpecMediaType, SpecResponseHeader, SchemaObject } from '../../core/types';\n\n/* ─── Types ─── */\n\nexport interface CollapsibleCategoryOptions {\n title: string;\n content: HTMLElement;\n expanded?: boolean;\n trailing?: HTMLElement;\n counter?: number | string;\n}\n\nexport interface SchemaBodyContent {\n content: HTMLElement;\n contentType: string;\n schemaType: string;\n itemsCount: number;\n}\n\nexport interface ResponseTabData {\n body: SchemaBodyContent;\n headers: HTMLElement | null;\n headersCount: number;\n}\n\n/* ─── Schema Body Content ─── */\n\nlet collapsibleCategoryCounter = 0;\n\nexport function createSchemaBodyContent(contentType: string, mediaType: SpecMediaType | undefined, emptyText: string): SchemaBodyContent {\n if (mediaType?.schema) {\n const result = renderSchemaBody(mediaType.schema);\n return {\n content: result.body,\n contentType,\n schemaType: getSchemaTypeLabel(mediaType.schema),\n itemsCount: getSchemaTopLevelCount(mediaType.schema),\n };\n }\n\n const schemaContainer = h('div', { className: 'schema' });\n const schemaBody = h('div', { className: 'body schema-body-plain' });\n schemaBody.append(h('p', { textContent: emptyText }));\n schemaContainer.append(schemaBody);\n\n return {\n content: schemaContainer,\n contentType,\n schemaType: 'plain',\n itemsCount: 1,\n };\n}\n\nexport function createBodyCategoryTrailing(body: SchemaBodyContent): HTMLElement {\n const trailing = h('span', { className: 'schema-content-meta' });\n trailing.append(\n createBadge({ text: body.contentType, kind: 'chip', size: 's', mono: true }),\n createBadge({ text: body.schemaType, kind: 'chip', color: 'primary', size: 's', mono: true }),\n );\n return trailing;\n}\n\nexport function getSchemaTopLevelCount(schema: SchemaObject): number {\n let count = 0;\n if (schema.properties) count += Object.keys(schema.properties).length;\n if (schema.type === 'array' && schema.items) count += 1;\n if (Array.isArray(schema.allOf)) count += schema.allOf.length;\n if (Array.isArray(schema.oneOf)) count += schema.oneOf.length;\n if (Array.isArray(schema.anyOf)) count += schema.anyOf.length;\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') count += 1;\n return Math.max(count, 1);\n}\n\n/* ─── Collapsible Category ─── */\n\nexport function createCollapsibleCategory(options: CollapsibleCategoryOptions): { root: HTMLElement } {\n const categoryId = `collapsible-category-${collapsibleCategoryCounter++}`;\n const root = h('div', { className: 'collapsible-category' });\n const title = h('span', { className: 'collapsible-category-title', textContent: options.title });\n const meta = h('span', { className: 'collapsible-category-meta' });\n if (options.trailing) {\n meta.append(h('span', { className: 'collapsible-category-trailing' }, options.trailing));\n }\n const controls = h('span', { className: 'collapsible-category-controls' });\n if (options.counter !== undefined) {\n controls.append(createBadge({ text: String(options.counter), kind: 'chip', size: 's', mono: true }));\n }\n const chevron = h('span', { className: 'collapsible-category-chevron', innerHTML: icons.chevronDown });\n controls.append(chevron);\n meta.append(controls);\n\n const toggle = h('button', {\n className: 'collapsible-category-toggle focus-ring',\n type: 'button',\n 'aria-expanded': 'true',\n 'aria-controls': categoryId,\n }, title, meta);\n\n const content = h('div', {\n id: categoryId,\n className: 'collapsible-category-content',\n });\n content.append(options.content);\n\n const setExpanded = (expanded: boolean) => {\n root.classList.toggle('is-expanded', expanded);\n toggle.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n content.hidden = !expanded;\n };\n\n toggle.addEventListener('click', () => {\n const expanded = toggle.getAttribute('aria-expanded') === 'true';\n setExpanded(!expanded);\n });\n\n setExpanded(options.expanded !== false);\n root.append(toggle, content);\n return { root };\n}\n\n/* ─── Response Headers ─── */\n\nexport function renderResponseHeadersList(headers: Record<string, SpecResponseHeader>): HTMLElement | null {\n const entries = Object.entries(headers);\n if (entries.length === 0) return null;\n\n const rowsEl = entries.map(([name, hdr]) => {\n const typeLabel = hdr.schema ? getSchemaTypeLabel(hdr.schema) : 'string';\n const value = hdr.example !== undefined\n ? String(hdr.example)\n : (hdr.schema?.example !== undefined ? String(hdr.schema.example) : '—');\n\n const row = h('div', { className: 'schema-row role-flat role-headers' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n metaWrap.append(createBadge({ text: typeLabel, kind: 'chip', color: 'primary', size: 'm', mono: true }));\n if (hdr.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (hdr.description) {\n descCol.append(h('p', { textContent: hdr.description }));\n }\n const valueWrap = h('div', { className: 'schema-enum-values' });\n valueWrap.append(createBadge({\n text: value,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n descCol.append(valueWrap);\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n return row;\n });\n\n const wrap = h('div', { className: 'params' });\n const body = h('div', { className: 'body role-headers' });\n body.append(...rowsEl);\n wrap.append(body);\n return wrap;\n}\n\n/* ─── Response Categories (Headers + Body collapsible) ─── */\n\nexport function renderResponseCategories(data: ResponseTabData): HTMLElement {\n const categories = h('div', { className: 'collapsible-categories' });\n if (data.headers) {\n const headersCategory = createCollapsibleCategory({\n title: 'Headers',\n content: data.headers,\n counter: data.headersCount,\n });\n categories.append(headersCategory.root);\n }\n const bodyCategory = createCollapsibleCategory({\n title: 'Body',\n content: data.body.content,\n trailing: createBodyCategoryTrailing(data.body),\n counter: data.body.itemsCount,\n });\n categories.append(bodyCategory.root);\n return categories;\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { buildPath, navigate } from '../../core/router';\nimport { store } from '../../core/state';\nimport { createBadge } from '../ui';\nimport type { RouteInfo, SpecOperation, SpecWebhook } from '../../core/types';\n\ntype LinearRoute =\n | {\n kind: 'endpoint';\n route: RouteInfo;\n operation: SpecOperation;\n title: string;\n category: string;\n }\n | {\n kind: 'webhook';\n route: RouteInfo;\n webhook: SpecWebhook;\n title: string;\n category: string;\n };\n\nexport function renderRouteNavigation(currentRoute: RouteInfo): HTMLElement | null {\n const { prev, next } = getAdjacentRoutes(currentRoute);\n if (!prev && !next) return null;\n\n const wrapper = h('div', {\n className: `route-nav${!prev || !next ? ' is-single' : ''}`,\n });\n\n if (prev) {\n wrapper.append(createRouteCard(prev, 'previous'));\n }\n\n if (next) {\n wrapper.append(createRouteCard(next, 'next'));\n }\n\n return wrapper;\n}\n\nfunction createRouteCard(\n entry: LinearRoute,\n direction: 'previous' | 'next',\n): HTMLAnchorElement {\n const routePath = buildPath(entry.route);\n const card = h('a', {\n className: `card interactive route-card ${direction === 'previous' ? 'is-prev' : 'is-next'}`,\n href: routePath,\n }) as HTMLAnchorElement;\n\n const meta = h('div', { className: 'route-meta' });\n if (entry.kind === 'endpoint') {\n meta.append(createBadge({\n text: entry.operation.method.toUpperCase(),\n kind: 'method',\n method: entry.operation.method,\n mono: true,\n }));\n meta.append(h('span', { className: 'route-path', textContent: entry.operation.path }));\n } else {\n meta.append(createBadge({\n text: 'WEBHOOK',\n kind: 'webhook',\n size: 's',\n mono: true,\n }));\n meta.append(createBadge({\n text: entry.webhook.method.toUpperCase(),\n kind: 'method',\n method: entry.webhook.method,\n mono: true,\n }));\n }\n\n const side = h('span', { className: 'route-side', 'aria-hidden': 'true' });\n side.innerHTML = direction === 'previous' ? icons.chevronLeft : icons.chevronRight;\n\n const main = h('div', { className: 'route-main' });\n main.append(\n h('span', { className: 'route-category', textContent: entry.category }),\n h('span', { className: 'route-title', textContent: entry.title }),\n meta,\n );\n\n if (direction === 'previous') {\n card.append(side, main);\n } else {\n card.append(main, side);\n }\n\n card.addEventListener('click', (event: Event) => {\n event.preventDefault();\n navigate(routePath);\n });\n\n return card;\n}\n\nfunction getAdjacentRoutes(currentRoute: RouteInfo): { prev: LinearRoute | null; next: LinearRoute | null } {\n const spec = store.get().spec;\n if (!spec) return { prev: null, next: null };\n\n const linear = buildLinearRoutes();\n if (linear.length === 0) return { prev: null, next: null };\n\n const index = findCurrentIndex(linear, currentRoute);\n if (index < 0) return { prev: null, next: null };\n\n return {\n prev: index > 0 ? linear[index - 1] : null,\n next: index < linear.length - 1 ? linear[index + 1] : null,\n };\n}\n\nfunction buildLinearRoutes(): LinearRoute[] {\n const spec = store.get().spec;\n if (!spec) return [];\n\n const result: LinearRoute[] = [];\n const seenEndpoints = new Set<string>();\n\n for (const tag of spec.tags) {\n for (const operation of tag.operations) {\n const endpointKey = `${operation.method.toLowerCase()} ${operation.path}`;\n if (seenEndpoints.has(endpointKey)) continue;\n seenEndpoints.add(endpointKey);\n result.push({\n kind: 'endpoint',\n route: {\n type: 'endpoint',\n tag: tag.name,\n method: operation.method,\n path: operation.path,\n operationId: operation.operationId,\n },\n operation,\n title: operation.summary || operation.path,\n category: tag.name,\n });\n }\n }\n\n for (const webhook of spec.webhooks || []) {\n result.push({\n kind: 'webhook',\n route: { type: 'webhook', webhookName: webhook.name },\n webhook,\n title: webhook.summary || webhook.name,\n category: 'Webhooks',\n });\n }\n\n return result;\n}\n\nfunction findCurrentIndex(list: LinearRoute[], currentRoute: RouteInfo): number {\n if (currentRoute.type === 'endpoint') {\n if (currentRoute.operationId) {\n const byOperationId = list.findIndex(\n (entry) => entry.kind === 'endpoint' && entry.route.operationId === currentRoute.operationId,\n );\n if (byOperationId >= 0) return byOperationId;\n }\n\n return list.findIndex(\n (entry) => entry.kind === 'endpoint'\n && entry.route.method === currentRoute.method\n && entry.route.path === currentRoute.path,\n );\n }\n\n if (currentRoute.type === 'webhook') {\n return list.findIndex(\n (entry) => entry.kind === 'webhook' && entry.route.webhookName === currentRoute.webhookName,\n );\n }\n\n return -1;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { useEffects } from '../../core/effects';\nimport { navigate, buildPath } from '../../core/router';\nimport { renderSchemaViewer, renderSchemaBody } from '../shared/schema-viewer';\nimport { renderTryIt, createHeaderRow, type InitialResponseExample } from '../shared/try-it';\nimport { extractExamples } from '../shared/example-picker';\nimport { resolveAuthHeaders, getAuthHeaderPlaceholder, openAuthModal } from '../modals/auth-modal';\nimport { getDisplayBaseUrl, getNormalizedBaseUrl } from '../../services/env';\nimport { formatOperationAuthBadge, formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport { createCopyButton } from '../shared/copy-button';\nimport {\n createSchemaBodyContent, createBodyCategoryTrailing, getSchemaTopLevelCount,\n createCollapsibleCategory, renderResponseHeadersList, renderResponseCategories,\n type ResponseTabData, type SchemaBodyContent, type CollapsibleCategoryOptions,\n} from '../shared/responses';\nimport { createBadge, createSection, createBreadcrumb, createSectionTitleWrap, createCard, createCardHeader, createCardBody, createResponseCodeTab, createLockIcon, setResponseCodeTabActive } from '../ui';\nimport { renderRouteNavigation } from '../nav/route-nav';\nimport { getSchemaTypeLabel } from '../../helpers/schema-utils';\nimport type { SpecOperation, SpecResponseHeader, SpecMediaType, SchemaObject, PortalState, RouteInfo } from '../../core/types';\n\n/** Render an endpoint detail page. Main block divided into 2 parts: doc | Try It + Code Examples */\nexport async function renderEndpoint(pageSlot: HTMLElement, asideSlot: HTMLElement, operation: SpecOperation): Promise<void> {\n clear(pageSlot);\n clear(asideSlot);\n\n const showTryIt = operation.method.toLowerCase() !== 'trace';\n const asidePane = asideSlot.parentElement as HTMLElement | null;\n if (asidePane && showTryIt) {\n asidePane.setAttribute('aria-label', 'Try It');\n asidePane.classList.add('try-it');\n }\n\n const state = store.get();\n const baseUrlNorm = getNormalizedBaseUrl(state);\n const baseUrlDisplay = getDisplayBaseUrl(state);\n\n // Breadcrumb — Base URL / path with {variable} highlighting, method, copy\n const fullUrl = baseUrlNorm + (operation.path.startsWith('/') ? '' : '/') + operation.path;\n\n const breadcrumbItems: { label: string; href?: string; className?: string; onClick?: (e: Event) => void }[] = [];\n const methodBadge = createBadge({\n text: operation.method.toUpperCase(),\n kind: 'method',\n method: operation.method,\n mono: true,\n size: 'm',\n });\n breadcrumbItems.push({\n label: baseUrlDisplay || state.spec?.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n });\n\n const tagNames = new Set((state.spec?.tags || []).map((t) => t.name.toLowerCase()));\n const pathSegments = (operation.path || '/').split('/').filter(Boolean);\n for (const seg of pathSegments) {\n const isParam = seg.startsWith('{') && seg.endsWith('}');\n const matchesTag = !isParam && tagNames.has(seg.toLowerCase());\n const tagMatch = state.spec?.tags.find((t) => t.name.toLowerCase() === seg.toLowerCase());\n if (matchesTag && tagMatch) {\n breadcrumbItems.push({\n label: seg,\n href: buildPath({ type: 'tag', tag: tagMatch.name }),\n className: 'breadcrumb-item breadcrumb-segment',\n onClick: (e: Event) => {\n e.preventDefault();\n navigate(buildPath({ type: 'tag', tag: tagMatch.name }));\n },\n });\n } else {\n breadcrumbItems.push({\n label: seg,\n className: isParam ? 'breadcrumb-param' : 'breadcrumb-segment',\n });\n }\n }\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy URL',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => `${operation.method.toUpperCase()} ${fullUrl}`,\n });\n const breadcrumb = createBreadcrumb(breadcrumbItems, {\n leading: [methodBadge],\n trailing: [copyBtn],\n });\n\n // Header — title\n const header = h('div', { className: 'block header' });\n header.append(h('h1', {\n textContent: operation.summary || `${operation.method.toUpperCase()} ${operation.path}`,\n }));\n\n // Description — directly under title\n if (operation.description) {\n header.append(h('p', { textContent: operation.description }));\n }\n\n // Breadcrumb — under description, highlighted as card\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n // Meta row — auth and deprecated under breadcrumb\n const metaRow = h('div', { className: 'endpoint-meta-row' });\n if (operation.deprecated) {\n const warnIcon = h('span', { className: 'icon-muted' });\n warnIcon.innerHTML = icons.warning;\n metaRow.append(h('span', { className: 'endpoint-meta deprecated' }, warnIcon, 'Deprecated'));\n }\n \n let authEl: HTMLElement | null = null;\n if (hasOperationAuth(operation.resolvedSecurity)) {\n const hasConfiguredAuth = isOperationAuthConfigured(state, operation);\n const authBadge = formatOperationAuthBadge(operation.resolvedSecurity) || 'Auth required';\n const lock = createLockIcon({\n configured: hasConfiguredAuth,\n variant: 'endpoint',\n title: formatOperationAuthTitle(operation.resolvedSecurity),\n });\n authEl = h('span', {\n className: `endpoint-meta auth${hasConfiguredAuth ? ' is-active' : ' is-missing'}`,\n 'aria-label': formatOperationAuthTitle(operation.resolvedSecurity),\n role: 'button',\n tabindex: '0',\n }, lock, authBadge);\n authEl.classList.add('endpoint-auth-trigger', 'focus-ring');\n authEl.addEventListener('click', () => {\n const spec = store.get().spec;\n if (!spec || !Object.keys(spec.securitySchemes || {}).length) return;\n const root = (pageSlot.closest('.root') as HTMLElement | null) ?? undefined;\n openAuthModal(spec.securitySchemes, root, getPreferredAuthScheme(operation, state));\n });\n authEl.addEventListener('keydown', (event: Event) => {\n const key = (event as KeyboardEvent).key;\n if (key !== 'Enter' && key !== ' ') return;\n event.preventDefault();\n if (authEl) authEl.click();\n });\n metaRow.append(authEl);\n }\n if (metaRow.childElementCount > 0) {\n header.append(metaRow);\n }\n\n pageSlot.append(header);\n\n // Request\n const visibleParams = operation.parameters.filter((p) => p.in !== 'cookie');\n const requestSection = createSection({ title: 'Request' });\n\n const requestContent = renderRequestContent(operation, visibleParams);\n if (requestContent) {\n requestSection.append(requestContent);\n } else {\n const emptyHint = h('div', { className: 'params empty', textContent: 'No parameters or request body required' });\n requestSection.append(emptyHint);\n }\n\n pageSlot.append(requestSection);\n\n // Responses\n let responsesRendered = false;\n if (Object.keys(operation.responses).length > 0) {\n pageSlot.append(renderResponsesSection(operation));\n responsesRendered = true;\n }\n\n const routeNavArgs: RouteInfo = {\n type: 'endpoint',\n method: operation.method,\n path: operation.path,\n operationId: operation.operationId,\n };\n const routeNavDesktop = renderRouteNavigation(routeNavArgs);\n const routeNavMobile = renderRouteNavigation(routeNavArgs);\n const appendRouteNav = () => {\n if (routeNavDesktop) {\n pageSlot.append(h('div', { className: 'route-nav-wrap is-desktop' }, routeNavDesktop));\n }\n if (routeNavMobile) {\n const pageContainer = pageSlot.closest('.page');\n if (pageContainer) {\n pageContainer.append(h('div', { className: 'route-nav-wrap is-mobile' }, routeNavMobile));\n }\n }\n };\n if (responsesRendered) appendRouteNav();\n\n // Callbacks\n if (operation.callbacks && operation.callbacks.length > 0) {\n pageSlot.append(renderCallbacksSection(operation));\n }\n\n if (!responsesRendered) appendRouteNav();\n\n const initialResponse = getFirstResponseExample(operation);\n if (operation.method.toLowerCase() !== 'trace') {\n renderTryIt(operation, asideSlot, initialResponse);\n }\n\n // --- Reactive effects ---\n const effects = useEffects();\n\n // Breadcrumb: update base URL when environment changes\n const breadcrumbHomeEl = breadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (breadcrumbHomeEl) {\n effects.on('endpoint:breadcrumb', (st) => {\n breadcrumbHomeEl.textContent = getDisplayBaseUrl(st) || st.spec?.info.title || 'Home';\n });\n }\n\n // Auth badge: update lock icon and class when auth state changes\n if (authEl && hasOperationAuth(operation.resolvedSecurity)) {\n effects.on('endpoint:auth-badge', (st) => {\n const configured = isOperationAuthConfigured(st, operation);\n authEl!.className = `endpoint-meta auth endpoint-auth-trigger focus-ring${configured ? ' is-active' : ' is-missing'}`;\n \n // Update lock icon\n const lockIcon = authEl!.querySelector('.lock-icon');\n if (lockIcon) {\n lockIcon.className = `lock-icon${configured ? ' is-unlocked' : ''}`;\n }\n });\n }\n\n // Auth headers in Try It: swap auth rows when token/env changes\n const tryItContent = asideSlot.querySelector('.content') as HTMLElement | null;\n if (tryItContent && hasOperationAuth(operation.resolvedSecurity)) {\n effects.on('endpoint:auth-headers', (st) => {\n if (!st.spec) return;\n const headersContainer = tryItContent.querySelector('.headers-list');\n if (!headersContainer) return;\n\n // Remove existing auth rows\n const authNames = ['Authorization', 'Cookie'];\n for (const row of Array.from(headersContainer.querySelectorAll('.header-row'))) {\n const nameInput = row.querySelector('[data-header-name]') as HTMLInputElement;\n if (nameInput && authNames.includes(nameInput.value)) row.remove();\n }\n\n // Insert fresh auth rows\n const authHeaders = resolveAuthHeaders(operation.resolvedSecurity, st.spec.securitySchemes);\n const placeholders = getAuthHeaderPlaceholder(operation.resolvedSecurity, st.spec.securitySchemes);\n const merged = { ...placeholders, ...authHeaders };\n\n const remaining = Array.from(headersContainer.querySelectorAll('.header-row'));\n const anchor = remaining.find((r) => {\n const inp = r.querySelector('[data-header-name]') as HTMLInputElement;\n return inp && inp.value === 'Content-Type';\n }) || remaining[0];\n\n for (const [name, value] of Object.entries(merged).reverse()) {\n const row = createHeaderRow(name, value);\n if (anchor) anchor.insertAdjacentElement('beforebegin', row);\n else headersContainer.prepend(row);\n }\n\n // Trigger code-example refresh\n tryItContent.dispatchEvent(new Event('input', { bubbles: true }));\n });\n }\n}\n\ninterface RequestHeaderRow {\n name: string;\n value: string;\n description?: string;\n required?: boolean;\n}\n\ninterface RequestBodyCategory {\n content: HTMLElement;\n trailing?: HTMLElement;\n counter?: number | string;\n}\n\nfunction renderRequestContent(operation: SpecOperation, params: SpecOperation['parameters']): HTMLElement | null {\n const pathParams = params.filter((p) => p.in === 'path');\n const queryParams = params.filter((p) => p.in === 'query');\n const requestHeaders = collectRequestHeaders(operation);\n const requestBodyCategory = renderRequestBodyCategory(operation);\n\n if (pathParams.length === 0 && queryParams.length === 0 && requestHeaders.length === 0 && !requestBodyCategory) {\n return null;\n }\n\n const card = createCard();\n const body = createCardBody('no-padding');\n const categories = h('div', { className: 'collapsible-categories' });\n\n if (pathParams.length > 0) {\n const pathCategory = createCollapsibleCategory({\n title: 'Path',\n content: renderParameterList(pathParams),\n counter: pathParams.length,\n });\n categories.append(pathCategory.root);\n }\n\n if (queryParams.length > 0) {\n const queryCategory = createCollapsibleCategory({\n title: 'Query',\n content: renderParameterList(queryParams),\n counter: queryParams.length,\n });\n categories.append(queryCategory.root);\n }\n\n if (requestHeaders.length > 0) {\n const headersCategory = createCollapsibleCategory({\n title: 'Headers',\n content: renderRequestHeadersList(requestHeaders),\n counter: requestHeaders.length,\n });\n categories.append(headersCategory.root);\n }\n\n if (requestBodyCategory) {\n const bodyCategory = createCollapsibleCategory({\n title: 'Body',\n content: requestBodyCategory.content,\n trailing: requestBodyCategory.trailing,\n counter: requestBodyCategory.counter,\n });\n categories.append(bodyCategory.root);\n }\n\n body.append(categories);\n card.append(body);\n return card;\n}\n\nfunction renderParameterList(params: SpecOperation['parameters']): HTMLElement {\n const rowsEl = params.map((p) => {\n const row = h('div', { className: 'schema-row role-flat role-params' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: p.name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n metaWrap.append(createBadge({\n text: p.schema ? getSchemaTypeLabel(p.schema) : 'unknown',\n kind: 'chip',\n color: 'primary',\n size: 'm',\n mono: true,\n }));\n if (p.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (p.description) {\n descCol.append(h('p', { textContent: p.description }));\n }\n const enumValues = p.schema?.enum;\n const hasDefault = p.schema?.default !== undefined;\n if ((enumValues && enumValues.length > 0) || hasDefault) {\n const enumWrap = h('div', { className: 'schema-enum-values' });\n if (hasDefault) {\n enumWrap.append(createBadge({\n text: `Default: ${JSON.stringify(p.schema!.default)}`,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n }\n if (enumValues) {\n for (const val of enumValues) {\n const str = String(val);\n if (str === p.in) continue;\n enumWrap.append(createBadge({ text: str, kind: 'chip', size: 's', mono: true }));\n }\n }\n descCol.append(enumWrap);\n }\n if (descCol.children.length > 0) row.append(descCol);\n\n return row;\n });\n\n const wrap = h('div', { className: 'params' });\n const body = h('div', { className: 'body role-params' });\n body.append(...rowsEl);\n wrap.append(body);\n return wrap;\n}\n\nfunction collectRequestHeaders(operation: SpecOperation): RequestHeaderRow[] {\n const rows: RequestHeaderRow[] = [];\n\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n rows.push({\n name: 'Content-Type',\n value: contentTypes[0] || 'application/json',\n description: 'Media type for request body payload',\n required: Boolean(operation.requestBody.required),\n });\n }\n if (hasOperationAuth(operation.resolvedSecurity)) {\n const spec = store.get().spec;\n const authHeaders = spec ? resolveAuthHeaders(operation.resolvedSecurity, spec.securitySchemes) : {};\n const placeholders = spec ? getAuthHeaderPlaceholder(operation.resolvedSecurity, spec.securitySchemes) : {};\n const merged = { ...placeholders, ...authHeaders };\n for (const [hName, hValue] of Object.entries(merged)) {\n rows.push({\n name: hName,\n value: hValue,\n description: 'Authentication header value',\n required: true,\n });\n }\n }\n for (const p of operation.parameters.filter((param) => param.in === 'header')) {\n rows.push({\n name: p.name,\n value: String(p.schema?.default ?? p.example ?? ''),\n description: p.description,\n required: p.required,\n });\n }\n\n return rows;\n}\n\nfunction renderRequestHeadersList(rows: RequestHeaderRow[]): HTMLElement {\n const rowsEl = rows.map((rowData) => {\n const row = h('div', { className: 'schema-row role-flat role-headers' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: rowData.name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n if (rowData.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (rowData.description) {\n descCol.append(h('p', { textContent: rowData.description }));\n }\n const valueWrap = h('div', { className: 'schema-enum-values' });\n valueWrap.append(createBadge({\n text: rowData.value || '—',\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n descCol.append(valueWrap);\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n return row;\n });\n\n const wrap = h('div', { className: 'params' });\n const body = h('div', { className: 'body role-headers' });\n body.append(...rowsEl);\n wrap.append(body);\n return wrap;\n}\n\nfunction renderRequestBodyCategory(operation: SpecOperation): RequestBodyCategory | null {\n const wrapper = h('div', { className: 'request-body-wrap' });\n const contentEntries = Object.entries(operation.requestBody?.content || {});\n\n if (operation.requestBody?.description) {\n wrapper.append(h('p', { textContent: operation.requestBody.description }));\n }\n\n if (contentEntries.length === 0) {\n return wrapper.childElementCount > 0 ? { content: wrapper } : null;\n }\n\n const schemas = contentEntries.map(([contentType, mediaType]) => createSchemaBodyContent(contentType, mediaType, 'No schema'));\n if (schemas.length === 1) {\n const body = schemas[0];\n wrapper.append(body.content);\n return { content: wrapper, trailing: createBodyCategoryTrailing(body), counter: body.itemsCount };\n }\n\n const mediaList = h('div', { className: 'schema-media-list' });\n for (const body of schemas) {\n const header = h('div', { className: 'schema-media-header' });\n header.append(\n createBadge({ text: body.contentType, kind: 'chip', size: 's', mono: true }),\n createBadge({ text: body.schemaType, kind: 'chip', color: 'primary', size: 's', mono: true }),\n );\n\n const item = h('div', { className: 'schema-media-item' });\n item.append(header, body.content);\n mediaList.append(item);\n }\n wrapper.append(mediaList);\n\n return {\n content: wrapper,\n counter: schemas.length,\n };\n}\n\n\nfunction renderResponsesSection(operation: SpecOperation): HTMLElement {\n const section = createSection({\n titleEl: createSectionTitleWrap('Responses'),\n });\n\n const responses = Object.entries(operation.responses);\n if (responses.length === 0) return section;\n\n // Single card like Request: response code tabs + unified body categories\n const card = createCard();\n const headerRow = h('div', { className: 'card-row responses-header-row' });\n\n // Left: response code selector\n const codesWrap = h('div', { className: 'tabs-code codes' });\n let activeCode = responses[0][0];\n const tabData = new Map<string, ResponseTabData>();\n\n for (const [code, response] of responses) {\n const tabBtn = createResponseCodeTab(code, code === activeCode);\n\n const firstContentType = response.content ? Object.keys(response.content)[0] || 'application/json' : 'application/json';\n const mediaType = response.content?.[firstContentType];\n const bodyBlock = createSchemaBodyContent(firstContentType, mediaType, response.description || 'No schema');\n\n const headersEl = response.headers ? renderResponseHeadersList(response.headers) : null;\n\n tabData.set(code, {\n body: bodyBlock,\n headers: headersEl,\n headersCount: response.headers ? Object.keys(response.headers).length : 0,\n });\n codesWrap.append(tabBtn);\n\n tabBtn.addEventListener('click', () => {\n codesWrap.querySelectorAll('[data-badge-group=\"response-code\"]').forEach((t) => setResponseCodeTabActive(t as HTMLElement, false));\n setResponseCodeTabActive(tabBtn, true);\n activeCode = code;\n const data = tabData.get(code)!;\n contentContainer.innerHTML = '';\n contentContainer.append(renderResponseCategories(data));\n });\n }\n\n headerRow.append(codesWrap);\n\n card.append(createCardHeader(headerRow));\n\n const bodyWrapper = createCardBody('no-padding');\n const contentContainer = h('div');\n const initialData = tabData.get(activeCode);\n if (initialData) {\n contentContainer.append(renderResponseCategories(initialData));\n }\n\n bodyWrapper.append(contentContainer);\n card.append(bodyWrapper);\n section.append(card);\n\n return section;\n}\n\nfunction renderCallbacksSection(operation: SpecOperation): HTMLElement {\n const section = createSection({\n titleEl: createSectionTitleWrap('Callbacks', createBadge({ text: String(operation.callbacks!.length), kind: 'chip', size: 'm' })),\n });\n\n for (const callback of operation.callbacks!) {\n const callbackBlock = h('div', { className: 'callback-block' });\n callbackBlock.append(h('div', { className: 'callback-name', textContent: callback.name }));\n\n for (const cbOp of callback.operations) {\n const opBlock = h('div', { className: 'callback-operation' });\n\n const opHeader = h('div', { className: 'callback-op-header' });\n opHeader.append(\n createBadge({\n text: cbOp.method.toUpperCase(),\n kind: 'method',\n method: cbOp.method,\n mono: true,\n }),\n h('span', { className: 'callback-op-path', textContent: cbOp.path }),\n );\n opBlock.append(opHeader);\n\n if (cbOp.summary) {\n opBlock.append(h('div', { className: 'callback-op-summary', textContent: cbOp.summary }));\n }\n if (cbOp.description) {\n opBlock.append(h('p', { textContent: cbOp.description }));\n }\n\n // Callback request body\n if (cbOp.requestBody) {\n const bodyContent = cbOp.requestBody.content || {};\n for (const [ct, mediaType] of Object.entries(bodyContent)) {\n if (mediaType.schema) {\n opBlock.append(renderSchemaViewer(mediaType.schema, `${ct} — Request Body`));\n }\n }\n }\n\n // Callback responses\n if (Object.keys(cbOp.responses).length > 0) {\n for (const [code, resp] of Object.entries(cbOp.responses)) {\n const respRow = h('div', { className: 'callback-response-row' });\n respRow.append(createBadge({\n text: code,\n kind: 'status',\n statusCode: code,\n mono: true,\n }));\n if (resp.description) {\n respRow.append(h('p', { textContent: resp.description }));\n }\n if (resp.content) {\n for (const [ct, mediaType] of Object.entries(resp.content)) {\n if (mediaType.schema) {\n respRow.append(renderSchemaViewer(mediaType.schema, `${ct}`));\n }\n }\n }\n opBlock.append(respRow);\n }\n }\n\n callbackBlock.append(opBlock);\n }\n\n section.append(callbackBlock);\n }\n\n return section;\n}\n\nfunction getFirstResponseExample(operation: SpecOperation): InitialResponseExample | null {\n const codes = Object.keys(operation.responses).sort((a, b) => {\n const a2 = a.startsWith('2') ? 0 : a.startsWith('4') ? 1 : 2;\n const b2 = b.startsWith('2') ? 0 : b.startsWith('4') ? 1 : 2;\n return a2 - b2 || a.localeCompare(b);\n });\n for (const code of codes) {\n const resp = operation.responses[code];\n if (!resp?.content) continue;\n const ct = Object.keys(resp.content)[0] || 'application/json';\n const mediaType = resp.content[ct];\n const examples = mediaType ? extractExamples(mediaType) : [];\n const ex = examples[0];\n if (ex && ex.value !== undefined) {\n const body = typeof ex.value === 'string' ? ex.value : JSON.stringify(ex.value, null, 2);\n const statusText = resp.description || (code.startsWith('2') ? 'OK' : code.startsWith('4') ? 'Not Found' : 'Error');\n return { statusCode: code, statusText, body };\n }\n if (mediaType?.example !== undefined) {\n const body = typeof mediaType.example === 'string' ? mediaType.example : JSON.stringify(mediaType.example, null, 2);\n return { statusCode: code, statusText: resp.description || 'OK', body };\n }\n }\n return null;\n}\n\nfunction isOperationAuthConfigured(state: PortalState, operation: SpecOperation): boolean {\n const requirements = operation.resolvedSecurity?.requirements || [];\n if (!hasOperationAuth(operation.resolvedSecurity)) return false;\n\n const token = (state.auth.token || '').trim();\n const schemes = state.auth.schemes || {};\n const activeScheme = state.auth.activeScheme;\n\n const hasSchemeValue = (schemeName: string): boolean => {\n const value = String(schemes[schemeName] || '').trim();\n if (value) return true;\n if (!token) return false;\n return !activeScheme || activeScheme === schemeName;\n };\n\n return requirements.some((requirement) => {\n const schemeNames = requirement.map((item) => item.schemeName);\n if (schemeNames.length === 0) return true;\n return schemeNames.every((schemeName) => hasSchemeValue(schemeName));\n });\n}\n\nfunction getPreferredAuthScheme(operation: SpecOperation, state: PortalState): string | undefined {\n const requirements = operation.resolvedSecurity?.requirements || [];\n const firstRequiredScheme = requirements[0]?.[0]?.schemeName;\n return firstRequiredScheme || state.auth.activeScheme || undefined;\n}\n","import { h, clear } from '../../lib/dom';\nimport { store } from '../../core/state';\nimport { useEffects } from '../../core/effects';\nimport { navigate, buildPath, slugifyTag } from '../../core/router';\nimport { createSummaryLine } from '../shared/summary';\nimport { createBadge, createBreadcrumb, createCard, createSection, createLockIcon } from '../ui';\nimport { createCopyButton } from '../shared/copy-button';\nimport { getDisplayBaseUrl } from '../../services/env';\nimport { isOperationAuthConfigured } from '../modals/auth-modal';\nimport { formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport type { SpecTag, RouteInfo } from '../../core/types';\n\n/** Render a tag page — list of group operations */\nexport function renderTagPage(pageSlot: HTMLElement, _asideSlot: HTMLElement, tagName: string): void {\n clear(pageSlot);\n\n const spec = store.get().spec;\n if (!spec) return;\n\n // Find tag by exact match or by slug match\n const tagSlug = slugifyTag(tagName);\n const tag = spec.tags.find((t) => t.name === tagName)\n || spec.tags.find((t) => slugifyTag(t.name) === tagSlug);\n if (!tag || tag.operations.length === 0) {\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: 'Tag not found' }));\n pageSlot.append(header);\n pageSlot.append(createSection(\n { title: 'Details' },\n h('p', { textContent: `No operations for tag \"${tagName}\"` }),\n ));\n return;\n }\n\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: tag.name }));\n\n const state = store.get();\n const baseUrlDisplay = getDisplayBaseUrl(state);\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy category',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => tag.name,\n });\n const breadcrumb = createBreadcrumb([\n {\n label: baseUrlDisplay || spec.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: tag.name, className: 'breadcrumb-current' },\n ], {\n className: 'breadcrumb-tag-page',\n leading: [createBadge({ text: 'Tag', kind: 'chip', size: 'm', mono: true })],\n trailing: [copyBtn],\n });\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n if (tag.description) {\n header.append(h('p', { textContent: tag.description }));\n }\n\n pageSlot.append(header);\n\n const methods = getTagMethodBreakdown(tag);\n const authRequired = tag.operations.filter((op) => hasOperationAuth(op.resolvedSecurity)).length;\n const deprecatedCount = tag.operations.filter((op) => op.deprecated).length;\n\n pageSlot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [\n { label: 'Endpoints', value: tag.operations.length },\n { label: 'Auth Required', value: authRequired },\n { label: 'Deprecated', value: deprecatedCount },\n ],\n methods,\n ),\n ));\n\n const opsSection = createSection({ title: 'Endpoints' });\n const currentRoute = store.get().route;\n\n for (const op of tag.operations) {\n const route: RouteInfo = {\n type: 'endpoint',\n tag: tag.name,\n method: op.method,\n path: op.path,\n operationId: op.operationId,\n };\n const isActive = currentRoute.type === 'endpoint'\n && (\n (currentRoute.operationId && currentRoute.operationId === op.operationId)\n || (currentRoute.method === op.method && currentRoute.path === op.path)\n );\n const card = createCard({\n interactive: true,\n active: isActive,\n className: `card-group${op.deprecated ? ' deprecated' : ''}`,\n onClick: () => navigate(buildPath(route)),\n });\n\n const lockEl = hasOperationAuth(op.resolvedSecurity)\n ? createLockIcon({\n configured: isOperationAuthConfigured(op.resolvedSecurity, spec.securitySchemes || {}),\n variant: 'tag',\n title: formatOperationAuthTitle(op.resolvedSecurity),\n })\n : null;\n\n const badges = h('div', { className: 'card-badges' });\n badges.append(createBadge({ text: op.method.toUpperCase(), kind: 'method', method: op.method, size: 'm', mono: true }));\n\n const top = h('div', { className: 'card-group-top' });\n if (lockEl) top.append(lockEl);\n top.append(h('h3', { className: 'card-group-title' }, h('code', { textContent: op.path })), badges);\n\n const desc = op.summary || op.operationId\n ? h('p', { className: 'card-group-description', textContent: op.summary || op.operationId })\n : null;\n\n card.append(top);\n if (desc) card.append(desc);\n opsSection.append(card);\n }\n\n pageSlot.append(opsSection);\n\n // Reactive: update breadcrumb base URL when environment changes\n const breadcrumbHomeEl = breadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (breadcrumbHomeEl) {\n useEffects().on('tag:breadcrumb', (st) => {\n breadcrumbHomeEl.textContent = getDisplayBaseUrl(st) || st.spec?.info.title || 'Home';\n });\n }\n}\n\nfunction getTagMethodBreakdown(tag: SpecTag): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of tag.operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n","import { h, clear } from '../../lib/dom';\nimport { navigate } from '../../core/router';\nimport { store } from '../../core/state';\nimport { useEffects } from '../../core/effects';\nimport { getDisplayBaseUrl } from '../../services/env';\nimport { renderSchemaViewer, renderParametersCard } from '../shared/schema-viewer';\nimport {\n createSchemaBodyContent, createBodyCategoryTrailing, createCollapsibleCategory,\n renderResponseHeadersList, renderResponseCategories,\n type ResponseTabData,\n} from '../shared/responses';\nimport { createBadge, createSection, createSectionTitleWrap, createBreadcrumb, createCard, createCardHeader, createCardBody, createResponseCodeTab, setResponseCodeTabActive } from '../ui';\nimport { createCopyButton } from '../shared/copy-button';\nimport { renderRouteNavigation } from '../nav/route-nav';\nimport type { SpecWebhook } from '../../core/types';\n\n/** Render a webhook detail page — similar to endpoint but marked as Webhook, no Try It */\nexport async function renderWebhookPage(pageSlot: HTMLElement, webhook: SpecWebhook): Promise<void> {\n clear(pageSlot);\n\n // Breadcrumb\n const webhookBadge = createBadge({\n text: 'WEBHOOK',\n kind: 'webhook',\n size: 'm',\n mono: true,\n });\n const methodBadge = createBadge({\n text: webhook.method.toUpperCase(),\n kind: 'method',\n method: webhook.method,\n mono: true,\n size: 'm',\n });\n const state = store.get();\n const baseUrlDisplay = getDisplayBaseUrl(state);\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy webhook name',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => `${webhook.method.toUpperCase()} ${webhook.name}`,\n });\n const breadcrumb = createBreadcrumb(\n [\n {\n label: baseUrlDisplay || state.spec?.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: webhook.name, className: 'breadcrumb-current' },\n ],\n { leading: [webhookBadge, methodBadge], trailing: [copyBtn] },\n );\n\n // Header\n const header = h('div', { className: 'block header' });\n if (webhook.summary) {\n header.append(h('h1', { textContent: webhook.summary }));\n } else {\n header.append(h('h1', { textContent: webhook.name }));\n }\n\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n if (webhook.description) {\n header.append(h('p', { textContent: webhook.description }));\n }\n\n pageSlot.append(header);\n\n // Parameters\n const visibleParams = webhook.parameters.filter((p) => p.in !== 'cookie');\n if (visibleParams.length > 0) {\n const paramSection = createSection({ title: 'Parameters' }, renderParamsTable(visibleParams));\n pageSlot.append(paramSection);\n }\n\n // Request Body (what the webhook sends)\n if (webhook.requestBody) {\n const bodySection = createSection({\n titleEl: createSectionTitleWrap('Request'),\n });\n\n const contentEntries = Object.entries(webhook.requestBody.content || {});\n if (contentEntries.length > 0) {\n const card = createCard();\n const cardBody = createCardBody('no-padding');\n const categories = h('div', { className: 'collapsible-categories' });\n\n const wrapper = h('div', { className: 'request-body-wrap' });\n if (webhook.requestBody.description) {\n wrapper.append(h('p', { textContent: webhook.requestBody.description }));\n }\n\n const schemas = contentEntries.map(([ct, mt]) => createSchemaBodyContent(ct, mt, 'No schema'));\n if (schemas.length === 1) {\n const body = schemas[0];\n wrapper.append(body.content);\n const bodyCategory = createCollapsibleCategory({\n title: 'Body',\n content: wrapper,\n trailing: createBodyCategoryTrailing(body),\n counter: body.itemsCount,\n });\n categories.append(bodyCategory.root);\n } else {\n const mediaList = h('div', { className: 'schema-media-list' });\n for (const body of schemas) {\n const mediaHeader = h('div', { className: 'schema-media-header' });\n mediaHeader.append(\n createBadge({ text: body.contentType, kind: 'chip', size: 's', mono: true }),\n createBadge({ text: body.schemaType, kind: 'chip', color: 'primary', size: 's', mono: true }),\n );\n const item = h('div', { className: 'schema-media-item' });\n item.append(mediaHeader, body.content);\n mediaList.append(item);\n }\n wrapper.append(mediaList);\n const bodyCategory = createCollapsibleCategory({\n title: 'Body',\n content: wrapper,\n counter: schemas.length,\n });\n categories.append(bodyCategory.root);\n }\n\n cardBody.append(categories);\n card.append(cardBody);\n bodySection.append(card);\n }\n\n pageSlot.append(bodySection);\n }\n\n // Responses (expected responses from the webhook consumer)\n const responses = Object.entries(webhook.responses);\n if (responses.length > 0) {\n const respSection = createSection({\n titleEl: createSectionTitleWrap('Expected Responses'),\n });\n\n const card = createCard();\n const headerRow = h('div', { className: 'card-row responses-header-row' });\n const codesWrap = h('div', { className: 'tabs-code codes' });\n let activeCode = responses[0][0];\n const tabData = new Map<string, ResponseTabData>();\n\n for (const [code, response] of responses) {\n const tabBtn = createResponseCodeTab(code, code === activeCode);\n\n const firstContentType = response.content ? Object.keys(response.content)[0] || 'application/json' : 'application/json';\n const mediaType = response.content?.[firstContentType];\n const bodyBlock = createSchemaBodyContent(firstContentType, mediaType, response.description || 'No schema');\n const headersEl = response.headers ? renderResponseHeadersList(response.headers) : null;\n\n tabData.set(code, {\n body: bodyBlock,\n headers: headersEl,\n headersCount: response.headers ? Object.keys(response.headers).length : 0,\n });\n codesWrap.append(tabBtn);\n\n tabBtn.addEventListener('click', () => {\n codesWrap.querySelectorAll('[data-badge-group=\"response-code\"]').forEach((t) => setResponseCodeTabActive(t as HTMLElement, false));\n setResponseCodeTabActive(tabBtn, true);\n activeCode = code;\n const data = tabData.get(code)!;\n contentContainer.innerHTML = '';\n contentContainer.append(renderResponseCategories(data));\n });\n }\n\n headerRow.append(codesWrap);\n card.append(createCardHeader(headerRow));\n\n const bodyWrapper = createCardBody('no-padding');\n const contentContainer = h('div');\n const initialData = tabData.get(activeCode);\n if (initialData) {\n contentContainer.append(renderResponseCategories(initialData));\n }\n\n bodyWrapper.append(contentContainer);\n card.append(bodyWrapper);\n respSection.append(card);\n\n pageSlot.append(respSection);\n }\n\n const routeNav = renderRouteNavigation({ type: 'webhook', webhookName: webhook.name });\n if (routeNav) {\n pageSlot.append(h('div', { className: 'block section' }, routeNav));\n }\n\n // Reactive: update breadcrumb base URL when environment changes\n const breadcrumbHomeEl = breadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (breadcrumbHomeEl) {\n useEffects().on('webhook:breadcrumb', (st) => {\n breadcrumbHomeEl.textContent = getDisplayBaseUrl(st) || st.spec?.info.title || 'Home';\n });\n }\n}\n\nfunction renderParamsTable(params: SpecWebhook['parameters']): HTMLElement {\n const pathCount = params.filter((p) => p.in === 'path').length;\n const queryCount = params.filter((p) => p.in === 'query').length;\n const headerTitle =\n pathCount > 0 && queryCount > 0 ? 'Parameters' : pathCount > 0 ? 'Path' : 'Query';\n return renderParametersCard(params, { headerTitle, withEnumAndDefault: false });\n}\n","import { h } from '../../lib/dom';\n\nexport interface ContentAreaLayout {\n page: HTMLElement;\n main: HTMLElement;\n aside: HTMLElement;\n}\n\n/** Layout: page (main + aside). */\nexport function createContentArea(): ContentAreaLayout {\n const page = h('div', { className: 'page' });\n const mainPane = h('div', {\n className: 'main',\n role: 'main',\n });\n const main = h('div', { className: 'content' });\n mainPane.append(main);\n\n const asidePane = h('div', {\n className: 'aside',\n 'aria-label': 'Panel',\n });\n const aside = h('div', { className: 'content' });\n asidePane.append(aside);\n asidePane.hidden = true;\n\n page.append(mainPane, asidePane);\n return { page, main, aside };\n}\n\n/** Enable/disable aside in page layout. */\nexport function setContentAreaAside(page: HTMLElement, hasAside: boolean): void {\n const aside = page.querySelector('.aside') as HTMLElement | null;\n if (aside) aside.hidden = !hasAside;\n}\n","import { h } from '../../lib/dom';\n\nexport interface EmptyStateOptions {\n title: string;\n message?: string;\n icon?: string;\n variant?: 'loading' | 'error' | 'empty';\n}\n\n/**\n * Helper for loading/error/empty pages.\n * Returns ready page for render(pageSlotEl, createEmptyStatePage(...)).\n */\nexport function createEmptyStatePage(opts: EmptyStateOptions): HTMLElement {\n const { title, message, icon, variant = 'empty' } = opts;\n if (variant === 'loading') {\n return h('div', { className: 'block header' },\n h('h2', { textContent: title }),\n h('div', { className: 'loading' },\n h('div', { className: 'spinner' }),\n h('span', null, message || title),\n ),\n );\n }\n\n const header = h('div', { className: 'block header' });\n if (icon) {\n header.append(h('span', { innerHTML: icon, className: 'icon-muted' }));\n }\n header.append(h('h2', { textContent: title }));\n if (message) {\n header.append(h('p', { className: 'error-message', textContent: message }));\n }\n return header;\n}\n","import { h, clear, render } from '../lib/dom';\nimport { icons } from '../lib/icons';\nimport { store } from '../core/state';\nimport { useEffects, notifyEffects, disposeEffects } from '../core/effects';\nimport { slugifyTag, navigate, buildPath } from '../core/router';\nimport { applyTheme, type ThemeConfig } from '../core/theme';\nimport { renderSidebar, updateSidebarActiveState, updateSidebarAuthState, updateSidebarEnvironment } from './nav/sidebar';\nimport { renderOverview } from './pages/overview';\nimport { renderEndpoint } from './pages/endpoint';\nimport { renderTagPage } from './pages/tag-page';\nimport { renderSchemaViewer } from './shared/schema-viewer';\nimport { renderWebhookPage } from './pages/webhook';\nimport { createBreadcrumb, createBadge, createCard, createSection } from './ui';\nimport { createCopyButton } from './shared/copy-button';\nimport { createSummaryLine } from './shared/summary';\nimport { createContentArea, setContentAreaAside } from './layout/page-layout';\nimport { createEmptyStatePage } from './layout/empty-state-page';\nimport { getBaseUrl, formatBaseUrlForDisplay } from '../services/env';\nimport type { PortalConfig, PortalState, RouteInfo } from '../core/types';\n\nlet rootEl: HTMLElement | null = null;\nlet sidebarEl: HTMLElement | null = null;\nlet pageEl: HTMLElement | null = null;\nlet mainEl: HTMLElement | null = null;\nlet asideEl: HTMLElement | null = null;\nlet prevRoute: RouteInfo | null = null;\nlet prevSpecLoaded = false;\nlet prevEnvState = '';\nlet currentConfig: PortalConfig | null = null;\nlet cleanupViewportSync: (() => void) | null = null;\nconst MOBILE_SIDEBAR_MAX_WIDTH = 991;\n\n/** Get current portal config */\nexport function getCurrentConfig(): PortalConfig | null {\n return currentConfig;\n}\n\n/** Mount the full portal app into the container */\nexport function mountApp(container: HTMLElement, config: PortalConfig): void {\n currentConfig = config;\n rootEl = h('div', { className: 'root' });\n\n const themeConfig: ThemeConfig = {\n primaryColor: config.primaryColor,\n };\n applyTheme(rootEl, store.get().theme, themeConfig);\n\n const expandTrigger = h('button', {\n type: 'button',\n className: 'sidebar-expand-trigger',\n 'aria-label': 'Open sidebar',\n });\n expandTrigger.innerHTML = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\"><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/></svg>';\n expandTrigger.addEventListener('click', () => {\n store.set({ sidebarOpen: true });\n sidebarEl?.classList.remove('collapsed');\n });\n\n sidebarEl = h('aside', { className: 'sidebar', 'aria-label': 'Navigation' });\n\n const { page, main, aside } = createContentArea();\n pageEl = page;\n mainEl = main;\n asideEl = aside;\n\n rootEl.append(expandTrigger, sidebarEl, page);\n container.append(rootEl);\n setupViewportSidebarSync();\n\n store.subscribe((state) => {\n if (!rootEl) return;\n applyTheme(rootEl, state.theme, themeConfig);\n sidebarEl?.classList.toggle('collapsed', !state.sidebarOpen);\n expandTrigger.classList.toggle('visible', !state.sidebarOpen);\n void updateContent(state, config);\n });\n\n sidebarEl?.classList.toggle('collapsed', !store.get().sidebarOpen);\n expandTrigger.classList.toggle('visible', !store.get().sidebarOpen);\n void updateContent(store.get(), config);\n}\n\n/** Unmount the portal */\nexport function unmountApp(): void {\n cleanupViewportSync?.();\n cleanupViewportSync = null;\n disposeEffects();\n\n if (rootEl) {\n rootEl.remove();\n rootEl = null;\n sidebarEl = null;\n pageEl = null;\n mainEl = null;\n asideEl = null;\n prevRoute = null;\n prevSpecLoaded = false;\n currentConfig = null;\n }\n}\n\nasync function updateContent(state: PortalState, config: PortalConfig): Promise<void> {\n const specLoaded = !!state.spec;\n if (sidebarEl && specLoaded) {\n if (!prevSpecLoaded) {\n renderSidebar(sidebarEl, config);\n } else {\n updateSidebarActiveState(sidebarEl, state.route);\n }\n prevSpecLoaded = true;\n } else {\n prevSpecLoaded = false;\n }\n\n const currentMainEl = mainEl;\n const currentAsideEl = asideEl;\n const currentPageEl = pageEl;\n if (!currentMainEl || !currentAsideEl || !currentPageEl) return;\n\n if (state.loading) {\n setContentAreaAside(currentPageEl, false);\n clear(currentAsideEl);\n render(currentMainEl, createEmptyStatePage({ title: 'Loading...', message: 'Loading API specification...', variant: 'loading' }));\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n if (mainScroll) mainScroll.scrollTop = 0;\n return;\n }\n\n if (state.error) {\n setContentAreaAside(currentPageEl, false);\n clear(currentAsideEl);\n render(currentMainEl, createEmptyStatePage({\n title: 'Failed to load API specification',\n message: state.error,\n icon: icons.warning,\n variant: 'error',\n }));\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n if (mainScroll) mainScroll.scrollTop = 0;\n return;\n }\n\n if (!state.spec) return;\n\n // Route-based rendering\n const route = state.route;\n const envState = `${state.activeEnvironment}|${state.auth.token}`;\n const isSameCurrentRoute = !!(prevRoute && isSameRoute(prevRoute, route));\n const isSameRouteWithEnvOrAuthChange = isSameCurrentRoute && prevEnvState !== envState;\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n const prevMainScrollTop = mainScroll ? mainScroll.scrollTop : 0;\n\n // Skip re-render if same route AND env/auth unchanged\n if (isSameCurrentRoute && prevEnvState === envState) return;\n \n // Route unchanged but env/auth changed — notify page effects + sidebar\n if (isSameRouteWithEnvOrAuthChange) {\n prevEnvState = envState;\n notifyEffects(state);\n if (sidebarEl && state.spec) {\n updateSidebarAuthState(sidebarEl);\n updateSidebarEnvironment(sidebarEl);\n }\n return;\n }\n \n prevRoute = { ...route };\n prevEnvState = envState;\n\n // Dispose previous page effects before re-render\n disposeEffects();\n\n // Clean up mobile route-nav from previous render (lives outside main/aside, in .page directly)\n currentPageEl.querySelectorAll(':scope > .route-nav-wrap').forEach((el) => el.remove());\n\n clear(currentMainEl);\n clear(currentAsideEl);\n\n switch (route.type) {\n case 'overview':\n setContentAreaAside(currentPageEl, false);\n renderOverview(currentMainEl, currentAsideEl);\n break;\n\n case 'tag': {\n setContentAreaAside(currentPageEl, false);\n renderTagPage(currentMainEl, currentAsideEl, route.tag || '');\n break;\n }\n\n case 'endpoint': {\n const op = findOperation(state, route);\n if (op) {\n const showTryIt = op.method.toLowerCase() !== 'trace';\n setContentAreaAside(currentPageEl, showTryIt);\n await renderEndpoint(currentMainEl, currentAsideEl, op);\n } else {\n setContentAreaAside(currentPageEl, false);\n const endpointLabel = route.operationId\n ? route.operationId\n : `${route.method?.toUpperCase() || ''} ${route.path || ''}`.trim();\n render(currentMainEl, createEmptyStatePage({\n title: 'Endpoint not found',\n message: endpointLabel || 'Unknown endpoint',\n variant: 'empty',\n }));\n }\n break;\n }\n\n case 'schema': {\n setContentAreaAside(currentPageEl, false);\n if (route.schemaName) {\n const schema = state.spec.schemas[route.schemaName];\n if (schema) {\n const baseUrl = getBaseUrl(state);\n const baseUrlDisplay = formatBaseUrlForDisplay(baseUrl);\n const schemaCopyBtn = createCopyButton({\n ariaLabel: 'Copy schema name',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => route.schemaName || '',\n });\n const schemaBreadcrumb = createBreadcrumb(\n [\n {\n label: baseUrlDisplay || state.spec.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: route.schemaName, className: 'breadcrumb-current' },\n ],\n {\n leading: [createBadge({ text: 'Schema', kind: 'chip', size: 'm', mono: true })],\n trailing: [schemaCopyBtn],\n },\n );\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: route.schemaName }));\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(schemaBreadcrumb);\n header.append(breadcrumbWrap);\n if (schema.description) {\n header.append(h('p', { textContent: String(schema.description) }));\n }\n const schemaSection = h('div', { className: 'block section' });\n schemaSection.append(renderSchemaViewer(schema, 'Properties'));\n render(currentMainEl, header, schemaSection);\n\n // Reactive: breadcrumb base URL\n const schBreadcrumbHome = schemaBreadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (schBreadcrumbHome) {\n useEffects().on('schema:breadcrumb', (st) => {\n schBreadcrumbHome.textContent = formatBaseUrlForDisplay(getBaseUrl(st)) || st.spec?.info.title || 'Home';\n });\n }\n }\n } else {\n renderSchemaListPage(currentMainEl, state);\n }\n break;\n }\n\n case 'webhook': {\n setContentAreaAside(currentPageEl, false);\n if (route.webhookName) {\n const wh = state.spec.webhooks?.find((w) => w.name === route.webhookName);\n if (wh) {\n renderWebhookPage(currentMainEl, wh);\n } else {\n render(currentMainEl, createEmptyStatePage({\n title: 'Webhook not found',\n message: route.webhookName,\n variant: 'empty',\n }));\n }\n } else {\n renderWebhookListPage(currentMainEl, state);\n }\n break;\n }\n\n default:\n setContentAreaAside(currentPageEl, false);\n renderOverview(currentMainEl, currentAsideEl);\n }\n\n if (mainScroll) {\n mainScroll.scrollTop = isSameRouteWithEnvOrAuthChange ? prevMainScrollTop : 0;\n }\n}\n\nfunction findOperation(state: PortalState, route: RouteInfo) {\n if (!state.spec || route.type !== 'endpoint') return null;\n\n // 1. Match by operationId (highest priority)\n if (route.operationId) {\n const op = state.spec.operations.find((o) => o.operationId === route.operationId);\n if (op) return op;\n }\n\n const method = (route.method || '').toLowerCase();\n if (!method) return null;\n\n // 2. Match by method + exact path\n const path = route.path || '';\n const candidates = state.spec.operations.filter(\n (op) => op.method.toLowerCase() === method && op.path === path,\n );\n\n if (candidates.length === 0) return null;\n if (candidates.length === 1) return candidates[0];\n\n // 3. Multiple matches — disambiguate by tag (slug comparison)\n if (route.tag) {\n const routeTagSlug = slugifyTag(route.tag);\n const tagged = candidates.find((op) =>\n op.tags.some((t) => slugifyTag(t) === routeTagSlug),\n );\n if (tagged) return tagged;\n }\n\n return candidates[0];\n}\n\nfunction setupViewportSidebarSync(): void {\n cleanupViewportSync?.();\n cleanupViewportSync = null;\n\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n\n const media = window.matchMedia(`(max-width: ${MOBILE_SIDEBAR_MAX_WIDTH}px)`);\n const syncState = (isMobile: boolean): void => {\n const shouldBeOpen = !isMobile;\n if (store.get().sidebarOpen !== shouldBeOpen) {\n store.set({ sidebarOpen: shouldBeOpen });\n }\n };\n\n syncState(media.matches);\n\n const onChange = (event: MediaQueryListEvent): void => {\n syncState(event.matches);\n };\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', onChange);\n cleanupViewportSync = () => media.removeEventListener('change', onChange);\n return;\n }\n\n const legacyOnChange = onChange as unknown as (event: MediaQueryListEvent) => void;\n media.addListener(legacyOnChange);\n cleanupViewportSync = () => media.removeListener(legacyOnChange);\n}\n\nfunction isSameRoute(a: RouteInfo, b: RouteInfo): boolean {\n return a.type === b.type\n && a.operationId === b.operationId\n && a.method === b.method\n && a.path === b.path\n && a.schemaName === b.schemaName\n && a.tag === b.tag\n && a.webhookName === b.webhookName;\n}\n\n/** Render a list page for all webhooks — similar to tag-page */\nfunction renderWebhookListPage(slot: HTMLElement, state: PortalState): void {\n const spec = state.spec;\n if (!spec) return;\n const webhooks = spec.webhooks || [];\n\n const baseUrl = getBaseUrl(state);\n const baseUrlDisplay = formatBaseUrlForDisplay(baseUrl);\n\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: 'Webhooks' }));\n\n const breadcrumb = createBreadcrumb([\n {\n label: baseUrlDisplay || spec.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: 'Webhooks', className: 'breadcrumb-current' },\n ], {\n leading: [createBadge({ text: 'Tag', kind: 'chip', size: 'm', mono: true })],\n trailing: [createCopyButton({\n ariaLabel: 'Copy',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => 'Webhooks',\n })],\n });\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n slot.append(header);\n\n // Reactive: breadcrumb base URL\n const whListBreadcrumbHome = breadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (whListBreadcrumbHome) {\n useEffects().on('webhookList:breadcrumb', (st) => {\n whListBreadcrumbHome.textContent = formatBaseUrlForDisplay(getBaseUrl(st)) || st.spec?.info.title || 'Home';\n });\n }\n\n // Summary\n const methods: Record<string, number> = {};\n for (const wh of webhooks) {\n methods[wh.method] = (methods[wh.method] || 0) + 1;\n }\n slot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [{ label: 'Webhooks', value: webhooks.length }],\n methods,\n ),\n ));\n\n // Cards\n const opsSection = createSection({ title: 'Webhooks' });\n for (const wh of webhooks) {\n const whRoute: RouteInfo = { type: 'webhook', webhookName: wh.name };\n const isActive = state.route.type === 'webhook' && state.route.webhookName === wh.name;\n const card = createCard({\n interactive: true,\n active: isActive,\n className: 'card-group',\n onClick: () => navigate(buildPath(whRoute)),\n });\n const badges = h('div', { className: 'card-badges' });\n badges.append(\n createBadge({ text: 'WH', kind: 'webhook', size: 'm', mono: true }),\n createBadge({ text: wh.method.toUpperCase(), kind: 'method', method: wh.method, size: 'm', mono: true }),\n );\n const top = h('div', { className: 'card-group-top' });\n top.append(h('h3', { className: 'card-group-title', textContent: wh.name }), badges);\n const desc = h('p', {\n className: 'card-group-description',\n textContent: wh.summary || wh.description || `${wh.method.toUpperCase()} webhook`,\n });\n card.append(top, desc);\n opsSection.append(card);\n }\n slot.append(opsSection);\n}\n\n/** Render a list page for all schemas — similar to tag-page */\nfunction renderSchemaListPage(slot: HTMLElement, state: PortalState): void {\n const spec = state.spec;\n if (!spec) return;\n const schemaNames = Object.keys(spec.schemas);\n\n const baseUrl = getBaseUrl(state);\n const baseUrlDisplay = formatBaseUrlForDisplay(baseUrl);\n\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: 'Schemas' }));\n\n const breadcrumb = createBreadcrumb([\n {\n label: baseUrlDisplay || spec.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: 'Schemas', className: 'breadcrumb-current' },\n ], {\n leading: [createBadge({ text: 'Tag', kind: 'chip', size: 'm', mono: true })],\n trailing: [createCopyButton({\n ariaLabel: 'Copy',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => 'Schemas',\n })],\n });\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap endpoint-breadcrumb' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n slot.append(header);\n\n // Reactive: breadcrumb base URL\n const schListBreadcrumbHome = breadcrumb.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (schListBreadcrumbHome) {\n useEffects().on('schemaList:breadcrumb', (st) => {\n schListBreadcrumbHome.textContent = formatBaseUrlForDisplay(getBaseUrl(st)) || st.spec?.info.title || 'Home';\n });\n }\n\n // Summary\n slot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [{ label: 'Schemas', value: schemaNames.length }],\n {},\n ),\n ));\n\n // Cards\n const schemasSection = createSection({ title: 'Schemas' });\n for (const name of schemaNames) {\n const schema = spec.schemas[name];\n const schemaRoute: RouteInfo = { type: 'schema', schemaName: name };\n const isActive = state.route.type === 'schema' && state.route.schemaName === name;\n const card = createCard({\n interactive: true,\n active: isActive,\n className: 'card-group',\n onClick: () => navigate(buildPath(schemaRoute)),\n });\n const badges = h('div', { className: 'card-badges' });\n const schemaType = schema.type || (schema.allOf ? 'allOf' : schema.oneOf ? 'oneOf' : schema.anyOf ? 'anyOf' : 'object');\n badges.append(createBadge({ text: schemaType, kind: 'chip', size: 'm', mono: true }));\n if (schema.properties) {\n badges.append(createBadge({ text: `${Object.keys(schema.properties).length} props`, kind: 'chip', size: 'm', mono: true }));\n }\n const top = h('div', { className: 'card-group-top' });\n top.append(h('h3', { className: 'card-group-title', textContent: name }), badges);\n const desc = schema.description\n ? h('p', { className: 'card-group-description', textContent: String(schema.description) })\n : h('p', { className: 'card-group-description', textContent: `${schemaType} schema` });\n card.append(top, desc);\n schemasSection.append(card);\n }\n slot.append(schemasSection);\n}\n","/**\n * Persist portal state (env, baseUrl, auth) to localStorage\n * so values survive page refresh.\n */\n\nimport type { PortalEnvironment, AuthState } from './types';\n\nconst STORAGE_KEY = 'ap_portal_prefs';\n\nexport interface PersistedState {\n activeEnvironment: string;\n environments: PortalEnvironment[];\n auth: AuthState;\n}\n\nexport function loadPersisted(): PersistedState | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const data = JSON.parse(raw) as PersistedState;\n if (!data || typeof data !== 'object') return null;\n return {\n activeEnvironment: typeof data.activeEnvironment === 'string' ? data.activeEnvironment : '',\n environments: Array.isArray(data.environments) ? data.environments : [],\n auth: data.auth && typeof data.auth === 'object'\n ? {\n schemes: data.auth.schemes && typeof data.auth.schemes === 'object' ? data.auth.schemes : {},\n activeScheme: typeof data.auth.activeScheme === 'string' ? data.auth.activeScheme : '',\n token: typeof data.auth.token === 'string' ? data.auth.token : '',\n locked: Boolean(data.auth.locked),\n source: data.auth.source === 'manual' || data.auth.source === 'auto-body' || data.auth.source === 'auto-header'\n ? data.auth.source\n : 'manual',\n }\n : { schemes: {}, activeScheme: '', token: '', locked: false, source: 'manual' },\n };\n } catch {\n return null;\n }\n}\n\nexport function savePersisted(data: PersistedState): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {\n /* noop */\n }\n}\n","import type { AuthState, SecurityScheme } from './types';\n\nfunction getSchemePriority(scheme: SecurityScheme): number {\n if (scheme.type === 'http') {\n const httpScheme = (scheme.scheme || '').toLowerCase();\n if (httpScheme === 'bearer') return 0;\n if (httpScheme === 'basic') return 3;\n return 4;\n }\n if (scheme.type === 'oauth2' || scheme.type === 'openIdConnect') return 1;\n if (scheme.type === 'apiKey') return 2;\n return 5;\n}\n\nfunction getPreferredSchemeName(securitySchemes: Record<string, SecurityScheme>): string {\n const names = Object.keys(securitySchemes);\n if (names.length === 0) return '';\n\n let bestName = names[0];\n let bestPriority = getSchemePriority(securitySchemes[bestName]);\n for (let i = 1; i < names.length; i++) {\n const name = names[i];\n const priority = getSchemePriority(securitySchemes[name]);\n if (priority < bestPriority) {\n bestPriority = priority;\n bestName = name;\n }\n }\n return bestName;\n}\n\nexport function areAuthStatesEqual(a: AuthState, b: AuthState): boolean {\n if (a.activeScheme !== b.activeScheme) return false;\n if (a.token !== b.token) return false;\n if (a.locked !== b.locked) return false;\n if (a.source !== b.source) return false;\n\n const aEntries = Object.entries(a.schemes);\n const bEntries = Object.entries(b.schemes);\n if (aEntries.length !== bEntries.length) return false;\n for (const [key, value] of aEntries) {\n if (b.schemes[key] !== value) return false;\n }\n return true;\n}\n\nexport function reconcileAuthWithSecuritySchemes(\n auth: AuthState,\n securitySchemes: Record<string, SecurityScheme>,\n): AuthState {\n const availableSchemeNames = Object.keys(securitySchemes);\n if (availableSchemeNames.length === 0) {\n return { ...auth, schemes: { ...auth.schemes } };\n }\n\n const schemes: Record<string, string> = {};\n for (const name of availableSchemeNames) {\n const value = auth.schemes[name];\n if (typeof value === 'string' && value.length > 0) {\n schemes[name] = value;\n }\n }\n\n let activeScheme = auth.activeScheme;\n if (!activeScheme || !securitySchemes[activeScheme]) {\n activeScheme = availableSchemeNames.find((name) => Boolean(schemes[name])) || '';\n }\n\n if (!activeScheme && auth.token) {\n activeScheme = getPreferredSchemeName(securitySchemes);\n }\n\n if (activeScheme && auth.token && !schemes[activeScheme]) {\n schemes[activeScheme] = auth.token;\n }\n\n let token = auth.token;\n if (activeScheme && schemes[activeScheme] && token !== schemes[activeScheme]) {\n token = schemes[activeScheme];\n }\n if (!token && activeScheme && schemes[activeScheme]) {\n token = schemes[activeScheme];\n }\n\n return {\n ...auth,\n schemes,\n activeScheme,\n token,\n };\n}\n","export function debounce<T extends (...args: unknown[]) => void>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout>;\n return ((...args: unknown[]) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), ms);\n }) as T;\n}\n","import './styles/index.css';\nimport type {\n PortalConfig,\n PortalApi,\n PortalState,\n PortalBootstrapConfig,\n} from './core/types';\nimport { store } from './core/state';\nimport { initRouter, destroyRouter, navigate as routerNavigate } from './core/router';\nimport { parseSpec, loadSpec } from './core/parser';\nimport { buildSearchIndex } from './core/search';\nimport { detectTheme } from './core/theme';\nimport { mountApp, unmountApp } from './components/app';\nimport { setupSearchShortcut } from './components/modals/search-modal';\nimport { loadPersisted, savePersisted } from './core/persistence';\nimport {\n areAuthStatesEqual,\n reconcileAuthWithSecuritySchemes,\n} from './core/auth-storage';\nimport { debounce } from './helpers/debounce';\n\nlet mounted = false;\nlet currentApi: PortalApi | null = null;\nlet cleanupSearchShortcut: (() => void) | null = null;\n\nfunction resolveBootstrapMount(config: PortalBootstrapConfig): HTMLElement {\n const providedMount = config.mount;\n\n if (providedMount) {\n const target = typeof providedMount === 'string'\n ? document.querySelector<HTMLElement>(providedMount)\n : providedMount;\n\n if (!target) {\n throw new Error(`[PureDocs] Mount target not found: ${String(providedMount)}`);\n }\n\n return target;\n }\n\n const mountId = config.mountId || 'puredocs';\n const existing = document.getElementById(mountId);\n if (existing) return existing;\n\n const created = document.createElement('div');\n created.id = mountId;\n document.body.append(created);\n return created;\n}\n\nfunction ensureStylesheetOnce(href: string): void {\n const links = Array.from(document.querySelectorAll('link[rel=\"stylesheet\"]'));\n const alreadyIncluded = links.some((link) => link.getAttribute('href') === href);\n if (alreadyIncluded) return;\n\n const styleLink = document.createElement('link');\n styleLink.rel = 'stylesheet';\n styleLink.href = href;\n document.head.append(styleLink);\n}\n\nfunction applyFullPageLayout(target: HTMLElement): void {\n document.documentElement.style.minHeight = '100%';\n document.body.style.minHeight = '100vh';\n document.body.style.margin = '0';\n target.style.minHeight = '100vh';\n target.style.display = 'block';\n}\n\nfunction getAssetBasePath(pathname: string): string {\n const normalized = (pathname || '/').replace(/\\/+/g, '/');\n const markerWithTail = normalized.indexOf('/~/');\n if (markerWithTail >= 0) return `${normalized.slice(0, markerWithTail) || ''}/`;\n if (normalized.endsWith('/~')) return `${normalized.slice(0, -2) || ''}/`;\n if (normalized.endsWith('/')) return normalized;\n\n const lastSegment = normalized.split('/').filter(Boolean).pop() || '';\n if (lastSegment && !lastSegment.includes('.')) return `${normalized}/`;\n\n const lastSlash = normalized.lastIndexOf('/');\n if (lastSlash < 0) return '/';\n return normalized.slice(0, lastSlash + 1);\n}\n\nfunction resolveSpecUrl(specUrl: string): string {\n if (!specUrl) return specUrl;\n\n const absoluteLike = /^(?:[a-zA-Z][a-zA-Z\\d+.-]*:)?\\/\\//.test(specUrl);\n if (absoluteLike || specUrl.startsWith('/')) return specUrl;\n\n const base = new URL(window.location.href);\n base.pathname = getAssetBasePath(window.location.pathname || '/');\n base.search = '';\n base.hash = '';\n\n return new URL(specUrl, base.href).toString();\n}\n\n/** Mount the portal into the DOM */\nasync function mount(config: PortalConfig): Promise<PortalApi> {\n let preservedAuth = null;\n \n if (mounted) {\n // Preserve auth state during hot-reload\n preservedAuth = store.get().auth;\n unmount();\n }\n\n const target = typeof config.mount === 'string'\n ? document.querySelector<HTMLElement>(config.mount)\n : config.mount;\n\n if (!target) {\n throw new Error(`[PureDocs] Mount target not found: ${String(config.mount)}`);\n }\n\n store.reset();\n\n const initialEnvs = [{ name: 'default', baseUrl: '' }];\n\n store.set({\n loading: true,\n theme: detectTheme(config.theme),\n environments: [...initialEnvs],\n initialEnvironments: [...initialEnvs],\n activeEnvironment: 'default',\n });\n\n const persisted = loadPersisted();\n if (persisted) {\n store.set({\n activeEnvironment: persisted.activeEnvironment || 'default',\n auth: persisted.auth,\n });\n } else if (preservedAuth) {\n // No persisted data, but we have auth from previous mount - restore it\n store.setAuth(preservedAuth);\n }\n\n const saveDebounce = debounce(() => {\n const s = store.get();\n savePersisted({\n activeEnvironment: s.activeEnvironment,\n environments: s.environments,\n auth: s.auth,\n });\n }, 300);\n\n store.subscribe(() => saveDebounce());\n\n initRouter('');\n cleanupSearchShortcut = setupSearchShortcut();\n\n mountApp(target, config);\n mounted = true;\n\n try {\n let rawSpec: Record<string, unknown>;\n const initialSpecUrl = config.specUrl;\n\n if (config.spec) {\n rawSpec = config.spec;\n } else if (initialSpecUrl) {\n rawSpec = await loadSpec(resolveSpecUrl(initialSpecUrl));\n } else {\n throw new Error('Either spec or specUrl must be provided');\n }\n\n const parsed = parseSpec(rawSpec);\n\n if (parsed.servers.length > 0) {\n const envs = parsed.servers.map((server, i) => ({\n name: server.description || (i === 0 ? 'default' : `Server ${i + 1}`),\n baseUrl: server.url,\n }));\n store.set({ environments: envs, initialEnvironments: envs.map((e) => ({ ...e })) });\n const cur = store.get();\n const validActive = envs.some((e) => e.name === cur.activeEnvironment);\n if (!validActive) {\n store.set({ activeEnvironment: envs[0]?.name || 'default' });\n }\n }\n\n const auth = store.get().auth;\n const reconciledAuth = reconcileAuthWithSecuritySchemes(auth, parsed.securitySchemes);\n if (!areAuthStatesEqual(auth, reconciledAuth)) {\n store.setAuth(reconciledAuth);\n }\n\n buildSearchIndex(parsed);\n store.set({ spec: parsed, loading: false, error: null });\n } catch (err) {\n store.set({\n loading: false,\n error: (err as Error).message || 'Failed to load specification',\n });\n }\n\n currentApi = createApi();\n return currentApi;\n}\n\n/** Universal zero-boilerplate startup for JS consumers */\nasync function bootstrap(config: PortalBootstrapConfig): Promise<PortalApi> {\n if (typeof document === 'undefined') {\n throw new Error('[PureDocs] bootstrap() requires a browser environment');\n }\n\n const target = resolveBootstrapMount(config);\n\n if (config.cssHref) {\n ensureStylesheetOnce(config.cssHref);\n }\n\n if (config.fullPage !== false) {\n applyFullPageLayout(target);\n }\n\n const { mount: _mount, mountId: _mountId, cssHref: _cssHref, fullPage: _fullPage, ...portalConfig } = config;\n return mount({\n ...portalConfig,\n mount: target,\n });\n}\n\n/** Unmount portal and cleanup */\nfunction unmount(): void {\n if (!mounted) return;\n\n cleanupSearchShortcut?.();\n cleanupSearchShortcut = null;\n\n destroyRouter();\n unmountApp();\n store.reset();\n\n mounted = false;\n currentApi = null;\n}\n\nfunction createApi(): PortalApi {\n return {\n getState: () => store.get(),\n subscribe: (fn: (state: PortalState) => void) => store.subscribe(fn),\n setToken: (token: string) => {\n const activeScheme = store.get().auth.activeScheme;\n if (activeScheme) {\n store.setSchemeValue(activeScheme, token);\n } else {\n store.setAuth({ token, source: 'manual' });\n }\n },\n setEnvironment: (name: string) => store.setActiveEnvironment(name),\n navigate: (path: string) => routerNavigate(path),\n };\n}\n\nconst OBSERVED_ATTRIBUTES = [\n 'spec-url',\n 'spec-json',\n 'theme',\n 'primary-color',\n 'title',\n] as const;\n\nexport class PureDocsElement extends HTMLElement {\n private static activeElement: PureDocsElement | null = null;\n private api: PortalApi | null = null;\n private reloadTimer: ReturnType<typeof setTimeout> | null = null;\n\n static get observedAttributes(): string[] {\n return [...OBSERVED_ATTRIBUTES];\n }\n\n async connectedCallback(): Promise<void> {\n if (PureDocsElement.activeElement && PureDocsElement.activeElement !== this) {\n this.renderSingletonError();\n return;\n }\n\n PureDocsElement.activeElement = this;\n await this.mountFromAttributes();\n }\n\n disconnectedCallback(): void {\n if (PureDocsElement.activeElement === this) {\n this.api = null;\n unmount();\n PureDocsElement.activeElement = null;\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (!this.isConnected) return;\n if (oldValue === newValue) return;\n if (!OBSERVED_ATTRIBUTES.includes(name as (typeof OBSERVED_ATTRIBUTES)[number])) return;\n\n if (this.reloadTimer) clearTimeout(this.reloadTimer);\n this.reloadTimer = setTimeout(() => {\n void this.reload();\n }, 80);\n }\n\n async reload(): Promise<void> {\n if (PureDocsElement.activeElement !== this) return;\n await this.mountFromAttributes();\n }\n\n getState(): PortalState | null {\n return this.api?.getState() || null;\n }\n\n subscribe(fn: (state: PortalState) => void): () => void {\n return this.api?.subscribe(fn) || (() => {});\n }\n\n navigate(path: string): void {\n this.api?.navigate(path);\n }\n\n setToken(token: string): void {\n this.api?.setToken(token);\n }\n\n setEnvironment(name: string): void {\n this.api?.setEnvironment(name);\n }\n\n private async mountFromAttributes(): Promise<void> {\n try {\n this.innerHTML = '';\n const config = this.parseConfig();\n this.removeAttribute('title'); // prevent native browser tooltip on hover\n this.api = await mount({ ...config, mount: this });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.innerHTML = `<div style=\"padding:12px;border:1px solid #ef4444;border-radius:8px;color:#ef4444;background:#fff1f2;font-family:system-ui,sans-serif\">[PureDocs] ${message}</div>`;\n }\n }\n\n private parseConfig(): Omit<PortalConfig, 'mount'> {\n const rawSpec = this.getAttribute('spec-json');\n\n return {\n specUrl: this.getAttribute('spec-url') || undefined,\n spec: rawSpec ? parseJsonAttr<Record<string, unknown>>(rawSpec, 'spec-json') : undefined,\n theme: toTheme(this.getAttribute('theme')),\n primaryColor: this.getAttribute('primary-color') || undefined,\n title: this.getAttribute('title') || undefined,\n };\n }\n\n private renderSingletonError(): void {\n this.innerHTML = '<div style=\"padding:12px;border:1px solid #f59e0b;border-radius:8px;color:#92400e;background:#fffbeb;font-family:system-ui,sans-serif\">Only one <pure-docs> instance can be mounted at a time.</div>';\n }\n}\n\nfunction parseJsonAttr<T>(value: string, attrName: string): T {\n try {\n return JSON.parse(value) as T;\n } catch {\n throw new Error(`Invalid JSON in ${attrName}`);\n }\n}\n\nfunction toTheme(value: string | null): PortalConfig['theme'] | undefined {\n if (!value) return undefined;\n if (value === 'light' || value === 'dark' || value === 'auto') return value;\n return undefined;\n}\n\nif (!customElements.get('pure-docs')) {\n customElements.define('pure-docs', PureDocsElement);\n}\n\nexport const PureDocs = {\n mount,\n bootstrap,\n unmount,\n version: '1.0.0',\n};\n\nexport type { PortalConfig, PortalBootstrapConfig, PortalApi, PortalState } from './core/types';\nexport default PureDocs;\n"],"names":["Store","update","schemeName","value","schemes","activeScheme","token","route","name","fn","e","store","HTTP_METHODS","initRouter","base","handleRouteChange","destroyRouter","navigate","path","normalizedPath","buildPath","slugifyTag","tag","method","apiPath","parsePath","rawPath","normalized","normalizePath","segments","first","safeDecode","second","segment","getCurrentPath","hash","pathOnly","normalizeSecurityRequirements","raw","requirements","candidate","requirement","scopesRaw","scopes","scope","resolveOperationSecurityInfo","securitySchemes","explicitlyNoAuth","resolved","hasOperationAuth","info","getSecuritySchemeBadge","scheme","s","getOperationSecurityBadges","seen","badges","item","badge","formatOperationAuthBadge","formatOperationAuthTitle","resolveOperationAuth","configuredSchemes","fallbackToken","empty","materializeRequirement","getOperationAuthHeaderPlaceholders","headers","firstRequirement","result","isNothing","subject","isObject","toArray","sequence","extend","target","source","index","length","key","sourceKeys","repeat","string","count","cycle","isNegativeZero","number","isNothing_1","isObject_1","toArray_1","repeat_1","isNegativeZero_1","extend_1","common","formatError","exception","compact","where","message","YAMLException$1","reason","mark","getLine","buffer","lineStart","lineEnd","position","maxLineLength","head","tail","maxHalfLength","padStart","max","makeSnippet","options","re","lineStarts","lineEnds","match","foundLineNo","i","line","lineNoLength","snippet","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","compileStyleAliases","map","style","alias","Type$1","data","type","compileList","schema","currentType","newIndex","previousType","previousIndex","compileMap","collectType","Schema$1","definition","implicit","explicit","type$1","str","seq","failsafe","resolveYamlNull","constructYamlNull","isNull","object","_null","resolveYamlBoolean","constructYamlBoolean","isBoolean","bool","isHexCode","c","isOctCode","isDecCode","resolveYamlInteger","hasDigits","ch","constructYamlInteger","sign","isInteger","int","obj","YAML_FLOAT_PATTERN","resolveYamlFloat","constructYamlFloat","SCIENTIFIC_WITHOUT_DOT","representYamlFloat","res","isFloat","float","json","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","resolveYamlTimestamp","constructYamlTimestamp","year","month","day","hour","minute","fraction","delta","tz_hour","tz_minute","date","representYamlTimestamp","timestamp","resolveYamlMerge","merge","BASE64_MAP","resolveYamlBinary","code","idx","bitlen","constructYamlBinary","tailbits","input","bits","representYamlBinary","isBinary","binary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","objectKeys","pair","pairKey","pairHasKey","constructYamlOmap","omap","_toString$1","resolveYamlPairs","keys","constructYamlPairs","pairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","set","_default","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","_class","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","lc","escapedHexLen","fromDecimalCode","simpleEscapeSequence","charFromCodepoint","setProperty","simpleEscapeCheck","simpleEscapeMap","State$1","generateError","state","throwError","throwWarning","directiveHandlers","args","major","minor","handle","prefix","captureSegment","start","end","checkJson","_position","_length","_character","_result","mergeMappings","destination","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readPlainScalar","nodeIndent","withinFlowCollection","preceding","following","captureStart","captureEnd","hasPendingContent","_line","_lineStart","_lineIndent","_kind","readSingleQuotedScalar","readDoubleQuotedScalar","hexLength","hexResult","tmp","readFlowCollection","readNext","_pos","_tag","_anchor","terminator","isPair","isExplicitPair","isMapping","composeNode","readBlockScalar","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readBlockSequence","detected","readBlockMapping","flowIndent","allowCompact","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readTagProperty","isVerbatim","isNamed","tagHandle","tagName","readAnchorProperty","readAlias","parentIndent","nodeContext","allowToSeek","allowBlockStyles","allowBlockScalars","allowBlockCollections","indentStatus","atNewLine","hasContent","typeIndex","typeQuantity","typeList","blockIndent","readDocument","documentStart","directiveName","directiveArgs","hasDirectives","loadDocuments","nullpos","load$1","documents","load_1","loader","load","MAX_REF_DEPTH","MAX_CYCLE_REFS","parseSpec","parseInfo","servers","parseServers","components","schemas","resolveAllRefs","parseSecuritySchemes","rootSecurity","rawPaths","paths","methods","operations","parseOperations","tags","groupByTags","webhooks","parseWebhooks","refCache","refCount","resolveRef","ref","root","parts","p","current","part","deepResolve","node","depth","newSeen","ops","pathStr","pathItem","pathSecurity","pathParams","op","operation","parseOperation","opParams","mergedParams","mp","parameters","mapParameters","requestBody","mapRequestBody","docExamples","bodyExamples","ex","scenario","body","jsonContent","be","responses","mapResponses","operationId","hasOwnSecurity","operationSecurity","mergedSecurity","callbacks","parseCallbacks","rawParams","param","parseExamples","rawRequestBody","parseContent","parseResponseHeaders","rawHeaders","example","rawResponses","rawResponse","response","callbackItem","urlExpr","content","mediaType","mt","examples","rawTags","tagMap","tagDescriptions","t","orderedTags","generateExample","prop","merged","sub","loadSpec","url","text","loadYaml","searchTypePriority","buildSearchIndex","spec","wh","search","query","limit","terms","scored","entry","score","allMatch","term","a","b","pa","pb","THEME_KEY","applyTheme","themeMode","config","isSwitch","toggleTheme","next","detectTheme","preference","stored","looksLikeJson","escapeHtml","h","attrs","children","el","child","clear","render","container","copyToClipboard","ta","ok","formatBytes","bytes","k","sizes","formatDuration","ms","icon","d","opts","icons","Effects","handler","useEffects","notifyEffects","disposeEffects","getActiveEnvironment","env","getBaseUrl","normalizeBaseUrl","baseUrl","formatBaseUrlForDisplay","getNormalizedBaseUrl","getDisplayBaseUrl","createSelect","props","ariaLabel","onChange","className","variant","invalid","dataAttrs","classes","v","opt","o","createInput","placeholder","required","readOnly","modifiers","onInput","VARIANT_MODIFIERS","getButtonClasses","createButton","label","disabled","onClick","span","colorClass","color","bgClass","getMethodColor","m","getStatusColor","resolveColor","kind","createBadge","createTab","active","context","btn","createResponseCodeTab","setResponseCodeTabActive","createCard","simple","interactive","createCardHeader","header","createCardBody","normalizeNode","createCardHeaderRow","row","trailingEl","normalizeChild","createSectionTitle","title","createSectionTitleWrap","wrap","createSection","section","createBreadcrumb","items","nav","main","link","createLockIcon","configured","iconHtml","baseClass","mod","createModalBase","overlay","modal","isClosed","close","event","modalBase","cleanupAuthModalSync","cleanupModalSync","schemeLabel","schemeBadge","focusNextFrame","createModalField","createModalTextInput","encodeUtf8Base64","byte","decodeUtf8Base64","char","decodeBasicAuth","renderSchemeFields","currentValue","schemeLower","inputWrap","toggleVis","credentials","userInput","passInput","updateBasic","encoded","openAuthModal","portalRoot","initialScheme","shell","closeBtn","selectedName","fieldsContainer","tabs","tabByScheme","tabButtons","renderTabContent","tab","isSchemeConfigured","check","updateDescription","descEl","currentScheme","footer","clearBtn","doneBtn","isOperationAuthConfigured","security","toOperationSecurityInfo","auth","resolveAuthHeaders","resolveAuthQuery","resolveAuthCookies","getAuthHeaderPlaceholder","focusedIndex","shortcutHandler","showSearchModal","closeSearchModal","escHint","results","currentResults","renderResults","setFocusedResult","ke","selectResult","fragment","prev","setupSearchShortcut","updateSidebarActiveState","currentRoute","activeEl","routeFromDataset","parseRouteFromDataset","href","isActive","isRouteMatch","activeGroup","activeHeader","activeItems","setNavGroupExpanded","tagToExpand","expandSlug","group","itemsWrap","scrollTarget","updateSidebarAuthState","authBtn","schemeNames","hasToken","lockSlots","opById","opByKey","slot","navItem","opId","newLock","renderSidebar","version","topSection","collapseBtn","titleBlock","titleWrap","themeBtn","envSelect","renderEnvironmentSelector","searchWrap","searchIcon","searchInput","kbd","overviewItem","createOverviewNavItem","createTagGroup","whGroup","whListRoute","whHeader","createLinkedGroupHeader","whItems","createNavItem","whLink","isActiveWebhook","schemaNames","schemasGroup","schemasListRoute","schemasHeader","schemasItems","schemasLink","isActiveSchema","logoBtn","credit","activeItem","createTagGroupHeader","tagSlug","isActiveTag","routeForOp","createEndpointNavItem","chevronBtn","listRoute","NAV_EXPAND_DURATION","NAV_EASING","activeExpandAnims","expanded","running","updateGroupChevronAriaLabel","endHeight","anim","startHeight","chevron","methodBadge","iconSlot","needsAuth","lockEl","lockSlot","methodA","methodB","normalizeEndpointPath","routeType","updateSidebarEnvironment","select","canonical","createSummaryLine","metrics","methodCounts","emptyText","metric","orderedMethods","createConnectionSettingsSections","sections","authSection","createAuthenticationSection","card","top","typeText","configureBtn","renderOverview","pageSlot","_asideSlot","authRequiredCount","deprecatedCount","getMethodBreakdownFromOperations","serversSection","curState","initialEnvs","serverCards","server","envName","st","nameWrap","iconEl","updateServerCards","connectionSections","tagsSection","createTagCard","webhooksSection","desc","methodBreakdown","getMethodBreakdown","counts","getSchemaTypeLabel","renderSchemaBody","rowData","renderSchemaNode","hasExpandable","isExpanded","nextExpanded","setRowsExpanded","renderSchemaViewer","rootType","schemaContainer","schemaBody","titleEl","hasNestedLevels","anyExpanded","typeBadge","headerRow","renderParametersCard","params","headerTitle","withEnumAndDefault","rowsEl","mainRow","metaWrap","descCol","enumValues","hasDefault","enumWrap","val","paramsWrap","paramsBody","addExpandableNode","parent","childSchema","expandable","hasChildren","createRow","childContainer","renderChildren","setRowExpanded","propName","propSchema","keyword","variants","rowClass","nameWrapper","metaWrapper","hasEnumValues","defaultValue","hasDefaultValue","isDefaultInEnum","schemaValuesEqual","constraints","getConstraints","constraintsRow","orderedEnumValues","stringifySchemaValue","isDefaultValue","includeDefault","rows","left","right","executeRequest","timeout","controller","timer","isFormData","fetchOptions","cleanHeaders","duration","responseBody","size","responseHeaders","autoCaptureBearerToken","error","bearerSchemeName","headerToken","buildRequestUrl","pathTemplate","queryParams","fullUrl","searchParams","queryString","generateSnippets","generateCurl","generateJS","generatePython","generateGo","generateRust","lines","headerEntries","builderParts","extractParamExampleSets","getParamValue","setName","enumIdx","setNames","sets","values","paramWithEnum","defaultValues","extractExamples","generated","getExampleLabel","formatExampleValue","JSON_RULES","BASH_RULES","GO_RULES","JS_RULES","PYTHON_RULES","RUST_RULES","LANG_MAP","applyRules","rules","pos","best","cls","highlightCode","language","validateParam","num","validateNumberConstraints","validateBody","bodyStr","contentType","validateAll","errors","paramName","defaultCT","clearValidationErrors","showValidationErrors","err","errorEl","textarea","createErrorPlaceholder","field","autoResizeTextarea","createEditorPanel","initialValue","lang","editorWrap","highlightPre","highlightCodeEl","applyHighlight","hlLang","display","COPY_FEEDBACK_MS","createCopyButton","copiedAriaLabel","renderTryIt","initialResponse","tryItLayout","responseSection","responseContainer","renderResponse","renderRequestCodeBlock","sendBtn","collectRequestConfigImpl","tryItBody","onConfigChange","paramExampleSets","ct","bodyEditorRef","firstTabLabel","snippets","getCodeParams","getBodyTextForCopy","updateSnippetsCode","editor","snippetIndex","sn","sectionBody","sectionTitle","tabsWrap","activeTabIndex","routePreviewInput","routePreviewEl","syncRequestBodyEditor","firstTabPanel","tabBtn","hasParamExamples","hasBodyExamples","examplesGroup","chosen","applyParamValues","headersSection","headersHeader","headersContainer","createHeaderRow","authHeaders","headerName","headerValue","addHeaderBtn","paramsSection","pathGroup","createParamInput","queryGroup","routePreview","routePreviewHeader","copyRouteBtn","routeInputRow","bodySection","bodyHeader","copyBodyBtn","isMultipart","formWrap","properties","requiredFields","fieldName","fieldSchema","isRequired","fieldRow","fieldLabel","createRequiredStar","fileInput","textInput","initialExample","initialVal","initialParams","initialSnippets","langEditor","langPanel","codeExampleSection","codeExampleHeader","copyCodeBtn","allPanels","setPanelVisible","panel","visible","cardBody","panelsContainer","sendBtnWrap","notify","getParamExampleValue","fromSet","wrapper","inputEl","enumOptions","inputType","nameInput","valueInput","removeBtn","pathParamInputs","queryParamInputs","authQuery","headerRows","authCookies","cookiePairs","existingCookie","multipartWrap","formData","fieldType","bodyTab","headersTab","metaEl","codeBadge","copyBtn","showCopyToast","bodyWrapper","bodyContent","bodyInner","pre","codeEl","displayText","formatResponseBody","headersContent","headersInner","headersTextarea","pretty","existing","toast","collapsibleCategoryCounter","createSchemaBodyContent","getSchemaTopLevelCount","createBodyCategoryTrailing","trailing","createCollapsibleCategory","categoryId","meta","controls","toggle","setExpanded","renderResponseHeadersList","entries","hdr","typeLabel","valueWrap","renderResponseCategories","categories","headersCategory","bodyCategory","renderRouteNavigation","getAdjacentRoutes","createRouteCard","direction","routePath","side","linear","buildLinearRoutes","findCurrentIndex","seenEndpoints","endpointKey","webhook","list","byOperationId","renderEndpoint","asideSlot","showTryIt","asidePane","baseUrlNorm","baseUrlDisplay","breadcrumbItems","tagNames","pathSegments","seg","isParam","matchesTag","tagMatch","breadcrumb","breadcrumbWrap","metaRow","warnIcon","authEl","hasConfiguredAuth","authBadge","lock","getPreferredAuthScheme","visibleParams","requestSection","requestContent","renderRequestContent","emptyHint","responsesRendered","renderResponsesSection","routeNavArgs","routeNavDesktop","routeNavMobile","appendRouteNav","pageContainer","renderCallbacksSection","getFirstResponseExample","effects","breadcrumbHomeEl","lockIcon","tryItContent","authNames","remaining","anchor","r","inp","requestHeaders","collectRequestHeaders","requestBodyCategory","renderRequestBodyCategory","pathCategory","renderParameterList","queryCategory","renderRequestHeadersList","contentTypes","hName","hValue","contentEntries","mediaList","codesWrap","activeCode","tabData","firstContentType","bodyBlock","headersEl","contentContainer","initialData","callback","callbackBlock","cbOp","opBlock","opHeader","resp","respRow","codes","a2","b2","statusText","hasSchemeValue","renderTagPage","getTagMethodBreakdown","authRequired","opsSection","renderWebhookPage","webhookBadge","paramSection","renderParamsTable","mediaHeader","respSection","routeNav","pathCount","queryCount","createContentArea","page","mainPane","aside","setContentAreaAside","hasAside","createEmptyStatePage","rootEl","sidebarEl","pageEl","mainEl","asideEl","prevRoute","prevSpecLoaded","prevEnvState","cleanupViewportSync","MOBILE_SIDEBAR_MAX_WIDTH","mountApp","themeConfig","expandTrigger","setupViewportSidebarSync","updateContent","unmountApp","specLoaded","currentMainEl","currentAsideEl","currentPageEl","mainScroll","envState","isSameCurrentRoute","isSameRoute","isSameRouteWithEnvOrAuthChange","prevMainScrollTop","findOperation","endpointLabel","schemaCopyBtn","schemaBreadcrumb","schemaSection","schBreadcrumbHome","renderSchemaListPage","w","renderWebhookListPage","candidates","routeTagSlug","tagged","media","syncState","isMobile","shouldBeOpen","legacyOnChange","whListBreadcrumbHome","whRoute","schListBreadcrumbHome","schemasSection","schemaRoute","schemaType","STORAGE_KEY","loadPersisted","savePersisted","getSchemePriority","httpScheme","getPreferredSchemeName","names","bestName","bestPriority","priority","areAuthStatesEqual","aEntries","bEntries","reconcileAuthWithSecuritySchemes","availableSchemeNames","debounce","mounted","currentApi","cleanupSearchShortcut","resolveBootstrapMount","providedMount","mountId","created","ensureStylesheetOnce","styleLink","applyFullPageLayout","getAssetBasePath","pathname","markerWithTail","lastSegment","lastSlash","resolveSpecUrl","specUrl","mount","preservedAuth","unmount","persisted","saveDebounce","rawSpec","initialSpecUrl","parsed","envs","cur","reconciledAuth","createApi","bootstrap","_mount","_mountId","_cssHref","_fullPage","portalConfig","routerNavigate","OBSERVED_ATTRIBUTES","_PureDocsElement","oldValue","newValue","parseJsonAttr","toTheme","PureDocsElement","attrName","PureDocs"],"mappings":"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","x_google_ignoreList":[3]}
|