@ngstarter-ui/components 21.0.24 → 21.0.25

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 (103) hide show
  1. package/ai/component-registry.json +13 -4
  2. package/fesm2022/ngstarter-ui-components-avatar.mjs +3 -3
  3. package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-badge.mjs +1 -2
  5. package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +0 -2
  7. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-button-toggle.mjs +1 -1
  9. package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-button.mjs +2 -2
  11. package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-calendar.mjs +1 -1
  13. package/fesm2022/ngstarter-ui-components-calendar.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-card-overlay.mjs +0 -1
  15. package/fesm2022/ngstarter-ui-components-card-overlay.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-card.mjs +7 -12
  17. package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-carousel.mjs +0 -3
  19. package/fesm2022/ngstarter-ui-components-carousel.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-chips.mjs +13 -16
  21. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  22. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +4 -1
  23. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
  24. package/fesm2022/ngstarter-ui-components-command-bar.mjs +2 -2
  25. package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -1
  26. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +4 -16
  27. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
  28. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs} +2 -2
  29. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs.map → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs.map} +1 -1
  30. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs} +2 -2
  31. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs.map → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs.map} +1 -1
  32. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs} +2 -2
  33. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs.map} +1 -1
  34. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs} +2 -2
  35. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs.map → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs.map} +1 -1
  36. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs} +2 -2
  37. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs.map → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs.map} +1 -1
  38. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs} +12 -13
  39. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs.map +1 -0
  40. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs} +2 -2
  41. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map} +1 -1
  42. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs} +2 -2
  43. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map} +1 -1
  44. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs} +2 -2
  45. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs.map → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs.map} +1 -1
  46. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs} +2 -2
  47. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs.map → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs.map} +1 -1
  48. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  49. package/fesm2022/ngstarter-ui-components-core.mjs +0 -9
  50. package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -1
  51. package/fesm2022/ngstarter-ui-components-country-select.mjs +11 -11
  52. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  53. package/fesm2022/ngstarter-ui-components-data-view.mjs +0 -3
  54. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
  55. package/fesm2022/ngstarter-ui-components-datepicker.mjs +21 -17
  56. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
  57. package/fesm2022/ngstarter-ui-components-dialog.mjs +0 -1
  58. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
  59. package/fesm2022/ngstarter-ui-components-empty-state.mjs +6 -6
  60. package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -1
  61. package/fesm2022/ngstarter-ui-components-expansion.mjs +6 -6
  62. package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -1
  63. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +0 -3
  64. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  65. package/fesm2022/ngstarter-ui-components-form-field.mjs +4 -4
  66. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
  67. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs} +2 -2
  68. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs.map → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs.map} +1 -1
  69. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs} +2 -2
  70. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs.map → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs.map} +1 -1
  71. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs} +2 -2
  72. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs.map → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs.map} +1 -1
  73. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs} +2 -2
  74. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs.map → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs.map} +1 -1
  75. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs} +2 -2
  76. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs.map → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs.map} +1 -1
  77. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs} +2 -2
  78. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs.map → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs.map} +1 -1
  79. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs} +2 -2
  80. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs.map → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs.map} +1 -1
  81. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +9 -9
  82. package/fesm2022/ngstarter-ui-components-form-renderer.mjs.map +1 -1
  83. package/fesm2022/ngstarter-ui-components-guided-tour.mjs +4 -5
  84. package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -1
  85. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs +2 -2
  86. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs.map +1 -1
  87. package/fesm2022/ngstarter-ui-components-icon.mjs +1 -1
  88. package/fesm2022/ngstarter-ui-components-icon.mjs.map +1 -1
  89. package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
  90. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  91. package/fesm2022/ngstarter-ui-components-marquee.mjs +78 -8
  92. package/fesm2022/ngstarter-ui-components-marquee.mjs.map +1 -1
  93. package/fesm2022/ngstarter-ui-components-notifications.mjs +4 -5
  94. package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -1
  95. package/package.json +1 -1
  96. package/types/ngstarter-ui-components-card.d.ts +1 -1
  97. package/types/ngstarter-ui-components-chips.d.ts +2 -2
  98. package/types/ngstarter-ui-components-datepicker.d.ts +6 -6
  99. package/types/ngstarter-ui-components-expansion.d.ts +2 -2
  100. package/types/ngstarter-ui-components-form-field.d.ts +2 -2
  101. package/types/ngstarter-ui-components-guided-tour.d.ts +1 -1
  102. package/types/ngstarter-ui-components-marquee.d.ts +19 -11
  103. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs","sources":["../../../projects/components/content-editor/src/text-highlight.service.ts","../../../projects/components/content-editor/src/_dialogs/add-link/add-link.dialog.ts","../../../projects/components/content-editor/src/_dialogs/add-link/add-link.dialog.html","../../../projects/components/content-editor/src/_dialogs/edit-link/edit-link.dialog.ts","../../../projects/components/content-editor/src/_dialogs/edit-link/edit-link.dialog.html","../../../projects/components/content-editor/src/text-color/text-color.component.ts","../../../projects/components/content-editor/src/text-color/text-color.component.html","../../../projects/components/content-editor/src/command-bar/command-bar.component.ts","../../../projects/components/content-editor/src/command-bar/command-bar.component.html","../../../projects/components/content-editor/src/types.ts","../../../projects/components/content-editor/src/content-builder.store.ts","../../../projects/components/content-editor/src/text-selection-popup.directive.ts","../../../projects/components/content-editor/src/directives/block-selection.directive.ts","../../../projects/components/content-editor/src/content-builder/content-builder.component.ts","../../../projects/components/content-editor/src/content-builder/content-builder.component.html","../../../projects/components/content-editor/src/content-viewer/content-viewer.component.ts","../../../projects/components/content-editor/src/content-viewer/content-viewer.component.html","../../../projects/components/content-editor/ngstarter-ui-components-content-editor.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nexport type TextAlignment = 'left' | 'center' | 'right' | 'justify' | 'start' | 'end' | '' | null;\nexport type ElementAttributes = { [key: string]: string };\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TextHighlightService {\n\n private savedRange: Range | null = null;\n\n constructor() { }\n\n public saveCurrentSelection(): void {\n const selection = window.getSelection();\n const range = this.getCurrentRangeInternal(selection);\n this.savedRange = range ? range.cloneRange() : null;\n // // console.log('TextHighlightService: Выделение сохранено/очищено.');\n }\n\n public restoreSelection(): void {\n if (!this.savedRange) {\n // // console.warn('TextHighlightService: Нет сохраненного выделения для восстановления.');\n return;\n }\n const selection = window.getSelection();\n if (!selection) {\n // // console.error('TextHighlightService: Не удалось получить window.getSelection() для восстановления.');\n this.savedRange = null;\n return;\n }\n if (this.savedRange.startContainer.isConnected && this.savedRange.endContainer.isConnected) {\n try {\n selection.removeAllRanges();\n selection.addRange(this.savedRange);\n // // console.log('TextHighlightService: Выделение восстановлено.');\n } catch (e) {\n // // console.error('TextHighlightService: Ошибка при восстановлении выделения:', e);\n this.savedRange = null;\n }\n } else {\n // // console.warn('TextHighlightService: Сохраненный диапазон стал невалидным, восстановление невозможно.');\n this.savedRange = null;\n }\n }\n\n /**\n * Wraps current selection with specified tag, applying styles, classes, and attributes.\n * If the selection EXACTLY MATCHES THE BOUNDARIES of an existing tag of the same type,\n * then styles, classes, and attributes are ADDED/OVERWRITTEN on that existing tag.\n * Otherwise, a new wrapper is always created.\n * DOES NOT attempt to \"cut\" elements.\n */\n public wrapSelection(\n tagName: string,\n styles?: Partial<CSSStyleDeclaration>,\n classNames?: string[],\n attrs?: ElementAttributes\n ): void {\n const selection = window.getSelection();\n const range = this.getCurrentRangeInternal(selection);\n if (!range || !selection) {\n // // console.warn('TextHighlightService (wrapSelection): Нет валидного выделения.');\n return;\n }\n const normalizedTagName = tagName.toLowerCase();\n\n const exactExistingContainer = this.findExactWrappingElement(range, normalizedTagName);\n\n if (exactExistingContainer) {\n this.applyStylesAttributesAndClasses(exactExistingContainer, styles, classNames, attrs);\n selection.removeAllRanges();\n const newExactRange = document.createRange();\n newExactRange.selectNodeContents(exactExistingContainer);\n selection.addRange(newExactRange);\n // // console.log(`TextHighlightService (wrapSelection): Модифицирован существующий элемент <${normalizedTagName}>.`);\n } else {\n this.wrapRange(selection, range, normalizedTagName, styles, classNames, attrs);\n // // console.log(`TextHighlightService (wrapSelection): Создана новая обертка <${normalizedTagName}>.`);\n }\n }\n\n /**\n * \"Smart\" wrapping:\n * - If the selection exactly covers an existing element of the same type -> modifies it.\n * - If the selection is partially inside an inline element of the same type -> splits it and wraps the selected part.\n * - In other cases -> creates a new wrapper.\n */\n public wrapOrSplitInlineSelection(\n tagName: string,\n styles?: Partial<CSSStyleDeclaration>,\n classNames?: string[],\n attrs?: ElementAttributes\n ): void {\n const selection = window.getSelection();\n const range = this.getCurrentRangeInternal(selection);\n if (!range || !selection) {\n // // console.warn('TextHighlightService (wrapOrSplitInlineSelection): Нет валидного выделения.');\n return;\n }\n const normalizedTagName = tagName.toLowerCase();\n\n const exactContainer = this.findExactWrappingElement(range, normalizedTagName);\n if (exactContainer) {\n this.applyStylesAttributesAndClasses(exactContainer, styles, classNames, attrs);\n selection.removeAllRanges();\n const newExactRange = document.createRange();\n newExactRange.selectNodeContents(exactContainer);\n selection.addRange(newExactRange);\n // // console.log(`TextHighlightService (wrapOrSplitInlineSelection): Модифицирован существующий <${normalizedTagName}>.`);\n return;\n }\n\n const containingAncestor = this.findContainingAncestor(range, normalizedTagName);\n if (containingAncestor && this.isInlineElement(containingAncestor)) {\n // // console.log(`TextHighlightService (wrapOrSplitInlineSelection): Попытка разделить inline <${normalizedTagName}>.`);\n this.splitInlineElementAndApplyToSelection(selection, range, containingAncestor, normalizedTagName, styles, classNames, attrs);\n return;\n }\n\n // // console.log(`TextHighlightService (wrapOrSplitInlineSelection): Создаем новую обертку <${normalizedTagName}>.`);\n this.wrapRange(selection, range, normalizedTagName, styles, classNames, attrs);\n }\n\n\n public unwrapSelection(tagName: string): void {\n const selection = window.getSelection();\n const range = this.getCurrentRangeInternal(selection);\n if (!range || !selection) return;\n\n const normalizedTagName = tagName.toLowerCase();\n const elementToUnwrap = this.findExactWrappingElement(range, normalizedTagName)\n ?? this.findContainingAncestor(range, normalizedTagName);\n\n if (elementToUnwrap) {\n this.unwrapElementAndReselect(selection, elementToUnwrap);\n // // console.log(`TextHighlightService (unwrapSelection): <${normalizedTagName}> развернут.`);\n } else {\n // // console.warn(`TextHighlightService (unwrapSelection): Не найден <${normalizedTagName}> для разворачивания.`);\n }\n }\n\n public toggleWrapSelection(\n tagName: string,\n styles?: Partial<CSSStyleDeclaration>,\n classNames?: string[],\n attrs?: ElementAttributes\n ): void {\n const range = this.getCurrentRange();\n if (!range) return;\n\n const normalizedTagName = tagName.toLowerCase();\n const elementToUnwrap = this.findExactWrappingElement(range, normalizedTagName)\n ?? this.findContainingAncestor(range, normalizedTagName);\n\n if (elementToUnwrap) {\n this.unwrapSelection(normalizedTagName);\n } else {\n this.wrapOrSplitInlineSelection(normalizedTagName, styles, classNames, attrs);\n }\n }\n\n public isSelectionWrappedInTag(tagName: string): boolean {\n const range = this.getCurrentRange();\n if (!range) return false;\n const normalizedTagName = tagName.toLowerCase();\n const containingElement = this.findContainingAncestor(range, normalizedTagName);\n return !!containingElement;\n }\n\n public getCurrentRange(): Range | null {\n const selection = window.getSelection();\n return this.getCurrentRangeInternal(selection);\n }\n\n public findClosestBlockAncestor(requiredClassName?: string): HTMLElement | null {\n const range = this.getCurrentRange();\n if (!range) return null;\n\n let node: Node | null = range.commonAncestorContainer;\n const trimmedClassName = requiredClassName?.trim();\n\n while (node && node !== document.body && node !== document) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (!this.isInlineElement(element)) {\n if (!trimmedClassName || element.classList.contains(trimmedClassName)) {\n return element;\n }\n }\n }\n node = node.parentNode;\n }\n\n if (document.body && document.body.contains(range.commonAncestorContainer)) {\n if (!this.isInlineElement(document.body)) {\n if (!trimmedClassName || document.body.classList.contains(trimmedClassName)) {\n return document.body;\n }\n }\n }\n return null;\n }\n\n public setTextAlignment(alignment: TextAlignment): void {\n const blockAncestor = this.findClosestBlockAncestor();\n if (!blockAncestor) return;\n\n if (alignment && alignment.trim() !== '') {\n blockAncestor.style.textAlign = alignment;\n blockAncestor.setAttribute('data-props-text-alignment', alignment);\n } else {\n blockAncestor.style.textAlign = '';\n blockAncestor.removeAttribute('data-props-text-alignment');\n }\n }\n\n public unwrapElementByClassAndSelectContents(className: string): void {\n if (!className || !className.trim()) return;\n const trimmedClassName = className.trim();\n const selector = `.${trimmedClassName}`;\n const elementToUnwrap = document.querySelector(selector) as HTMLElement | null;\n if (!elementToUnwrap) return;\n\n const parent = elementToUnwrap.parentNode;\n if (!parent) return;\n\n const firstChildToSelect = elementToUnwrap.firstChild;\n const lastChildToSelect = elementToUnwrap.lastChild;\n\n while (elementToUnwrap.firstChild) {\n parent.insertBefore(elementToUnwrap.firstChild, elementToUnwrap);\n }\n parent.removeChild(elementToUnwrap);\n\n const selection = window.getSelection();\n if (!selection) return;\n selection.removeAllRanges();\n\n if (firstChildToSelect && lastChildToSelect && firstChildToSelect.isConnected && lastChildToSelect.isConnected) {\n try {\n const newRange = document.createRange();\n newRange.setStartBefore(firstChildToSelect);\n newRange.setEndAfter(lastChildToSelect);\n selection.addRange(newRange);\n } catch (e) { /* ... */ }\n }\n }\n\n public getContainingAncestorByTagName(tagName: string): HTMLElement | null {\n const range = this.getCurrentRange();\n if (!range) return null;\n const normalizedTagName = tagName.toLowerCase();\n return this.findContainingAncestor(range, normalizedTagName);\n }\n\n public clearSelectionFormatting(): void {\n const selection = window.getSelection();\n const range = this.getCurrentRangeInternal(selection);\n if (!range || !selection) return;\n\n try {\n const selectedContents = range.extractContents();\n const plainText = selectedContents.textContent || '';\n const textNode = document.createTextNode(plainText);\n range.insertNode(textNode);\n selection.removeAllRanges();\n const newRange = document.createRange();\n newRange.selectNodeContents(textNode);\n selection.addRange(newRange);\n } catch (e) {\n selection.removeAllRanges();\n }\n }\n\n private getCurrentRangeInternal(selection: Selection | null): Range | null {\n if (!selection || selection.rangeCount === 0) return null;\n const range = selection.getRangeAt(0);\n if (range.collapsed || !range.toString().trim()) return null;\n return range;\n }\n\n private findExactWrappingElement(range: Range, tagName: string): HTMLElement | null {\n const commonAncestor = range.commonAncestorContainer;\n let candidateElement: HTMLElement | null =\n (commonAncestor.nodeType === Node.ELEMENT_NODE && (commonAncestor as HTMLElement).tagName.toLowerCase() === tagName)\n ? commonAncestor as HTMLElement\n : this.findClosestAncestorByTagName(commonAncestor, tagName);\n\n if (!candidateElement) return null;\n\n const elementRange = document.createRange();\n try {\n elementRange.selectNodeContents(candidateElement);\n if (range.compareBoundaryPoints(Range.START_TO_START, elementRange) === 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, elementRange) === 0) {\n return candidateElement;\n }\n } catch (e) { /*// console.error(\"Error in findExactWrappingElement:\", e);*/ }\n return null;\n }\n\n private findContainingAncestor(range: Range, tagName: string): HTMLElement | null {\n let node: Node | null = range.commonAncestorContainer;\n while (node && node !== document.body && node !== document) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.tagName.toLowerCase() === tagName) {\n const elementRange = document.createRange();\n try {\n elementRange.selectNodeContents(element);\n if (range.compareBoundaryPoints(Range.START_TO_START, elementRange) >= 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, elementRange) <= 0) {\n return element;\n }\n } catch(e) { /*// console.error(\"Error in findContainingAncestor:\", e); */ }\n }\n }\n node = node.parentNode;\n }\n return null;\n }\n\n private findClosestAncestorByTagName(node: Node, tagName: string): HTMLElement | null {\n let currentNode: Node | null = node;\n while (currentNode && currentNode !== document.body && currentNode !== document) {\n if (currentNode.nodeType === Node.ELEMENT_NODE && (currentNode as HTMLElement).tagName.toLowerCase() === tagName) {\n return currentNode as HTMLElement;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n }\n\n private findClosestAncestorByClassName(node: Node, className: string): HTMLElement | null {\n let currentNode: Node | null = node;\n const trimmedClassName = className.trim();\n if (!trimmedClassName) return null;\n while (currentNode && currentNode !== document.body && currentNode !== document) {\n if (currentNode.nodeType === Node.ELEMENT_NODE && (currentNode as HTMLElement).classList.contains(trimmedClassName)) {\n return currentNode as HTMLElement;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n }\n\n private applyStylesAttributesAndClasses(\n element: HTMLElement,\n styles?: Partial<CSSStyleDeclaration>,\n classNames?: string[],\n attrs?: ElementAttributes\n ): void {\n if (styles) {\n for (const styleName in styles) {\n if (Object.prototype.hasOwnProperty.call(styles, styleName)) {\n // @ts-ignore\n if (styles[styleName] !== undefined && isNaN(Number(styleName))) {\n try {\n element.style[styleName as any] = styles[styleName]!;\n } catch (e) { /* ... */ }\n }\n }\n }\n }\n if (classNames && classNames.length > 0) {\n const validClasses = classNames.filter(cn => cn && cn.trim());\n if (validClasses.length > 0) {\n element.classList.add(...validClasses);\n }\n }\n if (attrs) {\n for (const attrName in attrs) {\n if (Object.prototype.hasOwnProperty.call(attrs, attrName)) {\n const attrValue = attrs[attrName];\n if (attrValue === null) {\n element.removeAttribute(attrName);\n } else if (attrValue !== undefined) {\n element.setAttribute(attrName, attrValue);\n }\n }\n }\n }\n }\n\n private wrapRange(\n selection: Selection,\n range: Range,\n tagName: string,\n styles?: Partial<CSSStyleDeclaration>,\n classNames?: string[],\n attrs?: ElementAttributes\n ): void {\n try {\n const wrapperElement = document.createElement(tagName);\n this.applyStylesAttributesAndClasses(wrapperElement, styles, classNames, attrs);\n\n const selectedContents = range.extractContents();\n wrapperElement.appendChild(selectedContents);\n range.insertNode(wrapperElement);\n\n selection.removeAllRanges();\n const newRange = document.createRange();\n newRange.selectNodeContents(wrapperElement);\n selection.addRange(newRange);\n } catch (e) {\n selection.removeAllRanges();\n }\n }\n\n private createMarker(id: string): HTMLSpanElement {\n const marker = document.createElement('span');\n marker.id = id;\n marker.style.display = 'none';\n marker.setAttribute('data-selection-marker', 'true');\n return marker;\n }\n\n private unwrapElementAndReselect(selection: Selection, elementToUnwrap: HTMLElement): void {\n const parent = elementToUnwrap.parentNode;\n if (!parent) return;\n\n const startMarkerId = `__sel_start_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n const endMarkerId = `__sel_end_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n let markersInserted = false;\n const originalRange = this.getCurrentRangeInternal(selection);\n\n try {\n if (originalRange) {\n const startMarker = this.createMarker(startMarkerId);\n const endMarker = this.createMarker(endMarkerId);\n const rangeEnd = originalRange.cloneRange();\n rangeEnd.collapse(false); rangeEnd.insertNode(endMarker);\n const rangeStart = originalRange.cloneRange();\n rangeStart.collapse(true); rangeStart.insertNode(startMarker);\n markersInserted = true;\n selection.removeAllRanges();\n }\n } catch (e) {\n markersInserted = false;\n if(selection) selection.removeAllRanges();\n }\n\n if (markersInserted || !originalRange) {\n while (elementToUnwrap.firstChild) {\n parent.insertBefore(elementToUnwrap.firstChild, elementToUnwrap);\n }\n parent.removeChild(elementToUnwrap);\n } else {\n return;\n }\n\n if (markersInserted) {\n const startMarker = document.getElementById(startMarkerId);\n const endMarker = document.getElementById(endMarkerId);\n if (startMarker?.parentNode && endMarker?.parentNode) {\n try {\n const newRange = document.createRange();\n newRange.setStartAfter(startMarker);\n newRange.setEndBefore(endMarker);\n const currentSelection = window.getSelection();\n if(currentSelection) {\n currentSelection.removeAllRanges();\n currentSelection.addRange(newRange);\n }\n } catch (e) { window.getSelection()?.removeAllRanges(); }\n finally {\n startMarker.parentNode.removeChild(startMarker);\n endMarker.parentNode.removeChild(endMarker);\n }\n } else {\n document.getElementById(startMarkerId)?.remove();\n document.getElementById(endMarkerId)?.remove();\n window.getSelection()?.removeAllRanges();\n }\n } else {\n window.getSelection()?.removeAllRanges();\n }\n }\n\n private isInlineElement(element: HTMLElement): boolean {\n if (!element) return false;\n const display = window.getComputedStyle(element).display;\n return display.startsWith('inline');\n }\n\n private splitInlineElementAndApplyToSelection(\n selection: Selection,\n selectedRange: Range,\n existingElement: HTMLElement,\n newTagName: string,\n newWrapperStyles?: Partial<CSSStyleDeclaration>,\n newWrapperClassNames?: string[],\n newWrapperAttrs?: ElementAttributes\n ): void {\n const parent = existingElement.parentNode;\n if (!parent) {\n this.wrapRange(selection, selectedRange, newTagName, newWrapperStyles, newWrapperClassNames, newWrapperAttrs);\n return;\n }\n\n const newWrapperForSelection = document.createElement(newTagName);\n this.applyStylesAttributesAndClasses(newWrapperForSelection, newWrapperStyles, newWrapperClassNames, newWrapperAttrs);\n\n const originalElementAttributes: ElementAttributes = {};\n for (let i = 0; i < existingElement.attributes.length; i++) {\n const attr = existingElement.attributes[i];\n originalElementAttributes[attr.name] = attr.value;\n }\n\n const prefixRange = document.createRange();\n prefixRange.setStart(existingElement, 0); // От начала содержимого existingElement\n try {\n prefixRange.setEnd(selectedRange.startContainer, selectedRange.startOffset);\n } catch (e) {\n // Если selectedRange.startContainer не является потомком existingElement, это может вызвать ошибку.\n // В таком случае, префиксной части нет или она не может быть корректно определена этим способом.\n // console.warn(\"Error setting prefixRange end:\", e);\n prefixRange.setEnd(existingElement, 0); // Схлопываем в начало\n }\n\n\n let prefixElementClone: HTMLElement | null = null;\n if (!prefixRange.collapsed) {\n try {\n const prefixFragment = prefixRange.extractContents();\n prefixElementClone = document.createElement(existingElement.tagName);\n for (const attrName in originalElementAttributes) {\n if (Object.prototype.hasOwnProperty.call(originalElementAttributes, attrName)) {\n prefixElementClone.setAttribute(attrName, originalElementAttributes[attrName]);\n }\n }\n prefixElementClone.appendChild(prefixFragment);\n } catch(e) {\n // console.error(\"Error extracting/creating prefix:\", e);\n prefixElementClone = null; // Не удалось создать префикс\n }\n }\n\n // Извлекаем выделенное содержимое ДО работы с суффиксом, так как selectedRange может стать невалидным\n let selectedFragment: DocumentFragment;\n try {\n if (selectedRange.commonAncestorContainer.isConnected && !selectedRange.collapsed) {\n selectedFragment = selectedRange.extractContents();\n } else {\n selectedFragment = document.createDocumentFragment(); // Пустой, если не удалось извлечь\n }\n } catch(e) {\n // console.error(\"Error extracting selectedFragment:\", e);\n selectedFragment = document.createDocumentFragment();\n }\n\n\n let suffixElementClone: HTMLElement | null = null;\n // То, что осталось в existingElement после извлечения префикса и выделенной части, - это суффикс\n if (existingElement.hasChildNodes()) {\n suffixElementClone = document.createElement(existingElement.tagName);\n for (const attrName in originalElementAttributes) {\n if (Object.prototype.hasOwnProperty.call(originalElementAttributes, attrName)) {\n suffixElementClone.setAttribute(attrName, originalElementAttributes[attrName]);\n }\n }\n while (existingElement.firstChild) {\n suffixElementClone.appendChild(existingElement.firstChild);\n }\n }\n\n newWrapperForSelection.appendChild(selectedFragment);\n\n const insertBeforeOriginal = existingElement;\n\n if (prefixElementClone) {\n parent.insertBefore(prefixElementClone, insertBeforeOriginal);\n }\n parent.insertBefore(newWrapperForSelection, insertBeforeOriginal);\n if (suffixElementClone) {\n parent.insertBefore(suffixElementClone, insertBeforeOriginal);\n }\n\n parent.removeChild(existingElement);\n\n selection.removeAllRanges();\n const finalRange = document.createRange();\n finalRange.selectNodeContents(newWrapperForSelection);\n selection.addRange(finalRange);\n }\n\n}\n","import { Component, inject } from '@angular/core';\nimport {\n DialogActions,\n DialogClose,\n DialogContent,\n DialogRef,\n DialogTitle\n} from '@ngstarter-ui/components/dialog';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { FormField, Label } from '@ngstarter-ui/components/form-field';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\n\n@Component({\n selector: 'ngs-add-link',\n imports: [\n DialogContent,\n FormField,\n Input,\n DialogTitle,\n DialogActions,\n Button,\n DialogClose,\n ReactiveFormsModule,\n Label,\n SlideToggle\n ],\n templateUrl: './add-link.dialog.html',\n styleUrl: './add-link.dialog.css'\n})\nexport class AddLinkDialog {\n private _dialogRef = inject(DialogRef);\n private _formBuilder = inject(FormBuilder);\n\n form = this._formBuilder.group({\n href: [''],\n openInNewTab: [true, [Validators.required]]\n });\n\n cancel() {\n this._dialogRef.close(false);\n }\n\n add() {\n this._dialogRef.close(this.form.value);\n }\n}\n","<h1 ngs-dialog-title>Add link</h1>\n<ngs-dialog-content [formGroup]=\"form\" class=\"!overflow-hidden\">\n <ngs-form-field class=\"w-full\">\n <ngs-label>Href (Url, Tel or other)</ngs-label>\n <input ngsInput type=\"text\" formControlName=\"href\">\n </ngs-form-field>\n <ngs-slide-toggle formControlName=\"openInNewTab\">Open link in a new tab</ngs-slide-toggle>\n</ngs-dialog-content>\n<ngs-dialog-actions>\n <button ngsButton (click)=\"cancel()\">Cancel</button>\n <button ngsButton=\"filled\"\n [ngs-dialog-close]=\"true\"\n [disabled]=\"form.invalid\" (click)=\"add()\">Add</button>\n</ngs-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Button } from '@ngstarter-ui/components/button';\nimport {\n DIALOG_DATA,\n DialogActions, DialogClose,\n DialogContent,\n DialogRef,\n DialogTitle\n} from '@ngstarter-ui/components/dialog';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { SlideToggle } from '@ngstarter-ui/components/slide-toggle';\nimport { FormField, Hint, Label } from '@ngstarter-ui/components/form-field';\n\n@Component({\n selector: 'ngs-edit-link',\n imports: [\n FormsModule,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormField,\n Input,\n Label,\n SlideToggle,\n ReactiveFormsModule,\n DialogClose,\n Hint\n ],\n templateUrl: './edit-link.dialog.html',\n styleUrl: './edit-link.dialog.css'\n})\nexport class EditLinkDialog {\n private _dialogRef = inject(DialogRef);\n private _dialogData = inject(DIALOG_DATA);\n private _formBuilder = inject(FormBuilder);\n\n form = this._formBuilder.group({\n href: [this._dialogData.href],\n openInNewTab: [this._dialogData.openInNewTab, [Validators.required]]\n });\n\n cancel() {\n this._dialogRef.close(false);\n }\n\n add() {\n this._dialogRef.close(this.form.value);\n }\n}\n","<h1 ngs-dialog-title>Edit link</h1>\n<ngs-dialog-content [formGroup]=\"form\" class=\"!overflow-hidden\">\n <ngs-form-field class=\"w-full\">\n <ngs-label>Href (Url, Tel or other)</ngs-label>\n <input ngsInput type=\"text\" formControlName=\"href\">\n <ngs-hint>To delete the link, clear this field and apply</ngs-hint>\n </ngs-form-field>\n <ngs-slide-toggle formControlName=\"openInNewTab\" class=\"mt-5\">Open link in a new tab</ngs-slide-toggle>\n</ngs-dialog-content>\n<ngs-dialog-actions>\n <button ngsButton (click)=\"cancel()\">Cancel</button>\n <button ngsButton=\"filled\"\n [ngs-dialog-close]=\"true\"\n [disabled]=\"form.invalid\" (click)=\"add()\">Apply</button>\n</ngs-dialog-actions>\n","import { Component, input, model, output } from '@angular/core';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Tooltip } from '@ngstarter-ui/components/tooltip';\n\nexport interface TextColor {\n name: string;\n color: string;\n type: string;\n}\n\n@Component({\n selector: 'ngs-text-color',\n imports: [\n Icon,\n Tooltip\n ],\n templateUrl: './text-color.component.html',\n styleUrl: './text-color.component.scss'\n})\nexport class TextColorComponent {\n recentlyUsed = model<TextColor[]>(\n localStorage ? JSON.parse(localStorage.getItem('ngsContentEditorRecentlyUsedTextColor') || '[]') : []\n );\n selectedTextColor = model<TextColor | null>(null);\n selectedBackgroundColor = model<TextColor | null>(null);\n\n textColors = input<TextColor[]>([\n {\n name: 'Default',\n color: '',\n type: 'text'\n },\n {\n name: 'Gray',\n color: '#7f7f7f',\n type: 'text'\n },\n {\n name: 'Brown',\n color: '#ae2012',\n type: 'text'\n },\n {\n name: 'Orange',\n color: '#fb5607',\n type: 'text'\n },\n {\n name: 'Yellow',\n color: '#ffa200',\n type: 'text'\n },\n {\n name: 'Green',\n color: '#40916c',\n type: 'text'\n },\n {\n name: 'Blue',\n color: '#00bbf9',\n type: 'text'\n },\n {\n name: 'Purple',\n color: '#907ad6',\n type: 'text'\n },\n {\n name: 'Pink',\n color: '#fa3faf',\n type: 'text'\n },\n {\n name: 'Red',\n color: '#ef233c',\n type: 'text'\n }\n ]);\n backgroundColors = input<TextColor[]>([\n {\n name: 'Default',\n color: '',\n type: 'background'\n },\n {\n name: 'Gray',\n color: '#e9ecef',\n type: 'background'\n },\n {\n name: 'Brown',\n color: '#ffe0c0',\n type: 'background'\n },\n {\n name: 'Orange',\n color: '#ffd8c6',\n type: 'background'\n },\n {\n name: 'Yellow',\n color: '#fff3b0',\n type: 'background'\n },\n {\n name: 'Green',\n color: '#eff6e0',\n type: 'background'\n },\n {\n name: 'Blue',\n color: '#edf6f9',\n type: 'background'\n },\n {\n name: 'Purple',\n color: '#e0aaff',\n type: 'background'\n },\n {\n name: 'Pink',\n color: '#fae0ec',\n type: 'background'\n },\n {\n name: 'Red',\n color: '#ffdccc',\n type: 'background'\n }\n ]);\n\n readonly textColorChanged = output<string>();\n readonly backgroundColorChanged = output<string>();\n\n selectRecentlyColor(color: TextColor) {\n if (color.type === 'text') {\n this.selectTextColor(color);\n } else if (color.type === 'background') {\n this.selectBackgroundColor(color);\n }\n }\n\n selectTextColor(color: TextColor) {\n this.selectedTextColor.set(color);\n this.textColorChanged.emit(color.color);\n this._addToRecently(color);\n }\n\n selectBackgroundColor(color: TextColor) {\n this.selectedBackgroundColor.set(color);\n this.backgroundColorChanged.emit(color.color);\n this._addToRecently(color);\n }\n\n private _addToRecently(color: TextColor) {\n const hasRecentlyUsed = this.recentlyUsed()\n .filter(recentlyColor => recentlyColor.name === color.name && recentlyColor.type === color.type)\n .length > 0;\n\n if (hasRecentlyUsed) {\n return;\n }\n\n let colors = [...this.recentlyUsed()];\n colors = colors.length >= 5 ? colors.slice(1, 5) : colors;\n this.recentlyUsed.set([...colors, color]);\n localStorage.setItem('ngsContentEditorRecentlyUsedTextColor', JSON.stringify(this.recentlyUsed()));\n }\n}\n","@if (recentlyUsed().length > 0) {\n <div class=\"mb-5\">\n <div class=\"text-xs text-neutral-700 text-semibold\">Recently colors</div>\n <div class=\"flex gap-2 flex-wrap mt-3\">\n @for (recentlyColor of recentlyUsed(); track recentlyColor) {\n @if (recentlyColor.type === 'text') {\n <button class=\"rounded-sm border border-border size-7 flex-none flex items-center justify-center cursor-pointer\"\n [style.color]=\"recentlyColor.color\" [ngsTooltip]=\"recentlyColor.name\"\n (click)=\"selectRecentlyColor(recentlyColor)\">\n <ngs-icon name=\"fluent:text-field-24-regular\"/>\n </button>\n } @else if (recentlyColor.type === 'background') {\n <button class=\"rounded-sm border border-border size-7 flex-none flex items-center justify-center cursor-pointer\"\n [style.background-color]=\"recentlyColor.color\" [ngsTooltip]=\"recentlyColor.name\"\n (click)=\"selectRecentlyColor(recentlyColor)\">\n </button>\n }\n }\n </div>\n </div>\n}\n\n<div class=\"mb-5\">\n <div class=\"text-xs text-neutral-700 text-semibold\">Text color</div>\n <div class=\"flex gap-2 flex-wrap mt-3\">\n @for (textColor of textColors(); track $index) {\n <button class=\"rounded-sm border border-border size-7 flex-none flex items-center justify-center cursor-pointer\n [&.is-selected]:outline [&.is-selected]:outline-primary\"\n [style.color]=\"textColor.color\" [ngsTooltip]=\"textColor.name\"\n [class.is-selected]=\"selectedTextColor()?.color === textColor.color\"\n (click)=\"selectTextColor(textColor)\">\n <ngs-icon name=\"fluent:text-field-24-regular\"/>\n </button>\n }\n </div>\n</div>\n\n<div>\n <div class=\"text-xs text-neutral-700 text-semibold\">Background color</div>\n <div class=\"flex gap-2 flex-wrap mt-3\">\n @for (backgroundColor of backgroundColors(); track $index) {\n <button class=\"rounded-sm border border-border size-7 flex-none flex items-center justify-center cursor-pointer\n [&.is-selected]:outline [&.is-selected]:outline-primary\"\n [style.background-color]=\"backgroundColor.color\" [ngsTooltip]=\"backgroundColor.name\"\n [class.is-selected]=\"selectedBackgroundColor()?.color === backgroundColor.color\"\n (click)=\"selectBackgroundColor(backgroundColor)\">\n </button>\n }\n </div>\n</div>\n","import {\n Component, computed,\n inject, Input, OnDestroy, OnInit, Renderer2, signal,\n} from '@angular/core';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { TextAlignment, TextHighlightService } from '../text-highlight.service';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Menu, MenuItem, MenuTrigger } from '@ngstarter-ui/components/menu';\nimport { ContentEditorItemProperty } from '../types';\nimport { AddLinkDialog } from '../_dialogs/add-link/add-link.dialog';\nimport { Dialog } from '@ngstarter-ui/components/dialog';\nimport { EditLinkDialog } from '../_dialogs/edit-link/edit-link.dialog';\nimport { DOCUMENT } from '@angular/common';\nimport { TextColorComponent } from '../text-color/text-color.component';\n\n@Component({\n selector: 'ngs-command-bar',\n imports: [\n Button,\n Icon,\n Menu,\n MenuItem,\n MenuTrigger,\n TextColorComponent\n ],\n templateUrl: './command-bar.component.html',\n styleUrl: './command-bar.component.scss',\n host: {\n 'class': 'ngs-command-bar'\n }\n})\nexport class CommandBarComponent implements OnInit, OnDestroy {\n private _document = inject(DOCUMENT);\n private _textHighlightService = inject(TextHighlightService);\n private _renderer = inject(Renderer2);\n private _dialog = inject(Dialog);\n\n @Input() observedElement: HTMLElement | null = null;\n\n props = signal<ContentEditorItemProperty[]>([]);\n\n alignment = computed(() => {\n const alignment = this.props().find(\n prop => prop.name === 'text-alignment'\n );\n return alignment?.value || 'left';\n });\n\n ngOnInit() {\n this._extractProps();\n }\n\n toggleBold(): void {\n this._textHighlightService.toggleWrapSelection('strong');\n }\n\n toggleItalic(): void {\n this._textHighlightService.toggleWrapSelection('em');\n }\n\n toggleCode(): void {\n this._textHighlightService.toggleWrapSelection('code', undefined, ['code']);\n }\n\n toggleStrike(): void {\n this._textHighlightService.toggleWrapSelection('s');\n }\n\n toggleUnderline(): void {\n this._textHighlightService.toggleWrapSelection('u');\n }\n\n toggleSuperscript(): void {\n this._textHighlightService.toggleWrapSelection('sup');\n }\n\n toggleSubscript(): void {\n this._textHighlightService.toggleWrapSelection('sub');\n }\n\n isLinkActive() {\n const fakeSelection = this._document.querySelector('.link-selection');\n\n if (fakeSelection) {\n return true;\n }\n\n return this._textHighlightService.isSelectionWrappedInTag('a');\n }\n\n isActive(tagName: string) {\n return this._textHighlightService.isSelectionWrappedInTag(tagName);\n }\n\n setTextAlignment(alignment: TextAlignment) {\n this._textHighlightService.setTextAlignment(alignment);\n this._extractProps();\n }\n\n isTextAlignment(alignment: TextAlignment) {\n return this.alignment() === alignment;\n }\n\n addLink() {\n this._textHighlightService.toggleWrapSelection('span', undefined, ['link-selection']);\n const dialogRef = this._dialog.open(AddLinkDialog, {\n width: '500px',\n disableClose: true,\n hasBackdrop: true\n });\n dialogRef.afterClosed().subscribe((res: any) => {\n this._textHighlightService.unwrapElementByClassAndSelectContents('link-selection');\n\n if (res && res.href) {\n this._textHighlightService.toggleWrapSelection('a', undefined, ['link'], {\n href: res.href,\n target: res.openInNewTab ? '_blank' : '_self'\n });\n }\n });\n }\n\n editLink() {\n const link = this._textHighlightService.getContainingAncestorByTagName('a');\n this._textHighlightService.toggleWrapSelection('span', undefined, ['link-selection']);\n\n if (!link) {\n return;\n }\n\n const dialogRef = this._dialog.open(EditLinkDialog, {\n data: {\n href: link.getAttribute('href'),\n openInNewTab: link.getAttribute('target') === '_blank',\n },\n width: '500px',\n disableClose: true,\n hasBackdrop: true\n });\n dialogRef.afterClosed().subscribe((res: any) => {\n this._textHighlightService.unwrapElementByClassAndSelectContents('link-selection');\n\n if (res) {\n if (res.href) {\n this._renderer.setAttribute(link, 'href', res.href);\n this._renderer.setAttribute(link, 'target', res.openInNewTab ? '_blank' : '_self');\n } else {\n this._textHighlightService.toggleWrapSelection('a');\n }\n }\n });\n }\n\n protected onMenuOpen() {\n\n\n this._textHighlightService.wrapSelection('span', undefined, ['text-selection']);\n }\n\n protected onMenuClose() {\n let textSelectionElement: HTMLElement | null = this._document.querySelector('.text-selection');\n\n if (textSelectionElement) {\n if (textSelectionElement.style.color || textSelectionElement.style.backgroundColor) {\n this._renderer.removeClass(textSelectionElement, 'text-selection');\n } else {\n this._textHighlightService.unwrapElementByClassAndSelectContents('text-selection');\n }\n }\n }\n\n protected preventMenuClose(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected onTextColorChanged(color: string) {\n let textSelectionElement: HTMLElement = this._document.querySelector('.text-selection') as HTMLElement;\n\n if (color) {\n this._renderer.setStyle(textSelectionElement, 'color', color);\n } else {\n this._renderer.removeStyle(textSelectionElement, 'color');\n }\n }\n\n protected onBackgroundColorChanged(color: string) {\n let textSelectionElement: HTMLElement = this._document.querySelector('.text-selection') as HTMLElement;\n\n if (color) {\n this._renderer.setStyle(textSelectionElement, 'backgroundColor', color);\n } else {\n this._renderer.removeStyle(textSelectionElement, 'backgroundColor');\n }\n }\n\n private _extractProps() {\n if (!this.observedElement) {\n return;\n }\n\n const props: ContentEditorItemProperty[] = [];\n\n for (const attribute of this.observedElement.attributes) {\n if (!attribute.name.startsWith('data-props-')) {\n continue;\n }\n\n const prop = {\n name: attribute.name.replace('data-props-', ''),\n value: attribute.value\n };\n props.push(prop);\n }\n\n this.props.set(props);\n }\n\n ngOnDestroy() {\n this._textHighlightService.unwrapElementByClassAndSelectContents('link-selection');\n this._unwrapTextSelection();\n }\n\n private _unwrapTextSelection() {\n let textSelectionElement: HTMLElement | null = this._document.querySelector('.text-selection');\n\n if (textSelectionElement) {\n if (!textSelectionElement.style.color && !textSelectionElement.style.backgroundColor) {\n this._textHighlightService.unwrapElementByClassAndSelectContents('text-selection');\n } else {\n this._renderer.removeClass(textSelectionElement, 'text-selection');\n }\n }\n }\n}\n","<div class=\"flex items-center gap-1\">\n <button ngsIconButton (click)=\"toggleBold()\"\n [class.is-active]=\"isActive('strong')\">\n <ngs-icon name=\"fluent:text-bold-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleItalic()\"\n [class.is-active]=\"isActive('em')\">\n <ngs-icon name=\"fluent:text-italic-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleStrike()\"\n [class.is-active]=\"isActive('s')\">\n <ngs-icon name=\"fluent:text-strikethrough-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleUnderline()\"\n [class.is-active]=\"isActive('u')\">\n <ngs-icon name=\"fluent:text-underline-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleSuperscript()\"\n [class.is-active]=\"isActive('sup')\">\n <ngs-icon name=\"fluent:text-superscript-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleSubscript()\"\n [class.is-active]=\"isActive('sub')\">\n <ngs-icon name=\"fluent:text-subscript-24-regular\"/>\n </button>\n <button ngsIconButton (click)=\"toggleCode()\"\n [class.is-active]=\"isActive('code')\">\n <ngs-icon name=\"fluent:code-24-regular\"/>\n </button>\n\n @if (isLinkActive()) {\n <button ngsIconButton (click)=\"editLink()\">\n <ngs-icon name=\"fluent:link-24-regular\"/>\n </button>\n } @else {\n <button ngsIconButton (click)=\"addLink()\">\n <ngs-icon name=\"fluent:link-add-24-regular\"/>\n </button>\n }\n <button ngsIconButton [ngsMenuTriggerFor]=\"alignMenu\">\n @switch (alignment()) {\n @case ('left') {\n <ngs-icon name=\"fluent:text-align-left-24-regular\"/>\n }\n @case ('center') {\n <ngs-icon name=\"fluent:text-align-center-24-regular\"/>\n }\n @case ('right') {\n <ngs-icon name=\"fluent:text-align-right-24-regular\"/>\n }\n }\n </button>\n <button ngsIconButton [ngsMenuTriggerFor]=\"formatColorText\" (menuOpened)=\"onMenuOpen()\">\n <ngs-icon name=\"fluent:text-color-24-regular\"/>\n </button>\n</div>\n\n<ngs-menu #alignMenu=\"ngsMenu\">\n <button class=\"[&.is-active]:!bg-secondary-container\"\n [class.is-active]=\"isTextAlignment('left')\"\n ngs-menu-item\n (click)=\"setTextAlignment('left')\">\n <ngs-icon name=\"fluent:text-align-left-24-regular\"/>\n Align Left\n </button>\n <button class=\"[&.is-active]:!bg-secondary-container\"\n [class.is-active]=\"isTextAlignment('center')\"\n ngs-menu-item\n (click)=\"setTextAlignment('center')\">\n <ngs-icon name=\"fluent:text-align-center-24-regular\"/>\n Align Center\n </button>\n <button class=\"[&.is-active]:!bg-secondary-container\"\n [class.is-active]=\"isTextAlignment('right')\"\n ngs-menu-item (click)=\"setTextAlignment('right')\">\n <ngs-icon name=\"fluent:text-align-right-24-regular\"/>\n Align Right\n </button>\n</ngs-menu>\n\n<ngs-menu #formatColorText=\"ngsMenu\" (closed)=\"onMenuClose()\">\n <div class=\"px-4 py-3\" (mousedown)=\"preventMenuClose($event)\">\n <ngs-text-color (textColorChanged)=\"onTextColorChanged($event)\"\n (backgroundColorChanged)=\"onBackgroundColorChanged($event)\"/>\n </div>\n</ngs-menu>\n","import { InjectionToken, Signal } from '@angular/core';\n\nexport const CONTENT_BUILDER = new InjectionToken('CONTENT_BUILDER');\nexport const CONTENT_EDITOR_BLOCK = new InjectionToken<ReadonlyArray<ContentEditorDataBlock>>('CONTENT_EDITOR_BLOCK');\n\nexport interface ContentEditorDataBlock {\n id: Signal<string>;\n getData(): any;\n focus(): void;\n isEmpty(): boolean;\n initialized: Signal<boolean>;\n}\n\nexport interface ContentEditorBlockEmpty {\n content: any;\n settings: {\n [prop: string]: any;\n }\n}\n\nexport interface ContentEditorBlock {\n id: string;\n type: string;\n content: any;\n isEmpty: boolean;\n props?: ContentEditorItemProperty[],\n settings: any;\n}\n\nexport interface ContentEditorBlockDef {\n component: () => any,\n type: string,\n empty: () => ContentEditorBlockEmpty,\n options: {\n [prop: string]: any;\n }\n}\n\nexport interface ContentEditorHeadingBlockSettings {\n level: number;\n}\n\nexport interface ContentEditorSuggestionHeading {\n type: 'item' | 'heading';\n title: string;\n}\n\nexport interface ContentEditorSuggestionItem {\n type: 'item' | 'heading';\n title: string;\n description: string;\n iconName: string;\n hotKeys: string;\n blockType: string;\n blockOptions: object;\n}\n\nexport interface ContentEditorImageContent {\n src: string;\n alt: string;\n [prop: string]: any;\n}\n\nexport interface ContentEditorVideoContent {\n src: string;\n caption: string;\n orientation?: 'portrait' | 'landscape';\n [prop: string]: any;\n}\n\nexport interface ContentEditorEmbedContent {\n url: string;\n type: string;\n}\n\nexport interface ContentEditorImageBlockSettings {\n // uploadFn: (file: File, base64: string | ArrayBuffer | null) => Promise<ContentEditorImageContent>;\n width?: number;\n height?: number;\n actualWidth?: number;\n actualHeight?: number;\n}\n\nexport interface ContentEditorVideoBlockSettings {\n width?: number;\n height?: number;\n actualWidth?: number;\n actualHeight?: number;\n}\n\nexport interface ContentEditorEmbedBlockSettings {\n width: number | null;\n height: number | null;\n}\n\nexport interface ContentEditorListItem {\n content: string;\n props?: ContentEditorItemProperty[];\n children: ContentEditorListItem[];\n [prop: string]: any;\n}\n\nexport interface ContentEditorListSettings {\n listStyle: string;\n}\n\nexport interface ContentEditorItemProperty {\n name: string;\n value: string;\n}\n\nexport interface ContentEditorTableBlockSettings {\n}\n\nexport interface ContentEditorOptions {\n [prop: string]: any;\n}\n","import { patchState, signalStore, withMethods, withState } from '@ngrx/signals';\nimport { ContentEditorBlock } from './types';\n\ntype ContentBuilderState = {\n focusedBlockId: string | null;\n activeBlockId: string | null;\n blocks: ContentEditorBlock[]\n};\n\nconst initialState: ContentBuilderState = {\n focusedBlockId: null,\n activeBlockId: null,\n blocks: []\n};\n\nexport const ContentBuilderStore = signalStore(\n withState(initialState),\n withMethods((store) => ({\n setFocusedBlockId(focusedBlockId: string | null): void {\n patchState(store, (state) => ({ focusedBlockId }));\n },\n setActiveBlockId(activeBlockId: string | null): void {\n patchState(store, (state) => ({ activeBlockId }));\n },\n setBlocks(blocks: ContentEditorBlock[]) {\n patchState(store, (state) => ({ blocks }));\n },\n addBlock(dataBlock: ContentEditorBlock, index: number): void {\n patchState(store, (state) => {\n const blocks = [...state.blocks];\n blocks.splice(index, 0, dataBlock);\n return {\n blocks\n }\n });\n },\n deleteBlock(blockId: string, index: number): void {\n patchState(store, (state) => {\n const blocks = [...state.blocks];\n blocks.splice(index, 1);\n return {\n blocks\n }\n });\n },\n updateBlock(blockId: string, data: any): void {\n patchState(store, (state) => {\n const blocks = [...state.blocks];\n const index = blocks.findIndex(block => block.id === blockId);\n if (index !== -1) {\n blocks[index] = {\n ...blocks[index],\n ...data\n };\n }\n return {\n blocks\n }\n });\n },\n moveBlock(fromIndex: number, toIndex: number): void {\n patchState(store, (state) => {\n const newBlocks = [...state.blocks];\n const [movedItem] = newBlocks.splice(fromIndex, 1);\n newBlocks.splice(toIndex, 0, movedItem);\n return {\n ...state,\n blocks: newBlocks,\n };\n });\n },\n }))\n);\n","// src/app/text-selection-popup.directive.ts\n\nimport {\n Directive,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n HostListener,\n Type,\n ViewContainerRef,\n ElementRef,\n Renderer2,\n NgZone\n} from '@angular/core';\nimport {\n Overlay,\n OverlayRef,\n GlobalPositionStrategy,\n OverlayContainer\n} from '@angular/cdk/overlay';\nimport {\n ComponentPortal\n} from '@angular/cdk/portal';\nimport { Subject, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\nexport interface ISelectionPopupComponent {\n observedElement?: HTMLElement | null;\n}\n\nconst POPUP_VERTICAL_OFFSET = 8;\n\n@Directive({\n selector: '[ngsTextSelectionPopup]',\n})\nexport class TextSelectionPopupDirective implements OnDestroy {\n\n @Input() targetComponent!: Type<ISelectionPopupComponent>;\n @Input() closestContentObserverClass: string | null = null;\n @Output() tagSelected = new EventEmitter<string | null>();\n\n private overlayRef: OverlayRef | null = null;\n private hostElement: HTMLElement;\n private currentSelectionRange: Range | null = null;\n private documentClickListener: (() => void) | null = null;\n private positionStrategy: GlobalPositionStrategy | null = null;\n private scrollListener: (() => void) | null = null;\n private scrollSubject = new Subject<void>();\n private scrollSubscription: Subscription | null = null;\n\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private overlayContainer: OverlayContainer,\n private ngZone: NgZone\n ) {\n this.hostElement = this.elementRef.nativeElement;\n this.scrollSubscription = this.scrollSubject.pipe(\n throttleTime(50, undefined, { leading: true, trailing: true })\n ).subscribe(() => {\n this.updatePopupPositionOnScroll();\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClickHostListener(event: MouseEvent): void {\n if ((event.target as HTMLElement).closest('.cdk-overlay-container')) {\n return;\n }\n\n this.processSelection();\n }\n\n @HostListener('document:keydown', ['$event'])\n onDocumentKeyDown(event: KeyboardEvent): void {\n if (!this.overlayRef) return;\n if (this.isEventInsidePopup(event)) return;\n const ignoredKeys = [\n 'Shift', 'Control', 'Alt', 'Meta', 'CapsLock',\n 'Escape', 'Tab',\n 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'Insert', 'ContextMenu',\n 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'\n ];\n if (ignoredKeys.includes(event.key)) {\n setTimeout(() => this.processSelection(), 0);\n return;\n }\n\n if ((event.target as HTMLElement).closest('.cdk-overlay-container')) {\n return;\n }\n\n this.closePopup();\n }\n\n private processSelection(): void {\n const selection = window.getSelection();\n\n if (!selection || selection.isCollapsed || selection.rangeCount === 0) {\n if (this.overlayRef && !this.isFocusInsidePopup()) {\n this.closePopup();\n }\n this.currentSelectionRange = null;\n return;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.hostElement.contains(range.startContainer) || !this.hostElement.contains(range.endContainer)) {\n this.closePopupIfNeeded();\n this.currentSelectionRange = null;\n return;\n }\n\n let observedElement: HTMLElement | null = null;\n if (this.closestContentObserverClass) {\n observedElement = this.findClosestElementWithClass(range.startContainer, this.closestContentObserverClass);\n if (!observedElement) {\n this.closePopupIfNeeded();\n this.currentSelectionRange = null;\n return;\n }\n }\n\n const selectedText = selection.toString().trim();\n if (selectedText) {\n const selectionRects = range.getClientRects();\n if (selectionRects.length > 0) {\n const startRect = selectionRects[0];\n const lastRect = selectionRects[selectionRects.length - 1];\n const hostRect = this.hostElement.getBoundingClientRect();\n const hostCenterX = hostRect.left + hostRect.width / 2;\n const selectionStartX = startRect.left;\n const selectionEndX = lastRect.right;\n const selectionCenterX = selectionStartX + (selectionEndX - selectionStartX) / 2;\n const alignRight = selectionCenterX >= hostCenterX;\n const scrollX = document.body.scrollLeft;\n const scrollY = document.body.scrollTop;\n const anchorX = selectionStartX + scrollX;\n const endX = selectionEndX + scrollX;\n const anchorY = startRect.top + scrollY;\n const containingTagName = this.getContainingTagName(range);\n const newRange = range.cloneRange();\n\n if (!this.overlayRef || !this.areRangesEqual(this.currentSelectionRange, newRange)) {\n this.closePopupIfNeeded();\n this.currentSelectionRange = newRange;\n this.showPopup({ x: anchorX, y: anchorY }, endX, alignRight, observedElement);\n this.tagSelected.emit(containingTagName);\n }\n } else { this.closePopupIfNeeded(); this.currentSelectionRange = null; }\n } else { this.closePopupIfNeeded(); this.currentSelectionRange = null; }\n }\n\n private showPopup(anchorPosition: { x: number; y: number }, selectionEndX: number, alignRight: boolean, observedElement: HTMLElement | null): void {\n if (!this.targetComponent || this.overlayRef) return;\n\n this.positionStrategy = this.overlay.position().global();\n this.positionStrategy.left(`${anchorPosition.x}px`).top(`${anchorPosition.y}px`);\n\n this.overlayRef = this.overlay.create({\n positionStrategy: this.positionStrategy,\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n });\n\n const portal = new ComponentPortal(this.targetComponent, this.viewContainerRef);\n const componentRef = this.overlayRef.attach(portal);\n\n if (componentRef.instance && 'observedElement' in componentRef.instance) {\n componentRef.instance.observedElement = observedElement;\n }\n\n if (this.overlayRef) {\n Promise.resolve().then(() => {\n if (this.overlayRef && this.positionStrategy) {\n try {\n const overlayElement = this.overlayRef.overlayElement;\n const popupHeight = overlayElement.offsetHeight;\n const popupWidth = overlayElement.offsetWidth;\n if (popupHeight > 0 && popupWidth > 0) {\n const correctTop = anchorPosition.y - popupHeight - POPUP_VERTICAL_OFFSET;\n const correctLeft = alignRight ? selectionEndX - popupWidth : anchorPosition.x;\n this.positionStrategy.left(`${correctLeft}px`).top(`${correctTop}px`);\n this.overlayRef.updatePosition();\n }\n } catch(e) { console.error(\"Error correcting initial popup position:\", e); }\n this.addDocumentClickListener();\n this.addScrollListener();\n }\n });\n }\n }\n\n private closePopupIfNeeded(): void {\n if (this.overlayRef) {\n this.closePopup();\n }\n }\n\n private closePopup(): void {\n if (!this.overlayRef) return;\n this.overlayRef.dispose(); this.overlayRef = null;\n this.positionStrategy = null; this.currentSelectionRange = null;\n this.removeDocumentClickListener();\n this.removeScrollListener();\n }\n\n private addScrollListener(): void {\n if (this.scrollListener) return;\n this.ngZone.runOutsideAngular(() => {\n this.scrollListener = this.renderer.listen(document, 'scroll', (event) => {\n this.scrollSubject.next();\n });\n });\n }\n\n private removeScrollListener(): void {\n if (this.scrollListener) { this.scrollListener(); this.scrollListener = null; }\n }\n\n private updatePopupPositionOnScroll(): void {\n if (!this.overlayRef || !this.positionStrategy || !this.currentSelectionRange) return;\n try {\n const selectionRects = this.currentSelectionRange.getClientRects();\n if (selectionRects.length > 0) {\n const startRect = selectionRects[0];\n const lastRect = selectionRects[selectionRects.length - 1];\n const hostRect = this.hostElement.getBoundingClientRect();\n const hostCenterX = hostRect.left + hostRect.width / 2;\n const selectionStartX = startRect.left;\n const selectionEndX = lastRect.right;\n const selectionCenterX = selectionStartX + (selectionEndX - selectionStartX) / 2;\n const alignRight = selectionCenterX >= hostCenterX;\n const scrollX = document.body.scrollLeft;\n const scrollY = document.body.scrollTop;\n const textTop = startRect.top + scrollY;\n const popupElement = this.overlayRef.overlayElement;\n const popupHeight = popupElement.offsetHeight;\n const popupWidth = popupElement.offsetWidth;\n let newX: number;\n if (alignRight) {\n newX = (lastRect.right + scrollX) - popupWidth;\n } else {\n newX = startRect.left + scrollX;\n }\n const newY = textTop - popupHeight - POPUP_VERTICAL_OFFSET;\n this.ngZone.run(() => {\n if (this.overlayRef && this.positionStrategy) {\n this.positionStrategy.left(`${newX}px`).top(`${newY}px`);\n this.overlayRef.updatePosition();\n }\n });\n } else { this.ngZone.run(() => this.closePopup()); }\n } catch(e) {\n console.error(\"Error updating popup position on scroll:\", e);\n this.ngZone.run(() => this.closePopup());\n }\n }\n\n private findClosestElementWithClass(startNode: Node, className: string): HTMLElement | null {\n let currentNode: Node | null = startNode;\n const hostParent = this.hostElement.parentNode;\n while (currentNode && currentNode !== hostParent && currentNode !== document.body && currentNode !== document.documentElement) {\n if (currentNode instanceof Element && currentNode.classList.contains(className)) {\n return currentNode as HTMLElement;\n }\n currentNode = currentNode.parentNode;\n }\n if(this.hostElement.classList.contains(className)){\n return this.hostElement;\n }\n return null;\n }\n\n private getContainingTagName(range: Range): string | null {\n let container: Node | null = range.commonAncestorContainer;\n while (container && container.nodeType !== Node.ELEMENT_NODE) {\n container = container.parentNode as Node | null;\n }\n return container instanceof Element ? container.tagName : null;\n }\n\n private addDocumentClickListener(): void {\n if (this.documentClickListener) return;\n this.documentClickListener = this.renderer.listen(document, 'click', (event: MouseEvent) => {\n this.handleDocumentClick(event);\n });\n }\n\n private removeDocumentClickListener(): void {\n if (this.documentClickListener) { this.documentClickListener(); this.documentClickListener = null; }\n }\n\n private handleDocumentClick(event: MouseEvent): void {\n if (!this.overlayRef || !event.target) return;\n const clickedElement = event.target as Node;\n if (this.isEventInsidePopup(event)) return;\n const overlayContainerElement = this.overlayContainer.getContainerElement();\n if (overlayContainerElement.contains(clickedElement)) return;\n this.closePopup();\n }\n\n private isEventInsidePopup(event: MouseEvent | KeyboardEvent): boolean {\n if (!this.overlayRef?.overlayElement || !event.target) return false;\n return this.overlayRef.overlayElement.contains(event.target as Node);\n }\n\n private isClickInsidePopup(node: Node): boolean {\n return !!this.overlayRef?.overlayElement?.contains(node);\n }\n\n private isFocusInsidePopup(): boolean {\n if (!this.overlayRef?.overlayElement || !document.activeElement) return false;\n return this.overlayRef.overlayElement.contains(document.activeElement);\n }\n\n private areRangesEqual(r1: Range | null, r2: Range | null): boolean {\n if (!r1 || !r2) return r1 === r2;\n return (\n r1.commonAncestorContainer === r2.commonAncestorContainer &&\n r1.startContainer === r2.startContainer &&\n r1.endContainer === r2.endContainer &&\n r1.startOffset === r2.startOffset &&\n r1.endOffset === r2.endOffset\n );\n }\n\n ngOnDestroy(): void {\n this.closePopup();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = null;\n }\n this.removeDocumentClickListener();\n this.removeScrollListener();\n }\n}\n","import { Directive, ElementRef, inject, input, NgZone, OnDestroy, PLATFORM_ID, Renderer2, signal } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { CONTENT_BUILDER } from '../types';\nimport { ContentBuilderComponent } from '../content-builder/content-builder.component';\nimport SelectionArea from '@viselect/vanilla';\n\n/**\n * Directive to enable mouse-drag selection of child blocks inside a container.\n *\n * Behavior:\n * - Drag can be started only from an area that is NOT inside a block (matched by `blockSelector`).\n * - While dragging, the directive creates a dynamic selection rectangle element with the\n * class `selectionAreaClass` (default: `ngs-textContent-builder-selection-area`).\n * - Any block that intersects the selection rectangle receives `selectedClass` (default: `is-selected`).\n * When the block leaves the selection area, the class is removed.\n */\n@Directive({\n selector: '[ngsBlockSelection]'\n})\nexport class BlockSelectionDirective implements OnDestroy {\n private document = inject(DOCUMENT);\n private _platformId = inject(PLATFORM_ID);\n private contentBuilder = inject<ContentBuilderComponent>(CONTENT_BUILDER);\n\n /** CSS selector for selectable blocks. Defaults to `.block`. */\n blockSelector = input<string>('.block-content');\n\n autoScrollContainerSelector = input<string | null>(null);\n\n /** CSS class applied to the dynamic selection rectangle element. */\n selectionAreaClass = input<string>('selection-area');\n\n /**\n * List of CSS class names to ignore when starting selection.\n * If the mousedown target or any of its ancestors (via closest) contains any of\n * these classes, the selection will NOT start. Class names can be provided with\n * or without leading dot (e.g., 'toolbar-button' or '.toolbar-button').\n */\n ignoreClasses = input<string[]>(['.block-controls']);\n\n private elRef = inject(ElementRef) as ElementRef<HTMLElement>;\n\n private host: HTMLElement = this.elRef.nativeElement;\n private selection: SelectionArea | null = null;\n\n // Track only blockIds we toggled via drag selection to avoid interfering with other selection sources\n private selectedSet = new Set<string>();\n\n constructor() {\n if (isPlatformBrowser(this._platformId)) {\n this.selection = new SelectionArea({\n selectables: [this.blockSelector()],\n boundaries: [this.host],\n container: this.host,\n features: {\n touch: false,\n range: true,\n deselectOnBlur: true,\n singleTap: {\n allow: true,\n intersect: 'native'\n }\n },\n selectionAreaClass: this.selectionAreaClass()\n }).on('beforestart', ({ event }) => {\n const targetEl = event?.target as HTMLElement | null;\n if (this.isInIgnoredArea(targetEl) || targetEl?.closest(this.blockSelector())) {\n return false;\n }\n if (event) {\n event.preventDefault();\n }\n return true;\n }).on('stop', () => {\n this.contentBuilder.isSelectionOfBlocksActive.set(false);\n }).on('start', ({ store, event }) => {\n this.contentBuilder.isSelectionOfBlocksActive.set(true);\n\n const activeElement = this.document.activeElement as HTMLElement;\n if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA' || activeElement.isContentEditable)) {\n activeElement.blur();\n }\n this.host.focus();\n\n if (event && !event.ctrlKey && !event.metaKey) {\n this.contentBuilder.unselectSelectedBlocks();\n this.selectedSet.clear();\n }\n }).on('move', ({ store: { changed: { added, removed } } }) => {\n added.forEach(el => {\n const blockEl = el.closest('.block') as HTMLElement | null;\n const blockId = blockEl?.getAttribute('data-block-id');\n if (blockId) {\n this.contentBuilder.selectBlock(blockId, true);\n this.selectedSet.add(blockId);\n }\n });\n removed.forEach(el => {\n const blockEl = el.closest('.block') as HTMLElement | null;\n const blockId = blockEl?.getAttribute('data-block-id');\n if (blockId && this.selectedSet.has(blockId)) {\n this.contentBuilder.unselectBlock(blockId);\n this.selectedSet.delete(blockId);\n }\n });\n });\n }\n }\n\n ngOnDestroy(): void {\n this.selection?.destroy();\n }\n\n private isInIgnoredArea(target: HTMLElement | null): boolean {\n const list = this.ignoreClasses();\n if (!target || !Array.isArray(list) || list.length === 0) return false;\n const normalized = list\n .map(c => (c ?? '').toString().trim())\n .filter(Boolean)\n .map(c => c.startsWith('.') ? c.slice(1) : c);\n if (normalized.length === 0) return false;\n\n let el: HTMLElement | null = target;\n // Traverse up through ancestors to emulate \"closest\" semantics for class names\n while (el) {\n for (const cls of normalized) {\n if (el.classList && el.classList.contains(cls)) return true;\n }\n el = el.parentElement;\n }\n return false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n inject,\n input, numberAttribute,\n OnInit, OnDestroy, output, PLATFORM_ID,\n signal,\n ElementRef,\n AfterViewInit,\n effect, EffectRef, runInInjectionContext, EnvironmentInjector, ChangeDetectorRef\n} from '@angular/core';\nimport {\n CONTENT_BUILDER,\n ContentEditorBlock,\n ContentEditorBlockDef,\n ContentEditorItemProperty,\n ContentEditorOptions,\n} from '../types';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { AsyncPipe, isPlatformServer, NgComponentOutlet } from '@angular/common';\nimport { v7 as uuid } from 'uuid';\nimport { ContentBuilderStore } from '../content-builder.store';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragHandle,\n CdkDragPlaceholder,\n CdkDragStart,\n CdkDropList,\n moveItemInArray\n} from '@angular/cdk/drag-drop';\nimport { Menu, MenuItem, MenuTrigger, MenuCloseReason, MenuHeading } from '@ngstarter-ui/components/menu';\nimport { ConfirmManager } from '@ngstarter-ui/components/confirm';\nimport { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { ContentEditorQuoteBlock } from '../_builder/quote-block/quote-block.component';\nimport { TextSelectionPopupDirective } from '../text-selection-popup.directive';\nimport { CommandBarComponent } from '../command-bar/command-bar.component';\nimport { BlockSelectionDirective } from '../directives/block-selection.directive';\nimport { Popover, PopoverTriggerForDirective } from '@ngstarter-ui/components/popover';\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\nimport { auditTime, distinctUntilChanged, map, startWith, shareReplay } from 'rxjs/operators';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { List, ListItem, ListItemIcon, ListItemTitle } from '@ngstarter-ui/components/list';\n\n@Component({\n selector: 'ngs-content-builder',\n exportAs: 'ngsContentBuilder',\n imports: [\n Icon,\n NgComponentOutlet,\n AsyncPipe,\n CdkDrag,\n CdkDropList,\n CdkDragHandle,\n CdkDragPlaceholder,\n Menu,\n MenuItem,\n MenuTrigger,\n CdkMonitorFocus,\n TextSelectionPopupDirective,\n PopoverTriggerForDirective,\n Popover,\n ListItemTitle,\n ListItemIcon,\n ListItem,\n List,\n MenuHeading\n ],\n hostDirectives: [\n {\n directive: BlockSelectionDirective,\n inputs: [\n 'autoScrollContainerSelector',\n ]\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n ContentBuilderStore,\n {\n provide: CONTENT_BUILDER,\n useExisting: forwardRef(() => ContentBuilderComponent)\n }\n ],\n templateUrl: './content-builder.component.html',\n styleUrl: './content-builder.component.scss',\n host: {\n 'class': 'ngs-content-builder',\n '[class.is-block-dragging]': '_blockDragging()',\n '[class.is-selection-of-blocks-active]': 'isSelectionOfBlocksActive()',\n '[class.select-none]': 'isSelectionOfBlocksActive()',\n '[style.user-select]': 'isSelectionOfBlocksActive() ? \"none\" : null',\n 'tabindex': '0',\n '(paste)': '_onPaste($event)',\n '(keydown)': '_onKeyDown($event)',\n }\n})\nexport class ContentBuilderComponent implements OnInit, AfterViewInit, OnDestroy {\n private _platformId = inject(PLATFORM_ID);\n private _store = inject(ContentBuilderStore);\n private elRef = inject(ElementRef<HTMLElement>);\n private envInjector = inject(EnvironmentInjector);\n private cdr = inject(ChangeDetectorRef);\n private confirmManager = inject(ConfirmManager);\n private _resolvedScrollContainer: Element | Window | null = null;\n private _scrollEffect?: EffectRef;\n private _scrollSubject = new Subject<number>();\n private _scrollBindSub: Subscription | null = null;\n private _scroll$: Observable<number> | null = null;\n\n public get scrollContainerScrolled(): Observable<number> {\n if (!this._scroll$) {\n this._scroll$ = this._scrollSubject.asObservable().pipe(shareReplay(1));\n }\n return this._scroll$;\n }\n\n private blockDefs = signal<ContentEditorBlockDef[]>([\n {\n component: () => import('../_builder/divider-block/divider-block.component').then(c => c.DividerBlockComponent),\n type: 'divider',\n options: {},\n empty: () => {\n return {\n content: null,\n settings: {}\n };\n }\n },\n {\n component: () => import('../_builder/paragraph-block/paragraph-block.component').then(c => c.ParagraphBlockComponent),\n type: 'paragraph',\n options: {},\n empty: () => {\n return {\n content: '',\n props: [],\n settings: {}\n };\n }\n },\n {\n component: () => import('../_builder/code-block/code-block.component').then(c => c.CodeBlockComponent),\n type: 'code',\n options: {},\n empty: () => {\n return {\n content: '',\n settings: {\n language: 'none',\n }\n };\n }\n },\n {\n component: () => import('../_builder/heading-block/heading-block.component').then(c => c.HeadingBlockComponent),\n type: 'heading',\n options: {},\n empty: () => {\n return {\n content: '',\n props: [],\n settings: {\n level: 2\n }\n };\n }\n },\n {\n component: () => import('../_builder/image-block/image-block.component').then(c => c.ImageBlockComponent),\n type: 'image',\n options: {\n uploadFn: (file: File, base64: string) => {\n return new Promise((resolve) => {\n resolve(base64);\n });\n }\n },\n empty: () => {\n return {\n content: {\n src: '',\n alt: ''\n },\n settings: {\n alignment: 'center',\n width: 'auto',\n height: 'auto',\n align: 'center',\n natualWidth: 'auto',\n naturalHeight: 'auto'\n }\n };\n }\n },\n {\n component: () => import('../_builder/video-block/video-block.component').then(c => c.VideoBlockComponent),\n type: 'video',\n options: {\n uploadFn: (file: File, base64: string) => {\n return new Promise((resolve) => {\n resolve(base64);\n });\n }\n },\n empty: () => {\n return {\n content: {\n src: '',\n caption: '',\n orientation: 'landscape'\n },\n settings: {\n alignment: 'center',\n width: 'auto',\n height: 'auto',\n align: 'center',\n natualWidth: 'auto',\n naturalHeight: 'auto'\n }\n };\n }\n },\n {\n component: () => import('../_builder/list-block/list-block.component').then(c => c.ListBlockComponent),\n type: 'bulletList',\n options: {},\n empty: () => {\n return {\n content: [],\n settings: {\n listStyle: 'bullet'\n }\n };\n }\n },\n {\n component: () => import('../_builder/list-block/list-block.component').then(c => c.ListBlockComponent),\n type: 'orderedList',\n options: {},\n empty: () => {\n return {\n content: [],\n settings: {\n listStyle: 'ordered'\n }\n };\n }\n },\n {\n component: () => import('../_builder/table-block/table-block.component').then(c => c.TableBlockComponent),\n type: 'table',\n options: {},\n empty: () => {\n return {\n content: [\n [\n {\n content: '',\n props: [],\n styles: {},\n options: {\n colspan: 1,\n rowspan: 1\n },\n },\n {\n content: '',\n props: [],\n styles: {},\n options: {\n colspan: 1,\n rowspan: 1\n }\n },\n {\n content: '',\n props: [],\n styles: {},\n options: {\n colspan: 1,\n rowspan: 1\n }\n }\n ],\n [\n {\n content: '',\n props: [],\n styles: {},\n options: {\n colspan: 1,\n rowspan: 1\n }\n },\n {\n content: '',\n props: [],\n options: {\n colspan: 1,\n rowspan: 1\n }\n },\n {\n content: '',\n props: [],\n styles: {},\n options: {\n colspan: 1,\n rowspan: 1\n }\n }\n ],\n ],\n settings: {}\n };\n }\n },\n {\n component: () => import('../_builder/quote-block/quote-block.component').then(c => c.QuoteBlockComponent),\n type: 'quote',\n options: {},\n empty: (): ContentEditorQuoteBlock => {\n return {\n content: {\n cite: {\n content: '',\n props: []\n },\n caption: {\n content: '',\n props: []\n }\n },\n settings: {}\n };\n }\n },\n {\n component: () => import('../_builder/embed-block/embed-block').then(c => c.EmbedBlock),\n type: 'embed',\n options: {},\n empty: () => {\n return {\n content: {\n url: '',\n type: ''\n },\n settings: {}\n };\n }\n },\n ]);\n\n content = input<ContentEditorBlock[]>([]);\n contentChangedDelay = input(500, {\n transform: numberAttribute\n });\n suggestions = input<any>([\n {\n type: 'heading',\n title: 'Headings',\n },\n {\n type: 'item',\n title: 'Heading 1',\n description: 'Top-level heading',\n iconName: 'fluent:text-header-1-24-regular',\n hotKeys: 'ALT + 1',\n blockType: 'heading',\n blockSettings: {\n level: 1\n }\n },\n {\n type: 'item',\n title: 'Heading 2',\n description: 'Key section heading',\n iconName: 'fluent:text-header-2-24-regular',\n hotKeys: 'ALT + 2',\n blockType: 'heading',\n blockSettings: {\n level: 2\n }\n },\n {\n type: 'item',\n title: 'Heading 3',\n description: 'Subsection and group heading',\n iconName: 'fluent:text-header-3-24-regular',\n hotKeys: 'ALT + 3',\n blockType: 'heading',\n blockSettings: {\n level: 3\n }\n },\n {\n type: 'heading',\n title: 'Basic blocks',\n },\n {\n type: 'item',\n title: 'Paragraph',\n description: 'The body of your document',\n iconName: 'fluent:text-paragraph-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'paragraph',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Numbered List',\n description: 'List with ordered items',\n iconName: 'fluent:text-bullet-list-tree-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'orderedList',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Bullet List',\n description: 'List with unordered items',\n iconName: 'fluent:text-bullet-list-ltr-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'bulletList',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Quote',\n description: 'Quote or excerpt',\n iconName: 'fluent:text-quote-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'quote',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Code',\n description: 'The code block with syntax highlighting',\n iconName: 'fluent:code-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'code',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Divider',\n description: 'Visually divide blocks',\n iconName: 'fluent:minimize-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'divider',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Table',\n description: 'Table with editable cells',\n iconName: 'fluent:table-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'table',\n blockSettings: {}\n },\n {\n type: 'heading',\n title: 'Media',\n },\n {\n type: 'item',\n title: 'Image',\n description: 'Image with caption',\n iconName: 'fluent:image-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'image',\n blockSettings: {}\n },\n {\n type: 'item',\n title: 'Video',\n description: 'Video with caption',\n iconName: 'fluent:video-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'video',\n blockSettings: {}\n },\n {\n type: 'heading',\n title: 'Embeds',\n },\n {\n type: 'item',\n title: 'Embed',\n description: 'For PDFs, Google Maps and more',\n iconName: 'fluent:window-24-regular',\n hotKeys: 'ALT + 0',\n blockType: 'embed',\n blockSettings: {\n width: null,\n height: null\n }\n },\n ]);\n options = input<ContentEditorOptions>({});\n scrollContainer = input<string>();\n\n readonly contentChanged = output<ContentEditorBlock[]>();\n\n readonly focusChanged = new EventEmitter<void>();\n protected _content = signal<ContentEditorBlock[]>([]);\n protected blockDefsMap = new Map<string, any>();\n protected blockDefsOptionsMap = new Map<string, any>();\n protected _blockDragging = signal(false);\n public isSelectionOfBlocksActive = signal(false);\n\n _oldContent = signal({});\n readonly selectedBlocksModel = new SelectionModel(true);\n\n commandBar = CommandBarComponent;\n\n get api() {\n return {\n focusChanged: new EventEmitter<void>(),\n }\n }\n\n // Build helper maps: component map and merged options map\n private buildBlockDefMaps() {\n const overrides = this.options() || {} as ContentEditorOptions;\n this.blockDefsMap = new Map<string, any>();\n this.blockDefsOptionsMap = new Map<string, any>();\n\n this.blockDefs().forEach((def) => {\n if (!this.blockDefsMap.has(def.type)) {\n this.blockDefsMap.set(def.type, def.component());\n }\n const merged = {\n ...(def.options || {}),\n ...(overrides[def.type] || {})\n };\n this.blockDefsOptionsMap.set(def.type, merged);\n });\n }\n\n getBlockDefOption(type: string, key: string): any {\n return this.blockDefsOptionsMap.get(type)[key];\n }\n\n ngOnInit() {\n const content = this.content();\n\n if (content.length > 0) {\n const lastItem = content[content.length - 1];\n\n if (lastItem.type !== 'paragraph' || (lastItem.type === 'paragraph' && lastItem.content !== '')) {\n content.push(this._createBlock('paragraph'));\n }\n } else {\n content.push(this._createBlock('paragraph'));\n }\n\n this._content.set(content);\n this._oldContent.set(this._content());\n\n // Build block component map and merged options map\n this.buildBlockDefMaps();\n\n this._store.setBlocks(JSON.parse(JSON.stringify(content)));\n\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n if (content.length === 1) {\n this.focusBlock(content[0].id);\n }\n }\n\n ngAfterViewInit(): void {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n // Initial resolve after view init\n this._resolvedScrollContainer = this._computeScrollContainer();\n // Привязываем подписку на скролл к текущему контейнеру\n this._rebindScrollListener();\n\n // Watch for changes of the input selector and recompute when it changes.\n // Create the signal effect within a valid injection context to satisfy Angular's requirement.\n runInInjectionContext(this.envInjector, () => {\n this._scrollEffect = effect(() => {\n const _selector = this.scrollContainer();\n this._resolvedScrollContainer = this._computeScrollContainer();\n // Перепривязка слушателя при смене контейнера\n this._rebindScrollListener();\n });\n });\n }\n\n /**\n * Public accessor for the resolved scroll container. If not computed yet, it will compute now.\n */\n getScrollContainer(): Element | Window {\n if (isPlatformServer(this._platformId)) {\n return ({} as any);\n }\n if (!this._resolvedScrollContainer) {\n this._resolvedScrollContainer = this._computeScrollContainer();\n }\n return this._resolvedScrollContainer || (window as unknown as Window);\n }\n\n /**\n * Resolves the scroll container element according to the following rules:\n * - If `scrollContainer` input is provided, uses `closest(selector)` starting from the host element.\n * - If not provided or `closest` returned null, automatically finds the first scrollable parent by walking up the DOM.\n * - Fallback to `document.scrollingElement` or `window` if nothing suitable found.\n */\n private _computeScrollContainer(): Element | Window | null {\n if (isPlatformServer(this._platformId)) {\n return null;\n }\n const host: HTMLElement = this.elRef?.nativeElement as HTMLElement;\n if (!host) {\n return (document.scrollingElement || window);\n }\n\n const selector = this.scrollContainer();\n if (selector && typeof selector === 'string') {\n try {\n const matched = host.closest(selector);\n if (matched) {\n return matched as Element;\n }\n } catch (_) {\n // If selector is invalid, ignore and fallback to auto detection\n }\n }\n\n // Auto-detect by traversing parents\n let parent: HTMLElement | null = host.parentElement;\n while (parent) {\n if (this._isElementScrollable(parent)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n\n return (document.scrollingElement || window);\n }\n\n private _isElementScrollable(el: HTMLElement): boolean {\n const style = getComputedStyle(el);\n const overflowY = style.overflowY;\n const overflowX = style.overflowX;\n const canScrollY = (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') && el.scrollHeight > el.clientHeight;\n const canScrollX = (overflowX === 'auto' || overflowX === 'scroll' || overflowX === 'overlay') && el.scrollWidth > el.clientWidth;\n return canScrollY || canScrollX;\n }\n\n private _rebindScrollListener(): void {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n // Отписываемся от предыдущего контейнера, если был\n if (this._scrollBindSub) {\n try {\n this._scrollBindSub.unsubscribe();\n } catch {\n }\n this._scrollBindSub = null;\n }\n const container = this._resolvedScrollContainer ?? this._computeScrollContainer();\n if (!container) {\n return;\n }\n // Формируем источник скролла\n const getTop = () => {\n if (container instanceof Window) {\n return container.scrollY || (container as any).pageYOffset || 0;\n }\n return (container as Element).scrollTop || 0;\n };\n const source$ = fromEvent(container as any, 'scroll').pipe(\n auditTime(50),\n map(() => getTop()),\n startWith(getTop()),\n distinctUntilChanged(),\n );\n // Подписка: проксируем значения в общий Subject\n this._scrollBindSub = source$.subscribe(top => {\n this._scrollSubject.next(top);\n });\n }\n\n // удалён дубликат ngOnDestroy — см. реализацию в конце класса\n\n appendBlock(type: string, focus: boolean = true) {\n this.insertBlock(type, this._content().length, {}, focus);\n }\n\n insertBlock(type: string, index: number, options?: object, focus: boolean = true, content?: any): any {\n const isLastIndex = index === this._content().length;\n const newBlock = this._createBlock(type, options, content);\n\n if (focus) {\n this.focusBlock(newBlock.id);\n }\n\n this._content.update((data: ContentEditorBlock[]) => {\n return [...data.slice(0, index), newBlock, ...data.slice(index)];\n });\n this._store.addBlock(newBlock, index);\n\n if (isLastIndex && this._content()[index].type !== 'paragraph') {\n this.appendBlock('paragraph', false);\n }\n\n this.emitContentChangeEvent();\n\n return newBlock;\n }\n\n private _createBlock(type: string, settings = {}, content?: any): ContentEditorBlock {\n const blockDef = this.blockDefs().find(\n blockDefItem => blockDefItem.type === type\n ) as ContentEditorBlockDef;\n const empty = blockDef.empty();\n\n if (settings) {\n empty.settings = {\n ...empty.settings,\n ...settings\n };\n }\n\n if (content !== undefined) {\n empty.content = content;\n }\n\n return {\n id: uuid(),\n type: blockDef.type,\n isEmpty: content === undefined || content === '' || (Array.isArray(content) && content.length === 0),\n ...empty\n };\n }\n\n addBlock(type: string, options: object, index: number = -1) {\n if (index === -1) {\n if (this._store.activeBlockId()) {\n index = this._content().findIndex(dataBlock => dataBlock.id === this._store.activeBlockId()) + 1;\n } else {\n index = this._content().length;\n }\n }\n\n this.insertBlock(type, index, options);\n }\n\n duplicateBlock(blockId: string) {\n const index = this._content().findIndex(dataBlock => dataBlock.id === blockId);\n if (index === -1) {\n return;\n }\n\n const original = this._content()[index];\n\n // Deep clone mutable fields to avoid shared references\n const clonedContent = original.content != null ? JSON.parse(JSON.stringify(original.content)) : original.content;\n const clonedSettings = original.settings != null ? JSON.parse(JSON.stringify(original.settings)) : original.settings;\n const clonedProps = original.props != null ? JSON.parse(JSON.stringify(original.props)) : original.props;\n\n const duplicated: ContentEditorBlock = {\n ...original,\n id: uuid(),\n isEmpty: false,\n content: clonedContent,\n settings: clonedSettings,\n props: clonedProps,\n } as ContentEditorBlock;\n\n const insertIndex = index + 1;\n this._content.update((data: ContentEditorBlock[]) => {\n data.splice(insertIndex, 0, duplicated);\n return data;\n });\n this._store.addBlock(duplicated, insertIndex);\n\n this.focusBlock(duplicated.id);\n this.emitContentChangeEvent();\n }\n\n duplicateSelectedBlocks(popover: Popover) {\n const selectedIds = [...this.selectedBlocksModel.selected] as string[];\n if (!selectedIds.length) return;\n\n // Process in visual order (top to bottom)\n const ordered = selectedIds\n .map(id => ({ id, index: this._content().findIndex(b => b.id === id) }))\n .filter(x => x.index !== -1)\n .sort((a, b) => a.index - b.index)\n .map(x => x.id);\n\n const newIds: string[] = [];\n\n for (const id of ordered) {\n // Get current index of the original before duplicating\n const idx = this._content().findIndex(b => b.id === id);\n if (idx === -1) continue;\n\n this.duplicateBlock(id);\n\n // After duplication, the new block is placed right after the original\n const newBlock = this._content()[idx + 1];\n if (newBlock) {\n newIds.push(newBlock.id);\n }\n }\n\n // Select duplicated blocks\n this.selectedBlocksModel.clear();\n if (newIds.length) {\n this.selectedBlocksModel.select(...newIds);\n }\n this.cdr.markForCheck();\n }\n\n deleteBlock(blockId: string) {\n if (this._content().length === 1) {\n return;\n }\n\n const index = this._content().findIndex(dataBlock => dataBlock.id === blockId);\n\n if (index !== -1) {\n this._content.update(data => {\n data.splice(index, 1);\n return data;\n });\n this._store.deleteBlock(blockId, index);\n\n const prevBlock = this._content()[index - 1];\n\n if (prevBlock) {\n this.focusBlock(prevBlock.id);\n }\n\n this.emitContentChangeEvent();\n }\n }\n\n setBlockProps(id: string, props: ContentEditorItemProperty[]) {\n const data: ContentEditorBlock[] = this._content();\n const index = data.findIndex((dataBlock) => dataBlock.id === id);\n data[index].props = props;\n this.emitContentChangeEvent();\n }\n\n insertEmptyBlock(index: number) {\n this.insertBlock('paragraph', index + 1);\n this.emitContentChangeEvent();\n }\n\n focusBlock(id: string | null) {\n this._store.setFocusedBlockId(id);\n this.focusChanged.emit();\n }\n\n isBlockFocused(id: string) {\n return this._store.focusedBlockId() === id;\n }\n\n isActiveBlock(id: string) {\n return this._store.activeBlockId() === id;\n }\n\n drop(event: CdkDragDrop<ContentEditorBlock[]>) {\n moveItemInArray(this._content(), event.previousIndex, event.currentIndex);\n this._store.moveBlock(event.previousIndex, event.currentIndex);\n this.emitContentChangeEvent();\n }\n\n onTagSelected(tagName: string | null): void {\n // console.log('Tag selected event received:', tagName);\n }\n\n getData() {\n return this._store.blocks();\n }\n\n emitContentChangeEvent() {\n this.contentChanged.emit(this.getData());\n }\n\n selectBlock(blockId: string, multiple = false) {\n if (!multiple) {\n this.selectedBlocksModel.clear();\n }\n this.selectedBlocksModel.select(blockId);\n this.cdr.markForCheck();\n }\n\n unselectBlock(blockId: string) {\n this.selectedBlocksModel.deselect(blockId);\n this.cdr.markForCheck();\n }\n\n unselectSelectedBlocks() {\n this.selectedBlocksModel.clear();\n this.cdr.markForCheck();\n }\n\n isBlockSelected(blockId: string) {\n return this.selectedBlocksModel.isSelected(blockId);\n }\n\n deleteSelectedBlocks(popover?: Popover) {\n const selectedIds = [...this.selectedBlocksModel.selected] as string[];\n if (!selectedIds.length) {\n return;\n }\n\n const confirmRef = this.confirmManager.open({\n title: 'Delete blocks',\n description: 'This action cannot be undone. Selected blocks will be deleted.'\n });\n\n confirmRef.confirmed.subscribe(() => {\n // Delete from bottom to top to keep indexes stable\n const toDelete = selectedIds\n .map(id => ({ id, index: this._content().findIndex(b => b.id === id) }))\n .filter(x => x.index !== -1)\n .sort((a, b) => b.index - a.index);\n\n for (const item of toDelete) {\n this.deleteBlock(item.id);\n }\n\n this.unselectSelectedBlocks();\n });\n }\n\n protected _onKeyDown(event: KeyboardEvent) {\n if ((event.key === 'Delete' || event.key === 'Backspace') && this.selectedBlocksModel.hasValue()) {\n const target = event.target as HTMLElement;\n const isInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // If we are in an input/contenteditable, only delete if multiple blocks are selected\n // or if it's not a Backspace (to avoid deleting text while trying to delete blocks)\n // Actually, if blocks are selected, they usually have a blue background and the user intent is likely to delete blocks.\n // But if there's only ONE block selected AND we are typing in it, we probably want to delete text.\n\n if (isInput && this.selectedBlocksModel.selected.length === 1) {\n // Let the default behavior happen for text editing\n return;\n }\n\n event.preventDefault();\n this.deleteSelectedBlocks();\n }\n }\n\n protected onDragStarted(event: CdkDragStart, block: ContentEditorBlock) {\n this._blockDragging.set(true);\n }\n\n protected onDragEnded(event: CdkDragStart, block: ContentEditorBlock) {\n this._blockDragging.set(false);\n }\n\n protected addBlockFromSuggestionMenu(suggestionsMenu: Menu, type: string, options: object) {\n suggestionsMenu.closed.emit('click');\n this.addBlock(type, options);\n }\n\n protected preventMenuClose(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected setActiveBlockId(event: Event, id: string | null) {\n event.stopPropagation();\n event.preventDefault();\n this._store.setActiveBlockId(id);\n this._store.setFocusedBlockId(id);\n this.focusChanged.emit();\n }\n\n protected onFocusChange(origin: string | null, dataBlock: ContentEditorBlock) {\n }\n\n protected onSuggestionsMenuOpen() {\n }\n\n protected onSuggestionsMenuClose(reason: MenuCloseReason) {\n if (!reason) {\n this._store.setFocusedBlockId(this._store.activeBlockId());\n this.focusChanged.emit();\n }\n\n // need some delay to prevent the flickering\n setTimeout(() => this._store.setActiveBlockId(null), 250);\n }\n\n ngOnDestroy(): void {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n if (this._scrollBindSub) {\n try {\n this._scrollBindSub.unsubscribe();\n } catch {\n }\n this._scrollBindSub = null;\n }\n\n if (this._scrollEffect) {\n try {\n this._scrollEffect.destroy();\n } catch {\n }\n this._scrollEffect = undefined;\n }\n\n try {\n this._scrollSubject.complete();\n } catch {\n }\n\n this._scroll$ = null;\n }\n\n onSettingsPopoverClose() {\n }\n\n protected _onPaste(event: ClipboardEvent) {\n const target = event.target as HTMLElement;\n const isInsideCodeBlock = target.closest('.ngs-code-block') ||\n target.closest('.cm-editor') ||\n target.closest('.cm-content') ||\n target.classList.contains('cm-content') ||\n target.classList.contains('cm-line');\n\n if (isInsideCodeBlock) {\n return;\n }\n\n const html = event.clipboardData?.getData('text/html');\n const text = event.clipboardData?.getData('text/plain');\n\n if (!html && !text) {\n return;\n }\n\n // Check if we are pasting into a block that should handle its own paste (like code block)\n // but might not have been caught by target.closest if it's currently empty or has different structure.\n const activeBlockId = this._store.activeBlockId() || this._store.focusedBlockId();\n if (activeBlockId) {\n const activeBlock = this._content().find(b => b.id === activeBlockId);\n if (activeBlock?.type === 'code') {\n return;\n }\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n let index = this._content().length;\n\n if (activeBlockId) {\n const activeIndex = this._content().findIndex(b => b.id === activeBlockId);\n if (activeIndex !== -1) {\n index = activeIndex + 1;\n }\n }\n\n if (html) {\n this._handleHtmlPaste(html, index);\n } else if (text) {\n this._handleTextPaste(text, index);\n }\n }\n\n private _handleTextPaste(text: string, index: number) {\n const lines = text.split(/\\r?\\n/);\n if (lines.length === 1) {\n this.insertBlock('paragraph', index, {}, false, text);\n } else {\n // If it looks like code (has indentation or common code characters), insert as a single code block\n const isCodeLike = text.includes('{') || text.includes('}') || text.includes(';') || text.includes(' ') || text.includes('\\t');\n if (isCodeLike) {\n this.insertBlock('code', index, { language: 'none' }, false, text);\n return;\n }\n\n lines.forEach((line, i) => {\n if (line.trim().length > 0) {\n this.insertBlock('paragraph', index + i, {}, false, line);\n }\n });\n }\n }\n\n private _handleHtmlPaste(html: string, index: number) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const body = doc.body;\n\n let currentIndex = index;\n Array.from(body.children).forEach(node => {\n const block = this._mapNodeToBlock(node);\n if (block) {\n this.insertBlock(block.type, currentIndex, block.settings, false, block.content);\n currentIndex++;\n }\n });\n }\n\n private _mapNodeToBlock(node: Element): { type: string, settings: any, content?: any } | null {\n const tag = node.tagName.toLowerCase();\n\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return {\n type: 'heading',\n settings: { level: parseInt(tag.substring(1)) },\n content: node.innerHTML\n };\n case 'p':\n return {\n type: 'paragraph',\n settings: {},\n content: node.innerHTML\n };\n case 'ul':\n return {\n type: 'bulletList',\n settings: { listStyle: 'bullet' },\n content: this._mapListItems(node)\n };\n case 'ol':\n return {\n type: 'orderedList',\n settings: { listStyle: 'ordered' },\n content: this._mapListItems(node)\n };\n case 'img':\n return {\n type: 'image',\n settings: {},\n content: {\n src: node.getAttribute('src') || '',\n alt: node.getAttribute('alt') || ''\n }\n };\n case 'video':\n return {\n type: 'video',\n settings: {},\n content: {\n src: node.getAttribute('src') || '',\n caption: node.getAttribute('title') || ''\n }\n };\n case 'blockquote':\n return {\n type: 'quote',\n settings: {},\n content: node.innerHTML\n };\n case 'pre':\n const codeNode = node.querySelector('code');\n const content = (codeNode || node).textContent || '';\n return {\n type: 'code',\n settings: { language: 'none' },\n content: content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n').trimEnd()\n };\n case 'hr':\n return {\n type: 'divider',\n settings: {}\n };\n default:\n if (node.textContent?.trim()) {\n return {\n type: 'paragraph',\n settings: {},\n content: node.innerHTML\n };\n }\n return null;\n }\n }\n\n private _mapListItems(node: Element): any[] {\n return Array.from(node.children)\n .filter(child => child.tagName.toLowerCase() === 'li')\n .map(li => ({\n content: li.innerHTML,\n children: []\n }));\n }\n}\n","<div class=\"container py-4\">\n <div class=\"content\"\n cdkDropList\n ngsTextSelectionPopup\n closestContentObserverClass=\"ngs-content-editor-content-editable\"\n [targetComponent]=\"commandBar\"\n (tagSelected)=\"onTagSelected($event)\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (contentBlock of _content(); track contentBlock.id) {\n <div class=\"block\"\n [attr.data-block-id]=\"contentBlock.id\"\n [class.is-focused]=\"isBlockFocused(contentBlock.id)\"\n [class.is-active]=\"isActiveBlock(contentBlock.id)\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkMonitorSubtreeFocus\n (cdkDragStarted)=\"onDragStarted($event, contentBlock)\"\n (cdkDragEnded)=\"onDragEnded($event, contentBlock)\"\n (cdkFocusChange)=\"onFocusChange($event, contentBlock)\">\n <div class=\"block-controls\" [class.is-settings-popover-open]=\"settingsTrigger.api.isOpen()\">\n <button class=\"block-control\">\n <ngs-icon name=\"fluent:add-24-regular\"\n (mousedown)=\"setActiveBlockId($event, contentBlock.id)\"\n [ngsMenuTriggerFor]=\"suggestionsMenu\"\n [ngsMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"onSuggestionsMenuOpen()\"\n (menuClosed)=\"onSuggestionsMenuClose($event)\"/>\n </button>\n <div class=\"block-control block-control-drag\"\n (click)=\"selectBlock(contentBlock.id)\"\n [ngsPopoverTriggerFor]=\"settingsPopover\"\n (closed)=\"onSettingsPopoverClose()\"\n #settingsTrigger=\"ngsPopoverTriggerFor\"\n hasBackdrop\n position=\"before-center\">\n <button cdkDragHandle\n trigger=\"hover\"\n closeOnOriginClick\n closeOnOriginMouseLeave\n #dragTrigger=\"ngsPopoverTriggerFor\"\n [ngsPopoverTriggerFor]=\"dragControlTooltip\"\n position=\"below-center\"\n (mousedown)=\"dragTrigger.api.close()\"\n delay=\"1000\" class=\"w-full h-full flex items-center justify-center\">\n <ngs-icon name=\"fluent:re-order-dots-vertical-24-regular\"/>\n </button>\n </div>\n <ng-template #dragControlTooltip>\n <div class=\"bg-neutral-900 text-xs flex flex-col gap-0.5 rounded-lg items-center px-2 py-1.5 font-medium\">\n <div>\n <div class=\"text-neutral-100\">Drag <span class=\"text-neutral-400\">to move</span></div>\n </div>\n <div>\n <div class=\"text-neutral-100\">Click <span class=\"text-neutral-400\">to open menu</span></div>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"block-content\" [class.is-selected]=\"isBlockSelected(contentBlock.id)\">\n <div class=\"drag-placeholder\" *cdkDragPlaceholder></div>\n <ng-container [ngComponentOutlet]=\"blockDefsMap.get(contentBlock.type) | async\"\n [ngComponentOutletInputs]=\"{\n id: contentBlock.id,\n content: contentBlock.content,\n settings: contentBlock.settings,\n index: $index\n }\"/>\n </div>\n </div>\n }\n </div>\n</div>\n\n<ngs-popover #settingsPopover=\"ngsPopover\">\n <div class=\"px-2 py-0 w-72 settings-popover\">\n <ngs-list>\n <ngs-list-item (click)=\"duplicateSelectedBlocks(settingsPopover)\">\n <ngs-icon name=\"fluent:copy-24-regular\" ngsListItemIcon/>\n <div ngsListItemTitle>Duplicate</div>\n </ngs-list-item>\n <ngs-list-item (click)=\"deleteSelectedBlocks(settingsPopover)\">\n <ngs-icon name=\"fluent:delete-24-regular\" ngsListItemIcon/>\n <div ngsListItemTitle>Delete</div>\n </ngs-list-item>\n </ngs-list>\n </div>\n</ngs-popover>\n\n<ngs-menu #suggestionsMenu=\"ngsMenu\">\n <div (click)=\"preventMenuClose($event)\">\n @for (suggestionItem of suggestions(); track $index; let first = $first) {\n @switch (suggestionItem.type) {\n @case ('heading') {\n <ngs-menu-heading>{{ suggestionItem.title }}</ngs-menu-heading>\n }\n @case ('item') {\n <button ngs-menu-item (click)=\"addBlockFromSuggestionMenu(suggestionsMenu, suggestionItem.blockType, suggestionItem.blockOptions)\">\n <div class=\"h-full flex items-center gap-3 py-2\">\n <div class=\"size-9 flex items-center rounded-lg justify-center bg-surface-container\">\n <ngs-icon [name]=\"suggestionItem.iconName\" class=\"!me-0\"/>\n </div>\n <div class=\"grow min-w-[200px]\">\n <div>{{ suggestionItem.title }}</div>\n <div class=\"text-2xs text-neutral-500\">{{ suggestionItem.description }}</div>\n </div>\n @if (suggestionItem.hotKeys) {\n <div class=\"ms-auto bg-surface-container-highest rounded-full h-5\n text-4xs px-2 flex items-center font-bold\">{{ suggestionItem.hotKeys }}</div>\n }\n </div>\n </button>\n }\n }\n }\n </div>\n</ngs-menu>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-content-viewer',\n imports: [],\n templateUrl: './content-viewer.component.html',\n styleUrl: './content-viewer.component.css'\n})\nexport class ContentViewerComponent {\n\n}\n","<p>content-viewer works!</p>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Input","i1","uuid","i1.BlockSelectionDirective"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, DestroyRef, viewChild, input, signal, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { C as ContentEditorContentEditableDirective } from './ngstarter-ui-components-content-editor-content-editor-content-editable.directive-Bvfa2dqh.mjs';
4
- import { C as ContentBuilderStore, a as CONTENT_BUILDER, b as CONTENT_EDITOR_BLOCK } from './ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs';
4
+ import { C as ContentBuilderStore, a as CONTENT_BUILDER, b as CONTENT_EDITOR_BLOCK } from './ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
6
  import { C as CursorController } from './ngstarter-ui-components-content-editor-cursor-controller-4Ak8VqGX.mjs';
7
7
 
@@ -107,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
107
107
  }], propDecorators: { _contentRef: [{ type: i0.ViewChild, args: ['contentRef', { isSignal: true }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }] } });
