@memberjunction/ng-markdown 6.2.0-edge.0 → 6.2.0-edge.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.component.js","sourceRoot":"","sources":["../../../src/lib/components/markdown.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n SecurityContext,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n AfterViewInit,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MarkdownService } from '../services/markdown.service';\nimport { MarkdownConfig, DEFAULT_MARKDOWN_CONFIG, MarkdownRenderEvent, HeadingInfo } from '@memberjunction/markdown-core';\n// Collapsible section toggle is handled inline in setupCollapsibleListeners\n\n/**\n * Angular component for rendering markdown content.\n *\n * Features:\n * - Prism.js syntax highlighting for code blocks\n * - Mermaid diagram rendering\n * - Copy-to-clipboard for code blocks\n * - Collapsible heading sections\n * - GitHub-style alerts and heading IDs\n *\n * Usage:\n * ```html\n * <mj-markdown [data]=\"markdownContent\"></mj-markdown>\n *\n * <mj-markdown\n * [data]=\"content\"\n * [enableMermaid]=\"true\"\n * [enableCollapsibleHeadings]=\"true\"\n * (rendered)=\"onRendered($event)\">\n * </mj-markdown>\n * ```\n */\n@Component({\n selector: 'mj-markdown',\n standalone: false,\n template: ` <div class=\"mj-markdown-container\" [class]=\"containerClass\" [innerHTML]=\"renderedContent\"></div> `,\n styleUrls: ['./markdown.component.css'],\n encapsulation: ViewEncapsulation.None, // Allow styles to penetrate into rendered content\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkdownComponent implements OnChanges, AfterViewInit, OnDestroy {\n /**\n * The markdown content to render\n */\n @Input() data: string = '';\n\n /**\n * Enable syntax highlighting\n */\n @Input() enableHighlight: boolean = DEFAULT_MARKDOWN_CONFIG.enableHighlight;\n\n /**\n * Enable Mermaid diagram rendering\n */\n @Input() enableMermaid: boolean = DEFAULT_MARKDOWN_CONFIG.enableMermaid;\n\n /**\n * Enable copy button on code blocks\n */\n @Input() enableCodeCopy: boolean = DEFAULT_MARKDOWN_CONFIG.enableCodeCopy;\n\n /**\n * Enable collapsible heading sections\n */\n @Input() enableCollapsibleHeadings: boolean = DEFAULT_MARKDOWN_CONFIG.enableCollapsibleHeadings;\n\n /**\n * Heading level at which to start collapsing\n */\n @Input() collapsibleHeadingLevel: 1 | 2 | 3 | 4 | 5 | 6 = DEFAULT_MARKDOWN_CONFIG.collapsibleHeadingLevel;\n\n /**\n * Whether collapsible sections should be expanded by default\n */\n @Input() collapsibleDefaultExpanded: boolean = DEFAULT_MARKDOWN_CONFIG.collapsibleDefaultExpanded;\n\n /**\n * Specify which heading levels should start expanded.\n * Array of heading levels (2-6) that should be expanded by default.\n * Takes precedence over collapsibleDefaultExpanded for specified levels.\n *\n * Examples:\n * - [2] = Only h2 expanded, h3-h6 collapsed\n * - [2, 3] = h2 and h3 expanded, h4-h6 collapsed\n * - [] = All collapsed\n * - undefined = Uses collapsibleDefaultExpanded for all levels\n */\n @Input() autoExpandLevels?: number[];\n\n /**\n * Enable GitHub-style alerts\n */\n @Input() enableAlerts: boolean = DEFAULT_MARKDOWN_CONFIG.enableAlerts;\n\n /**\n * Enable smartypants for typography (curly quotes, em/en dashes, ellipses)\n */\n @Input() enableSmartypants: boolean = DEFAULT_MARKDOWN_CONFIG.enableSmartypants;\n\n /**\n * Enable SVG code block rendering\n * When enabled, ```svg code blocks are rendered as actual SVG images\n */\n @Input() enableSvgRenderer: boolean = DEFAULT_MARKDOWN_CONFIG.enableSvgRenderer;\n\n /**\n * Enable raw HTML passthrough in markdown content.\n * Scripts and event handlers are still stripped unless enableJavaScript is true.\n */\n @Input() enableHtml: boolean = DEFAULT_MARKDOWN_CONFIG.enableHtml;\n\n /**\n * Enable JavaScript in HTML content (<script> tags and on* handlers).\n * WARNING: Major security risk - only enable for fully trusted content.\n */\n @Input() enableJavaScript: boolean = DEFAULT_MARKDOWN_CONFIG.enableJavaScript;\n\n /**\n * Enable heading IDs for anchor links\n */\n @Input() enableHeadingIds: boolean = DEFAULT_MARKDOWN_CONFIG.enableHeadingIds;\n\n /**\n * Prefix for heading IDs\n */\n @Input() headingIdPrefix: string = DEFAULT_MARKDOWN_CONFIG.headingIdPrefix;\n\n /**\n * Enable line numbers in code blocks\n */\n @Input() enableLineNumbers: boolean = DEFAULT_MARKDOWN_CONFIG.enableLineNumbers;\n\n /**\n * Custom CSS class for the container\n */\n @Input() containerClass: string = '';\n\n /**\n * Mermaid theme.\n * 'auto' (default) detects light/dark from the document's data-theme attribute.\n */\n @Input() mermaidTheme: 'auto' | 'default' | 'dark' | 'forest' | 'neutral' | 'base' = DEFAULT_MARKDOWN_CONFIG.mermaidTheme;\n\n /**\n * Whether to sanitize HTML output\n */\n @Input() sanitize: boolean = DEFAULT_MARKDOWN_CONFIG.sanitize;\n\n /**\n * Emitted when rendering is complete\n */\n @Output() rendered = new EventEmitter<MarkdownRenderEvent>();\n\n /**\n * Emitted when a heading anchor is clicked\n */\n @Output() headingClick = new EventEmitter<HeadingInfo>();\n\n /**\n * Emitted when code is copied to clipboard\n */\n @Output() codeCopied = new EventEmitter<string>();\n\n /**\n * The sanitized HTML content to display\n */\n public renderedContent: SafeHtml = '';\n\n /**\n * Public accessor for the component's element reference.\n * Provided for backward compatibility with ngx-markdown API.\n */\n public get element(): ElementRef<HTMLElement> {\n return this.elementRef;\n }\n\n private renderStartTime: number = 0;\n private hasMermaid: boolean = false;\n private hasCodeBlocks: boolean = false;\n private themeObserver: MutationObserver | null = null;\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer,\n private markdownService: MarkdownService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // Check if any relevant input changed\n const needsRerender =\n changes['data'] ||\n changes['enableHighlight'] ||\n changes['enableMermaid'] ||\n changes['enableCodeCopy'] ||\n changes['enableCollapsibleHeadings'] ||\n changes['collapsibleHeadingLevel'] ||\n changes['collapsibleDefaultExpanded'] ||\n changes['autoExpandLevels'] ||\n changes['enableAlerts'] ||\n changes['enableSmartypants'] ||\n changes['enableSvgRenderer'] ||\n changes['enableHtml'] ||\n changes['enableJavaScript'] ||\n changes['enableHeadingIds'] ||\n changes['headingIdPrefix'] ||\n changes['mermaidTheme'] ||\n changes['sanitize'];\n\n if (needsRerender) {\n this.render();\n }\n }\n\n ngAfterViewInit(): void {\n // Initial render if data was provided\n if (this.data) {\n this.postRenderProcessing();\n }\n\n this.setupThemeObserver();\n }\n\n ngOnDestroy(): void {\n this.themeObserver?.disconnect();\n this.themeObserver = null;\n this.cleanupEventListeners();\n }\n\n /**\n * Render the markdown content\n */\n private render(): void {\n if (!this.data) {\n this.renderedContent = '';\n this.cdr.markForCheck();\n return;\n }\n\n this.renderStartTime = performance.now();\n\n // Build config from inputs\n const config: MarkdownConfig = {\n enableHighlight: this.enableHighlight,\n enableMermaid: this.enableMermaid,\n enableCodeCopy: this.enableCodeCopy,\n enableCollapsibleHeadings: this.enableCollapsibleHeadings,\n collapsibleHeadingLevel: this.collapsibleHeadingLevel,\n collapsibleDefaultExpanded: this.collapsibleDefaultExpanded,\n autoExpandLevels: this.autoExpandLevels,\n enableAlerts: this.enableAlerts,\n enableSmartypants: this.enableSmartypants,\n enableSvgRenderer: this.enableSvgRenderer,\n enableHtml: this.enableHtml,\n enableJavaScript: this.enableJavaScript,\n enableHeadingIds: this.enableHeadingIds,\n headingIdPrefix: this.headingIdPrefix,\n mermaidTheme: this.mermaidTheme,\n sanitize: this.sanitize,\n };\n\n // Configure service and parse\n this.markdownService.configureMarked(config);\n let html = this.markdownService.parse(this.data);\n\n // Check for mermaid and code blocks\n this.hasMermaid = html.includes('language-mermaid') || html.includes('class=\"mermaid\"');\n this.hasCodeBlocks = html.includes('<pre>') && html.includes('<code');\n\n // Sanitize if enabled\n // Note: We bypass Angular's sanitizer when SVG renderer or HTML passthrough is enabled\n // because it strips SVG elements and most HTML layout tags.\n const bypassAngularSanitizer = this.enableSvgRenderer || this.enableHtml;\n if (this.sanitize && !bypassAngularSanitizer) {\n const sanitized = this.sanitizer.sanitize(SecurityContext.HTML, html);\n html = sanitized || '';\n }\n\n // When Angular's sanitizer is bypassed, the HTML has already been sanitized by\n // MarkdownService.parse() (DOMPurify, HTML + SVG profiles) unless enableJavaScript\n // opted out. Nothing further to do here.\n\n // Trust the HTML for display\n this.renderedContent = this.sanitizer.bypassSecurityTrustHtml(html);\n this.cdr.markForCheck();\n\n // Schedule post-render processing for next tick (after DOM update)\n Promise.resolve().then(() => this.postRenderProcessing());\n }\n\n /**\n * Process rendered content after DOM update\n * Handles syntax highlighting, mermaid rendering, copy buttons, etc.\n */\n private async postRenderProcessing(): Promise<void> {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n // Add copy buttons to code blocks\n if (this.enableCodeCopy && this.hasCodeBlocks) {\n this.markdownService.addCodeCopyButtons(container as HTMLElement);\n }\n\n // Initialize collapsible headings\n if (this.enableCollapsibleHeadings) {\n this.markdownService.initializeCollapsibleHeadings(container as HTMLElement);\n this.setupCollapsibleListeners(container as HTMLElement);\n }\n\n // Render mermaid diagrams (async)\n if (this.enableMermaid && this.hasMermaid) {\n await this.markdownService.renderMermaid(container as HTMLElement);\n }\n\n // Setup heading click listeners\n if (this.enableHeadingIds) {\n this.setupHeadingClickListeners(container as HTMLElement);\n }\n\n // Setup code copy listeners for custom event emission\n if (this.enableCodeCopy) {\n this.setupCodeCopyListeners(container as HTMLElement);\n }\n\n // Emit rendered event\n const renderTime = performance.now() - this.renderStartTime;\n const headingIds = this.markdownService.getHeadingList();\n\n this.rendered.emit({\n html: (container as HTMLElement).innerHTML,\n renderTime,\n hasMermaid: this.hasMermaid,\n hasCodeBlocks: this.hasCodeBlocks,\n headingIds,\n });\n }\n\n /**\n * Setup collapsible sections by adding toggle buttons and click listeners\n */\n private setupCollapsibleListeners(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section');\n\n sections.forEach((section) => {\n const wrapper = section.querySelector(':scope > .collapsible-heading-wrapper') as HTMLElement | null;\n if (!wrapper) return;\n\n // Check if toggle already exists\n if (wrapper.querySelector('.collapsible-toggle')) return;\n\n const isExpanded = !section.classList.contains('collapsed');\n const hasChildren = section.querySelector('.collapsible-section') !== null;\n\n // Create toggle button (chevron)\n const toggle = document.createElement('span');\n toggle.className = 'collapsible-toggle';\n toggle.setAttribute('role', 'button');\n toggle.setAttribute('tabindex', '0');\n toggle.setAttribute('aria-expanded', String(isExpanded));\n toggle.innerHTML = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M6 12l4-4-4-4\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n // Insert toggle before heading\n wrapper.insertBefore(toggle, wrapper.firstChild);\n\n // Add action buttons container (only if has children)\n if (hasChildren) {\n const actions = this.createActionButtons(section as HTMLElement);\n wrapper.appendChild(actions);\n }\n\n // Make the whole wrapper clickable\n wrapper.style.cursor = 'pointer';\n\n // Add click listener to wrapper (but not on action buttons)\n wrapper.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n // Don't toggle if clicking on action buttons\n if (target.closest('.collapsible-actions')) return;\n\n e.preventDefault();\n e.stopPropagation();\n this.toggleSection(section as HTMLElement, toggle);\n });\n\n // Add keyboard support\n wrapper.addEventListener('keydown', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.collapsible-actions')) return;\n\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {\n e.preventDefault();\n this.toggleSection(section as HTMLElement, toggle);\n }\n });\n });\n }\n\n /**\n * Create the expand/collapse all action buttons for sections with children\n */\n private createActionButtons(section: HTMLElement): HTMLElement {\n const container = document.createElement('span');\n container.className = 'collapsible-actions';\n\n // Expand all button\n const expandBtn = document.createElement('button');\n expandBtn.className = 'collapsible-action-btn expand-all';\n expandBtn.setAttribute('type', 'button');\n expandBtn.setAttribute('title', 'Expand all');\n expandBtn.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 6l4 4 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4 10l4 4 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n expandBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.expandDescendants(section);\n // Also expand the section itself if collapsed\n if (section.classList.contains('collapsed')) {\n section.classList.remove('collapsed');\n const toggle = section.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) toggle.setAttribute('aria-expanded', 'true');\n }\n });\n\n // Collapse all button\n const collapseBtn = document.createElement('button');\n collapseBtn.className = 'collapsible-action-btn collapse-all';\n collapseBtn.setAttribute('type', 'button');\n collapseBtn.setAttribute('title', 'Collapse all');\n collapseBtn.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 10l4-4 4 4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4 14l4-4 4 4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n collapseBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.collapseDescendants(section);\n });\n\n container.appendChild(expandBtn);\n container.appendChild(collapseBtn);\n\n return container;\n }\n\n /**\n * Toggle a collapsible section\n * @param section The section element to toggle\n * @param toggle The toggle button element\n */\n private toggleSection(section: HTMLElement, toggle: HTMLElement): void {\n const isCollapsed = section.classList.contains('collapsed');\n\n // Toggle the section\n section.classList.toggle('collapsed');\n toggle.setAttribute('aria-expanded', String(isCollapsed));\n // Children retain their state - CSS handles visibility via parent collapse\n }\n\n /**\n * Collapse all descendant sections (used by action button)\n */\n private collapseDescendants(section: HTMLElement): void {\n const descendants = section.querySelectorAll('.collapsible-section');\n descendants.forEach((desc) => {\n desc.classList.add('collapsed');\n const toggle = desc.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'false');\n }\n });\n }\n\n /**\n * Expand all descendant sections (used by action button)\n */\n private expandDescendants(section: HTMLElement): void {\n const descendants = section.querySelectorAll('.collapsible-section');\n descendants.forEach((desc) => {\n desc.classList.remove('collapsed');\n const toggle = desc.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n });\n }\n\n /**\n * Setup click listeners for heading anchors\n */\n private setupHeadingClickListeners(container: HTMLElement): void {\n const headings = container.querySelectorAll('h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]');\n\n headings.forEach((heading) => {\n heading.addEventListener('click', () => {\n const id = heading.getAttribute('id') || '';\n const text = heading.textContent || '';\n const level = parseInt(heading.tagName.charAt(1), 10);\n\n this.headingClick.emit({\n id,\n text,\n level,\n raw: text,\n });\n });\n });\n }\n\n /**\n * Setup listeners to emit code copy events\n */\n private setupCodeCopyListeners(container: HTMLElement): void {\n const copyButtons = container.querySelectorAll('.code-copy-btn');\n\n copyButtons.forEach((button) => {\n button.addEventListener('click', () => {\n const pre = button.closest('pre');\n const code = pre?.querySelector('code');\n if (code) {\n this.codeCopied.emit(code.textContent || '');\n }\n });\n });\n }\n\n /**\n * Watch the document's data-theme attribute for changes.\n * When the app theme switches (light ↔ dark) and mermaidTheme is 'auto',\n * re-render so mermaid diagrams pick up the new theme.\n */\n private setupThemeObserver(): void {\n if (typeof MutationObserver === 'undefined') return;\n\n this.themeObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-theme') {\n this.onThemeAttributeChanged();\n break;\n }\n }\n });\n\n this.themeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n }\n\n /**\n * Called when data-theme changes on the document root.\n * Triggers a full re-render when mermaid auto-theming is active.\n */\n private onThemeAttributeChanged(): void {\n if (this.mermaidTheme === 'auto' && this.enableMermaid && this.hasMermaid && this.data) {\n this.render();\n }\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n // Clone and replace to remove all listeners\n const clone = container.cloneNode(true);\n container.parentNode?.replaceChild(clone, container);\n }\n\n /**\n * Force a re-render of the markdown content\n */\n public refresh(): void {\n this.render();\n }\n\n /**\n * Get the current heading list (for TOC building)\n */\n public getHeadings(): HeadingInfo[] {\n return this.markdownService.getHeadingList();\n }\n\n /**\n * Scroll to a heading by ID\n */\n public scrollToHeading(headingId: string): void {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n const heading = container.querySelector(`#${headingId}`);\n if (heading) {\n heading.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"markdown.component.js","sourceRoot":"","sources":["../../../src/lib/components/markdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EACZ,UAAU,EAIV,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAY,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAkB,uBAAuB,EAAoC,MAAM,+BAA+B,CAAC;;;;AAC1H,4EAA4E;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,MAAM,OAAO,iBAAiB;IAM5B,oCAAoC;IACpC,IAAa,IAAI,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,oCAAoC;IACpC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAOD,+CAA+C;IAC/C,IAAa,eAAe,CAAC,KAAc;QACzC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IACD,+CAA+C;IAC/C,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAOD,6CAA6C;IAC7C,IAAa,aAAa,CAAC,KAAc;QACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,6CAA6C;IAC7C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAOD,8CAA8C;IAC9C,IAAa,cAAc,CAAC,KAAc;QACxC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IACD,8CAA8C;IAC9C,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAOD,yDAAyD;IACzD,IAAa,yBAAyB,CAAC,KAAc;QACnD,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IACzC,CAAC;IACD,yDAAyD;IACzD,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IACxC,CAAC;IAOD,uDAAuD;IACvD,IAAa,uBAAuB,CAAC,KAA4B;QAC/D,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;IACvC,CAAC;IACD,uDAAuD;IACvD,IAAI,uBAAuB;QACzB,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAOD,0DAA0D;IAC1D,IAAa,0BAA0B,CAAC,KAAc;QACpD,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;IAC1C,CAAC;IACD,0DAA0D;IAC1D,IAAI,0BAA0B;QAC5B,OAAO,IAAI,CAAC,0BAA0B,CAAC;IACzC,CAAC;IAeD,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAA2B;QACvD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,gDAAgD;IAChD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAOD,4CAA4C;IAC5C,IAAa,YAAY,CAAC,KAAc;QACtC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,4CAA4C;IAC5C,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAOD,iDAAiD;IACjD,IAAa,iBAAiB,CAAC,KAAc;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,iDAAiD;IACjD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAQD,iDAAiD;IACjD,IAAa,iBAAiB,CAAC,KAAc;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,iDAAiD;IACjD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAQD,0CAA0C;IAC1C,IAAa,UAAU,CAAC,KAAc;QACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,0CAA0C;IAC1C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAQD,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAAc;QAC1C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,gDAAgD;IAChD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAOD,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAAc;QAC1C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,gDAAgD;IAChD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAOD,+CAA+C;IAC/C,IAAa,eAAe,CAAC,KAAa;QACxC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IACD,+CAA+C;IAC/C,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAOD,iDAAiD;IACjD,IAAa,iBAAiB,CAAC,KAAc;QAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,iDAAiD;IACjD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAOD,8CAA8C;IAC9C,IAAa,cAAc,CAAC,KAAa;QACvC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IACD,8CAA8C;IAC9C,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAQD,4CAA4C;IAC5C,IAAa,YAAY,CAAC,KAAkE;QAC1F,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,4CAA4C;IAC5C,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAOD,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAc;QAClC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,wCAAwC;IACxC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAiDD,+CAA+C;IAC/C,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAe;QACxC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,uCAAuC;IACvC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAOD,YACU,UAAmC,EACnC,SAAuB,EACvB,eAAgC,EAChC,GAAsB;QAHtB,eAAU,GAAV,UAAU,CAAyB;QACnC,cAAS,GAAT,SAAS,CAAc;QACvB,oBAAe,GAAf,eAAe,CAAiB;QAChC,QAAG,GAAH,GAAG,CAAmB;QApWhC;;WAEG;QACM,SAAI,GAAW,EAAE,CAAC;QAW3B;;WAEG;QACM,oBAAe,GAAY,uBAAuB,CAAC,eAAe,CAAC;QAW5E;;WAEG;QACM,kBAAa,GAAY,uBAAuB,CAAC,aAAa,CAAC;QAWxE;;WAEG;QACM,mBAAc,GAAY,uBAAuB,CAAC,cAAc,CAAC;QAW1E;;WAEG;QACM,8BAAyB,GAAY,uBAAuB,CAAC,yBAAyB,CAAC;QAWhG;;WAEG;QACM,4BAAuB,GAA0B,uBAAuB,CAAC,uBAAuB,CAAC;QAW1G;;WAEG;QACM,+BAA0B,GAAY,uBAAuB,CAAC,0BAA0B,CAAC;QAiClG;;WAEG;QACM,iBAAY,GAAY,uBAAuB,CAAC,YAAY,CAAC;QAWtE;;WAEG;QACM,sBAAiB,GAAY,uBAAuB,CAAC,iBAAiB,CAAC;QAWhF;;;WAGG;QACM,sBAAiB,GAAY,uBAAuB,CAAC,iBAAiB,CAAC;QAWhF;;;WAGG;QACM,eAAU,GAAY,uBAAuB,CAAC,UAAU,CAAC;QAWlE;;;WAGG;QACM,qBAAgB,GAAY,uBAAuB,CAAC,gBAAgB,CAAC;QAW9E;;WAEG;QACM,qBAAgB,GAAY,uBAAuB,CAAC,gBAAgB,CAAC;QAW9E;;WAEG;QACM,oBAAe,GAAW,uBAAuB,CAAC,eAAe,CAAC;QAW3E;;WAEG;QACM,sBAAiB,GAAY,uBAAuB,CAAC,iBAAiB,CAAC;QAWhF;;WAEG;QACM,mBAAc,GAAW,EAAE,CAAC;QAWrC;;;WAGG;QACM,iBAAY,GAAgE,uBAAuB,CAAC,YAAY,CAAC;QAW1H;;WAEG;QACM,aAAQ,GAAY,uBAAuB,CAAC,QAAQ,CAAC;QAW9D;;WAEG;QACO,aAAQ,GAAG,IAAI,YAAY,EAAuB,CAAC;QAE7D;;;;;;WAMG;QACO,aAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEnC;;WAEG;QACO,iBAAY,GAAG,IAAI,YAAY,EAAe,CAAC;QAEzD;;;;;;WAMG;QACO,iBAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAE3C;;WAEG;QACO,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;QAElD;;;;;;WAMG;QACO,eAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEvC;;WAEG;QACI,oBAAe,GAAa,EAAE,CAAC;QAwB9B,oBAAe,GAAW,CAAC,CAAC;QAC5B,eAAU,GAAY,KAAK,CAAC;QAC5B,kBAAa,GAAY,KAAK,CAAC;QAC/B,kBAAa,GAA4B,IAAI,CAAC;IAOnD,CAAC;IAEJ,WAAW,CAAC,OAAsB;QAChC,sCAAsC;QACtC,MAAM,aAAa,GACjB,OAAO,CAAC,MAAM,CAAC;YACf,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,eAAe,CAAC;YACxB,OAAO,CAAC,gBAAgB,CAAC;YACzB,OAAO,CAAC,2BAA2B,CAAC;YACpC,OAAO,CAAC,yBAAyB,CAAC;YAClC,OAAO,CAAC,4BAA4B,CAAC;YACrC,OAAO,CAAC,kBAAkB,CAAC;YAC3B,OAAO,CAAC,cAAc,CAAC;YACvB,OAAO,CAAC,mBAAmB,CAAC;YAC5B,OAAO,CAAC,mBAAmB,CAAC;YAC5B,OAAO,CAAC,YAAY,CAAC;YACrB,OAAO,CAAC,kBAAkB,CAAC;YAC3B,OAAO,CAAC,kBAAkB,CAAC;YAC3B,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,cAAc,CAAC;YACvB,OAAO,CAAC,UAAU,CAAC,CAAC;QAEtB,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,eAAe;QACb,sCAAsC;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,MAAM;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,MAAM,GAAmB;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,oCAAoC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEtE,sBAAsB;QACtB,uFAAuF;QACvF,4DAA4D;QAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC;QACzE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,GAAG,SAAS,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,+EAA+E;QAC/E,mFAAmF;QACnF,yCAAyC;QAEzC,6BAA6B;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,mEAAmE;QACnE,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,oBAAoB;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,kCAAkC;QAClC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAwB,CAAC,CAAC;QACpE,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,SAAwB,CAAC,CAAC;YAC7E,IAAI,CAAC,yBAAyB,CAAC,SAAwB,CAAC,CAAC;QAC3D,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAwB,CAAC,CAAC;QACrE,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,0BAA0B,CAAC,SAAwB,CAAC,CAAC;QAC5D,CAAC;QAED,sDAAsD;QACtD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,sBAAsB,CAAC,SAAwB,CAAC,CAAC;QACxD,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAEzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAG,SAAyB,CAAC,SAAS;YAC1C,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,SAAsB;QACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAEpE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,uCAAuC,CAAuB,CAAC;YACrG,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,iCAAiC;YACjC,IAAI,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC;gBAAE,OAAO;YAEzD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;YAE3E,iCAAiC;YACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,GAAG;;aAEZ,CAAC;YAER,+BAA+B;YAC/B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAEjD,sDAAsD;YACtD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAsB,CAAC,CAAC;gBACjE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YAEjC,4DAA4D;YAC5D,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;gBACvC,6CAA6C;gBAC7C,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;oBAAE,OAAO;gBAEnD,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,CAAC,OAAsB,EAAE,MAAM,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,uBAAuB;YACvB,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;gBACvC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;oBAAE,OAAO;gBAEnD,MAAM,QAAQ,GAAG,CAAkB,CAAC;gBACpC,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;oBACrD,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,aAAa,CAAC,OAAsB,EAAE,MAAM,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAoB;QAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACjD,SAAS,CAAC,SAAS,GAAG,qBAAqB,CAAC;QAE5C,oBAAoB;QACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,SAAS,CAAC,SAAS,GAAG,mCAAmC,CAAC;QAC1D,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC9C,SAAS,CAAC,SAAS,GAAG;;;WAGf,CAAC;QAER,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;YAC/C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChC,8CAA8C;YAC9C,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,2DAA2D,CAAC,CAAC;gBAClG,IAAI,MAAM;oBAAE,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,GAAG,qCAAqC,CAAC;QAC9D,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAClD,WAAW,CAAC,SAAS,GAAG;;;WAGjB,CAAC;QAER,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;YACjD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,OAAoB,EAAE,MAAmB;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE5D,qBAAqB;QACrB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,2EAA2E;IAC7E,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAoB;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QACrE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,2DAA2D,CAAC,CAAC;YAC/F,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAoB;QAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QACrE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,2DAA2D,CAAC,CAAC;YAC/F,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,SAAsB;QACvD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,gDAAgD,CAAC,CAAC;QAE9F,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,EAAE;oBACF,IAAI;oBACJ,KAAK;oBACL,GAAG,EAAE,IAAI;iBACV,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,SAAsB;QACnD,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAEjE,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACxB,IAAI,OAAO,gBAAgB,KAAK,WAAW;YAAE,OAAO;QAEpD,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;YACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;oBAC9E,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC/B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;YACnD,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,YAAY,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,uBAAuB;QAC7B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,4CAA4C;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,uCAAuC;IAChC,OAAO;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,2CAA2C;IACpC,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,SAAiB;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,+CAA+C;IACxC,eAAe,CAAC,SAAiB;QACtC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;kHArxBU,iBAAiB;oEAAjB,iBAAiB;YALhB,yBAAgG;;YAA7D,iCAAwB;YAAC,kEAA6B;;;iFAK1F,iBAAiB;cAR7B,SAAS;2BACE,aAAa,cACX,KAAK,YACP,oGAAoG,iBAE/F,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;;kBAM9C,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAmBL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAYL,KAAK;;kBAGL,KAAK;;kBAYL,KAAK;;kBAGL,KAAK;;kBAYL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAYL,KAAK;;kBAGL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAWL,MAAM;;kBASN,MAAM;;kBAKN,MAAM;;kBASN,MAAM;;kBAKN,MAAM;;kBASN,MAAM;;kFA/TI,iBAAiB","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n SecurityContext,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n AfterViewInit,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MarkdownService } from '../services/markdown.service';\nimport { MarkdownConfig, DEFAULT_MARKDOWN_CONFIG, MarkdownRenderEvent, HeadingInfo } from '@memberjunction/markdown-core';\n// Collapsible section toggle is handled inline in setupCollapsibleListeners\n\n/**\n * Angular component for rendering markdown content.\n *\n * Features:\n * - Prism.js syntax highlighting for code blocks\n * - Mermaid diagram rendering\n * - Copy-to-clipboard for code blocks\n * - Collapsible heading sections\n * - GitHub-style alerts and heading IDs\n *\n * Usage:\n * ```html\n * <mj-markdown [data]=\"markdownContent\"></mj-markdown>\n *\n * <mj-markdown\n * [data]=\"content\"\n * [enableMermaid]=\"true\"\n * [enableCollapsibleHeadings]=\"true\"\n * (rendered)=\"onRendered($event)\">\n * </mj-markdown>\n * ```\n */\n@Component({\n selector: 'mj-markdown',\n standalone: false,\n template: ` <div class=\"mj-markdown-container\" [class]=\"containerClass\" [innerHTML]=\"renderedContent\"></div> `,\n styleUrls: ['./markdown.component.css'],\n encapsulation: ViewEncapsulation.None, // Allow styles to penetrate into rendered content\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkdownComponent implements OnChanges, AfterViewInit, OnDestroy {\n /**\n * The markdown content to render\n */\n @Input() Data: string = '';\n\n /** @deprecated Use {@link Data}. */\n @Input() set data(value: string) {\n this.Data = value;\n }\n /** @deprecated Use {@link Data}. */\n get data(): string {\n return this.Data;\n }\n\n /**\n * Enable syntax highlighting\n */\n @Input() EnableHighlight: boolean = DEFAULT_MARKDOWN_CONFIG.enableHighlight;\n\n /** @deprecated Use {@link EnableHighlight}. */\n @Input() set enableHighlight(value: boolean) {\n this.EnableHighlight = value;\n }\n /** @deprecated Use {@link EnableHighlight}. */\n get enableHighlight(): boolean {\n return this.EnableHighlight;\n }\n\n /**\n * Enable Mermaid diagram rendering\n */\n @Input() EnableMermaid: boolean = DEFAULT_MARKDOWN_CONFIG.enableMermaid;\n\n /** @deprecated Use {@link EnableMermaid}. */\n @Input() set enableMermaid(value: boolean) {\n this.EnableMermaid = value;\n }\n /** @deprecated Use {@link EnableMermaid}. */\n get enableMermaid(): boolean {\n return this.EnableMermaid;\n }\n\n /**\n * Enable copy button on code blocks\n */\n @Input() EnableCodeCopy: boolean = DEFAULT_MARKDOWN_CONFIG.enableCodeCopy;\n\n /** @deprecated Use {@link EnableCodeCopy}. */\n @Input() set enableCodeCopy(value: boolean) {\n this.EnableCodeCopy = value;\n }\n /** @deprecated Use {@link EnableCodeCopy}. */\n get enableCodeCopy(): boolean {\n return this.EnableCodeCopy;\n }\n\n /**\n * Enable collapsible heading sections\n */\n @Input() EnableCollapsibleHeadings: boolean = DEFAULT_MARKDOWN_CONFIG.enableCollapsibleHeadings;\n\n /** @deprecated Use {@link EnableCollapsibleHeadings}. */\n @Input() set enableCollapsibleHeadings(value: boolean) {\n this.EnableCollapsibleHeadings = value;\n }\n /** @deprecated Use {@link EnableCollapsibleHeadings}. */\n get enableCollapsibleHeadings(): boolean {\n return this.EnableCollapsibleHeadings;\n }\n\n /**\n * Heading level at which to start collapsing\n */\n @Input() CollapsibleHeadingLevel: 1 | 2 | 3 | 4 | 5 | 6 = DEFAULT_MARKDOWN_CONFIG.collapsibleHeadingLevel;\n\n /** @deprecated Use {@link CollapsibleHeadingLevel}. */\n @Input() set collapsibleHeadingLevel(value: 1 | 2 | 3 | 4 | 5 | 6) {\n this.CollapsibleHeadingLevel = value;\n }\n /** @deprecated Use {@link CollapsibleHeadingLevel}. */\n get collapsibleHeadingLevel(): 1 | 2 | 3 | 4 | 5 | 6 {\n return this.CollapsibleHeadingLevel;\n }\n\n /**\n * Whether collapsible sections should be expanded by default\n */\n @Input() CollapsibleDefaultExpanded: boolean = DEFAULT_MARKDOWN_CONFIG.collapsibleDefaultExpanded;\n\n /** @deprecated Use {@link CollapsibleDefaultExpanded}. */\n @Input() set collapsibleDefaultExpanded(value: boolean) {\n this.CollapsibleDefaultExpanded = value;\n }\n /** @deprecated Use {@link CollapsibleDefaultExpanded}. */\n get collapsibleDefaultExpanded(): boolean {\n return this.CollapsibleDefaultExpanded;\n }\n\n /**\n * Specify which heading levels should start expanded.\n * Array of heading levels (2-6) that should be expanded by default.\n * Takes precedence over collapsibleDefaultExpanded for specified levels.\n *\n * Examples:\n * - [2] = Only h2 expanded, h3-h6 collapsed\n * - [2, 3] = h2 and h3 expanded, h4-h6 collapsed\n * - [] = All collapsed\n * - undefined = Uses collapsibleDefaultExpanded for all levels\n */\n @Input() AutoExpandLevels?: number[];\n\n /** @deprecated Use {@link AutoExpandLevels}. */\n @Input() set autoExpandLevels(value: number[] | undefined) {\n this.AutoExpandLevels = value;\n }\n /** @deprecated Use {@link AutoExpandLevels}. */\n get autoExpandLevels(): number[] | undefined {\n return this.AutoExpandLevels;\n }\n\n /**\n * Enable GitHub-style alerts\n */\n @Input() EnableAlerts: boolean = DEFAULT_MARKDOWN_CONFIG.enableAlerts;\n\n /** @deprecated Use {@link EnableAlerts}. */\n @Input() set enableAlerts(value: boolean) {\n this.EnableAlerts = value;\n }\n /** @deprecated Use {@link EnableAlerts}. */\n get enableAlerts(): boolean {\n return this.EnableAlerts;\n }\n\n /**\n * Enable smartypants for typography (curly quotes, em/en dashes, ellipses)\n */\n @Input() EnableSmartypants: boolean = DEFAULT_MARKDOWN_CONFIG.enableSmartypants;\n\n /** @deprecated Use {@link EnableSmartypants}. */\n @Input() set enableSmartypants(value: boolean) {\n this.EnableSmartypants = value;\n }\n /** @deprecated Use {@link EnableSmartypants}. */\n get enableSmartypants(): boolean {\n return this.EnableSmartypants;\n }\n\n /**\n * Enable SVG code block rendering\n * When enabled, ```svg code blocks are rendered as actual SVG images\n */\n @Input() EnableSvgRenderer: boolean = DEFAULT_MARKDOWN_CONFIG.enableSvgRenderer;\n\n /** @deprecated Use {@link EnableSvgRenderer}. */\n @Input() set enableSvgRenderer(value: boolean) {\n this.EnableSvgRenderer = value;\n }\n /** @deprecated Use {@link EnableSvgRenderer}. */\n get enableSvgRenderer(): boolean {\n return this.EnableSvgRenderer;\n }\n\n /**\n * Enable raw HTML passthrough in markdown content.\n * Scripts and event handlers are still stripped unless enableJavaScript is true.\n */\n @Input() EnableHtml: boolean = DEFAULT_MARKDOWN_CONFIG.enableHtml;\n\n /** @deprecated Use {@link EnableHtml}. */\n @Input() set enableHtml(value: boolean) {\n this.EnableHtml = value;\n }\n /** @deprecated Use {@link EnableHtml}. */\n get enableHtml(): boolean {\n return this.EnableHtml;\n }\n\n /**\n * Enable JavaScript in HTML content (<script> tags and on* handlers).\n * WARNING: Major security risk - only enable for fully trusted content.\n */\n @Input() EnableJavaScript: boolean = DEFAULT_MARKDOWN_CONFIG.enableJavaScript;\n\n /** @deprecated Use {@link EnableJavaScript}. */\n @Input() set enableJavaScript(value: boolean) {\n this.EnableJavaScript = value;\n }\n /** @deprecated Use {@link EnableJavaScript}. */\n get enableJavaScript(): boolean {\n return this.EnableJavaScript;\n }\n\n /**\n * Enable heading IDs for anchor links\n */\n @Input() EnableHeadingIds: boolean = DEFAULT_MARKDOWN_CONFIG.enableHeadingIds;\n\n /** @deprecated Use {@link EnableHeadingIds}. */\n @Input() set enableHeadingIds(value: boolean) {\n this.EnableHeadingIds = value;\n }\n /** @deprecated Use {@link EnableHeadingIds}. */\n get enableHeadingIds(): boolean {\n return this.EnableHeadingIds;\n }\n\n /**\n * Prefix for heading IDs\n */\n @Input() HeadingIdPrefix: string = DEFAULT_MARKDOWN_CONFIG.headingIdPrefix;\n\n /** @deprecated Use {@link HeadingIdPrefix}. */\n @Input() set headingIdPrefix(value: string) {\n this.HeadingIdPrefix = value;\n }\n /** @deprecated Use {@link HeadingIdPrefix}. */\n get headingIdPrefix(): string {\n return this.HeadingIdPrefix;\n }\n\n /**\n * Enable line numbers in code blocks\n */\n @Input() EnableLineNumbers: boolean = DEFAULT_MARKDOWN_CONFIG.enableLineNumbers;\n\n /** @deprecated Use {@link EnableLineNumbers}. */\n @Input() set enableLineNumbers(value: boolean) {\n this.EnableLineNumbers = value;\n }\n /** @deprecated Use {@link EnableLineNumbers}. */\n get enableLineNumbers(): boolean {\n return this.EnableLineNumbers;\n }\n\n /**\n * Custom CSS class for the container\n */\n @Input() ContainerClass: string = '';\n\n /** @deprecated Use {@link ContainerClass}. */\n @Input() set containerClass(value: string) {\n this.ContainerClass = value;\n }\n /** @deprecated Use {@link ContainerClass}. */\n get containerClass(): string {\n return this.ContainerClass;\n }\n\n /**\n * Mermaid theme.\n * 'auto' (default) detects light/dark from the document's data-theme attribute.\n */\n @Input() MermaidTheme: 'auto' | 'default' | 'dark' | 'forest' | 'neutral' | 'base' = DEFAULT_MARKDOWN_CONFIG.mermaidTheme;\n\n /** @deprecated Use {@link MermaidTheme}. */\n @Input() set mermaidTheme(value: 'auto' | 'default' | 'dark' | 'forest' | 'neutral' | 'base') {\n this.MermaidTheme = value;\n }\n /** @deprecated Use {@link MermaidTheme}. */\n get mermaidTheme(): 'auto' | 'default' | 'dark' | 'forest' | 'neutral' | 'base' {\n return this.MermaidTheme;\n }\n\n /**\n * Whether to sanitize HTML output\n */\n @Input() Sanitize: boolean = DEFAULT_MARKDOWN_CONFIG.sanitize;\n\n /** @deprecated Use {@link Sanitize}. */\n @Input() set sanitize(value: boolean) {\n this.Sanitize = value;\n }\n /** @deprecated Use {@link Sanitize}. */\n get sanitize(): boolean {\n return this.Sanitize;\n }\n\n /**\n * Emitted when rendering is complete\n */\n @Output() Rendered = new EventEmitter<MarkdownRenderEvent>();\n\n /**\n * @deprecated Use {@link Rendered}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (rendered) keeps working. Must stay AFTER Rendered: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() rendered = this.Rendered;\n\n /**\n * Emitted when a heading anchor is clicked\n */\n @Output() HeadingClick = new EventEmitter<HeadingInfo>();\n\n /**\n * @deprecated Use {@link HeadingClick}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (headingClick) keeps working. Must stay AFTER HeadingClick: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() headingClick = this.HeadingClick;\n\n /**\n * Emitted when code is copied to clipboard\n */\n @Output() CodeCopied = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link CodeCopied}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (codeCopied) keeps working. Must stay AFTER CodeCopied: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() codeCopied = this.CodeCopied;\n\n /**\n * The sanitized HTML content to display\n */\n public RenderedContent: SafeHtml = '';\n\n /** @deprecated Use {@link RenderedContent}. */\n public get renderedContent(): SafeHtml {\n return this.RenderedContent;\n }\n /** @deprecated Use {@link RenderedContent}. */\n public set renderedContent(value: SafeHtml) {\n this.RenderedContent = value;\n }\n\n /**\n * Public accessor for the component's element reference.\n * Provided for backward compatibility with ngx-markdown API.\n */\n public get Element(): ElementRef<HTMLElement> {\n return this.elementRef;\n }\n\n /** @deprecated Use {@link Element}. */\n public get element(): ElementRef<HTMLElement> {\n return this.Element;\n }\n\n private renderStartTime: number = 0;\n private hasMermaid: boolean = false;\n private hasCodeBlocks: boolean = false;\n private themeObserver: MutationObserver | null = null;\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private sanitizer: DomSanitizer,\n private markdownService: MarkdownService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // Check if any relevant input changed\n const needsRerender =\n changes['data'] ||\n changes['enableHighlight'] ||\n changes['enableMermaid'] ||\n changes['enableCodeCopy'] ||\n changes['enableCollapsibleHeadings'] ||\n changes['collapsibleHeadingLevel'] ||\n changes['collapsibleDefaultExpanded'] ||\n changes['autoExpandLevels'] ||\n changes['enableAlerts'] ||\n changes['enableSmartypants'] ||\n changes['enableSvgRenderer'] ||\n changes['enableHtml'] ||\n changes['enableJavaScript'] ||\n changes['enableHeadingIds'] ||\n changes['headingIdPrefix'] ||\n changes['mermaidTheme'] ||\n changes['sanitize'];\n\n if (needsRerender) {\n this.render();\n }\n }\n\n ngAfterViewInit(): void {\n // Initial render if data was provided\n if (this.Data) {\n this.postRenderProcessing();\n }\n\n this.setupThemeObserver();\n }\n\n ngOnDestroy(): void {\n this.themeObserver?.disconnect();\n this.themeObserver = null;\n this.cleanupEventListeners();\n }\n\n /**\n * Render the markdown content\n */\n private render(): void {\n if (!this.Data) {\n this.RenderedContent = '';\n this.cdr.markForCheck();\n return;\n }\n\n this.renderStartTime = performance.now();\n\n // Build config from inputs\n const config: MarkdownConfig = {\n enableHighlight: this.EnableHighlight,\n enableMermaid: this.EnableMermaid,\n enableCodeCopy: this.EnableCodeCopy,\n enableCollapsibleHeadings: this.EnableCollapsibleHeadings,\n collapsibleHeadingLevel: this.CollapsibleHeadingLevel,\n collapsibleDefaultExpanded: this.CollapsibleDefaultExpanded,\n autoExpandLevels: this.AutoExpandLevels,\n enableAlerts: this.EnableAlerts,\n enableSmartypants: this.EnableSmartypants,\n enableSvgRenderer: this.EnableSvgRenderer,\n enableHtml: this.EnableHtml,\n enableJavaScript: this.EnableJavaScript,\n enableHeadingIds: this.EnableHeadingIds,\n headingIdPrefix: this.HeadingIdPrefix,\n mermaidTheme: this.MermaidTheme,\n sanitize: this.Sanitize,\n };\n\n // Configure service and parse\n this.markdownService.configureMarked(config);\n let html = this.markdownService.parse(this.Data);\n\n // Check for mermaid and code blocks\n this.hasMermaid = html.includes('language-mermaid') || html.includes('class=\"mermaid\"');\n this.hasCodeBlocks = html.includes('<pre>') && html.includes('<code');\n\n // Sanitize if enabled\n // Note: We bypass Angular's sanitizer when SVG renderer or HTML passthrough is enabled\n // because it strips SVG elements and most HTML layout tags.\n const bypassAngularSanitizer = this.EnableSvgRenderer || this.EnableHtml;\n if (this.Sanitize && !bypassAngularSanitizer) {\n const sanitized = this.sanitizer.sanitize(SecurityContext.HTML, html);\n html = sanitized || '';\n }\n\n // When Angular's sanitizer is bypassed, the HTML has already been sanitized by\n // MarkdownService.parse() (DOMPurify, HTML + SVG profiles) unless enableJavaScript\n // opted out. Nothing further to do here.\n\n // Trust the HTML for display\n this.RenderedContent = this.sanitizer.bypassSecurityTrustHtml(html);\n this.cdr.markForCheck();\n\n // Schedule post-render processing for next tick (after DOM update)\n Promise.resolve().then(() => this.postRenderProcessing());\n }\n\n /**\n * Process rendered content after DOM update\n * Handles syntax highlighting, mermaid rendering, copy buttons, etc.\n */\n private async postRenderProcessing(): Promise<void> {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n // Add copy buttons to code blocks\n if (this.EnableCodeCopy && this.hasCodeBlocks) {\n this.markdownService.addCodeCopyButtons(container as HTMLElement);\n }\n\n // Initialize collapsible headings\n if (this.EnableCollapsibleHeadings) {\n this.markdownService.initializeCollapsibleHeadings(container as HTMLElement);\n this.setupCollapsibleListeners(container as HTMLElement);\n }\n\n // Render mermaid diagrams (async)\n if (this.EnableMermaid && this.hasMermaid) {\n await this.markdownService.renderMermaid(container as HTMLElement);\n }\n\n // Setup heading click listeners\n if (this.EnableHeadingIds) {\n this.setupHeadingClickListeners(container as HTMLElement);\n }\n\n // Setup code copy listeners for custom event emission\n if (this.EnableCodeCopy) {\n this.setupCodeCopyListeners(container as HTMLElement);\n }\n\n // Emit rendered event\n const renderTime = performance.now() - this.renderStartTime;\n const headingIds = this.markdownService.getHeadingList();\n\n this.Rendered.emit({\n html: (container as HTMLElement).innerHTML,\n renderTime,\n hasMermaid: this.hasMermaid,\n hasCodeBlocks: this.hasCodeBlocks,\n headingIds,\n });\n }\n\n /**\n * Setup collapsible sections by adding toggle buttons and click listeners\n */\n private setupCollapsibleListeners(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section');\n\n sections.forEach((section) => {\n const wrapper = section.querySelector(':scope > .collapsible-heading-wrapper') as HTMLElement | null;\n if (!wrapper) return;\n\n // Check if toggle already exists\n if (wrapper.querySelector('.collapsible-toggle')) return;\n\n const isExpanded = !section.classList.contains('collapsed');\n const hasChildren = section.querySelector('.collapsible-section') !== null;\n\n // Create toggle button (chevron)\n const toggle = document.createElement('span');\n toggle.className = 'collapsible-toggle';\n toggle.setAttribute('role', 'button');\n toggle.setAttribute('tabindex', '0');\n toggle.setAttribute('aria-expanded', String(isExpanded));\n toggle.innerHTML = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M6 12l4-4-4-4\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n // Insert toggle before heading\n wrapper.insertBefore(toggle, wrapper.firstChild);\n\n // Add action buttons container (only if has children)\n if (hasChildren) {\n const actions = this.createActionButtons(section as HTMLElement);\n wrapper.appendChild(actions);\n }\n\n // Make the whole wrapper clickable\n wrapper.style.cursor = 'pointer';\n\n // Add click listener to wrapper (but not on action buttons)\n wrapper.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n // Don't toggle if clicking on action buttons\n if (target.closest('.collapsible-actions')) return;\n\n e.preventDefault();\n e.stopPropagation();\n this.toggleSection(section as HTMLElement, toggle);\n });\n\n // Add keyboard support\n wrapper.addEventListener('keydown', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.collapsible-actions')) return;\n\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {\n e.preventDefault();\n this.toggleSection(section as HTMLElement, toggle);\n }\n });\n });\n }\n\n /**\n * Create the expand/collapse all action buttons for sections with children\n */\n private createActionButtons(section: HTMLElement): HTMLElement {\n const container = document.createElement('span');\n container.className = 'collapsible-actions';\n\n // Expand all button\n const expandBtn = document.createElement('button');\n expandBtn.className = 'collapsible-action-btn expand-all';\n expandBtn.setAttribute('type', 'button');\n expandBtn.setAttribute('title', 'Expand all');\n expandBtn.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 6l4 4 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4 10l4 4 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n expandBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.expandDescendants(section);\n // Also expand the section itself if collapsed\n if (section.classList.contains('collapsed')) {\n section.classList.remove('collapsed');\n const toggle = section.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) toggle.setAttribute('aria-expanded', 'true');\n }\n });\n\n // Collapse all button\n const collapseBtn = document.createElement('button');\n collapseBtn.className = 'collapsible-action-btn collapse-all';\n collapseBtn.setAttribute('type', 'button');\n collapseBtn.setAttribute('title', 'Collapse all');\n collapseBtn.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 10l4-4 4 4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4 14l4-4 4 4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`;\n\n collapseBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.collapseDescendants(section);\n });\n\n container.appendChild(expandBtn);\n container.appendChild(collapseBtn);\n\n return container;\n }\n\n /**\n * Toggle a collapsible section\n * @param section The section element to toggle\n * @param toggle The toggle button element\n */\n private toggleSection(section: HTMLElement, toggle: HTMLElement): void {\n const isCollapsed = section.classList.contains('collapsed');\n\n // Toggle the section\n section.classList.toggle('collapsed');\n toggle.setAttribute('aria-expanded', String(isCollapsed));\n // Children retain their state - CSS handles visibility via parent collapse\n }\n\n /**\n * Collapse all descendant sections (used by action button)\n */\n private collapseDescendants(section: HTMLElement): void {\n const descendants = section.querySelectorAll('.collapsible-section');\n descendants.forEach((desc) => {\n desc.classList.add('collapsed');\n const toggle = desc.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'false');\n }\n });\n }\n\n /**\n * Expand all descendant sections (used by action button)\n */\n private expandDescendants(section: HTMLElement): void {\n const descendants = section.querySelectorAll('.collapsible-section');\n descendants.forEach((desc) => {\n desc.classList.remove('collapsed');\n const toggle = desc.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n });\n }\n\n /**\n * Setup click listeners for heading anchors\n */\n private setupHeadingClickListeners(container: HTMLElement): void {\n const headings = container.querySelectorAll('h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]');\n\n headings.forEach((heading) => {\n heading.addEventListener('click', () => {\n const id = heading.getAttribute('id') || '';\n const text = heading.textContent || '';\n const level = parseInt(heading.tagName.charAt(1), 10);\n\n this.HeadingClick.emit({\n id,\n text,\n level,\n raw: text,\n });\n });\n });\n }\n\n /**\n * Setup listeners to emit code copy events\n */\n private setupCodeCopyListeners(container: HTMLElement): void {\n const copyButtons = container.querySelectorAll('.code-copy-btn');\n\n copyButtons.forEach((button) => {\n button.addEventListener('click', () => {\n const pre = button.closest('pre');\n const code = pre?.querySelector('code');\n if (code) {\n this.CodeCopied.emit(code.textContent || '');\n }\n });\n });\n }\n\n /**\n * Watch the document's data-theme attribute for changes.\n * When the app theme switches (light ↔ dark) and mermaidTheme is 'auto',\n * re-render so mermaid diagrams pick up the new theme.\n */\n private setupThemeObserver(): void {\n if (typeof MutationObserver === 'undefined') return;\n\n this.themeObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-theme') {\n this.onThemeAttributeChanged();\n break;\n }\n }\n });\n\n this.themeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n }\n\n /**\n * Called when data-theme changes on the document root.\n * Triggers a full re-render when mermaid auto-theming is active.\n */\n private onThemeAttributeChanged(): void {\n if (this.MermaidTheme === 'auto' && this.EnableMermaid && this.hasMermaid && this.Data) {\n this.render();\n }\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n // Clone and replace to remove all listeners\n const clone = container.cloneNode(true);\n container.parentNode?.replaceChild(clone, container);\n }\n\n /**\n * Force a re-render of the markdown content\n */\n public Refresh(): void {\n this.render();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public refresh(): void {\n return this.Refresh();\n }\n\n /**\n * Get the current heading list (for TOC building)\n */\n public GetHeadings(): HeadingInfo[] {\n return this.markdownService.getHeadingList();\n }\n\n /** @deprecated Use {@link GetHeadings}. */\n public getHeadings(): HeadingInfo[] {\n return this.GetHeadings();\n }\n\n /**\n * Scroll to a heading by ID\n */\n public ScrollToHeading(headingId: string): void {\n const container = this.elementRef.nativeElement.querySelector('.mj-markdown-container');\n if (!container) return;\n\n const heading = container.querySelector(`#${headingId}`);\n if (heading) {\n heading.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n\n /** @deprecated Use {@link ScrollToHeading}. */\n public scrollToHeading(headingId: string): void {\n return this.ScrollToHeading(headingId);\n }\n}\n"]}
@@ -56,10 +56,14 @@ export interface CodeCopyOptions {
56
56
  * @param container The DOM element containing code blocks
57
57
  * @param options Configuration options
58
58
  */
59
+ export declare function AddCopyButtonsToCodeBlocks(container: HTMLElement, options?: CodeCopyOptions): void;
60
+ /** @deprecated Use {@link AddCopyButtonsToCodeBlocks}. */
59
61
  export declare function addCopyButtonsToCodeBlocks(container: HTMLElement, options?: CodeCopyOptions): void;
60
62
  /**
61
63
  * Remove all copy buttons from code blocks in a container
62
64
  * Useful for cleanup when component is destroyed
63
65
  */
66
+ export declare function RemoveCopyButtonsFromCodeBlocks(container: HTMLElement, toolbarClass?: string): void;
67
+ /** @deprecated Use {@link RemoveCopyButtonsFromCodeBlocks}. */
64
68
  export declare function removeCopyButtonsFromCodeBlocks(container: HTMLElement, toolbarClass?: string): void;
65
69
  //# sourceMappingURL=code-copy.extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-copy.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/code-copy.extension.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAeD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CA8EN;AAiBD;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,WAAW,EACtB,YAAY,GAAE,MAAuB,GACpC,IAAI,CAGN"}
1
+ {"version":3,"file":"code-copy.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/code-copy.extension.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAeD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CA8EN;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CAEN;AAiBD;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,WAAW,EACtB,YAAY,GAAE,MAAuB,GACpC,IAAI,CAGN;AAED,+DAA+D;AAC/D,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,WAAW,EACtB,YAAY,GAAE,MAAuB,GACpC,IAAI,CAEN"}
@@ -23,7 +23,7 @@ const DEFAULT_OPTIONS = {
23
23
  * @param container The DOM element containing code blocks
24
24
  * @param options Configuration options
25
25
  */
26
- export function addCopyButtonsToCodeBlocks(container, options) {
26
+ export function AddCopyButtonsToCodeBlocks(container, options) {
27
27
  const opts = { ...DEFAULT_OPTIONS, ...options };
28
28
  const codeBlocks = container.querySelectorAll('pre > code');
29
29
  codeBlocks.forEach((codeBlock) => {
@@ -89,6 +89,10 @@ export function addCopyButtonsToCodeBlocks(container, options) {
89
89
  pre.insertBefore(toolbar, pre.firstChild);
90
90
  });
91
91
  }
92
+ /** @deprecated Use {@link AddCopyButtonsToCodeBlocks}. */
93
+ export function addCopyButtonsToCodeBlocks(container, options) {
94
+ return AddCopyButtonsToCodeBlocks(container, options);
95
+ }
92
96
  /**
93
97
  * Extract the language class from a code element
94
98
  */
@@ -105,8 +109,12 @@ function extractLanguageFromCode(codeElement) {
105
109
  * Remove all copy buttons from code blocks in a container
106
110
  * Useful for cleanup when component is destroyed
107
111
  */
108
- export function removeCopyButtonsFromCodeBlocks(container, toolbarClass = 'code-toolbar') {
112
+ export function RemoveCopyButtonsFromCodeBlocks(container, toolbarClass = 'code-toolbar') {
109
113
  const toolbars = container.querySelectorAll(`.${toolbarClass}`);
110
114
  toolbars.forEach((toolbar) => toolbar.remove());
111
115
  }
116
+ /** @deprecated Use {@link RemoveCopyButtonsFromCodeBlocks}. */
117
+ export function removeCopyButtonsFromCodeBlocks(container, toolbarClass = 'code-toolbar') {
118
+ return RemoveCopyButtonsFromCodeBlocks(container, toolbarClass);
119
+ }
112
120
  //# sourceMappingURL=code-copy.extension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-copy.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/code-copy.extension.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Code copy extension utilities\n *\n * This module provides utilities for adding copy-to-clipboard functionality\n * to code blocks. Unlike other marked extensions, this operates on the DOM\n * after rendering since it requires adding interactive elements.\n */\nimport { formatLanguageName } from '@memberjunction/markdown-core';\n\n/**\n * Options for the code copy functionality\n */\nexport interface CodeCopyOptions {\n /**\n * CSS class for the copy button\n * @default 'code-copy-btn'\n */\n buttonClass?: string;\n\n /**\n * CSS class for the toolbar container\n * @default 'code-toolbar'\n */\n toolbarClass?: string;\n\n /**\n * Icon HTML for the copy button\n * @default '<i class=\"fas fa-copy\"></i>'\n */\n copyIcon?: string;\n\n /**\n * Icon HTML for successful copy\n * @default '<i class=\"fas fa-check\"></i>'\n */\n successIcon?: string;\n\n /**\n * Icon HTML for failed copy\n * @default '<i class=\"fas fa-times\"></i>'\n */\n errorIcon?: string;\n\n /**\n * Tooltip text for the copy button\n * @default 'Copy code'\n */\n tooltipText?: string;\n\n /**\n * Duration in ms to show success/error state\n * @default 2000\n */\n feedbackDuration?: number;\n\n /**\n * Callback when code is successfully copied\n */\n onCopy?: (code: string) => void;\n\n /**\n * Callback when copy fails\n */\n onError?: (error: Error) => void;\n\n /**\n * Whether to show the language label in the toolbar\n * @default true\n */\n showLanguageLabel?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<CodeCopyOptions, 'onCopy' | 'onError'>> & Pick<CodeCopyOptions, 'onCopy' | 'onError'> = {\n buttonClass: 'code-copy-btn',\n toolbarClass: 'code-toolbar',\n copyIcon: '<i class=\"fas fa-copy\"></i>',\n successIcon: '<i class=\"fas fa-check\"></i>',\n errorIcon: '<i class=\"fas fa-times\"></i>',\n tooltipText: 'Copy code',\n feedbackDuration: 2000,\n showLanguageLabel: true,\n onCopy: undefined,\n onError: undefined\n};\n\n/**\n * Add copy buttons to all code blocks within a container\n * @param container The DOM element containing code blocks\n * @param options Configuration options\n */\nexport function addCopyButtonsToCodeBlocks(\n container: HTMLElement,\n options?: CodeCopyOptions\n): void {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const codeBlocks = container.querySelectorAll('pre > code');\n\n codeBlocks.forEach((codeBlock) => {\n const pre = codeBlock.parentElement;\n if (!pre) return;\n\n // Skip if already has toolbar\n if (pre.querySelector(`.${opts.toolbarClass}`)) return;\n\n // Create toolbar\n const toolbar = document.createElement('div');\n toolbar.className = opts.toolbarClass;\n\n // Add language label if enabled\n if (opts.showLanguageLabel) {\n const language = extractLanguageFromCode(codeBlock);\n if (language) {\n const label = document.createElement('span');\n label.className = 'code-language-label';\n label.textContent = formatLanguageName(language);\n toolbar.appendChild(label);\n }\n }\n\n // Create copy button\n const button = document.createElement('button');\n button.className = opts.buttonClass;\n button.innerHTML = opts.copyIcon;\n button.title = opts.tooltipText;\n button.type = 'button';\n button.setAttribute('aria-label', opts.tooltipText);\n\n // Add click handler\n button.addEventListener('click', async () => {\n const code = codeBlock.textContent || '';\n\n try {\n await navigator.clipboard.writeText(code);\n\n // Show success state\n button.innerHTML = opts.successIcon;\n button.classList.add('copied');\n\n // Call success callback\n opts.onCopy?.(code);\n\n // Reset after delay\n setTimeout(() => {\n button.innerHTML = opts.copyIcon;\n button.classList.remove('copied');\n }, opts.feedbackDuration);\n } catch (err) {\n console.error('Failed to copy code:', err);\n\n // Show error state\n button.innerHTML = opts.errorIcon;\n button.classList.add('error');\n\n // Call error callback\n opts.onError?.(err as Error);\n\n // Reset after delay\n setTimeout(() => {\n button.innerHTML = opts.copyIcon;\n button.classList.remove('error');\n }, opts.feedbackDuration);\n }\n });\n\n toolbar.appendChild(button);\n\n // Position the pre element for absolute positioning of toolbar\n pre.style.position = 'relative';\n pre.insertBefore(toolbar, pre.firstChild);\n });\n}\n\n/**\n * Extract the language class from a code element\n */\nfunction extractLanguageFromCode(codeElement: Element): string | null {\n const classes = codeElement.className.split(' ');\n\n for (const cls of classes) {\n if (cls.startsWith('language-')) {\n return cls.replace('language-', '');\n }\n }\n\n return null;\n}\n\n/**\n * Remove all copy buttons from code blocks in a container\n * Useful for cleanup when component is destroyed\n */\nexport function removeCopyButtonsFromCodeBlocks(\n container: HTMLElement,\n toolbarClass: string = 'code-toolbar'\n): void {\n const toolbars = container.querySelectorAll(`.${toolbarClass}`);\n toolbars.forEach((toolbar) => toolbar.remove());\n}\n"]}
1
+ {"version":3,"file":"code-copy.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/code-copy.extension.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Code copy extension utilities\n *\n * This module provides utilities for adding copy-to-clipboard functionality\n * to code blocks. Unlike other marked extensions, this operates on the DOM\n * after rendering since it requires adding interactive elements.\n */\nimport { formatLanguageName } from '@memberjunction/markdown-core';\n\n/**\n * Options for the code copy functionality\n */\nexport interface CodeCopyOptions {\n /**\n * CSS class for the copy button\n * @default 'code-copy-btn'\n */\n buttonClass?: string;\n\n /**\n * CSS class for the toolbar container\n * @default 'code-toolbar'\n */\n toolbarClass?: string;\n\n /**\n * Icon HTML for the copy button\n * @default '<i class=\"fas fa-copy\"></i>'\n */\n copyIcon?: string;\n\n /**\n * Icon HTML for successful copy\n * @default '<i class=\"fas fa-check\"></i>'\n */\n successIcon?: string;\n\n /**\n * Icon HTML for failed copy\n * @default '<i class=\"fas fa-times\"></i>'\n */\n errorIcon?: string;\n\n /**\n * Tooltip text for the copy button\n * @default 'Copy code'\n */\n tooltipText?: string;\n\n /**\n * Duration in ms to show success/error state\n * @default 2000\n */\n feedbackDuration?: number;\n\n /**\n * Callback when code is successfully copied\n */\n onCopy?: (code: string) => void;\n\n /**\n * Callback when copy fails\n */\n onError?: (error: Error) => void;\n\n /**\n * Whether to show the language label in the toolbar\n * @default true\n */\n showLanguageLabel?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<CodeCopyOptions, 'onCopy' | 'onError'>> & Pick<CodeCopyOptions, 'onCopy' | 'onError'> = {\n buttonClass: 'code-copy-btn',\n toolbarClass: 'code-toolbar',\n copyIcon: '<i class=\"fas fa-copy\"></i>',\n successIcon: '<i class=\"fas fa-check\"></i>',\n errorIcon: '<i class=\"fas fa-times\"></i>',\n tooltipText: 'Copy code',\n feedbackDuration: 2000,\n showLanguageLabel: true,\n onCopy: undefined,\n onError: undefined\n};\n\n/**\n * Add copy buttons to all code blocks within a container\n * @param container The DOM element containing code blocks\n * @param options Configuration options\n */\nexport function AddCopyButtonsToCodeBlocks(\n container: HTMLElement,\n options?: CodeCopyOptions\n): void {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const codeBlocks = container.querySelectorAll('pre > code');\n\n codeBlocks.forEach((codeBlock) => {\n const pre = codeBlock.parentElement;\n if (!pre) return;\n\n // Skip if already has toolbar\n if (pre.querySelector(`.${opts.toolbarClass}`)) return;\n\n // Create toolbar\n const toolbar = document.createElement('div');\n toolbar.className = opts.toolbarClass;\n\n // Add language label if enabled\n if (opts.showLanguageLabel) {\n const language = extractLanguageFromCode(codeBlock);\n if (language) {\n const label = document.createElement('span');\n label.className = 'code-language-label';\n label.textContent = formatLanguageName(language);\n toolbar.appendChild(label);\n }\n }\n\n // Create copy button\n const button = document.createElement('button');\n button.className = opts.buttonClass;\n button.innerHTML = opts.copyIcon;\n button.title = opts.tooltipText;\n button.type = 'button';\n button.setAttribute('aria-label', opts.tooltipText);\n\n // Add click handler\n button.addEventListener('click', async () => {\n const code = codeBlock.textContent || '';\n\n try {\n await navigator.clipboard.writeText(code);\n\n // Show success state\n button.innerHTML = opts.successIcon;\n button.classList.add('copied');\n\n // Call success callback\n opts.onCopy?.(code);\n\n // Reset after delay\n setTimeout(() => {\n button.innerHTML = opts.copyIcon;\n button.classList.remove('copied');\n }, opts.feedbackDuration);\n } catch (err) {\n console.error('Failed to copy code:', err);\n\n // Show error state\n button.innerHTML = opts.errorIcon;\n button.classList.add('error');\n\n // Call error callback\n opts.onError?.(err as Error);\n\n // Reset after delay\n setTimeout(() => {\n button.innerHTML = opts.copyIcon;\n button.classList.remove('error');\n }, opts.feedbackDuration);\n }\n });\n\n toolbar.appendChild(button);\n\n // Position the pre element for absolute positioning of toolbar\n pre.style.position = 'relative';\n pre.insertBefore(toolbar, pre.firstChild);\n });\n}\n\n/** @deprecated Use {@link AddCopyButtonsToCodeBlocks}. */\nexport function addCopyButtonsToCodeBlocks(\n container: HTMLElement,\n options?: CodeCopyOptions\n): void {\n return AddCopyButtonsToCodeBlocks(container, options);\n}\n\n/**\n * Extract the language class from a code element\n */\nfunction extractLanguageFromCode(codeElement: Element): string | null {\n const classes = codeElement.className.split(' ');\n\n for (const cls of classes) {\n if (cls.startsWith('language-')) {\n return cls.replace('language-', '');\n }\n }\n\n return null;\n}\n\n/**\n * Remove all copy buttons from code blocks in a container\n * Useful for cleanup when component is destroyed\n */\nexport function RemoveCopyButtonsFromCodeBlocks(\n container: HTMLElement,\n toolbarClass: string = 'code-toolbar'\n): void {\n const toolbars = container.querySelectorAll(`.${toolbarClass}`);\n toolbars.forEach((toolbar) => toolbar.remove());\n}\n\n/** @deprecated Use {@link RemoveCopyButtonsFromCodeBlocks}. */\nexport function removeCopyButtonsFromCodeBlocks(\n container: HTMLElement,\n toolbarClass: string = 'code-toolbar'\n): void {\n return RemoveCopyButtonsFromCodeBlocks(container, toolbarClass);\n}\n"]}
@@ -9,17 +9,25 @@
9
9
  /**
10
10
  * Helper function to toggle a collapsible section programmatically
11
11
  */
12
+ export declare function ToggleCollapsibleSection(sectionElement: HTMLElement): void;
13
+ /** @deprecated Use {@link ToggleCollapsibleSection}. */
12
14
  export declare function toggleCollapsibleSection(sectionElement: HTMLElement): void;
13
15
  /**
14
16
  * Expand all collapsible sections in a container
15
17
  */
18
+ export declare function ExpandAllSections(container: HTMLElement): void;
19
+ /** @deprecated Use {@link ExpandAllSections}. */
16
20
  export declare function expandAllSections(container: HTMLElement): void;
17
21
  /**
18
22
  * Collapse all collapsible sections in a container
19
23
  */
24
+ export declare function CollapseAllSections(container: HTMLElement): void;
25
+ /** @deprecated Use {@link CollapseAllSections}. */
20
26
  export declare function collapseAllSections(container: HTMLElement): void;
21
27
  /**
22
28
  * Expand sections to reveal a specific heading by ID
23
29
  */
30
+ export declare function ExpandToHeading(container: HTMLElement, headingId: string): void;
31
+ /** @deprecated Use {@link ExpandToHeading}. */
24
32
  export declare function expandToHeading(container: HTMLElement, headingId: string): void;
25
33
  //# sourceMappingURL=collapsible-headings.extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible-headings.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/collapsible-headings.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI,CAS1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAS9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAShE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAgB/E"}
1
+ {"version":3,"file":"collapsible-headings.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/collapsible-headings.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI,CAS1E;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAS9D;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAShE;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAgB/E;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE/E"}
@@ -9,7 +9,7 @@
9
9
  /**
10
10
  * Helper function to toggle a collapsible section programmatically
11
11
  */
12
- export function toggleCollapsibleSection(sectionElement) {
12
+ export function ToggleCollapsibleSection(sectionElement) {
13
13
  const isCollapsed = sectionElement.classList.contains('collapsed');
14
14
  const toggle = sectionElement.querySelector('.collapsible-toggle');
15
15
  sectionElement.classList.toggle('collapsed');
@@ -17,10 +17,14 @@ export function toggleCollapsibleSection(sectionElement) {
17
17
  toggle.setAttribute('aria-expanded', String(isCollapsed));
18
18
  }
19
19
  }
20
+ /** @deprecated Use {@link ToggleCollapsibleSection}. */
21
+ export function toggleCollapsibleSection(sectionElement) {
22
+ return ToggleCollapsibleSection(sectionElement);
23
+ }
20
24
  /**
21
25
  * Expand all collapsible sections in a container
22
26
  */
23
- export function expandAllSections(container) {
27
+ export function ExpandAllSections(container) {
24
28
  const sections = container.querySelectorAll('.collapsible-section.collapsed');
25
29
  sections.forEach((section) => {
26
30
  section.classList.remove('collapsed');
@@ -30,10 +34,14 @@ export function expandAllSections(container) {
30
34
  }
31
35
  });
32
36
  }
37
+ /** @deprecated Use {@link ExpandAllSections}. */
38
+ export function expandAllSections(container) {
39
+ return ExpandAllSections(container);
40
+ }
33
41
  /**
34
42
  * Collapse all collapsible sections in a container
35
43
  */
36
- export function collapseAllSections(container) {
44
+ export function CollapseAllSections(container) {
37
45
  const sections = container.querySelectorAll('.collapsible-section:not(.collapsed)');
38
46
  sections.forEach((section) => {
39
47
  section.classList.add('collapsed');
@@ -43,10 +51,14 @@ export function collapseAllSections(container) {
43
51
  }
44
52
  });
45
53
  }
54
+ /** @deprecated Use {@link CollapseAllSections}. */
55
+ export function collapseAllSections(container) {
56
+ return CollapseAllSections(container);
57
+ }
46
58
  /**
47
59
  * Expand sections to reveal a specific heading by ID
48
60
  */
49
- export function expandToHeading(container, headingId) {
61
+ export function ExpandToHeading(container, headingId) {
50
62
  const heading = container.querySelector(`#${headingId}`);
51
63
  if (!heading)
52
64
  return;
@@ -63,4 +75,8 @@ export function expandToHeading(container, headingId) {
63
75
  current = current.parentElement?.closest('.collapsible-section') || null;
64
76
  }
65
77
  }
78
+ /** @deprecated Use {@link ExpandToHeading}. */
79
+ export function expandToHeading(container, headingId) {
80
+ return ExpandToHeading(container, headingId);
81
+ }
66
82
  //# sourceMappingURL=collapsible-headings.extension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible-headings.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/collapsible-headings.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,cAA2B;IAClE,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEnE,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE7C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAsB;IACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,CAAC;IAC9E,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAsB;IACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;IACpF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAsB,EAAE,SAAiB;IACvE,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,yDAAyD;IACzD,IAAI,OAAO,GAAuB,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1E,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,2DAA2D,CAAC,CAAC;YAClG,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;IAC3E,CAAC;AACH,CAAC","sourcesContent":["/**\n * Web-only DOM helpers for collapsible heading sections.\n *\n * The framework-agnostic marked extension that produces the nested\n * `<div class=\"collapsible-section\">` HTML (`createCollapsibleHeadingsExtension`)\n * now lives in `@memberjunction/markdown-core`. This file keeps the browser-only\n * helpers that toggle the rendered sections in a live DOM.\n */\n\n/**\n * Helper function to toggle a collapsible section programmatically\n */\nexport function toggleCollapsibleSection(sectionElement: HTMLElement): void {\n const isCollapsed = sectionElement.classList.contains('collapsed');\n const toggle = sectionElement.querySelector('.collapsible-toggle');\n\n sectionElement.classList.toggle('collapsed');\n\n if (toggle) {\n toggle.setAttribute('aria-expanded', String(isCollapsed));\n }\n}\n\n/**\n * Expand all collapsible sections in a container\n */\nexport function expandAllSections(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section.collapsed');\n sections.forEach((section) => {\n section.classList.remove('collapsed');\n const toggle = section.querySelector('.collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n });\n}\n\n/**\n * Collapse all collapsible sections in a container\n */\nexport function collapseAllSections(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section:not(.collapsed)');\n sections.forEach((section) => {\n section.classList.add('collapsed');\n const toggle = section.querySelector('.collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'false');\n }\n });\n}\n\n/**\n * Expand sections to reveal a specific heading by ID\n */\nexport function expandToHeading(container: HTMLElement, headingId: string): void {\n const heading = container.querySelector(`#${headingId}`);\n if (!heading) return;\n\n // Find all ancestor collapsible sections and expand them\n let current: HTMLElement | null = heading.closest('.collapsible-section');\n while (current) {\n if (current.classList.contains('collapsed')) {\n current.classList.remove('collapsed');\n const toggle = current.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n }\n current = current.parentElement?.closest('.collapsible-section') || null;\n }\n}\n"]}
1
+ {"version":3,"file":"collapsible-headings.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/collapsible-headings.extension.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Web-only DOM helpers for collapsible heading sections.\n *\n * The framework-agnostic marked extension that produces the nested\n * `<div class=\"collapsible-section\">` HTML (`createCollapsibleHeadingsExtension`)\n * now lives in `@memberjunction/markdown-core`. This file keeps the browser-only\n * helpers that toggle the rendered sections in a live DOM.\n */\n\n/**\n * Helper function to toggle a collapsible section programmatically\n */\nexport function ToggleCollapsibleSection(sectionElement: HTMLElement): void {\n const isCollapsed = sectionElement.classList.contains('collapsed');\n const toggle = sectionElement.querySelector('.collapsible-toggle');\n\n sectionElement.classList.toggle('collapsed');\n\n if (toggle) {\n toggle.setAttribute('aria-expanded', String(isCollapsed));\n }\n}\n\n/** @deprecated Use {@link ToggleCollapsibleSection}. */\nexport function toggleCollapsibleSection(sectionElement: HTMLElement): void {\n return ToggleCollapsibleSection(sectionElement);\n}\n\n/**\n * Expand all collapsible sections in a container\n */\nexport function ExpandAllSections(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section.collapsed');\n sections.forEach((section) => {\n section.classList.remove('collapsed');\n const toggle = section.querySelector('.collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n });\n}\n\n/** @deprecated Use {@link ExpandAllSections}. */\nexport function expandAllSections(container: HTMLElement): void {\n return ExpandAllSections(container);\n}\n\n/**\n * Collapse all collapsible sections in a container\n */\nexport function CollapseAllSections(container: HTMLElement): void {\n const sections = container.querySelectorAll('.collapsible-section:not(.collapsed)');\n sections.forEach((section) => {\n section.classList.add('collapsed');\n const toggle = section.querySelector('.collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'false');\n }\n });\n}\n\n/** @deprecated Use {@link CollapseAllSections}. */\nexport function collapseAllSections(container: HTMLElement): void {\n return CollapseAllSections(container);\n}\n\n/**\n * Expand sections to reveal a specific heading by ID\n */\nexport function ExpandToHeading(container: HTMLElement, headingId: string): void {\n const heading = container.querySelector(`#${headingId}`);\n if (!heading) return;\n\n // Find all ancestor collapsible sections and expand them\n let current: HTMLElement | null = heading.closest('.collapsible-section');\n while (current) {\n if (current.classList.contains('collapsed')) {\n current.classList.remove('collapsed');\n const toggle = current.querySelector(':scope > .collapsible-heading-wrapper .collapsible-toggle');\n if (toggle) {\n toggle.setAttribute('aria-expanded', 'true');\n }\n }\n current = current.parentElement?.closest('.collapsible-section') || null;\n }\n}\n\n/** @deprecated Use {@link ExpandToHeading}. */\nexport function expandToHeading(container: HTMLElement, headingId: string): void {\n return ExpandToHeading(container, headingId);\n}\n"]}
@@ -17,5 +17,7 @@
17
17
  *
18
18
  * @param container The DOM element containing rendered SVG
19
19
  */
20
+ export declare function SanitizeSvgContent(container: HTMLElement): void;
21
+ /** @deprecated Use {@link SanitizeSvgContent}. */
20
22
  export declare function sanitizeSvgContent(container: HTMLElement): void;
21
23
  //# sourceMappingURL=svg-renderer.extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg-renderer.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/svg-renderer.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8BH;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CA2B/D"}
1
+ {"version":3,"file":"svg-renderer.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/svg-renderer.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8BH;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CA2B/D;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAE/D"}
@@ -41,7 +41,7 @@ function isScriptUrl(element, attributeName, value) {
41
41
  *
42
42
  * @param container The DOM element containing rendered SVG
43
43
  */
44
- export function sanitizeSvgContent(container) {
44
+ export function SanitizeSvgContent(container) {
45
45
  container.querySelectorAll('script').forEach((script) => script.remove());
46
46
  container.querySelectorAll('foreignObject').forEach((fo) => fo.remove());
47
47
  container.querySelectorAll('*').forEach((el) => {
@@ -67,4 +67,8 @@ export function sanitizeSvgContent(container) {
67
67
  }
68
68
  });
69
69
  }
70
+ /** @deprecated Use {@link SanitizeSvgContent}. */
71
+ export function sanitizeSvgContent(container) {
72
+ return SanitizeSvgContent(container);
73
+ }
70
74
  //# sourceMappingURL=svg-renderer.extension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg-renderer.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/svg-renderer.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oGAAoG;AACpG,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEzD,4EAA4E;AAC5E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAEtF;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,aAAqB,EAAE,KAAa;IACzE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GACf,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;QACzC,CAAC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,YAAY,CAAC;QAC5D,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;QACpC,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,OAAO,CAAC,WAAW,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAsB;IACvD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzE,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAChD,sFAAsF;QACtF,0FAA0F;QAC1F,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC7E,4CAA4C;aAC3C,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Web-only DOM utilities that complement the SVG renderer marked extension.\n *\n * The framework-agnostic SVG tokenizer/renderer (`createSvgRendererExtension`,\n * `isSvgContent`) now lives in `@memberjunction/markdown-core`. This file keeps\n * the browser-only sanitization helper, which operates on a live DOM subtree\n * after the SVG has been inserted into the page.\n */\n\n/** URL schemes that can execute script or smuggle markup when used as a link or resource target. */\nconst SCRIPT_URL_SCHEME = /^(javascript|vbscript|data):/;\n\n/** Attributes whose value is a URL the browser will navigate to or load. */\nconst URL_ATTRIBUTES = new Set(['href', 'xlink:href', 'src', 'action', 'formaction']);\n\n/**\n * True when an attribute value is a script-capable URL. Whitespace and control\n * characters are removed before the scheme check because browsers ignore them\n * (a tab inside `javascript:` still navigates), and the comparison is case-insensitive.\n *\n * `data:image/...` (other than SVG, which can carry script) is allowed on `<image>`\n * so embedded raster images inside an SVG keep working.\n */\nfunction isScriptUrl(element: Element, attributeName: string, value: string): boolean {\n // eslint-disable-next-line no-control-regex\n const normalized = value.replace(/[\\u0000-\\u0020\\u007f]/g, '').toLowerCase();\n if (!SCRIPT_URL_SCHEME.test(normalized)) {\n return false;\n }\n const isImageData =\n element.tagName.toLowerCase() === 'image' &&\n (attributeName === 'href' || attributeName === 'xlink:href') &&\n normalized.startsWith('data:image/') &&\n !normalized.startsWith('data:image/svg');\n return !isImageData;\n}\n\n/**\n * Sanitize rendered SVG in place by removing the vectors that can run script.\n * Call this on the container element after rendering if you need additional security.\n *\n * Removes `<script>` and `<foreignObject>` elements, every `on*` event-handler\n * attribute (not a fixed list: any attribute whose name starts with `on`),\n * `javascript:` / `vbscript:` / `data:` URLs on link and resource attributes, and\n * `<use>` elements that reference an external document.\n *\n * @param container The DOM element containing rendered SVG\n */\nexport function sanitizeSvgContent(container: HTMLElement): void {\n container.querySelectorAll('script').forEach((script) => script.remove());\n container.querySelectorAll('foreignObject').forEach((fo) => fo.remove());\n\n container.querySelectorAll('*').forEach((el) => {\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n if (name.startsWith('on')) {\n el.removeAttribute(attr.name);\n continue;\n }\n if (URL_ATTRIBUTES.has(name) && isScriptUrl(el, name, attr.value)) {\n el.removeAttribute(attr.name);\n }\n }\n });\n\n container.querySelectorAll('use').forEach((use) => {\n // Same-document references only; anything that is not a fragment can load an external\n // document. Normalised the same way isScriptUrl normalises, so obfuscation does not help.\n const href = (use.getAttribute('href') || use.getAttribute('xlink:href') || '')\n // eslint-disable-next-line no-control-regex\n .replace(/[\\u0000-\\u0020\\u007f]/g, '');\n if (href !== '' && !href.startsWith('#')) {\n use.remove();\n }\n });\n}\n"]}
1
+ {"version":3,"file":"svg-renderer.extension.js","sourceRoot":"","sources":["../../../src/lib/extensions/svg-renderer.extension.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oGAAoG;AACpG,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEzD,4EAA4E;AAC5E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAEtF;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,aAAqB,EAAE,KAAa;IACzE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GACf,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;QACzC,CAAC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,YAAY,CAAC;QAC5D,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;QACpC,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,OAAO,CAAC,WAAW,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAsB;IACvD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzE,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAChD,sFAAsF;QACtF,0FAA0F;QAC1F,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC7E,4CAA4C;aAC3C,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB,CAAC,SAAsB;IACvD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/**\n * Web-only DOM utilities that complement the SVG renderer marked extension.\n *\n * The framework-agnostic SVG tokenizer/renderer (`createSvgRendererExtension`,\n * `isSvgContent`) now lives in `@memberjunction/markdown-core`. This file keeps\n * the browser-only sanitization helper, which operates on a live DOM subtree\n * after the SVG has been inserted into the page.\n */\n\n/** URL schemes that can execute script or smuggle markup when used as a link or resource target. */\nconst SCRIPT_URL_SCHEME = /^(javascript|vbscript|data):/;\n\n/** Attributes whose value is a URL the browser will navigate to or load. */\nconst URL_ATTRIBUTES = new Set(['href', 'xlink:href', 'src', 'action', 'formaction']);\n\n/**\n * True when an attribute value is a script-capable URL. Whitespace and control\n * characters are removed before the scheme check because browsers ignore them\n * (a tab inside `javascript:` still navigates), and the comparison is case-insensitive.\n *\n * `data:image/...` (other than SVG, which can carry script) is allowed on `<image>`\n * so embedded raster images inside an SVG keep working.\n */\nfunction isScriptUrl(element: Element, attributeName: string, value: string): boolean {\n // eslint-disable-next-line no-control-regex\n const normalized = value.replace(/[\\u0000-\\u0020\\u007f]/g, '').toLowerCase();\n if (!SCRIPT_URL_SCHEME.test(normalized)) {\n return false;\n }\n const isImageData =\n element.tagName.toLowerCase() === 'image' &&\n (attributeName === 'href' || attributeName === 'xlink:href') &&\n normalized.startsWith('data:image/') &&\n !normalized.startsWith('data:image/svg');\n return !isImageData;\n}\n\n/**\n * Sanitize rendered SVG in place by removing the vectors that can run script.\n * Call this on the container element after rendering if you need additional security.\n *\n * Removes `<script>` and `<foreignObject>` elements, every `on*` event-handler\n * attribute (not a fixed list: any attribute whose name starts with `on`),\n * `javascript:` / `vbscript:` / `data:` URLs on link and resource attributes, and\n * `<use>` elements that reference an external document.\n *\n * @param container The DOM element containing rendered SVG\n */\nexport function SanitizeSvgContent(container: HTMLElement): void {\n container.querySelectorAll('script').forEach((script) => script.remove());\n container.querySelectorAll('foreignObject').forEach((fo) => fo.remove());\n\n container.querySelectorAll('*').forEach((el) => {\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n if (name.startsWith('on')) {\n el.removeAttribute(attr.name);\n continue;\n }\n if (URL_ATTRIBUTES.has(name) && isScriptUrl(el, name, attr.value)) {\n el.removeAttribute(attr.name);\n }\n }\n });\n\n container.querySelectorAll('use').forEach((use) => {\n // Same-document references only; anything that is not a fragment can load an external\n // document. Normalised the same way isScriptUrl normalises, so obfuscation does not help.\n const href = (use.getAttribute('href') || use.getAttribute('xlink:href') || '')\n // eslint-disable-next-line no-control-regex\n .replace(/[\\u0000-\\u0020\\u007f]/g, '');\n if (href !== '' && !href.startsWith('#')) {\n use.remove();\n }\n });\n}\n\n/** @deprecated Use {@link SanitizeSvgContent}. */\nexport function sanitizeSvgContent(container: HTMLElement): void {\n return SanitizeSvgContent(container);\n}\n"]}
@@ -32,6 +32,8 @@ export declare class MarkdownService {
32
32
  /**
33
33
  * Configure the underlying engine with the provided options.
34
34
  */
35
+ ConfigureMarked(config: MarkdownConfig): void;
36
+ /** @deprecated Use {@link ConfigureMarked}. */
35
37
  configureMarked(config: MarkdownConfig): void;
36
38
  /**
37
39
  * Parse markdown to HTML.
@@ -39,6 +41,8 @@ export declare class MarkdownService {
39
41
  * @param config Optional config overrides for this parse operation
40
42
  * @returns The rendered HTML string
41
43
  */
44
+ Parse(markdown: string, config?: Partial<MarkdownConfig>): string;
45
+ /** @deprecated Use {@link Parse}. */
42
46
  parse(markdown: string, config?: Partial<MarkdownConfig>): string;
43
47
  /**
44
48
  * Sanitize rendered HTML for binding to innerHTML while preserving layout HTML, inline
@@ -46,10 +50,14 @@ export declare class MarkdownService {
46
50
  * what is kept and removed. Where no DOM is available to sanitize with, the markup is
47
51
  * escaped and rendered as text rather than trusted.
48
52
  */
53
+ SanitizeHtml(html: string): string;
54
+ /** @deprecated Use {@link SanitizeHtml}. */
49
55
  sanitizeHtml(html: string): string;
50
56
  /**
51
57
  * Parse markdown asynchronously (useful for large documents)
52
58
  */
59
+ ParseAsync(markdown: string, config?: Partial<MarkdownConfig>): Promise<string>;
60
+ /** @deprecated Use {@link ParseAsync}. */
53
61
  parseAsync(markdown: string, config?: Partial<MarkdownConfig>): Promise<string>;
54
62
  /**
55
63
  * Resolve the effective mermaid theme.
@@ -83,6 +91,8 @@ export declare class MarkdownService {
83
91
  * Call this after the HTML has been inserted into the DOM
84
92
  * @param container The DOM element containing mermaid code blocks
85
93
  */
94
+ RenderMermaid(container: HTMLElement): Promise<boolean>;
95
+ /** @deprecated Use {@link RenderMermaid}. */
86
96
  renderMermaid(container: HTMLElement): Promise<boolean>;
87
97
  /**
88
98
  * Mark mermaid blocks as un-renderable, so the failure is VISIBLE rather than a block of
@@ -100,38 +110,54 @@ export declare class MarkdownService {
100
110
  * Call this after the HTML has been inserted into the DOM
101
111
  * @param container The DOM element containing code blocks
102
112
  */
113
+ HighlightCode(container: HTMLElement): void;
114
+ /** @deprecated Use {@link HighlightCode}. */
103
115
  highlightCode(container: HTMLElement): void;
104
116
  /**
105
117
  * Add copy buttons to code blocks
106
118
  * @param container The DOM element containing code blocks
107
119
  */
120
+ AddCodeCopyButtons(container: HTMLElement): void;
121
+ /** @deprecated Use {@link AddCodeCopyButtons}. */
108
122
  addCodeCopyButtons(container: HTMLElement): void;
109
123
  /**
110
124
  * Initialize collapsible heading functionality
111
125
  * This method is a no-op - the component handles event binding
112
126
  * @param container The DOM element containing collapsible sections
113
127
  */
128
+ InitializeCollapsibleHeadings(_container: HTMLElement): void;
129
+ /** @deprecated Use {@link InitializeCollapsibleHeadings}. */
114
130
  initializeCollapsibleHeadings(_container: HTMLElement): void;
115
131
  /**
116
132
  * Get the list of headings from the last parsed document
117
133
  * Useful for building table of contents
118
134
  */
135
+ GetHeadingList(): HeadingInfo[];
136
+ /** @deprecated Use {@link GetHeadingList}. */
119
137
  getHeadingList(): HeadingInfo[];
120
138
  /**
121
139
  * Get the current configuration
122
140
  */
141
+ GetConfig(): ResolvedMarkdownConfig;
142
+ /** @deprecated Use {@link GetConfig}. */
123
143
  getConfig(): ResolvedMarkdownConfig;
124
144
  /**
125
145
  * Reset configuration to defaults
126
146
  */
147
+ ResetConfig(): void;
148
+ /** @deprecated Use {@link ResetConfig}. */
127
149
  resetConfig(): void;
128
150
  /**
129
151
  * Check if a language is supported by Prism
130
152
  */
153
+ IsLanguageSupported(lang: string): boolean;
154
+ /** @deprecated Use {@link IsLanguageSupported}. */
131
155
  isLanguageSupported(lang: string): boolean;
132
156
  /**
133
157
  * Get list of supported Prism languages
134
158
  */
159
+ GetSupportedLanguages(): string[];
160
+ /** @deprecated Use {@link GetSupportedLanguages}. */
135
161
  getSupportedLanguages(): string[];
136
162
  /**
137
163
  * Fix HTML that was incorrectly wrapped in <pre><code> blocks by marked.
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/markdown.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,cAAc,EAEd,sBAAsB,EACtB,WAAW,EAEZ,MAAM,+BAA+B,CAAC;AAMvC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,iCAAiC,CAAC;AACzC,OAAO,iCAAiC,CAAC;AACzC,OAAO,+BAA+B,CAAC;AACvC,OAAO,iCAAiC,CAAC;AACzC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;;AAuE1C,qBAGa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAA0D;IAC/E,qGAAqG;IACrG,OAAO,CAAC,aAAa,CAAwB;IAC7C,2EAA2E;IAC3E,OAAO,CAAC,WAAW,CAAiC;IAEpD;;;OAGG;IACH,OAAO,CAAC,cAAc,CAUpB;;IAMF;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAKpD;;;;;OAKG;IACI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM;IA2BxE;;;;;OAKG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQzC;;OAEG;IACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5F;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAUpC;;;;;;;;;;;;;;OAcG;YACW,WAAW;IAgBzB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;;OAIG;IACU,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAsDpE;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;;;OAIG;IACI,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAOlD;;;OAGG;IACI,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAiDvD;;;;OAIG;IACI,6BAA6B,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAKnE;;;OAGG;IACI,cAAc,IAAI,WAAW,EAAE;IAItC;;OAEG;IACI,SAAS,IAAI,sBAAsB;IAI1C;;OAEG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjD;;OAEG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAMxC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;yCAlbpB,eAAe;6CAAf,eAAe;CA0c3B"}
1
+ {"version":3,"file":"markdown.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/markdown.service.ts"],"names":[],"mappings":"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"}