@heartlandone/vega 2.80.0 → 2.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{app-globals-7a48292d.js → app-globals-3350d580.js} +7 -7
- package/dist/cjs/{aria-dialog-focusable-trap-slimmer-5a0a78fe.js → aria-dialog-focusable-trap-slimmer-5507f917.js} +15 -70
- package/dist/cjs/{child-nodes-event-prevent-slimmer-dd0bb8b6.js → child-nodes-event-prevent-slimmer-9b7095a4.js} +1 -1
- package/dist/cjs/{child-nodes-notify-observer-slimmer-a8d13f4c.js → child-nodes-notify-observer-slimmer-2631c381.js} +1 -1
- package/dist/cjs/{code-block-71a330a1.js → code-block-b1f8aded.js} +804 -63
- package/dist/cjs/{component-value-history-controller-slimmer.abstract-fd077a6c.js → component-value-history-controller-slimmer.abstract-99fbd1f2.js} +6 -6
- package/dist/cjs/{content-state-afa26456.js → content-state-648652b4.js} +970 -467
- package/dist/cjs/{dark-mode-style-controller-3a04af3d.js → dark-mode-style-controller-bd765afb.js} +2 -322
- package/dist/cjs/{date-required-rule-9f0e3e99.js → date-required-rule-6addf5dd.js} +1 -1
- package/dist/cjs/{design-token-3f9589eb.js → design-token-93070bb8.js} +6 -130
- package/dist/cjs/{dom-node-subject-observer-factory-a3a60da4.js → dom-node-subject-observer-factory-9110cb94.js} +1 -1
- package/dist/cjs/drop-file-accept-filter-slimmer-cd619cc7.js +64 -0
- package/dist/cjs/{element-appender-slimmer-7a66229b.js → element-appender-slimmer-dedd3a34.js} +5 -5
- package/dist/cjs/{event-emit-slimmer-024e26bb.js → event-emit-slimmer-bcb458b2.js} +2 -2
- package/dist/cjs/{form-field-controller-slimmer-c487cf2b.js → form-field-controller-slimmer-0f3a028e.js} +5 -5
- package/dist/cjs/{image-annotation-action-4e72af4b.js → image-annotation-action-0339e983.js} +4 -4
- package/dist/cjs/index-58ea899e.js +4 -0
- package/dist/cjs/index.cjs.js +21 -18
- package/dist/cjs/{inject-keyboard-manager-d1a82089.js → inject-keyboard-manager-2d9c4f92.js} +1 -1
- package/dist/cjs/{internal-translation-controller-9f58a4e4.js → internal-translation-controller-fb1532f4.js} +3 -0
- package/dist/cjs/{internal-vega-event-manager-cc0f511c.js → internal-vega-event-manager-fef893bf.js} +1 -0
- package/dist/cjs/{keyboard-manager-9dbbb0d4.js → keyboard-manager-5ed6c472.js} +2 -2
- package/dist/cjs/{keyboard-manager-slimmer-68cff676.js → keyboard-manager-slimmer-879ff4f3.js} +1 -1
- package/dist/cjs/loader.cjs.js +15 -14
- package/dist/cjs/{month-view-generator-65a2f883.js → month-view-generator-d262e6ce.js} +1 -1
- package/dist/cjs/page-size-option-utils-d038dd3a.js +68 -0
- package/dist/cjs/{public-rules-36f202b3.js → public-rules-bce88d4e.js} +12 -11
- package/dist/cjs/{range-fa15d524.js → range-5bd6d72b.js} +2 -2
- package/dist/cjs/{responsive-format-facade-4419b4ae.js → responsive-format-facade-2cab7344.js} +3 -3
- package/dist/cjs/{rich-text-editor-required-rule-7d4c2973.js → rich-text-editor-required-rule-e8a922be.js} +1 -1
- package/dist/cjs/{split-cell-operation-19f98afb.js → split-cell-operation-bb388de6.js} +59 -24
- package/dist/cjs/state-border-formatter-4e5e4ed0.js +133 -0
- package/dist/cjs/{string-format-strategy.abstract-c65d9861.js → string-format-strategy.abstract-9a35e3b4.js} +1 -1
- package/dist/cjs/{string-input-formatter-slimmer-c2e04acc.js → string-input-formatter-slimmer-1018ddec.js} +4 -4
- package/dist/cjs/{string-mask-strategy-418fc0b8.js → string-mask-strategy-3aa17744.js} +2 -2
- package/dist/cjs/{style-formatter-3c9ce0e5.js → style-formatter-2226c869.js} +2 -2
- package/dist/cjs/{sub-state-notify-slimmer-7a4c6061.js → sub-state-notify-slimmer-b33171b0.js} +2 -2
- package/dist/cjs/{sub-state-observer-slimmer-f728e068.js → sub-state-observer-slimmer-b8f6f27b.js} +3 -3
- package/dist/cjs/{time-required-rule-ad091302.js → time-required-rule-970dfdca.js} +1 -1
- package/dist/cjs/tinycolor-polyfill-502efaa8.js +325 -0
- package/dist/cjs/{token-extension-90396de7.js → token-extension-9b213b6b.js} +212 -38
- package/dist/cjs/{translation-slimmer-c069ca84.js → translation-slimmer-d0c77ad2.js} +1 -1
- package/dist/cjs/{type-guard-d760850a.js → type-guard-3ec852d7.js} +51 -1
- package/dist/cjs/{ui-9e8c9732.js → ui-ae4ee13d.js} +69 -0
- package/dist/cjs/{valid-credit-card-number-rule-5ce8e973.js → valid-credit-card-number-rule-99d1bb34.js} +1 -1
- package/dist/cjs/vega-accordion.cjs.entry.js +9 -8
- package/dist/cjs/vega-app-footer.cjs.entry.js +2 -1
- package/dist/cjs/vega-app-header-button.cjs.entry.js +10 -9
- package/dist/cjs/vega-backdrop.cjs.entry.js +1 -1
- package/dist/cjs/vega-banner.cjs.entry.js +6 -5
- package/dist/cjs/vega-box.cjs.entry.js +7 -6
- package/dist/cjs/vega-brand-logo.cjs.entry.js +2 -1
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +29 -12
- package/dist/cjs/vega-button-circle.cjs.entry.js +11 -10
- package/dist/cjs/vega-button-group_2.cjs.entry.js +104 -15
- package/dist/cjs/vega-button-link.cjs.entry.js +5 -5
- package/dist/cjs/vega-button.cjs.entry.js +10 -10
- package/dist/cjs/vega-calendar_4.cjs.entry.js +12 -12
- package/dist/cjs/vega-card.cjs.entry.js +7 -6
- package/dist/cjs/vega-carousel.cjs.entry.js +7 -7
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +10 -10
- package/dist/cjs/vega-chip.cjs.entry.js +11 -10
- package/dist/cjs/vega-code-block.cjs.entry.js +16 -15
- package/dist/cjs/vega-color-picker.cjs.entry.js +28 -10
- package/dist/cjs/vega-color-swatch.cjs.entry.js +245 -0
- package/dist/cjs/vega-combo-box.cjs.entry.js +12 -12
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +342 -284
- package/dist/cjs/vega-dialog_2.cjs.entry.js +76 -202
- package/dist/cjs/vega-divider.cjs.entry.js +7 -6
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +75 -19
- package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
- package/dist/cjs/vega-field-label.cjs.entry.js +4 -4
- package/dist/cjs/vega-file-uploader.cjs.entry.js +42 -92
- package/dist/cjs/vega-flag-icon.cjs.entry.js +5 -4
- package/dist/cjs/vega-flex.cjs.entry.js +8 -7
- package/dist/cjs/vega-font.cjs.entry.js +6 -5
- package/dist/cjs/vega-form.cjs.entry.js +12 -12
- package/dist/cjs/vega-grid.cjs.entry.js +6 -5
- package/dist/cjs/vega-icon.cjs.entry.js +6 -5
- package/dist/cjs/vega-image-uploader.cjs.entry.js +80 -15
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +13 -13
- package/dist/cjs/vega-input-numeric.cjs.entry.js +13 -13
- package/dist/cjs/vega-input-passcode.cjs.entry.js +12 -12
- package/dist/cjs/vega-input-phone-number.cjs.entry.js +11 -11
- package/dist/cjs/vega-input-range.cjs.entry.js +10 -10
- package/dist/cjs/vega-input-select.cjs.entry.js +52 -17
- package/dist/cjs/vega-input.cjs.entry.js +17 -14
- package/dist/cjs/{vega-internal-event-id-a1837fa2.js → vega-internal-event-id-87014e4f.js} +2 -0
- package/dist/cjs/vega-item-toggle.cjs.entry.js +4 -4
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +122 -15
- package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +4 -4
- package/dist/cjs/vega-page-notification_2.cjs.entry.js +2 -2
- package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +5 -5
- package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +26 -10
- package/dist/cjs/vega-pagination.cjs.entry.js +48 -24
- package/dist/cjs/vega-popover_2.cjs.entry.js +14 -13
- package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +72 -17
- package/dist/cjs/vega-radio_2.cjs.entry.js +13 -13
- package/dist/cjs/vega-rich-text-content.cjs.entry.js +104 -22
- package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +36 -24
- package/dist/cjs/vega-rich-text-table-properties_3.cjs.entry.js +15 -14
- package/dist/cjs/vega-section-title.cjs.entry.js +21 -3
- package/dist/cjs/vega-segment-control.cjs.entry.js +4 -4
- package/dist/cjs/vega-selection-chip_2.cjs.entry.js +12 -12
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +11 -11
- package/dist/cjs/vega-sidenav_3.cjs.entry.js +10 -10
- package/dist/cjs/vega-signature-capture.cjs.entry.js +13 -12
- package/dist/cjs/vega-stepper.cjs.entry.js +11 -11
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +5 -5
- package/dist/cjs/vega-table_11.cjs.entry.js +436 -289
- package/dist/cjs/vega-text.cjs.entry.js +7 -3
- package/dist/cjs/vega-textarea.cjs.entry.js +9 -9
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +16 -16
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +8 -8
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +11 -10
- package/dist/cjs/vega.cjs.js +15 -14
- package/dist/cjs/{wait-for-component-did-render-b6aba2de.js → wait-for-component-did-render-16863a21.js} +2 -2
- package/dist/collection/collection-manifest.json +6 -0
- package/dist/collection/components/vega-banner/slimmers/renderers/vega-banner-renderer.js +1 -0
- package/dist/collection/components/vega-banner/vega-banner.css +36 -0
- package/dist/collection/components/vega-box/vega-box.js +1 -1
- package/dist/collection/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-item-renderer.js +9 -6
- package/dist/collection/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-renderer.js +4 -0
- package/dist/collection/components/vega-breadcrumb/vega-breadcrumb.css +6 -0
- package/dist/collection/components/vega-breadcrumb/vega-breadcrumb.js +31 -0
- package/dist/collection/components/vega-button/vega-button.css +4 -0
- package/dist/collection/components/vega-button-group/slimmers/controllers/vega-button-group-all-items-disabled-controller.js +64 -0
- package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.js +7 -0
- package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.js +6 -2
- package/dist/collection/components/vega-button-group/vega-button-group-item/vega-button-group-item.js +4 -2
- package/dist/collection/components/vega-button-group/vega-button-group.js +20 -1
- package/dist/collection/components/vega-card/vega-card.css +157 -0
- package/dist/collection/components/vega-card/vega-card.js +1 -1
- package/dist/collection/components/vega-chip/vega-chip.js +26 -1
- package/dist/collection/components/vega-color-picker/vega-color-picker.css +0 -1
- package/dist/collection/components/vega-color-picker/vega-color-picker.js +40 -1
- package/dist/collection/components/vega-color-swatch/slimmers/renderers/vega-color-swatch-renderer.js +127 -0
- package/dist/collection/components/vega-color-swatch/vega-color-swatch.css +155 -0
- package/dist/collection/components/vega-color-swatch/vega-color-swatch.js +314 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.js +5 -10
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-is-dual-months-controller.js +64 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-header-render.js +3 -6
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.js +3 -11
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.js +2 -2
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +4 -5
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +13 -15
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.js +41 -2
- package/dist/collection/components/vega-dialog/vega-dialog.js +1 -1
- package/dist/collection/components/vega-divider/slimmers/controllers/vega-divider-size-controller.js +1 -1
- package/dist/collection/components/vega-divider/vega-divider.css +157 -0
- package/dist/collection/components/vega-divider/vega-divider.js +1 -1
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.js +37 -1
- package/dist/collection/components/vega-dropdown/slimmers/renderers/vega-dropdown-renderer.js +4 -1
- package/dist/collection/components/vega-dropdown/vega-dropdown-item/slimmers/controllers/vega-dropdown-item-state-controller.js +7 -0
- package/dist/collection/components/vega-dropdown/vega-dropdown-item/slimmers/renderers/vega-dropdown-item-renderer.js +5 -1
- package/dist/collection/components/vega-dropdown/vega-dropdown-item/vega-dropdown-item.js +2 -1
- package/dist/collection/components/vega-dropdown/vega-dropdown.js +38 -0
- package/dist/collection/components/vega-file-uploader/vega-file-uploader.js +2 -2
- package/dist/collection/components/vega-flex/vega-flex.css +157 -0
- package/dist/collection/components/vega-flex/vega-flex.js +1 -1
- package/dist/collection/components/vega-image-uploader/slimmers/renderers/vega-image-uploader-default-content-renderer.js +45 -1
- package/dist/collection/components/vega-image-uploader/slimmers/renderers/vega-image-uploader-preview-content-renderer.js +16 -1
- package/dist/collection/components/vega-image-uploader/vega-image-uploader.js +5 -0
- package/dist/collection/components/vega-input/slimmers/renderers/vega-input-input-renderer.js +4 -1
- package/dist/collection/components/vega-input/vega-input.js +25 -0
- package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.js +17 -4
- package/dist/collection/components/vega-input-select/vega-input-select.js +76 -0
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.js +0 -4
- package/dist/collection/components/vega-modal/slimmers/renderers/vega-modal-renderer.js +31 -21
- package/dist/collection/components/vega-modal/vega-modal.css +2685 -9
- package/dist/collection/components/vega-modal/vega-modal.js +75 -5
- package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.js +85 -2
- package/dist/collection/components/vega-nav/vega-left-nav/vega-left-nav.js +23 -0
- package/dist/collection/components/vega-pagination/constants/page-size.js +2 -0
- package/dist/collection/components/vega-pagination/internal/vega-pagination-page-size-selector.js +11 -7
- package/dist/collection/components/vega-pagination/slimmers/controllers/vega-pagination-page-size-observer-controller.js +11 -1
- package/dist/collection/components/vega-pagination/utils/page-size-option-utils.js +57 -0
- package/dist/collection/components/vega-pagination/vega-pagination-page-size-selector-mobile/slimmers/renderers/page-size-selector-mobile-dropdown-renderer.js +15 -5
- package/dist/collection/components/vega-pagination/vega-pagination-page-size-selector-mobile/vega-pagination-page-size-selector-mobile.js +39 -3
- package/dist/collection/components/vega-pagination/vega-pagination.js +32 -11
- package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.js +34 -3
- package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.js +10 -2
- package/dist/collection/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.js +4 -3
- package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.js +37 -0
- package/dist/collection/components/vega-rich-text-editor/constants/constant.js +20 -0
- package/dist/collection/components/vega-rich-text-editor/dto/annotations/image-annotation.js +1 -0
- package/dist/collection/components/vega-rich-text-editor/dto/annotations/inline-html-annotation.js +12 -0
- package/dist/collection/components/vega-rich-text-editor/dto/annotations/link-group-annotation.js +8 -2
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/block.abstract.js +15 -4
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/code-block.js +6 -2
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/html-block.js +9 -15
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/image-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-item-block.js +3 -7
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/text-block.js +50 -9
- package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +25 -6
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-block-filter-styles-strategy.js +39 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-node-filter-styles-strategy.js +47 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy-registry.js +64 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy.abstract.js +147 -14
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/image-node/image-filter-styles-strategy.js +26 -3
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-block-filter-styles-strategy.js +24 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-heading-item-block-filter-styles-strategy.js +29 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-item-block-filter-styles-strategy.js +39 -1
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-title-item-block-filter-styles-strategy.js +29 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/predicate.js +94 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/heading-filter-styles-strategy.js +15 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/paragraph-filter-styles-strategy.js +48 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/title-filter-styles-strategy.js +16 -0
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/code-filter-styles-strategy.js +32 -3
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/link-filter-styles-strategy.js +42 -3
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/title-heading-node-filter-styles-strategy.js +108 -0
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/code-block-node.js +7 -2
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/image-node.js +2 -2
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/node.abstract.js +15 -4
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/text-node.js +84 -14
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/block-text-nodes-renderer.abstract.js +61 -6
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/text-block-renderer.js +16 -0
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/nodes/text-node-renderer.js +14 -3
- package/dist/collection/components/vega-rich-text-editor/dto/setup.js +36 -6
- package/dist/collection/components/vega-rich-text-editor/extensions/extension.abstract.js +10 -0
- package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-extension.js +9 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.js +17 -1
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.js +17 -18
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.js +19 -0
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-body-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.js +21 -4
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-row-block.js +3 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/element-to-dto-strategies/caption-to-caption-block-strategy.js +2 -1
- package/dist/collection/components/vega-rich-text-editor/extensions/table/element-to-dto-strategies/td-to-table-cell-block-strategy.js +2 -2
- package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-block/table-block-filter-styles-strategy.js +39 -0
- package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-caption/table-caption-filter-styles-strategy.js +39 -0
- package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-cell/table-cell-filter-styles-strategy.js +63 -0
- package/dist/collection/components/vega-rich-text-editor/extensions/table/table-extension.js +7 -0
- package/dist/collection/components/vega-rich-text-editor/helpers/utils.js +24 -0
- package/dist/collection/components/vega-rich-text-editor/public-api.js +2 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/custom-style-annotation-handler.js +2 -25
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/html-element-to-annotation-generator.js +8 -2
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/inline-html-annotation-handler.js +30 -53
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/link-annotation-handler.js +2 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/text-style-annotation-handler.js +2 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/continue-inline-to-rte-text-block-strategy.js +85 -17
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.js +12 -5
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/html-block-strategy.js +95 -43
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/inline-element-to-text-node-strategy.js +1 -2
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/predicate.js +29 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/strategy-tags.js +142 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.js +1 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.js +12 -2
- package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +1 -1
- package/dist/collection/components/vega-section-title/slimmers/renderers/vega-section-title-renderer.js +8 -2
- package/dist/collection/components/vega-section-title/vega-section-title.css +35 -0
- package/dist/collection/components/vega-section-title/vega-section-title.js +64 -0
- package/dist/collection/components/vega-stepper/vega-stepper.css +15 -0
- package/dist/collection/components/vega-stepper/vega-stepper.js +2 -1
- package/dist/collection/components/vega-table/slimmers/controllers/vega-table-render-input-controller.js +25 -2
- package/dist/collection/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.js +28 -1
- package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.js +12 -10
- package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +14 -12
- package/dist/collection/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.js +5 -4
- package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.js +8 -1
- package/dist/collection/components/vega-text/slimmers/renderers/vega-text-tooltip-renderer.js +6 -2
- package/dist/collection/components/vega-text/vega-text.js +1 -1
- package/dist/collection/components/vega-tooltip/slimmers/controllers/vega-tooltip-element-appender-controller.js +1 -0
- package/dist/collection/components/vega-tooltip/vega-tooltip-content-box/vega-tooltip-content-box.css +1 -0
- package/dist/collection/components/vega-tooltip/vega-tooltip-content-box/vega-tooltip-content-box.js +1 -1
- package/dist/collection/components/vega-tooltip/vega-tooltip.js +1 -1
- package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +1 -0
- package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +1 -0
- package/dist/collection/helpers/formatter/responsive-map-formatter/responsive-margin-formatter.js +3 -3
- package/dist/collection/helpers/slimmers/aria-dialog-focusable-trap-slimmer.js +13 -68
- package/dist/collection/{components/vega-file-uploader/slimmers/controllers/vega-file-uploader-drop-file-filter-controller.js → helpers/slimmers/drop-file-accept-filter-slimmer.js} +13 -5
- package/dist/collection/helpers/slimmers/vega-table-child-render-input-consumer-slimmer.js +96 -0
- package/dist/collection/helpers/translation/locales/en.js +3 -0
- package/dist/collection/types/type-guard.js +47 -0
- package/dist/collection/utils/ui.js +68 -0
- package/dist/esm/{app-globals-e77015e3.js → app-globals-0b7e8b50.js} +7 -7
- package/dist/esm/{aria-dialog-focusable-trap-slimmer-5a2f92be.js → aria-dialog-focusable-trap-slimmer-853a91de.js} +15 -70
- package/dist/esm/{child-nodes-event-prevent-slimmer-2ecc3e1f.js → child-nodes-event-prevent-slimmer-9c24d4fc.js} +1 -1
- package/dist/esm/{child-nodes-notify-observer-slimmer-b7f0e419.js → child-nodes-notify-observer-slimmer-a8cb19cf.js} +1 -1
- package/dist/esm/{code-block-7d6f231b.js → code-block-b8be290a.js} +798 -64
- package/dist/esm/{component-value-history-controller-slimmer.abstract-acf65b17.js → component-value-history-controller-slimmer.abstract-10ccf8e6.js} +6 -6
- package/dist/esm/{content-state-084cd705.js → content-state-72b513d1.js} +959 -456
- package/dist/esm/{dark-mode-style-controller-82e5c1c6.js → dark-mode-style-controller-e9a6b097.js} +1 -321
- package/dist/esm/{date-required-rule-29608215.js → date-required-rule-891a6a57.js} +1 -1
- package/dist/esm/{design-token-edcd787b.js → design-token-59d07aa2.js} +6 -130
- package/dist/esm/{dom-node-subject-observer-factory-cea9248d.js → dom-node-subject-observer-factory-aca0116e.js} +1 -1
- package/dist/esm/drop-file-accept-filter-slimmer-ad759e4a.js +62 -0
- package/dist/esm/{element-appender-slimmer-08ec429b.js → element-appender-slimmer-5aca1bca.js} +5 -5
- package/dist/esm/{event-emit-slimmer-4fba1b35.js → event-emit-slimmer-32da9d90.js} +2 -2
- package/dist/esm/{form-field-controller-slimmer-8dd39707.js → form-field-controller-slimmer-899864a8.js} +5 -5
- package/dist/esm/{image-annotation-action-a6b33a81.js → image-annotation-action-ebd6c421.js} +4 -4
- package/dist/esm/index-090d31ca.js +4 -0
- package/dist/esm/index.js +20 -18
- package/dist/esm/{inject-keyboard-manager-7557816f.js → inject-keyboard-manager-dc1d7135.js} +1 -1
- package/dist/esm/{internal-translation-controller-b08aa9ab.js → internal-translation-controller-4fb104b2.js} +3 -0
- package/dist/esm/{internal-vega-event-manager-59f5bd47.js → internal-vega-event-manager-8a657bac.js} +1 -0
- package/dist/esm/{keyboard-manager-1846c6a5.js → keyboard-manager-6ea9968b.js} +2 -2
- package/dist/esm/{keyboard-manager-slimmer-1ae0aa4d.js → keyboard-manager-slimmer-7eed4734.js} +1 -1
- package/dist/esm/loader.js +15 -14
- package/dist/esm/{month-view-generator-b700ed08.js → month-view-generator-aaa27fce.js} +1 -1
- package/dist/esm/page-size-option-utils-50afc81a.js +61 -0
- package/dist/esm/{public-rules-fe2c7934.js → public-rules-f2005e11.js} +12 -11
- package/dist/esm/{range-00afe462.js → range-ed532278.js} +2 -2
- package/dist/esm/{responsive-format-facade-37d4d850.js → responsive-format-facade-e9926018.js} +3 -3
- package/dist/esm/{rich-text-editor-required-rule-6487ec94.js → rich-text-editor-required-rule-b559cf1a.js} +1 -1
- package/dist/esm/{split-cell-operation-9445e642.js → split-cell-operation-5587f594.js} +59 -24
- package/dist/esm/state-border-formatter-be51463d.js +129 -0
- package/dist/esm/{string-format-strategy.abstract-ec6d627b.js → string-format-strategy.abstract-0157b3c5.js} +1 -1
- package/dist/esm/{string-input-formatter-slimmer-959dff7a.js → string-input-formatter-slimmer-33ed3478.js} +4 -4
- package/dist/esm/{string-mask-strategy-49be41f0.js → string-mask-strategy-b58891b5.js} +2 -2
- package/dist/esm/{style-formatter-ad0b2bac.js → style-formatter-9662ae88.js} +2 -2
- package/dist/esm/{sub-state-notify-slimmer-ee8c417b.js → sub-state-notify-slimmer-1f907173.js} +2 -2
- package/dist/esm/{sub-state-observer-slimmer-4d30fa5c.js → sub-state-observer-slimmer-090c500a.js} +3 -3
- package/dist/esm/{time-required-rule-414b1590.js → time-required-rule-a9dc8473.js} +1 -1
- package/dist/esm/tinycolor-polyfill-7be0eb93.js +322 -0
- package/dist/esm/{token-extension-600b1c88.js → token-extension-9d717a35.js} +212 -38
- package/dist/esm/{translation-slimmer-35b1d0fa.js → translation-slimmer-4faae5a3.js} +1 -1
- package/dist/esm/{type-guard-23a08026.js → type-guard-152070e9.js} +49 -2
- package/dist/esm/{ui-ba5a4758.js → ui-b7600a48.js} +69 -1
- package/dist/esm/{valid-credit-card-number-rule-60abddac.js → valid-credit-card-number-rule-a7907cb7.js} +1 -1
- package/dist/esm/vega-accordion.entry.js +9 -8
- package/dist/esm/vega-app-footer.entry.js +2 -1
- package/dist/esm/vega-app-header-button.entry.js +10 -9
- package/dist/esm/vega-backdrop.entry.js +1 -1
- package/dist/esm/vega-banner.entry.js +6 -5
- package/dist/esm/vega-box.entry.js +7 -6
- package/dist/esm/vega-brand-logo.entry.js +2 -1
- package/dist/esm/vega-breadcrumb.entry.js +29 -12
- package/dist/esm/vega-button-circle.entry.js +11 -10
- package/dist/esm/vega-button-group_2.entry.js +104 -15
- package/dist/esm/vega-button-link.entry.js +5 -5
- package/dist/esm/vega-button.entry.js +10 -10
- package/dist/esm/vega-calendar_4.entry.js +12 -12
- package/dist/esm/vega-card.entry.js +7 -6
- package/dist/esm/vega-carousel.entry.js +7 -7
- package/dist/esm/vega-checkbox_2.entry.js +10 -10
- package/dist/esm/vega-chip.entry.js +11 -10
- package/dist/esm/vega-code-block.entry.js +16 -15
- package/dist/esm/vega-color-picker.entry.js +28 -10
- package/dist/esm/vega-color-swatch.entry.js +241 -0
- package/dist/esm/vega-combo-box.entry.js +12 -12
- package/dist/esm/vega-date-picker_2.entry.js +342 -284
- package/dist/esm/vega-dialog_2.entry.js +76 -202
- package/dist/esm/vega-divider.entry.js +7 -6
- package/dist/esm/vega-dropdown_5.entry.js +76 -20
- package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
- package/dist/esm/vega-field-label.entry.js +4 -4
- package/dist/esm/vega-file-uploader.entry.js +42 -92
- package/dist/esm/vega-flag-icon.entry.js +5 -4
- package/dist/esm/vega-flex.entry.js +8 -7
- package/dist/esm/vega-font.entry.js +6 -5
- package/dist/esm/vega-form.entry.js +12 -12
- package/dist/esm/vega-grid.entry.js +6 -5
- package/dist/esm/vega-icon.entry.js +6 -5
- package/dist/esm/vega-image-uploader.entry.js +80 -15
- package/dist/esm/vega-input-credit-card.entry.js +13 -13
- package/dist/esm/vega-input-numeric.entry.js +13 -13
- package/dist/esm/vega-input-passcode.entry.js +12 -12
- package/dist/esm/vega-input-phone-number.entry.js +11 -11
- package/dist/esm/vega-input-range.entry.js +10 -10
- package/dist/esm/vega-input-select.entry.js +52 -17
- package/dist/esm/vega-input.entry.js +17 -14
- package/dist/esm/{vega-internal-event-id-70bd893d.js → vega-internal-event-id-194bac82.js} +2 -1
- package/dist/esm/vega-item-toggle.entry.js +4 -4
- package/dist/esm/vega-left-nav_5.entry.js +122 -15
- package/dist/esm/vega-loader-wrapper_2.entry.js +4 -4
- package/dist/esm/vega-page-notification_2.entry.js +2 -2
- package/dist/esm/vega-pagination-page-selector-mobile.entry.js +5 -5
- package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +26 -10
- package/dist/esm/vega-pagination.entry.js +48 -24
- package/dist/esm/vega-popover_2.entry.js +14 -13
- package/dist/esm/vega-progress-tracker_2.entry.js +72 -17
- package/dist/esm/vega-radio_2.entry.js +13 -13
- package/dist/esm/vega-rich-text-content.entry.js +104 -22
- package/dist/esm/vega-rich-text-editor_4.entry.js +36 -24
- package/dist/esm/vega-rich-text-table-properties_3.entry.js +15 -14
- package/dist/esm/vega-section-title.entry.js +21 -3
- package/dist/esm/vega-segment-control.entry.js +4 -4
- package/dist/esm/vega-selection-chip_2.entry.js +12 -12
- package/dist/esm/vega-selection-tile_2.entry.js +11 -11
- package/dist/esm/vega-sidenav_3.entry.js +10 -10
- package/dist/esm/vega-signature-capture.entry.js +13 -12
- package/dist/esm/vega-stepper.entry.js +11 -11
- package/dist/esm/vega-tab-group_2.entry.js +5 -5
- package/dist/esm/vega-table_11.entry.js +436 -289
- package/dist/esm/vega-text.entry.js +7 -3
- package/dist/esm/vega-textarea.entry.js +9 -9
- package/dist/esm/vega-time-picker_2.entry.js +16 -16
- package/dist/esm/vega-toggle-switch.entry.js +8 -8
- package/dist/esm/vega-tooltip_2.entry.js +11 -10
- package/dist/esm/vega.js +15 -14
- package/dist/esm/{wait-for-component-did-render-03e7ccb2.js → wait-for-component-did-render-30cde59c.js} +2 -2
- package/dist/sri/vega-sri-manifest.json +389 -369
- package/dist/types/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-item-renderer.d.ts +1 -0
- package/dist/types/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-renderer.d.ts +1 -0
- package/dist/types/components/vega-breadcrumb/vega-breadcrumb.d.ts +10 -0
- package/dist/types/components/vega-button-group/slimmers/controllers/vega-button-group-all-items-disabled-controller.d.ts +21 -0
- package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.d.ts +1 -0
- package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.d.ts +1 -0
- package/dist/types/components/vega-button-group/vega-button-group-item/vega-button-group-item.d.ts +1 -0
- package/dist/types/components/vega-button-group/vega-button-group.d.ts +5 -0
- package/dist/types/components/vega-chip/vega-chip.d.ts +9 -0
- package/dist/types/components/vega-color-picker/vega-color-picker.d.ts +14 -0
- package/dist/types/components/vega-color-swatch/slimmers/renderers/vega-color-swatch-renderer.d.ts +48 -0
- package/dist/types/components/vega-color-swatch/types.d.ts +5 -0
- package/dist/types/components/vega-color-swatch/vega-color-swatch.d.ts +86 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.d.ts +1 -6
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-is-dual-months-controller.d.ts +28 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-header-render.d.ts +1 -2
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +1 -2
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.d.ts +1 -1
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.d.ts +1 -1
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.d.ts +12 -0
- package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.d.ts +12 -0
- package/dist/types/components/vega-dropdown/slimmers/renderers/vega-dropdown-renderer.d.ts +1 -0
- package/dist/types/components/vega-dropdown/vega-dropdown-item/slimmers/controllers/vega-dropdown-item-state-controller.d.ts +1 -0
- package/dist/types/components/vega-dropdown/vega-dropdown-item/slimmers/renderers/vega-dropdown-item-renderer.d.ts +1 -0
- package/dist/types/components/vega-dropdown/vega-dropdown-item/vega-dropdown-item.d.ts +4 -0
- package/dist/types/components/vega-dropdown/vega-dropdown.d.ts +10 -0
- package/dist/types/components/vega-file-uploader/vega-file-uploader.d.ts +2 -2
- package/dist/types/components/vega-image-uploader/slimmers/renderers/vega-image-uploader-default-content-renderer.d.ts +25 -0
- package/dist/types/components/vega-image-uploader/slimmers/renderers/vega-image-uploader-preview-content-renderer.d.ts +10 -0
- package/dist/types/components/vega-image-uploader/vega-image-uploader.d.ts +2 -0
- package/dist/types/components/vega-input/slimmers/renderers/vega-input-input-renderer.d.ts +1 -0
- package/dist/types/components/vega-input/types.d.ts +5 -0
- package/dist/types/components/vega-input/vega-input.d.ts +17 -1
- package/dist/types/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.d.ts +3 -0
- package/dist/types/components/vega-input-select/types.d.ts +14 -0
- package/dist/types/components/vega-input-select/vega-input-select.d.ts +19 -1
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.d.ts +0 -1
- package/dist/types/components/vega-modal/slimmers/renderers/vega-modal-renderer.d.ts +4 -0
- package/dist/types/components/vega-modal/vega-modal.d.ts +24 -3
- package/dist/types/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.d.ts +17 -0
- package/dist/types/components/vega-pagination/constants/page-size.d.ts +2 -0
- package/dist/types/components/vega-pagination/internal/vega-pagination-page-size-selector.d.ts +3 -2
- package/dist/types/components/vega-pagination/slimmers/controllers/vega-pagination-page-size-observer-controller.d.ts +2 -0
- package/dist/types/components/vega-pagination/types.d.ts +15 -0
- package/dist/types/components/vega-pagination/utils/page-size-option-utils.d.ts +42 -0
- package/dist/types/components/vega-pagination/vega-pagination-page-size-selector-mobile/slimmers/renderers/page-size-selector-mobile-dropdown-renderer.d.ts +2 -0
- package/dist/types/components/vega-pagination/vega-pagination-page-size-selector-mobile/vega-pagination-page-size-selector-mobile.d.ts +9 -2
- package/dist/types/components/vega-pagination/vega-pagination.d.ts +8 -3
- package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.d.ts +14 -2
- package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.d.ts +1 -0
- package/dist/types/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.d.ts +1 -1
- package/dist/types/components/vega-progress-tracker/vega-progress-tracker.d.ts +16 -0
- package/dist/types/components/vega-rich-text-editor/constants/constant.d.ts +5 -0
- package/dist/types/components/vega-rich-text-editor/dto/annotations/image-annotation.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/dto/annotations/inline-html-annotation.d.ts +14 -0
- package/dist/types/components/vega-rich-text-editor/dto/annotations/link-group-annotation.d.ts +8 -2
- package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +4 -2
- package/dist/types/components/vega-rich-text-editor/dto/blocks/code-block.d.ts +2 -2
- package/dist/types/components/vega-rich-text-editor/dto/blocks/html-block.d.ts +1 -11
- package/dist/types/components/vega-rich-text-editor/dto/blocks/image-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/dto/blocks/list-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/dto/blocks/list-item-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/dto/blocks/text-block.d.ts +15 -2
- package/dist/types/components/vega-rich-text-editor/dto/content-state.d.ts +9 -3
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-block-filter-styles-strategy.d.ts +27 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-node-filter-styles-strategy.d.ts +27 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy-registry.d.ts +27 -1
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy.abstract.d.ts +92 -8
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/image-node/image-filter-styles-strategy.d.ts +21 -3
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-block-filter-styles-strategy.d.ts +15 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-heading-item-block-filter-styles-strategy.d.ts +19 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-item-block-filter-styles-strategy.d.ts +25 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-title-item-block-filter-styles-strategy.d.ts +19 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/predicate.d.ts +72 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/heading-filter-styles-strategy.d.ts +10 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/paragraph-filter-styles-strategy.d.ts +34 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/title-filter-styles-strategy.d.ts +11 -0
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/code-filter-styles-strategy.d.ts +25 -2
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/link-filter-styles-strategy.d.ts +24 -4
- package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/title-heading-node-filter-styles-strategy.d.ts +62 -0
- package/dist/types/components/vega-rich-text-editor/dto/nodes/code-block-node.d.ts +7 -3
- package/dist/types/components/vega-rich-text-editor/dto/nodes/image-node.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/dto/nodes/node.abstract.d.ts +5 -3
- package/dist/types/components/vega-rich-text-editor/dto/nodes/text-node.d.ts +43 -4
- package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/block-text-nodes-renderer.abstract.d.ts +25 -0
- package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/text-block-renderer.d.ts +5 -0
- package/dist/types/components/vega-rich-text-editor/dto/renderers/nodes/text-node-renderer.d.ts +12 -0
- package/dist/types/components/vega-rich-text-editor/extensions/extension.abstract.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.d.ts +7 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.d.ts +9 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-body-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.d.ts +5 -2
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-row-block.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-block/table-block-filter-styles-strategy.d.ts +29 -0
- package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-caption/table-caption-filter-styles-strategy.d.ts +29 -0
- package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-cell/table-cell-filter-styles-strategy.d.ts +46 -0
- package/dist/types/components/vega-rich-text-editor/helpers/utils.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/interface.d.ts +27 -5
- package/dist/types/components/vega-rich-text-editor/public-api.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/custom-style-annotation-handler.d.ts +0 -7
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/html-element-to-annotation-generator.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/inline-html-annotation-handler.d.ts +11 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/continue-inline-to-rte-text-block-strategy.d.ts +43 -7
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.d.ts +8 -3
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/html-block-strategy.d.ts +34 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/predicate.d.ts +21 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/strategy-tags.d.ts +83 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.d.ts +6 -0
- package/dist/types/components/vega-section-title/slimmers/renderers/vega-section-title-renderer.d.ts +2 -0
- package/dist/types/components/vega-section-title/types.d.ts +1 -0
- package/dist/types/components/vega-section-title/vega-section-title.d.ts +14 -0
- package/dist/types/components/vega-table/slimmers/controllers/vega-table-render-input-controller.d.ts +8 -1
- package/dist/types/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.d.ts +5 -1
- package/dist/types/components/vega-table/vega-table-cell/vega-table-cell.d.ts +5 -0
- package/dist/types/components/vega-table/vega-table-head-cell/vega-table-head-cell.d.ts +5 -0
- package/dist/types/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.d.ts +1 -0
- package/dist/types/components/vega-table/vega-table-head-row/vega-table-head-row.d.ts +4 -0
- package/dist/types/components/vega-text/types.d.ts +5 -3
- package/dist/types/components/vega-tooltip/vega-tooltip-content-box/vega-tooltip-content-box.d.ts +4 -0
- package/dist/types/components/vega-tooltip/vega-tooltip.d.ts +4 -0
- package/dist/types/components.d.ts +247 -13
- package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +1 -0
- package/dist/types/helpers/formatter/string-formatter/string-mask-strategy.d.ts +56 -3
- package/dist/types/helpers/slimmers/aria-dialog-focusable-trap-slimmer.d.ts +4 -12
- package/dist/types/helpers/slimmers/drop-file-accept-filter-slimmer.d.ts +29 -0
- package/dist/types/helpers/slimmers/vega-table-child-render-input-consumer-slimmer.d.ts +48 -0
- package/dist/types/helpers/translation/interface.d.ts +4 -1
- package/dist/types/types/components.type.d.ts +10 -0
- package/dist/types/types/public-api.d.ts +3 -1
- package/dist/types/types/type-guard.d.ts +29 -1
- package/dist/types/types/ui.type.d.ts +11 -1
- package/dist/types/utils/ui.d.ts +14 -0
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/{p-7618dde4.js → p-02467b61.js} +1 -1
- package/dist/vega/p-075bb809.entry.js +1 -0
- package/dist/vega/p-085de8fc.js +1 -0
- package/dist/vega/p-0915a8d3.entry.js +1 -0
- package/dist/vega/p-0caf52e0.js +1 -0
- package/dist/vega/{p-19ad4f15.entry.js → p-0dbd7723.entry.js} +1 -1
- package/dist/vega/{p-cf70c57d.js → p-103d20f5.js} +1 -1
- package/dist/vega/p-115d6053.entry.js +1 -0
- package/dist/vega/p-116e3963.js +1 -0
- package/dist/vega/p-14de7ba0.entry.js +1 -0
- package/dist/vega/p-19a30f98.entry.js +1 -0
- package/dist/vega/{p-90137c68.entry.js → p-1ca95601.entry.js} +1 -1
- package/dist/vega/p-1dd6ba67.js +1 -0
- package/dist/vega/p-1efb47fe.entry.js +1 -0
- package/dist/vega/p-23c840dc.entry.js +1 -0
- package/dist/vega/p-246eb001.entry.js +1 -0
- package/dist/vega/p-25ab7a33.entry.js +1 -0
- package/dist/vega/p-264b3309.entry.js +1 -0
- package/dist/vega/{p-c045e4c1.entry.js → p-280f63fa.entry.js} +1 -1
- package/dist/vega/p-295326ca.entry.js +1 -0
- package/dist/vega/p-29d31c98.entry.js +1 -0
- package/dist/vega/{p-382b71a3.entry.js → p-29f42c27.entry.js} +1 -1
- package/dist/vega/p-2b5cf2b3.js +1 -0
- package/dist/vega/{p-0313393d.entry.js → p-30445cd9.entry.js} +1 -1
- package/dist/vega/p-318f0df5.js +1 -0
- package/dist/vega/p-337a5e76.js +1 -0
- package/dist/vega/p-3505f7cc.entry.js +1 -0
- package/dist/vega/p-38af89b9.js +1 -0
- package/dist/vega/p-3fae8d3f.entry.js +1 -0
- package/dist/vega/{p-b696a861.js → p-42141782.js} +1 -1
- package/dist/vega/{p-d1ca70a1.js → p-44044ed7.js} +1 -1
- package/dist/vega/p-475bd8bf.entry.js +1 -0
- package/dist/vega/{p-df5bfbc4.entry.js → p-47611a83.entry.js} +1 -1
- package/dist/vega/p-4e95248c.entry.js +1 -0
- package/dist/vega/p-4f938ee4.entry.js +1 -0
- package/dist/vega/{p-f3456993.entry.js → p-513f51ec.entry.js} +1 -1
- package/dist/vega/{p-ba415db6.entry.js → p-51d2e0ab.entry.js} +1 -1
- package/dist/vega/{p-ab21fdf6.entry.js → p-58b6ac33.entry.js} +1 -1
- package/dist/vega/{p-7362723e.entry.js → p-596bc4f6.entry.js} +1 -1
- package/dist/vega/{p-70f1cf4e.entry.js → p-597588d0.entry.js} +1 -1
- package/dist/vega/p-5f377954.js +1 -1
- package/dist/vega/p-5ffdea8e.js +1 -0
- package/dist/vega/{p-3224e47c.js → p-6572e038.js} +1 -1
- package/dist/vega/{p-b5c2fff3.entry.js → p-6d95390b.entry.js} +1 -1
- package/dist/vega/p-6e70d3cc.js +1 -0
- package/dist/vega/p-6e9f832f.js +1 -0
- package/dist/vega/{p-c9201bf4.js → p-76063dcb.js} +1 -1
- package/dist/vega/p-783531cf.entry.js +1 -0
- package/dist/vega/{p-35386999.entry.js → p-7d85cc74.entry.js} +1 -1
- package/dist/vega/p-7df43192.entry.js +1 -0
- package/dist/vega/p-7faaa5e1.entry.js +1 -0
- package/dist/vega/{p-517434d4.entry.js → p-8583dd34.entry.js} +1 -1
- package/dist/vega/p-85abe824.entry.js +1 -0
- package/dist/vega/p-874bf8b2.js +1 -0
- package/dist/vega/p-88b6184c.entry.js +1 -0
- package/dist/vega/p-8aee6b74.js +1 -0
- package/dist/vega/{p-1557ed92.entry.js → p-8b217c7e.entry.js} +1 -1
- package/dist/vega/p-8da66d41.entry.js +1 -0
- package/dist/vega/{p-b3e40faf.js → p-956b170c.js} +1 -1
- package/dist/vega/{p-1c45565d.js → p-9751c801.js} +1 -1
- package/dist/vega/{p-7ceab8c7.entry.js → p-97f36f4e.entry.js} +1 -1
- package/dist/vega/p-988401c3.entry.js +1 -0
- package/dist/vega/{p-47ca1f69.entry.js → p-9c1a48b9.entry.js} +1 -1
- package/dist/vega/p-9d854d43.js +1 -0
- package/dist/vega/p-9dcecdd3.js +1 -0
- package/dist/vega/{p-612e3ded.js → p-a07c0f8c.js} +1 -1
- package/dist/vega/{p-576fe408.js → p-a0c3968b.js} +1 -1
- package/dist/vega/p-a30ae8a1.js +1 -0
- package/dist/vega/p-a5bd3ecd.entry.js +1 -0
- package/dist/vega/p-a6dbc63d.entry.js +1 -0
- package/dist/vega/p-aa985d73.js +1 -0
- package/dist/vega/{p-44c5cbb7.js → p-ab829745.js} +1 -1
- package/dist/vega/p-b08a70e6.entry.js +1 -0
- package/dist/vega/p-b19b1c08.js +1 -0
- package/dist/vega/p-b5497af2.entry.js +1 -0
- package/dist/vega/p-b7624ce4.js +1 -0
- package/dist/vega/p-b9386dd0.js +1 -0
- package/dist/vega/{p-e84b95d4.js → p-b9947846.js} +1 -1
- package/dist/vega/p-b9a95aca.entry.js +1 -0
- package/dist/vega/{p-dc9b5063.entry.js → p-bb46d8e6.entry.js} +1 -1
- package/dist/vega/{p-ec1d76c6.entry.js → p-c366e7f7.entry.js} +1 -1
- package/dist/vega/p-c36afa21.entry.js +1 -0
- package/dist/vega/{p-60cf2a68.js → p-c8435185.js} +1 -1
- package/dist/vega/{p-04e56b0c.entry.js → p-c8d41cdc.entry.js} +1 -1
- package/dist/vega/p-cab70b95.entry.js +1 -0
- package/dist/vega/p-cc18970f.entry.js +1 -0
- package/dist/vega/p-d320496e.entry.js +1 -0
- package/dist/vega/{p-89e56502.js → p-d32e83e7.js} +1 -1
- package/dist/vega/{p-65900dbf.entry.js → p-d456386a.entry.js} +1 -1
- package/dist/vega/p-d4f1f007.js +3 -0
- package/dist/vega/{p-82016096.js → p-d5531d3c.js} +1 -1
- package/dist/vega/{p-4eb282ef.entry.js → p-d7bd2470.entry.js} +1 -1
- package/dist/vega/p-d872beb1.entry.js +1 -0
- package/dist/vega/p-d9d5c693.entry.js +1 -0
- package/dist/vega/{p-be3517be.entry.js → p-da742a7f.entry.js} +1 -1
- package/dist/vega/{p-204c7d41.js → p-dd6211cd.js} +1 -1
- package/dist/vega/{p-f48c43f4.entry.js → p-e340d58c.entry.js} +1 -1
- package/dist/vega/p-e71864ff.js +1 -0
- package/dist/vega/{p-7912741f.entry.js → p-e7a4b760.entry.js} +1 -1
- package/dist/vega/{p-ffa2e3a6.entry.js → p-ea564928.entry.js} +1 -1
- package/dist/vega/p-eb0ebf50.entry.js +1 -0
- package/dist/vega/p-ebdb489c.entry.js +1 -0
- package/dist/vega/{p-7c2fecfd.entry.js → p-ed01657b.entry.js} +1 -1
- package/dist/vega/p-eda7cd76.entry.js +1 -0
- package/dist/vega/{p-68a531cf.js → p-edda10f7.js} +1 -1
- package/dist/vega/{p-2c2df248.js → p-ef59f6f0.js} +1 -1
- package/dist/vega/{p-1a2f92a3.entry.js → p-efc8c09e.entry.js} +1 -1
- package/dist/vega/p-f020738c.entry.js +1 -0
- package/dist/vega/{p-878851f6.js → p-f28a6074.js} +1 -1
- package/dist/vega/{p-07a2b42a.js → p-f7a5746b.js} +1 -1
- package/dist/vega/{p-9dc23325.entry.js → p-f89cf75a.entry.js} +1 -1
- package/dist/vega/p-fb5ea4b2.js +1 -0
- package/dist/vega/p-fc7ab79d.js +1 -0
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +1 -1
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-layout-controller.js +0 -146
- package/dist/types/components/vega-file-uploader/slimmers/controllers/vega-file-uploader-drop-file-filter-controller.d.ts +0 -22
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-layout-controller.d.ts +0 -42
- package/dist/vega/p-010b5e74.js +0 -1
- package/dist/vega/p-01883ffc.entry.js +0 -1
- package/dist/vega/p-02578a59.js +0 -1
- package/dist/vega/p-043e685a.entry.js +0 -1
- package/dist/vega/p-08780df0.entry.js +0 -1
- package/dist/vega/p-10fa4eac.js +0 -1
- package/dist/vega/p-18619467.js +0 -1
- package/dist/vega/p-1feb4f2a.entry.js +0 -1
- package/dist/vega/p-203bc4db.entry.js +0 -1
- package/dist/vega/p-21c9e1ca.entry.js +0 -1
- package/dist/vega/p-22336063.js +0 -1
- package/dist/vega/p-224b67ff.entry.js +0 -1
- package/dist/vega/p-2d917e2d.entry.js +0 -1
- package/dist/vega/p-2e73582d.entry.js +0 -1
- package/dist/vega/p-334e3b02.entry.js +0 -1
- package/dist/vega/p-33860e54.js +0 -1
- package/dist/vega/p-365d21ac.entry.js +0 -1
- package/dist/vega/p-367d44d9.entry.js +0 -1
- package/dist/vega/p-3d2d267d.js +0 -1
- package/dist/vega/p-3f3c771a.entry.js +0 -1
- package/dist/vega/p-434fc427.entry.js +0 -1
- package/dist/vega/p-559197f8.js +0 -1
- package/dist/vega/p-5ae4ea20.entry.js +0 -1
- package/dist/vega/p-68124bc5.js +0 -1
- package/dist/vega/p-6af55f1c.entry.js +0 -1
- package/dist/vega/p-6c5250b3.js +0 -1
- package/dist/vega/p-6f2e5bc6.js +0 -1
- package/dist/vega/p-716c71e6.js +0 -1
- package/dist/vega/p-76b80a0c.js +0 -1
- package/dist/vega/p-7942c042.entry.js +0 -1
- package/dist/vega/p-8327635d.js +0 -1
- package/dist/vega/p-840ad046.entry.js +0 -1
- package/dist/vega/p-8ac2d165.js +0 -1
- package/dist/vega/p-8adf9732.entry.js +0 -1
- package/dist/vega/p-8b891f36.entry.js +0 -1
- package/dist/vega/p-9341c1a9.js +0 -1
- package/dist/vega/p-9390a94b.entry.js +0 -1
- package/dist/vega/p-9551da9c.entry.js +0 -1
- package/dist/vega/p-9862d1a8.entry.js +0 -1
- package/dist/vega/p-a4dbf2cc.js +0 -1
- package/dist/vega/p-a99e75a1.entry.js +0 -1
- package/dist/vega/p-b5a6bd0f.entry.js +0 -1
- package/dist/vega/p-c4e32125.entry.js +0 -1
- package/dist/vega/p-c5b698f6.entry.js +0 -1
- package/dist/vega/p-c61279a7.entry.js +0 -1
- package/dist/vega/p-c6d62f0d.js +0 -1
- package/dist/vega/p-c8feb644.entry.js +0 -1
- package/dist/vega/p-cc055723.entry.js +0 -1
- package/dist/vega/p-cca5042b.entry.js +0 -1
- package/dist/vega/p-cda45d2a.entry.js +0 -1
- package/dist/vega/p-cdf5b2f0.entry.js +0 -1
- package/dist/vega/p-d1494c7c.entry.js +0 -1
- package/dist/vega/p-d202e69d.entry.js +0 -1
- package/dist/vega/p-dcd18ab1.js +0 -1
- package/dist/vega/p-e4726dcd.entry.js +0 -1
- package/dist/vega/p-ea21462f.js +0 -1
- package/dist/vega/p-f4190826.entry.js +0 -1
- package/dist/vega/p-fdac91c4.entry.js +0 -1
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const codeBlock = require('./code-block-
|
|
3
|
+
const codeBlock = require('./code-block-b1f8aded.js');
|
|
4
4
|
const misc = require('./misc-3d30df91.js');
|
|
5
|
-
const typeGuard = require('./type-guard-
|
|
5
|
+
const typeGuard = require('./type-guard-3ec852d7.js');
|
|
6
6
|
const changeManager = require('./change-manager-a297e4d2.js');
|
|
7
|
-
const domNodeSubjectObserverFactory = require('./dom-node-subject-observer-factory-
|
|
8
|
-
const vegaInternalEventId = require('./vega-internal-event-id-
|
|
9
|
-
const
|
|
10
|
-
const ui = require('./ui-9e8c9732.js');
|
|
7
|
+
const domNodeSubjectObserverFactory = require('./dom-node-subject-observer-factory-9110cb94.js');
|
|
8
|
+
const vegaInternalEventId = require('./vega-internal-event-id-87014e4f.js');
|
|
9
|
+
const ui = require('./ui-ae4ee13d.js');
|
|
11
10
|
const object = require('./object-b53e9416.js');
|
|
12
11
|
const globalSlimmerRegistry = require('./global-slimmer-registry-b3bce7e0.js');
|
|
13
12
|
|
|
@@ -116,13 +115,9 @@ class RTEListItemBlock extends codeBlock.RTETextBlock {
|
|
|
116
115
|
/**
|
|
117
116
|
* @inheritDoc
|
|
118
117
|
*/
|
|
119
|
-
toHtml() {
|
|
120
|
-
const attrStr = super.generateAttributeString();
|
|
121
|
-
return [
|
|
122
|
-
`<li${attrStr}>`,
|
|
123
|
-
this.children.map((node) => node.toHtml()).join(''),
|
|
124
|
-
`</li>`,
|
|
125
|
-
].join('');
|
|
118
|
+
toHtml(options) {
|
|
119
|
+
const attrStr = super.generateAttributeString(options);
|
|
120
|
+
return [`<li${attrStr}>`, this.getChildrenHtml(options), `</li>`].join('');
|
|
126
121
|
}
|
|
127
122
|
/**
|
|
128
123
|
* @inheritDoc
|
|
@@ -405,12 +400,12 @@ class RTEListBlock extends codeBlock.RTEBlock {
|
|
|
405
400
|
/**
|
|
406
401
|
* @inheritDoc
|
|
407
402
|
*/
|
|
408
|
-
toHtml() {
|
|
403
|
+
toHtml(options) {
|
|
409
404
|
const BlockTag = this.getBlockTag();
|
|
410
|
-
const attrStr = super.generateAttributeString();
|
|
405
|
+
const attrStr = super.generateAttributeString(options);
|
|
411
406
|
return [
|
|
412
407
|
`<${BlockTag}${attrStr}>`,
|
|
413
|
-
this.children.map((block) => block.toHtml()).join(''),
|
|
408
|
+
this.children.map((block) => block.toHtml(options)).join(''),
|
|
414
409
|
`</${BlockTag}>`,
|
|
415
410
|
].join('');
|
|
416
411
|
}
|
|
@@ -604,7 +599,7 @@ class ElementToDtoStrategyProcessor {
|
|
|
604
599
|
const strategies = this.getElementToBlockStrategies();
|
|
605
600
|
const outputs = [];
|
|
606
601
|
for (let i = 0; i < elements.length; i++) {
|
|
607
|
-
if (this.isInvalidElement(elements[i]))
|
|
602
|
+
if (this.isInvalidElement(elements[i], options))
|
|
608
603
|
continue;
|
|
609
604
|
let canHandledCount = 0;
|
|
610
605
|
for (const strategy of strategies) {
|
|
@@ -631,14 +626,21 @@ class ElementToDtoStrategyProcessor {
|
|
|
631
626
|
return outputs;
|
|
632
627
|
}
|
|
633
628
|
/**
|
|
634
|
-
* Checks if the given element
|
|
629
|
+
* Checks if the given element should be skipped during processing.
|
|
635
630
|
*
|
|
636
|
-
*
|
|
637
|
-
*
|
|
631
|
+
* Comment nodes are always skipped. META and STYLE elements are skipped only
|
|
632
|
+
* in auto-match mode; in raw-HTML mode (autoMatchFormat: false) they are passed
|
|
633
|
+
* through so downstream strategies can decide how to handle them.
|
|
634
|
+
*
|
|
635
|
+
* @param {HTMLElement} element - The element to check.
|
|
636
|
+
* @param {VegaRTETransformOptions} options - Transform options.
|
|
637
|
+
* @returns {boolean} True when the element should be skipped.
|
|
638
638
|
*/
|
|
639
|
-
isInvalidElement(element) {
|
|
639
|
+
isInvalidElement(element, options) {
|
|
640
640
|
if (element.nodeType === Node.COMMENT_NODE)
|
|
641
641
|
return true;
|
|
642
|
+
if (options.autoMatchFormat === false)
|
|
643
|
+
return false;
|
|
642
644
|
return ['META', 'STYLE'].includes(element.nodeName);
|
|
643
645
|
}
|
|
644
646
|
/**
|
|
@@ -824,6 +826,7 @@ class ImageAnnotation extends codeBlock.NodeAnnotation {
|
|
|
824
826
|
}
|
|
825
827
|
}
|
|
826
828
|
}
|
|
829
|
+
ImageAnnotation.BASE_STYLES = { verticalAlign: 'bottom' };
|
|
827
830
|
|
|
828
831
|
/**
|
|
829
832
|
* Update the image node annotation map strategy.
|
|
@@ -916,9 +919,9 @@ class RTEImageNode extends codeBlock.RTEDecoratorNode {
|
|
|
916
919
|
/**
|
|
917
920
|
* @inheritDoc
|
|
918
921
|
*/
|
|
919
|
-
toHtml() {
|
|
922
|
+
toHtml(options) {
|
|
920
923
|
const imageAnnotation = this.getAnnotationByType(codeBlock.NodeAnnotationTypeEnum.IMAGE);
|
|
921
|
-
const attrStr = super.generateAttributeString(...[
|
|
924
|
+
const attrStr = super.generateAttributeString(options, ...[
|
|
922
925
|
imageAnnotation && imageAnnotation.alt ? `alt="${imageAnnotation.alt}"` : null,
|
|
923
926
|
`src="${this.url}"`,
|
|
924
927
|
imageAnnotation && imageAnnotation.size ? `data-size="${imageAnnotation.size}"` : null,
|
|
@@ -1138,9 +1141,9 @@ class RTEImageBlock extends codeBlock.RTEBlock {
|
|
|
1138
1141
|
/**
|
|
1139
1142
|
* @inheritDoc
|
|
1140
1143
|
*/
|
|
1141
|
-
toHtml() {
|
|
1142
|
-
const attrStr = super.generateAttributeString();
|
|
1143
|
-
const children = this.children.map((node) => node.toHtml()).join('');
|
|
1144
|
+
toHtml(options) {
|
|
1145
|
+
const attrStr = super.generateAttributeString(options);
|
|
1146
|
+
const children = this.children.map((node) => node.toHtml(options)).join('');
|
|
1144
1147
|
return super.shouldRenderAsInternalWrapper()
|
|
1145
1148
|
? children
|
|
1146
1149
|
: [`<div${attrStr}>`, children, `</div>`].join('');
|
|
@@ -1232,23 +1235,26 @@ class RTEHtmlBlock extends codeBlock.RTEBlock {
|
|
|
1232
1235
|
* @inheritDoc
|
|
1233
1236
|
*/
|
|
1234
1237
|
isNotEmpty() {
|
|
1235
|
-
|
|
1238
|
+
// Any RTEHtmlBlock — whether void (hr, br), childless (canvas, iframe),
|
|
1239
|
+
// or with children — represents real user content. Only the default empty
|
|
1240
|
+
// text paragraph should make the editor report as empty.
|
|
1241
|
+
return true;
|
|
1236
1242
|
}
|
|
1237
1243
|
/**
|
|
1238
1244
|
* @inheritDoc
|
|
1239
1245
|
*/
|
|
1240
|
-
toHtml() {
|
|
1246
|
+
toHtml(options) {
|
|
1241
1247
|
const BlockTag = this.htmlTag;
|
|
1242
|
-
const attrStr = super.generateAttributeString();
|
|
1248
|
+
const attrStr = super.generateAttributeString(options);
|
|
1243
1249
|
// Handle void/self-closing tags (hr, input, col, etc.)
|
|
1244
1250
|
// Uses HTML5 syntax without self-closing slash for consistency with img and br tags
|
|
1245
|
-
if (
|
|
1251
|
+
if (codeBlock.HTML_VOID_TAGS.has(this.htmlTag)) {
|
|
1246
1252
|
return `<${BlockTag}${attrStr}>`;
|
|
1247
1253
|
}
|
|
1248
1254
|
// Handle normal tags with children
|
|
1249
1255
|
return [
|
|
1250
1256
|
`<${BlockTag}${attrStr}>`,
|
|
1251
|
-
this.children.map((block) => block.toHtml()).join(''),
|
|
1257
|
+
this.children.map((block) => block.toHtml(options)).join(''),
|
|
1252
1258
|
`</${BlockTag}>`,
|
|
1253
1259
|
].join('');
|
|
1254
1260
|
}
|
|
@@ -1259,16 +1265,6 @@ class RTEHtmlBlock extends codeBlock.RTEBlock {
|
|
|
1259
1265
|
return Object.assign(Object.assign({}, super.toJSON()), { id: this.id, type: this.type, htmlTag: this.htmlTag, children: this.children.map((child) => child.toJSON()) });
|
|
1260
1266
|
}
|
|
1261
1267
|
}
|
|
1262
|
-
/**
|
|
1263
|
-
* Void/self-closing tags that don't have closing tags and don't contain children.
|
|
1264
|
-
* These tags should be rendered as <tag> or <tag/> instead of <tag></tag>.
|
|
1265
|
-
*
|
|
1266
|
-
* Based on canHandleTags from html-block-strategy.ts, the following are void tags:
|
|
1267
|
-
* - HR: horizontal rule
|
|
1268
|
-
* - INPUT: form input
|
|
1269
|
-
* - COL: table column
|
|
1270
|
-
*/
|
|
1271
|
-
RTEHtmlBlock.VOID_TAGS = new Set(['hr', 'input', 'col']);
|
|
1272
1268
|
|
|
1273
1269
|
/**
|
|
1274
1270
|
* Merge the two blocks node into first block if the two blocks nodes type is same(text node or image node)
|
|
@@ -1925,32 +1921,9 @@ class CustomStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
|
1925
1921
|
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
1926
1922
|
*/
|
|
1927
1923
|
handle(element) {
|
|
1928
|
-
const styles =
|
|
1924
|
+
const styles = codeBlock.createStyleMapFromElement(element);
|
|
1929
1925
|
return Object.keys(styles).length > 0 ? { customStyle: styles } : {};
|
|
1930
1926
|
}
|
|
1931
|
-
/**
|
|
1932
|
-
* Obtain and format the style of element.
|
|
1933
|
-
*
|
|
1934
|
-
* @param {HTMLElement} element - current element.
|
|
1935
|
-
* @returns {AnnotationStyle} - Record<string, string>.
|
|
1936
|
-
*/
|
|
1937
|
-
generateCustomStyleAnnotations(element) {
|
|
1938
|
-
const customStyle = element.getAttribute('style');
|
|
1939
|
-
if (!customStyle)
|
|
1940
|
-
return {};
|
|
1941
|
-
const styleValue = customStyle.split(';').filter(Boolean);
|
|
1942
|
-
return styleValue
|
|
1943
|
-
.filter((key) => key !== ' ')
|
|
1944
|
-
.map((key) => {
|
|
1945
|
-
// to remove redundant quote pairs if needed, for example: ['fontFamily: "Roboto Mono"'] will be updated to ['fontFamily: Roboto Mono']
|
|
1946
|
-
const styleObject = key.replace(/(['"])(.*?)\1/g, '$2').split(':');
|
|
1947
|
-
const styleKey = string.dashCaseToCamel(styleObject[0].trim());
|
|
1948
|
-
return {
|
|
1949
|
-
[styleKey]: styleObject[1].trim().replace(';', ''),
|
|
1950
|
-
};
|
|
1951
|
-
})
|
|
1952
|
-
.reduce((current, obj) => (Object.assign(Object.assign({}, current), obj)), {});
|
|
1953
|
-
}
|
|
1954
1927
|
}
|
|
1955
1928
|
|
|
1956
1929
|
/** Handle indent annotation */
|
|
@@ -2175,157 +2148,6 @@ class ItalicAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
|
2175
2148
|
}
|
|
2176
2149
|
}
|
|
2177
2150
|
|
|
2178
|
-
/** Handle link annotation */
|
|
2179
|
-
class LinkAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2180
|
-
constructor() {
|
|
2181
|
-
super(...arguments);
|
|
2182
|
-
this.handlers = [
|
|
2183
|
-
new CustomAttributeAnnotationHandler(),
|
|
2184
|
-
new CustomClassAnnotationHandler(),
|
|
2185
|
-
new CustomStyleAnnotationHandler(),
|
|
2186
|
-
];
|
|
2187
|
-
}
|
|
2188
|
-
/**
|
|
2189
|
-
* Can be handle.
|
|
2190
|
-
*
|
|
2191
|
-
* @param {RTEDtoClassPrototype} targetDto - Target DTO.
|
|
2192
|
-
* @returns {boolean} - .
|
|
2193
|
-
*/
|
|
2194
|
-
canHandle(targetDto) {
|
|
2195
|
-
return targetDto.name === 'RTETextNode';
|
|
2196
|
-
}
|
|
2197
|
-
/**
|
|
2198
|
-
* Handle annotation.
|
|
2199
|
-
*
|
|
2200
|
-
* @param {HTMLElement} element - Current elements.
|
|
2201
|
-
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2202
|
-
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2203
|
-
*/
|
|
2204
|
-
handle(element, parentAnnotations = {}) {
|
|
2205
|
-
if (parentAnnotations.link)
|
|
2206
|
-
return { link: parentAnnotations.link };
|
|
2207
|
-
return element.tagName === 'A' ? { link: this.generateLinkAnnotations(element) } : {};
|
|
2208
|
-
}
|
|
2209
|
-
/**
|
|
2210
|
-
* Generate link annotations.
|
|
2211
|
-
*
|
|
2212
|
-
* @param {HTMLElement} element - Current elements.
|
|
2213
|
-
* @returns {VegaRTELink} - link annotations.
|
|
2214
|
-
*/
|
|
2215
|
-
generateLinkAnnotations(element) {
|
|
2216
|
-
const annotations = {
|
|
2217
|
-
href: element.getAttribute('href') || '',
|
|
2218
|
-
groupKey: misc.generateUUID(),
|
|
2219
|
-
};
|
|
2220
|
-
this.handlers.forEach((handler) => {
|
|
2221
|
-
Object.assign(annotations, handler.handle(element));
|
|
2222
|
-
});
|
|
2223
|
-
return annotations;
|
|
2224
|
-
}
|
|
2225
|
-
}
|
|
2226
|
-
|
|
2227
|
-
/** Handle strike through annotation */
|
|
2228
|
-
class StrikeThroughAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2229
|
-
/**
|
|
2230
|
-
* @inheritDoc
|
|
2231
|
-
*/
|
|
2232
|
-
canHandle(targetDto) {
|
|
2233
|
-
return targetDto.name === 'RTETextNode';
|
|
2234
|
-
}
|
|
2235
|
-
/**
|
|
2236
|
-
* Handle annotation.
|
|
2237
|
-
*
|
|
2238
|
-
* @param {HTMLElement} element - Current elements.
|
|
2239
|
-
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2240
|
-
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2241
|
-
*/
|
|
2242
|
-
handle(element, parentAnnotations = {}) {
|
|
2243
|
-
return this.isStrikethrough(element) || parentAnnotations.strikethrough
|
|
2244
|
-
? { strikethrough: true }
|
|
2245
|
-
: {};
|
|
2246
|
-
}
|
|
2247
|
-
/**
|
|
2248
|
-
* Is strikethrough element.
|
|
2249
|
-
*
|
|
2250
|
-
* @param {HTMLElement} element - current element.
|
|
2251
|
-
* @returns {boolean} - boolean.
|
|
2252
|
-
*/
|
|
2253
|
-
isStrikethrough(element) {
|
|
2254
|
-
return (element.style.textDecoration.includes(codeBlock.STRIKETHROUGH_TEXT_DECORATION) ||
|
|
2255
|
-
element.nodeName === 'S' ||
|
|
2256
|
-
element.nodeName === 'DEL' ||
|
|
2257
|
-
element.classList.contains('v-rte--strikethrough'));
|
|
2258
|
-
}
|
|
2259
|
-
}
|
|
2260
|
-
|
|
2261
|
-
/** Handle underline annotation */
|
|
2262
|
-
class UnderlineAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2263
|
-
/**
|
|
2264
|
-
* @inheritDoc
|
|
2265
|
-
*/
|
|
2266
|
-
canHandle(targetDto) {
|
|
2267
|
-
return targetDto.name === 'RTETextNode';
|
|
2268
|
-
}
|
|
2269
|
-
/**
|
|
2270
|
-
* Handle annotation.
|
|
2271
|
-
*
|
|
2272
|
-
* @param {HTMLElement} element - Current elements.
|
|
2273
|
-
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2274
|
-
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2275
|
-
*/
|
|
2276
|
-
handle(element, parentAnnotations = {}) {
|
|
2277
|
-
return this.isUnderline(element) || parentAnnotations.underline ? { underline: true } : {};
|
|
2278
|
-
}
|
|
2279
|
-
/**
|
|
2280
|
-
* Is underline element.
|
|
2281
|
-
*
|
|
2282
|
-
* @param {HTMLElement} element - current element.
|
|
2283
|
-
* @returns {boolean} - boolean.
|
|
2284
|
-
*/
|
|
2285
|
-
isUnderline(element) {
|
|
2286
|
-
return (element.style.textDecoration.includes(codeBlock.UNDERLINE_TEXT_DECORATION) ||
|
|
2287
|
-
element.nodeName === 'U' ||
|
|
2288
|
-
element.nodeName === 'INS' ||
|
|
2289
|
-
element.classList.contains('v-rte--underline'));
|
|
2290
|
-
}
|
|
2291
|
-
}
|
|
2292
|
-
|
|
2293
|
-
/**
|
|
2294
|
-
* Registry for managing filter styles strategies keyed by DTO class name.
|
|
2295
|
-
*
|
|
2296
|
-
* Provides common `register` / `getStrategies` primitives that both output-
|
|
2297
|
-
* filtering strategies (DTO → HTML) and annotation-parsing strategies
|
|
2298
|
-
* (HTML → DTO) build upon.
|
|
2299
|
-
*
|
|
2300
|
-
* TODO: Currently, the filter styles strategies are applied for all rich text editors. We need to apply the strategies with a specific rich text editor instance when we have multiple rich text editors in the future.
|
|
2301
|
-
*/
|
|
2302
|
-
class RTEFilterStylesStrategyRegistry {
|
|
2303
|
-
/**
|
|
2304
|
-
* Registers a filter styles strategy for a specific DTO class name.
|
|
2305
|
-
* Duplicate strategy instances are ignored.
|
|
2306
|
-
*
|
|
2307
|
-
* @param {string} dtoClassName - The DTO class name (e.g. `RTEListBlock.name`).
|
|
2308
|
-
* @param {RTEFilterStylesStrategy} strategy - The strategy instance to register.
|
|
2309
|
-
*/
|
|
2310
|
-
static register(dtoClassName, strategy) {
|
|
2311
|
-
var _a;
|
|
2312
|
-
const set = (_a = this.registry.get(dtoClassName)) !== null && _a !== void 0 ? _a : new Set();
|
|
2313
|
-
set.add(strategy);
|
|
2314
|
-
this.registry.set(dtoClassName, set);
|
|
2315
|
-
}
|
|
2316
|
-
/**
|
|
2317
|
-
* Retrieves all strategies registered for a given DTO class name.
|
|
2318
|
-
*
|
|
2319
|
-
* @param {string} dtoClassName - The DTO class name to look up.
|
|
2320
|
-
* @returns {RTEFilterStylesStrategy[]} Registered strategies (empty array if none).
|
|
2321
|
-
*/
|
|
2322
|
-
static getStrategies(dtoClassName) {
|
|
2323
|
-
var _a;
|
|
2324
|
-
return Array.from((_a = this.registry.get(dtoClassName)) !== null && _a !== void 0 ? _a : []);
|
|
2325
|
-
}
|
|
2326
|
-
}
|
|
2327
|
-
RTEFilterStylesStrategyRegistry.registry = new Map();
|
|
2328
|
-
|
|
2329
2151
|
/** Handle text style annotation */
|
|
2330
2152
|
class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2331
2153
|
/**
|
|
@@ -2439,7 +2261,8 @@ class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
|
2439
2261
|
*/
|
|
2440
2262
|
getElementTypeByClassName(element) {
|
|
2441
2263
|
if (element.className) {
|
|
2442
|
-
|
|
2264
|
+
// Match class name with pattern "v-rte--text-style-{textStyle}" or "v-rte-{textStyle}".
|
|
2265
|
+
const match = /\bv-rte-(?:-text-style-)?(title|subtitle|heading-1|heading-2|heading-3|heading-4|heading-5|heading-6|paragraph)\b/.exec(element.className);
|
|
2443
2266
|
if (match) {
|
|
2444
2267
|
return match[1];
|
|
2445
2268
|
}
|
|
@@ -2448,131 +2271,311 @@ class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
|
2448
2271
|
}
|
|
2449
2272
|
}
|
|
2450
2273
|
|
|
2451
|
-
/**
|
|
2452
|
-
class
|
|
2274
|
+
/**
|
|
2275
|
+
* Predicate class provides static methods to check specific conditions on HTML elements.
|
|
2276
|
+
*/
|
|
2277
|
+
class Predicate {
|
|
2453
2278
|
/**
|
|
2454
|
-
*
|
|
2279
|
+
* Checks if the given element is a title or subtitle.
|
|
2280
|
+
*
|
|
2281
|
+
* @param {HTMLElement} element The element to check.
|
|
2282
|
+
* @returns {boolean} True if the element is a title or subtitle, false otherwise.
|
|
2283
|
+
*/
|
|
2284
|
+
static isTitleOrSubtitle(element) {
|
|
2285
|
+
if (element.nodeName === 'DIV') {
|
|
2286
|
+
const textBlockType = Predicate.textStyleHandler['getTextStyle'](element);
|
|
2287
|
+
return textBlockType === 'title' || textBlockType === 'subtitle';
|
|
2288
|
+
}
|
|
2289
|
+
return false;
|
|
2290
|
+
}
|
|
2291
|
+
/**
|
|
2292
|
+
* Check if the given element is a link element (anchor tag).
|
|
2293
|
+
*
|
|
2294
|
+
* @param {HTMLElement} element The element to check.
|
|
2295
|
+
* @returns {boolean} True if the element is a link element, false otherwise.
|
|
2296
|
+
*/
|
|
2297
|
+
static isLinkElement(element) {
|
|
2298
|
+
return element.nodeName === 'A';
|
|
2299
|
+
}
|
|
2300
|
+
}
|
|
2301
|
+
Predicate.textStyleHandler = new TextStyleAnnotationHandler();
|
|
2302
|
+
|
|
2303
|
+
/** Handle link annotation */
|
|
2304
|
+
class LinkAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2305
|
+
constructor() {
|
|
2306
|
+
super(...arguments);
|
|
2307
|
+
this.handlers = [
|
|
2308
|
+
new CustomAttributeAnnotationHandler(),
|
|
2309
|
+
new CustomClassAnnotationHandler(),
|
|
2310
|
+
new CustomStyleAnnotationHandler(),
|
|
2311
|
+
];
|
|
2312
|
+
}
|
|
2313
|
+
/**
|
|
2314
|
+
* Can be handle.
|
|
2315
|
+
*
|
|
2316
|
+
* @param {RTEDtoClassPrototype} targetDto - Target DTO.
|
|
2317
|
+
* @returns {boolean} - .
|
|
2455
2318
|
*/
|
|
2456
2319
|
canHandle(targetDto) {
|
|
2457
|
-
return targetDto.name === '
|
|
2320
|
+
return targetDto.name === 'RTETextNode';
|
|
2458
2321
|
}
|
|
2459
2322
|
/**
|
|
2460
2323
|
* Handle annotation.
|
|
2461
2324
|
*
|
|
2462
2325
|
* @param {HTMLElement} element - Current elements.
|
|
2463
|
-
* @
|
|
2326
|
+
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2327
|
+
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2464
2328
|
*/
|
|
2465
|
-
handle(element) {
|
|
2466
|
-
|
|
2467
|
-
|
|
2329
|
+
handle(element, parentAnnotations = {}) {
|
|
2330
|
+
if (parentAnnotations.link)
|
|
2331
|
+
return { link: parentAnnotations.link };
|
|
2332
|
+
return Predicate.isLinkElement(element) ? { link: this.generateLinkAnnotations(element) } : {};
|
|
2468
2333
|
}
|
|
2469
2334
|
/**
|
|
2470
|
-
*
|
|
2335
|
+
* Generate link annotations.
|
|
2471
2336
|
*
|
|
2472
|
-
* @param {HTMLElement} element -
|
|
2473
|
-
* @returns {
|
|
2337
|
+
* @param {HTMLElement} element - Current elements.
|
|
2338
|
+
* @returns {VegaRTELink} - link annotations.
|
|
2474
2339
|
*/
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2340
|
+
generateLinkAnnotations(element) {
|
|
2341
|
+
const annotations = {
|
|
2342
|
+
href: element.getAttribute('href') || '',
|
|
2343
|
+
groupKey: misc.generateUUID(),
|
|
2344
|
+
};
|
|
2345
|
+
this.handlers.forEach((handler) => {
|
|
2346
|
+
Object.assign(annotations, handler.handle(element));
|
|
2347
|
+
});
|
|
2348
|
+
return annotations;
|
|
2480
2349
|
}
|
|
2481
2350
|
}
|
|
2482
2351
|
|
|
2483
|
-
/** Handle
|
|
2484
|
-
class
|
|
2352
|
+
/** Handle strike through annotation */
|
|
2353
|
+
class StrikeThroughAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2485
2354
|
/**
|
|
2486
2355
|
* @inheritDoc
|
|
2487
2356
|
*/
|
|
2488
2357
|
canHandle(targetDto) {
|
|
2489
|
-
return targetDto.name === '
|
|
2358
|
+
return targetDto.name === 'RTETextNode';
|
|
2490
2359
|
}
|
|
2491
2360
|
/**
|
|
2492
2361
|
* Handle annotation.
|
|
2493
2362
|
*
|
|
2494
2363
|
* @param {HTMLElement} element - Current elements.
|
|
2495
|
-
* @
|
|
2364
|
+
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2365
|
+
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2496
2366
|
*/
|
|
2497
|
-
handle(element) {
|
|
2498
|
-
return
|
|
2367
|
+
handle(element, parentAnnotations = {}) {
|
|
2368
|
+
return this.isStrikethrough(element) || parentAnnotations.strikethrough
|
|
2369
|
+
? { strikethrough: true }
|
|
2370
|
+
: {};
|
|
2371
|
+
}
|
|
2372
|
+
/**
|
|
2373
|
+
* Is strikethrough element.
|
|
2374
|
+
*
|
|
2375
|
+
* @param {HTMLElement} element - current element.
|
|
2376
|
+
* @returns {boolean} - boolean.
|
|
2377
|
+
*/
|
|
2378
|
+
isStrikethrough(element) {
|
|
2379
|
+
return (element.style.textDecoration.includes(codeBlock.STRIKETHROUGH_TEXT_DECORATION) ||
|
|
2380
|
+
element.nodeName === 'S' ||
|
|
2381
|
+
element.nodeName === 'DEL' ||
|
|
2382
|
+
element.classList.contains('v-rte--strikethrough'));
|
|
2499
2383
|
}
|
|
2500
2384
|
}
|
|
2501
2385
|
|
|
2502
|
-
/**
|
|
2503
|
-
|
|
2504
|
-
*/
|
|
2505
|
-
class InlineHtmlAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2506
|
-
constructor() {
|
|
2507
|
-
super(...arguments);
|
|
2508
|
-
this.customAttributeHandler = new CustomAttributeAnnotationHandler();
|
|
2509
|
-
this.customStyleAnnotationHandler = new CustomStyleAnnotationHandler();
|
|
2510
|
-
this.customClassAnnotationHandler = new CustomClassAnnotationHandler();
|
|
2511
|
-
}
|
|
2386
|
+
/** Handle underline annotation */
|
|
2387
|
+
class UnderlineAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2512
2388
|
/**
|
|
2513
2389
|
* @inheritDoc
|
|
2514
2390
|
*/
|
|
2515
|
-
canHandle(targetDto
|
|
2516
|
-
return targetDto.name === 'RTETextNode'
|
|
2391
|
+
canHandle(targetDto) {
|
|
2392
|
+
return targetDto.name === 'RTETextNode';
|
|
2517
2393
|
}
|
|
2394
|
+
/**
|
|
2395
|
+
* Handle annotation.
|
|
2396
|
+
*
|
|
2397
|
+
* @param {HTMLElement} element - Current elements.
|
|
2398
|
+
* @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
|
|
2399
|
+
* @returns {VegaRTETextAnnotations} - Annotation.
|
|
2400
|
+
*/
|
|
2401
|
+
handle(element, parentAnnotations = {}) {
|
|
2402
|
+
return this.isUnderline(element) || parentAnnotations.underline ? { underline: true } : {};
|
|
2403
|
+
}
|
|
2404
|
+
/**
|
|
2405
|
+
* Is underline element.
|
|
2406
|
+
*
|
|
2407
|
+
* @param {HTMLElement} element - current element.
|
|
2408
|
+
* @returns {boolean} - boolean.
|
|
2409
|
+
*/
|
|
2410
|
+
isUnderline(element) {
|
|
2411
|
+
return (element.style.textDecoration.includes(codeBlock.UNDERLINE_TEXT_DECORATION) ||
|
|
2412
|
+
element.nodeName === 'U' ||
|
|
2413
|
+
element.nodeName === 'INS' ||
|
|
2414
|
+
element.classList.contains('v-rte--underline'));
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
/** Handle image size annotation */
|
|
2419
|
+
class ImageSizeAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2518
2420
|
/**
|
|
2519
2421
|
* @inheritDoc
|
|
2520
2422
|
*/
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
if (canHandle) {
|
|
2524
|
-
const inlineHtml = this.generateInlineHtmlAnnotation(element, Object.assign({}, parentAnnotations));
|
|
2525
|
-
if (inlineHtml) {
|
|
2526
|
-
return { inlineHtml: inlineHtml };
|
|
2527
|
-
}
|
|
2528
|
-
}
|
|
2529
|
-
return {};
|
|
2423
|
+
canHandle(targetDto) {
|
|
2424
|
+
return targetDto.name === 'RTEImageNode';
|
|
2530
2425
|
}
|
|
2531
2426
|
/**
|
|
2532
|
-
*
|
|
2427
|
+
* Handle annotation.
|
|
2533
2428
|
*
|
|
2534
|
-
* @param {HTMLElement}
|
|
2535
|
-
* @
|
|
2536
|
-
* @returns {Nullable<VegaInlineHtmlSchema>} - Inline html annotation.
|
|
2429
|
+
* @param {HTMLElement} element - Current elements.
|
|
2430
|
+
* @returns {VegaRTEImageAnnotations} - Annotation.
|
|
2537
2431
|
*/
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
else {
|
|
2552
|
-
let lastChild = inlineHtml;
|
|
2553
|
-
while (lastChild.child &&
|
|
2554
|
-
child.parentNode &&
|
|
2555
|
-
lastChild.child.htmlTag === child.parentNode.nodeName.toLowerCase()) {
|
|
2556
|
-
lastChild = lastChild.child;
|
|
2557
|
-
}
|
|
2558
|
-
lastChild.child = childInlineHtmlNode;
|
|
2559
|
-
}
|
|
2432
|
+
handle(element) {
|
|
2433
|
+
const size = this.getImageSize(element);
|
|
2434
|
+
return size ? { size: size } : {};
|
|
2435
|
+
}
|
|
2436
|
+
/**
|
|
2437
|
+
* Determine the image display size based on the width of the current element.
|
|
2438
|
+
*
|
|
2439
|
+
* @param {HTMLElement} element - current element.
|
|
2440
|
+
* @returns {Nullable<VegaRichTextImageEditorSizeType>} -Image size, default 'md'.
|
|
2441
|
+
*/
|
|
2442
|
+
getImageSize(element) {
|
|
2443
|
+
if (element.getAttribute('data-size')) {
|
|
2444
|
+
return element.getAttribute('data-size');
|
|
2560
2445
|
}
|
|
2561
|
-
return
|
|
2446
|
+
return null;
|
|
2562
2447
|
}
|
|
2563
2448
|
}
|
|
2564
|
-
|
|
2565
|
-
|
|
2449
|
+
|
|
2450
|
+
/** Handle image alt annotation */
|
|
2451
|
+
class ImageAltAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2452
|
+
/**
|
|
2453
|
+
* @inheritDoc
|
|
2454
|
+
*/
|
|
2455
|
+
canHandle(targetDto) {
|
|
2456
|
+
return targetDto.name === 'RTEImageNode';
|
|
2457
|
+
}
|
|
2458
|
+
/**
|
|
2459
|
+
* Handle annotation.
|
|
2460
|
+
*
|
|
2461
|
+
* @param {HTMLElement} element - Current elements.
|
|
2462
|
+
* @returns {VegaRTEImageAnnotations} - Annotation.
|
|
2463
|
+
*/
|
|
2464
|
+
handle(element) {
|
|
2465
|
+
return element.hasAttribute('alt') ? { alt: element.getAttribute('alt') } : {};
|
|
2466
|
+
}
|
|
2467
|
+
}
|
|
2468
|
+
|
|
2469
|
+
/**
|
|
2470
|
+
* Tags whose direct children are always phrasing (inline) content (P, H1-H6, LI).
|
|
2471
|
+
*
|
|
2472
|
+
* This is spec knowledge from the HTML Living Standard — these grouping-content
|
|
2473
|
+
* elements have a phrasing-content content model and cannot contain block-level
|
|
2474
|
+
* descendants. It cannot be derived from the strategy registry and must be
|
|
2475
|
+
* maintained alongside the HTML spec.
|
|
2476
|
+
*
|
|
2477
|
+
* @see https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
|
|
2478
|
+
*/
|
|
2479
|
+
const BLOCK_TEXT_CONTAINER_TAGS = new Set([
|
|
2480
|
+
'P',
|
|
2481
|
+
'H1',
|
|
2482
|
+
'H2',
|
|
2483
|
+
'H3',
|
|
2484
|
+
'H4',
|
|
2485
|
+
'H5',
|
|
2486
|
+
'H6',
|
|
2487
|
+
'LI',
|
|
2488
|
+
]);
|
|
2489
|
+
/**
|
|
2490
|
+
* Tags with dedicated element-to-DTO block strategies
|
|
2491
|
+
* (P, H1-H6, LI, UL, OL, IMG, CODE).
|
|
2492
|
+
*
|
|
2493
|
+
* HtmlBlockStrategy skips these to avoid double-processing or overriding their
|
|
2494
|
+
* specialized block semantics.
|
|
2495
|
+
*
|
|
2496
|
+
* Why hard-coded: strategies use heterogeneous matching (`tagName ===`,
|
|
2497
|
+
* `matchTextBlockType` via font-size/class, etc.) so there is no single
|
|
2498
|
+
* declarative contract to derive this set from. It must be kept in sync with
|
|
2499
|
+
* the strategies registered in `dto/setup.ts`.
|
|
2500
|
+
*
|
|
2501
|
+
* Intentionally independent of {@link BLOCK_TEXT_CONTAINER_TAGS} — the two
|
|
2502
|
+
* sets encode different concepts (app architecture vs. HTML spec) and must
|
|
2503
|
+
* be maintained separately.
|
|
2504
|
+
*/
|
|
2505
|
+
const DEDICATED_STRATEGY_TAGS = new Set([
|
|
2506
|
+
'P',
|
|
2507
|
+
'H1',
|
|
2508
|
+
'H2',
|
|
2509
|
+
'H3',
|
|
2510
|
+
'H4',
|
|
2511
|
+
'H5',
|
|
2512
|
+
'H6',
|
|
2513
|
+
'LI',
|
|
2514
|
+
'UL',
|
|
2515
|
+
'OL',
|
|
2516
|
+
'IMG',
|
|
2517
|
+
'CODE',
|
|
2518
|
+
]);
|
|
2519
|
+
/**
|
|
2520
|
+
* Tags that are always treated as phrasing (inline) content, even when they
|
|
2521
|
+
* also appear in {@link DEDICATED_STRATEGY_TAGS} (CODE).
|
|
2522
|
+
* A tag in this set overrides the dedicated-strategy skip in HtmlBlockStrategy.
|
|
2523
|
+
*
|
|
2524
|
+
* Mix of HTML5 spec phrasing-content elements (BR, CODE, A) and
|
|
2525
|
+
* RTE-internal custom elements (VEGA-RICH-TEXT-LINK-EDITOR).
|
|
2526
|
+
*/
|
|
2527
|
+
const ALWAYS_INLINE_TAGS = new Set(['BR', 'VEGA-RICH-TEXT-LINK-EDITOR', 'CODE', 'A']);
|
|
2528
|
+
/**
|
|
2529
|
+
* Tags whose content model requires each child to be a distinct block-level
|
|
2530
|
+
* element (table model and definition list).
|
|
2531
|
+
*
|
|
2532
|
+
* TABLE expects CAPTION/THEAD/TBODY/TFOOT/TR; TR expects TH/TD;
|
|
2533
|
+
* THEAD/TBODY/TFOOT expect TR; DL expects DT/DD.
|
|
2534
|
+
*
|
|
2535
|
+
* Used by HtmlBlockStrategy to prevent text-only children (e.g. CAPTION,
|
|
2536
|
+
* TH, TD) from being treated as inline — they must become html-blocks so
|
|
2537
|
+
* the table structure round-trips correctly.
|
|
2538
|
+
*
|
|
2539
|
+
* Note: COLGROUP is intentionally excluded. Its only permitted child is the
|
|
2540
|
+
* void element COL, which can never produce text-node children, so the
|
|
2541
|
+
* text-only heuristic in HtmlBlockStrategy can never fire for a COLGROUP
|
|
2542
|
+
* parent.
|
|
2543
|
+
*
|
|
2544
|
+
* @see https://html.spec.whatwg.org/multipage/tables.html#the-table-element
|
|
2545
|
+
* @see https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element
|
|
2546
|
+
*/
|
|
2547
|
+
const STRUCTURED_CONTAINER_TAGS = new Set([
|
|
2548
|
+
'TABLE',
|
|
2549
|
+
'THEAD',
|
|
2550
|
+
'TBODY',
|
|
2551
|
+
'TFOOT',
|
|
2552
|
+
'TR',
|
|
2553
|
+
'DL',
|
|
2554
|
+
]);
|
|
2555
|
+
/**
|
|
2556
|
+
* Formatting phrasing-content elements that CAN remain inline even when empty.
|
|
2557
|
+
*
|
|
2558
|
+
* Any element NOT in this set (DIV, SECTION, ARTICLE, custom elements, etc.)
|
|
2559
|
+
* is treated as a block separator. Phrasing content is a closed, finite set
|
|
2560
|
+
* per the HTML Living Standard, making an allowlist safer than blocklisting
|
|
2561
|
+
* block containers (which is open-ended — custom elements default to block).
|
|
2562
|
+
*
|
|
2563
|
+
* Intentionally excludes:
|
|
2564
|
+
* - BR, CODE, A, VEGA-RICH-TEXT-LINK-EDITOR → handled by {@link ALWAYS_INLINE_TAGS}
|
|
2565
|
+
* - P, H1-H6, LI, UL, OL, IMG → handled by {@link DEDICATED_STRATEGY_TAGS}
|
|
2566
|
+
* - VIDEO, AUDIO, EMBED → embedded content that carries media even when empty;
|
|
2567
|
+
* must be treated as block-level, not as inline formatting artifacts
|
|
2568
|
+
*
|
|
2569
|
+
* @see https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
|
|
2570
|
+
*/
|
|
2571
|
+
const PHRASING_CONTENT_TAGS = new Set([
|
|
2566
2572
|
'ABBR',
|
|
2567
|
-
'AUDIO',
|
|
2568
2573
|
'B',
|
|
2569
2574
|
'BDI',
|
|
2570
2575
|
'BDO',
|
|
2571
2576
|
'CITE',
|
|
2572
|
-
'CODE',
|
|
2573
2577
|
'DEL',
|
|
2574
2578
|
'DFN',
|
|
2575
|
-
'EMBED',
|
|
2576
2579
|
'EM',
|
|
2577
2580
|
'I',
|
|
2578
2581
|
'INS',
|
|
@@ -2583,6 +2586,7 @@ InlineHtmlAnnotationHandler.canHandleTags = [
|
|
|
2583
2586
|
'PROGRESS',
|
|
2584
2587
|
'Q',
|
|
2585
2588
|
'S',
|
|
2589
|
+
'SAMP',
|
|
2586
2590
|
'SMALL',
|
|
2587
2591
|
'SPAN',
|
|
2588
2592
|
'STRONG',
|
|
@@ -2591,8 +2595,89 @@ InlineHtmlAnnotationHandler.canHandleTags = [
|
|
|
2591
2595
|
'TIME',
|
|
2592
2596
|
'U',
|
|
2593
2597
|
'VAR',
|
|
2594
|
-
|
|
2595
|
-
|
|
2598
|
+
]);
|
|
2599
|
+
/**
|
|
2600
|
+
* Returns true when the element is a direct child of a block text container
|
|
2601
|
+
* (P, H1-H6, LI), meaning it must be treated as phrasing content regardless
|
|
2602
|
+
* of its own DOM structure.
|
|
2603
|
+
*
|
|
2604
|
+
* @param {HTMLElement} element - Element to test.
|
|
2605
|
+
* @returns {boolean} True if the element is inside a block text container.
|
|
2606
|
+
*/
|
|
2607
|
+
function isInBlockTextContext(element) {
|
|
2608
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
2609
|
+
return BLOCK_TEXT_CONTAINER_TAGS.has(element.parentElement.nodeName);
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
/**
|
|
2613
|
+
* Handle inline html annotation
|
|
2614
|
+
*/
|
|
2615
|
+
class InlineHtmlAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
|
|
2616
|
+
constructor() {
|
|
2617
|
+
super(...arguments);
|
|
2618
|
+
this.customAttributeHandler = new CustomAttributeAnnotationHandler();
|
|
2619
|
+
this.customStyleAnnotationHandler = new CustomStyleAnnotationHandler();
|
|
2620
|
+
this.customClassAnnotationHandler = new CustomClassAnnotationHandler();
|
|
2621
|
+
}
|
|
2622
|
+
/**
|
|
2623
|
+
* @inheritDoc
|
|
2624
|
+
*/
|
|
2625
|
+
canHandle(targetDto, options) {
|
|
2626
|
+
return targetDto.name === 'RTETextNode' && options.autoMatchFormat === false;
|
|
2627
|
+
}
|
|
2628
|
+
/**
|
|
2629
|
+
* @inheritDoc
|
|
2630
|
+
*/
|
|
2631
|
+
handle(element, parentAnnotations) {
|
|
2632
|
+
// Skip block-level dedicated tags (P, H1-H6, LI, UL, OL, IMG).
|
|
2633
|
+
// Tags in ALWAYS_INLINE_TAGS (CODE, A) are exempt and still produce inlineHtml annotations.
|
|
2634
|
+
if (DEDICATED_STRATEGY_TAGS.has(element.nodeName) && !ALWAYS_INLINE_TAGS.has(element.nodeName)) {
|
|
2635
|
+
return {};
|
|
2636
|
+
}
|
|
2637
|
+
const inlineHtml = this.generateInlineHtmlAnnotation(element, Object.assign({}, parentAnnotations));
|
|
2638
|
+
if (inlineHtml) {
|
|
2639
|
+
return { inlineHtml: inlineHtml };
|
|
2640
|
+
}
|
|
2641
|
+
return {};
|
|
2642
|
+
}
|
|
2643
|
+
/**
|
|
2644
|
+
* Generate inline html annotation.
|
|
2645
|
+
*
|
|
2646
|
+
* @param {HTMLElement} child - Current element.
|
|
2647
|
+
* @param {VegaRTETextAnnotations} annotations - Current annotations.
|
|
2648
|
+
* @returns {Nullable<VegaInlineHtmlSchema>} - Inline html annotation.
|
|
2649
|
+
*/
|
|
2650
|
+
generateInlineHtmlAnnotation(child, annotations) {
|
|
2651
|
+
let { inlineHtml } = annotations;
|
|
2652
|
+
const hasElementChildren = Array.from(child.childNodes).some((c) => c.nodeType === Node.ELEMENT_NODE);
|
|
2653
|
+
if (!codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) || hasElementChildren) {
|
|
2654
|
+
const childInlineHtmlNode = Object.assign(Object.assign({ htmlTag: child.nodeName.toLowerCase() }, (hasElementChildren ? { groupId: misc.generateUUID() } : {})), { customAttribute: this.customAttributeHandler.handle(child).customAttribute, customStyle: this.customStyleAnnotationHandler.handle(child).customStyle, customClass: this.customClassAnnotationHandler.handle(child).customClass });
|
|
2655
|
+
if (!inlineHtml) {
|
|
2656
|
+
inlineHtml = childInlineHtmlNode;
|
|
2657
|
+
}
|
|
2658
|
+
else {
|
|
2659
|
+
inlineHtml = this.appendToInlineHtmlChain(inlineHtml, childInlineHtmlNode, child.parentNode);
|
|
2660
|
+
}
|
|
2661
|
+
}
|
|
2662
|
+
return inlineHtml ? Object.assign({}, inlineHtml) : null;
|
|
2663
|
+
}
|
|
2664
|
+
/**
|
|
2665
|
+
* Immutably appends `toAppend` at the correct position in the chain — the
|
|
2666
|
+
* deepest node whose `child.htmlTag` still matches `parentNode.nodeName`.
|
|
2667
|
+
* Each level is reconstructed via spread so the original chain is never mutated.
|
|
2668
|
+
*
|
|
2669
|
+
* @param {VegaInlineHtmlSchema} node - Current chain node.
|
|
2670
|
+
* @param {VegaInlineHtmlSchema} toAppend - Node to append at the tail.
|
|
2671
|
+
* @param {ParentNode | null} parentNode - DOM parent of the element being processed.
|
|
2672
|
+
* @returns {VegaInlineHtmlSchema} A new chain with `toAppend` inserted.
|
|
2673
|
+
*/
|
|
2674
|
+
appendToInlineHtmlChain(node, toAppend, parentNode) {
|
|
2675
|
+
if (node.child && parentNode && node.child.htmlTag === parentNode.nodeName.toLowerCase()) {
|
|
2676
|
+
return Object.assign(Object.assign({}, node), { child: this.appendToInlineHtmlChain(node.child, toAppend, parentNode) });
|
|
2677
|
+
}
|
|
2678
|
+
return Object.assign(Object.assign({}, node), { child: toAppend });
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2596
2681
|
|
|
2597
2682
|
/** Html element to annotations generator */
|
|
2598
2683
|
class HtmlElementToAnnotationGenerator {
|
|
@@ -2638,7 +2723,12 @@ class HtmlElementToAnnotationGenerator {
|
|
|
2638
2723
|
* @returns {V} Generated annotations.
|
|
2639
2724
|
*/
|
|
2640
2725
|
generate(targetDto, element, options = { autoMatchFormat: true }) {
|
|
2641
|
-
|
|
2726
|
+
if (options && options.filterInlineStyles) {
|
|
2727
|
+
codeBlock.RTEFilterStylesStrategyRegistry.executeTheStrategyRefillAction(targetDto.name, element);
|
|
2728
|
+
}
|
|
2729
|
+
// Guard against <a> wrapping block content (e.g. <a><video></a>), which is processed as an
|
|
2730
|
+
// html-block (targetDto !== RTETextNode) — link-only mode should not apply in that case.
|
|
2731
|
+
const isLinkElement = Predicate.isLinkElement(element) && targetDto.name === 'RTETextNode';
|
|
2642
2732
|
const annotations = this.handlers
|
|
2643
2733
|
.filter((handler) => !options.autoMatchFormat && isLinkElement ? handler instanceof LinkAnnotationHandler : true)
|
|
2644
2734
|
.filter((handler) => element.nodeType !== Node.TEXT_NODE &&
|
|
@@ -2651,7 +2741,7 @@ class HtmlElementToAnnotationGenerator {
|
|
|
2651
2741
|
return Object.assign(Object.assign({}, annotations), result);
|
|
2652
2742
|
}, {});
|
|
2653
2743
|
this.removeTextStyleDefaultsFromCustomStyle(annotations);
|
|
2654
|
-
const strategies = RTEFilterStylesStrategyRegistry.getStrategies(targetDto.name);
|
|
2744
|
+
const strategies = codeBlock.RTEFilterStylesStrategyRegistry.getStrategies(targetDto.name);
|
|
2655
2745
|
for (const strategy of strategies) {
|
|
2656
2746
|
if (options.autoMatchFormat || strategy.alwaysFilter) {
|
|
2657
2747
|
strategy.filterAnnotations(annotations);
|
|
@@ -2769,13 +2859,17 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
2769
2859
|
*/
|
|
2770
2860
|
canHandle(elementsArray, currentIndex, options) {
|
|
2771
2861
|
const element = elementsArray[currentIndex];
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2862
|
+
if (element.nodeType === Node.TEXT_NODE || this.isInlineTagWithoutBlockChildren(element, options)) {
|
|
2863
|
+
return 0;
|
|
2864
|
+
}
|
|
2865
|
+
// Skip dedicated-strategy tags unless all children are block-level embedded
|
|
2866
|
+
// elements (e.g. <p><video></p>), in which case fall back to html-block.
|
|
2867
|
+
if (DEDICATED_STRATEGY_TAGS.has(element.nodeName) && !this.shouldFallBackToHtmlBlock(element)) {
|
|
2868
|
+
return 0;
|
|
2869
|
+
}
|
|
2776
2870
|
return !options.autoMatchFormat &&
|
|
2777
|
-
|
|
2778
|
-
|
|
2871
|
+
this.isCustomHtmlContainer(element) &&
|
|
2872
|
+
!Predicate.isTitleOrSubtitle(element)
|
|
2779
2873
|
? 1
|
|
2780
2874
|
: 0;
|
|
2781
2875
|
}
|
|
@@ -2801,6 +2895,89 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
2801
2895
|
shouldProceedToElementChildren() {
|
|
2802
2896
|
return true;
|
|
2803
2897
|
}
|
|
2898
|
+
/**
|
|
2899
|
+
* Returns true for elements that should be treated as inline content even if they have no element children (e.g. <span>text</span>).
|
|
2900
|
+
* This includes any element in a block text context (P, H1-H6, LI) and any element with text-node children but no element-node children.
|
|
2901
|
+
*
|
|
2902
|
+
* In raw-HTML mode (autoMatchFormat: false), the text-only heuristic only
|
|
2903
|
+
* applies to elements whose parent is itself a text-only wrapper (e.g.
|
|
2904
|
+
* {@code <div><span>Title</span></div>}). Structural children of non-text
|
|
2905
|
+
* containers (TABLE → CAPTION, TR → TH/TD, etc.) skip this heuristic so
|
|
2906
|
+
* they reach {@link isCustomHtmlContainer} and become html-blocks.
|
|
2907
|
+
*
|
|
2908
|
+
* @param {HTMLElement} element - Element to check.
|
|
2909
|
+
* @param {VegaRTETransformOptions} options - Transform options.
|
|
2910
|
+
* @returns {boolean} True if the element should be treated as inline content.
|
|
2911
|
+
*/
|
|
2912
|
+
isInlineTagWithoutBlockChildren(element, options) {
|
|
2913
|
+
if (isInBlockTextContext(element)) {
|
|
2914
|
+
// Empty elements that are not recognized inline elements should not
|
|
2915
|
+
// be forced inline — they may represent block-level embedded content
|
|
2916
|
+
// (e.g. <video src="...">, <audio>, <iframe src="...">).
|
|
2917
|
+
if (element.childNodes.length === 0 &&
|
|
2918
|
+
element.textContent === '' &&
|
|
2919
|
+
!ALWAYS_INLINE_TAGS.has(element.nodeName) &&
|
|
2920
|
+
!PHRASING_CONTENT_TAGS.has(element.nodeName)) {
|
|
2921
|
+
return false;
|
|
2922
|
+
}
|
|
2923
|
+
return true;
|
|
2924
|
+
}
|
|
2925
|
+
const childNodes = Array.from(element.childNodes);
|
|
2926
|
+
const isTextOnly = !childNodes.some((child) => child.nodeType === Node.ELEMENT_NODE) &&
|
|
2927
|
+
childNodes.some((child) => child.nodeType === Node.TEXT_NODE);
|
|
2928
|
+
if (!isTextOnly) {
|
|
2929
|
+
return false;
|
|
2930
|
+
}
|
|
2931
|
+
// In raw-HTML mode, a text-only element is inline only if:
|
|
2932
|
+
// 1. Its parent is not a structured container (TABLE, TR, …)
|
|
2933
|
+
// 2. The element itself is phrasing content (SPAN, EM, …)
|
|
2934
|
+
// Non-phrasing text-only elements (SUMMARY, FIGCAPTION, OPTION, SVG TEXT,
|
|
2935
|
+
// etc.) must fall through to become html-blocks.
|
|
2936
|
+
if (options.autoMatchFormat === false) {
|
|
2937
|
+
if (STRUCTURED_CONTAINER_TAGS.has(element.parentElement.nodeName))
|
|
2938
|
+
return false; // eslint-disable-line @typescript-eslint/no-non-null-assertion
|
|
2939
|
+
return PHRASING_CONTENT_TAGS.has(element.nodeName) || ALWAYS_INLINE_TAGS.has(element.nodeName);
|
|
2940
|
+
}
|
|
2941
|
+
return true;
|
|
2942
|
+
}
|
|
2943
|
+
/**
|
|
2944
|
+
* Returns true when a dedicated-strategy element should fall back to html-block
|
|
2945
|
+
* because all its children are non-text, non-inline, non-dedicated elements
|
|
2946
|
+
* — indicating purely block-level embedded content that the dedicated text-block
|
|
2947
|
+
* strategy cannot represent.
|
|
2948
|
+
*
|
|
2949
|
+
* @param {HTMLElement} element - The dedicated-strategy element to check.
|
|
2950
|
+
* @returns {boolean} True when the element should be treated as html-block.
|
|
2951
|
+
*/
|
|
2952
|
+
shouldFallBackToHtmlBlock(element) {
|
|
2953
|
+
const childNodes = Array.from(element.childNodes);
|
|
2954
|
+
if (childNodes.length === 0)
|
|
2955
|
+
return false;
|
|
2956
|
+
// List items are structural children whose dedicated strategies manage
|
|
2957
|
+
// both block and inline children independently — never override them.
|
|
2958
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
2959
|
+
const parentTag = element.parentElement.nodeName;
|
|
2960
|
+
if (parentTag === 'UL' || parentTag === 'OL')
|
|
2961
|
+
return false;
|
|
2962
|
+
return childNodes.every((child) => child.nodeType === Node.ELEMENT_NODE &&
|
|
2963
|
+
child.textContent === '' &&
|
|
2964
|
+
!ALWAYS_INLINE_TAGS.has(child.nodeName) &&
|
|
2965
|
+
!PHRASING_CONTENT_TAGS.has(child.nodeName));
|
|
2966
|
+
}
|
|
2967
|
+
/**
|
|
2968
|
+
* Returns true for elements that should be treated as html containers.
|
|
2969
|
+
* A DIV is only a valid container when its first child is not an IMG
|
|
2970
|
+
* (IMG children are handled by the image strategy instead).
|
|
2971
|
+
*
|
|
2972
|
+
* @param {HTMLElement} element - Element to check.
|
|
2973
|
+
* @returns {boolean} True if the element qualifies as a html container.
|
|
2974
|
+
*/
|
|
2975
|
+
isCustomHtmlContainer(element) {
|
|
2976
|
+
if (element.nodeName !== 'DIV') {
|
|
2977
|
+
return true;
|
|
2978
|
+
}
|
|
2979
|
+
return element.childNodes.length > 0 && element.childNodes[0].nodeName !== 'IMG';
|
|
2980
|
+
}
|
|
2804
2981
|
/**
|
|
2805
2982
|
* Generate HTML block DTO from an HTML element.
|
|
2806
2983
|
*
|
|
@@ -2818,43 +2995,6 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
2818
2995
|
};
|
|
2819
2996
|
}
|
|
2820
2997
|
}
|
|
2821
|
-
HtmlBlockStrategy.canHandleTags = [
|
|
2822
|
-
'ADDRESS',
|
|
2823
|
-
'ARTICLE',
|
|
2824
|
-
'ASIDE',
|
|
2825
|
-
'BLOCKQUOTE',
|
|
2826
|
-
'BUTTON',
|
|
2827
|
-
'CAPTION',
|
|
2828
|
-
'COL',
|
|
2829
|
-
'COLGROUP',
|
|
2830
|
-
'DIV',
|
|
2831
|
-
'DD',
|
|
2832
|
-
'DETAILS',
|
|
2833
|
-
'DL',
|
|
2834
|
-
'DT',
|
|
2835
|
-
'FIELDSET',
|
|
2836
|
-
'FIGCAPTION',
|
|
2837
|
-
'FIGURE',
|
|
2838
|
-
'FOOTER',
|
|
2839
|
-
'FORM',
|
|
2840
|
-
'HEADER',
|
|
2841
|
-
'HR',
|
|
2842
|
-
'HX',
|
|
2843
|
-
'INPUT',
|
|
2844
|
-
'LEGEND',
|
|
2845
|
-
'MAIN',
|
|
2846
|
-
'NAV',
|
|
2847
|
-
'PRE',
|
|
2848
|
-
'SECTION',
|
|
2849
|
-
'SUMMARY',
|
|
2850
|
-
'TABLE',
|
|
2851
|
-
'TBODY',
|
|
2852
|
-
'TD',
|
|
2853
|
-
'TFOOT',
|
|
2854
|
-
'TH',
|
|
2855
|
-
'THEAD',
|
|
2856
|
-
'TR',
|
|
2857
|
-
];
|
|
2858
2998
|
|
|
2859
2999
|
/** Transform ul element to list block DTO */
|
|
2860
3000
|
class UlToRTEListBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
@@ -3446,19 +3586,13 @@ class SpanImageToRTEImageBlockStrategy extends ElementToRTEImageBlockStrategyAbs
|
|
|
3446
3586
|
/** Transform continue inline block elements to text block DTO */
|
|
3447
3587
|
class ContinueInlineToRTETextBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
3448
3588
|
/**
|
|
3449
|
-
*
|
|
3450
|
-
*
|
|
3451
|
-
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3452
|
-
* @param {number} currentIndex - Current element index.
|
|
3453
|
-
* @returns {number} - can be handled element count.
|
|
3589
|
+
* @inheritDoc
|
|
3454
3590
|
*/
|
|
3455
|
-
canHandle(elementsArray, currentIndex) {
|
|
3591
|
+
canHandle(elementsArray, currentIndex, options) {
|
|
3456
3592
|
let count = 0;
|
|
3457
3593
|
for (let i = currentIndex; i < elementsArray.length; i++) {
|
|
3458
3594
|
const element = elementsArray[i];
|
|
3459
|
-
if (element
|
|
3460
|
-
(ContinueInlineToRTETextBlockStrategy.canHandleTags.includes(element.nodeName) &&
|
|
3461
|
-
!(element.textContent === '' && element.querySelector('IMG')))) {
|
|
3595
|
+
if (this.isInlineCandidate(element, options)) {
|
|
3462
3596
|
count++;
|
|
3463
3597
|
}
|
|
3464
3598
|
else {
|
|
@@ -3518,14 +3652,88 @@ class ContinueInlineToRTETextBlockStrategy extends BlockToRTEBlockStrategyAbstra
|
|
|
3518
3652
|
return null;
|
|
3519
3653
|
}
|
|
3520
3654
|
}
|
|
3655
|
+
/**
|
|
3656
|
+
* Check if the element is an inline candidate to be included in the text block.
|
|
3657
|
+
*
|
|
3658
|
+
* @param {HTMLElement} element - The element to check.
|
|
3659
|
+
* @param {VegaRTETransformOptions} [options] - Options for transformation.
|
|
3660
|
+
* @returns {boolean} - Whether the element is an inline candidate.
|
|
3661
|
+
*/
|
|
3662
|
+
isInlineCandidate(element, options) {
|
|
3663
|
+
if (element.nodeType === Node.TEXT_NODE)
|
|
3664
|
+
return true;
|
|
3665
|
+
if (ALWAYS_INLINE_TAGS.has(element.nodeName))
|
|
3666
|
+
return true;
|
|
3667
|
+
if (this.isDedicatedBlockTag(element.nodeName))
|
|
3668
|
+
return false;
|
|
3669
|
+
if (options.autoMatchFormat === false && isInBlockTextContext(element))
|
|
3670
|
+
return true;
|
|
3671
|
+
return this.isInlineLeafOrWrapper(element);
|
|
3672
|
+
}
|
|
3673
|
+
/**
|
|
3674
|
+
* Returns true when the tag has a dedicated block strategy (excludes inline annotation tags CODE and A).
|
|
3675
|
+
*
|
|
3676
|
+
* @param {string} nodeName - The node name to check.
|
|
3677
|
+
* @returns {boolean} - Whether the tag is a dedicated block tag.
|
|
3678
|
+
*/
|
|
3679
|
+
isDedicatedBlockTag(nodeName) {
|
|
3680
|
+
return DEDICATED_STRATEGY_TAGS.has(nodeName) && !ALWAYS_INLINE_TAGS.has(nodeName);
|
|
3681
|
+
}
|
|
3682
|
+
/**
|
|
3683
|
+
* Returns true for empty elements, text-only elements, or elements whose entire
|
|
3684
|
+
* descendant tree contains no block-level elements (e.g. {@code <u><i><b>text</b></i></u>}).
|
|
3685
|
+
*
|
|
3686
|
+
* @param {HTMLElement} element - The element to check.
|
|
3687
|
+
* @returns {boolean} - Whether the element is an inline leaf or wrapper.
|
|
3688
|
+
*/
|
|
3689
|
+
isInlineLeafOrWrapper(element) {
|
|
3690
|
+
if (element.childNodes.length === 0) {
|
|
3691
|
+
// An empty element is inline only if it is a known HTML phrasing-content
|
|
3692
|
+
// element (SPAN, EM, STRONG, …). Block containers (DIV, SECTION, …)
|
|
3693
|
+
// and unknown/custom elements default to block separators.
|
|
3694
|
+
return PHRASING_CONTENT_TAGS.has(element.nodeName);
|
|
3695
|
+
}
|
|
3696
|
+
if (this.isTextOnlyElement(element)) {
|
|
3697
|
+
return PHRASING_CONTENT_TAGS.has(element.nodeName) || ALWAYS_INLINE_TAGS.has(element.nodeName);
|
|
3698
|
+
}
|
|
3699
|
+
return this.hasOnlyInlineDescendants(element);
|
|
3700
|
+
}
|
|
3701
|
+
/**
|
|
3702
|
+
* Returns true when the element has text-node children but no element children.
|
|
3703
|
+
*
|
|
3704
|
+
* @param {HTMLElement} element - The element to check.
|
|
3705
|
+
* @returns {boolean} - Whether the element contains only text nodes.
|
|
3706
|
+
*/
|
|
3707
|
+
isTextOnlyElement(element) {
|
|
3708
|
+
const childNodes = Array.from(element.childNodes);
|
|
3709
|
+
return (!childNodes.some((child) => child.nodeType === Node.ELEMENT_NODE) &&
|
|
3710
|
+
childNodes.some((child) => child.nodeType === Node.TEXT_NODE));
|
|
3711
|
+
}
|
|
3712
|
+
/**
|
|
3713
|
+
* Returns true if the element's subtree contains only inline formatting wrappers.
|
|
3714
|
+
* Instead of maintaining a hard coded tag allowlist, the check derives from:
|
|
3715
|
+
* 1. {@link DEDICATED_STRATEGY_TAGS} — rejects known block/media tags
|
|
3716
|
+
* 2. Void-element check — elements with no child nodes (INPUT, COL, HR, …)
|
|
3717
|
+
* are replaced/embedded content, not formatting wrappers
|
|
3718
|
+
*
|
|
3719
|
+
* @param {HTMLElement} element - Element to inspect.
|
|
3720
|
+
* @returns {boolean} True if the element has no block-level descendants.
|
|
3721
|
+
*/
|
|
3722
|
+
hasOnlyInlineDescendants(element) {
|
|
3723
|
+
for (let i = 0; i < element.children.length; i++) {
|
|
3724
|
+
const child = element.children[i];
|
|
3725
|
+
if (this.isDedicatedBlockTag(child.nodeName))
|
|
3726
|
+
return false;
|
|
3727
|
+
// An empty element is not a formatting wrapper — it is likely a void/embedded
|
|
3728
|
+
// element (INPUT, HR, COL, empty SPAN) that acts as a block separator.
|
|
3729
|
+
if (!child.hasChildNodes())
|
|
3730
|
+
return false;
|
|
3731
|
+
if (!this.hasOnlyInlineDescendants(child))
|
|
3732
|
+
return false;
|
|
3733
|
+
}
|
|
3734
|
+
return true;
|
|
3735
|
+
}
|
|
3521
3736
|
}
|
|
3522
|
-
ContinueInlineToRTETextBlockStrategy.canHandleTags = [
|
|
3523
|
-
...InlineHtmlAnnotationHandler.canHandleTags,
|
|
3524
|
-
'CODE',
|
|
3525
|
-
'A',
|
|
3526
|
-
'VEGA-RICH-TEXT-LINK-EDITOR',
|
|
3527
|
-
'BR',
|
|
3528
|
-
];
|
|
3529
3737
|
|
|
3530
3738
|
/**
|
|
3531
3739
|
* Class to handle text node elements and convert them to text node DTOs
|
|
@@ -3626,7 +3834,7 @@ class InlineElementToTextNodeStrategy extends ElementToTextNodeStrategy {
|
|
|
3626
3834
|
// For empty dom, there will be no internal iteration, we need to handle it directly here.
|
|
3627
3835
|
// Example: <span></span>, <video src='...'></video>
|
|
3628
3836
|
const emptyNodeAnnotations = disableAutoMatchFormat
|
|
3629
|
-
? object.cleanObject(Object.assign(Object.assign({}, (codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) ? curAnnotations : {})), { inlineHtml: curAnnotations.inlineHtml
|
|
3837
|
+
? object.cleanObject(Object.assign(Object.assign({}, (codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) ? curAnnotations : {})), { inlineHtml: curAnnotations.inlineHtml }))
|
|
3630
3838
|
: curAnnotations;
|
|
3631
3839
|
return Object.assign({}, this.generateTextNode('', emptyNodeAnnotations));
|
|
3632
3840
|
}
|
|
@@ -3634,80 +3842,39 @@ class InlineElementToTextNodeStrategy extends ElementToTextNodeStrategy {
|
|
|
3634
3842
|
}
|
|
3635
3843
|
|
|
3636
3844
|
/**
|
|
3637
|
-
*
|
|
3638
|
-
* Concrete strategies define which styles to strip via `stylesToBeFiltered`.
|
|
3639
|
-
*
|
|
3640
|
-
* This base is shared by two kinds of concrete strategies:
|
|
3641
|
-
* 1. Block/node output strategies – filter inline styles when converting DTO → HTML.
|
|
3642
|
-
* 2. Annotation parsing strategies – strip redundant defaults when converting HTML → DTO.
|
|
3845
|
+
* Filter styles strategy for image node, which defines the styles to be filtered and the conditions for filtering and refilling styles for image nodes.
|
|
3643
3846
|
*/
|
|
3644
|
-
class RTEFilterStylesStrategy {
|
|
3847
|
+
class ImageFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3848
|
+
constructor() {
|
|
3849
|
+
super(...arguments);
|
|
3850
|
+
this.stylesToBeFiltered = ImageAnnotation.getDefaultStyles();
|
|
3851
|
+
this.elementTagName = 'img';
|
|
3852
|
+
}
|
|
3645
3853
|
/**
|
|
3646
|
-
*
|
|
3647
|
-
* Override to `true` when the filtered styles are always emitted as inline
|
|
3648
|
-
* styles by the DTO (e.g. image `vertical-align`), so stripping them from
|
|
3649
|
-
* `customStyle` is always safe.
|
|
3650
|
-
*
|
|
3651
|
-
* Defaults to `false` – the strategy only runs when `autoMatchFormat` is enabled.
|
|
3854
|
+
* Used for the filterAnnotations method.
|
|
3652
3855
|
*
|
|
3653
|
-
* @returns {boolean}
|
|
3856
|
+
* @returns {boolean} Always `true` — image defaults are emitted as inline styles.
|
|
3654
3857
|
*/
|
|
3655
3858
|
get alwaysFilter() {
|
|
3656
|
-
return
|
|
3859
|
+
return true;
|
|
3657
3860
|
}
|
|
3658
3861
|
/**
|
|
3659
|
-
*
|
|
3660
|
-
* If all custom styles are defaults, the `customStyle` key is deleted entirely.
|
|
3661
|
-
*
|
|
3662
|
-
* @param {VegaRTEAnnotations} annotations - The annotations object (mutated in place).
|
|
3663
|
-
* @returns {VegaRTEAnnotations} The same annotations reference.
|
|
3862
|
+
* @inheritDoc
|
|
3664
3863
|
*/
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
if (!customStyle) {
|
|
3668
|
-
return annotations;
|
|
3669
|
-
}
|
|
3670
|
-
this.extractAndDeleteMatchedStyles(customStyle);
|
|
3671
|
-
if (Object.keys(customStyle).length === 0) {
|
|
3672
|
-
delete annotations.customStyle;
|
|
3673
|
-
}
|
|
3674
|
-
return annotations;
|
|
3864
|
+
canFilter(blockOrNodeInstance) {
|
|
3865
|
+
return codeBlock.Predicate.isImageNode(blockOrNodeInstance);
|
|
3675
3866
|
}
|
|
3676
3867
|
/**
|
|
3677
|
-
*
|
|
3678
|
-
* Only properties whose value matches the configured default exactly are deleted.
|
|
3679
|
-
*
|
|
3680
|
-
* @param {Nullable<RTEFilterStyles>} styles - The styles object to mutate.
|
|
3681
|
-
* @returns {boolean} `true` if at least one style was extracted.
|
|
3868
|
+
* @inheritDoc
|
|
3682
3869
|
*/
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
if (styles) {
|
|
3686
|
-
const defaults = this.stylesToBeFiltered;
|
|
3687
|
-
const styleKeys = Object.keys(defaults);
|
|
3688
|
-
for (const key of styleKeys) {
|
|
3689
|
-
if (styles[key] === defaults[key]) {
|
|
3690
|
-
delete styles[key];
|
|
3691
|
-
wasExtracted = true;
|
|
3692
|
-
}
|
|
3693
|
-
}
|
|
3694
|
-
}
|
|
3695
|
-
return wasExtracted;
|
|
3870
|
+
canRefill(_blockOrNodeClassName, element) {
|
|
3871
|
+
return element.tagName.toLowerCase() === this.elementTagName;
|
|
3696
3872
|
}
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
*/
|
|
3703
|
-
class ImageFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
3704
|
-
constructor() {
|
|
3705
|
-
super(...arguments);
|
|
3706
|
-
this.stylesToBeFiltered = ImageAnnotation.getDefaultStyles();
|
|
3707
|
-
}
|
|
3708
|
-
/** @returns {boolean} Always `true` — image defaults are emitted as inline styles. */
|
|
3709
|
-
get alwaysFilter() {
|
|
3710
|
-
return true;
|
|
3873
|
+
/**
|
|
3874
|
+
* @inheritDoc
|
|
3875
|
+
*/
|
|
3876
|
+
toCssText() {
|
|
3877
|
+
return this.buildCssTextForStyles(this.elementTagName, this.classNameToBeAdded);
|
|
3711
3878
|
}
|
|
3712
3879
|
}
|
|
3713
3880
|
|
|
@@ -3715,10 +3882,33 @@ class ImageFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3715
3882
|
* Filters the default ListAnnotation styles (paddingLeft, marginLeft) from
|
|
3716
3883
|
* customStyle when parsing an RTEListBlock.
|
|
3717
3884
|
*/
|
|
3718
|
-
class ListBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
3885
|
+
class ListBlockFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3719
3886
|
constructor() {
|
|
3720
3887
|
super(...arguments);
|
|
3721
3888
|
this.stylesToBeFiltered = ListAnnotation.getDefaultStyles();
|
|
3889
|
+
this.elementTagName = 'ol,ul';
|
|
3890
|
+
}
|
|
3891
|
+
/**
|
|
3892
|
+
* @inheritDoc
|
|
3893
|
+
*/
|
|
3894
|
+
canFilter(blockOrNodeInstance) {
|
|
3895
|
+
return codeBlock.Predicate.isListBlock(blockOrNodeInstance.constructor.name);
|
|
3896
|
+
}
|
|
3897
|
+
/**
|
|
3898
|
+
* @inheritDoc
|
|
3899
|
+
*/
|
|
3900
|
+
canRefill(blockOrNodeClassName, element) {
|
|
3901
|
+
return codeBlock.Predicate.isListBlock(blockOrNodeClassName) && element.matches(this.elementTagName);
|
|
3902
|
+
}
|
|
3903
|
+
/**
|
|
3904
|
+
* @inheritDoc
|
|
3905
|
+
*/
|
|
3906
|
+
toCssText() {
|
|
3907
|
+
const selector = this.elementTagName
|
|
3908
|
+
.split(',')
|
|
3909
|
+
.map((tag) => `.${codeBlock.RTEFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${tag.trim()}`)
|
|
3910
|
+
.join(', ');
|
|
3911
|
+
return `${selector} { ${this.convertStylesMapToCssText(this.stylesToBeFiltered)} }`;
|
|
3722
3912
|
}
|
|
3723
3913
|
}
|
|
3724
3914
|
|
|
@@ -3727,10 +3917,47 @@ class ListBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3727
3917
|
* RTEListItemBlock. List-item blocks implicitly use paragraph styling,
|
|
3728
3918
|
* so these inline defaults are redundant and should not be persisted.
|
|
3729
3919
|
*/
|
|
3730
|
-
class ListItemBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
3920
|
+
class ListItemBlockFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3731
3921
|
constructor() {
|
|
3732
3922
|
super(...arguments);
|
|
3733
|
-
this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph')
|
|
3923
|
+
this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph');
|
|
3924
|
+
this.elementTagName = 'li';
|
|
3925
|
+
this.headingOrTitleClassNamePattern = /^v-rte-(h[1-6]|title|subtitle)$/;
|
|
3926
|
+
}
|
|
3927
|
+
/**
|
|
3928
|
+
* Check the important font-size for list item block are default styles, and the block is a list item block.
|
|
3929
|
+
*
|
|
3930
|
+
* @inheritDoc
|
|
3931
|
+
*/
|
|
3932
|
+
canFilter(blockOrNodeInstance) {
|
|
3933
|
+
const styles = blockOrNodeInstance.getStyles();
|
|
3934
|
+
const isDefaultStyles = !styles.fontSize ||
|
|
3935
|
+
this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']);
|
|
3936
|
+
return codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) && isDefaultStyles;
|
|
3937
|
+
}
|
|
3938
|
+
/**
|
|
3939
|
+
* @inheritDoc
|
|
3940
|
+
*/
|
|
3941
|
+
canRefill(blockOrNodeClassName, element) {
|
|
3942
|
+
return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
|
|
3943
|
+
element.matches(this.elementTagName) &&
|
|
3944
|
+
this.isElementNotHeadingOrTitle(element));
|
|
3945
|
+
}
|
|
3946
|
+
/**
|
|
3947
|
+
* @inheritDoc
|
|
3948
|
+
*/
|
|
3949
|
+
toCssText() {
|
|
3950
|
+
return this.buildCssTextForStyles(this.elementTagName);
|
|
3951
|
+
}
|
|
3952
|
+
/**
|
|
3953
|
+
* Check the list item element does not have heading or title class names.
|
|
3954
|
+
*
|
|
3955
|
+
* @param {HTMLElement} element - The list item element to check.
|
|
3956
|
+
* @returns {boolean} - True if the element does not have heading or title class names, false otherwise.
|
|
3957
|
+
*/
|
|
3958
|
+
isElementNotHeadingOrTitle(element) {
|
|
3959
|
+
const classNames = element.className.split(' ');
|
|
3960
|
+
return !classNames.some((className) => this.headingOrTitleClassNamePattern.test(className.trim()));
|
|
3734
3961
|
}
|
|
3735
3962
|
}
|
|
3736
3963
|
|
|
@@ -3743,7 +3970,7 @@ class ListItemBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3743
3970
|
* captures it into `customStyle`. This strategy removes the duplicate so the
|
|
3744
3971
|
* semantic annotation is the single source of truth.
|
|
3745
3972
|
*/
|
|
3746
|
-
class AlignmentFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
3973
|
+
class AlignmentFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3747
3974
|
constructor() {
|
|
3748
3975
|
super(...arguments);
|
|
3749
3976
|
this.stylesToBeFiltered = {};
|
|
@@ -3773,13 +4000,13 @@ class AlignmentFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3773
4000
|
}
|
|
3774
4001
|
|
|
3775
4002
|
/**
|
|
3776
|
-
*
|
|
3777
|
-
* customStyle when parsing an RTETextNode that has a `code` annotation.
|
|
4003
|
+
* The CodeFilterStylesStrategy is responsible for filtering code styles from text nodes that are annotated as code.
|
|
3778
4004
|
*/
|
|
3779
|
-
class CodeFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
4005
|
+
class CodeFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3780
4006
|
constructor() {
|
|
3781
4007
|
super(...arguments);
|
|
3782
4008
|
this.stylesToBeFiltered = codeBlock.CodeAnnotation.getDefaultStyles();
|
|
4009
|
+
this.elementTagName = 'code';
|
|
3783
4010
|
}
|
|
3784
4011
|
/**
|
|
3785
4012
|
* Only strips code-default styles when the `code` annotation is present,
|
|
@@ -3795,34 +4022,33 @@ class CodeFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3795
4022
|
}
|
|
3796
4023
|
return super.filterAnnotations(annotations);
|
|
3797
4024
|
}
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
constructor() {
|
|
3807
|
-
super(...arguments);
|
|
3808
|
-
this.stylesToBeFiltered = codeBlock.LinkGroupAnnotation.getDefaultStyles();
|
|
4025
|
+
/**
|
|
4026
|
+
* Determines whether the dto instance is a code text node.
|
|
4027
|
+
*
|
|
4028
|
+
* @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
|
|
4029
|
+
* @returns {boolean} - True if the instance is a code text node, false otherwise.
|
|
4030
|
+
*/
|
|
4031
|
+
canFilter(blockOrNodeInstance) {
|
|
4032
|
+
return codeBlock.Predicate.isCodeNode(blockOrNodeInstance);
|
|
3809
4033
|
}
|
|
3810
4034
|
/**
|
|
3811
|
-
*
|
|
4035
|
+
* Check if the node is a text node and it is a code node.
|
|
3812
4036
|
*
|
|
3813
|
-
* @param {
|
|
3814
|
-
* @
|
|
4037
|
+
* @param {string} blockOrNodeClassName - The class name of the block or node instance to check.
|
|
4038
|
+
* @param {HTMLElement} element - The HTML element of the node instance.
|
|
4039
|
+
* @returns {boolean} True if the node is a text node it a code element.
|
|
3815
4040
|
*/
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
4041
|
+
canRefill(blockOrNodeClassName, element) {
|
|
4042
|
+
return codeBlock.Predicate.isTextNode(blockOrNodeClassName) && element.matches(this.elementTagName);
|
|
4043
|
+
}
|
|
4044
|
+
/**
|
|
4045
|
+
* The code style in title and heading no need to be bold in default.
|
|
4046
|
+
*
|
|
4047
|
+
* @returns {string} The CSS text string for code styles.
|
|
4048
|
+
*/
|
|
4049
|
+
toCssText() {
|
|
4050
|
+
const selector = `.${codeBlock.RTEFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${this.elementTagName}`;
|
|
4051
|
+
return `${selector} { ${this.convertStylesMapToCssText(Object.assign(Object.assign({}, this.stylesToBeFiltered), { fontWeight: '500' }))} }`;
|
|
3826
4052
|
}
|
|
3827
4053
|
}
|
|
3828
4054
|
|
|
@@ -3832,7 +4058,7 @@ class LinkFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3832
4058
|
* annotations and should not be persisted as custom overrides after source
|
|
3833
4059
|
* edit round-trips.
|
|
3834
4060
|
*/
|
|
3835
|
-
class TextFormatFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
4061
|
+
class TextFormatFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
3836
4062
|
constructor() {
|
|
3837
4063
|
super(...arguments);
|
|
3838
4064
|
this.stylesToBeFiltered = {};
|
|
@@ -3914,6 +4140,244 @@ class TextFormatFilterStylesStrategy extends RTEFilterStylesStrategy {
|
|
|
3914
4140
|
}
|
|
3915
4141
|
}
|
|
3916
4142
|
|
|
4143
|
+
/**
|
|
4144
|
+
*
|
|
4145
|
+
*/
|
|
4146
|
+
class ParagraphFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
4147
|
+
constructor() {
|
|
4148
|
+
super(...arguments);
|
|
4149
|
+
this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph');
|
|
4150
|
+
this.type = 'paragraph';
|
|
4151
|
+
this.elementTagName = 'p';
|
|
4152
|
+
}
|
|
4153
|
+
/**
|
|
4154
|
+
* Don't run the filterAnnotations for paragraph heading, title, subtitle, list heading item, list title item, list subtitle item.
|
|
4155
|
+
* Already handle it in html-element-to-annotation-generator.ts#removeTextStyleDefaultsFromCustomStyle
|
|
4156
|
+
*
|
|
4157
|
+
* @inheritDoc
|
|
4158
|
+
*/
|
|
4159
|
+
filterAnnotations(annotations) {
|
|
4160
|
+
return annotations;
|
|
4161
|
+
}
|
|
4162
|
+
/**
|
|
4163
|
+
* Determines whether the dto instance is text block and has the same type as the strategy's configured type.
|
|
4164
|
+
*
|
|
4165
|
+
* @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
|
|
4166
|
+
* @returns {boolean} - True if the instance is a text block with the same type as the strategy, false otherwise.
|
|
4167
|
+
*/
|
|
4168
|
+
canFilter(blockOrNodeInstance) {
|
|
4169
|
+
return (codeBlock.Predicate.isTextBlock(blockOrNodeInstance.constructor.name) &&
|
|
4170
|
+
blockOrNodeInstance.type === this.type);
|
|
4171
|
+
}
|
|
4172
|
+
/**
|
|
4173
|
+
* @inheritDoc
|
|
4174
|
+
*/
|
|
4175
|
+
canRefill(blockOrNodeClassName, element) {
|
|
4176
|
+
const selector = this.classNameToBeAdded
|
|
4177
|
+
? `.${this.classNameToBeAdded}`
|
|
4178
|
+
: this.elementTagName;
|
|
4179
|
+
return codeBlock.Predicate.isTextBlock(blockOrNodeClassName) && element.matches(selector);
|
|
4180
|
+
}
|
|
4181
|
+
/**
|
|
4182
|
+
* @inheritDoc
|
|
4183
|
+
*/
|
|
4184
|
+
toCssText() {
|
|
4185
|
+
return this.buildCssTextForStyles(this.elementTagName, this.classNameToBeAdded);
|
|
4186
|
+
}
|
|
4187
|
+
}
|
|
4188
|
+
|
|
4189
|
+
/**
|
|
4190
|
+
* The HeadingFilterStylesStrategy class is responsible for filtering and refilling styles for heading text blocks (h1 to h6) in the rich text editor.
|
|
4191
|
+
*/
|
|
4192
|
+
class HeadingFilterStylesStrategy extends ParagraphFilterStylesStrategy {
|
|
4193
|
+
constructor(level) {
|
|
4194
|
+
super();
|
|
4195
|
+
this.type = 'heading-1';
|
|
4196
|
+
this.elementTagName = 'h1';
|
|
4197
|
+
this.type = `heading-${level}`;
|
|
4198
|
+
this.elementTagName = `h${level}`;
|
|
4199
|
+
this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles(this.type);
|
|
4200
|
+
}
|
|
4201
|
+
}
|
|
4202
|
+
|
|
4203
|
+
/**
|
|
4204
|
+
* The TitleFilterStylesStrategy class is responsible for filtering and refilling styles for title and subtitle text blocks in the rich text editor.
|
|
4205
|
+
*/
|
|
4206
|
+
class TitleFilterStylesStrategy extends ParagraphFilterStylesStrategy {
|
|
4207
|
+
constructor(titleType) {
|
|
4208
|
+
super();
|
|
4209
|
+
this.type = 'title';
|
|
4210
|
+
this.elementTagName = 'div';
|
|
4211
|
+
this.classNameToBeAdded = 'v-rte-title';
|
|
4212
|
+
this.type = titleType;
|
|
4213
|
+
this.classNameToBeAdded = `v-rte-${titleType}`;
|
|
4214
|
+
this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles(this.type);
|
|
4215
|
+
}
|
|
4216
|
+
}
|
|
4217
|
+
|
|
4218
|
+
/**
|
|
4219
|
+
* The TitleHeadingNodeFilterStylesStrategy is responsible for filtering styles from text nodes that are children of title and heading blocks.
|
|
4220
|
+
* In title and heading blocks, the text nodes will have a default bold style.
|
|
4221
|
+
*/
|
|
4222
|
+
class TitleHeadingNodeFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
|
|
4223
|
+
constructor() {
|
|
4224
|
+
super(...arguments);
|
|
4225
|
+
this.stylesToBeFiltered = TitleHeadingNodeFilterStylesStrategy.BOLD_STYLES;
|
|
4226
|
+
this.elementTagName = 'span';
|
|
4227
|
+
this.parentBlockTypes = [
|
|
4228
|
+
'heading-1',
|
|
4229
|
+
'heading-2',
|
|
4230
|
+
'heading-3',
|
|
4231
|
+
'heading-4',
|
|
4232
|
+
'heading-5',
|
|
4233
|
+
'heading-6',
|
|
4234
|
+
'title',
|
|
4235
|
+
];
|
|
4236
|
+
this.parentElementSelectors = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', '.v-rte-title'];
|
|
4237
|
+
this.toBeCheckedSelector = this.parentElementSelectors.join(',');
|
|
4238
|
+
}
|
|
4239
|
+
/**
|
|
4240
|
+
* Don't run filterAnnotations method, because already handle it in text format filter strategy.
|
|
4241
|
+
*
|
|
4242
|
+
* @inheritDoc
|
|
4243
|
+
*/
|
|
4244
|
+
filterAnnotations(annotations) {
|
|
4245
|
+
return annotations;
|
|
4246
|
+
}
|
|
4247
|
+
/**
|
|
4248
|
+
* Determines whether the dto instance is text node and its parent block is a heading or title.
|
|
4249
|
+
*
|
|
4250
|
+
* @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
|
|
4251
|
+
* @returns {boolean} - True if the instance is a text node and its parent block is a heading or title, false otherwise.
|
|
4252
|
+
*/
|
|
4253
|
+
canFilter(blockOrNodeInstance) {
|
|
4254
|
+
return (codeBlock.Predicate.isTextNode(blockOrNodeInstance.constructor.name) &&
|
|
4255
|
+
this.parentBlockIsHeadingOrTitle(blockOrNodeInstance));
|
|
4256
|
+
}
|
|
4257
|
+
/**
|
|
4258
|
+
* Check if the node is a text node and its parent block is a heading or title.
|
|
4259
|
+
*
|
|
4260
|
+
* @param {string} blockOrNodeClassName - The class name of the block or node instance to check.
|
|
4261
|
+
* @param {HTMLElement} element - The HTML element of the node instance.
|
|
4262
|
+
* @returns {boolean} True if the node is a text node and its parent block is a heading or title, false otherwise.
|
|
4263
|
+
*/
|
|
4264
|
+
canRefill(blockOrNodeClassName, element) {
|
|
4265
|
+
return (codeBlock.Predicate.isTextNode(blockOrNodeClassName) &&
|
|
4266
|
+
element.nodeName === 'SPAN' &&
|
|
4267
|
+
this.isHeadingOrTitleChild(element));
|
|
4268
|
+
}
|
|
4269
|
+
/**
|
|
4270
|
+
* @inheritDoc
|
|
4271
|
+
*/
|
|
4272
|
+
toCssText() {
|
|
4273
|
+
const selectors = this.parentElementSelectors.map((key) => `.${TitleHeadingNodeFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${key}`);
|
|
4274
|
+
return `${selectors.join(',')} { ${this.convertStylesMapToCssText()} }`;
|
|
4275
|
+
}
|
|
4276
|
+
/**
|
|
4277
|
+
* Checks if the parent block of the given node instance is a heading or title.
|
|
4278
|
+
*
|
|
4279
|
+
* @param {RTENode | RTEBlock} blockOrNodeInstance - The node instance to check.
|
|
4280
|
+
* @returns {boolean} True if the parent block is a heading or title, false otherwise.
|
|
4281
|
+
*/
|
|
4282
|
+
parentBlockIsHeadingOrTitle(blockOrNodeInstance) {
|
|
4283
|
+
const parentBlock = blockOrNodeInstance.parent;
|
|
4284
|
+
return parentBlock ? this.parentBlockTypes.includes(parentBlock.type) : false;
|
|
4285
|
+
}
|
|
4286
|
+
/**
|
|
4287
|
+
* Check if the element is a descendant of a heading or title element.
|
|
4288
|
+
* Traverses upward through the DOM, stopping at the block element or body element
|
|
4289
|
+
* to avoid unbounded traversal to the document root.
|
|
4290
|
+
*
|
|
4291
|
+
* <h1><span>bold text</span></h1>
|
|
4292
|
+
* <h1><a><span>link text</span></a></h1>
|
|
4293
|
+
* <h1><a><b><span>nested text</span></b></a></h1>
|
|
4294
|
+
*
|
|
4295
|
+
* @param {HTMLElement} element - The element to check.
|
|
4296
|
+
* @returns {boolean} True if the element is a descendant of a heading or title, false otherwise.
|
|
4297
|
+
*/
|
|
4298
|
+
isHeadingOrTitleChild(element) {
|
|
4299
|
+
let current = element.parentElement;
|
|
4300
|
+
while (current) {
|
|
4301
|
+
if (current.matches(this.toBeCheckedSelector))
|
|
4302
|
+
return true;
|
|
4303
|
+
// Stop traversing upward if we reach a block element to prevent unbounded traversal to the document root. The title children will always be wrapped in a div, so we can safely stop at div as well.
|
|
4304
|
+
if (TitleHeadingNodeFilterStylesStrategy.NON_HEADING_TITLE_ELEMENT_TAGS.includes(current.tagName))
|
|
4305
|
+
return false;
|
|
4306
|
+
current = current.parentElement;
|
|
4307
|
+
}
|
|
4308
|
+
return false;
|
|
4309
|
+
}
|
|
4310
|
+
}
|
|
4311
|
+
TitleHeadingNodeFilterStylesStrategy.BOLD_STYLES = {
|
|
4312
|
+
fontWeight: '700',
|
|
4313
|
+
};
|
|
4314
|
+
TitleHeadingNodeFilterStylesStrategy.NON_HEADING_TITLE_ELEMENT_TAGS = [
|
|
4315
|
+
'TD',
|
|
4316
|
+
'TH',
|
|
4317
|
+
'TR',
|
|
4318
|
+
'TABLE',
|
|
4319
|
+
'THEAD',
|
|
4320
|
+
'TBODY',
|
|
4321
|
+
'DIV',
|
|
4322
|
+
'BODY',
|
|
4323
|
+
];
|
|
4324
|
+
|
|
4325
|
+
/**
|
|
4326
|
+
* Filters the default heading styles from customStyle when parsing an RTEListItemBlock that is supposed to be a heading.
|
|
4327
|
+
*/
|
|
4328
|
+
class ListHeadingItemBlockFilterStylesStrategy extends HeadingFilterStylesStrategy {
|
|
4329
|
+
constructor(level) {
|
|
4330
|
+
super(level);
|
|
4331
|
+
this.classNameToBeAdded = `v-rte-h${level}`;
|
|
4332
|
+
this.elementTagName = 'li';
|
|
4333
|
+
}
|
|
4334
|
+
/**
|
|
4335
|
+
* Check the important font-size and line-height for list item block are default styles, and the block is a list item block.
|
|
4336
|
+
*
|
|
4337
|
+
* @inheritDoc
|
|
4338
|
+
*/
|
|
4339
|
+
canFilter(blockOrNodeInstance) {
|
|
4340
|
+
return (codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) &&
|
|
4341
|
+
this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']));
|
|
4342
|
+
}
|
|
4343
|
+
/**
|
|
4344
|
+
* @inheritDoc
|
|
4345
|
+
*/
|
|
4346
|
+
canRefill(blockOrNodeClassName, element) {
|
|
4347
|
+
return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
|
|
4348
|
+
element.matches(this.elementTagName) &&
|
|
4349
|
+
element.classList.contains(this.classNameToBeAdded));
|
|
4350
|
+
}
|
|
4351
|
+
}
|
|
4352
|
+
|
|
4353
|
+
/**
|
|
4354
|
+
* Filters the default title/subtitle styles from customStyle when parsing an RTEListItemBlock that is supposed to be a title/subtitle.
|
|
4355
|
+
*/
|
|
4356
|
+
class ListTitleItemBlockFilterStylesStrategy extends TitleFilterStylesStrategy {
|
|
4357
|
+
constructor(type) {
|
|
4358
|
+
super(type);
|
|
4359
|
+
this.classNameToBeAdded = `v-rte-${type}`;
|
|
4360
|
+
this.elementTagName = 'li';
|
|
4361
|
+
}
|
|
4362
|
+
/**
|
|
4363
|
+
* Check the important font-size and line-height for list item block are default styles, and the block is a list item block.
|
|
4364
|
+
*
|
|
4365
|
+
* @inheritDoc
|
|
4366
|
+
*/
|
|
4367
|
+
canFilter(blockOrNodeInstance) {
|
|
4368
|
+
return (codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) &&
|
|
4369
|
+
this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']));
|
|
4370
|
+
}
|
|
4371
|
+
/**
|
|
4372
|
+
* @inheritDoc
|
|
4373
|
+
*/
|
|
4374
|
+
canRefill(blockOrNodeClassName, element) {
|
|
4375
|
+
return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
|
|
4376
|
+
element.matches(this.elementTagName) &&
|
|
4377
|
+
element.classList.contains(this.classNameToBeAdded));
|
|
4378
|
+
}
|
|
4379
|
+
}
|
|
4380
|
+
|
|
3917
4381
|
/**
|
|
3918
4382
|
* Register and setup the default DTO classes and their basic action strategies.
|
|
3919
4383
|
*/
|
|
@@ -3949,25 +4413,46 @@ ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new SpanImageToR
|
|
|
3949
4413
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaImageToRTEImageBlockStrategy());
|
|
3950
4414
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new ImgToRTEImageBlockStrategy());
|
|
3951
4415
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new InlineBlockToRTETextBlockStrategy());
|
|
3952
|
-
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new JiraCodeToRTECodeBlockStrategy());
|
|
3953
|
-
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaCodeBlockToRTECodeBlockStrategy());
|
|
3954
4416
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new LiToRTEListItemBlockStrategy());
|
|
3955
4417
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new ULNotLiChildToRTEListItemBlockStrategy());
|
|
3956
4418
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new OlToRTEListBlockStrategy());
|
|
3957
4419
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new UlToRTEListBlockStrategy());
|
|
3958
4420
|
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new HtmlBlockStrategy());
|
|
4421
|
+
//!important: Code block strategies must be registered after HtmlBlockStrategy because registerElementToBlockStrategy uses unshift, giving later registrations higher priority.
|
|
4422
|
+
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new JiraCodeToRTECodeBlockStrategy());
|
|
4423
|
+
ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaCodeBlockToRTECodeBlockStrategy());
|
|
3959
4424
|
ElementToDTOClassStrategyManager.registerElementToNodeStrategy(new InlineElementToTextNodeStrategy());
|
|
3960
4425
|
ElementToDTOClassStrategyManager.registerElementToNodeStrategy(new PlainTextToTextNodeStrategy());
|
|
3961
4426
|
// Register filter styles strategies (remove redundant default styles during HTML → DTO conversion)
|
|
3962
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3963
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3964
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3965
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3966
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3967
|
-
RTEFilterStylesStrategyRegistry.register(
|
|
3968
|
-
RTEFilterStylesStrategyRegistry.register(codeBlock.
|
|
3969
|
-
RTEFilterStylesStrategyRegistry.register(codeBlock.
|
|
3970
|
-
RTEFilterStylesStrategyRegistry.register(codeBlock.
|
|
4427
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new AlignmentFilterStylesStrategy());
|
|
4428
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new AlignmentFilterStylesStrategy());
|
|
4429
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new AlignmentFilterStylesStrategy());
|
|
4430
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new TextFormatFilterStylesStrategy());
|
|
4431
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new ParagraphFilterStylesStrategy());
|
|
4432
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(1));
|
|
4433
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(2));
|
|
4434
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(3));
|
|
4435
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(4));
|
|
4436
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(5));
|
|
4437
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(6));
|
|
4438
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new TitleFilterStylesStrategy('title'));
|
|
4439
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new TitleFilterStylesStrategy('subtitle'));
|
|
4440
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new TitleHeadingNodeFilterStylesStrategy());
|
|
4441
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new CodeFilterStylesStrategy());
|
|
4442
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new codeBlock.LinkFilterStylesStrategy());
|
|
4443
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEImageNode.name, new ImageFilterStylesStrategy());
|
|
4444
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTECodeBlock.name, new codeBlock.CodeBlockFilterStylesStrategy());
|
|
4445
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTECodeBlockNode.name, new codeBlock.CodeBlockNodeFilterStylesStrategy());
|
|
4446
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new ListBlockFilterStylesStrategy());
|
|
4447
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListItemBlockFilterStylesStrategy());
|
|
4448
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(1));
|
|
4449
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(2));
|
|
4450
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(3));
|
|
4451
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(4));
|
|
4452
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(5));
|
|
4453
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(6));
|
|
4454
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListTitleItemBlockFilterStylesStrategy('title'));
|
|
4455
|
+
codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListTitleItemBlockFilterStylesStrategy('subtitle'));
|
|
3971
4456
|
|
|
3972
4457
|
/**
|
|
3973
4458
|
* StylePreservator handles CSP-compliant style management by temporarily converting
|
|
@@ -4294,6 +4779,15 @@ class VegaRTEContent {
|
|
|
4294
4779
|
.filter(typeGuard.isNonNullable);
|
|
4295
4780
|
return new VegaRTEContent(blocks);
|
|
4296
4781
|
}
|
|
4782
|
+
/**
|
|
4783
|
+
* Generates the content style file for the rich text editor based on the registered filter styles strategies.
|
|
4784
|
+
*
|
|
4785
|
+
* @param {VegaRTEGenerateStyleOptions} options - Options for generating the content style file.
|
|
4786
|
+
* @returns {string} The html template style text.
|
|
4787
|
+
*/
|
|
4788
|
+
static generateContentStyles(options) {
|
|
4789
|
+
return codeBlock.RTEFilterStylesStrategyRegistry.generateAllStylesContent(options === null || options === void 0 ? void 0 : options.enableFontImports);
|
|
4790
|
+
}
|
|
4297
4791
|
/**
|
|
4298
4792
|
* Clones the content state.
|
|
4299
4793
|
*
|
|
@@ -4316,18 +4810,20 @@ class VegaRTEContent {
|
|
|
4316
4810
|
/**
|
|
4317
4811
|
* Converts the content state to HTML.
|
|
4318
4812
|
*
|
|
4319
|
-
* @
|
|
4320
|
-
* @param {VegaRTETransformOptions} [options] - Deprecated. Optional rendering context (currently unused).
|
|
4813
|
+
* @param {VegaRTETransformOptions} [options] - The conversion options.
|
|
4321
4814
|
* @returns {string} The HTML representation of the content state.
|
|
4322
4815
|
*/
|
|
4323
4816
|
toHtml(options) {
|
|
4324
|
-
if (options
|
|
4325
|
-
|
|
4817
|
+
if (options &&
|
|
4818
|
+
(typeGuard.isNonNullable(options.autoMatchFormat) || typeGuard.isNonNullable(options.skipCustomAnnotations))) {
|
|
4819
|
+
globalSlimmerRegistry.LogUtility.warn(`The 'options' parameter's properties 'autoMatchFormat' and 'skipCustomAnnotations' in toHtml method are deprecated and will be removed in the future.`);
|
|
4326
4820
|
}
|
|
4327
4821
|
if (this.isEmpty()) {
|
|
4328
4822
|
return '';
|
|
4329
4823
|
}
|
|
4330
|
-
return this.children
|
|
4824
|
+
return this.children
|
|
4825
|
+
.map((block) => block.toHtml({ filterInlineStyles: options === null || options === void 0 ? void 0 : options.filterInlineStyles }))
|
|
4826
|
+
.join('');
|
|
4331
4827
|
}
|
|
4332
4828
|
/**
|
|
4333
4829
|
* Checks if the content state is empty.
|
|
@@ -4335,7 +4831,14 @@ class VegaRTEContent {
|
|
|
4335
4831
|
* @returns {boolean} True if the content state is empty, false otherwise.
|
|
4336
4832
|
*/
|
|
4337
4833
|
isEmpty() {
|
|
4338
|
-
|
|
4834
|
+
if (this.children.length === 0) {
|
|
4835
|
+
return true;
|
|
4836
|
+
}
|
|
4837
|
+
if (this.children.length === 1) {
|
|
4838
|
+
const block = this.children[0];
|
|
4839
|
+
return !block.isNotEmpty();
|
|
4840
|
+
}
|
|
4841
|
+
return false;
|
|
4339
4842
|
}
|
|
4340
4843
|
/**
|
|
4341
4844
|
* Internal method to add the block item, remove the block item
|