@ship-ui/core 0.22.12 → 0.22.15

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.
Files changed (72) hide show
  1. package/README.md +46 -0
  2. package/assets/mcp/components.json +579 -2
  3. package/bin/src/scanner.zig +9 -18
  4. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +17 -2
  5. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -1
  6. package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +433 -0
  7. package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -0
  8. package/fesm2022/ship-ui-core-ship-accordion.mjs +1 -0
  9. package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -1
  10. package/fesm2022/ship-ui-core-ship-alert.mjs +3 -2
  11. package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -1
  12. package/fesm2022/ship-ui-core-ship-blueprint.mjs +14 -9
  13. package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
  14. package/fesm2022/ship-ui-core-ship-checkbox.mjs +16 -14
  15. package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -1
  16. package/fesm2022/ship-ui-core-ship-color-picker.mjs +3 -1
  17. package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -1
  18. package/fesm2022/ship-ui-core-ship-datepicker.mjs +51 -29
  19. package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
  20. package/fesm2022/ship-ui-core-ship-dialog.mjs +10 -5
  21. package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -1
  22. package/fesm2022/ship-ui-core-ship-divider.mjs +4 -2
  23. package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -1
  24. package/fesm2022/ship-ui-core-ship-editor.mjs +2673 -0
  25. package/fesm2022/ship-ui-core-ship-editor.mjs.map +1 -0
  26. package/fesm2022/ship-ui-core-ship-icon.mjs +2 -2
  27. package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -1
  28. package/fesm2022/ship-ui-core-ship-list.mjs +4 -2
  29. package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -1
  30. package/fesm2022/ship-ui-core-ship-menu.mjs +8 -5
  31. package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -1
  32. package/fesm2022/ship-ui-core-ship-popover.mjs +10 -5
  33. package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
  34. package/fesm2022/ship-ui-core-ship-progress-bar.mjs +5 -1
  35. package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -1
  36. package/fesm2022/ship-ui-core-ship-radio.mjs +16 -14
  37. package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -1
  38. package/fesm2022/ship-ui-core-ship-select.mjs +9 -9
  39. package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -1
  40. package/fesm2022/ship-ui-core-ship-sidenav.mjs +2 -2
  41. package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -1
  42. package/fesm2022/ship-ui-core-ship-spinner.mjs +3 -1
  43. package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -1
  44. package/fesm2022/ship-ui-core-ship-spotlight.mjs +77 -24
  45. package/fesm2022/ship-ui-core-ship-spotlight.mjs.map +1 -1
  46. package/fesm2022/ship-ui-core-ship-table.mjs +139 -139
  47. package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
  48. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +2 -2
  49. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -1
  50. package/fesm2022/ship-ui-core-ship-toggle-card.mjs +24 -3
  51. package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -1
  52. package/fesm2022/ship-ui-core-ship-toggle.mjs +16 -14
  53. package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -1
  54. package/fesm2022/ship-ui-core-ship-tree.mjs +2 -2
  55. package/fesm2022/ship-ui-core-ship-tree.mjs.map +1 -1
  56. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +2 -2
  57. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -1
  58. package/fesm2022/ship-ui-core.mjs +36 -23
  59. package/fesm2022/ship-ui-core.mjs.map +1 -1
  60. package/package.json +33 -2
  61. package/types/ship-ui-core-sh-form-field-experimental.d.ts +2 -0
  62. package/types/ship-ui-core-ship-a11y-keybindings.d.ts +102 -0
  63. package/types/ship-ui-core-ship-blueprint.d.ts +1 -1
  64. package/types/ship-ui-core-ship-checkbox.d.ts +2 -1
  65. package/types/ship-ui-core-ship-editor.d.ts +168 -0
  66. package/types/ship-ui-core-ship-radio.d.ts +2 -1
  67. package/types/ship-ui-core-ship-spotlight.d.ts +1 -1
  68. package/types/ship-ui-core-ship-table.d.ts +2 -0
  69. package/types/ship-ui-core-ship-toggle-card.d.ts +1 -0
  70. package/types/ship-ui-core-ship-toggle.d.ts +2 -1
  71. package/types/ship-ui-core.d.ts +3 -0
  72. package/bin/ship-fg-scanner +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-editor.mjs","sources":["../../../projects/ship-ui/ship-editor/ship-editor.ts","../../../projects/ship-ui/ship-editor/ship-editor.html","../../../projects/ship-ui/ship-editor/ship-ui-core-ship-editor.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n PLATFORM_ID,\n Provider,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ShipColor, shipComponentClasses, ShipTooltip } from '@ship-ui/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipMenu } from '@ship-ui/core/ship-menu';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport interface ShipEditorCommand {\n id: string;\n label: string;\n icon: string;\n description?: string;\n action: (editor: ShipEditor) => void;\n}\n\nexport interface CaretState {\n startPath: number[];\n startOffset: number;\n endPath: number[];\n endOffset: number;\n}\n\n// JSON document schema types\nexport interface ShipEditorMark {\n type: 'bold' | 'italic' | 'underline' | 'strike' | 'link' | 'code';\n attrs?: {\n href?: string;\n target?: string;\n };\n}\n\nexport interface ShipEditorInlineNode {\n type: 'text';\n text: string;\n marks?: ShipEditorMark[];\n}\n\nexport interface ShipEditorBlock {\n type:\n | 'paragraph'\n | 'heading'\n | 'bullet-list'\n | 'ordered-list'\n | 'list-item'\n | 'code-block'\n | 'quote'\n | 'image'\n | 'hr';\n attrs?: {\n level?: number;\n src?: string;\n alt?: string;\n language?: string;\n align?: 'left' | 'center' | 'right';\n mode?: 'content' | 'theater' | 'float' | 'custom';\n size?: 'auto' | 'small' | 'medium' | 'large';\n };\n content?: ShipEditorInlineNode[] | ShipEditorBlock[];\n}\n\nexport type ShipEditorDocument = ShipEditorBlock[];\nexport type ShipEditorValue = string | ShipEditorDocument | null;\n\nexport interface ShipEditorHtmlDocument {\n execCommand(commandId: string, showUI?: boolean, value?: string): boolean;\n queryCommandState(commandId: string): boolean;\n queryCommandEnabled(commandId: string): boolean;\n}\n\n// Value Accessor Provider\nconst SHIP_EDITOR_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ShipEditor),\n multi: true,\n};\n\n@Component({\n selector: 'sh-editor',\n standalone: true,\n styleUrl: './ship-editor.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipTooltip, ShipIcon, ShipMenu],\n providers: [SHIP_EDITOR_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[class.sh-editor-readonly]': 'readonly()',\n '[class.sh-editor-focused]': 'isFocused()',\n },\n templateUrl: './ship-editor.html',\n})\nexport class ShipEditor implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit {\n #document = inject(DOCUMENT);\n #platformId = inject(PLATFORM_ID);\n #isBrowser = isPlatformBrowser(this.#platformId);\n #elementRef = inject(ElementRef);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n get #doc(): Document & ShipEditorHtmlDocument {\n return this.#document as unknown as Document & ShipEditorHtmlDocument;\n }\n\n // Elements\n editorRef = viewChild<ElementRef<HTMLDivElement>>('editorRef');\n codeEditorRef = viewChild<ElementRef<HTMLTextAreaElement>>('codeEditorRef');\n uploadBtn = viewChild<ElementRef<HTMLButtonElement>>('uploadBtn');\n imageInput = viewChild<ElementRef<HTMLInputElement>>('imageInput');\n linkInput = viewChild<ElementRef<HTMLInputElement>>('linkInput');\n\n // Configuration inputs & model signals\n value = model<string | ShipEditorDocument | null>('');\n format = input<'json' | 'html' | 'markdown'>('html');\n placeholder = input<string>('Type your content here...');\n readonly = input<boolean>(false);\n toolbar = input<boolean>(true);\n color = input<ShipColor | null>(null);\n variant = input<'base' | 'type-b' | null>('base');\n customCommands = input<ShipEditorCommand[]>([]);\n\n // Slash commands state signals\n showSlashMenu = signal<boolean>(false);\n slashSearchQuery = signal<string>('');\n slashMenuTop = signal<number>(0);\n slashMenuLeft = signal<number>(0);\n\n #lastValueWrittenFromDOM: ShipEditorValue | undefined = undefined;\n #lastEditorElement: HTMLDivElement | null = null;\n #historyStack: { html: string; caret: CaretState | null }[] = [];\n #historyIndex = -1;\n #maxHistorySize = 100;\n #isInternalDOMUpdate = false;\n #typingTimeout: any;\n\n defaultCommands = computed<ShipEditorCommand[]>(() => [\n {\n id: 'paragraph',\n label: 'Normal Text',\n icon: 'paragraph',\n description: 'Start writing with plain text',\n action: (editor) => editor.selectBlockType('p'),\n },\n {\n id: 'h1',\n label: 'Heading 1',\n icon: 'text-h-one',\n description: 'Big section heading',\n action: (editor) => editor.selectBlockType('h1'),\n },\n {\n id: 'h2',\n label: 'Heading 2',\n icon: 'text-h-two',\n description: 'Medium section heading',\n action: (editor) => editor.selectBlockType('h2'),\n },\n {\n id: 'h3',\n label: 'Heading 3',\n icon: 'text-h-three',\n description: 'Small section heading',\n action: (editor) => editor.selectBlockType('h3'),\n },\n {\n id: 'bullet-list',\n label: 'Bullet List',\n icon: 'list-bullets',\n description: 'Create a simple bullet list',\n action: (editor) => editor.formatText('insertUnorderedList'),\n },\n {\n id: 'ordered-list',\n label: 'Numbered List',\n icon: 'list-numbers',\n description: 'Create a list with numbering',\n action: (editor) => editor.formatText('insertOrderedList'),\n },\n {\n id: 'quote',\n label: 'Quote',\n icon: 'quotes',\n description: 'Capture a quote',\n action: (editor) => editor.selectBlockType('blockquote'),\n },\n {\n id: 'code-block',\n label: 'Code Block',\n icon: 'code',\n description: 'Write code snippets',\n action: (editor) => editor.selectBlockType('pre'),\n },\n {\n id: 'image',\n label: 'Image',\n icon: 'image',\n description: 'Insert an image from URL or upload',\n action: (editor) => editor.openImageModal(),\n },\n {\n id: 'link',\n label: 'Link',\n icon: 'link',\n description: 'Insert a hyperlink',\n action: (editor) => editor.openLinkModal(),\n },\n ]);\n\n slashCommands = input<boolean | string[]>(true);\n\n allCommands = computed<ShipEditorCommand[]>(() => [...this.defaultCommands(), ...this.customCommands()]);\n\n enabledCommands = computed<ShipEditorCommand[]>(() => {\n const sc = this.slashCommands();\n if (sc === false) return [];\n\n if (Array.isArray(sc)) {\n return this.allCommands().filter((cmd) => sc.includes(cmd.id));\n }\n\n return this.allCommands();\n });\n\n hasSlashCommands = computed(() => !this.readonly() && this.enabledCommands().length > 0);\n\n filteredCommands = computed<ShipEditorCommand[]>(() => {\n const query = this.slashSearchQuery().toLowerCase().trim();\n if (!query) return this.enabledCommands();\n return this.enabledCommands().filter(\n (cmd) =>\n cmd.label.toLowerCase().includes(query) ||\n (cmd.description && cmd.description.toLowerCase().includes(query)) ||\n cmd.id.toLowerCase().includes(query)\n );\n });\n\n // Toolbar group configuration inputs\n showFormats = input<boolean>(true);\n showBlocks = input<boolean>(true);\n showLists = input<boolean>(true);\n showAlignments = input<boolean>(true);\n showInsertions = input<boolean>(true);\n showHistory = input<boolean>(true);\n\n // File upload output hook & configuration\n customUpload = input<boolean>(false);\n imageUploadEnabled = input<boolean>(true);\n imageUpload = output<File>();\n\n // Image layout overlay signals\n #selectedImage = signal<HTMLImageElement | null>(null);\n imgToolbarTop = signal<number>(0);\n imgToolbarLeft = signal<number>(0);\n imgMode = signal<'content' | 'theater' | 'float' | 'custom'>('content');\n imgSize = signal<'auto' | 'small' | 'medium' | 'large'>('auto');\n\n // Local state signals\n viewMode = signal<'design' | 'code'>('design');\n isFocused = signal<boolean>(false);\n showLinkModal = signal<boolean>(false);\n showImageModal = signal<boolean>(false);\n rawCodeValue = signal<string>('');\n showBlockMenu = signal<boolean>(false);\n\n // Toolbar active states\n isBold = signal<boolean>(false);\n isItalic = signal<boolean>(false);\n isUnderline = signal<boolean>(false);\n isStrike = signal<boolean>(false);\n align = signal<'left' | 'center' | 'right'>('left');\n activeBlock = signal<string>('p');\n canUndo = signal<boolean>(false);\n canRedo = signal<boolean>(false);\n\n // Selection backup for inserting links/images when modal is open\n #savedRange: Range | null = null;\n\n // Text metrics signals\n charCount = signal<number>(0);\n wordCount = signal<number>(0);\n\n // Form accessors callbacks\n onChange: (value: ShipEditorValue) => void = () => {};\n onTouched: () => void = () => {};\n\n // Host CSS classes resolver\n hostClasses = shipComponentClasses('editor', {\n color: this.color,\n variant: this.variant,\n readonly: this.readonly,\n });\n\n // Track outer changes\n #isWriting = false;\n #lastFormat: 'json' | 'html' | 'markdown' | null = null;\n\n constructor() {\n // Auto-focus link dialog input when opened\n effect(() => {\n if (this.showLinkModal()) {\n const linkInput = this.linkInput();\n if (linkInput) {\n linkInput.nativeElement.focus();\n }\n }\n });\n\n // Auto-focus image dialog elements when opened based on configuration\n effect(() => {\n if (this.showImageModal()) {\n const uploadBtn = this.uploadBtn();\n const imageInput = this.imageInput();\n\n if (this.imageUploadEnabled()) {\n if (uploadBtn) {\n uploadBtn.nativeElement.focus();\n }\n } else {\n if (imageInput) {\n imageInput.nativeElement.focus();\n }\n }\n }\n });\n\n // Keep DOM inside editor in sync with value model changes reactively (when written from parent)\n effect(() => {\n const val = this.value();\n const editor = this.editorRef()?.nativeElement;\n\n // If the DOM element itself has changed (re-created during HMR), we must reset\n // lastValueWrittenFromDOM to force content initialization onto the new element.\n if (editor && editor !== this.#lastEditorElement) {\n this.#lastEditorElement = editor;\n this.#lastValueWrittenFromDOM = undefined;\n }\n\n if (val === this.#lastValueWrittenFromDOM) return;\n this.#syncModelToDOM(val);\n });\n\n // React to format changes by converting the model value to the new format reactively\n effect(() => {\n const fmt = this.format();\n const prev = this.#lastFormat;\n this.#lastFormat = fmt;\n\n if (prev !== null && prev !== fmt) {\n const val = this.value();\n\n // 1. Convert current value in prev format to HTML\n let html = '';\n if (prev === 'html' && typeof val === 'string') {\n html = val;\n } else if (prev === 'markdown' && typeof val === 'string') {\n html = this.#markdownToHTML(val);\n } else if (prev === 'json' && Array.isArray(val)) {\n html = this.#jsonToHTML(val);\n }\n\n // 2. Convert HTML to the new format\n let newValue: ShipEditorValue = '';\n if (fmt === 'html') {\n newValue = html;\n } else if (fmt === 'markdown') {\n newValue = this.#htmlToMarkdown(html);\n } else if (fmt === 'json') {\n newValue = this.#htmlToJSON(html);\n }\n\n // 3. Update the model and DOM\n this.#isWriting = true;\n this.value.set(newValue);\n this.#lastValueWrittenFromDOM = newValue;\n this.onChange(newValue);\n\n if (fmt === 'markdown' && typeof newValue === 'string') {\n this.rawCodeValue.set(newValue);\n } else if (fmt === 'json' && Array.isArray(newValue)) {\n this.rawCodeValue.set(JSON.stringify(newValue, null, 2));\n } else {\n this.rawCodeValue.set(html);\n }\n\n const editor = this.editorRef()?.nativeElement;\n if (editor) {\n const normalizedHTML = html === '<p><br></p>' ? '' : html;\n const currentNormalized = editor.innerHTML === '<p><br></p>' ? '' : editor.innerHTML;\n if (normalizedHTML !== currentNormalized) {\n editor.innerHTML = html;\n }\n this.#ensureImagesFocusable();\n }\n\n this.#isWriting = false;\n }\n });\n\n // Recalculate metrics whenever raw content updates\n effect(() => {\n const val = this.value();\n const fmt = this.format();\n let html = '';\n\n if (!val) {\n html = '';\n } else if (typeof val === 'string') {\n if (fmt === 'markdown') {\n html = this.#markdownToHTML(val);\n } else {\n html = val;\n }\n } else if (Array.isArray(val)) {\n html = this.#jsonToHTML(val);\n }\n\n const temp = this.#document.createElement('div');\n temp.innerHTML = html;\n const text = (temp.textContent || '').replace(/\\u00a0/g, ' ').trim();\n\n this.charCount.set(text.length);\n this.wordCount.set(text === '' ? 0 : text.split(/\\s+/).filter((w) => w.length > 0).length);\n });\n\n // Reinitialize toolbar tabindexes when visibility inputs change\n effect(() => {\n this.showFormats();\n this.showBlocks();\n this.showLists();\n this.showAlignments();\n this.showInsertions();\n this.showHistory();\n this.toolbar();\n this.readonly();\n this.#initializeToolbarTabindexes();\n });\n }\n\n ngOnInit() {\n // Empty hook\n }\n\n ngAfterViewInit() {\n this.#syncModelToDOM(this.value());\n }\n\n ngOnDestroy() {\n this.#savedRange = null;\n if (this.#typingTimeout) {\n clearTimeout(this.#typingTimeout);\n }\n }\n\n // --- CONTROL VALUE ACCESSOR ---\n\n writeValue(obj: ShipEditorValue): void {\n this.#isWriting = true;\n this.value.set(obj);\n this.#syncModelToDOM(obj);\n this.#isWriting = false;\n }\n\n registerOnChange(fn: (value: ShipEditorValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // In Angular forms, this matches readonly\n }\n\n // --- MODEL TO DOM SYNCING ---\n\n #syncModelToDOM(val: ShipEditorValue) {\n let html = '';\n\n if (val === null || val === undefined || val === '') {\n html = '<p><br></p>';\n } else if (typeof val === 'string') {\n if (this.format() === 'markdown') {\n html = this.#markdownToHTML(val);\n } else {\n html = val;\n }\n } else if (Array.isArray(val)) {\n html = this.#jsonToHTML(val);\n } else {\n html = '<p><br></p>';\n }\n\n const isNewValue = val !== this.#lastValueWrittenFromDOM;\n\n // Set code editor value\n if (this.format() === 'markdown' && typeof val === 'string') {\n this.rawCodeValue.set(val);\n } else if (this.format() === 'json' && Array.isArray(val)) {\n this.rawCodeValue.set(JSON.stringify(val, null, 2));\n } else {\n this.rawCodeValue.set(html);\n }\n\n // Update WYSIWYG editor surface if in design mode\n const editor = this.editorRef()?.nativeElement;\n if (editor) {\n this.#lastValueWrittenFromDOM = val;\n // Avoid resetting selection if html content is equivalent\n const normalizedHTML = html === '<p><br></p>' ? '' : html;\n const currentNormalized = editor.innerHTML === '<p><br></p>' ? '' : editor.innerHTML;\n if (normalizedHTML !== currentNormalized) {\n editor.innerHTML = html;\n }\n this.#ensureImagesFocusable();\n\n if (isNewValue) {\n this.#historyStack = [];\n this.#historyIndex = -1;\n }\n if (this.#historyStack.length === 0) {\n this.#saveHistory();\n }\n }\n this.#updateHistoryStates();\n }\n\n // --- DOM TO MODEL SYNCING ---\n\n #updateValueFromDOM() {\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n let html = editor.innerHTML;\n // Normalize empty editor contents to empty string or basic paragraph\n if (html === '' || html === '<br>' || html === '<p><br></p>') {\n html = '';\n }\n\n this.#isWriting = true;\n const currentFormat = this.format();\n\n if (currentFormat === 'html') {\n this.value.set(html);\n this.#lastValueWrittenFromDOM = html;\n this.onChange(html);\n } else if (currentFormat === 'markdown') {\n const md = this.#htmlToMarkdown(html);\n this.value.set(md);\n this.#lastValueWrittenFromDOM = md;\n this.onChange(md);\n this.rawCodeValue.set(md);\n } else if (currentFormat === 'json') {\n const json = this.#htmlToJSON(html);\n this.value.set(json);\n this.#lastValueWrittenFromDOM = json;\n this.onChange(json);\n this.rawCodeValue.set(JSON.stringify(json, null, 2));\n }\n\n this.#isWriting = false;\n }\n\n // --- COMPONENT HANDLERS ---\n\n protected onDOMInput() {\n this.#ensureImagesFocusable();\n this.#updateValueFromDOM();\n\n // Debounce history save on typing (500ms) or save immediately on word/sentence boundaries\n const selection = window.getSelection();\n let saveImmediately = false;\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const textNode = range.startContainer;\n if (textNode.nodeType === Node.TEXT_NODE) {\n const char = textNode.textContent?.charAt(range.startOffset - 1);\n if (char && /[\\s.,!?;/]/.test(char)) {\n saveImmediately = true;\n }\n }\n }\n\n if (this.#typingTimeout) {\n clearTimeout(this.#typingTimeout);\n }\n\n if (saveImmediately) {\n this.#saveHistory();\n } else {\n this.#typingTimeout = setTimeout(() => {\n this.#saveHistory();\n }, 500);\n }\n }\n\n protected onDOMBlur() {\n this.isFocused.set(false);\n this.onTouched();\n }\n\n protected onCodeInput(event: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n this.rawCodeValue.set(textarea.value);\n }\n\n protected onCodeBlur(event: Event) {\n this.isFocused.set(false);\n const textarea = event.target as HTMLTextAreaElement;\n const codeVal = textarea.value;\n\n this.#isWriting = true;\n const currentFormat = this.format();\n\n if (currentFormat === 'html') {\n this.value.set(codeVal);\n this.onChange(codeVal);\n } else if (currentFormat === 'markdown') {\n this.value.set(codeVal);\n this.onChange(codeVal);\n } else if (currentFormat === 'json') {\n try {\n const parsed = JSON.parse(codeVal);\n this.value.set(parsed);\n this.onChange(parsed);\n } catch (e) {\n // invalid JSON, do not update model, let user fix it\n }\n }\n\n this.#isWriting = false;\n this.onTouched();\n }\n\n // --- SELECTION STATE & COMMANDS ---\n\n formatText(command: string, value: string = '') {\n if (this.readonly()) return;\n if (this.viewMode() === 'code') return;\n\n const cmd = command.toLowerCase();\n\n if (cmd === 'bold') {\n this.applyInlineStyle('strong');\n } else if (cmd === 'italic') {\n this.applyInlineStyle('em');\n } else if (cmd === 'underline') {\n this.applyInlineStyle('u');\n } else if (cmd === 'strikethrough') {\n this.applyInlineStyle('s');\n } else if (cmd === 'undo') {\n this.undo();\n } else if (cmd === 'redo') {\n this.redo();\n } else if (cmd === 'insertunorderedlist') {\n this.toggleList('ul');\n } else if (cmd === 'insertorderedlist') {\n this.toggleList('ol');\n } else if (cmd === 'inserthorizontalrule') {\n this.insertHorizontalRule();\n } else if (cmd === 'removeformat') {\n this.removeFormat();\n } else if (cmd === 'justifyleft') {\n this.setAlign('left');\n } else if (cmd === 'justifycenter') {\n this.setAlign('center');\n } else if (cmd === 'justifyright') {\n this.setAlign('right');\n } else if (cmd === 'formatblock') {\n this.setBlockType(value);\n }\n }\n\n applyInlineStyle(tag: string) {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n if (!editor?.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n const textNodes = getTextNodesInRange(range);\n if (textNodes.length === 0) {\n this.#isInternalDOMUpdate = false;\n return;\n }\n\n const tagName = tag.toUpperCase();\n const allWrapped = textNodes.every((node) => isNodeWrappedInTag(node, tag, editor));\n\n let finalStartNode: Node = range.startContainer;\n let finalStartOffset = range.startOffset;\n let finalEndNode: Node = range.endContainer;\n let finalEndOffset = range.endOffset;\n\n if (allWrapped) {\n const elementsToUnwrap = new Set<HTMLElement>();\n for (const node of textNodes) {\n let current: Node | null = node.parentNode;\n while (current && current !== editor) {\n if (current.nodeType === Node.ELEMENT_NODE && (current as HTMLElement).tagName === tagName) {\n elementsToUnwrap.add(current as HTMLElement);\n }\n current = current.parentNode;\n }\n }\n\n for (const el of elementsToUnwrap) {\n const parent = el.parentNode;\n if (parent) {\n while (el.firstChild) {\n parent.insertBefore(el.firstChild, el);\n }\n parent.removeChild(el);\n }\n }\n } else {\n for (const node of textNodes) {\n const isStart = node === range.startContainer;\n const isEnd = node === range.endContainer;\n\n let start = isStart ? range.startOffset : 0;\n let end = isEnd ? range.endOffset : node.textContent!.length;\n\n if (start >= end) continue;\n\n let targetNode = node;\n\n if (isStart && start > 0) {\n targetNode = node.splitText(start);\n if (isEnd) {\n finalEndNode = targetNode;\n finalEndOffset = end - start;\n }\n finalStartNode = targetNode;\n finalStartOffset = 0;\n\n end = end - start;\n start = 0;\n }\n\n if (isEnd && finalEndOffset < targetNode.textContent!.length) {\n targetNode.splitText(finalEndOffset);\n finalEndNode = targetNode;\n finalEndOffset = targetNode.textContent!.length;\n end = targetNode.textContent!.length;\n }\n\n if (!isNodeWrappedInTag(targetNode, tag, editor)) {\n const element = node.ownerDocument!.createElement(tag);\n targetNode.parentNode?.insertBefore(element, targetNode);\n element.appendChild(targetNode);\n }\n }\n }\n\n const newRange = this.#document.createRange();\n try {\n newRange.setStart(finalStartNode, finalStartOffset);\n newRange.setEnd(finalEndNode, finalEndOffset);\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {}\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n toggleLink(url: string) {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n if (!editor?.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n let existingLink: HTMLAnchorElement | null = null;\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).tagName === 'A') {\n existingLink = node as HTMLAnchorElement;\n break;\n }\n node = node.parentNode;\n }\n\n if (existingLink) {\n if (!url) {\n const parent = existingLink.parentNode;\n if (parent) {\n while (existingLink.firstChild) {\n parent.insertBefore(existingLink.firstChild, existingLink);\n }\n parent.removeChild(existingLink);\n }\n } else {\n existingLink.href = url;\n }\n } else if (url && !selection.isCollapsed) {\n const link = this.#document.createElement('a');\n link.href = url;\n link.target = '_blank';\n try {\n link.appendChild(range.extractContents());\n range.insertNode(link);\n\n const newRange = this.#document.createRange();\n newRange.selectNodeContents(link);\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {\n // Fallback\n }\n }\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n setBlockType(tag: string) {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n if (!editor?.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n let blockNode: HTMLElement | null = null;\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.parentElement === editor) {\n blockNode = el;\n break;\n }\n }\n node = node.parentNode;\n }\n\n if (!blockNode) {\n node = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n if (['p', 'h1', 'h2', 'h3', 'blockquote', 'pre', 'ul', 'ol', 'li'].includes(tagName)) {\n blockNode = el;\n break;\n }\n }\n node = node.parentNode;\n }\n }\n\n if (blockNode) {\n const newBlock = this.#document.createElement(tag);\n newBlock.innerHTML = blockNode.innerHTML;\n if (blockNode.className) {\n newBlock.className = blockNode.className;\n }\n\n if (tag === 'pre') {\n newBlock.innerHTML = `<code>${blockNode.innerText || blockNode.innerHTML}</code>`;\n } else if (blockNode.tagName.toLowerCase() === 'pre' && tag !== 'pre') {\n const codeEl = blockNode.querySelector('code');\n if (codeEl) {\n newBlock.innerHTML = codeEl.innerHTML;\n }\n }\n\n // Ensure empty block has placeholder <br> so caret is visible and focusable\n if (!newBlock.innerHTML || newBlock.innerHTML === '<br>') {\n newBlock.innerHTML = '<br>';\n }\n\n const parent = blockNode.parentNode;\n if (parent) {\n parent.replaceChild(newBlock, blockNode);\n\n try {\n const newRange = this.#document.createRange();\n if (newBlock.textContent?.trim() === '') {\n newRange.setStart(newBlock, 0);\n newRange.collapse(true);\n } else {\n newRange.selectNodeContents(newBlock);\n newRange.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {}\n }\n } else {\n const newBlock = this.#document.createElement(tag);\n newBlock.appendChild(range.extractContents());\n range.insertNode(newBlock);\n }\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n toggleList(listType: 'ul' | 'ol') {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n if (!editor?.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n let listNode: HTMLElement | null = null;\n let listTagName = '';\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tag = el.tagName.toLowerCase();\n if (tag === 'ul' || tag === 'ol') {\n listNode = el;\n listTagName = tag;\n break;\n }\n }\n node = node.parentNode;\n }\n\n if (listNode) {\n if (listTagName === listType) {\n const parent = listNode.parentNode;\n if (parent) {\n const items = Array.from(listNode.querySelectorAll('li'));\n let lastP: HTMLElement | null = null;\n items.forEach((item) => {\n const p = this.#document.createElement('p');\n p.innerHTML = item.innerHTML;\n if (!p.innerHTML || p.innerHTML === '<br>') {\n p.innerHTML = '<br>';\n }\n parent.insertBefore(p, listNode);\n lastP = p;\n });\n parent.removeChild(listNode);\n\n if (lastP) {\n try {\n const newRange = this.#document.createRange();\n if ((lastP as HTMLElement).textContent?.trim() === '') {\n newRange.setStart(lastP, 0);\n newRange.collapse(true);\n } else {\n newRange.selectNodeContents(lastP);\n newRange.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {}\n }\n }\n } else {\n const newList = this.#document.createElement(listType);\n newList.innerHTML = listNode.innerHTML;\n const parent = listNode.parentNode;\n if (parent) {\n parent.replaceChild(newList, listNode);\n\n const firstItem = newList.querySelector('li');\n if (firstItem) {\n try {\n const newRange = this.#document.createRange();\n if (firstItem.textContent?.trim() === '') {\n newRange.setStart(firstItem, 0);\n newRange.collapse(true);\n } else {\n newRange.selectNodeContents(firstItem);\n newRange.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {}\n }\n }\n }\n } else {\n let blockNode: HTMLElement | null = null;\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (el.parentElement === editor) {\n blockNode = el;\n break;\n }\n }\n node = node.parentNode;\n }\n\n if (blockNode) {\n const newList = this.#document.createElement(listType);\n const item = this.#document.createElement('li');\n item.innerHTML = blockNode.innerHTML;\n if (!item.innerHTML || item.innerHTML === '<br>') {\n item.innerHTML = '<br>';\n }\n newList.appendChild(item);\n\n const parent = blockNode.parentNode;\n if (parent) {\n parent.replaceChild(newList, blockNode);\n\n try {\n const newRange = this.#document.createRange();\n if (item.textContent?.trim() === '') {\n newRange.setStart(item, 0);\n newRange.collapse(true);\n } else {\n newRange.selectNodeContents(item);\n newRange.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(newRange);\n } catch (e) {}\n }\n }\n }\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n insertHorizontalRule() {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n const hr = this.#document.createElement('hr');\n range.deleteContents();\n range.insertNode(hr);\n\n const p = this.#document.createElement('p');\n p.innerHTML = '<br>';\n if (hr.nextSibling) {\n hr.parentNode?.insertBefore(p, hr.nextSibling);\n } else {\n hr.parentNode?.appendChild(p);\n }\n\n const newRange = this.#document.createRange();\n newRange.setStart(p, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n setAlign(direction: 'left' | 'center' | 'right') {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n let blockNode: HTMLElement | null = null;\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== editor) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tag = el.tagName.toLowerCase();\n if (['p', 'h1', 'h2', 'h3', 'blockquote', 'pre', 'li'].includes(tag)) {\n blockNode = el;\n break;\n }\n }\n node = node.parentNode;\n }\n\n if (blockNode) {\n blockNode.style.textAlign = direction;\n }\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n removeFormat() {\n if (this.readonly() || this.viewMode() === 'code') return;\n this.#restoreSelection();\n\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.commonAncestorContainer)) return;\n\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n const fragment = range.extractContents();\n const stripTags = ['strong', 'em', 'u', 's', 'a', 'b', 'i', 'span'];\n const container = this.#document.createElement('div');\n container.appendChild(fragment);\n\n stripTags.forEach((tag) => {\n const els = Array.from(container.querySelectorAll(tag));\n els.forEach((el) => {\n const parent = el.parentNode;\n if (parent) {\n while (el.firstChild) {\n parent.insertBefore(el.firstChild, el);\n }\n parent.removeChild(el);\n }\n });\n });\n\n range.insertNode(container.firstChild || container);\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n\n undo() {\n if (this.#historyIndex <= 0) return;\n this.#historyIndex--;\n this.#restoreHistoryState(this.#historyStack[this.#historyIndex]);\n }\n\n redo() {\n if (this.#historyIndex >= this.#historyStack.length - 1) return;\n this.#historyIndex++;\n this.#restoreHistoryState(this.#historyStack[this.#historyIndex]);\n }\n\n #saveHistory() {\n if (!this.#isBrowser) return;\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n const html = editor.innerHTML;\n if (this.#historyIndex >= 0 && this.#historyStack[this.#historyIndex].html === html) {\n return;\n }\n\n let caret: CaretState | null = null;\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n if (editor.contains(range.commonAncestorContainer)) {\n caret = {\n startPath: getNodePath(editor, range.startContainer),\n startOffset: range.startOffset,\n endPath: getNodePath(editor, range.endContainer),\n endOffset: range.endOffset,\n };\n }\n }\n\n if (this.#historyIndex < this.#historyStack.length - 1) {\n this.#historyStack = this.#historyStack.slice(0, this.#historyIndex + 1);\n }\n\n this.#historyStack.push({ html, caret });\n if (this.#historyStack.length > this.#maxHistorySize) {\n this.#historyStack.shift();\n } else {\n this.#historyIndex++;\n }\n\n this.#updateHistoryStates();\n }\n\n #restoreHistoryState(state: { html: string; caret: CaretState | null }) {\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n this.#isWriting = true;\n editor.innerHTML = state.html;\n this.#ensureImagesFocusable();\n this.#updateValueFromDOM();\n this.#isWriting = false;\n\n if (state.caret) {\n const startNode = getNodeByPath(editor, state.caret.startPath);\n const endNode = getNodeByPath(editor, state.caret.endPath);\n const selection = window.getSelection();\n if (selection) {\n try {\n const range = this.#document.createRange();\n range.setStart(startNode, state.caret.startOffset);\n range.setEnd(endNode, state.caret.endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n } catch (e) {\n // Fallback\n }\n }\n }\n this.#updateHistoryStates();\n }\n\n protected toggleViewMode() {\n const nextMode = this.viewMode() === 'design' ? 'code' : 'design';\n this.viewMode.set(nextMode);\n\n // Give time to render then sync and focus\n setTimeout(() => {\n if (nextMode === 'design') {\n const editor = this.editorRef()?.nativeElement;\n if (editor) {\n this.#syncModelToDOM(this.value());\n editor.focus();\n }\n } else {\n const codeEditor = this.codeEditorRef()?.nativeElement;\n if (codeEditor) {\n codeEditor.focus();\n }\n }\n this.#updateHistoryStates();\n });\n }\n\n #updateHistoryStates() {\n if (!this.#isBrowser || this.viewMode() === 'code') {\n this.canUndo.set(false);\n this.canRedo.set(false);\n return;\n }\n this.canUndo.set(this.#historyIndex > 0);\n this.canRedo.set(this.#historyIndex < this.#historyStack.length - 1);\n }\n\n #restoreSelection() {\n if (!this.#isBrowser) return;\n const selection = window.getSelection();\n const editor = this.editorRef()?.nativeElement;\n if (selection && this.#savedRange && editor) {\n let isInside = false;\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n if (editor.contains(range.commonAncestorContainer)) {\n isInside = true;\n }\n }\n if (!isInside) {\n editor.focus();\n try {\n selection.removeAllRanges();\n selection.addRange(this.#savedRange);\n } catch (e) {}\n }\n }\n }\n\n @HostListener('document:selectionchange')\n protected onSelectionChange() {\n if (!this.#isBrowser) return;\n this.#updateHistoryStates();\n if (this.readonly() || this.viewMode() === 'code') return;\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const editorEl = this.editorRef()?.nativeElement;\n if (!editorEl || !editorEl.contains(range.commonAncestorContainer)) {\n return;\n }\n\n // Save selection range for modal operations\n this.#savedRange = range.cloneRange();\n\n // DOM tree traversal for formatting active states\n let current: Node | null = range.commonAncestorContainer;\n let bold = false;\n let italic = false;\n let underline = false;\n let strike = false;\n let textAlign: 'left' | 'center' | 'right' = 'left';\n\n while (current && current !== editorEl) {\n if (current.nodeType === Node.ELEMENT_NODE) {\n const el = current as HTMLElement;\n const tag = el.tagName.toLowerCase();\n\n if (tag === 'strong' || tag === 'b') bold = true;\n if (tag === 'em' || tag === 'i') italic = true;\n if (tag === 'u') underline = true;\n if (tag === 's' || tag === 'del') strike = true;\n\n if (['p', 'h1', 'h2', 'h3', 'blockquote', 'pre', 'li'].includes(tag)) {\n const alignValue = el.style.textAlign || window.getComputedStyle(el).textAlign;\n if (alignValue === 'center') textAlign = 'center';\n else if (alignValue === 'right') textAlign = 'right';\n else textAlign = 'left';\n }\n }\n current = current.parentNode;\n }\n\n this.isBold.set(bold);\n this.isItalic.set(italic);\n this.isUnderline.set(underline);\n this.isStrike.set(strike);\n this.align.set(textAlign);\n\n // Active block traverse\n let node: Node | null = selection.anchorNode;\n let blockType = 'p';\n while (node && node !== editorEl) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const tag = (node as HTMLElement).tagName.toLowerCase();\n if (['h1', 'h2', 'h3', 'blockquote', 'pre', 'ul', 'ol', 'li'].includes(tag)) {\n blockType = tag;\n break;\n }\n }\n node = node.parentNode;\n }\n this.activeBlock.set(blockType);\n\n // Track active block class for paragraph placeholders\n const activeBlocks = editorEl.querySelectorAll('.sh-editor-active-block');\n activeBlocks.forEach((b) => b.classList.remove('sh-editor-active-block'));\n\n let activeNode: HTMLElement | null = selection.anchorNode as HTMLElement;\n if (activeNode) {\n if (activeNode.nodeType === Node.TEXT_NODE) {\n activeNode = activeNode.parentElement;\n }\n while (activeNode && activeNode !== editorEl) {\n if (activeNode.parentElement === editorEl) {\n activeNode.classList.add('sh-editor-active-block');\n break;\n }\n activeNode = activeNode.parentElement;\n }\n }\n }\n\n // --- MODALS (LINK & IMAGE) ---\n\n openLinkModal() {\n // Back up current selection before focus shifts to modal\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n this.#savedRange = selection.getRangeAt(0).cloneRange();\n }\n this.showLinkModal.set(true);\n }\n\n protected applyLink(url: string) {\n this.showLinkModal.set(false);\n if (!url) return;\n\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n // Restore selection range\n const selection = window.getSelection();\n if (selection && this.#savedRange) {\n selection.removeAllRanges();\n selection.addRange(this.#savedRange);\n }\n\n editor.focus();\n this.toggleLink(url);\n }\n\n openImageModal() {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n this.#savedRange = selection.getRangeAt(0).cloneRange();\n }\n this.showImageModal.set(true);\n }\n\n protected applyImage(url: string) {\n this.showImageModal.set(false);\n this.insertImage(url);\n }\n\n // --- IMAGE FILE HANDLING & LAYOUT OVERLAYS ---\n\n selectedImage = this.#selectedImage.asReadonly();\n\n @HostListener('focusin', ['$event'])\n onComponentFocusIn(event: FocusEvent) {\n if (!this.#isBrowser) return;\n const target = event.target as HTMLElement;\n if (target && target.tagName === 'IMG') {\n this.#selectedImage.set(target as HTMLImageElement);\n const className = target.className || '';\n if (className.includes('sh-editor-img-theater')) {\n this.imgMode.set('theater');\n } else if (className.includes('sh-editor-img-float')) {\n this.imgMode.set('float');\n } else if (className.includes('sh-editor-img-custom') || className.includes('sh-editor-img-auto')) {\n this.imgMode.set('custom');\n } else {\n this.imgMode.set('content');\n }\n\n if (className.includes('sh-editor-img-size-small')) {\n this.imgSize.set('small');\n } else if (className.includes('sh-editor-img-size-medium')) {\n this.imgSize.set('medium');\n } else if (className.includes('sh-editor-img-size-large')) {\n this.imgSize.set('large');\n } else {\n this.imgSize.set('auto');\n }\n this.updateImgToolbarPosition();\n }\n }\n\n @HostListener('click', ['$event'])\n onComponentClick(event: MouseEvent) {\n if (!this.#isBrowser) return;\n const target = event.target as HTMLElement;\n\n if (target && !target.closest('.sh-editor-dropdown')) {\n this.showBlockMenu.set(false);\n }\n\n if (target && target.tagName === 'IMG') {\n (target as HTMLElement).focus();\n const selection = window.getSelection();\n if (selection) {\n const range = this.#document.createRange();\n range.selectNode(target);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n this.#selectedImage.set(target as HTMLImageElement);\n const className = target.className || '';\n if (className.includes('sh-editor-img-theater')) {\n this.imgMode.set('theater');\n } else if (className.includes('sh-editor-img-float')) {\n this.imgMode.set('float');\n } else if (className.includes('sh-editor-img-custom') || className.includes('sh-editor-img-auto')) {\n this.imgMode.set('custom');\n } else {\n this.imgMode.set('content');\n }\n\n if (className.includes('sh-editor-img-size-small')) {\n this.imgSize.set('small');\n } else if (className.includes('sh-editor-img-size-medium')) {\n this.imgSize.set('medium');\n } else if (className.includes('sh-editor-img-size-large')) {\n this.imgSize.set('large');\n } else {\n this.imgSize.set('auto');\n }\n this.updateImgToolbarPosition();\n } else {\n // If clicking inside image toolbar itself, don't dismiss\n if (target && target.closest('.sh-editor-img-toolbar')) {\n return;\n }\n this.#selectedImage.set(null);\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.#isBrowser) return;\n if (this.readonly()) return;\n\n if (this.viewMode() === 'design') {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const anchorNode = selection.anchorNode;\n if (anchorNode) {\n const editorEl = this.editorRef()?.nativeElement;\n if (editorEl) {\n let currentBlock: HTMLElement | null = null;\n if (anchorNode.nodeType === Node.TEXT_NODE) {\n currentBlock = anchorNode.parentElement;\n } else {\n currentBlock = anchorNode as HTMLElement;\n }\n\n // Traverse up to find blockquote, pre, or li\n let blockquoteEl: HTMLElement | null = null;\n let preEl: HTMLElement | null = null;\n let liEl: HTMLElement | null = null;\n\n let node: HTMLElement | null = currentBlock;\n while (node && node !== editorEl) {\n const tagName = node.tagName.toLowerCase();\n if (tagName === 'blockquote') {\n blockquoteEl = node;\n } else if (tagName === 'pre') {\n preEl = node;\n } else if (tagName === 'li') {\n liEl = node;\n }\n node = node.parentElement;\n }\n\n // 1. Exit block with Ctrl+Enter or Cmd+Enter\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n const targetBlock = preEl || blockquoteEl || liEl;\n if (targetBlock) {\n event.preventDefault();\n const p = this.#document.createElement('p');\n p.innerHTML = '<br>';\n\n // If we are in a list item, we should insert the paragraph after the parent list (ul/ol)\n let insertAfterNode: HTMLElement = targetBlock;\n if (liEl) {\n const listParent = liEl.closest('ul, ol') as HTMLElement;\n if (listParent && editorEl.contains(listParent)) {\n insertAfterNode = listParent;\n }\n }\n\n insertAfterNode.parentNode?.insertBefore(p, insertAfterNode.nextSibling);\n\n // Focus the new paragraph\n const newRange = this.#document.createRange();\n newRange.setStart(p, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n p.focus();\n\n this.#updateValueFromDOM();\n return;\n }\n }\n\n // 2. Double enter on empty blockquote or list item\n if (event.key === 'Enter' && !event.shiftKey && !event.ctrlKey && !event.metaKey) {\n const targetBlock = blockquoteEl || liEl;\n if (targetBlock) {\n const text = targetBlock.textContent?.trim() || '';\n if (text === '') {\n event.preventDefault();\n\n const p = this.#document.createElement('p');\n p.innerHTML = '<br>';\n\n if (liEl) {\n const listParent = liEl.closest('ul, ol') as HTMLElement;\n if (listParent) {\n if (listParent.children.length <= 1) {\n listParent.parentNode?.replaceChild(p, listParent);\n } else {\n listParent.parentNode?.insertBefore(p, listParent.nextSibling);\n liEl.remove();\n }\n }\n } else {\n targetBlock.parentNode?.replaceChild(p, targetBlock);\n }\n\n // Focus new paragraph\n const newRange = this.#document.createRange();\n newRange.setStart(p, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n p.focus();\n\n this.#updateValueFromDOM();\n return;\n }\n }\n }\n\n // 3. Enter inside pre (code block) to insert newline instead of splitting tag\n if (event.key === 'Enter' && !event.ctrlKey && !event.metaKey && !event.shiftKey) {\n if (preEl) {\n event.preventDefault();\n // Insert a newline character at current caret position\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const textNode = this.#document.createTextNode('\\n');\n range.insertNode(textNode);\n\n // Move caret after the new line character\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n selection.removeAllRanges();\n selection.addRange(range);\n\n this.#updateValueFromDOM();\n }\n return;\n }\n }\n }\n }\n }\n }\n\n const img = this.#selectedImage();\n if (img && (event.key === 'Backspace' || event.key === 'Delete')) {\n const activeEl = this.#document.activeElement;\n if (\n activeEl === img ||\n window.getSelection()?.anchorNode === img ||\n window.getSelection()?.focusNode === img ||\n window.getSelection()?.anchorNode?.contains(img)\n ) {\n event.preventDefault();\n this.deleteImage();\n }\n }\n }\n\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (!this.#isBrowser) return;\n if (this.readonly() || this.viewMode() === 'code') return;\n\n const sc = this.slashCommands();\n if (sc === false || (Array.isArray(sc) && sc.length === 0)) {\n this.showSlashMenu.set(false);\n return;\n }\n\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) {\n this.showSlashMenu.set(false);\n return;\n }\n\n const range = selection.getRangeAt(0);\n const textNode = range.startContainer;\n\n const editorEl = this.editorRef()?.nativeElement;\n if (!editorEl || !editorEl.contains(textNode)) {\n this.showSlashMenu.set(false);\n return;\n }\n\n if (textNode.nodeType === Node.TEXT_NODE) {\n const text = textNode.textContent || '';\n const offset = range.startOffset;\n const textBeforeCaret = text.substring(0, offset);\n const match = textBeforeCaret.match(/(?:^|\\s)\\/([a-zA-Z0-9_-]*)$/);\n\n if (match) {\n this.showSlashMenu.set(true);\n this.slashSearchQuery.set(match[1]);\n\n this.#updateSlashMenuPosition(range);\n return;\n }\n }\n\n this.showSlashMenu.set(false);\n }\n\n executeCommand(cmd: ShipEditorCommand) {\n this.#restoreSelection();\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const textNode = range.startContainer;\n if (textNode.nodeType === Node.TEXT_NODE) {\n const text = textNode.textContent || '';\n const offset = range.startOffset;\n const textBeforeCaret = text.substring(0, offset);\n const match = textBeforeCaret.match(/(?:^|\\s)\\/([a-zA-Z0-9_-]*)$/);\n if (match) {\n const slashIndex = textBeforeCaret.lastIndexOf('/');\n if (slashIndex !== -1) {\n range.setStart(textNode, slashIndex);\n range.setEnd(textNode, offset);\n selection.removeAllRanges();\n selection.addRange(range);\n range.deleteContents();\n }\n }\n }\n }\n\n this.showSlashMenu.set(false);\n cmd.action(this);\n }\n\n #updateSlashMenuPosition(range: Range) {\n const editorEl = this.editorRef()?.nativeElement;\n if (!editorEl) return;\n\n const editorRect = editorEl.getBoundingClientRect();\n const rect = range.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n if (rect.top === 0 && rect.left === 0) {\n let parentNode = range.startContainer as HTMLElement;\n if (parentNode.nodeType === Node.TEXT_NODE) {\n parentNode = parentNode.parentElement as HTMLElement;\n }\n const parentRect = parentNode.getBoundingClientRect();\n top = parentRect.bottom - editorRect.top + editorEl.scrollTop + 4;\n left = parentRect.left - editorRect.left;\n } else {\n top = rect.bottom - editorRect.top + editorEl.scrollTop + 4;\n left = rect.left - editorRect.left;\n }\n\n this.slashMenuTop.set(top);\n this.slashMenuLeft.set(left);\n }\n\n getBlockLabel(): string {\n const block = this.activeBlock();\n if (block === 'h1') return 'Heading 1';\n if (block === 'h2') return 'Heading 2';\n if (block === 'h3') return 'Heading 3';\n if (block === 'blockquote') return 'Quote';\n if (block === 'pre') return 'Code Block';\n return 'Normal text';\n }\n\n toggleBlockMenu() {\n if (this.readonly()) return;\n this.showBlockMenu.update((v) => !v);\n }\n\n selectBlockType(tag: string) {\n this.setBlockType(tag);\n this.showBlockMenu.set(false);\n }\n\n protected onToolbarKeyDown(event: KeyboardEvent) {\n if (!this.#isBrowser) return;\n const target = event.target as HTMLElement;\n const toolbarEl = target.closest('.sh-editor-toolbar');\n if (!toolbarEl) return;\n\n const items = Array.from(toolbarEl.querySelectorAll('.sh-editor-btn, .sh-editor-dropdown-trigger')).filter((el) => {\n const btn = el as HTMLButtonElement;\n return !btn.disabled && el.getAttribute('disabled') === null;\n }) as HTMLElement[];\n\n if (items.length === 0) return;\n\n const currentIndex = items.indexOf(target);\n if (currentIndex === -1) return;\n\n const isGroupJump = event.ctrlKey || event.altKey || event.metaKey;\n\n if (this.#keybindings.matches(event, 'editor-toolbar.next')) {\n event.preventDefault();\n if (isGroupJump) {\n const currentGroup = target.closest('.sh-editor-toolbar-group');\n if (currentGroup) {\n const groups = Array.from(toolbarEl.querySelectorAll('.sh-editor-toolbar-group')) as HTMLElement[];\n const groupIndex = groups.indexOf(currentGroup as HTMLElement);\n if (groupIndex !== -1) {\n for (let i = 1; i <= groups.length; i++) {\n const nextGroupIndex = (groupIndex + i) % groups.length;\n const groupItems = Array.from(\n groups[nextGroupIndex].querySelectorAll('.sh-editor-btn, .sh-editor-dropdown-trigger')\n ).filter((el) => {\n const btn = el as HTMLButtonElement;\n return !btn.disabled && el.getAttribute('disabled') === null && (el as HTMLElement).offsetWidth > 0;\n }) as HTMLElement[];\n if (groupItems.length > 0) {\n groupItems[0].focus();\n break;\n }\n }\n }\n }\n } else {\n const nextIndex = (currentIndex + 1) % items.length;\n items[nextIndex].focus();\n }\n } else if (this.#keybindings.matches(event, 'editor-toolbar.prev')) {\n event.preventDefault();\n if (isGroupJump) {\n const currentGroup = target.closest('.sh-editor-toolbar-group');\n if (currentGroup) {\n const groups = Array.from(toolbarEl.querySelectorAll('.sh-editor-toolbar-group')) as HTMLElement[];\n const groupIndex = groups.indexOf(currentGroup as HTMLElement);\n if (groupIndex !== -1) {\n for (let i = 1; i <= groups.length; i++) {\n const prevGroupIndex = (groupIndex - i + groups.length) % groups.length;\n const groupItems = Array.from(\n groups[prevGroupIndex].querySelectorAll('.sh-editor-btn, .sh-editor-dropdown-trigger')\n ).filter((el) => {\n const btn = el as HTMLButtonElement;\n return !btn.disabled && el.getAttribute('disabled') === null && (el as HTMLElement).offsetWidth > 0;\n }) as HTMLElement[];\n if (groupItems.length > 0) {\n groupItems[0].focus();\n break;\n }\n }\n }\n }\n } else {\n const nextIndex = (currentIndex - 1 + items.length) % items.length;\n items[nextIndex].focus();\n }\n } else if (this.#keybindings.matches(event, 'editor-toolbar.home')) {\n event.preventDefault();\n items[0].focus();\n } else if (this.#keybindings.matches(event, 'editor-toolbar.end')) {\n event.preventDefault();\n items[items.length - 1].focus();\n }\n }\n\n protected onToolbarFocusIn(event: FocusEvent) {\n if (!this.#isBrowser) return;\n const target = event.target as HTMLElement;\n const toolbarEl = target.closest('.sh-editor-toolbar');\n if (!toolbarEl) return;\n\n const items = Array.from(toolbarEl.querySelectorAll('.sh-editor-btn, .sh-editor-dropdown-trigger')).filter((el) => {\n const btn = el as HTMLButtonElement;\n return !btn.disabled && el.getAttribute('disabled') === null;\n }) as HTMLElement[];\n\n items.forEach((item) => {\n if (item === target) {\n item.setAttribute('tabindex', '0');\n } else {\n item.setAttribute('tabindex', '-1');\n }\n });\n }\n\n #initializeToolbarTabindexes() {\n if (!this.#isBrowser) return;\n setTimeout(() => {\n const toolbarEl = this.editorRef()?.nativeElement?.parentElement?.querySelector('.sh-editor-toolbar');\n if (!toolbarEl) return;\n const items = Array.from(toolbarEl.querySelectorAll('.sh-editor-btn, .sh-editor-dropdown-trigger')).filter(\n (el) => {\n const btn = el as HTMLButtonElement;\n return !btn.disabled && el.getAttribute('disabled') === null;\n }\n ) as HTMLElement[];\n\n items.forEach((item, idx) => {\n item.setAttribute('tabindex', idx === 0 ? '0' : '-1');\n });\n });\n }\n\n #ensureImagesFocusable() {\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n const imgs = editor.querySelectorAll('img');\n Array.from(imgs).forEach((img) => {\n if (!img.hasAttribute('tabindex')) {\n img.setAttribute('tabindex', '0');\n }\n });\n }\n\n @HostListener('scroll', ['$event'])\n onComponentScroll(event: Event) {\n if (this.#selectedImage()) {\n this.updateImgToolbarPosition();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize() {\n if (this.#selectedImage()) {\n this.updateImgToolbarPosition();\n }\n }\n\n updateImgToolbarPosition() {\n const img = this.#selectedImage();\n const editorEl = this.editorRef()?.nativeElement;\n if (!img || !editorEl) return;\n\n const imgRect = img.getBoundingClientRect();\n const editorRect = editorEl.getBoundingClientRect();\n\n // Position toolbar just above the top-left edge of the image\n const top = imgRect.top - editorRect.top - 55 + editorEl.scrollTop;\n const left = imgRect.left - editorRect.left;\n\n this.imgToolbarTop.set(top);\n this.imgToolbarLeft.set(left);\n }\n\n setImageMode(mode: 'content' | 'theater' | 'float' | 'custom') {\n const img = this.#selectedImage();\n if (!img) return;\n\n img.classList.remove(\n 'sh-editor-img-content',\n 'sh-editor-img-theater',\n 'sh-editor-img-float',\n 'sh-editor-img-custom',\n 'sh-editor-img-auto'\n );\n\n img.classList.add(`sh-editor-img-${mode}`);\n this.imgMode.set(mode);\n\n // If switching to content or theater (which do not support sizes), strip size classes\n if (mode === 'content' || mode === 'theater') {\n img.classList.remove(\n 'sh-editor-img-size-auto',\n 'sh-editor-img-size-small',\n 'sh-editor-img-size-medium',\n 'sh-editor-img-size-large'\n );\n this.imgSize.set('auto');\n }\n\n // Reposition overlay after CSS layout transition\n setTimeout(() => this.updateImgToolbarPosition(), 50);\n\n this.#updateValueFromDOM();\n }\n\n setImageSize(size: 'auto' | 'small' | 'medium' | 'large') {\n const img = this.#selectedImage();\n if (!img) return;\n\n img.classList.remove(\n 'sh-editor-img-size-auto',\n 'sh-editor-img-size-small',\n 'sh-editor-img-size-medium',\n 'sh-editor-img-size-large'\n );\n\n img.classList.add(`sh-editor-img-size-${size}`);\n this.imgSize.set(size);\n\n // Reposition overlay after CSS layout transition\n setTimeout(() => this.updateImgToolbarPosition(), 50);\n\n this.#updateValueFromDOM();\n }\n\n deleteImage() {\n const img = this.#selectedImage();\n if (img) {\n img.remove();\n this.#selectedImage.set(null);\n this.#updateValueFromDOM();\n }\n }\n\n onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.#handleImageUpload(input.files[0]);\n this.showImageModal.set(false);\n }\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent) {\n if (!this.#isBrowser) return;\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n const file = files[0];\n if (file.type.startsWith('image/')) {\n event.preventDefault();\n this.#handleImageUpload(file);\n }\n }\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n if (!this.#isBrowser) return;\n const items = event.clipboardData?.items;\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.indexOf('image') !== -1) {\n const file = items[i].getAsFile();\n if (file) {\n event.preventDefault();\n this.#handleImageUpload(file);\n }\n }\n }\n }\n }\n\n #handleImageUpload(file: File) {\n if (this.customUpload()) {\n this.imageUpload.emit(file);\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n const base64Url = e.target?.result as string;\n this.insertImage(base64Url);\n };\n reader.readAsDataURL(file);\n }\n }\n\n insertImage(url: string) {\n if (!url) return;\n\n const editor = this.editorRef()?.nativeElement;\n if (!editor) return;\n\n // Restore selection range\n const selection = window.getSelection();\n if (selection && this.#savedRange) {\n selection.removeAllRanges();\n selection.addRange(this.#savedRange);\n }\n\n editor.focus();\n\n // Insert image markup with default content layout class\n const imgHtml = `<img src=\"${url}\" class=\"sh-editor-img-content\" alt=\"Image\">`;\n const range = selection?.getRangeAt(0);\n if (range) {\n this.#saveHistory();\n this.#isInternalDOMUpdate = true;\n\n range.deleteContents();\n const el = this.#document.createElement('div');\n el.innerHTML = imgHtml;\n const child = el.firstChild;\n if (child) {\n range.insertNode(child);\n\n const newRange = this.#document.createRange();\n newRange.setStartAfter(child);\n newRange.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n }\n\n this.#updateValueFromDOM();\n this.#saveHistory();\n this.#isInternalDOMUpdate = false;\n this.onSelectionChange();\n }\n }\n\n // --- PUBLIC API METHODS ---\n\n getHTML(): string {\n const editor = this.editorRef()?.nativeElement;\n if (editor) {\n return editor.innerHTML;\n }\n // Fallback if not rendered\n const val = this.value();\n if (typeof val === 'string') {\n return this.format() === 'markdown' ? this.#markdownToHTML(val) : val;\n }\n if (Array.isArray(val)) {\n return this.#jsonToHTML(val);\n }\n return '';\n }\n\n getMarkdown(): string {\n const html = this.getHTML();\n return this.#htmlToMarkdown(html);\n }\n\n getJSON(): ShipEditorDocument {\n const html = this.getHTML();\n return this.#htmlToJSON(html);\n }\n\n setHTML(html: string) {\n this.#isWriting = true;\n const currentFormat = this.format();\n if (currentFormat === 'html') {\n this.value.set(html);\n this.onChange(html);\n } else if (currentFormat === 'markdown') {\n const md = this.#htmlToMarkdown(html);\n this.value.set(md);\n this.onChange(md);\n } else if (currentFormat === 'json') {\n const json = this.#htmlToJSON(html);\n this.value.set(json);\n this.onChange(json);\n }\n this.#syncModelToDOM(this.value());\n this.#isWriting = false;\n }\n\n setMarkdown(md: string) {\n this.#isWriting = true;\n const currentFormat = this.format();\n if (currentFormat === 'markdown') {\n this.value.set(md);\n this.onChange(md);\n } else if (currentFormat === 'html') {\n const html = this.#markdownToHTML(md);\n this.value.set(html);\n this.onChange(html);\n } else if (currentFormat === 'json') {\n const html = this.#markdownToHTML(md);\n const json = this.#htmlToJSON(html);\n this.value.set(json);\n this.onChange(json);\n }\n this.#syncModelToDOM(this.value());\n this.#isWriting = false;\n }\n\n setJSON(json: ShipEditorDocument) {\n this.#isWriting = true;\n const currentFormat = this.format();\n if (currentFormat === 'json') {\n this.value.set(json);\n this.onChange(json);\n } else if (currentFormat === 'html') {\n const html = this.#jsonToHTML(json);\n this.value.set(html);\n this.onChange(html);\n } else if (currentFormat === 'markdown') {\n const html = this.#jsonToHTML(json);\n const md = this.#htmlToMarkdown(html);\n this.value.set(md);\n this.onChange(md);\n }\n this.#syncModelToDOM(this.value());\n this.#isWriting = false;\n }\n\n clear() {\n this.value.set('');\n this.#lastValueWrittenFromDOM = '';\n this.rawCodeValue.set('');\n this.onChange('');\n const editor = this.editorRef()?.nativeElement;\n if (editor) {\n editor.innerHTML = '<p><br></p>';\n }\n }\n\n // --- PARSERS & SERIALIZERS ---\n\n #escapeHTML(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n // JSON => HTML Converter\n #jsonToHTML(doc: ShipEditorDocument): string {\n if (!doc || !Array.isArray(doc)) return '';\n\n return doc\n .map((block) => {\n const alignStyle = block.attrs?.align ? ` style=\"text-align: ${block.attrs.align};\"` : '';\n\n switch (block.type) {\n case 'paragraph': {\n const contentHtml = this.#inlineToHTML((block.content as ShipEditorInlineNode[]) || []);\n return `<p${alignStyle}>${contentHtml || '<br>'}</p>`;\n }\n case 'heading': {\n const level = block.attrs?.level || 1;\n const contentHtml = this.#inlineToHTML((block.content as ShipEditorInlineNode[]) || []);\n return `<h${level}${alignStyle}>${contentHtml || '<br>'}</h${level}>`;\n }\n case 'quote': {\n const contentHtml = this.#inlineToHTML((block.content as ShipEditorInlineNode[]) || []);\n return `<blockquote>${contentHtml || '<br>'}</blockquote>`;\n }\n case 'code-block': {\n const codeText = ((block.content as ShipEditorInlineNode[]) || []).map((node) => node.text || '').join('');\n const langClass = block.attrs?.language ? ` class=\"language-${block.attrs.language}\"` : '';\n return `<pre><code${langClass}>${this.#escapeHTML(codeText)}</code></pre>`;\n }\n case 'bullet-list': {\n const itemsHtml = ((block.content as ShipEditorBlock[]) || [])\n .map((item) => `<li>${this.#inlineToHTML((item.content as ShipEditorInlineNode[]) || [])}</li>`)\n .join('');\n return `<ul>${itemsHtml}</ul>`;\n }\n case 'ordered-list': {\n const itemsHtml = ((block.content as ShipEditorBlock[]) || [])\n .map((item) => `<li>${this.#inlineToHTML((item.content as ShipEditorInlineNode[]) || [])}</li>`)\n .join('');\n return `<ol>${itemsHtml}</ol>`;\n }\n case 'hr':\n return '<hr>';\n case 'image': {\n const src = block.attrs?.src || '';\n const alt = block.attrs?.alt || '';\n const mode = block.attrs?.mode || 'content';\n const size = block.attrs?.size || 'auto';\n if (mode === 'content' || mode === 'theater') {\n return `<img src=\"${src}\" alt=\"${alt}\" class=\"sh-editor-img-${mode}\">`;\n }\n return `<img src=\"${src}\" alt=\"${alt}\" class=\"sh-editor-img-${mode} sh-editor-img-size-${size}\">`;\n }\n default:\n return '';\n }\n })\n .join('');\n }\n\n #inlineToHTML(nodes: ShipEditorInlineNode[]): string {\n if (!nodes || !Array.isArray(nodes)) return '';\n\n return nodes\n .map((node) => {\n let text = this.#escapeHTML(node.text || '');\n if (!node.marks) return text;\n\n node.marks.forEach((mark) => {\n if (mark.type === 'bold') {\n text = `<strong>${text}</strong>`;\n } else if (mark.type === 'italic') {\n text = `<em>${text}</em>`;\n } else if (mark.type === 'underline') {\n text = `<u>${text}</u>`;\n } else if (mark.type === 'strike') {\n text = `<s>${text}</s>`;\n } else if (mark.type === 'code') {\n text = `<code>${text}</code>`;\n } else if (mark.type === 'link') {\n const href = mark.attrs?.href || '';\n const target = mark.attrs?.target ? ` target=\"${mark.attrs.target}\"` : '';\n text = `<a href=\"${href}\"${target}>${text}</a>`;\n }\n });\n\n return text;\n })\n .join('');\n }\n\n // HTML => JSON Converter\n #htmlToJSON(html: string): ShipEditorDocument {\n const doc: ShipEditorDocument = [];\n const temp = this.#document.createElement('div');\n temp.innerHTML = html;\n\n const children = Array.from(temp.childNodes);\n for (const node of children) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n if (['p', 'div'].includes(tagName)) {\n doc.push({\n type: 'paragraph',\n attrs: { align: this.#getAlign(el) },\n content: this.#parseInlineNodes(el),\n });\n } else if (/^h[1-6]$/.test(tagName)) {\n const level = parseInt(tagName.charAt(1), 10);\n doc.push({\n type: 'heading',\n attrs: { level, align: this.#getAlign(el) },\n content: this.#parseInlineNodes(el),\n });\n } else if (tagName === 'blockquote') {\n doc.push({\n type: 'quote',\n content: this.#parseInlineNodes(el),\n });\n } else if (tagName === 'pre') {\n const codeEl = el.querySelector('code');\n const lang = codeEl?.getAttribute('class')?.replace('language-', '') || '';\n doc.push({\n type: 'code-block',\n attrs: { language: lang },\n content: [{ type: 'text', text: codeEl ? codeEl.textContent || '' : el.textContent || '' }],\n });\n } else if (tagName === 'ul') {\n doc.push({\n type: 'bullet-list',\n content: this.#parseListItems(el),\n });\n } else if (tagName === 'ol') {\n doc.push({\n type: 'ordered-list',\n content: this.#parseListItems(el),\n });\n } else if (tagName === 'hr') {\n doc.push({ type: 'hr' });\n } else if (tagName === 'img') {\n const className = el.getAttribute('class') || '';\n let mode: 'content' | 'theater' | 'float' | 'custom' = 'content';\n if (className.includes('sh-editor-img-theater')) mode = 'theater';\n else if (className.includes('sh-editor-img-float')) mode = 'float';\n else if (className.includes('sh-editor-img-custom') || className.includes('sh-editor-img-auto')) mode = 'custom';\n\n let size: 'auto' | 'small' | 'medium' | 'large' = 'auto';\n if (className.includes('sh-editor-img-size-small')) size = 'small';\n else if (className.includes('sh-editor-img-size-medium')) size = 'medium';\n else if (className.includes('sh-editor-img-size-large')) size = 'large';\n\n doc.push({\n type: 'image',\n attrs: {\n src: el.getAttribute('src') || '',\n alt: el.getAttribute('alt') || '',\n mode,\n size,\n },\n });\n } else {\n doc.push({\n type: 'paragraph',\n content: this.#parseInlineNodes(el),\n });\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) {\n doc.push({\n type: 'paragraph',\n content: [{ type: 'text', text }],\n });\n }\n }\n }\n\n return doc;\n }\n\n #getAlign(el: HTMLElement): 'left' | 'center' | 'right' | undefined {\n const align = el.style.textAlign || el.getAttribute('align');\n if (align === 'center' || align === 'right' || align === 'left') {\n return align;\n }\n return undefined;\n }\n\n #parseListItems(listEl: HTMLElement): ShipEditorBlock[] {\n const items: ShipEditorBlock[] = [];\n for (const child of Array.from(listEl.childNodes)) {\n if (child.nodeType === Node.ELEMENT_NODE && (child as HTMLElement).tagName.toLowerCase() === 'li') {\n items.push({\n type: 'list-item',\n content: this.#parseInlineNodes(child as HTMLElement),\n });\n }\n }\n return items;\n }\n\n #parseInlineNodes(parentEl: HTMLElement): ShipEditorInlineNode[] {\n const inlineNodes: ShipEditorInlineNode[] = [];\n\n const traverse = (node: Node, marks: ShipEditorMark[]) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || '';\n if (text) {\n inlineNodes.push({\n type: 'text',\n text,\n marks: marks.length > 0 ? [...marks] : undefined,\n });\n }\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n const currentMarks = [...marks];\n\n if (['strong', 'b'].includes(tagName)) {\n currentMarks.push({ type: 'bold' });\n } else if (['em', 'i'].includes(tagName)) {\n currentMarks.push({ type: 'italic' });\n } else if (tagName === 'u') {\n currentMarks.push({ type: 'underline' });\n } else if (['strike', 's', 'del'].includes(tagName)) {\n currentMarks.push({ type: 'strike' });\n } else if (tagName === 'code') {\n currentMarks.push({ type: 'code' });\n } else if (tagName === 'a') {\n currentMarks.push({\n type: 'link',\n attrs: {\n href: el.getAttribute('href') || '',\n target: el.getAttribute('target') || undefined,\n },\n });\n }\n\n for (const child of Array.from(el.childNodes)) {\n traverse(child, currentMarks);\n }\n }\n };\n\n for (const child of Array.from(parentEl.childNodes)) {\n traverse(child, []);\n }\n\n return inlineNodes;\n }\n\n // HTML => Markdown Converter\n #htmlToMarkdown(html: string): string {\n const temp = this.#document.createElement('div');\n temp.innerHTML = html;\n\n let markdown = '';\n const children = Array.from(temp.childNodes);\n\n for (const node of children) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n if (['p', 'div'].includes(tagName)) {\n const inlineMd = this.#elementToMarkdownInline(el);\n if (inlineMd.trim()) {\n markdown += inlineMd + '\\n\\n';\n }\n } else if (/^h[1-6]$/.test(tagName)) {\n const level = parseInt(tagName.charAt(1), 10);\n const prefix = '#'.repeat(level) + ' ';\n markdown += prefix + this.#elementToMarkdownInline(el) + '\\n\\n';\n } else if (tagName === 'blockquote') {\n const text = this.#elementToMarkdownInline(el);\n markdown += '> ' + text.replace(/\\n/g, '\\n> ') + '\\n\\n';\n } else if (tagName === 'pre') {\n const codeEl = el.querySelector('code');\n const lang = codeEl?.getAttribute('class')?.replace('language-', '') || '';\n const codeText = codeEl ? codeEl.textContent || '' : el.textContent || '';\n markdown += '```' + lang + '\\n' + codeText.trim() + '\\n```\\n\\n';\n } else if (tagName === 'ul') {\n const items = Array.from(el.querySelectorAll(':scope > li'));\n items.forEach((li) => {\n markdown += '* ' + this.#elementToMarkdownInline(li as HTMLElement) + '\\n';\n });\n markdown += '\\n';\n } else if (tagName === 'ol') {\n const items = Array.from(el.querySelectorAll(':scope > li'));\n items.forEach((li, idx) => {\n markdown += `${idx + 1}. ` + this.#elementToMarkdownInline(li as HTMLElement) + '\\n';\n });\n markdown += '\\n';\n } else if (tagName === 'hr') {\n markdown += '---\\n\\n';\n } else if (tagName === 'img') {\n const src = el.getAttribute('src') || '';\n const alt = el.getAttribute('alt') || '';\n markdown += `![${alt}](${src})\\n\\n`;\n } else {\n const inlineMd = this.#elementToMarkdownInline(el);\n if (inlineMd.trim()) {\n markdown += inlineMd + '\\n\\n';\n }\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) {\n markdown += text + '\\n\\n';\n }\n }\n }\n\n return markdown.trim();\n }\n\n #elementToMarkdownInline(parentEl: HTMLElement): string {\n let md = '';\n\n const traverse = (node: Node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n md += node.textContent || '';\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n const tagName = el.tagName.toLowerCase();\n\n let prefix = '';\n let suffix = '';\n\n if (['strong', 'b'].includes(tagName)) {\n prefix = '**';\n suffix = '**';\n } else if (['em', 'i'].includes(tagName)) {\n prefix = '*';\n suffix = '*';\n } else if (tagName === 'u') {\n prefix = '<u>';\n suffix = '</u>';\n } else if (['strike', 's', 'del'].includes(tagName)) {\n prefix = '~~';\n suffix = '~~';\n } else if (tagName === 'code') {\n prefix = '`';\n suffix = '`';\n } else if (tagName === 'a') {\n prefix = '[';\n suffix = `](${el.getAttribute('href') || ''})`;\n } else if (tagName === 'br') {\n md += '\\n';\n return;\n }\n\n md += prefix;\n for (const child of Array.from(el.childNodes)) {\n traverse(child);\n }\n md += suffix;\n }\n };\n\n for (const child of Array.from(parentEl.childNodes)) {\n traverse(child);\n }\n\n return md;\n }\n\n // Markdown => HTML Converter\n #markdownToHTML(markdown: string): string {\n if (!markdown) return '';\n\n const blocks = markdown.split(/\\n\\s*\\n/);\n let html = '';\n\n let inList = false;\n let listType: 'ul' | 'ol' | null = null;\n\n for (let block of blocks) {\n block = block.trim();\n if (!block) continue;\n\n const isBullet = /^[*-]\\s+/.test(block);\n const isOrdered = /^\\d+\\.\\s+/.test(block);\n\n if (inList && !isBullet && !isOrdered) {\n html += listType === 'ul' ? '</ul>' : '</ol>';\n inList = false;\n listType = null;\n }\n\n if (block.startsWith('```')) {\n const lines = block.split('\\n');\n const firstLine = lines[0];\n const lang = firstLine.replace('```', '').trim();\n const codeLines = lines.slice(1, lines.length - (lines[lines.length - 1] === '```' ? 1 : 0));\n const codeText = codeLines.join('\\n');\n const langClass = lang ? ` class=\"language-${lang}\"` : '';\n html += `<pre><code${langClass}>${this.#escapeHTML(codeText)}</code></pre>`;\n } else if (block.startsWith('#')) {\n const match = block.match(/^(#{1,6})\\s+(.*)$/);\n if (match) {\n const level = match[1].length;\n const content = this.#parseInlineMarkdown(match[2]);\n html += `<h${level}>${content}</h${level}>`;\n } else {\n html += `<p>${this.#parseInlineMarkdown(block)}</p>`;\n }\n } else if (block.startsWith('>')) {\n const lines = block.split('\\n').map((line) => line.replace(/^>\\s?/, ''));\n const content = this.#parseInlineMarkdown(lines.join('<br>'));\n html += `<blockquote>${content}</blockquote>`;\n } else if (block === '---') {\n html += '<hr>';\n } else if (isBullet) {\n if (!inList || listType !== 'ul') {\n if (inList) {\n html += listType === 'ul' ? '</ul>' : '</ol>';\n }\n html += '<ul>';\n inList = true;\n listType = 'ul';\n }\n const lines = block.split('\\n');\n lines.forEach((line) => {\n const itemText = line.replace(/^[*-]\\s+/, '');\n html += `<li>${this.#parseInlineMarkdown(itemText)}</li>`;\n });\n } else if (isOrdered) {\n if (!inList || listType !== 'ol') {\n if (inList) {\n html += listType === 'ul' ? '</ul>' : '</ol>';\n }\n html += '<ol>';\n inList = true;\n listType = 'ol';\n }\n const lines = block.split('\\n');\n lines.forEach((line) => {\n const itemText = line.replace(/^\\d+\\.\\s+/, '');\n html += `<li>${this.#parseInlineMarkdown(itemText)}</li>`;\n });\n } else if (block.startsWith('![') && block.includes('](')) {\n const match = block.match(/^!\\[(.*?)\\]\\((.*?)\\)$/);\n if (match) {\n html += `<img src=\"${match[2]}\" alt=\"${match[1]}\">`;\n } else {\n html += `<p>${this.#parseInlineMarkdown(block)}</p>`;\n }\n } else {\n html += `<p>${this.#parseInlineMarkdown(block)}</p>`;\n }\n }\n\n if (inList) {\n html += listType === 'ul' ? '</ul>' : '</ol>';\n }\n\n return html;\n }\n\n #parseInlineMarkdown(text: string): string {\n let html = this.#escapeHTML(text);\n\n // Bold\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/__(.*?)__/g, '<strong>$1</strong>');\n\n // Italic\n html = html.replace(/\\*(.*?)\\*/g, '<em>$1</em>');\n html = html.replace(/_(.*?)_/g, '<em>$1</em>');\n\n // Underline (un-escape decoded <u> tags)\n html = html.replace(/&lt;u&gt;(.*?)&lt;\\/u&gt;/g, '<u>$1</u>');\n\n // Strike\n html = html.replace(/~~(.*?)~~/g, '<s>$1</s>');\n\n // Code\n html = html.replace(/`(.*?)`/g, '<code>$1</code>');\n\n // Images\n html = html.replace(/!\\[(.*?)\\]\\((.*?)\\)/g, '<img src=\"$2\" alt=\"$1\">');\n\n // Links\n html = html.replace(/\\[(.*?)\\]\\((.*?)\\)/g, '<a href=\"$2\">$1</a>');\n\n return html;\n }\n\n // Helper to extract plain text from JSON doc for metrics\n #getJSONText(doc: ShipEditorDocument): string {\n return doc\n .map((block) => {\n if (['paragraph', 'heading', 'quote', 'list-item'].includes(block.type)) {\n const content = block.content as ShipEditorInlineNode[];\n return content ? content.map((node) => node.text || '').join('') : '';\n }\n if (['bullet-list', 'ordered-list'].includes(block.type)) {\n const content = block.content as ShipEditorBlock[];\n return content ? this.#getJSONText(content) : '';\n }\n if (block.type === 'code-block') {\n const content = block.content as ShipEditorInlineNode[];\n return content ? content.map((node) => node.text || '').join('') : '';\n }\n return '';\n })\n .join(' ');\n }\n}\n\nfunction getNodePath(parent: HTMLElement, node: Node): number[] {\n const path: number[] = [];\n let current: Node | null = node;\n while (current && current !== parent) {\n const parentNode: Node | null = current.parentNode;\n if (!parentNode) break;\n const siblingIndex = Array.prototype.indexOf.call(parentNode.childNodes, current);\n if (siblingIndex === -1) break;\n path.unshift(siblingIndex);\n current = parentNode;\n }\n return path;\n}\n\nfunction getNodeByPath(parent: HTMLElement, path: number[]): Node {\n let current: Node = parent;\n for (const index of path) {\n if (current.childNodes[index]) {\n current = current.childNodes[index];\n } else {\n break;\n }\n }\n return current;\n}\n\nfunction isNodeWrappedInTag(node: Node, tag: string, limit: HTMLElement): boolean {\n const tagName = tag.toUpperCase();\n let current: Node | null = node.parentNode;\n while (current && current !== limit) {\n if (current.nodeType === Node.ELEMENT_NODE && (current as HTMLElement).tagName === tagName) {\n return true;\n }\n current = current.parentNode;\n }\n return false;\n}\n\nfunction getTextNodesInRange(range: Range): Text[] {\n const textNodes: Text[] = [];\n const commonAncestor = range.commonAncestorContainer;\n\n if (commonAncestor.nodeType === Node.TEXT_NODE) {\n textNodes.push(commonAncestor as Text);\n return textNodes;\n }\n\n const walker = commonAncestor.ownerDocument!.createTreeWalker(commonAncestor, NodeFilter.SHOW_TEXT);\n\n let node = walker.nextNode();\n while (node) {\n if (range.intersectsNode(node)) {\n textNodes.push(node as Text);\n }\n node = walker.nextNode();\n }\n return textNodes;\n}\n","<div class=\"sh-editor-container\">\n <!-- Editor Toolbar -->\n @if (toolbar() && !readonly()) {\n <div\n class=\"sh-editor-toolbar\"\n role=\"toolbar\"\n aria-label=\"Rich Text Editor Formatting Toolbar\"\n (keydown)=\"onToolbarKeyDown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\">\n <!-- Text formatting group -->\n @if (showFormats()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Text formatting\">\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"isBold()\"\n [attr.aria-pressed]=\"isBold()\"\n (click)=\"formatText('bold')\"\n shTooltip=\"Bold\">\n <sh-icon>text-b</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"isItalic()\"\n [attr.aria-pressed]=\"isItalic()\"\n (click)=\"formatText('italic')\"\n shTooltip=\"Italic\">\n <sh-icon>text-italic</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"isUnderline()\"\n [attr.aria-pressed]=\"isUnderline()\"\n (click)=\"formatText('underline')\"\n shTooltip=\"Underline\">\n <sh-icon>text-underline</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"isStrike()\"\n [attr.aria-pressed]=\"isStrike()\"\n (click)=\"formatText('strikeThrough')\"\n shTooltip=\"Strikethrough\">\n <sh-icon>text-strikethrough</sh-icon>\n </button>\n <button type=\"button\" class=\"sh-editor-btn\" (click)=\"formatText('removeFormat')\" shTooltip=\"Clear Formatting\">\n <sh-icon>eraser</sh-icon>\n </button>\n </div>\n }\n\n <!-- Headings & Block types Dropdown -->\n @if (showBlocks()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Text styles\">\n <sh-menu [(isOpen)]=\"showBlockMenu\" [openIndicator]=\"true\" class=\"sh-editor-dropdown\">\n <button trigger class=\"sh-editor-dropdown-trigger\" aria-label=\"Text Style\" shTooltip=\"Text Style\">\n <span class=\"sh-editor-dropdown-label\">{{ getBlockLabel() }}</span>\n </button>\n <div menu>\n <button (click)=\"selectBlockType('p')\" [class.active]=\"activeBlock() === 'p'\">\n <sh-icon>paragraph</sh-icon>\n <span>Normal text</span>\n </button>\n <button (click)=\"selectBlockType('h1')\" [class.active]=\"activeBlock() === 'h1'\">\n <sh-icon>text-h-one</sh-icon>\n <span>Heading 1</span>\n </button>\n <button (click)=\"selectBlockType('h2')\" [class.active]=\"activeBlock() === 'h2'\">\n <sh-icon>text-h-two</sh-icon>\n <span>Heading 2</span>\n </button>\n <button (click)=\"selectBlockType('h3')\" [class.active]=\"activeBlock() === 'h3'\">\n <sh-icon>text-h-three</sh-icon>\n <span>Heading 3</span>\n </button>\n <button (click)=\"selectBlockType('blockquote')\" [class.active]=\"activeBlock() === 'blockquote'\">\n <sh-icon>quotes</sh-icon>\n <span>Quote</span>\n </button>\n <button (click)=\"selectBlockType('pre')\" [class.active]=\"activeBlock() === 'pre'\">\n <sh-icon>code</sh-icon>\n\n <span>Code Block</span>\n </button>\n </div>\n </sh-menu>\n </div>\n }\n\n <!-- Lists -->\n @if (showLists()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Lists\">\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"activeBlock() === 'ul' || activeBlock() === 'li'\"\n [attr.aria-pressed]=\"activeBlock() === 'ul' || activeBlock() === 'li'\"\n (click)=\"formatText('insertUnorderedList')\"\n shTooltip=\"Bullet List\">\n <sh-icon>list-bullets</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"activeBlock() === 'ol'\"\n [attr.aria-pressed]=\"activeBlock() === 'ol'\"\n (click)=\"formatText('insertOrderedList')\"\n shTooltip=\"Numbered List\">\n <sh-icon>list-numbers</sh-icon>\n </button>\n </div>\n }\n\n <!-- Alignments -->\n @if (showAlignments()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Text alignment\">\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"align() === 'left'\"\n [attr.aria-pressed]=\"align() === 'left'\"\n (click)=\"formatText('justifyLeft')\"\n shTooltip=\"Align Left\">\n <sh-icon>text-align-left</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"align() === 'center'\"\n [attr.aria-pressed]=\"align() === 'center'\"\n (click)=\"formatText('justifyCenter')\"\n shTooltip=\"Align Center\">\n <sh-icon>text-align-center</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [class.active]=\"align() === 'right'\"\n [attr.aria-pressed]=\"align() === 'right'\"\n (click)=\"formatText('justifyRight')\"\n shTooltip=\"Align Right\">\n <sh-icon>text-align-right</sh-icon>\n </button>\n </div>\n }\n\n <!-- Links, images and lines -->\n @if (showInsertions()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Insert elements\">\n <button type=\"button\" class=\"sh-editor-btn\" (click)=\"openLinkModal()\" shTooltip=\"Insert Link\">\n <sh-icon>link</sh-icon>\n </button>\n <button type=\"button\" class=\"sh-editor-btn\" (click)=\"openImageModal()\" shTooltip=\"Insert Image\">\n <sh-icon>image</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n (click)=\"formatText('insertHorizontalRule')\"\n shTooltip=\"Horizontal Line\">\n <sh-icon>minus</sh-icon>\n </button>\n </div>\n }\n\n <!-- Configured custom commands group -->\n @if (customCommands().length > 0) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"Custom actions\">\n @for (cmd of customCommands(); track cmd.id) {\n <button type=\"button\" class=\"sh-editor-btn\" (click)=\"executeCommand(cmd)\" [shTooltip]=\"cmd.label\">\n <sh-icon>{{ cmd.icon }}</sh-icon>\n </button>\n }\n </div>\n }\n\n <!-- Custom projected buttons -->\n <div class=\"sh-editor-toolbar-group sh-editor-toolbar-extra\" role=\"group\" aria-label=\"Extra actions\">\n <ng-content />\n </div>\n\n <div class=\"spacer\"></div>\n\n <!-- Undo, Redo and Source View -->\n @if (showHistory()) {\n <div class=\"sh-editor-toolbar-group\" role=\"group\" aria-label=\"History and view\">\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [disabled]=\"!canUndo()\"\n (click)=\"formatText('undo')\"\n shTooltip=\"Undo\">\n <sh-icon>arrow-u-up-left</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn\"\n [disabled]=\"!canRedo()\"\n (click)=\"formatText('redo')\"\n shTooltip=\"Redo\">\n <sh-icon>arrow-u-up-right</sh-icon>\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-btn view-toggle\"\n [class.active]=\"viewMode() === 'code'\"\n [attr.aria-pressed]=\"viewMode() === 'code'\"\n (click)=\"toggleViewMode()\"\n shTooltip=\"Toggle Code View\">\n @if (viewMode() === 'design') {\n <sh-icon>terminal</sh-icon>\n } @else {\n <sh-icon>article</sh-icon>\n }\n </button>\n </div>\n }\n </div>\n }\n\n <!-- Simple Dialogs for Link and Image Inputs -->\n @if (showLinkModal()) {\n <div class=\"sh-editor-modal\">\n <div class=\"sh-editor-modal-backdrop\" (click)=\"showLinkModal.set(false)\"></div>\n <div class=\"sh-editor-modal-content\">\n <h4>Insert Link</h4>\n <input\n #linkInput\n type=\"text\"\n placeholder=\"https://example.com\"\n class=\"sh-editor-input\"\n (keyup.enter)=\"applyLink(linkInput.value)\"\n autofocus />\n <div class=\"sh-editor-modal-actions\">\n <button type=\"button\" class=\"sh-editor-modal-btn cancel\" (click)=\"showLinkModal.set(false)\">Cancel</button>\n <button type=\"button\" class=\"sh-editor-modal-btn confirm\" (click)=\"applyLink(linkInput.value)\">Insert</button>\n </div>\n </div>\n </div>\n }\n\n @if (showImageModal()) {\n <div class=\"sh-editor-modal\">\n <div class=\"sh-editor-modal-backdrop\" (click)=\"showImageModal.set(false)\"></div>\n <div class=\"sh-editor-modal-content\">\n <h4>Insert Image</h4>\n\n @if (imageUploadEnabled()) {\n <input #fileInput type=\"file\" accept=\"image/*\" style=\"display: none\" (change)=\"onFileSelected($event)\" />\n <button #uploadBtn type=\"button\" class=\"sh-editor-upload-btn\" (click)=\"fileInput.click()\">\n <sh-icon>upload-simple</sh-icon>\n Choose local file...\n </button>\n\n <div class=\"sh-editor-modal-divider\"><span>or insert from URL</span></div>\n }\n\n <input\n #imageInput\n type=\"text\"\n placeholder=\"https://example.com/image.jpg\"\n class=\"sh-editor-input\"\n (keyup.enter)=\"applyImage(imageInput.value)\" />\n <div class=\"sh-editor-modal-actions\">\n <button type=\"button\" class=\"sh-editor-modal-btn cancel\" (click)=\"showImageModal.set(false)\">Cancel</button>\n <button type=\"button\" class=\"sh-editor-modal-btn confirm\" (click)=\"applyImage(imageInput.value)\">\n Insert\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Image layout options floating toolbar -->\n @if (selectedImage() && !readonly()) {\n <div class=\"sh-editor-img-toolbar\" [style.top.px]=\"imgToolbarTop()\" [style.left.px]=\"imgToolbarLeft()\">\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgMode() === 'content'\"\n (click)=\"setImageMode('content')\">\n Content\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgMode() === 'theater'\"\n (click)=\"setImageMode('theater')\">\n Theater\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgMode() === 'float'\"\n (click)=\"setImageMode('float')\">\n Float\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgMode() === 'custom'\"\n (click)=\"setImageMode('custom')\">\n Custom\n </button>\n\n @if (imgMode() === 'float' || imgMode() === 'custom') {\n <div class=\"sh-editor-img-toolbar-divider\"></div>\n\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgSize() === 'auto'\"\n (click)=\"setImageSize('auto')\">\n Auto\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgSize() === 'small'\"\n (click)=\"setImageSize('small')\">\n Small\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgSize() === 'medium'\"\n (click)=\"setImageSize('medium')\">\n Medium\n </button>\n <button\n type=\"button\"\n class=\"sh-editor-img-toolbar-btn\"\n [class.active]=\"imgSize() === 'large'\"\n (click)=\"setImageSize('large')\">\n Large\n </button>\n }\n\n <div class=\"sh-editor-img-toolbar-divider\"></div>\n\n <button type=\"button\" class=\"sh-editor-img-toolbar-btn danger\" (click)=\"deleteImage()\" shTooltip=\"Delete Image\">\n <sh-icon>trash</sh-icon>\n </button>\n </div>\n }\n\n <!-- Slash Commands floating menu using design system sh-menu component -->\n @if (filteredCommands().length > 0 && !readonly()) {\n <sh-menu\n #slashMenu\n [(isOpen)]=\"showSlashMenu\"\n [searchable]=\"false\"\n [openIndicator]=\"false\"\n class=\"sh-editor-slash-menu-container\"\n [style.top.px]=\"slashMenuTop()\"\n [style.left.px]=\"slashMenuLeft()\">\n <div trigger class=\"sh-editor-slash-anchor\"></div>\n <div menu>\n @for (cmd of filteredCommands(); track cmd.id; let idx = $index) {\n <button\n type=\"button\"\n class=\"sh-editor-slash-item\"\n [class.active]=\"idx === slashMenu.activeOptionIndex()\"\n [attr.aria-selected]=\"idx === slashMenu.activeOptionIndex() ? 'true' : 'false'\"\n (click)=\"executeCommand(cmd)\"\n (mouseenter)=\"slashMenu.activeOptionIndex.set(idx)\">\n <div class=\"sh-editor-slash-item-icon\">\n <sh-icon>{{ cmd.icon }}</sh-icon>\n </div>\n <div class=\"sh-editor-slash-item-content\">\n <div class=\"sh-editor-slash-item-label\">{{ cmd.label }}</div>\n @if (cmd.description) {\n <div class=\"sh-editor-slash-item-desc\">{{ cmd.description }}</div>\n }\n </div>\n </button>\n }\n </div>\n </sh-menu>\n }\n\n <!-- Body / Editor Surface -->\n <div class=\"sh-editor-body\">\n @if (viewMode() === 'design') {\n <div\n #editorRef\n class=\"sh-editor-content\"\n [class.has-slash-commands]=\"hasSlashCommands()\"\n [attr.contenteditable]=\"readonly() ? 'false' : 'true'\"\n [attr.placeholder]=\"placeholder()\"\n role=\"textbox\"\n aria-multiline=\"true\"\n (input)=\"onDOMInput()\"\n (blur)=\"onDOMBlur()\"\n (focus)=\"isFocused.set(true)\"></div>\n } @else {\n <textarea\n #codeEditorRef\n class=\"sh-editor-code\"\n [attr.readonly]=\"readonly() ? '' : null\"\n [value]=\"rawCodeValue()\"\n (input)=\"onCodeInput($event)\"\n (blur)=\"onCodeBlur($event)\"\n (focus)=\"isFocused.set(true)\"></textarea>\n }\n </div>\n\n <!-- Footer / Status Bar -->\n <div class=\"sh-editor-footer\">\n <div class=\"word-count\">{{ wordCount() }} words, {{ charCount() }} characters</div>\n <div class=\"spacer\"></div>\n <div class=\"storage-format\">Storage: {{ format().toUpperCase() }}</div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -53,7 +53,7 @@ class ShipIcon {
53
53
  }