108
108
 
109
109
  export { ParagraphBlockComponent };
110
- //# sourceMappingURL=ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map
110
+ //# sourceMappingURL=ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs","sources":["../../../projects/components/content-editor/src/_builder/paragraph-block/paragraph-block.component.ts","../../../projects/components/content-editor/src/_builder/paragraph-block/paragraph-block.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component, DestroyRef,\n ElementRef, forwardRef,\n inject,\n input,\n OnInit, signal,\n viewChild\n} from '@angular/core';\nimport { ContentEditorContentEditableDirective } from '../../content-editor-content-editable.directive';\nimport { ContentBuilderComponent } from '../../content-builder/content-builder.component';\nimport {\n CONTENT_BUILDER,\n CONTENT_EDITOR_BLOCK,\n ContentEditorDataBlock,\n ContentEditorItemProperty\n} from '../../types';\nimport { ContentBuilderStore } from '../../content-builder.store';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CursorController } from '../../utils/cursor-controller';\n\n@Component({\n selector: 'ngs-paragraph-block',\n imports: [\n ContentEditorContentEditableDirective\n ],\n providers: [\n {\n provide: CONTENT_EDITOR_BLOCK,\n useExisting: forwardRef(() => ParagraphBlockComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './paragraph-block.component.html',\n styleUrl: './paragraph-block.component.scss',\n host: {\n 'class': 'ngs-paragraph-block',\n '[class.is-empty]': '_isEmpty()'\n }\n})\nexport class ParagraphBlockComponent implements OnInit, ContentEditorDataBlock {\n private _store = inject(ContentBuilderStore);\n private _contentBuilder = inject<ContentBuilderComponent>(CONTENT_BUILDER);\n private _destroyRef = inject(DestroyRef);\n\n private _contentRef = viewChild.required<ElementRef<HTMLParagraphElement>>('contentRef');\n\n id = input.required<string>();\n content = input.required<string>();\n settings = input.required<any>();\n props = input<ContentEditorItemProperty[]>([]);\n index = input.required<number>();\n placeholder = input('Enter text here');\n\n protected _content = signal<string>('');\n protected _props = signal<ContentEditorItemProperty[]>([]);\n protected _isEmpty = signal<boolean>(true);\n readonly initialized = signal(false);\n\n ngOnInit() {\n this._content.set(this.content());\n this._props.set(this.props());\n this._isEmpty.set(this.content().length === 0);\n this._contentBuilder\n .focusChanged\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n if (this._store.focusedBlockId() === this.id()) {\n this.focus();\n }\n });\n }\n\n focus() {\n const element = this._contentRef().nativeElement;\n const cursorController = new CursorController(element);\n cursorController.setToEnd();\n }\n\n getData(): any {\n return {\n content: this._content(),\n props: this._props(),\n settings: {\n ...this.settings(),\n }\n };\n }\n\n isEmpty(): boolean {\n return this.getData().content.trim().length === 0;\n }\n\n protected onContentChanged(content: string) {\n if (!this.initialized()) {\n return;\n }\n\n this._content.set(content);\n this._isEmpty.set(content.trim().length === 0);\n\n this.update();\n }\n\n protected onPropsChanged(props: ContentEditorItemProperty[]) {\n this._contentBuilder.setBlockProps(this.id(), props);\n }\n\n protected onPressedEnter(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n this._contentBuilder.insertEmptyBlock(this.index());\n }\n\n protected onContentEditableInitialized() {\n if (this._store.focusedBlockId() === this.id()) {\n this.focus();\n }\n\n this.initialized.set(true);\n }\n\n protected _onKeyDown(event: KeyboardEvent) {\n if (event.key === 'Backspace' && !this._content()) {\n this._contentBuilder.deleteBlock(this.id());\n }\n }\n\n private update() {\n this._store.updateBlock(this.id(), {...this.getData(), isEmpty: this.isEmpty()});\n this._contentBuilder.emitContentChangeEvent();\n }\n}\n","<p #contentRef\n class=\"content\"\n [ngsContentEditorContentEditable]=\"_content()\"\n [settings]=\"settings()\"\n [props]=\"props()\"\n (propsChanged)=\"onPropsChanged($event)\"\n [attr.data-empty-placeholder]=\"placeholder()\"\n (contentChanged)=\"onContentChanged($event)\"\n (pressedEnter)=\"onPressedEnter($event)\"\n (keydown)=\"_onKeyDown($event)\"\n (initialized)=\"onContentEditableInitialized()\"></p>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs","sources":["../../../projects/components/content-editor/src/_builder/paragraph-block/paragraph-block.component.ts","../../../projects/components/content-editor/src/_builder/paragraph-block/paragraph-block.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component, DestroyRef,\n ElementRef, forwardRef,\n inject,\n input,\n OnInit, signal,\n viewChild\n} from '@angular/core';\nimport { ContentEditorContentEditableDirective } from '../../content-editor-content-editable.directive';\nimport { ContentBuilderComponent } from '../../content-builder/content-builder.component';\nimport {\n CONTENT_BUILDER,\n CONTENT_EDITOR_BLOCK,\n ContentEditorDataBlock,\n ContentEditorItemProperty\n} from '../../types';\nimport { ContentBuilderStore } from '../../content-builder.store';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CursorController } from '../../utils/cursor-controller';\n\n@Component({\n selector: 'ngs-paragraph-block',\n imports: [\n ContentEditorContentEditableDirective\n ],\n providers: [\n {\n provide: CONTENT_EDITOR_BLOCK,\n useExisting: forwardRef(() => ParagraphBlockComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './paragraph-block.component.html',\n styleUrl: './paragraph-block.component.scss',\n host: {\n 'class': 'ngs-paragraph-block',\n '[class.is-empty]': '_isEmpty()'\n }\n})\nexport class ParagraphBlockComponent implements OnInit, ContentEditorDataBlock {\n private _store = inject(ContentBuilderStore);\n private _contentBuilder = inject<ContentBuilderComponent>(CONTENT_BUILDER);\n private _destroyRef = inject(DestroyRef);\n\n private _contentRef = viewChild.required<ElementRef<HTMLParagraphElement>>('contentRef');\n\n id = input.required<string>();\n content = input.required<string>();\n settings = input.required<any>();\n props = input<ContentEditorItemProperty[]>([]);\n index = input.required<number>();\n placeholder = input('Enter text here');\n\n protected _content = signal<string>('');\n protected _props = signal<ContentEditorItemProperty[]>([]);\n protected _isEmpty = signal<boolean>(true);\n readonly initialized = signal(false);\n\n ngOnInit() {\n this._content.set(this.content());\n this._props.set(this.props());\n this._isEmpty.set(this.content().length === 0);\n this._contentBuilder\n .focusChanged\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n if (this._store.focusedBlockId() === this.id()) {\n this.focus();\n }\n });\n }\n\n focus() {\n const element = this._contentRef().nativeElement;\n const cursorController = new CursorController(element);\n cursorController.setToEnd();\n }\n\n getData(): any {\n return {\n content: this._content(),\n props: this._props(),\n settings: {\n ...this.settings(),\n }\n };\n }\n\n isEmpty(): boolean {\n return this.getData().content.trim().length === 0;\n }\n\n protected onContentChanged(content: string) {\n if (!this.initialized()) {\n return;\n }\n\n this._content.set(content);\n this._isEmpty.set(content.trim().length === 0);\n\n this.update();\n }\n\n protected onPropsChanged(props: ContentEditorItemProperty[]) {\n this._contentBuilder.setBlockProps(this.id(), props);\n }\n\n protected onPressedEnter(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n this._contentBuilder.insertEmptyBlock(this.index());\n }\n\n protected onContentEditableInitialized() {\n if (this._store.focusedBlockId() === this.id()) {\n this.focus();\n }\n\n this.initialized.set(true);\n }\n\n protected _onKeyDown(event: KeyboardEvent) {\n if (event.key === 'Backspace' && !this._content()) {\n this._contentBuilder.deleteBlock(this.id());\n }\n }\n\n private update() {\n this._store.updateBlock(this.id(), {...this.getData(), isEmpty: this.isEmpty()});\n this._contentBuilder.emitContentChangeEvent();\n }\n}\n","<p #contentRef\n class=\"content\"\n [ngsContentEditorContentEditable]=\"_content()\"\n [settings]=\"settings()\"\n [props]=\"props()\"\n (propsChanged)=\"onPropsChanged($event)\"\n [attr.data-empty-placeholder]=\"placeholder()\"\n (contentChanged)=\"onContentChanged($event)\"\n (pressedEnter)=\"onPressedEnter($event)\"\n (keydown)=\"_onKeyDown($event)\"\n (initialized)=\"onContentEditableInitialized()\"></p>\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, DestroyRef, viewChild, input, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { C as ContentBuilderStore, a as CONTENT_BUILDER, b as CONTENT_EDITOR_BLOCK } from './ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs';
3
+ import { C as ContentBuilderStore, a as CONTENT_BUILDER, b as CONTENT_EDITOR_BLOCK } from './ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { C as ContentEditorContentEditableDirective } from './ngstarter-ui-components-content-editor-content-editor-content-editable.directive-Bvfa2dqh.mjs';
6
6
 
@@ -138,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
138
138
  }], propDecorators: { _contentRef: [{ type: i0.ViewChild, args: ['contentRef', { isSignal: true }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], captionPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionPlaceholder", required: false }] }] } });
139
139
 
140
140
  export { QuoteBlockComponent };
141
- //# sourceMappingURL=ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map
141
+ //# sourceMappingURL=ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map