54
54
  }
55
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipIcon, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipIcon, isStandalone: true, selector: "sh-icon", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:blur": "onWindowBlur()", "window:focus": "onWindowFocus()" }, properties: { "class": "customHostClasses()", "attr.aria-hidden": "\"true\"" } }, ngImport: i0, template: `
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipIcon, isStandalone: true, selector: "sh-icon", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true" }, listeners: { "window:blur": "onWindowBlur()", "window:focus": "onWindowFocus()" }, properties: { "class": "customHostClasses()" } }, ngImport: i0, template: `
57
57
  <ng-content />
58
58
  `, isInline: true, styles: ["sh-icon{--icon-c: inherit;font-size:1.25rem;line-height:1em;width:1em;height:1em;min-width:1em;min-height:1em;max-width:1em;max-height:1em;text-align:left;overflow:hidden;display:inline-block;color:var(--icon-c);transition:color .15s ease-out}sh-icon.primary{--icon-c: var(--primary-8)}sh-icon.accent{--icon-c: var(--accent-8)}sh-icon.warn{--icon-c: var(--warn-8)}sh-icon.error{--icon-c: var(--error-8)}sh-icon.success{--icon-c: var(--success-8)}sh-icon.unfocused{--icon-c: var(--base-8)}sh-icon.large{font-size:2rem}sh-icon.small{font-size:1rem}sh-icon.inherit{font-size:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
59
59
  }
@@ -63,7 +63,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
63
63
  <ng-content />
64
64
  `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
65
65
  '[class]': 'customHostClasses()',
66
- '[attr.aria-hidden]': '"true"',
66
+ 'aria-hidden': 'true',
67
67
  }, styles: ["sh-icon{--icon-c: inherit;font-size:1.25rem;line-height:1em;width:1em;height:1em;min-width:1em;min-height:1em;max-width:1em;max-height:1em;text-align:left;overflow:hidden;display:inline-block;color:var(--icon-c);transition:color .15s ease-out}sh-icon.primary{--icon-c: var(--primary-8)}sh-icon.accent{--icon-c: var(--accent-8)}sh-icon.warn{--icon-c: var(--warn-8)}sh-icon.error{--icon-c: var(--error-8)}sh-icon.success{--icon-c: var(--success-8)}sh-icon.unfocused{--icon-c: var(--base-8)}sh-icon.large{font-size:2rem}sh-icon.small{font-size:1rem}sh-icon.inherit{font-size:inherit}\n"] }]
68
68
  }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], onWindowBlur: [{
69
69
  type: HostListener,
@@ -1 +1 @@
1
- {"version":3,"file":"ship-ui-core-ship-icon.mjs","sources":["../../../projects/ship-ui/ship-icon/ship-icon.ts","../../../projects/ship-ui/ship-icon/ship-ui-core-ship-icon.ts"],"sourcesContent":["import { AfterContentInit, ChangeDetectionStrategy, Component, computed, ElementRef, HostListener, inject, input, PLATFORM_ID, Renderer2, signal, ViewEncapsulation } from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipIconSize, SHIP_CONFIG, ShipIconConfig } from '@ship-ui/core';\n\nconst iconTypes = ['bold', 'thin', 'light', 'fill', 'duotone'];\n\n@Component({\n selector: 'sh-icon',\n styleUrl: './ship-icon.scss',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'customHostClasses()',\n '[attr.aria-hidden]': '\"true\"',\n },\n})\nexport class ShipIcon implements AfterContentInit {\n #selfRef: ElementRef<HTMLElement> = inject(ElementRef);\n #renderer = inject(Renderer2);\n #config = inject(SHIP_CONFIG, { optional: true });\n #document = inject(DOCUMENT);\n #platformId = inject(PLATFORM_ID);\n\n color = input<ShipColor | null>(null);\n\n size = input<ShipIconSize | null>(null);\n\n isUnfocused = signal(\n isPlatformBrowser(this.#platformId) ? !this.#document.hasFocus() : false\n );\n\n hostClasses = shipComponentClasses('icon', {\n color: this.color,\n\n size: this.size,\n });\n\n customHostClasses = computed(() => {\n const classes = this.hostClasses();\n const configIcon = this.#config?.icon as ShipIconConfig;\n const list = [classes];\n\n if (!configIcon?.disableUnfocus && this.isUnfocused()) {\n list.push('unfocused');\n }\n\n return list.filter(Boolean).join(' ');\n });\n\n @HostListener('window:blur')\n onWindowBlur() {\n this.isUnfocused.set(true);\n }\n\n @HostListener('window:focus')\n onWindowFocus() {\n this.isUnfocused.set(false);\n }\n\n ngAfterContentInit(): void {\n const textContent = this.#selfRef.nativeElement.textContent?.trim();\n\n if (!textContent) return;\n\n const potentialType = textContent.split('-').at(-1);\n\n if (potentialType && iconTypes.includes(potentialType)) {\n this.#renderer.addClass(this.#selfRef.nativeElement, potentialType);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship-ui-core-ship-icon.mjs","sources":["../../../projects/ship-ui/ship-icon/ship-icon.ts","../../../projects/ship-ui/ship-icon/ship-ui-core-ship-icon.ts"],"sourcesContent":["import { AfterContentInit, ChangeDetectionStrategy, Component, computed, ElementRef, HostListener, inject, input, PLATFORM_ID, Renderer2, signal, ViewEncapsulation } from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipIconSize, SHIP_CONFIG, ShipIconConfig } from '@ship-ui/core';\n\nconst iconTypes = ['bold', 'thin', 'light', 'fill', 'duotone'];\n\n@Component({\n selector: 'sh-icon',\n styleUrl: './ship-icon.scss',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'customHostClasses()',\n 'aria-hidden': 'true',\n },\n})\nexport class ShipIcon implements AfterContentInit {\n #selfRef: ElementRef<HTMLElement> = inject(ElementRef);\n #renderer = inject(Renderer2);\n #config = inject(SHIP_CONFIG, { optional: true });\n #document = inject(DOCUMENT);\n #platformId = inject(PLATFORM_ID);\n\n color = input<ShipColor | null>(null);\n\n size = input<ShipIconSize | null>(null);\n\n isUnfocused = signal(\n isPlatformBrowser(this.#platformId) ? !this.#document.hasFocus() : false\n );\n\n hostClasses = shipComponentClasses('icon', {\n color: this.color,\n\n size: this.size,\n });\n\n customHostClasses = computed(() => {\n const classes = this.hostClasses();\n const configIcon = this.#config?.icon as ShipIconConfig;\n const list = [classes];\n\n if (!configIcon?.disableUnfocus && this.isUnfocused()) {\n list.push('unfocused');\n }\n\n return list.filter(Boolean).join(' ');\n });\n\n @HostListener('window:blur')\n onWindowBlur() {\n this.isUnfocused.set(true);\n }\n\n @HostListener('window:focus')\n onWindowFocus() {\n this.isUnfocused.set(false);\n }\n\n ngAfterContentInit(): void {\n const textContent = this.#selfRef.nativeElement.textContent?.trim();\n\n if (!textContent) return;\n\n const potentialType = textContent.split('-').at(-1);\n\n if (potentialType && iconTypes.includes(potentialType)) {\n this.#renderer.addClass(this.#selfRef.nativeElement, potentialType);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}