@globalpayments/vega 2.49.1 → 2.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -17
- package/dist/cjs/{app-globals-65622aeb.js → app-globals-4ecf85bb.js} +11 -8
- package/dist/cjs/{child-nodes-event-prevent-slimmer-cc193ee1.js → child-nodes-event-prevent-slimmer-29020cc8.js} +1 -1
- package/dist/cjs/{child-nodes-notify-observer-slimmer-5817a53b.js → child-nodes-notify-observer-slimmer-30ba81ac.js} +1 -1
- package/dist/cjs/{content-state-6a48bcb5.js → code-block-2d014e17.js} +212 -975
- package/dist/cjs/{component-73a88c4e.js → component-1e352960.js} +1 -0
- package/dist/cjs/{component-global-style-slimmer-6749808c.js → component-global-style-slimmer-b0b4b997.js} +3 -0
- package/dist/cjs/content-state-6a5da7ec.js +1146 -0
- package/dist/cjs/{dark-mode-style-controller-4adb7fb2.js → dark-mode-style-controller-f9a32d68.js} +8 -0
- package/dist/cjs/{design-token-cba4222e.js → design-token-3f4f0bc3.js} +1 -1
- package/dist/cjs/{dom-node-subject-factory-d5826bff.js → dom-node-subject-factory-769dd00f.js} +1 -1
- package/dist/cjs/{dom-node-subject-observer-factory-a7a3b196.js → dom-node-subject-observer-factory-5aa4cc83.js} +1 -1
- package/dist/cjs/{effect-37695d3d.js → effect-98e88068.js} +2 -8
- package/dist/cjs/{element-appender-slimmer-4a26ecb2.js → element-appender-slimmer-5b1d8ffb.js} +13 -8
- package/dist/cjs/{event-emit-slimmer-8247249c.js → event-emit-slimmer-36036ef7.js} +15 -4
- package/dist/cjs/{form-field-controller-slimmer-4b0af5bc.js → form-field-controller-slimmer-01c01946.js} +9 -7
- package/dist/cjs/{image-annotation-action-9c2b9c8e.js → image-annotation-action-617bbb13.js} +19 -18
- package/dist/cjs/{index-09acd3c9.js → index-7700600c.js} +9 -0
- package/dist/cjs/{index-c4dec3aa.js → index-ebb1bb17.js} +3 -3
- package/dist/cjs/index.cjs.js +21 -20
- package/dist/cjs/{inject-keyboard-manager-b301e887.js → inject-keyboard-manager-dd628ccc.js} +1 -1
- package/dist/cjs/{internal-vega-event-manager-c9948b59.js → internal-vega-event-manager-e98944ac.js} +8 -1
- package/dist/cjs/{keyboard-manager-2ccf4b16.js → keyboard-manager-8c74eeb9.js} +3 -1
- package/dist/cjs/{keyboard-manager-slimmer-900cf2f5.js → keyboard-manager-slimmer-eb364bee.js} +1 -1
- package/dist/cjs/{legend-input-processor-8bcce3bf.js → legend-input-processor-b1f323fa.js} +2 -0
- package/dist/cjs/loader.cjs.js +15 -14
- package/dist/cjs/{page-resize-observer-slimmer-44e08878.js → page-resize-observer-slimmer-efa79728.js} +1 -0
- package/dist/cjs/{public-rules-10ec636d.js → public-rules-a3b7e267.js} +8 -7
- package/dist/cjs/{responsive-format-facade-263d49f6.js → responsive-format-facade-6b81192d.js} +6 -6
- package/dist/cjs/{rich-text-editor-required-rule-5faded94.js → rich-text-editor-required-rule-e9c7c379.js} +1 -1
- package/dist/cjs/selection-controller-1d7c0999.js +762 -0
- package/dist/cjs/{string-input-formatter-slimmer-50322824.js → string-input-formatter-slimmer-a5feb2ed.js} +3 -3
- package/dist/cjs/{style-formatter-ae0ef7fc.js → style-formatter-497d0fa4.js} +1 -1
- package/dist/cjs/{sub-state-notify-slimmer-7f437b19.js → sub-state-notify-slimmer-f68fbf29.js} +2 -2
- package/dist/cjs/{sub-state-observer-slimmer-e90362cd.js → sub-state-observer-slimmer-e06cdf7e.js} +3 -3
- package/dist/cjs/{translation-212b1875.js → translation-e5003a00.js} +5 -0
- package/dist/cjs/{translation-slimmer-d1512c6d.js → translation-slimmer-127a0f83.js} +1 -1
- package/dist/cjs/{ui-13b42af0.js → ui-6c069604.js} +2 -0
- package/dist/cjs/vega-accordion.cjs.entry.js +17 -16
- package/dist/cjs/vega-app-footer.cjs.entry.js +3 -3
- package/dist/cjs/vega-app-header-button.cjs.entry.js +18 -17
- package/dist/cjs/vega-backdrop.cjs.entry.js +3 -3
- package/dist/cjs/vega-banner.cjs.entry.js +7 -7
- package/dist/cjs/vega-bar-chart.cjs.entry.js +3 -3
- package/dist/cjs/vega-box.cjs.entry.js +18 -15
- package/dist/cjs/vega-brand-logo.cjs.entry.js +3 -3
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +8 -8
- package/dist/cjs/vega-button-circle.cjs.entry.js +18 -17
- package/dist/cjs/vega-button-group_2.cjs.entry.js +11 -11
- package/dist/cjs/vega-button-link.cjs.entry.js +8 -8
- package/dist/cjs/vega-button.cjs.entry.js +17 -16
- package/dist/cjs/vega-calendar_3.cjs.entry.js +14 -14
- package/dist/cjs/vega-card.cjs.entry.js +15 -14
- package/dist/cjs/vega-carousel.cjs.entry.js +20 -16
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +14 -14
- package/dist/cjs/vega-chip.cjs.entry.js +18 -17
- package/dist/cjs/vega-code-block.cjs.entry.js +4160 -0
- package/dist/cjs/vega-color-picker.cjs.entry.js +12 -12
- package/dist/cjs/vega-combo-box.cjs.entry.js +15 -15
- package/dist/cjs/vega-counter-badge.cjs.entry.js +2 -2
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +34 -24
- package/dist/cjs/vega-dialog_2.cjs.entry.js +25 -18
- package/dist/cjs/vega-divider.cjs.entry.js +15 -14
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +25 -24
- package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
- package/dist/cjs/vega-field-error.cjs.entry.js +2 -2
- package/dist/cjs/vega-field-label.cjs.entry.js +7 -7
- package/dist/cjs/vega-file-uploader.cjs.entry.js +13 -13
- package/dist/cjs/vega-flag-icon.cjs.entry.js +15 -14
- package/dist/cjs/vega-flex.cjs.entry.js +16 -15
- package/dist/cjs/vega-font.cjs.entry.js +15 -14
- package/dist/cjs/vega-form.cjs.entry.js +15 -15
- package/dist/cjs/vega-grid.cjs.entry.js +15 -14
- package/dist/cjs/vega-hint.cjs.entry.js +2 -2
- package/dist/cjs/vega-icon.cjs.entry.js +19 -15
- package/dist/cjs/vega-image-uploader.cjs.entry.js +22 -19
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +13 -13
- package/dist/cjs/vega-input-numeric.cjs.entry.js +16 -16
- package/dist/cjs/vega-input-phone-number.cjs.entry.js +18 -17
- package/dist/cjs/vega-input-range.cjs.entry.js +16 -16
- package/dist/cjs/vega-input-select.cjs.entry.js +25 -24
- package/dist/cjs/vega-input.cjs.entry.js +35 -17
- package/dist/cjs/{vega-internal-event-id-bfea9b93.js → vega-internal-event-id-6cdc95fe.js} +4 -0
- package/dist/cjs/vega-item-toggle.cjs.entry.js +7 -7
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +26 -20
- package/dist/cjs/vega-line-chart.cjs.entry.js +4 -4
- package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +15 -13
- package/dist/cjs/vega-page-notification_2.cjs.entry.js +5 -5
- package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +8 -8
- package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +8 -8
- package/dist/cjs/vega-pagination.cjs.entry.js +18 -17
- package/dist/cjs/vega-pie-chart.cjs.entry.js +3 -3
- package/dist/cjs/vega-popover_2.cjs.entry.js +19 -18
- package/dist/cjs/vega-progress-tracker.cjs.entry.js +7 -7
- package/dist/cjs/vega-radio_2.cjs.entry.js +16 -16
- package/dist/cjs/vega-rich-text-content.cjs.entry.js +189 -32
- package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +814 -1181
- package/dist/cjs/vega-section-title.cjs.entry.js +2 -2
- package/dist/cjs/vega-segment-control.cjs.entry.js +8 -8
- package/dist/cjs/vega-selection-chip_2.cjs.entry.js +20 -19
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +15 -15
- package/dist/cjs/vega-sidenav_3.cjs.entry.js +23 -18
- package/dist/cjs/vega-signature-capture.cjs.entry.js +21 -19
- package/dist/cjs/{vega-skeleton-loader-controller-db868c98.js → vega-skeleton-loader-controller-ae2ab090.js} +15 -5
- package/dist/cjs/vega-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/vega-slot-container.cjs.entry.js +1 -1
- package/dist/cjs/vega-stepper.cjs.entry.js +13 -13
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +9 -9
- package/dist/cjs/vega-table_8.cjs.entry.js +377 -286
- package/dist/cjs/vega-text.cjs.entry.js +5 -3
- package/dist/cjs/vega-textarea.cjs.entry.js +13 -13
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +25 -24
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +12 -12
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +18 -17
- package/dist/cjs/vega.cjs.js +15 -14
- package/dist/cjs/{wait-for-vega-handler-0a0738ac.js → wait-for-vega-handler-4491efc9.js} +3 -1
- package/dist/cjs/{y-axis-input-processor-e371c142.js → y-axis-input-processor-19a07af5.js} +1 -1
- package/dist/collection/collection-manifest.json +7 -1
- package/dist/collection/components/vega-box/slimmers/controllers/vega-box-responsive-style-controller.js +1 -0
- package/dist/collection/components/vega-box/slimmers/controllers/vega-box-state-styles-controller.js +1 -0
- package/dist/collection/components/vega-carousel/vega-carousel.js +3 -0
- package/dist/collection/components/vega-code-block/assets/copy.js +3 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/code-block-range.js +129 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/code-highlight-parser.abstract.js +87 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/default-code-highlight-parse-controller.js +34 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/insert-composition-text-controller.js +100 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/prism-code-highlight-parse-controller.js +86 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-content-parse-controller.js +50 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-focus-controller.js +57 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-input-controller.js +240 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-selection-controller.js +133 -0
- package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-value-controller.js +44 -0
- package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-content-renderer.js +117 -0
- package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-copy-button-renderer.js +67 -0
- package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-renderer.js +122 -0
- package/dist/collection/components/vega-code-block/test/code-block-range.test.js +81 -0
- package/dist/collection/components/vega-code-block/types.js +10 -0
- package/dist/collection/components/vega-code-block/vega-code-block.css +160 -0
- package/dist/collection/components/vega-code-block/vega-code-block.js +404 -0
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.js +5 -0
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.js +4 -0
- package/dist/collection/components/vega-icon/vega-icon.js +4 -1
- package/dist/collection/components/vega-image-uploader/slimmers/controllers/vega-image-uploader-preview-controller.js +2 -0
- package/dist/collection/components/vega-input/slimmers/controllers/vega-input-compact-width-controller.js +1 -0
- package/dist/collection/components/vega-input/vega-input.css +12 -2
- package/dist/collection/components/vega-input/vega-input.js +27 -3
- package/dist/collection/components/vega-input-range/slimmers/renderers/vega-input-range-clear-icon-renderer.js +1 -1
- package/dist/collection/components/vega-input-range/vega-input-range.css +10 -0
- package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.js +5 -5
- package/dist/collection/components/vega-loader-wrapper/slimmers/controllers/manage-vega-loader-wrapper-z-index-controller.js +1 -0
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-backdrop-controller.js +3 -0
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.js +2 -0
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-nested-modal-controller.js +1 -0
- package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-backdrop-controller.js +3 -0
- package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.js +2 -0
- package/dist/collection/components/vega-rich-text-content/slimmers/renderers/vega-rich-text-content-renderer.js +2 -0
- package/dist/collection/components/vega-rich-text-content/vega-rich-text-content.css +7 -0
- package/dist/collection/components/vega-rich-text-editor/assets/rectangle-code.js +3 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/apply-annotation-strategies/code-node-set-selection-range-strategy.js +13 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-text-content-strategy.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-remove-node-strategy.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-transform-to-code-block-strategy.js +48 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-insert-image-strategy.js +17 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-remove-self-strategy.js +77 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/switch-out-from-code-block-strategy.js +38 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/update-code-block-strategy.js +14 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.js +4 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/remove-code-block-action.js +13 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/switch-out-from-code-block-action.js +15 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/transform-to-code-block-action.js +13 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/update-code-block-action.js +15 -0
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/code-block.js +98 -0
- package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +5 -0
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/code-block-node.js +50 -0
- package/dist/collection/components/vega-rich-text-editor/dto/nodes/node.abstract.js +1 -0
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/code-block-renderer.js +62 -0
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/nodes/code-block-node-renderer.js +78 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/delete-selected-nodes-controller.js +19 -4
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.js +4 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.js +54 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.js +70 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-line-break-handler.js +7 -5
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paragraph-handler.js +7 -5
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paste-handler.js +24 -3
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/internal-code-block-selection-controller.js +64 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/selection-controller.js +56 -52
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/user-input-controller.js +21 -8
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.js +5 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bold-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-numbers-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/numbers-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/clear-style-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/code-block-toolbar-button-slimmer.js +65 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/code-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/horizontal-alignment/horizontal-alignment-toolbar-button-slimmer.js +6 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/italic-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/less-indent-toolbar-button-slimmer.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/more-indent-toolbar-button-slimmer.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/strikethrough-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-color-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-styles-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/underline-toolbar-button-slimmer.js +3 -1
- package/dist/collection/components/vega-rich-text-editor/test/dto/action-handle-strategies/code-block-strategy-registry.test.js +21 -0
- package/dist/collection/components/vega-rich-text-editor/test/dto/action-handle-strategies/content-state-strategy-registry.test.js +2 -0
- package/dist/collection/components/vega-rich-text-editor/test/dto/blocks/code-block.test.js +54 -0
- package/dist/collection/components/vega-rich-text-editor/test/e2e-utils.js +5 -0
- package/dist/collection/components/vega-rich-text-editor/test/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.test.js +32 -0
- package/dist/collection/components/vega-rich-text-editor/test/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.test.js +61 -0
- package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +10 -0
- package/dist/collection/components/vega-sidenav/slimmers/controllers/vega-sidenav-backdrop-controller.js +3 -0
- package/dist/collection/components/vega-sidenav/slimmers/controllers/vega-sidenav-open-status-controller.js +1 -0
- package/dist/collection/components/vega-signature-capture/slimmers/written-mode/controllers/written-mode-svg-controller.js +1 -0
- package/dist/collection/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-sort-config-controller.js +92 -0
- package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +6 -0
- package/dist/collection/components/vega-text/slimmers/renderers/vega-text-tooltip-renderer.js +2 -0
- package/dist/collection/components/vega-time-picker/slimmers/renderers/vega-time-picker-range-clear-button-renderer.js +1 -1
- package/dist/collection/components/vega-time-picker/vega-time-picker.css +10 -0
- package/dist/collection/global/scripts/before-vega-load.js +3 -0
- package/dist/collection/helpers/chart/graph-context-factory.js +2 -0
- package/dist/collection/helpers/common/wait-for-vega-handler.js +3 -1
- package/dist/collection/helpers/dialog/vega-dialog-controller.js +2 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-button-click-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-checkbox-change-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-input-select-change-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-input-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-radio-change-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-delegated/vega-textarea-change-strategy.js +1 -0
- package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +2 -1
- package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +2 -0
- package/dist/collection/helpers/event-manager/slimmers/event-emit-slimmer.js +3 -1
- package/dist/collection/helpers/event-manager/test/event-emit-slimmer.test.js +11 -1
- package/dist/collection/helpers/keyboard/keyboard-manager.js +2 -0
- package/dist/collection/helpers/notify/vega-notify-controller.js +6 -1
- package/dist/collection/helpers/skeleton-loader/vega-skeleton-loader-controller.js +3 -0
- package/dist/collection/helpers/slimmers/auto-run-when-re-render-task-queue-slimmer.abstract.js +47 -0
- package/dist/collection/helpers/slimmers/component-global-style-slimmer.js +3 -0
- package/dist/collection/helpers/slimmers/element-appender/body-positioned-wrapper/default-wrapper.js +1 -0
- package/dist/collection/helpers/slimmers/element-appender/body-positioned-wrapper/position-relative-to-wrapper.js +2 -0
- package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +2 -0
- package/dist/collection/helpers/slimmers/field-error-ui-controller-strategies/sibling-container-error-label-container-retrieval-strategy.js +1 -0
- package/dist/collection/helpers/slimmers/field-error-ui-controller-strategies/sibling-container-self-retrieval-strategy.js +1 -0
- package/dist/collection/helpers/slimmers/page-resize-observer-slimmer.js +1 -0
- package/dist/collection/helpers/slimmers/test/auto-run-when-re-render-task-queue-slimmer.test.js +46 -0
- package/dist/collection/helpers/theme/controllers/color-schema-overriding-controller.js +2 -0
- package/dist/collection/helpers/theme/controllers/style-controller.abstract.js +3 -0
- package/dist/collection/helpers/theme/internal-theme-manager.js +3 -0
- package/dist/collection/helpers/translation/locales/en.js +5 -0
- package/dist/collection/helpers/translation/tests/internal-translation-controller.test.js +5 -0
- package/dist/collection/helpers/ui/element-appender.js +1 -1
- package/dist/collection/polyfill/shadow-selection/shadow-selection-polyfill.js +3 -1
- package/dist/collection/utils/component.js +1 -0
- package/dist/collection/utils/e2e-utils.js +3 -0
- package/dist/collection/utils/effect.js +2 -0
- package/dist/collection/utils/safe-document.js +9 -0
- package/dist/collection/utils/test/safe-document.test.js +13 -0
- package/dist/collection/utils/test-utils.js +1 -0
- package/dist/collection/utils/ui.js +3 -0
- package/dist/esm/{app-globals-1f8c30e9.js → app-globals-d96d623d.js} +11 -8
- package/dist/esm/{child-nodes-event-prevent-slimmer-5d45361e.js → child-nodes-event-prevent-slimmer-2b975cbf.js} +1 -1
- package/dist/esm/{child-nodes-notify-observer-slimmer-ddaad39a.js → child-nodes-notify-observer-slimmer-eeed5986.js} +1 -1
- package/dist/esm/{content-state-dbc9f635.js → code-block-ef2f04ca.js} +195 -970
- package/dist/esm/{component-cae24190.js → component-7d906393.js} +1 -0
- package/dist/esm/{component-global-style-slimmer-000e0c11.js → component-global-style-slimmer-dad40b64.js} +3 -0
- package/dist/esm/content-state-69d29a07.js +1140 -0
- package/dist/esm/{dark-mode-style-controller-2ada8e22.js → dark-mode-style-controller-ea798fc8.js} +8 -0
- package/dist/esm/{design-token-0699f0ca.js → design-token-2060cd0d.js} +1 -1
- package/dist/esm/{dom-node-subject-factory-f77cf9cc.js → dom-node-subject-factory-6374611f.js} +2 -2
- package/dist/esm/{dom-node-subject-observer-factory-715dccf9.js → dom-node-subject-observer-factory-c345ca2e.js} +1 -1
- package/dist/esm/{effect-8efd2c3c.js → effect-f50e072d.js} +2 -8
- package/dist/esm/{element-appender-slimmer-96cb54e2.js → element-appender-slimmer-64a77b7f.js} +13 -8
- package/dist/esm/{event-emit-slimmer-b7d511f6.js → event-emit-slimmer-7428cc01.js} +15 -4
- package/dist/esm/{form-field-controller-slimmer-89a72ee7.js → form-field-controller-slimmer-87d80e46.js} +9 -7
- package/dist/esm/{image-annotation-action-1aa938ab.js → image-annotation-action-1497f70e.js} +7 -6
- package/dist/esm/{index-187f71d1.js → index-d0a47531.js} +9 -0
- package/dist/esm/{index-4aa167d6.js → index-f5d2fe61.js} +3 -3
- package/dist/esm/index.js +15 -14
- package/dist/esm/{inject-keyboard-manager-f513be4a.js → inject-keyboard-manager-e39c0fd9.js} +1 -1
- package/dist/esm/{internal-vega-event-manager-87dc436c.js → internal-vega-event-manager-d80c53c5.js} +8 -1
- package/dist/esm/{keyboard-manager-262be5ce.js → keyboard-manager-9564ad83.js} +3 -1
- package/dist/esm/{keyboard-manager-slimmer-42bf9773.js → keyboard-manager-slimmer-2218e6ba.js} +1 -1
- package/dist/esm/{legend-input-processor-8f76ce8a.js → legend-input-processor-1d266967.js} +2 -0
- package/dist/esm/loader.js +15 -14
- package/dist/esm/{page-resize-observer-slimmer-15a84d26.js → page-resize-observer-slimmer-c51f1912.js} +1 -0
- package/dist/esm/{public-rules-5cf6aa95.js → public-rules-3436034b.js} +8 -7
- package/dist/esm/{responsive-format-facade-42f3fcfa.js → responsive-format-facade-8c0ce819.js} +6 -6
- package/dist/esm/{rich-text-editor-required-rule-6a7cd3ee.js → rich-text-editor-required-rule-cc5b6a2d.js} +1 -1
- package/dist/esm/selection-controller-3d6dfc87.js +757 -0
- package/dist/esm/{string-input-formatter-slimmer-c61f82d6.js → string-input-formatter-slimmer-e53b6412.js} +3 -3
- package/dist/esm/{style-formatter-cb00c709.js → style-formatter-1eca1299.js} +1 -1
- package/dist/esm/{sub-state-notify-slimmer-4e3cf09d.js → sub-state-notify-slimmer-b6c8051c.js} +2 -2
- package/dist/esm/{sub-state-observer-slimmer-be7a6ce3.js → sub-state-observer-slimmer-93eeb87d.js} +3 -3
- package/dist/esm/{translation-cf7f020a.js → translation-71e0711d.js} +5 -0
- package/dist/esm/{translation-slimmer-88966d5c.js → translation-slimmer-e6b130bf.js} +1 -1
- package/dist/esm/{ui-ed1283bb.js → ui-7d177fb0.js} +2 -0
- package/dist/esm/vega-accordion.entry.js +17 -16
- package/dist/esm/vega-app-footer.entry.js +3 -3
- package/dist/esm/vega-app-header-button.entry.js +18 -17
- package/dist/esm/vega-backdrop.entry.js +3 -3
- package/dist/esm/vega-banner.entry.js +7 -7
- package/dist/esm/vega-bar-chart.entry.js +3 -3
- package/dist/esm/vega-box.entry.js +18 -15
- package/dist/esm/vega-brand-logo.entry.js +3 -3
- package/dist/esm/vega-breadcrumb.entry.js +8 -8
- package/dist/esm/vega-button-circle.entry.js +18 -17
- package/dist/esm/vega-button-group_2.entry.js +11 -11
- package/dist/esm/vega-button-link.entry.js +8 -8
- package/dist/esm/vega-button.entry.js +17 -16
- package/dist/esm/vega-calendar_3.entry.js +14 -14
- package/dist/esm/vega-card.entry.js +15 -14
- package/dist/esm/vega-carousel.entry.js +20 -16
- package/dist/esm/vega-checkbox_2.entry.js +14 -14
- package/dist/esm/vega-chip.entry.js +18 -17
- package/dist/esm/vega-code-block.entry.js +4156 -0
- package/dist/esm/vega-color-picker.entry.js +12 -12
- package/dist/esm/vega-combo-box.entry.js +15 -15
- package/dist/esm/vega-counter-badge.entry.js +2 -2
- package/dist/esm/vega-date-picker_2.entry.js +34 -24
- package/dist/esm/vega-dialog_2.entry.js +25 -18
- package/dist/esm/vega-divider.entry.js +15 -14
- package/dist/esm/vega-dropdown_5.entry.js +25 -24
- package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
- package/dist/esm/vega-field-error.entry.js +2 -2
- package/dist/esm/vega-field-label.entry.js +7 -7
- package/dist/esm/vega-file-uploader.entry.js +13 -13
- package/dist/esm/vega-flag-icon.entry.js +15 -14
- package/dist/esm/vega-flex.entry.js +16 -15
- package/dist/esm/vega-font.entry.js +15 -14
- package/dist/esm/vega-form.entry.js +15 -15
- package/dist/esm/vega-grid.entry.js +15 -14
- package/dist/esm/vega-hint.entry.js +2 -2
- package/dist/esm/vega-icon.entry.js +19 -15
- package/dist/esm/vega-image-uploader.entry.js +22 -19
- package/dist/esm/vega-input-credit-card.entry.js +13 -13
- package/dist/esm/vega-input-numeric.entry.js +16 -16
- package/dist/esm/vega-input-phone-number.entry.js +18 -17
- package/dist/esm/vega-input-range.entry.js +16 -16
- package/dist/esm/vega-input-select.entry.js +25 -24
- package/dist/esm/vega-input.entry.js +35 -17
- package/dist/esm/{vega-internal-event-id-85ad403f.js → vega-internal-event-id-178b2743.js} +3 -1
- package/dist/esm/vega-item-toggle.entry.js +7 -7
- package/dist/esm/vega-left-nav_5.entry.js +26 -20
- package/dist/esm/vega-line-chart.entry.js +4 -4
- package/dist/esm/vega-loader-wrapper_2.entry.js +15 -13
- package/dist/esm/vega-page-notification_2.entry.js +5 -5
- package/dist/esm/vega-pagination-page-selector-mobile.entry.js +8 -8
- package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +8 -8
- package/dist/esm/vega-pagination.entry.js +18 -17
- package/dist/esm/vega-pie-chart.entry.js +3 -3
- package/dist/esm/vega-popover_2.entry.js +19 -18
- package/dist/esm/vega-progress-tracker.entry.js +7 -7
- package/dist/esm/vega-radio_2.entry.js +16 -16
- package/dist/esm/vega-rich-text-content.entry.js +170 -13
- package/dist/esm/vega-rich-text-editor_4.entry.js +679 -1046
- package/dist/esm/vega-section-title.entry.js +2 -2
- package/dist/esm/vega-segment-control.entry.js +8 -8
- package/dist/esm/vega-selection-chip_2.entry.js +20 -19
- package/dist/esm/vega-selection-tile_2.entry.js +15 -15
- package/dist/esm/vega-sidenav_3.entry.js +23 -18
- package/dist/esm/vega-signature-capture.entry.js +21 -19
- package/dist/esm/{vega-skeleton-loader-controller-c2a8bd27.js → vega-skeleton-loader-controller-06f48dd2.js} +15 -5
- package/dist/esm/vega-skeleton.entry.js +2 -2
- package/dist/esm/vega-slot-container.entry.js +1 -1
- package/dist/esm/vega-stepper.entry.js +13 -13
- package/dist/esm/vega-tab-group_2.entry.js +9 -9
- package/dist/esm/vega-table_8.entry.js +377 -286
- package/dist/esm/vega-text.entry.js +5 -3
- package/dist/esm/vega-textarea.entry.js +13 -13
- package/dist/esm/vega-time-picker_2.entry.js +25 -24
- package/dist/esm/vega-toggle-switch.entry.js +12 -12
- package/dist/esm/vega-tooltip_2.entry.js +18 -17
- package/dist/esm/vega.js +15 -14
- package/dist/esm/{wait-for-vega-handler-b18eb955.js → wait-for-vega-handler-e0a928cd.js} +3 -1
- package/dist/esm/{y-axis-input-processor-e090b01c.js → y-axis-input-processor-95995d34.js} +1 -1
- package/dist/types/components/vega-code-block/assets/copy.d.ts +3 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/code-block-range.d.ts +64 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/code-highlight-parser.abstract.d.ts +47 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/default-code-highlight-parse-controller.d.ts +19 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/insert-composition-text-controller.d.ts +50 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/prism-code-highlight-parse-controller.d.ts +43 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-content-parse-controller.d.ts +23 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-focus-controller.d.ts +21 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-input-controller.d.ts +92 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-selection-controller.d.ts +63 -0
- package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-value-controller.d.ts +21 -0
- package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-content-renderer.d.ts +55 -0
- package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-copy-button-renderer.d.ts +23 -0
- package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-renderer.d.ts +50 -0
- package/dist/types/components/vega-code-block/test/code-block-range.test.d.ts +1 -0
- package/dist/types/components/vega-code-block/types.d.ts +19 -0
- package/dist/types/components/vega-code-block/vega-code-block.d.ts +118 -0
- package/dist/types/components/vega-input/types.d.ts +2 -0
- package/dist/types/components/vega-input/vega-input.d.ts +9 -2
- package/dist/types/components/vega-rich-text-editor/assets/rectangle-code.d.ts +3 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/apply-annotation-strategies/code-node-set-selection-range-strategy.d.ts +12 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-node-content-strategy.d.ts +3 -3
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-remove-node-strategy.d.ts +4 -5
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-transform-to-code-block-strategy.d.ts +29 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-insert-image-strategy.d.ts +15 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-remove-self-strategy.d.ts +28 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/switch-out-from-code-block-strategy.d.ts +12 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/update-code-block-strategy.d.ts +12 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.d.ts +5 -1
- package/dist/types/components/vega-rich-text-editor/dto/actions/remove-code-block-action.d.ts +10 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/switch-out-from-code-block-action.d.ts +14 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/transform-to-code-block-action.d.ts +14 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/update-code-block-action.d.ts +14 -0
- package/dist/types/components/vega-rich-text-editor/dto/blocks/code-block.d.ts +52 -0
- package/dist/types/components/vega-rich-text-editor/dto/nodes/code-block-node.d.ts +41 -0
- package/dist/types/components/vega-rich-text-editor/dto/nodes/node.abstract.d.ts +2 -1
- package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/code-block-renderer.d.ts +39 -0
- package/dist/types/components/vega-rich-text-editor/dto/renderers/nodes/code-block-node-renderer.d.ts +37 -0
- package/dist/types/components/vega-rich-text-editor/interface.d.ts +16 -4
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.d.ts +31 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.d.ts +42 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paste-handler.d.ts +7 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/internal-code-block-selection-controller.d.ts +45 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/selection-controller.d.ts +16 -23
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/user-input-controller.d.ts +6 -4
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/code-block-toolbar-button-slimmer.d.ts +22 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/horizontal-alignment/horizontal-alignment-toolbar-button-slimmer.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/test/dto/action-handle-strategies/code-block-strategy-registry.test.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/test/dto/blocks/code-block.test.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/test/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.test.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/test/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.test.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor.d.ts +4 -0
- package/dist/types/components/vega-table/interface.d.ts +3 -0
- package/dist/types/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-sort-config-controller.d.ts +42 -0
- package/dist/types/components/vega-table/vega-table-head-cell/vega-table-head-cell.d.ts +2 -0
- package/dist/types/components.d.ts +98 -3
- package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +2 -0
- package/dist/types/helpers/slimmers/auto-run-when-re-render-task-queue-slimmer.abstract.d.ts +20 -0
- package/dist/types/helpers/slimmers/test/auto-run-when-re-render-task-queue-slimmer.test.d.ts +1 -0
- package/dist/types/helpers/translation/interface.d.ts +6 -1
- package/dist/types/polyfill/shadow-selection/shadow-selection-polyfill.d.ts +26 -0
- package/dist/types/types/components.type.d.ts +2 -1
- package/dist/types/utils/safe-document.d.ts +7 -0
- package/dist/types/utils/test/safe-document.test.d.ts +1 -0
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/{p-a46bc9f1.entry.js → p-06cd4a19.entry.js} +1 -1
- package/dist/vega/p-06fb002a.js +1 -0
- package/dist/vega/{p-b351ace3.entry.js → p-07cdaf74.entry.js} +1 -1
- package/dist/vega/{p-b847a143.entry.js → p-07e40eea.entry.js} +1 -1
- package/dist/vega/{p-913eb7f9.entry.js → p-0ce88865.entry.js} +1 -1
- package/dist/vega/{p-ec1f2d21.entry.js → p-1071f790.entry.js} +1 -1
- package/dist/vega/{p-45e28b9b.js → p-111d41fe.js} +1 -1
- package/dist/vega/p-12929d20.entry.js +1 -0
- package/dist/vega/{p-72ecfd40.js → p-138fcf6e.js} +1 -1
- package/dist/vega/{p-a01f149d.entry.js → p-151dec6a.entry.js} +1 -1
- package/dist/vega/{p-06adb37e.entry.js → p-1b81fc7a.entry.js} +1 -1
- package/dist/vega/{p-56a0b13d.js → p-1df029c2.js} +1 -1
- package/dist/vega/p-21d26bb4.js +2 -0
- package/dist/vega/p-21d4f12e.entry.js +1 -0
- package/dist/vega/{p-4a32a6c0.entry.js → p-21d5656d.entry.js} +1 -1
- package/dist/vega/{p-a7dcb2a3.js → p-21e180f2.js} +1 -1
- package/dist/vega/{p-0079088b.entry.js → p-2329cb73.entry.js} +1 -1
- package/dist/vega/{p-8c388b58.entry.js → p-29fe94b6.entry.js} +1 -1
- package/dist/vega/p-2f5d9aab.js +1 -0
- package/dist/vega/p-30c363d8.entry.js +9 -0
- package/dist/vega/{p-5e34ea25.entry.js → p-32a24ef1.entry.js} +1 -1
- package/dist/vega/p-33bd7e31.js +1 -0
- package/dist/vega/{p-46714da3.entry.js → p-36827489.entry.js} +1 -1
- package/dist/vega/{p-81fbfb6d.entry.js → p-388abe56.entry.js} +1 -1
- package/dist/vega/p-3b34389d.js +1 -0
- package/dist/vega/p-3eb2d433.js +1 -0
- package/dist/vega/{p-2da83c2a.js → p-3fa7d356.js} +1 -1
- package/dist/vega/p-425ba7d6.js +1 -0
- package/dist/vega/p-447a2b18.entry.js +1 -0
- package/dist/vega/{p-8d283666.js → p-4ab3df00.js} +1 -1
- package/dist/vega/{p-b649e86e.entry.js → p-4bca12ee.entry.js} +1 -1
- package/dist/vega/{p-b2bca332.entry.js → p-5016b57e.entry.js} +1 -1
- package/dist/vega/p-52905c68.entry.js +1 -0
- package/dist/vega/p-52bdeea0.entry.js +1 -0
- package/dist/vega/p-53803447.entry.js +1 -0
- package/dist/vega/{p-54f17c2e.entry.js → p-53815555.entry.js} +1 -1
- package/dist/vega/{p-d7937711.js → p-55563f5f.js} +1 -1
- package/dist/vega/{p-48517a5d.entry.js → p-578ac47f.entry.js} +1 -1
- package/dist/vega/p-586139ce.entry.js +1 -0
- package/dist/vega/p-597732e9.entry.js +1 -0
- package/dist/vega/{p-0969877b.entry.js → p-5c9efff8.entry.js} +1 -1
- package/dist/vega/{p-5e3a15a1.js → p-5e530257.js} +1 -1
- package/dist/vega/p-5f377954.js +1 -1
- package/dist/vega/p-60164904.entry.js +1 -0
- package/dist/vega/p-613ee009.js +1 -0
- package/dist/vega/p-61b72038.entry.js +1 -0
- package/dist/vega/p-642da014.entry.js +1 -0
- package/dist/vega/{p-9803042f.entry.js → p-647734d1.entry.js} +1 -1
- package/dist/vega/{p-cd205d96.js → p-65cca90f.js} +1 -1
- package/dist/vega/{p-6586e2a2.entry.js → p-66145767.entry.js} +1 -1
- package/dist/vega/p-6681efd5.js +1 -0
- package/dist/vega/{p-45f696b4.js → p-6b7dca3e.js} +1 -1
- package/dist/vega/{p-5160a6b9.entry.js → p-6ceb2d26.entry.js} +1 -1
- package/dist/vega/{p-6f81fe1e.js → p-6e01f0a2.js} +1 -1
- package/dist/vega/p-6f3dd430.entry.js +1 -0
- package/dist/vega/p-71d897e5.entry.js +1 -0
- package/dist/vega/{p-8ba43640.entry.js → p-72a4edf2.entry.js} +1 -1
- package/dist/vega/{p-bcb10ae3.entry.js → p-7503fe08.entry.js} +1 -1
- package/dist/vega/p-7add21f8.entry.js +1 -0
- package/dist/vega/{p-bfb344e1.entry.js → p-7df1ad72.entry.js} +1 -1
- package/dist/vega/{p-aea89be5.entry.js → p-7e70938a.entry.js} +1 -1
- package/dist/vega/{p-5064a804.js → p-864de9a1.js} +1 -1
- package/dist/vega/{p-10a40dfb.entry.js → p-86713a15.entry.js} +1 -1
- package/dist/vega/p-8a0d7805.entry.js +1 -0
- package/dist/vega/{p-89ab72e3.js → p-8bdc9e75.js} +1 -1
- package/dist/vega/{p-6cabdb36.js → p-8e31e7ea.js} +1 -1
- package/dist/vega/p-901b20d6.entry.js +1 -0
- package/dist/vega/p-90954fe4.entry.js +1 -0
- package/dist/vega/{p-6d7d923b.js → p-9c0cda62.js} +1 -1
- package/dist/vega/p-9d3292b7.entry.js +1 -0
- package/dist/vega/p-9eab97ee.entry.js +1 -0
- package/dist/vega/p-a0bd5bd7.entry.js +1 -0
- package/dist/vega/{p-54add0d2.js → p-a0dab2d0.js} +1 -1
- package/dist/vega/{p-83ef9e7d.entry.js → p-a1fbf49b.entry.js} +1 -1
- package/dist/vega/{p-d0007822.entry.js → p-aab6f547.entry.js} +1 -1
- package/dist/vega/p-b264d92e.entry.js +1 -0
- package/dist/vega/p-b51fa6ac.entry.js +1 -0
- package/dist/vega/p-b7594b78.entry.js +1 -0
- package/dist/vega/{p-6a830bc5.entry.js → p-c192c2d2.entry.js} +1 -1
- package/dist/vega/p-c4447540.entry.js +1 -0
- package/dist/vega/p-c8023434.entry.js +1 -0
- package/dist/vega/p-c91190df.entry.js +1 -0
- package/dist/vega/{p-647025dd.entry.js → p-cada532e.entry.js} +1 -1
- package/dist/vega/p-d0f0a908.entry.js +1 -0
- package/dist/vega/{p-02d7d948.entry.js → p-d53b262c.entry.js} +1 -1
- package/dist/vega/p-d64b20c2.js +1 -0
- package/dist/vega/{p-a5c39ba2.entry.js → p-d9cb6ec4.entry.js} +1 -1
- package/dist/vega/p-e16e23b7.entry.js +1 -0
- package/dist/vega/{p-1971d980.entry.js → p-e37ac14f.entry.js} +1 -1
- package/dist/vega/p-e5f1fd0b.entry.js +1 -0
- package/dist/vega/p-e7b00bf0.js +1 -0
- package/dist/vega/{p-147e3cbd.entry.js → p-e81b672b.entry.js} +1 -1
- package/dist/vega/{p-cfda64fd.entry.js → p-e860318d.entry.js} +1 -1
- package/dist/vega/p-ea723616.entry.js +1 -0
- package/dist/vega/{p-8ade44bf.js → p-eb832119.js} +1 -1
- package/dist/vega/{p-27003a81.entry.js → p-ec7d98f0.entry.js} +1 -1
- package/dist/vega/{p-a821bcf3.js → p-eea36d3c.js} +1 -1
- package/dist/vega/{p-252e42c7.entry.js → p-f0f787a2.entry.js} +1 -1
- package/dist/vega/p-f2f31686.entry.js +1 -0
- package/dist/vega/{p-27e56c67.entry.js → p-f41ae5e0.entry.js} +1 -1
- package/dist/vega/p-f4a13f3f.js +1 -0
- package/dist/vega/p-f9a9fca6.entry.js +1 -0
- package/dist/vega/{p-2fadef27.entry.js → p-fac5990f.entry.js} +1 -1
- package/dist/vega/p-fd0b2509.entry.js +1 -0
- package/dist/vega/p-fecb4044.js +1 -0
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +3 -2
- package/dist/vega/p-06c5fe97.entry.js +0 -1
- package/dist/vega/p-0ed7a098.entry.js +0 -1
- package/dist/vega/p-0f6b3a89.entry.js +0 -1
- package/dist/vega/p-136f665b.entry.js +0 -1
- package/dist/vega/p-1503f791.js +0 -1
- package/dist/vega/p-16fd7c32.js +0 -1
- package/dist/vega/p-1a263af1.entry.js +0 -1
- package/dist/vega/p-1af4771a.entry.js +0 -1
- package/dist/vega/p-1c298d5a.js +0 -2
- package/dist/vega/p-1c63afd2.entry.js +0 -1
- package/dist/vega/p-1e05b7b4.entry.js +0 -1
- package/dist/vega/p-1ea863a6.entry.js +0 -1
- package/dist/vega/p-271b30b9.entry.js +0 -1
- package/dist/vega/p-2d1d4f33.entry.js +0 -1
- package/dist/vega/p-353b3ded.entry.js +0 -1
- package/dist/vega/p-44b0a005.js +0 -1
- package/dist/vega/p-47ff95ba.entry.js +0 -1
- package/dist/vega/p-4e76904e.entry.js +0 -1
- package/dist/vega/p-4ec0d36f.entry.js +0 -1
- package/dist/vega/p-5c954088.entry.js +0 -1
- package/dist/vega/p-61eb7f32.entry.js +0 -1
- package/dist/vega/p-646a9198.entry.js +0 -1
- package/dist/vega/p-6e898779.js +0 -1
- package/dist/vega/p-7088ead9.entry.js +0 -1
- package/dist/vega/p-77492977.entry.js +0 -1
- package/dist/vega/p-804f71b3.js +0 -1
- package/dist/vega/p-8789d34d.entry.js +0 -1
- package/dist/vega/p-8813c0ac.entry.js +0 -1
- package/dist/vega/p-8a85c7af.entry.js +0 -1
- package/dist/vega/p-98c64d77.entry.js +0 -1
- package/dist/vega/p-9f3539a4.entry.js +0 -1
- package/dist/vega/p-b42aea55.entry.js +0 -1
- package/dist/vega/p-b5d70ee0.entry.js +0 -1
- package/dist/vega/p-bc2dd43d.js +0 -1
- package/dist/vega/p-bf1894ec.js +0 -1
- package/dist/vega/p-c754b32c.js +0 -1
- package/dist/vega/p-c9a4e79a.entry.js +0 -1
- package/dist/vega/p-dbc82247.js +0 -1
- package/dist/vega/p-e2e36d2b.entry.js +0 -1
- package/dist/vega/p-ef8272b5.entry.js +0 -1
- package/dist/vega/p-f4c1d961.js +0 -1
- package/dist/vega/p-f5279deb.entry.js +0 -1
- package/dist/vega/p-f8033cd3.entry.js +0 -1
- package/dist/vega/p-fe63bd50.entry.js +0 -1
- /package/dist/vega/{p-eda5b7fd.js → p-05b10af4.js} +0 -0
- /package/dist/vega/{p-50677c8e.js → p-0c8bd757.js} +0 -0
- /package/dist/vega/{p-af7a3154.js → p-13effc6b.js} +0 -0
- /package/dist/vega/{p-ecfa7534.js → p-272440e8.js} +0 -0
- /package/dist/vega/{p-9b797118.js → p-519a7d55.js} +0 -0
- /package/dist/vega/{p-c0291e2e.js → p-834434d5.js} +0 -0
- /package/dist/vega/{p-bf953152.js → p-d5776087.js} +0 -0
- /package/dist/vega/{p-0fd6c35b.js → p-fa5eb496.js} +0 -0
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
import { h, H as Host, F as Fragment, r as registerInstance, c as createEvent, g as getElement } from './index-
|
|
2
|
-
import { c as MapToComponentField, M as MapToComponentMethod, V as VegaSlimmer, I as InjectVegaSlimmer
|
|
1
|
+
import { h, H as Host, F as Fragment, r as registerInstance, c as createEvent, g as getElement } from './index-d0a47531.js';
|
|
2
|
+
import { c as MapToComponentField, M as MapToComponentMethod, V as VegaSlimmer, I as InjectVegaSlimmer } from './global-slimmer-registry-17c4efd4.js';
|
|
3
3
|
import { V as VegaComponentUsageRuntimeMetricsSlimmer, I as InjectVegaGlobalSlimmer } from './component-usage-runtime-metrics-385c7124.js';
|
|
4
|
-
import {
|
|
4
|
+
import { s as sanitizeVegaComponent } from './component-7d906393.js';
|
|
5
5
|
import { c as createEnterKeyHandlerToTriggerClick } from './accessibility-e5fd0fab.js';
|
|
6
6
|
import { C as ChangeManager } from './change-manager-6a7eb88c.js';
|
|
7
|
-
import { d as domNodeSubjectFactory, b as VegaDropdownClick, f as VegaChange, P as VegaImageInserted, a as VegaClick, M as VegaPopoverShow, N as VegaPopoverHide } from './dom-node-subject-factory-
|
|
8
|
-
import { V as VegaInternalComponentDidRender,
|
|
9
|
-
import { b as ToolbarButtonSlimmer, I as ImageAnnotationAction, T as TextNodeRenderingRegistry, a as TextColorToolbarButtonSlimmer } from './image-annotation-action-
|
|
7
|
+
import { d as domNodeSubjectFactory, b as VegaDropdownClick, f as VegaChange, P as VegaImageInserted, a as VegaClick, M as VegaPopoverShow, N as VegaPopoverHide } from './dom-node-subject-factory-6374611f.js';
|
|
8
|
+
import { V as VegaInternalComponentDidRender, a as VegaInternalRichTextEditorFlushChanges, v as VegaInternalRichTextEditDeleteSelectedNodes, w as VegaInternalRichTextImageClick, x as VegaInternalRichTextImageDeleteButtonClicked, r as VegaInternalPopoverUpdateTarget } from './vega-internal-event-id-178b2743.js';
|
|
9
|
+
import { b as ToolbarButtonSlimmer, I as ImageAnnotationAction, T as TextNodeRenderingRegistry, a as TextColorToolbarButtonSlimmer } from './image-annotation-action-1497f70e.js';
|
|
10
10
|
import { V as VegaInternalIconManager } from './internal-icon-manager-58cf8aa6.js';
|
|
11
|
-
import {
|
|
12
|
-
import { D as DomNodeSubjectObserverFactory } from './dom-node-subject-observer-factory-
|
|
11
|
+
import { g as RTETextNode, J as BoldAnnotationAction, N as NodeAnnotationTypeEnum, G as RTECodeBlockNode, T as TextSplittableAction, K as ItalicAnnotation, O as UnderlineAnnotation, d as RTETextBlock, P as TextStyleAnnotationAction, Q as TextStyleAnnotation, V as BoldAnnotation, W as BlockAnnotationTypeEnum, X as ClearFormattingAnnotationAction, Y as CodeAnnotationAction, _ as StrikethroughAnnotation, D as SelectionChangeAction, L as LinkAnnotationAction, H as AnnotationAction, $ as IndentAnnotation, a as RTEImageNode, M as ModifyContentAction, f as ModifyContentActionType, a0 as HorizontalAlignmentAnnotation, c as AppendChildNodesAction, Z as ZERO_WIDTH_SPACE, a1 as UpdateTextAction, a2 as MergeTwoBlocksNodesAction, S as SplitBlockWithNodeAction, R as RemoveChildAction, b as ReplaceChildNodesAction, e as InsertBlocksBeforeAction, F as RTE_TEXT_COLORS, u as RTECodeBlock, I as InsertBlocksAfterAction, w as stateEntityRenderingRegistry } from './code-block-ef2f04ca.js';
|
|
12
|
+
import { D as DomNodeSubjectObserverFactory } from './dom-node-subject-observer-factory-c345ca2e.js';
|
|
13
13
|
import { g as generateUUID } from './create-public-api-runtime-metrics-slimmer-8ada793f.js';
|
|
14
|
-
import { a as waitForComponentDidRender } from './index-
|
|
15
|
-
import { F as FormFieldControllerSlimmer } from './form-field-controller-slimmer-
|
|
16
|
-
import { c as createEventEmitSlimmer } from './event-emit-slimmer-
|
|
17
|
-
import { c as createSubStateNotifySlimmer } from './sub-state-notify-slimmer-
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { O as Observer } from './observer-3959f9dd.js';
|
|
21
|
-
import { f as findParent, r as rgbToHex } from './ui-ed1283bb.js';
|
|
14
|
+
import { a as waitForComponentDidRender } from './index-f5d2fe61.js';
|
|
15
|
+
import { F as FormFieldControllerSlimmer } from './form-field-controller-slimmer-87d80e46.js';
|
|
16
|
+
import { c as createEventEmitSlimmer } from './event-emit-slimmer-7428cc01.js';
|
|
17
|
+
import { c as createSubStateNotifySlimmer } from './sub-state-notify-slimmer-b6c8051c.js';
|
|
18
|
+
import { a as RTEListItemBlock, V as VegaRTEContent, B as BreakSingleBlockAction, b as RTEListBlock, R as RTEImageBlock } from './content-state-69d29a07.js';
|
|
19
|
+
import { R as RTESelectionState, A as AutoRunWhenReRenderTaskQueueSlimmer, a as SelectionController } from './selection-controller-3d6dfc87.js';
|
|
22
20
|
import { b as FORM_ELEMENT_VALUE_CHANGE, D as DARK_MODE_CHANGE } from './static-subject-title-ca83d6b6.js';
|
|
21
|
+
import { O as Observer } from './observer-3959f9dd.js';
|
|
22
|
+
import { d as debounce } from './timer-9321173b.js';
|
|
23
23
|
import { D as DarkModeStateControllerSlimmer } from './dark-mode-state-controller-slimmer-f1c2c299.js';
|
|
24
24
|
import { i as isNonNullable } from './type-guard-158f6d7a.js';
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
25
|
+
import { r as rgbToHex, f as findParent } from './ui-7d177fb0.js';
|
|
26
|
+
import { R as RichTextEditorRequiredRule } from './rich-text-editor-required-rule-cc5b6a2d.js';
|
|
27
|
+
import { C as ChildNodesEventPreventSlimmer } from './child-nodes-event-prevent-slimmer-2b975cbf.js';
|
|
28
|
+
import { T as TranslationSlimmer } from './translation-slimmer-e6b130bf.js';
|
|
29
|
+
import { V as VegaInternalThemeManager } from './dark-mode-style-controller-ea798fc8.js';
|
|
30
|
+
import { K as KeyboardManagerSlimmer } from './keyboard-manager-slimmer-2218e6ba.js';
|
|
30
31
|
import { c as chevronDown } from './chevron-down-4a75d28e.js';
|
|
31
32
|
import { t as trashCan } from './trash-can-8819a939.js';
|
|
32
33
|
import { r as remoteInvocationRegistry } from './remote-invocation-registry-d69245c2.js';
|
|
33
34
|
import './icon-manager-638dd4d4.js';
|
|
34
35
|
import './dynamic-slimmer-90b8af32.js';
|
|
35
|
-
import './wait-for-vega-handler-
|
|
36
|
+
import './wait-for-vega-handler-e0a928cd.js';
|
|
36
37
|
import './string-be824360.js';
|
|
37
|
-
import './translation-
|
|
38
|
-
import './page-resize-observer-slimmer-
|
|
38
|
+
import './translation-71e0711d.js';
|
|
39
|
+
import './page-resize-observer-slimmer-c51f1912.js';
|
|
39
40
|
import './ui-8424715a.js';
|
|
40
41
|
import './breakpoints-d9faf11c.js';
|
|
41
42
|
import './internal-form-field-validation-rule.abstract-f5b6bdbf.js';
|
|
@@ -43,15 +44,16 @@ import './mutation-observer-slimmer-6cef9549.js';
|
|
|
43
44
|
import './mutation-observer-filters-1a054fb0.js';
|
|
44
45
|
import './array-7888f339.js';
|
|
45
46
|
import './number-4398f2e1.js';
|
|
46
|
-
import './sub-state-observer-slimmer-
|
|
47
|
-
import './internal-vega-event-manager-
|
|
47
|
+
import './sub-state-observer-slimmer-93eeb87d.js';
|
|
48
|
+
import './internal-vega-event-manager-d80c53c5.js';
|
|
49
|
+
import './synchronize-task-queue-ac8acc3b.js';
|
|
48
50
|
import './regex-dfe11abf.js';
|
|
49
51
|
import './typography-396de03f.js';
|
|
50
52
|
import './vega-env-manager-8f8dc473.js';
|
|
51
53
|
import './feature-flag-controller-0fbe8fb0.js';
|
|
52
54
|
import './index-44c794b4.js';
|
|
53
55
|
import './_commonjsHelpers-9943807e.js';
|
|
54
|
-
import './keyboard-manager-
|
|
56
|
+
import './keyboard-manager-9564ad83.js';
|
|
55
57
|
|
|
56
58
|
var __decorate$A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
57
59
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -213,6 +215,8 @@ class ToolbarRenderer extends VegaSlimmer {
|
|
|
213
215
|
return this.bulletsNumbersToolbarButtonSlimmer;
|
|
214
216
|
case 'horizontalAlignment':
|
|
215
217
|
return this.horizontalAlignmentToolbarButtonSlimmer;
|
|
218
|
+
case 'codeBlock':
|
|
219
|
+
return this.codeBlockToolbarButtonSlimmer;
|
|
216
220
|
}
|
|
217
221
|
};
|
|
218
222
|
}
|
|
@@ -269,6 +273,9 @@ __decorate$z([
|
|
|
269
273
|
__decorate$z([
|
|
270
274
|
MapToComponentField()
|
|
271
275
|
], ToolbarRenderer.prototype, "linkToolbarButtonSlimmer", void 0);
|
|
276
|
+
__decorate$z([
|
|
277
|
+
MapToComponentField()
|
|
278
|
+
], ToolbarRenderer.prototype, "codeBlockToolbarButtonSlimmer", void 0);
|
|
272
279
|
|
|
273
280
|
const bold = {
|
|
274
281
|
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z"/></svg>`,
|
|
@@ -308,7 +315,8 @@ class BoldToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
308
315
|
return (super.isDisabled() ||
|
|
309
316
|
selectedNodes.some((node) => {
|
|
310
317
|
var _a;
|
|
311
|
-
return
|
|
318
|
+
return node instanceof RTECodeBlockNode ||
|
|
319
|
+
((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
|
|
312
320
|
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
|
|
313
321
|
}));
|
|
314
322
|
}
|
|
@@ -375,7 +383,8 @@ class ItalicToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
375
383
|
return (super.isDisabled() ||
|
|
376
384
|
selectedNodes.some((node) => {
|
|
377
385
|
var _a;
|
|
378
|
-
return
|
|
386
|
+
return node instanceof RTECodeBlockNode ||
|
|
387
|
+
((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
|
|
379
388
|
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
|
|
380
389
|
}));
|
|
381
390
|
}
|
|
@@ -445,7 +454,8 @@ class UnderlineToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
445
454
|
return (super.isDisabled() ||
|
|
446
455
|
selectedNodes.some((node) => {
|
|
447
456
|
var _a;
|
|
448
|
-
return
|
|
457
|
+
return node instanceof RTECodeBlockNode ||
|
|
458
|
+
((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
|
|
449
459
|
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
|
|
450
460
|
}));
|
|
451
461
|
}
|
|
@@ -518,7 +528,8 @@ class TextStylesToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
518
528
|
isDisabled() {
|
|
519
529
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
520
530
|
return (super.isDisabled() ||
|
|
521
|
-
selectedNodes.some((node) => node
|
|
531
|
+
selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
|
|
532
|
+
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
|
|
522
533
|
}
|
|
523
534
|
addDropdownObserver(dropdownRef) {
|
|
524
535
|
DomNodeSubjectObserverFactory.addUniqueObserverToNode(dropdownRef, VegaDropdownClick, this.handleDropdownItemClick);
|
|
@@ -611,7 +622,8 @@ class ClearStyleToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
611
622
|
isDisabled() {
|
|
612
623
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
613
624
|
return (super.isDisabled() ||
|
|
614
|
-
selectedNodes.some((node) => node
|
|
625
|
+
selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
|
|
626
|
+
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
|
|
615
627
|
}
|
|
616
628
|
}
|
|
617
629
|
(() => {
|
|
@@ -658,7 +670,8 @@ class CodeToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
658
670
|
isDisabled() {
|
|
659
671
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
660
672
|
return (super.isDisabled() ||
|
|
661
|
-
selectedNodes.some((node) => node
|
|
673
|
+
selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
|
|
674
|
+
node.getAnnotationByType(NodeAnnotationTypeEnum.LINK) ||
|
|
662
675
|
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
|
|
663
676
|
}
|
|
664
677
|
}
|
|
@@ -727,7 +740,8 @@ class StrikethroughToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
727
740
|
return (super.isDisabled() ||
|
|
728
741
|
selectedNodes.some((node) => {
|
|
729
742
|
var _a;
|
|
730
|
-
return
|
|
743
|
+
return node instanceof RTECodeBlockNode ||
|
|
744
|
+
((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
|
|
731
745
|
node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
|
|
732
746
|
}));
|
|
733
747
|
}
|
|
@@ -743,25 +757,6 @@ const link = {
|
|
|
743
757
|
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M562.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L405.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C189.5 251.2 196 330 246 380c56.5 56.5 148 56.5 204.5 0L562.8 267.7zM43.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C57 372 57 321 88.5 289.5L200.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C416.5 260.8 410 182 360 132c-56.5-56.5-148-56.5-204.5 0L43.2 244.3z"/></svg>`,
|
|
744
758
|
};
|
|
745
759
|
|
|
746
|
-
/**
|
|
747
|
-
* Action to change the selection range
|
|
748
|
-
*/
|
|
749
|
-
class SelectionChangeAction extends AnnotationAction {
|
|
750
|
-
constructor(range) {
|
|
751
|
-
super();
|
|
752
|
-
this.isFlushable = false;
|
|
753
|
-
this.range = range;
|
|
754
|
-
}
|
|
755
|
-
/**
|
|
756
|
-
* Converts the action to an annotation
|
|
757
|
-
*
|
|
758
|
-
* @returns {SelectionRangeAnnotation} The annotation
|
|
759
|
-
*/
|
|
760
|
-
toAnnotation() {
|
|
761
|
-
return new SelectionRangeAnnotation(this.range);
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
|
|
765
760
|
var __decorate$r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
766
761
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
767
762
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -893,7 +888,7 @@ class MoreIndentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
893
888
|
const selectedBlocks = this.selectionController.getSelectedBlocks();
|
|
894
889
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
895
890
|
return (super.isDisabled() ||
|
|
896
|
-
selectedBlocks.some((node) => node.type === 'list-item') ||
|
|
891
|
+
selectedBlocks.some((node) => node.type === 'list-item' || node.type === 'code-block') ||
|
|
897
892
|
selectedNodes.some((node) => node instanceof RTEImageNode));
|
|
898
893
|
}
|
|
899
894
|
onClick() {
|
|
@@ -937,7 +932,7 @@ class LessIndentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
937
932
|
const selectedBlocks = this.selectionController.getSelectedBlocks();
|
|
938
933
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
939
934
|
return (super.isDisabled() ||
|
|
940
|
-
selectedBlocks.some((node) => node.type === 'list-item') ||
|
|
935
|
+
selectedBlocks.some((node) => node.type === 'list-item' || node.type === 'code-block') ||
|
|
941
936
|
selectedNodes.some((node) => node instanceof RTEImageNode));
|
|
942
937
|
}
|
|
943
938
|
onClick() {
|
|
@@ -1104,7 +1099,8 @@ class BulletsToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
1104
1099
|
}
|
|
1105
1100
|
isDisabled() {
|
|
1106
1101
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
1107
|
-
return super.isDisabled() ||
|
|
1102
|
+
return (super.isDisabled() ||
|
|
1103
|
+
selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
|
|
1108
1104
|
}
|
|
1109
1105
|
isListType(selectedBlocks, type = 'bullet-list') {
|
|
1110
1106
|
return (selectedBlocks.length > 0 &&
|
|
@@ -1167,7 +1163,8 @@ class NumbersToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
1167
1163
|
}
|
|
1168
1164
|
isDisabled() {
|
|
1169
1165
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
1170
|
-
return super.isDisabled() ||
|
|
1166
|
+
return (super.isDisabled() ||
|
|
1167
|
+
selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
|
|
1171
1168
|
}
|
|
1172
1169
|
isListType(selectedBlocks, type = 'number-list') {
|
|
1173
1170
|
return (selectedBlocks.length > 0 &&
|
|
@@ -1242,7 +1239,8 @@ class BulletsNumbersToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
1242
1239
|
}
|
|
1243
1240
|
isDisabled() {
|
|
1244
1241
|
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
1245
|
-
return super.isDisabled() ||
|
|
1242
|
+
return (super.isDisabled() ||
|
|
1243
|
+
selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
|
|
1246
1244
|
}
|
|
1247
1245
|
}
|
|
1248
1246
|
(() => {
|
|
@@ -1518,6 +1516,12 @@ class HorizontalAlignmentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
|
1518
1516
|
isSelected() {
|
|
1519
1517
|
return false;
|
|
1520
1518
|
}
|
|
1519
|
+
isDisabled() {
|
|
1520
|
+
return (super.isDisabled() ||
|
|
1521
|
+
this.selectionController
|
|
1522
|
+
.getSelectedBlocks()
|
|
1523
|
+
.some((block) => block.type === 'code-block'));
|
|
1524
|
+
}
|
|
1521
1525
|
}
|
|
1522
1526
|
__decorate$g([
|
|
1523
1527
|
MapToComponentField()
|
|
@@ -1538,944 +1542,249 @@ __decorate$g([
|
|
|
1538
1542
|
MapToComponentMethod('componentWillRender')
|
|
1539
1543
|
], HorizontalAlignmentToolbarButtonSlimmer.prototype, "componentWillRender", null);
|
|
1540
1544
|
|
|
1541
|
-
let processing = false;
|
|
1542
1545
|
/**
|
|
1543
|
-
*
|
|
1544
|
-
* Cypress test case added in https://github.com/heartlandpayments/Vega/pull/1561/files#diff-83bdbaaf47fc156ab878099aa1f21b0e8ab92abe5852521299f1fb6efab001c2R300
|
|
1546
|
+
* Represents the state of the RTE
|
|
1545
1547
|
*/
|
|
1546
|
-
class
|
|
1547
|
-
constructor() {
|
|
1548
|
-
this.
|
|
1549
|
-
this.
|
|
1548
|
+
class RTEEditorState {
|
|
1549
|
+
constructor(content, selection) {
|
|
1550
|
+
this.content = content.clone(true);
|
|
1551
|
+
this.selection = selection.clone();
|
|
1552
|
+
this.refreshSelectionNodes();
|
|
1550
1553
|
}
|
|
1551
1554
|
/**
|
|
1552
|
-
*
|
|
1555
|
+
* Clones the editor state, updating the content and selection based on the provided content.
|
|
1553
1556
|
*
|
|
1554
|
-
* @
|
|
1555
|
-
* @returns {Range} - A Range object.
|
|
1557
|
+
* @returns {RTEEditorState} A new instance of RTEEditorState with the updated content and selection.
|
|
1556
1558
|
*/
|
|
1557
|
-
|
|
1558
|
-
return this.
|
|
1559
|
-
}
|
|
1560
|
-
/**
|
|
1561
|
-
* Adds a Range to ranges array.
|
|
1562
|
-
*
|
|
1563
|
-
* @param {Range} range - The range of selection.
|
|
1564
|
-
*/
|
|
1565
|
-
addRange(range) {
|
|
1566
|
-
this.ranges.push(range);
|
|
1567
|
-
this.rangeCount = this.ranges.length;
|
|
1568
|
-
if (!processing) {
|
|
1569
|
-
const windowSelection = window.getSelection();
|
|
1570
|
-
windowSelection.removeAllRanges();
|
|
1571
|
-
windowSelection.setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset);
|
|
1572
|
-
}
|
|
1559
|
+
clone() {
|
|
1560
|
+
return new RTEEditorState(this.content, this.selection);
|
|
1573
1561
|
}
|
|
1574
1562
|
/**
|
|
1575
|
-
*
|
|
1563
|
+
* Refreshes the selection nodes in the editor state.
|
|
1576
1564
|
*/
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1565
|
+
refreshSelectionNodes() {
|
|
1566
|
+
const { startNode: oldStartNode, endNode: oldEndNode, startOffset, endOffset, } = this.selection.range;
|
|
1567
|
+
if (oldStartNode && oldEndNode) {
|
|
1568
|
+
const startNode = this.content.findNodeById(oldStartNode.id);
|
|
1569
|
+
const endNode = this.content.findNodeById(oldEndNode.id);
|
|
1570
|
+
if (startNode && endNode) {
|
|
1571
|
+
this.selection.range.updateRTERange({
|
|
1572
|
+
startNode,
|
|
1573
|
+
endNode,
|
|
1574
|
+
startOffset,
|
|
1575
|
+
endOffset,
|
|
1576
|
+
});
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1580
1579
|
}
|
|
1581
1580
|
}
|
|
1581
|
+
|
|
1582
|
+
var __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1583
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1584
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1585
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1586
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1587
|
+
};
|
|
1582
1588
|
/**
|
|
1583
|
-
*
|
|
1584
|
-
*
|
|
1585
|
-
* - On Chromium, calling document.getSelection will not pierce into the Shadow DOM and gives you some unhelpful high-level element.
|
|
1586
|
-
* But it does expose the non-standard getSelection method on the ShadowRoot.
|
|
1587
|
-
*
|
|
1588
|
-
* - On Firefox, it does not implement ShadowRoot.getSelection,
|
|
1589
|
-
* but document.getSelection will pierce through shadow dom and give you the exact element.
|
|
1590
|
-
*
|
|
1591
|
-
* - On Safari, Selection.getComposedRanges is supported as of v17. On versions before that,
|
|
1592
|
-
* ShadowRoot.getSelection is not supported and apparently document.getSelection does not pierce the Shadow DOM, meaning you are just out of luck.
|
|
1593
|
-
*
|
|
1594
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot#shadowroot.getselection
|
|
1595
|
-
* https://stackoverflow.com/a/70523247
|
|
1589
|
+
* The value controller is responsible for updating the value of the rich text editor.
|
|
1596
1590
|
*/
|
|
1597
|
-
class
|
|
1598
|
-
constructor() {
|
|
1599
|
-
this.supportShadowSelection = typeof window.ShadowRoot.prototype['getSelection'] === 'function';
|
|
1600
|
-
this.supportBeforeInput = typeof window.InputEvent.prototype.getTargetRanges === 'function';
|
|
1601
|
-
this.isFirefox = window.navigator.userAgent.toLowerCase().indexOf('firefox') > 0;
|
|
1602
|
-
this.listen();
|
|
1603
|
-
}
|
|
1591
|
+
class ValueController extends VegaSlimmer {
|
|
1604
1592
|
/**
|
|
1605
|
-
*
|
|
1606
|
-
* For other browser which not support shadowroot.getSelection, we use this.selection which is built by us.
|
|
1607
|
-
* For browser which supported shadowroot.getSelection, we use shadowRoot.getselection().
|
|
1608
|
-
*
|
|
1609
|
-
* @param {ShadowRoot} shadow - A shadow.
|
|
1610
|
-
* @returns {Nullable<Selection>} - The shadow selection.
|
|
1593
|
+
* Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
|
|
1611
1594
|
*/
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
? this.getFirefoxSelection()
|
|
1619
|
-
: this.polyfilledShadowSelection;
|
|
1620
|
-
}
|
|
1595
|
+
connectedCallback() {
|
|
1596
|
+
const flushChangesWithDebounce = debounce(() => {
|
|
1597
|
+
void this.valueController.flushChanges(this.value);
|
|
1598
|
+
}, ValueController.VALUE_CHANGE_DEBOUNCE_TIME, this);
|
|
1599
|
+
this.flushChangeObserver = new Observer(this.isAcceptableFlushChange.bind(this), flushChangesWithDebounce);
|
|
1600
|
+
ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
|
|
1621
1601
|
}
|
|
1622
1602
|
/**
|
|
1623
|
-
*
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
* <span>span1</span><span>span2</span><span>span3</span>
|
|
1628
|
-
*
|
|
1629
|
-
* In firefox, while selected `span2`, the range be likely to:
|
|
1630
|
-
* range:
|
|
1631
|
-
* startContainer: #text 'span1'
|
|
1632
|
-
* startOffset: 5
|
|
1633
|
-
* endContainer: #text 'span3'
|
|
1634
|
-
* endOffset: 0
|
|
1635
|
-
* start is end of brefore node and end is start of after node.
|
|
1636
|
-
*
|
|
1637
|
-
* So we should modify the startContainer and endContainer here.
|
|
1638
|
-
*
|
|
1639
|
-
* modified range:
|
|
1640
|
-
* startContainer: #text 'span2'
|
|
1641
|
-
* startOffset: 0
|
|
1642
|
-
* endContainer: #text 'span2'
|
|
1643
|
-
* endOffset: 5
|
|
1644
|
-
*
|
|
1645
|
-
* @returns {Selection} - document selection
|
|
1646
|
-
*/
|
|
1647
|
-
getFirefoxSelection() {
|
|
1648
|
-
const selection = document.getSelection();
|
|
1649
|
-
const range = selection.getRangeAt(0);
|
|
1650
|
-
const startNode = range.startContainer;
|
|
1651
|
-
const endNode = range.endContainer;
|
|
1652
|
-
if (startNode !== endNode && startNode.textContent.length === range.startOffset) {
|
|
1653
|
-
const nextSibling = startNode.nodeType === Node.TEXT_NODE
|
|
1654
|
-
? startNode.parentNode.nextSibling
|
|
1655
|
-
: startNode.nextSibling;
|
|
1656
|
-
range.setStart(nextSibling.firstChild, 0);
|
|
1657
|
-
}
|
|
1658
|
-
if (endNode !== startNode && range.endOffset === 0) {
|
|
1659
|
-
const previousSibling = endNode.nodeType === Node.TEXT_NODE
|
|
1660
|
-
? endNode.parentNode.previousSibling
|
|
1661
|
-
: endNode.previousSibling;
|
|
1662
|
-
range.setEnd(previousSibling.lastChild, previousSibling.lastChild.textContent.length);
|
|
1663
|
-
}
|
|
1664
|
-
return selection;
|
|
1665
|
-
}
|
|
1666
|
-
/**
|
|
1667
|
-
* Sets up event listeners for `selectionchange` and `beforeinput` events to simulate shadow selection.
|
|
1668
|
-
*/
|
|
1669
|
-
listen() {
|
|
1670
|
-
if (this.isFirefox || this.supportShadowSelection || !this.supportBeforeInput)
|
|
1671
|
-
return;
|
|
1672
|
-
this.polyfilledShadowSelection = new ShadowSelection();
|
|
1673
|
-
window.addEventListener('selectionchange', () => {
|
|
1674
|
-
if (!processing) {
|
|
1675
|
-
processing = true;
|
|
1676
|
-
const active = getActiveElement();
|
|
1677
|
-
if (active && active.hasAttribute('contenteditable')) {
|
|
1678
|
-
// This command will not actually work, it only trigger the `beforeinput` event,
|
|
1679
|
-
// the `beforeinput` event will prevented this command work.
|
|
1680
|
-
document.execCommand('indent');
|
|
1681
|
-
}
|
|
1682
|
-
else {
|
|
1683
|
-
this.polyfilledShadowSelection.removeAllRanges();
|
|
1684
|
-
}
|
|
1685
|
-
processing = false;
|
|
1686
|
-
}
|
|
1687
|
-
}, true);
|
|
1688
|
-
window.addEventListener('beforeinput', (event) => {
|
|
1689
|
-
if (processing) {
|
|
1690
|
-
const ranges = event.getTargetRanges();
|
|
1691
|
-
const range = ranges[0];
|
|
1692
|
-
const newRange = new Range();
|
|
1693
|
-
newRange.setStart(range.startContainer, range.startOffset);
|
|
1694
|
-
newRange.setEnd(range.endContainer, range.endOffset);
|
|
1695
|
-
this.polyfilledShadowSelection.removeAllRanges();
|
|
1696
|
-
this.polyfilledShadowSelection.addRange(newRange);
|
|
1697
|
-
event.preventDefault();
|
|
1698
|
-
event.stopImmediatePropagation();
|
|
1699
|
-
}
|
|
1700
|
-
}, true);
|
|
1603
|
+
* Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
|
|
1604
|
+
*/
|
|
1605
|
+
disconnectedCallback() {
|
|
1606
|
+
ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
|
|
1701
1607
|
}
|
|
1702
|
-
}
|
|
1703
|
-
const ShadowSelectionPolyfill$1 = new ShadowSelectionPolyfill();
|
|
1704
|
-
|
|
1705
|
-
/** Manages selection range for a rich text editor, providing methods to set, sync, and create native ranges based on RTENodes and Nodes. */
|
|
1706
|
-
class RTERange {
|
|
1707
1608
|
/**
|
|
1708
|
-
*
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
* @param {number} [endOffset] The range end element content offset, default value is 0.
|
|
1714
|
-
* @param {RTENode} [startNode] The range start node, the start node could be null if the start element is root element.
|
|
1715
|
-
* @param {RTENode} [endNode] The range start node, the start node could be null if the start element is root element.
|
|
1716
|
-
* @param {Range} [nativeRange] The browser native range instance.
|
|
1717
|
-
*/
|
|
1718
|
-
constructor(startContainer, endContainer, startOffset = 0, endOffset = 0, startNode, endNode, nativeRange) {
|
|
1719
|
-
this._startOffset = 0;
|
|
1720
|
-
this._endOffset = 0;
|
|
1721
|
-
this._startContainer = startContainer;
|
|
1722
|
-
this._endContainer = endContainer;
|
|
1723
|
-
this._startOffset = startOffset;
|
|
1724
|
-
this._endOffset = endOffset;
|
|
1725
|
-
this._startNode = startNode;
|
|
1726
|
-
this._endNode = endNode;
|
|
1727
|
-
if (nativeRange) {
|
|
1728
|
-
this._oldNativeRange = nativeRange;
|
|
1609
|
+
* Component lifecycle - [componentWillLoad]{@link VegaRichTextEditor.componentWillLoad}
|
|
1610
|
+
*/
|
|
1611
|
+
componentWillLoad() {
|
|
1612
|
+
if (this.value && !(this.value instanceof VegaRTEContent)) {
|
|
1613
|
+
this.value = VegaRTEContent.fromJSON(this.value);
|
|
1729
1614
|
}
|
|
1730
1615
|
}
|
|
1731
1616
|
/**
|
|
1732
|
-
*
|
|
1733
|
-
* The start container could be null when the dom node should be create after re-render.
|
|
1734
|
-
*
|
|
1735
|
-
* @returns {Nullable<Node>} The range start element.
|
|
1617
|
+
* Watches the value of the editor and updates the internal value.
|
|
1736
1618
|
*/
|
|
1737
|
-
|
|
1738
|
-
|
|
1619
|
+
watchValueUpdate() {
|
|
1620
|
+
if (this.value && !(this.value instanceof VegaRTEContent)) {
|
|
1621
|
+
this.value = VegaRTEContent.fromJSON(this.value);
|
|
1622
|
+
}
|
|
1623
|
+
else if (!this.value || this.value.blocks.length === 0) {
|
|
1624
|
+
this.value = VegaRTEContent.createEmptyContent();
|
|
1625
|
+
}
|
|
1626
|
+
else {
|
|
1627
|
+
this.changeEventEmitter.emit(this.value);
|
|
1628
|
+
ChangeManager.notify(FORM_ELEMENT_VALUE_CHANGE, {
|
|
1629
|
+
host: this.host,
|
|
1630
|
+
detail: this.value,
|
|
1631
|
+
});
|
|
1632
|
+
}
|
|
1739
1633
|
}
|
|
1740
1634
|
/**
|
|
1741
|
-
*
|
|
1742
|
-
* The end container could be null when the dom node should be create after re-render.
|
|
1635
|
+
* Updates the value of the editor and restore the selection.
|
|
1743
1636
|
*
|
|
1744
|
-
* @
|
|
1637
|
+
* @param {VegaRTEContent} newValue The new value to set.
|
|
1638
|
+
* @param {boolean} recordHistory - Whether to record the change in history.
|
|
1745
1639
|
*/
|
|
1746
|
-
|
|
1747
|
-
|
|
1640
|
+
async flushChanges(newValue, recordHistory = true) {
|
|
1641
|
+
if (recordHistory) {
|
|
1642
|
+
this.historyController.registerHistory(new RTEEditorState(newValue, new RTESelectionState(this.selectionController.getCurrentRange())));
|
|
1643
|
+
}
|
|
1644
|
+
this.value = newValue.clone();
|
|
1645
|
+
await waitForComponentDidRender(this.host);
|
|
1748
1646
|
}
|
|
1749
1647
|
/**
|
|
1750
|
-
*
|
|
1751
|
-
* The start RTENode could be null when the range start node is the root element of the rich text editor.
|
|
1648
|
+
* Determines whether the observer should accept changes.
|
|
1752
1649
|
*
|
|
1753
|
-
* @returns {
|
|
1650
|
+
* @returns {boolean} Always returns true in the current implementation.
|
|
1754
1651
|
*/
|
|
1755
|
-
|
|
1756
|
-
return
|
|
1652
|
+
isAcceptableFlushChange() {
|
|
1653
|
+
return true;
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
ValueController.VALUE_CHANGE_DEBOUNCE_TIME = 50;
|
|
1657
|
+
__decorate$f([
|
|
1658
|
+
MapToComponentField()
|
|
1659
|
+
], ValueController.prototype, "host", void 0);
|
|
1660
|
+
__decorate$f([
|
|
1661
|
+
MapToComponentField({ writable: true })
|
|
1662
|
+
], ValueController.prototype, "value", void 0);
|
|
1663
|
+
__decorate$f([
|
|
1664
|
+
MapToComponentField()
|
|
1665
|
+
], ValueController.prototype, "changeEventEmitter", void 0);
|
|
1666
|
+
__decorate$f([
|
|
1667
|
+
MapToComponentField()
|
|
1668
|
+
], ValueController.prototype, "valueController", void 0);
|
|
1669
|
+
__decorate$f([
|
|
1670
|
+
MapToComponentField()
|
|
1671
|
+
], ValueController.prototype, "historyController", void 0);
|
|
1672
|
+
__decorate$f([
|
|
1673
|
+
MapToComponentField()
|
|
1674
|
+
], ValueController.prototype, "selectionController", void 0);
|
|
1675
|
+
__decorate$f([
|
|
1676
|
+
MapToComponentMethod('connectedCallback')
|
|
1677
|
+
], ValueController.prototype, "connectedCallback", null);
|
|
1678
|
+
__decorate$f([
|
|
1679
|
+
MapToComponentMethod('disconnectedCallback')
|
|
1680
|
+
], ValueController.prototype, "disconnectedCallback", null);
|
|
1681
|
+
__decorate$f([
|
|
1682
|
+
MapToComponentMethod('componentWillLoad')
|
|
1683
|
+
], ValueController.prototype, "componentWillLoad", null);
|
|
1684
|
+
__decorate$f([
|
|
1685
|
+
MapToComponentMethod('watchValueUpdate')
|
|
1686
|
+
], ValueController.prototype, "watchValueUpdate", null);
|
|
1687
|
+
|
|
1688
|
+
/**
|
|
1689
|
+
* The rich text content controller
|
|
1690
|
+
*/
|
|
1691
|
+
class RichTextContentController {
|
|
1692
|
+
constructor(editor) {
|
|
1693
|
+
this.editor = editor;
|
|
1757
1694
|
}
|
|
1758
1695
|
/**
|
|
1759
|
-
*
|
|
1760
|
-
* The end RTENode could be null when the range end node is the root element of the rich text editor.
|
|
1696
|
+
* Sync rich text content editable with disabled property
|
|
1761
1697
|
*
|
|
1762
|
-
* @returns {Nullable<RTENode>} The range start element.
|
|
1763
1698
|
*/
|
|
1764
|
-
|
|
1765
|
-
|
|
1699
|
+
syncRichTextContentEditable() {
|
|
1700
|
+
this.editor.richTextContentEditable = !this.editor.disabled;
|
|
1766
1701
|
}
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
const ROOT_CONTAINER_CLASS_NAME = 'rich-text-content';
|
|
1705
|
+
/** This code snippet is defining an abstract class named `BaseHandler` with an abstract method `execute`. */
|
|
1706
|
+
class BaseHandler {
|
|
1767
1707
|
/**
|
|
1768
|
-
*
|
|
1708
|
+
* The function `execute` initializes the current state and selection, and then handles an event if provided.
|
|
1769
1709
|
*
|
|
1770
|
-
* @
|
|
1710
|
+
* @param {VegaRTEContent} currentState - The current state of the VegaRTE content.
|
|
1711
|
+
* @param {SelectionController} selectionController - Manages the selection of items in the user interface.
|
|
1712
|
+
* @param {HTMLElement} richTextEditor - The current rich text editor component
|
|
1713
|
+
* @param {InputEvent} [event] - It is used to pass an input event to the method for handling.
|
|
1771
1714
|
*/
|
|
1772
|
-
|
|
1773
|
-
|
|
1715
|
+
execute(currentState, selectionController, richTextEditor, event) {
|
|
1716
|
+
this.initCurrentStateAndSelection(currentState, selectionController);
|
|
1717
|
+
this.setCurrentRichTextEditor(richTextEditor);
|
|
1718
|
+
this.handleEvent(event);
|
|
1774
1719
|
}
|
|
1775
1720
|
/**
|
|
1776
|
-
*
|
|
1721
|
+
* The function `isRootContainer` checks if an HTML element is a root container with a class of 'rich-text-content'.
|
|
1777
1722
|
*
|
|
1778
|
-
* @
|
|
1723
|
+
* @param {HTMLElement} element - HTMLElement
|
|
1724
|
+
* @returns {boolean} The boolean value
|
|
1779
1725
|
*/
|
|
1780
|
-
|
|
1781
|
-
return
|
|
1726
|
+
isRootContainer(element) {
|
|
1727
|
+
return (element &&
|
|
1728
|
+
element.nodeType === Node.ELEMENT_NODE &&
|
|
1729
|
+
element.classList.contains(ROOT_CONTAINER_CLASS_NAME));
|
|
1782
1730
|
}
|
|
1783
1731
|
/**
|
|
1784
|
-
*
|
|
1785
|
-
* This method will called after modify the content, the start node and end node should be rte node.
|
|
1786
|
-
* This method will called after selectionchange event emit, the start node and end node should be the html node.
|
|
1732
|
+
* Checks if a given HTML element represents an empty paragraph containing only a line break element.
|
|
1787
1733
|
*
|
|
1788
|
-
* @param {
|
|
1789
|
-
* @
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
const { startOffset, endOffset } = options;
|
|
1794
|
-
this._startOffset = startOffset;
|
|
1795
|
-
this._endOffset = endOffset;
|
|
1796
|
-
const startNode = options.startNode;
|
|
1797
|
-
const endNode = options.endNode;
|
|
1798
|
-
if (startNode instanceof RTENode) {
|
|
1799
|
-
this._startNode = startNode;
|
|
1800
|
-
this._endNode = endNode;
|
|
1801
|
-
const startContainer = this.getElementByRTENode(this._startNode);
|
|
1802
|
-
const endContainer = this._startNode === this._endNode ? startContainer : this.getElementByRTENode(this._endNode);
|
|
1803
|
-
if (startContainer) {
|
|
1804
|
-
this._startContainer = startContainer;
|
|
1805
|
-
this._endContainer = endContainer;
|
|
1806
|
-
}
|
|
1807
|
-
}
|
|
1808
|
-
else {
|
|
1809
|
-
// The selectionchange callback has a 50 ms delay, so we need to check the next range is the same as the current ret range.
|
|
1810
|
-
this._startContainer = startNode;
|
|
1811
|
-
this._endContainer = endNode;
|
|
1812
|
-
this._startNode = this.getRTENodeByElement(this._startContainer);
|
|
1813
|
-
this._endNode =
|
|
1814
|
-
this._startContainer === this._endContainer
|
|
1815
|
-
? this._startNode
|
|
1816
|
-
: this.getRTENodeByElement(this._endContainer);
|
|
1817
|
-
if (nativeRange) {
|
|
1818
|
-
this._oldNativeRange = nativeRange;
|
|
1819
|
-
}
|
|
1820
|
-
}
|
|
1821
|
-
return new RTERange(this._startContainer, this._endContainer, this._startOffset, this._endOffset, this._startNode, this._endNode, this._oldNativeRange);
|
|
1734
|
+
* @param {HTMLElement} node - An HTMLElement node that represents a paragraph element in the HTML document.
|
|
1735
|
+
* @returns {boolean} boolean result
|
|
1736
|
+
*/
|
|
1737
|
+
isEmptyParagraph(node) {
|
|
1738
|
+
return node && node.childNodes && node.childNodes.length === 0;
|
|
1822
1739
|
}
|
|
1823
1740
|
/**
|
|
1824
|
-
*
|
|
1741
|
+
* Removes selected nodes within a range in a rich text editor content.
|
|
1742
|
+
* The method is only used for different nodes are selected
|
|
1825
1743
|
*
|
|
1826
|
-
* @
|
|
1744
|
+
* @param {boolean} [mergeNode] Merge start node and end node or not, default value is false.
|
|
1745
|
+
* @returns {RTENode} The range start node, usually the start node is the first item of selectedNodes, if the selectedNodes is all removed, the start node will be a new text node.
|
|
1827
1746
|
*/
|
|
1828
|
-
|
|
1829
|
-
|
|
1747
|
+
removeSelectionRange(mergeNode = false) {
|
|
1748
|
+
ChangeManager.notify(domNodeSubjectFactory.getSubject(this.richTextEditorRef, VegaInternalRichTextEditDeleteSelectedNodes), { host: this.richTextEditorRef, detail: mergeNode });
|
|
1749
|
+
const range = this.selectionController.getCurrentRange();
|
|
1750
|
+
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
1751
|
+
return range.startNode || selectedNodes[0];
|
|
1830
1752
|
}
|
|
1831
1753
|
/**
|
|
1832
|
-
* Creates a
|
|
1833
|
-
* Invoke this method to get the future range state if the range content modified.
|
|
1834
|
-
* Invoke this method to get the native range instance if range start node and end node not defined
|
|
1754
|
+
* Creates a new paragraph with an empty text node and returns it.
|
|
1835
1755
|
*
|
|
1836
|
-
* @returns {
|
|
1756
|
+
* @returns {RTETextBlock} An empty paragraph with a unique identifier and a text node appended to it.
|
|
1837
1757
|
*/
|
|
1838
|
-
|
|
1839
|
-
const
|
|
1840
|
-
const
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
range.setStart(startContainer, this._startOffset);
|
|
1844
|
-
range.setEnd(endContainer, this._endOffset);
|
|
1845
|
-
this._startContainer = startContainer;
|
|
1846
|
-
this._endContainer = endContainer;
|
|
1847
|
-
this._oldNativeRange = range;
|
|
1848
|
-
return range;
|
|
1849
|
-
}
|
|
1850
|
-
else if (this._oldNativeRange) {
|
|
1851
|
-
return this._oldNativeRange;
|
|
1852
|
-
}
|
|
1758
|
+
createEmptyParagraph() {
|
|
1759
|
+
const paragraph = new RTETextBlock(generateUUID(), 'paragraph');
|
|
1760
|
+
const textNode = new RTETextNode(`${paragraph.id}1`, '', paragraph);
|
|
1761
|
+
paragraph.apply(new AppendChildNodesAction([textNode]));
|
|
1762
|
+
return paragraph;
|
|
1853
1763
|
}
|
|
1854
1764
|
/**
|
|
1855
|
-
*
|
|
1765
|
+
* The function initializes the current state and selection controller in TypeScript.
|
|
1856
1766
|
*
|
|
1857
|
-
* @param {
|
|
1858
|
-
* @
|
|
1859
|
-
*/
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
if (element) {
|
|
1864
|
-
return node instanceof RTEImageNode
|
|
1865
|
-
? findParent(element, 'vega-rich-text-image-editor')
|
|
1866
|
-
: element.firstChild;
|
|
1867
|
-
}
|
|
1868
|
-
}
|
|
1767
|
+
* @param {VegaRTEContent} currentState - The current state of a Vega runtime environment content.
|
|
1768
|
+
* @param {SelectionController} selectionController - It is used to manage the selection of content within the VegaRTE editor.
|
|
1769
|
+
*/
|
|
1770
|
+
initCurrentStateAndSelection(currentState, selectionController) {
|
|
1771
|
+
this.currentState = currentState;
|
|
1772
|
+
this.selectionController = selectionController;
|
|
1869
1773
|
}
|
|
1870
1774
|
/**
|
|
1871
|
-
*
|
|
1775
|
+
* Queries the rich text editor element from the input event target.
|
|
1872
1776
|
*
|
|
1873
|
-
* @param {
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
if (element) {
|
|
1878
|
-
const registerElement = element.nodeType === Node.TEXT_NODE
|
|
1879
|
-
? element.parentElement
|
|
1880
|
-
: element.nodeName === 'VEGA-RICH-TEXT-IMAGE-EDITOR'
|
|
1881
|
-
? element.querySelector('img')
|
|
1882
|
-
: element;
|
|
1883
|
-
return stateEntityRenderingRegistry.getEntityByDOM(registerElement);
|
|
1884
|
-
}
|
|
1777
|
+
* @param {HTMLElement} richTextEditor - The current rich text editor component
|
|
1778
|
+
*/
|
|
1779
|
+
setCurrentRichTextEditor(richTextEditor) {
|
|
1780
|
+
this.richTextEditorRef = richTextEditor;
|
|
1885
1781
|
}
|
|
1886
1782
|
}
|
|
1887
1783
|
|
|
1888
1784
|
/**
|
|
1889
|
-
*
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
constructor(range) {
|
|
1893
|
-
this.range = range;
|
|
1894
|
-
}
|
|
1895
|
-
/**
|
|
1896
|
-
* Clones the selection state, updating the range nodes based on the provided content.
|
|
1897
|
-
*
|
|
1898
|
-
* @returns {RTESelectionState} A new instance of RTESelectionState with the updated range.
|
|
1899
|
-
*/
|
|
1900
|
-
clone() {
|
|
1901
|
-
const newRange = this.range.clone();
|
|
1902
|
-
return new RTESelectionState(newRange);
|
|
1903
|
-
}
|
|
1904
|
-
}
|
|
1905
|
-
|
|
1906
|
-
var __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
1907
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1908
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1909
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1910
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1911
|
-
};
|
|
1912
|
-
/**
|
|
1913
|
-
* The text selection controller
|
|
1914
|
-
*/
|
|
1915
|
-
class SelectionController extends VegaSlimmer {
|
|
1916
|
-
constructor() {
|
|
1917
|
-
super(...arguments);
|
|
1918
|
-
this.currentRange = new RTERange();
|
|
1919
|
-
this.updateCaretPositionTaskQueue = new SynchronizeTaskQueue(1);
|
|
1920
|
-
this.handleSelectionWithDebounce = debounce(this.handleSelectionChange, SelectionController.SELECTION_CHANGE_DEBOUNCE_TIME, this);
|
|
1921
|
-
this.pendingRestoreSelectionNodes = [];
|
|
1922
|
-
/**
|
|
1923
|
-
* Sets the next selection state with specified start and end nodes, offsets, and a timestamp.
|
|
1924
|
-
*
|
|
1925
|
-
* Example:
|
|
1926
|
-
* Before insert text start offset is 0, the new start offset should update to 1
|
|
1927
|
-
* Before delete text start offset is 1, the new start offset should update to 0
|
|
1928
|
-
*
|
|
1929
|
-
*/
|
|
1930
|
-
this.createUpdateSelectionRangeTask = async () => {
|
|
1931
|
-
// add await Promise.resolve to put the code behind to a micro task
|
|
1932
|
-
await Promise.resolve();
|
|
1933
|
-
const range = this.currentRange.toNativeRange();
|
|
1934
|
-
if (range) {
|
|
1935
|
-
this.setSelectionRange(range);
|
|
1936
|
-
}
|
|
1937
|
-
};
|
|
1938
|
-
}
|
|
1939
|
-
/**
|
|
1940
|
-
* Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
|
|
1941
|
-
*/
|
|
1942
|
-
connectedCallback() {
|
|
1943
|
-
this.registerSelectionRangeChangeObserver();
|
|
1944
|
-
}
|
|
1945
|
-
/**
|
|
1946
|
-
* Component lifecycle - [disconnectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
|
|
1947
|
-
*/
|
|
1948
|
-
disconnectedCallback() {
|
|
1949
|
-
ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorSelectionRangeChange), this.selectionRangeChangeObserver);
|
|
1950
|
-
}
|
|
1951
|
-
/**
|
|
1952
|
-
* Component lifecycle - [componentDidLoad]{@link VegaRichTextEditor.componentDidLoad}
|
|
1953
|
-
*/
|
|
1954
|
-
componentDidLoad() {
|
|
1955
|
-
document.addEventListener('selectionchange', this.handleSelectionWithDebounce);
|
|
1956
|
-
}
|
|
1957
|
-
/**
|
|
1958
|
-
* Watches the internal value of the editor
|
|
1959
|
-
*/
|
|
1960
|
-
watchValueUpdate() {
|
|
1961
|
-
this.prepareRestoreSelectionState();
|
|
1962
|
-
this.restoreSelection();
|
|
1963
|
-
}
|
|
1964
|
-
/**
|
|
1965
|
-
* Update the caret position after the component re-render
|
|
1966
|
-
*/
|
|
1967
|
-
async updateCaretPosition() {
|
|
1968
|
-
if (this.updateCaretPositionTaskQueue.queue.length) {
|
|
1969
|
-
await this.updateCaretPositionTaskQueue.runTask();
|
|
1970
|
-
}
|
|
1971
|
-
}
|
|
1972
|
-
/**
|
|
1973
|
-
* Get the current RTE selection range
|
|
1974
|
-
*
|
|
1975
|
-
* @returns {RTERange} - The current RTE selection range
|
|
1976
|
-
*/
|
|
1977
|
-
getCurrentRange() {
|
|
1978
|
-
return this.currentRange;
|
|
1979
|
-
}
|
|
1980
|
-
/**
|
|
1981
|
-
* Get the selected rich text node
|
|
1982
|
-
*
|
|
1983
|
-
* @returns {RTENode[]} Selected rich text nodes
|
|
1984
|
-
*/
|
|
1985
|
-
getSelectedNodes() {
|
|
1986
|
-
return Array.from(this.selectionMap.values()).flat();
|
|
1987
|
-
}
|
|
1988
|
-
/**
|
|
1989
|
-
* Get the selected rich text blocks
|
|
1990
|
-
*
|
|
1991
|
-
* @returns {RTEBlock[]} Selected rich text blocks
|
|
1992
|
-
*/
|
|
1993
|
-
getSelectedBlocks() {
|
|
1994
|
-
return Array.from(this.selectionMap.keys());
|
|
1995
|
-
}
|
|
1996
|
-
/**
|
|
1997
|
-
* Set the selection state
|
|
1998
|
-
*
|
|
1999
|
-
* @param {RTESelectionState} state - The selection state to set
|
|
2000
|
-
*/
|
|
2001
|
-
setSelectionState(state) {
|
|
2002
|
-
this.selectionState = state;
|
|
2003
|
-
}
|
|
2004
|
-
/**
|
|
2005
|
-
* Sets the next selection state with specified start and end nodes, offsets, push the update task to a queue
|
|
2006
|
-
*
|
|
2007
|
-
* @param {SelectionStateType['startNode']} startNode - The starting node of the selection range. It is a Node object representing the node where the selection range starts.
|
|
2008
|
-
* @param {number} startOffset - The `startNode` where the selection range should start. It indicates the position within the `startNode` where the selection should begin.
|
|
2009
|
-
* @param {SelectionStateType['endNode']} [endNode] - The ending node of the selection range. If a value is provided for `endNode`, it will be used as the ending node of the selection range.
|
|
2010
|
-
* @param {number} [endOffset] - The ending offset within the `endNode` where the selection range should end.
|
|
2011
|
-
* @param {boolean} [immediatelyRun] - Should the task run immediately. default is false
|
|
2012
|
-
*/
|
|
2013
|
-
enqueueSelectionRangeFutureState(startNode, startOffset, endNode, endOffset, immediatelyRun = false) {
|
|
2014
|
-
endNode = endNode || startNode;
|
|
2015
|
-
endOffset = endOffset || endOffset === 0 ? endOffset : startOffset;
|
|
2016
|
-
this.currentRange = this.currentRange.updateRTERange({ startNode, endNode, startOffset, endOffset });
|
|
2017
|
-
void this.updateCaretPositionTaskQueue.enqueue({
|
|
2018
|
-
/** Add task to the queue and run it until component did render */
|
|
2019
|
-
run: async () => {
|
|
2020
|
-
try {
|
|
2021
|
-
await this.createUpdateSelectionRangeTask();
|
|
2022
|
-
}
|
|
2023
|
-
catch (e) {
|
|
2024
|
-
LogUtility.error('Set range error.', e);
|
|
2025
|
-
}
|
|
2026
|
-
},
|
|
2027
|
-
}, immediatelyRun);
|
|
2028
|
-
}
|
|
2029
|
-
/**
|
|
2030
|
-
* Set selection with a new range
|
|
2031
|
-
*
|
|
2032
|
-
* @param {Range} range - The range to set
|
|
2033
|
-
*/
|
|
2034
|
-
setSelectionRange(range) {
|
|
2035
|
-
const selection = this.getSelection();
|
|
2036
|
-
if (selection) {
|
|
2037
|
-
selection.removeAllRanges();
|
|
2038
|
-
selection.addRange(range);
|
|
2039
|
-
this.saveSelection();
|
|
2040
|
-
}
|
|
2041
|
-
}
|
|
2042
|
-
/**
|
|
2043
|
-
* Save the current selection range detail
|
|
2044
|
-
*/
|
|
2045
|
-
saveSelection() {
|
|
2046
|
-
const selection = this.getSelection();
|
|
2047
|
-
// The range is out of date if the queue is not empty, or the range is update by the composition text insert, so we should not update the RTERange
|
|
2048
|
-
if (selection &&
|
|
2049
|
-
selection.rangeCount > 0 &&
|
|
2050
|
-
this.updateCaretPositionTaskQueue.queue.length === 0 &&
|
|
2051
|
-
!this.insertCompositionTextController.isComposing()) {
|
|
2052
|
-
const range = selection.getRangeAt(0);
|
|
2053
|
-
const { startContainer: startNode, endContainer: endNode, startOffset, endOffset } = range;
|
|
2054
|
-
this.currentRange = this.currentRange.updateRTERange({ startNode, endNode, startOffset, endOffset }, range);
|
|
2055
|
-
}
|
|
2056
|
-
}
|
|
2057
|
-
/**
|
|
2058
|
-
* Restore the selection to the current selected nodes
|
|
2059
|
-
*/
|
|
2060
|
-
restoreSelection() {
|
|
2061
|
-
if (this.selectionState) {
|
|
2062
|
-
const { startNode, endNode, startOffset, endOffset } = this.selectionState.range;
|
|
2063
|
-
if (startNode instanceof RTETextNode && startNode === endNode && startNode.text.length === 0) {
|
|
2064
|
-
this.enqueueSelectionRangeFutureState(startNode, ZERO_WIDTH_SPACE.length);
|
|
2065
|
-
}
|
|
2066
|
-
else {
|
|
2067
|
-
this.enqueueSelectionRangeFutureState(startNode, startOffset, endNode, endOffset);
|
|
2068
|
-
}
|
|
2069
|
-
this.selectionState = null;
|
|
2070
|
-
}
|
|
2071
|
-
}
|
|
2072
|
-
/**
|
|
2073
|
-
* Get the rich text content selected range
|
|
2074
|
-
*
|
|
2075
|
-
* @returns {Selection} A [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection) object
|
|
2076
|
-
*/
|
|
2077
|
-
getSelection() {
|
|
2078
|
-
const richTextContentRef = this.vegaRichTextEditorRenderer.getRichTextContentRef();
|
|
2079
|
-
return ShadowSelectionPolyfill$1.getSelection(richTextContentRef.shadowRoot);
|
|
2080
|
-
}
|
|
2081
|
-
/**
|
|
2082
|
-
* Get selected rich text
|
|
2083
|
-
*/
|
|
2084
|
-
handleSelectionChange() {
|
|
2085
|
-
if (this.disabled)
|
|
2086
|
-
return;
|
|
2087
|
-
const selection = this.getSelection();
|
|
2088
|
-
if (!selection || selection.rangeCount === 0)
|
|
2089
|
-
return;
|
|
2090
|
-
this.clearSelectionMap();
|
|
2091
|
-
this.saveSelection();
|
|
2092
|
-
const range = selection.getRangeAt(0);
|
|
2093
|
-
const commonAncestor = range.commonAncestorContainer;
|
|
2094
|
-
const selectedNodes = [];
|
|
2095
|
-
/**
|
|
2096
|
-
* Rich text node filter
|
|
2097
|
-
*
|
|
2098
|
-
* @param {Node} node - Start node
|
|
2099
|
-
*/
|
|
2100
|
-
const filterNode = (node) => {
|
|
2101
|
-
if (!range.intersectsNode(node)) {
|
|
2102
|
-
return;
|
|
2103
|
-
}
|
|
2104
|
-
if (node.nodeType === Node.TEXT_NODE) {
|
|
2105
|
-
const currentNode = node.parentElement;
|
|
2106
|
-
const nodeEntity = stateEntityRenderingRegistry.getEntityByDOM(currentNode);
|
|
2107
|
-
if (nodeEntity instanceof RTENode) {
|
|
2108
|
-
selectedNodes.push(nodeEntity);
|
|
2109
|
-
return;
|
|
2110
|
-
}
|
|
2111
|
-
}
|
|
2112
|
-
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
2113
|
-
const entityElement = node.nodeName === 'VEGA-RICH-TEXT-IMAGE-EDITOR'
|
|
2114
|
-
? node.querySelector('img')
|
|
2115
|
-
: node;
|
|
2116
|
-
const nodeEntity = stateEntityRenderingRegistry.getEntityByDOM(entityElement);
|
|
2117
|
-
if (nodeEntity instanceof RTENode) {
|
|
2118
|
-
selectedNodes.push(nodeEntity);
|
|
2119
|
-
return;
|
|
2120
|
-
}
|
|
2121
|
-
}
|
|
2122
|
-
node.childNodes.forEach(filterNode);
|
|
2123
|
-
};
|
|
2124
|
-
filterNode(commonAncestor);
|
|
2125
|
-
selectedNodes.forEach((node) => {
|
|
2126
|
-
if (this.selectionMap.has(node.parentBlock)) {
|
|
2127
|
-
this.selectionMap.get(node.parentBlock).push(node);
|
|
2128
|
-
}
|
|
2129
|
-
else {
|
|
2130
|
-
this.selectionMap.set(node.parentBlock, [node]);
|
|
2131
|
-
}
|
|
2132
|
-
});
|
|
2133
|
-
this.getSelectedNodes().forEach((node) => node.apply(new SelectionChangeAction(range)));
|
|
2134
|
-
}
|
|
2135
|
-
/**
|
|
2136
|
-
* Clear the selection map
|
|
2137
|
-
*/
|
|
2138
|
-
clearSelectionMap() {
|
|
2139
|
-
this.getSelectedNodes().forEach((node) => {
|
|
2140
|
-
node.annotationMap.delete(InternalAnnotationTypeEnum.SELECTION_RANGE);
|
|
2141
|
-
});
|
|
2142
|
-
this.selectionMap = new Map();
|
|
2143
|
-
}
|
|
2144
|
-
/**
|
|
2145
|
-
* Check if the selection range change is acceptable
|
|
2146
|
-
*
|
|
2147
|
-
* @returns {boolean} - Returns a boolean value.
|
|
2148
|
-
*/
|
|
2149
|
-
isAcceptableSelectionRangeChange() {
|
|
2150
|
-
return true;
|
|
2151
|
-
}
|
|
2152
|
-
/**
|
|
2153
|
-
* Register the selection range change observer
|
|
2154
|
-
*/
|
|
2155
|
-
registerSelectionRangeChangeObserver() {
|
|
2156
|
-
this.selectionRangeChangeObserver = new Observer(this.isAcceptableSelectionRangeChange.bind(this), (payload) => {
|
|
2157
|
-
this.pendingRestoreSelectionNodes.push(payload.node);
|
|
2158
|
-
});
|
|
2159
|
-
ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorSelectionRangeChange), this.selectionRangeChangeObserver);
|
|
2160
|
-
}
|
|
2161
|
-
/**
|
|
2162
|
-
* Prepare the selection state to restore
|
|
2163
|
-
*/
|
|
2164
|
-
prepareRestoreSelectionState() {
|
|
2165
|
-
if (this.pendingRestoreSelectionNodes.length > 0) {
|
|
2166
|
-
const startNode = this.pendingRestoreSelectionNodes[0];
|
|
2167
|
-
const endNode = this.pendingRestoreSelectionNodes.length > 1
|
|
2168
|
-
? this.pendingRestoreSelectionNodes[this.pendingRestoreSelectionNodes.length - 1]
|
|
2169
|
-
: startNode;
|
|
2170
|
-
const { startOffset, endOffset, endContainer, startContainer } = this.currentRange;
|
|
2171
|
-
const nodesInCurrentRange = stateEntityRenderingRegistry.getDOMByEntity(startNode) === startContainer.parentElement &&
|
|
2172
|
-
stateEntityRenderingRegistry.getDOMByEntity(endNode) === endContainer.parentElement;
|
|
2173
|
-
if (nodesInCurrentRange) {
|
|
2174
|
-
this.currentRange = this.currentRange.updateRTERange({
|
|
2175
|
-
startNode,
|
|
2176
|
-
endNode,
|
|
2177
|
-
startOffset,
|
|
2178
|
-
endOffset,
|
|
2179
|
-
});
|
|
2180
|
-
this.selectionState = new RTESelectionState(this.currentRange);
|
|
2181
|
-
}
|
|
2182
|
-
else {
|
|
2183
|
-
this.currentRange = this.currentRange.updateRTERange({
|
|
2184
|
-
startNode,
|
|
2185
|
-
endNode,
|
|
2186
|
-
startOffset: 0,
|
|
2187
|
-
endOffset: endNode.text.length,
|
|
2188
|
-
});
|
|
2189
|
-
this.selectionState = new RTESelectionState(this.currentRange);
|
|
2190
|
-
}
|
|
2191
|
-
this.pendingRestoreSelectionNodes = [];
|
|
2192
|
-
}
|
|
2193
|
-
}
|
|
2194
|
-
}
|
|
2195
|
-
SelectionController.SELECTION_CHANGE_DEBOUNCE_TIME = 50;
|
|
2196
|
-
__decorate$f([
|
|
2197
|
-
MapToComponentField()
|
|
2198
|
-
], SelectionController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
2199
|
-
__decorate$f([
|
|
2200
|
-
MapToComponentField({ writable: true })
|
|
2201
|
-
], SelectionController.prototype, "selectionMap", void 0);
|
|
2202
|
-
__decorate$f([
|
|
2203
|
-
MapToComponentField()
|
|
2204
|
-
], SelectionController.prototype, "host", void 0);
|
|
2205
|
-
__decorate$f([
|
|
2206
|
-
MapToComponentField()
|
|
2207
|
-
], SelectionController.prototype, "value", void 0);
|
|
2208
|
-
__decorate$f([
|
|
2209
|
-
MapToComponentField()
|
|
2210
|
-
], SelectionController.prototype, "disabled", void 0);
|
|
2211
|
-
__decorate$f([
|
|
2212
|
-
MapToComponentField()
|
|
2213
|
-
], SelectionController.prototype, "valueController", void 0);
|
|
2214
|
-
__decorate$f([
|
|
2215
|
-
MapToComponentField()
|
|
2216
|
-
], SelectionController.prototype, "insertCompositionTextController", void 0);
|
|
2217
|
-
__decorate$f([
|
|
2218
|
-
MapToComponentField()
|
|
2219
|
-
], SelectionController.prototype, "historyController", void 0);
|
|
2220
|
-
__decorate$f([
|
|
2221
|
-
MapToComponentMethod('connectedCallback')
|
|
2222
|
-
], SelectionController.prototype, "connectedCallback", null);
|
|
2223
|
-
__decorate$f([
|
|
2224
|
-
MapToComponentMethod('disconnectedCallback')
|
|
2225
|
-
], SelectionController.prototype, "disconnectedCallback", null);
|
|
2226
|
-
__decorate$f([
|
|
2227
|
-
MapToComponentMethod('componentDidLoad')
|
|
2228
|
-
], SelectionController.prototype, "componentDidLoad", null);
|
|
2229
|
-
__decorate$f([
|
|
2230
|
-
MapToComponentMethod('watchValueUpdate')
|
|
2231
|
-
], SelectionController.prototype, "watchValueUpdate", null);
|
|
2232
|
-
__decorate$f([
|
|
2233
|
-
MapToComponentMethod('componentDidUpdate')
|
|
2234
|
-
], SelectionController.prototype, "updateCaretPosition", null);
|
|
2235
|
-
|
|
2236
|
-
/**
|
|
2237
|
-
* Represents the state of the RTE
|
|
2238
|
-
*/
|
|
2239
|
-
class RTEEditorState {
|
|
2240
|
-
constructor(content, selection) {
|
|
2241
|
-
this.content = content.clone(true);
|
|
2242
|
-
this.selection = selection.clone();
|
|
2243
|
-
this.refreshSelectionNodes();
|
|
2244
|
-
}
|
|
2245
|
-
/**
|
|
2246
|
-
* Clones the editor state, updating the content and selection based on the provided content.
|
|
2247
|
-
*
|
|
2248
|
-
* @returns {RTEEditorState} A new instance of RTEEditorState with the updated content and selection.
|
|
2249
|
-
*/
|
|
2250
|
-
clone() {
|
|
2251
|
-
return new RTEEditorState(this.content, this.selection);
|
|
2252
|
-
}
|
|
2253
|
-
/**
|
|
2254
|
-
* Refreshes the selection nodes in the editor state.
|
|
2255
|
-
*/
|
|
2256
|
-
refreshSelectionNodes() {
|
|
2257
|
-
const { startNode: oldStartNode, endNode: oldEndNode, startOffset, endOffset, } = this.selection.range;
|
|
2258
|
-
if (oldStartNode && oldEndNode) {
|
|
2259
|
-
const startNode = this.content.findNodeById(oldStartNode.id);
|
|
2260
|
-
const endNode = this.content.findNodeById(oldEndNode.id);
|
|
2261
|
-
if (startNode && endNode) {
|
|
2262
|
-
this.selection.range.updateRTERange({
|
|
2263
|
-
startNode,
|
|
2264
|
-
endNode,
|
|
2265
|
-
startOffset,
|
|
2266
|
-
endOffset,
|
|
2267
|
-
});
|
|
2268
|
-
}
|
|
2269
|
-
}
|
|
2270
|
-
}
|
|
2271
|
-
}
|
|
2272
|
-
|
|
2273
|
-
var __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
2274
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
2275
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
2276
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2277
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2278
|
-
};
|
|
2279
|
-
/**
|
|
2280
|
-
* The value controller is responsible for updating the value of the rich text editor.
|
|
2281
|
-
*/
|
|
2282
|
-
class ValueController extends VegaSlimmer {
|
|
2283
|
-
/**
|
|
2284
|
-
* Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
|
|
2285
|
-
*/
|
|
2286
|
-
connectedCallback() {
|
|
2287
|
-
const flushChangesWithDebounce = debounce(() => {
|
|
2288
|
-
void this.valueController.flushChanges(this.value);
|
|
2289
|
-
}, ValueController.VALUE_CHANGE_DEBOUNCE_TIME, this);
|
|
2290
|
-
this.flushChangeObserver = new Observer(this.isAcceptableFlushChange.bind(this), flushChangesWithDebounce);
|
|
2291
|
-
ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
|
|
2292
|
-
}
|
|
2293
|
-
/**
|
|
2294
|
-
* Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
|
|
2295
|
-
*/
|
|
2296
|
-
disconnectedCallback() {
|
|
2297
|
-
ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
|
|
2298
|
-
}
|
|
2299
|
-
/**
|
|
2300
|
-
* Component lifecycle - [componentWillLoad]{@link VegaRichTextEditor.componentWillLoad}
|
|
2301
|
-
*/
|
|
2302
|
-
componentWillLoad() {
|
|
2303
|
-
if (this.value && !(this.value instanceof VegaRTEContent)) {
|
|
2304
|
-
this.value = VegaRTEContent.fromJSON(this.value);
|
|
2305
|
-
}
|
|
2306
|
-
}
|
|
2307
|
-
/**
|
|
2308
|
-
* Watches the value of the editor and updates the internal value.
|
|
2309
|
-
*/
|
|
2310
|
-
watchValueUpdate() {
|
|
2311
|
-
if (this.value && !(this.value instanceof VegaRTEContent)) {
|
|
2312
|
-
this.value = VegaRTEContent.fromJSON(this.value);
|
|
2313
|
-
}
|
|
2314
|
-
else if (!this.value || this.value.blocks.length === 0) {
|
|
2315
|
-
this.value = VegaRTEContent.createEmptyContent();
|
|
2316
|
-
}
|
|
2317
|
-
else {
|
|
2318
|
-
this.changeEventEmitter.emit(this.value);
|
|
2319
|
-
ChangeManager.notify(FORM_ELEMENT_VALUE_CHANGE, {
|
|
2320
|
-
host: this.host,
|
|
2321
|
-
detail: this.value,
|
|
2322
|
-
});
|
|
2323
|
-
}
|
|
2324
|
-
}
|
|
2325
|
-
/**
|
|
2326
|
-
* Updates the value of the editor and restore the selection.
|
|
2327
|
-
*
|
|
2328
|
-
* @param {VegaRTEContent} newValue The new value to set.
|
|
2329
|
-
* @param {boolean} recordHistory - Whether to record the change in history.
|
|
2330
|
-
*/
|
|
2331
|
-
async flushChanges(newValue, recordHistory = true) {
|
|
2332
|
-
if (recordHistory) {
|
|
2333
|
-
this.historyController.registerHistory(new RTEEditorState(newValue, new RTESelectionState(this.selectionController.getCurrentRange())));
|
|
2334
|
-
}
|
|
2335
|
-
this.value = newValue.clone();
|
|
2336
|
-
await waitForComponentDidRender(this.host);
|
|
2337
|
-
}
|
|
2338
|
-
/**
|
|
2339
|
-
* Determines whether the observer should accept changes.
|
|
2340
|
-
*
|
|
2341
|
-
* @returns {boolean} Always returns true in the current implementation.
|
|
2342
|
-
*/
|
|
2343
|
-
isAcceptableFlushChange() {
|
|
2344
|
-
return true;
|
|
2345
|
-
}
|
|
2346
|
-
}
|
|
2347
|
-
ValueController.VALUE_CHANGE_DEBOUNCE_TIME = 50;
|
|
2348
|
-
__decorate$e([
|
|
2349
|
-
MapToComponentField()
|
|
2350
|
-
], ValueController.prototype, "host", void 0);
|
|
2351
|
-
__decorate$e([
|
|
2352
|
-
MapToComponentField({ writable: true })
|
|
2353
|
-
], ValueController.prototype, "value", void 0);
|
|
2354
|
-
__decorate$e([
|
|
2355
|
-
MapToComponentField()
|
|
2356
|
-
], ValueController.prototype, "changeEventEmitter", void 0);
|
|
2357
|
-
__decorate$e([
|
|
2358
|
-
MapToComponentField()
|
|
2359
|
-
], ValueController.prototype, "valueController", void 0);
|
|
2360
|
-
__decorate$e([
|
|
2361
|
-
MapToComponentField()
|
|
2362
|
-
], ValueController.prototype, "historyController", void 0);
|
|
2363
|
-
__decorate$e([
|
|
2364
|
-
MapToComponentField()
|
|
2365
|
-
], ValueController.prototype, "selectionController", void 0);
|
|
2366
|
-
__decorate$e([
|
|
2367
|
-
MapToComponentMethod('connectedCallback')
|
|
2368
|
-
], ValueController.prototype, "connectedCallback", null);
|
|
2369
|
-
__decorate$e([
|
|
2370
|
-
MapToComponentMethod('disconnectedCallback')
|
|
2371
|
-
], ValueController.prototype, "disconnectedCallback", null);
|
|
2372
|
-
__decorate$e([
|
|
2373
|
-
MapToComponentMethod('componentWillLoad')
|
|
2374
|
-
], ValueController.prototype, "componentWillLoad", null);
|
|
2375
|
-
__decorate$e([
|
|
2376
|
-
MapToComponentMethod('watchValueUpdate')
|
|
2377
|
-
], ValueController.prototype, "watchValueUpdate", null);
|
|
2378
|
-
|
|
2379
|
-
/**
|
|
2380
|
-
* The rich text content controller
|
|
2381
|
-
*/
|
|
2382
|
-
class RichTextContentController {
|
|
2383
|
-
constructor(editor) {
|
|
2384
|
-
this.editor = editor;
|
|
2385
|
-
}
|
|
2386
|
-
/**
|
|
2387
|
-
* Sync rich text content editable with disabled property
|
|
2388
|
-
*
|
|
2389
|
-
*/
|
|
2390
|
-
syncRichTextContentEditable() {
|
|
2391
|
-
this.editor.richTextContentEditable = !this.editor.disabled;
|
|
2392
|
-
}
|
|
2393
|
-
}
|
|
2394
|
-
|
|
2395
|
-
const ROOT_CONTAINER_CLASS_NAME = 'rich-text-content';
|
|
2396
|
-
/** This code snippet is defining an abstract class named `BaseHandler` with an abstract method `execute`. */
|
|
2397
|
-
class BaseHandler {
|
|
2398
|
-
/**
|
|
2399
|
-
* The function `execute` initializes the current state and selection, and then handles an event if provided.
|
|
2400
|
-
*
|
|
2401
|
-
* @param {VegaRTEContent} currentState - The current state of the VegaRTE content.
|
|
2402
|
-
* @param {SelectionController} selectionController - Manages the selection of items in the user interface.
|
|
2403
|
-
* @param {HTMLElement} richTextEditor - The current rich text editor component
|
|
2404
|
-
* @param {InputEvent} [event] - It is used to pass an input event to the method for handling.
|
|
2405
|
-
*/
|
|
2406
|
-
execute(currentState, selectionController, richTextEditor, event) {
|
|
2407
|
-
this.initCurrentStateAndSelection(currentState, selectionController);
|
|
2408
|
-
this.setCurrentRichTextEditor(richTextEditor);
|
|
2409
|
-
this.handleEvent(event);
|
|
2410
|
-
}
|
|
2411
|
-
/**
|
|
2412
|
-
* The function `isRootContainer` checks if an HTML element is a root container with a class of 'rich-text-content'.
|
|
2413
|
-
*
|
|
2414
|
-
* @param {HTMLElement} element - HTMLElement
|
|
2415
|
-
* @returns {boolean} The boolean value
|
|
2416
|
-
*/
|
|
2417
|
-
isRootContainer(element) {
|
|
2418
|
-
return (element &&
|
|
2419
|
-
element.nodeType === Node.ELEMENT_NODE &&
|
|
2420
|
-
element.classList.contains(ROOT_CONTAINER_CLASS_NAME));
|
|
2421
|
-
}
|
|
2422
|
-
/**
|
|
2423
|
-
* Checks if a given HTML element represents an empty paragraph containing only a line break element.
|
|
2424
|
-
*
|
|
2425
|
-
* @param {HTMLElement} node - An HTMLElement node that represents a paragraph element in the HTML document.
|
|
2426
|
-
* @returns {boolean} boolean result
|
|
2427
|
-
*/
|
|
2428
|
-
isEmptyParagraph(node) {
|
|
2429
|
-
return node && node.childNodes && node.childNodes.length === 0;
|
|
2430
|
-
}
|
|
2431
|
-
/**
|
|
2432
|
-
* Removes selected nodes within a range in a rich text editor content.
|
|
2433
|
-
* The method is only used for different nodes are selected
|
|
2434
|
-
*
|
|
2435
|
-
* @param {boolean} [mergeNode] Merge start node and end node or not, default value is false.
|
|
2436
|
-
* @returns {RTENode} The range start node, usually the start node is the first item of selectedNodes, if the selectedNodes is all removed, the start node will be a new text node.
|
|
2437
|
-
*/
|
|
2438
|
-
removeSelectionRange(mergeNode = false) {
|
|
2439
|
-
ChangeManager.notify(domNodeSubjectFactory.getSubject(this.richTextEditorRef, VegaInternalRichTextEditDeleteSelectedNodes), { host: this.richTextEditorRef, detail: mergeNode });
|
|
2440
|
-
const range = this.selectionController.getCurrentRange();
|
|
2441
|
-
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
2442
|
-
return range.startNode || selectedNodes[0];
|
|
2443
|
-
}
|
|
2444
|
-
/**
|
|
2445
|
-
* Creates a new paragraph with an empty text node and returns it.
|
|
2446
|
-
*
|
|
2447
|
-
* @returns {RTETextBlock} An empty paragraph with a unique identifier and a text node appended to it.
|
|
2448
|
-
*/
|
|
2449
|
-
createEmptyParagraph() {
|
|
2450
|
-
const paragraph = new RTETextBlock(generateUUID(), 'paragraph');
|
|
2451
|
-
const textNode = new RTETextNode(`${paragraph.id}1`, '', paragraph);
|
|
2452
|
-
paragraph.apply(new AppendChildNodesAction([textNode]));
|
|
2453
|
-
return paragraph;
|
|
2454
|
-
}
|
|
2455
|
-
/**
|
|
2456
|
-
* The function initializes the current state and selection controller in TypeScript.
|
|
2457
|
-
*
|
|
2458
|
-
* @param {VegaRTEContent} currentState - The current state of a Vega runtime environment content.
|
|
2459
|
-
* @param {SelectionController} selectionController - It is used to manage the selection of content within the VegaRTE editor.
|
|
2460
|
-
*/
|
|
2461
|
-
initCurrentStateAndSelection(currentState, selectionController) {
|
|
2462
|
-
this.currentState = currentState;
|
|
2463
|
-
this.selectionController = selectionController;
|
|
2464
|
-
}
|
|
2465
|
-
/**
|
|
2466
|
-
* Queries the rich text editor element from the input event target.
|
|
2467
|
-
*
|
|
2468
|
-
* @param {HTMLElement} richTextEditor - The current rich text editor component
|
|
2469
|
-
*/
|
|
2470
|
-
setCurrentRichTextEditor(richTextEditor) {
|
|
2471
|
-
this.richTextEditorRef = richTextEditor;
|
|
2472
|
-
}
|
|
2473
|
-
}
|
|
2474
|
-
|
|
2475
|
-
/**
|
|
2476
|
-
* Insert a new node before a existing node
|
|
2477
|
-
*
|
|
2478
|
-
* @example currentNode.parentBlock.apply(new InsertNodesBeforeAction(currentNode, newNode, ...))
|
|
1785
|
+
* Insert a new node before a existing node
|
|
1786
|
+
*
|
|
1787
|
+
* @example currentNode.parentBlock.apply(new InsertNodesBeforeAction(currentNode, newNode, ...))
|
|
2479
1788
|
*/
|
|
2480
1789
|
class InsertNodesBeforeAction extends ModifyContentAction {
|
|
2481
1790
|
constructor(referNode, ...nodesToBeInserted) {
|
|
@@ -2596,11 +1905,13 @@ class InsertParagraphHandler extends BaseHandler {
|
|
|
2596
1905
|
*/
|
|
2597
1906
|
handleEvent() {
|
|
2598
1907
|
const selectedBlocks = this.selectionController.getSelectedBlocks();
|
|
2599
|
-
if (selectedBlocks.length
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
1908
|
+
if (selectedBlocks.length) {
|
|
1909
|
+
if (selectedBlocks.length < 2) {
|
|
1910
|
+
this.breakSingleBlock();
|
|
1911
|
+
}
|
|
1912
|
+
else {
|
|
1913
|
+
this.breakMultipleBlocks();
|
|
1914
|
+
}
|
|
2604
1915
|
}
|
|
2605
1916
|
}
|
|
2606
1917
|
/**
|
|
@@ -2714,11 +2025,13 @@ class InsertLineBreakHandler extends BaseHandler {
|
|
|
2714
2025
|
if (this.isRootContainer(range.startContainer)) {
|
|
2715
2026
|
this.breakNewBlock();
|
|
2716
2027
|
}
|
|
2717
|
-
if (selectedBlocks.length
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2028
|
+
if (selectedBlocks.length) {
|
|
2029
|
+
if (selectedBlocks.length < 2) {
|
|
2030
|
+
this.breakSingleBlock();
|
|
2031
|
+
}
|
|
2032
|
+
else {
|
|
2033
|
+
this.breakMultipleBlocks();
|
|
2034
|
+
}
|
|
2722
2035
|
}
|
|
2723
2036
|
}
|
|
2724
2037
|
/**
|
|
@@ -3622,12 +2935,117 @@ class OlToRTEListBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
3622
2935
|
* @returns {boolean} - boolean.
|
|
3623
2936
|
*/
|
|
3624
2937
|
shouldProceedToElementChildren() {
|
|
3625
|
-
return true;
|
|
2938
|
+
return true;
|
|
2939
|
+
}
|
|
2940
|
+
}
|
|
2941
|
+
|
|
2942
|
+
/** Transform img in span or other inline element to image block DTO */
|
|
2943
|
+
class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
2944
|
+
/**
|
|
2945
|
+
* Can be handle.
|
|
2946
|
+
*
|
|
2947
|
+
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
2948
|
+
* @param {number} currentIndex - Current element index.
|
|
2949
|
+
* @returns {number} - can be handled element count.
|
|
2950
|
+
*/
|
|
2951
|
+
canHandle(elementsArray, currentIndex) {
|
|
2952
|
+
const element = elementsArray[currentIndex];
|
|
2953
|
+
return element.nodeType === Node.ELEMENT_NODE &&
|
|
2954
|
+
element.textContent === '' &&
|
|
2955
|
+
element.querySelector('img')
|
|
2956
|
+
? 1
|
|
2957
|
+
: 0;
|
|
2958
|
+
}
|
|
2959
|
+
/**
|
|
2960
|
+
* Parse to a image block.
|
|
2961
|
+
*
|
|
2962
|
+
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
2963
|
+
* @returns {Nullable<RTEContentBlock>} - Image block.
|
|
2964
|
+
*/
|
|
2965
|
+
handle(elementsArray) {
|
|
2966
|
+
const element = elementsArray[0].querySelector('img');
|
|
2967
|
+
return RTEImageBlock.from({
|
|
2968
|
+
id: generateUUID(),
|
|
2969
|
+
type: 'image',
|
|
2970
|
+
nodes: [
|
|
2971
|
+
{
|
|
2972
|
+
id: generateUUID(),
|
|
2973
|
+
type: 'image',
|
|
2974
|
+
url: element.src,
|
|
2975
|
+
annotations: {
|
|
2976
|
+
size: 'md',
|
|
2977
|
+
alt: element.alt,
|
|
2978
|
+
},
|
|
2979
|
+
},
|
|
2980
|
+
],
|
|
2981
|
+
annotations: this.generateBlockAnnotations(element),
|
|
2982
|
+
});
|
|
2983
|
+
}
|
|
2984
|
+
/* istanbul ignore next */
|
|
2985
|
+
/**
|
|
2986
|
+
* Append child blocks.
|
|
2987
|
+
*/
|
|
2988
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
2989
|
+
appendChildBlocks() { }
|
|
2990
|
+
/**
|
|
2991
|
+
* Should continue process to child elements.
|
|
2992
|
+
*
|
|
2993
|
+
* @returns {boolean} - boolean.
|
|
2994
|
+
*/
|
|
2995
|
+
shouldProceedToElementChildren() {
|
|
2996
|
+
return false;
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
|
|
3000
|
+
/** Transform child element of UL element which are not LI element to list item block DTO */
|
|
3001
|
+
class ULNotLiChildToRTEListItemBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
3002
|
+
/**
|
|
3003
|
+
* Can be handle.
|
|
3004
|
+
*
|
|
3005
|
+
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3006
|
+
* @param {number} currentIndex - Current element index.
|
|
3007
|
+
* @returns {number} - can be handled element count.
|
|
3008
|
+
*/
|
|
3009
|
+
canHandle(elementsArray, currentIndex) {
|
|
3010
|
+
const element = elementsArray[currentIndex];
|
|
3011
|
+
const parent = element.parentElement;
|
|
3012
|
+
return element.nodeName !== 'LI' && parent && ['UL', 'OL'].includes(parent.nodeName) ? 1 : 0;
|
|
3013
|
+
}
|
|
3014
|
+
/**
|
|
3015
|
+
* Parse to a list item block.
|
|
3016
|
+
*
|
|
3017
|
+
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3018
|
+
* @returns {Nullable<RTEContentBlock>} - List item block.
|
|
3019
|
+
*/
|
|
3020
|
+
handle(elementsArray) {
|
|
3021
|
+
const nodes = this.generateChildNodes(elementsArray);
|
|
3022
|
+
if (nodes.length === 0)
|
|
3023
|
+
return null;
|
|
3024
|
+
return RTEListItemBlock.from({
|
|
3025
|
+
id: generateUUID(),
|
|
3026
|
+
type: 'list-item',
|
|
3027
|
+
nodes: nodes,
|
|
3028
|
+
annotations: {},
|
|
3029
|
+
});
|
|
3030
|
+
}
|
|
3031
|
+
/* istanbul ignore next */
|
|
3032
|
+
/**
|
|
3033
|
+
* Append child blocks.
|
|
3034
|
+
*/
|
|
3035
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
3036
|
+
appendChildBlocks() { }
|
|
3037
|
+
/**
|
|
3038
|
+
* Should continue process to child elements.
|
|
3039
|
+
*
|
|
3040
|
+
* @returns {boolean} - boolean.
|
|
3041
|
+
*/
|
|
3042
|
+
shouldProceedToElementChildren() {
|
|
3043
|
+
return false;
|
|
3626
3044
|
}
|
|
3627
3045
|
}
|
|
3628
3046
|
|
|
3629
|
-
/** Transform
|
|
3630
|
-
class
|
|
3047
|
+
/** Transform other editor code element which has attribute data-language to RTE code block DTO */
|
|
3048
|
+
class JiraCodeToRTECodeBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
3631
3049
|
/**
|
|
3632
3050
|
* Can be handle.
|
|
3633
3051
|
*
|
|
@@ -3636,37 +3054,31 @@ class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
3636
3054
|
* @returns {number} - can be handled element count.
|
|
3637
3055
|
*/
|
|
3638
3056
|
canHandle(elementsArray, currentIndex) {
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
element.querySelector('img')
|
|
3057
|
+
return (elementsArray[currentIndex].tagName === 'PRE' ||
|
|
3058
|
+
elementsArray[currentIndex].tagName === 'CODE') &&
|
|
3059
|
+
elementsArray[currentIndex].hasAttribute('data-language')
|
|
3643
3060
|
? 1
|
|
3644
3061
|
: 0;
|
|
3645
3062
|
}
|
|
3646
3063
|
/**
|
|
3647
|
-
* Parse to a
|
|
3064
|
+
* Parse to a code block.
|
|
3648
3065
|
*
|
|
3649
3066
|
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3650
|
-
* @returns {Nullable<
|
|
3067
|
+
* @returns {Nullable<RTECodeBlock>} - Code block.
|
|
3651
3068
|
*/
|
|
3652
3069
|
handle(elementsArray) {
|
|
3653
|
-
const
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
},
|
|
3666
|
-
},
|
|
3667
|
-
],
|
|
3668
|
-
annotations: this.generateBlockAnnotations(element),
|
|
3669
|
-
});
|
|
3070
|
+
const codeRef = elementsArray[0];
|
|
3071
|
+
if (codeRef) {
|
|
3072
|
+
const content = codeRef.textContent;
|
|
3073
|
+
const language = codeRef.dataset
|
|
3074
|
+
.language;
|
|
3075
|
+
return RTECodeBlock.from({
|
|
3076
|
+
id: generateUUID(),
|
|
3077
|
+
type: 'code-block',
|
|
3078
|
+
content,
|
|
3079
|
+
language,
|
|
3080
|
+
});
|
|
3081
|
+
}
|
|
3670
3082
|
}
|
|
3671
3083
|
/* istanbul ignore next */
|
|
3672
3084
|
/**
|
|
@@ -3684,36 +3096,48 @@ class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
|
|
|
3684
3096
|
}
|
|
3685
3097
|
}
|
|
3686
3098
|
|
|
3687
|
-
/** Transform
|
|
3688
|
-
class
|
|
3099
|
+
/** Transform vega-code-block element to code block DTO */
|
|
3100
|
+
class VegaCodeBlockToRTECodeBlockStrategy extends JiraCodeToRTECodeBlockStrategy {
|
|
3689
3101
|
/**
|
|
3690
3102
|
* Can be handle.
|
|
3691
3103
|
*
|
|
3104
|
+
* TODO: Update the browser clipboard data to fix the issue with nested vega-code-block elements.
|
|
3105
|
+
* In safari the html snippet will be like: <vega-code-block><p><span>paragraph</span></p><vega-code-block></vega-code-block></vega-code-block>
|
|
3106
|
+
* The vega-code-block nested inside the vega-code-block, so we need to check the child element.
|
|
3107
|
+
*
|
|
3692
3108
|
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3693
3109
|
* @param {number} currentIndex - Current element index.
|
|
3694
3110
|
* @returns {number} - can be handled element count.
|
|
3695
3111
|
*/
|
|
3696
3112
|
canHandle(elementsArray, currentIndex) {
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3113
|
+
return (elementsArray[currentIndex].tagName === 'VEGA-CODE-BLOCK' &&
|
|
3114
|
+
!!elementsArray[currentIndex].querySelector('vega-code-block') === false) ||
|
|
3115
|
+
this.isCodeBlockContainer(elementsArray[currentIndex])
|
|
3116
|
+
? 1
|
|
3117
|
+
: 0;
|
|
3700
3118
|
}
|
|
3701
3119
|
/**
|
|
3702
|
-
* Parse to a
|
|
3120
|
+
* Parse to a code block.
|
|
3703
3121
|
*
|
|
3704
3122
|
* @param {HTMLElement[]} elementsArray - Current elements.
|
|
3705
|
-
* @returns {Nullable<
|
|
3123
|
+
* @returns {Nullable<RTECodeBlock>} - Code block.
|
|
3706
3124
|
*/
|
|
3707
3125
|
handle(elementsArray) {
|
|
3708
|
-
const
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3126
|
+
const codeBlockElement = this.isCodeBlockContainer(elementsArray[0])
|
|
3127
|
+
? elementsArray[0].querySelector('vega-code-block')
|
|
3128
|
+
: elementsArray[0];
|
|
3129
|
+
const code = codeBlockElement.querySelector('code');
|
|
3130
|
+
if (code) {
|
|
3131
|
+
return super.handle([code]); // Call the parent method to handle the code element
|
|
3132
|
+
}
|
|
3133
|
+
else if (codeBlockElement.hasAttribute('data-content')) {
|
|
3134
|
+
// The code element in shadow dom could be empty in firefox.
|
|
3135
|
+
// eslint-disable-next-line no-restricted-globals
|
|
3136
|
+
const code = document.createElement('code');
|
|
3137
|
+
code.textContent = codeBlockElement.dataset.content;
|
|
3138
|
+
code.dataset.language = codeBlockElement.dataset.language;
|
|
3139
|
+
return super.handle([code]); // Call the parent method to handle the code element
|
|
3140
|
+
}
|
|
3717
3141
|
}
|
|
3718
3142
|
/* istanbul ignore next */
|
|
3719
3143
|
/**
|
|
@@ -3729,6 +3153,17 @@ class ULNotLiChildToRTEListItemBlockStrategy extends BlockToRTEBlockStrategyAbst
|
|
|
3729
3153
|
shouldProceedToElementChildren() {
|
|
3730
3154
|
return false;
|
|
3731
3155
|
}
|
|
3156
|
+
/**
|
|
3157
|
+
* Checks if the given element is a code block container.
|
|
3158
|
+
*
|
|
3159
|
+
* @param {HTMLElement} element - The element to check.
|
|
3160
|
+
* @returns {boolean} - Boolean result.
|
|
3161
|
+
*/
|
|
3162
|
+
isCodeBlockContainer(element) {
|
|
3163
|
+
return (element.tagName === 'PRE' &&
|
|
3164
|
+
element.classList.contains('code-block-container') &&
|
|
3165
|
+
element.querySelectorAll('vega-code-block').length === 1);
|
|
3166
|
+
}
|
|
3732
3167
|
}
|
|
3733
3168
|
|
|
3734
3169
|
/** Element to DTO processor */
|
|
@@ -3739,6 +3174,8 @@ class ElementToDtoStrategyProcessor {
|
|
|
3739
3174
|
new OlToRTEListBlockStrategy(),
|
|
3740
3175
|
new ULNotLiChildToRTEListItemBlockStrategy(),
|
|
3741
3176
|
new LiToRTEListItemBlockStrategy(),
|
|
3177
|
+
new VegaCodeBlockToRTECodeBlockStrategy(),
|
|
3178
|
+
new JiraCodeToRTECodeBlockStrategy(),
|
|
3742
3179
|
new InlineBlockToRTETextBlockStrategy(),
|
|
3743
3180
|
new ImgToRTEImageBlockStrategy(),
|
|
3744
3181
|
new VegaImageToRTEImageBlockStrategy(),
|
|
@@ -3853,8 +3290,10 @@ class InsertPasteHandler extends BaseHandler {
|
|
|
3853
3290
|
const cursorNode = this.removeSelectionRange();
|
|
3854
3291
|
/* istanbul ignore next */
|
|
3855
3292
|
const currentBlock = cursorNode === null || cursorNode === void 0 ? void 0 : cursorNode.parentBlock;
|
|
3856
|
-
|
|
3857
|
-
|
|
3293
|
+
if (currentBlock) {
|
|
3294
|
+
currentBlock.parent.apply(new InsertBlocksBeforeAction(currentBlock, ...blocks));
|
|
3295
|
+
this.switchCaretPositionToNextElement(currentBlock);
|
|
3296
|
+
}
|
|
3858
3297
|
}
|
|
3859
3298
|
/**
|
|
3860
3299
|
* Format and parse elements from user paste.
|
|
@@ -3863,7 +3302,12 @@ class InsertPasteHandler extends BaseHandler {
|
|
|
3863
3302
|
* @returns {RTEContentBlock[]} - RTEContentBlock.
|
|
3864
3303
|
*/
|
|
3865
3304
|
parsePastedElements(event) {
|
|
3866
|
-
|
|
3305
|
+
let pastedHTML = event.dataTransfer.getData('text/html');
|
|
3306
|
+
if (!pastedHTML) {
|
|
3307
|
+
const pastedText = event.dataTransfer.getData('text/plain');
|
|
3308
|
+
pastedHTML = this.parsePlainText(pastedText);
|
|
3309
|
+
}
|
|
3310
|
+
// eslint-disable-next-line no-restricted-globals
|
|
3867
3311
|
const tempContainer = document.createElement('div');
|
|
3868
3312
|
tempContainer.innerHTML = pastedHTML;
|
|
3869
3313
|
return this.elementToDTOProcessor
|
|
@@ -3882,9 +3326,23 @@ class InsertPasteHandler extends BaseHandler {
|
|
|
3882
3326
|
this.selectionController.enqueueSelectionRangeFutureState(newBlock['nodes'][0], 0);
|
|
3883
3327
|
}
|
|
3884
3328
|
}
|
|
3329
|
+
/**
|
|
3330
|
+
* Parses the content of a plain text and formats it into HTML.
|
|
3331
|
+
*
|
|
3332
|
+
* @param {string} content - The content of plain text.
|
|
3333
|
+
* @returns {string} - The formatted HTML string.
|
|
3334
|
+
*/
|
|
3335
|
+
parsePlainText(content) {
|
|
3336
|
+
const lines = content.split('\n');
|
|
3337
|
+
return lines
|
|
3338
|
+
.map((line) => {
|
|
3339
|
+
return `<span>${line}</span>`;
|
|
3340
|
+
})
|
|
3341
|
+
.join('<span>\n</span>');
|
|
3342
|
+
}
|
|
3885
3343
|
}
|
|
3886
3344
|
|
|
3887
|
-
var __decorate$
|
|
3345
|
+
var __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
3888
3346
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3889
3347
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
3890
3348
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -3909,7 +3367,8 @@ class UserInputController extends VegaSlimmer {
|
|
|
3909
3367
|
e.preventDefault();
|
|
3910
3368
|
this.initValueIfEmpty();
|
|
3911
3369
|
// The insertCompositionText type input event can not be prevented, so we process the current action by insertCompositionTextController.
|
|
3912
|
-
|
|
3370
|
+
// If the focus node is a non-editable element, we do not process the input event.
|
|
3371
|
+
if (inputType === 'insertCompositionText' || this.isFocusNodeNonEditable()) {
|
|
3913
3372
|
return;
|
|
3914
3373
|
}
|
|
3915
3374
|
this.insertCompositionTextController.removeObserver();
|
|
@@ -3937,7 +3396,7 @@ class UserInputController extends VegaSlimmer {
|
|
|
3937
3396
|
break;
|
|
3938
3397
|
}
|
|
3939
3398
|
if (updateFlag) {
|
|
3940
|
-
this.
|
|
3399
|
+
void this.valueController.flushChanges(this.value);
|
|
3941
3400
|
}
|
|
3942
3401
|
};
|
|
3943
3402
|
}
|
|
@@ -3972,12 +3431,6 @@ class UserInputController extends VegaSlimmer {
|
|
|
3972
3431
|
}
|
|
3973
3432
|
return this.editableElementRef;
|
|
3974
3433
|
}
|
|
3975
|
-
/**
|
|
3976
|
-
* Notifies a change manager with the host and value details and logs the current value.
|
|
3977
|
-
*/
|
|
3978
|
-
notifyComponentFlushValue() {
|
|
3979
|
-
void this.valueController.flushChanges(this.value);
|
|
3980
|
-
}
|
|
3981
3434
|
/**
|
|
3982
3435
|
* Prevents the default behavior of a drag event.
|
|
3983
3436
|
*
|
|
@@ -3998,29 +3451,46 @@ class UserInputController extends VegaSlimmer {
|
|
|
3998
3451
|
void this.valueController.flushChanges(VegaRTEContent.fromJSON(defaultParagraph));
|
|
3999
3452
|
}
|
|
4000
3453
|
}
|
|
3454
|
+
/**
|
|
3455
|
+
* The code block placeholder element is non-editable, so we need to check if the focus node is a code block placeholder element.
|
|
3456
|
+
*
|
|
3457
|
+
* @returns {boolean} - Returns true if the focus node is a code block placeholder element, otherwise false.
|
|
3458
|
+
*/
|
|
3459
|
+
isFocusNodeNonEditable() {
|
|
3460
|
+
const { startContainer, endContainer } = this.selectionController.getCurrentRange();
|
|
3461
|
+
const selectedNodes = this.selectionController.getSelectedNodes();
|
|
3462
|
+
if (startContainer && startContainer === endContainer && selectedNodes.length === 0) {
|
|
3463
|
+
const focusElement = startContainer.nodeType === Node.ELEMENT_NODE
|
|
3464
|
+
? startContainer
|
|
3465
|
+
: startContainer.parentElement;
|
|
3466
|
+
return (focusElement &&
|
|
3467
|
+
focusElement.classList.contains(RTECodeBlock.CODE_BLOCK_PLACEHOLDER_CLASS_NAME));
|
|
3468
|
+
}
|
|
3469
|
+
return false;
|
|
3470
|
+
}
|
|
4001
3471
|
}
|
|
4002
|
-
__decorate$
|
|
3472
|
+
__decorate$e([
|
|
4003
3473
|
MapToComponentField()
|
|
4004
3474
|
], UserInputController.prototype, "host", void 0);
|
|
4005
|
-
__decorate$
|
|
3475
|
+
__decorate$e([
|
|
4006
3476
|
MapToComponentField()
|
|
4007
3477
|
], UserInputController.prototype, "value", void 0);
|
|
4008
|
-
__decorate$
|
|
3478
|
+
__decorate$e([
|
|
4009
3479
|
MapToComponentField()
|
|
4010
3480
|
], UserInputController.prototype, "valueController", void 0);
|
|
4011
|
-
__decorate$
|
|
3481
|
+
__decorate$e([
|
|
4012
3482
|
MapToComponentField()
|
|
4013
3483
|
], UserInputController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
4014
|
-
__decorate$
|
|
3484
|
+
__decorate$e([
|
|
4015
3485
|
MapToComponentField()
|
|
4016
3486
|
], UserInputController.prototype, "selectionController", void 0);
|
|
4017
|
-
__decorate$
|
|
3487
|
+
__decorate$e([
|
|
4018
3488
|
MapToComponentField()
|
|
4019
3489
|
], UserInputController.prototype, "insertCompositionTextController", void 0);
|
|
4020
|
-
__decorate$
|
|
3490
|
+
__decorate$e([
|
|
4021
3491
|
MapToComponentMethod('componentDidLoad')
|
|
4022
3492
|
], UserInputController.prototype, "addActionListener", null);
|
|
4023
|
-
__decorate$
|
|
3493
|
+
__decorate$e([
|
|
4024
3494
|
MapToComponentMethod('disconnectedCallback')
|
|
4025
3495
|
], UserInputController.prototype, "removeActionListener", null);
|
|
4026
3496
|
|
|
@@ -4040,7 +3510,7 @@ class InsertImageToBlockAction extends ModifyContentAction {
|
|
|
4040
3510
|
}
|
|
4041
3511
|
}
|
|
4042
3512
|
|
|
4043
|
-
var __decorate$
|
|
3513
|
+
var __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4044
3514
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4045
3515
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4046
3516
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4129,26 +3599,26 @@ class InsertImageController extends VegaSlimmer {
|
|
|
4129
3599
|
}
|
|
4130
3600
|
}
|
|
4131
3601
|
}
|
|
4132
|
-
__decorate$
|
|
3602
|
+
__decorate$d([
|
|
4133
3603
|
MapToComponentField()
|
|
4134
3604
|
], InsertImageController.prototype, "selectionController", void 0);
|
|
4135
|
-
__decorate$
|
|
3605
|
+
__decorate$d([
|
|
4136
3606
|
MapToComponentField()
|
|
4137
3607
|
], InsertImageController.prototype, "value", void 0);
|
|
4138
|
-
__decorate$
|
|
3608
|
+
__decorate$d([
|
|
4139
3609
|
MapToComponentField()
|
|
4140
3610
|
], InsertImageController.prototype, "valueController", void 0);
|
|
4141
|
-
__decorate$
|
|
3611
|
+
__decorate$d([
|
|
4142
3612
|
MapToComponentField()
|
|
4143
3613
|
], InsertImageController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
4144
|
-
__decorate$
|
|
3614
|
+
__decorate$d([
|
|
4145
3615
|
MapToComponentMethod('componentDidLoad')
|
|
4146
3616
|
], InsertImageController.prototype, "registerObserver", null);
|
|
4147
|
-
__decorate$
|
|
3617
|
+
__decorate$d([
|
|
4148
3618
|
MapToComponentMethod('disconnectedCallback')
|
|
4149
3619
|
], InsertImageController.prototype, "unRegisterObserver", null);
|
|
4150
3620
|
|
|
4151
|
-
var __decorate$
|
|
3621
|
+
var __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4152
3622
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4153
3623
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4154
3624
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4204,20 +3674,20 @@ class FocusController extends VegaSlimmer {
|
|
|
4204
3674
|
this.selectionController.setSelectionRange(range);
|
|
4205
3675
|
}
|
|
4206
3676
|
}
|
|
4207
|
-
__decorate$
|
|
3677
|
+
__decorate$c([
|
|
4208
3678
|
MapToComponentField()
|
|
4209
3679
|
], FocusController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
4210
|
-
__decorate$
|
|
3680
|
+
__decorate$c([
|
|
4211
3681
|
MapToComponentField()
|
|
4212
3682
|
], FocusController.prototype, "selectionController", void 0);
|
|
4213
|
-
__decorate$
|
|
3683
|
+
__decorate$c([
|
|
4214
3684
|
MapToComponentField()
|
|
4215
3685
|
], FocusController.prototype, "valueController", void 0);
|
|
4216
|
-
__decorate$
|
|
3686
|
+
__decorate$c([
|
|
4217
3687
|
MapToComponentField()
|
|
4218
3688
|
], FocusController.prototype, "value", void 0);
|
|
4219
3689
|
|
|
4220
|
-
var __decorate$
|
|
3690
|
+
var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4221
3691
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4222
3692
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4223
3693
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4257,14 +3727,14 @@ class TextNodeColorController extends VegaSlimmer {
|
|
|
4257
3727
|
return true;
|
|
4258
3728
|
}
|
|
4259
3729
|
}
|
|
4260
|
-
__decorate$
|
|
3730
|
+
__decorate$b([
|
|
4261
3731
|
MapToComponentMethod('connectedCallback')
|
|
4262
3732
|
], TextNodeColorController.prototype, "connectedCallback", null);
|
|
4263
|
-
__decorate$
|
|
3733
|
+
__decorate$b([
|
|
4264
3734
|
MapToComponentMethod('disconnectedCallback')
|
|
4265
3735
|
], TextNodeColorController.prototype, "disconnectResizeObserver", null);
|
|
4266
3736
|
|
|
4267
|
-
var __decorate$
|
|
3737
|
+
var __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4268
3738
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4269
3739
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4270
3740
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4472,35 +3942,35 @@ class InsertCompositionTextController extends VegaSlimmer {
|
|
|
4472
3942
|
this.editableElementRef.dispatchEvent(inputEvent);
|
|
4473
3943
|
}
|
|
4474
3944
|
}
|
|
4475
|
-
__decorate$
|
|
3945
|
+
__decorate$a([
|
|
4476
3946
|
MapToComponentField()
|
|
4477
3947
|
], InsertCompositionTextController.prototype, "selectionController", void 0);
|
|
4478
|
-
__decorate$
|
|
3948
|
+
__decorate$a([
|
|
4479
3949
|
MapToComponentField()
|
|
4480
3950
|
], InsertCompositionTextController.prototype, "host", void 0);
|
|
4481
|
-
__decorate$
|
|
3951
|
+
__decorate$a([
|
|
4482
3952
|
MapToComponentField()
|
|
4483
3953
|
], InsertCompositionTextController.prototype, "value", void 0);
|
|
4484
|
-
__decorate$
|
|
3954
|
+
__decorate$a([
|
|
4485
3955
|
MapToComponentField()
|
|
4486
3956
|
], InsertCompositionTextController.prototype, "valueController", void 0);
|
|
4487
|
-
__decorate$
|
|
3957
|
+
__decorate$a([
|
|
4488
3958
|
MapToComponentField()
|
|
4489
3959
|
], InsertCompositionTextController.prototype, "userInputController", void 0);
|
|
4490
|
-
__decorate$
|
|
3960
|
+
__decorate$a([
|
|
4491
3961
|
MapToComponentField()
|
|
4492
3962
|
], InsertCompositionTextController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
4493
|
-
__decorate$
|
|
3963
|
+
__decorate$a([
|
|
4494
3964
|
MapToComponentMethod('componentDidLoad')
|
|
4495
3965
|
], InsertCompositionTextController.prototype, "addCompositionTextEventListener", null);
|
|
4496
|
-
__decorate$
|
|
3966
|
+
__decorate$a([
|
|
4497
3967
|
MapToComponentMethod('disconnectedCallback')
|
|
4498
3968
|
], InsertCompositionTextController.prototype, "removeCompositionTextEventListener", null);
|
|
4499
|
-
__decorate$
|
|
3969
|
+
__decorate$a([
|
|
4500
3970
|
MapToComponentMethod('componentDidRender')
|
|
4501
3971
|
], InsertCompositionTextController.prototype, "reConnectObserver", null);
|
|
4502
3972
|
|
|
4503
|
-
var __decorate$
|
|
3973
|
+
var __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4504
3974
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4505
3975
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4506
3976
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4558,7 +4028,10 @@ class DeleteSelectedNodesController extends VegaSlimmer {
|
|
|
4558
4028
|
if (selectedNodes.length > 1) {
|
|
4559
4029
|
// Remove all selected nodes except start node and end node(the end image node will be removed), the start node need to get the index of the block
|
|
4560
4030
|
const shouldRemovedItems = selectedNodes.filter((item) => {
|
|
4561
|
-
if (item
|
|
4031
|
+
if (item instanceof RTECodeBlockNode) {
|
|
4032
|
+
return item !== startNode;
|
|
4033
|
+
}
|
|
4034
|
+
else if (item.type !== 'IMAGE') {
|
|
4562
4035
|
return item !== startNode && item !== endNode;
|
|
4563
4036
|
}
|
|
4564
4037
|
else {
|
|
@@ -4572,7 +4045,8 @@ class DeleteSelectedNodesController extends VegaSlimmer {
|
|
|
4572
4045
|
this.removeRangeStartAndEndSelectedText();
|
|
4573
4046
|
/**
|
|
4574
4047
|
* if the range start node is image and the item is selected, so we need remove the image item, the image block will be removed if the item is the only item.
|
|
4575
|
-
* but before remove the image block, we need insert a paragraph to make sure the start block and start node could be get correct before insert text or break paragraph action
|
|
4048
|
+
* but before remove the image block, we need insert a paragraph to make sure the start block and start node could be get correct before insert text or break paragraph action.
|
|
4049
|
+
* the code block node should do the same logic.
|
|
4576
4050
|
*/
|
|
4577
4051
|
if (startNode instanceof RTEImageNode &&
|
|
4578
4052
|
startOffset !== 1 &&
|
|
@@ -4590,6 +4064,12 @@ class DeleteSelectedNodesController extends VegaSlimmer {
|
|
|
4590
4064
|
return startNode.parentBlock.nodes[0];
|
|
4591
4065
|
}
|
|
4592
4066
|
}
|
|
4067
|
+
else if (startNode instanceof RTECodeBlockNode) {
|
|
4068
|
+
const paragraph = this.createEmptyParagraph();
|
|
4069
|
+
startNode.parentBlock.parent.apply(new InsertBlocksBeforeAction(startNode.parentBlock, paragraph));
|
|
4070
|
+
startNode.parentBlock.apply(new RemoveChildAction(startNode));
|
|
4071
|
+
return paragraph.nodes[0];
|
|
4072
|
+
}
|
|
4593
4073
|
return startNode;
|
|
4594
4074
|
}
|
|
4595
4075
|
/**
|
|
@@ -4639,7 +4119,9 @@ class DeleteSelectedNodesController extends VegaSlimmer {
|
|
|
4639
4119
|
endRTENode.parentBlock.apply(new RemoveChildAction(endRTENode.parentBlock.nodes[0]));
|
|
4640
4120
|
}
|
|
4641
4121
|
}
|
|
4642
|
-
if (startRTENode
|
|
4122
|
+
if (startRTENode instanceof RTETextNode &&
|
|
4123
|
+
endRTENode instanceof RTETextNode &&
|
|
4124
|
+
startRTENode.parentBlock !== endRTENode.parentBlock) {
|
|
4643
4125
|
startRTENode.parentBlock.apply(new AppendChildNodesAction(endBlock.nodes));
|
|
4644
4126
|
endBlock.nodes = [];
|
|
4645
4127
|
}
|
|
@@ -4660,26 +4142,28 @@ class DeleteSelectedNodesController extends VegaSlimmer {
|
|
|
4660
4142
|
shouldMergeTextNode(nodeA, nodeB) {
|
|
4661
4143
|
const { annotations: annotationsA } = nodeA.toJSON();
|
|
4662
4144
|
const { annotations: annotationsB } = nodeB.toJSON();
|
|
4663
|
-
return
|
|
4145
|
+
return (nodeA instanceof RTETextNode &&
|
|
4146
|
+
nodeB instanceof RTETextNode &&
|
|
4147
|
+
JSON.stringify(annotationsA) === JSON.stringify(annotationsB));
|
|
4664
4148
|
}
|
|
4665
4149
|
}
|
|
4666
|
-
__decorate$
|
|
4150
|
+
__decorate$9([
|
|
4667
4151
|
MapToComponentField()
|
|
4668
4152
|
], DeleteSelectedNodesController.prototype, "host", void 0);
|
|
4669
|
-
__decorate$
|
|
4153
|
+
__decorate$9([
|
|
4670
4154
|
MapToComponentField()
|
|
4671
4155
|
], DeleteSelectedNodesController.prototype, "selectionController", void 0);
|
|
4672
|
-
__decorate$
|
|
4156
|
+
__decorate$9([
|
|
4673
4157
|
MapToComponentField()
|
|
4674
4158
|
], DeleteSelectedNodesController.prototype, "value", void 0);
|
|
4675
|
-
__decorate$
|
|
4159
|
+
__decorate$9([
|
|
4676
4160
|
MapToComponentMethod('connectedCallback')
|
|
4677
4161
|
], DeleteSelectedNodesController.prototype, "addDeleteObserver", null);
|
|
4678
|
-
__decorate$
|
|
4162
|
+
__decorate$9([
|
|
4679
4163
|
MapToComponentMethod('disconnectedCallback')
|
|
4680
4164
|
], DeleteSelectedNodesController.prototype, "removeDeleteObserver", null);
|
|
4681
4165
|
|
|
4682
|
-
var __decorate$
|
|
4166
|
+
var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4683
4167
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4684
4168
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4685
4169
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -4793,25 +4277,166 @@ class HistoryController extends KeyboardManagerSlimmer {
|
|
|
4793
4277
|
];
|
|
4794
4278
|
}
|
|
4795
4279
|
}
|
|
4796
|
-
__decorate$
|
|
4280
|
+
__decorate$8([
|
|
4797
4281
|
MapToComponentField()
|
|
4798
4282
|
], HistoryController.prototype, "host", void 0);
|
|
4799
|
-
__decorate$
|
|
4283
|
+
__decorate$8([
|
|
4800
4284
|
MapToComponentField()
|
|
4801
4285
|
], HistoryController.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
4802
|
-
__decorate$
|
|
4286
|
+
__decorate$8([
|
|
4803
4287
|
MapToComponentField()
|
|
4804
4288
|
], HistoryController.prototype, "valueController", void 0);
|
|
4805
|
-
__decorate$
|
|
4289
|
+
__decorate$8([
|
|
4806
4290
|
MapToComponentField()
|
|
4807
4291
|
], HistoryController.prototype, "value", void 0);
|
|
4808
|
-
__decorate$
|
|
4292
|
+
__decorate$8([
|
|
4809
4293
|
MapToComponentField()
|
|
4810
4294
|
], HistoryController.prototype, "selectionController", void 0);
|
|
4811
|
-
__decorate$
|
|
4295
|
+
__decorate$8([
|
|
4812
4296
|
MapToComponentMethod('componentDidLoad')
|
|
4813
4297
|
], HistoryController.prototype, "registerInitState", null);
|
|
4814
4298
|
|
|
4299
|
+
const rectangleCode = {
|
|
4300
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill='currentColor' d="M320.1 175L384.1 239C394.3 248.4 394.3 263.6 384.1 272.1L320.1 336.1C311.6 346.3 296.4 346.3 287 336.1C277.7 327.6 277.7 312.4 287 303L334.1 256L287 208.1C277.7 199.6 277.7 184.4 287 175C296.4 165.7 311.6 165.7 320.1 175V175zM177.9 256L224.1 303C234.3 312.4 234.3 327.6 224.1 336.1C215.6 346.3 200.4 346.3 191 336.1L127 272.1C117.7 263.6 117.7 248.4 127 239L191 175C200.4 165.7 215.6 165.7 224.1 175C234.3 184.4 234.3 199.6 224.1 208.1L177.9 256zM448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM448 80H64C55.16 80 48 87.16 48 96V416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V96C464 87.16 456.8 80 448 80z"/></svg>`,
|
|
4301
|
+
};
|
|
4302
|
+
|
|
4303
|
+
/**
|
|
4304
|
+
* Transform the selected blocks to a code block.
|
|
4305
|
+
*
|
|
4306
|
+
* @example firstBlock.parent.apply(new TransformToCodeBlockAction(selectedBlocks))
|
|
4307
|
+
*/
|
|
4308
|
+
class TransformToCodeBlockAction extends ModifyContentAction {
|
|
4309
|
+
constructor(selectedBlocks) {
|
|
4310
|
+
super();
|
|
4311
|
+
this.type = ModifyContentActionType.TRANSFORM_TO_CODE_BLOCK;
|
|
4312
|
+
this.selectedBlocks = selectedBlocks;
|
|
4313
|
+
}
|
|
4314
|
+
}
|
|
4315
|
+
|
|
4316
|
+
var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
4317
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4318
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4319
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
4320
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
4321
|
+
};
|
|
4322
|
+
/**
|
|
4323
|
+
* The code block toolbar button slimmer.
|
|
4324
|
+
*/
|
|
4325
|
+
class CodeBlockToolbarButtonSlimmer extends ToolbarButtonSlimmer {
|
|
4326
|
+
constructor() {
|
|
4327
|
+
super({
|
|
4328
|
+
icon: 'rectangle-code',
|
|
4329
|
+
tooltip: { text: 'Code Block' },
|
|
4330
|
+
});
|
|
4331
|
+
}
|
|
4332
|
+
/**
|
|
4333
|
+
* The selected blocks should convert to a code block.
|
|
4334
|
+
*/
|
|
4335
|
+
onClick() {
|
|
4336
|
+
const selected = this.isSelected();
|
|
4337
|
+
if (!selected) {
|
|
4338
|
+
const selectedBlocks = this.selectionController.getSelectedBlocks();
|
|
4339
|
+
const parentBlock = selectedBlocks[0].parent;
|
|
4340
|
+
const transformToCodeBlockAction = new TransformToCodeBlockAction(selectedBlocks);
|
|
4341
|
+
parentBlock.apply(transformToCodeBlockAction);
|
|
4342
|
+
void this.valueController.flushChanges(this.value);
|
|
4343
|
+
this.selectionController.enqueueSelectionRangeFutureState(transformToCodeBlockAction.newCodeBlock.nodes[0], 0);
|
|
4344
|
+
}
|
|
4345
|
+
}
|
|
4346
|
+
/**
|
|
4347
|
+
* The button will be selected if the selected blocks all code block.
|
|
4348
|
+
*
|
|
4349
|
+
* @returns {boolean} - The code block should selected or not.
|
|
4350
|
+
*/
|
|
4351
|
+
isSelected() {
|
|
4352
|
+
const selectBlocks = this.selectionController.getSelectedBlocks();
|
|
4353
|
+
if (selectBlocks.length && selectBlocks.every((block) => block.type === 'code-block')) {
|
|
4354
|
+
return true;
|
|
4355
|
+
}
|
|
4356
|
+
return false;
|
|
4357
|
+
}
|
|
4358
|
+
isDisabled() {
|
|
4359
|
+
const selectBlocks = this.selectionController.getSelectedBlocks();
|
|
4360
|
+
return (super.isDisabled() ||
|
|
4361
|
+
selectBlocks.some((block) => block.type === 'image' || block.type === 'list-item'));
|
|
4362
|
+
}
|
|
4363
|
+
}
|
|
4364
|
+
(() => {
|
|
4365
|
+
VegaInternalIconManager.register({ 'rectangle-code': rectangleCode });
|
|
4366
|
+
})();
|
|
4367
|
+
__decorate$7([
|
|
4368
|
+
MapToComponentField()
|
|
4369
|
+
], CodeBlockToolbarButtonSlimmer.prototype, "selectionController", void 0);
|
|
4370
|
+
__decorate$7([
|
|
4371
|
+
MapToComponentField()
|
|
4372
|
+
], CodeBlockToolbarButtonSlimmer.prototype, "valueController", void 0);
|
|
4373
|
+
__decorate$7([
|
|
4374
|
+
MapToComponentField()
|
|
4375
|
+
], CodeBlockToolbarButtonSlimmer.prototype, "value", void 0);
|
|
4376
|
+
|
|
4377
|
+
/**
|
|
4378
|
+
* The rich text internal code block selection controller.
|
|
4379
|
+
*/
|
|
4380
|
+
class InternalCodeBlockSelectionController extends AutoRunWhenReRenderTaskQueueSlimmer {
|
|
4381
|
+
constructor() {
|
|
4382
|
+
super(1);
|
|
4383
|
+
this.focusNodeOffset = 0;
|
|
4384
|
+
/**
|
|
4385
|
+
* The method invoke after the component re-render.
|
|
4386
|
+
*/
|
|
4387
|
+
this.doTask = async () => {
|
|
4388
|
+
await this.focusTheCodeBlock(this.shouldFocusNode);
|
|
4389
|
+
};
|
|
4390
|
+
}
|
|
4391
|
+
/**
|
|
4392
|
+
* Update the internal code block selection.
|
|
4393
|
+
*
|
|
4394
|
+
* @param {RTECodeBlockNode} startNode - The internal code block node DTO.
|
|
4395
|
+
* @param {number} startOffset - The content offset.
|
|
4396
|
+
* @param {boolean} immediatelyRun - Whether to invoke the method immediately.
|
|
4397
|
+
*/
|
|
4398
|
+
enqueueSelectionRangeFutureState(startNode, startOffset, immediatelyRun) {
|
|
4399
|
+
this.shouldFocusNode = startNode;
|
|
4400
|
+
this.focusNodeOffset = startOffset;
|
|
4401
|
+
super.enqueueTheTaskIntoQueue(immediatelyRun);
|
|
4402
|
+
}
|
|
4403
|
+
/**
|
|
4404
|
+
* Check the code block is actually selected or not. Because the Code block is a shadow dom, so can't detect the content selected state.
|
|
4405
|
+
* We add two placeholder spans at the begin and end position, we could check the placeholder spans selected state to make sure the code block is selected or not.
|
|
4406
|
+
*
|
|
4407
|
+
*
|
|
4408
|
+
* @example
|
|
4409
|
+
* <div>
|
|
4410
|
+
* <span></span>
|
|
4411
|
+
* <vega-code-block></vega-code-block>
|
|
4412
|
+
* <span><span>
|
|
4413
|
+
* </div>
|
|
4414
|
+
* @param {RTECodeBlock} codeBlock - The code block DTO.
|
|
4415
|
+
* @param {Range} range - The range instance.
|
|
4416
|
+
* @returns {boolean} - The boolean result.
|
|
4417
|
+
*/
|
|
4418
|
+
isCodeBlockSelected(codeBlock, range) {
|
|
4419
|
+
const codeBlockNode = codeBlock.nodes[0];
|
|
4420
|
+
const entityDom = stateEntityRenderingRegistry.getDOMByEntity(codeBlockNode);
|
|
4421
|
+
return (codeBlock.isSelected() ||
|
|
4422
|
+
(entityDom &&
|
|
4423
|
+
range.intersectsNode(entityDom.nextSibling) &&
|
|
4424
|
+
range.intersectsNode(entityDom.previousSibling)));
|
|
4425
|
+
}
|
|
4426
|
+
/**
|
|
4427
|
+
* Focus the code block component.
|
|
4428
|
+
*
|
|
4429
|
+
* @param {RTECodeBlockNode} node - The code block node DTO.
|
|
4430
|
+
*/
|
|
4431
|
+
async focusTheCodeBlock(node) {
|
|
4432
|
+
await Promise.resolve();
|
|
4433
|
+
const entityDom = stateEntityRenderingRegistry.getDOMByEntity(node);
|
|
4434
|
+
if (entityDom) {
|
|
4435
|
+
void entityDom.doFocus();
|
|
4436
|
+
}
|
|
4437
|
+
}
|
|
4438
|
+
}
|
|
4439
|
+
|
|
4815
4440
|
const vegaRichTextEditorCss = ":host{display:block}:host vega-field-label{margin-bottom:8px}:host vega-text{margin-bottom:16px;font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-secondary, 107, 116, 125, 1))}@media screen and (min-width: 768px) and (max-width: 1023px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}:host .rich-text-editor-container{display:flex;box-sizing:content-box;position:relative;box-sizing:content-box;background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));border:1px solid rgba(var(--v-border-input-field, 171, 198, 216, 1));border-radius:8px;font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px;color:rgba(var(--v-text-primary, 32, 54, 69, 1));margin-top:12px;overflow:auto;resize:vertical;padding-top:12px;padding-right:16px;padding-bottom:32px;padding-left:16px}@media screen and (min-width: 768px) and (max-width: 1023px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}:host .rich-text-editor-container:hover{border:1px solid rgba(var(--v-border-input-field-hover, 115, 160, 190, 1))}:host .rich-text-editor-container:focus-within{border:1px solid rgba(var(--v-border-input-field-focus, 19, 98, 226, 1));outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:3px;border:1px solid rgba(var(--v-border-color-input-field-focus, 19, 98, 226, 1))}:host .rich-text-editor-container.disabled{background-color:rgba(var(--v-bg-secondary, 245, 247, 247, 1));border:1px solid rgba(var(--v-border-input-field-disabled, 222, 225, 227, 1));cursor:not-allowed}:host .rich-text-editor-container.disabled:hover,:host .rich-text-editor-container.disabled:focus-within{border:1px solid rgba(var(--v-border-input-field-disabled, 222, 225, 227, 1))}:host .rich-text-editor-container.disabled:focus-within{outline:none}:host .rich-text-editor-container.disabled vega-rich-text-content{pointer-events:none;opacity:0.35}:host .rich-text-editor-container.error{border:1px solid rgba(var(--v-border-input-field-danger, 230, 50, 87, 1))}:host .rich-text-editor-container.error:hover{border:1px solid rgba(var(--v-border-input-field-danger-hover, 255, 87, 114, 1))}:host .rich-text-editor-container.error:focus-within{outline:2px solid rgba(var(--v-border-color-danger, 230, 50, 87, 1));outline-offset:3px;border:1px solid rgba(var(--v-border-color-input-field-danger-focus, 233, 71, 104, 1))}:host .rich-text-editor-container .text-editor-counter{position:absolute;bottom:8px;right:8px;display:flex;padding-left:4px;padding-right:4px;padding-top:2px;padding-bottom:2px;border-radius:4px;font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-inverted-primary, 252, 252, 252, 1));background-color:rgba(var(--v-bg-textarea-count, 4, 4, 28, 0.6))}@media screen and (min-width: 768px) and (max-width: 1023px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}:host .rich-text-editor-container .text-editor-counter.counter-exceed-max-length{background-color:rgba(var(--v-bg-textarea-counter-exceed-max-length, 214, 46, 81))}.toolbar-btn-group{display:flex;justify-content:center;align-items:center}.toolbar-btn-group>*:not(:first-child):not(:last-child) ::part(rich-text-editor-toolbar-button){border-radius:0px}.toolbar-btn-group>*:first-child:not(:last-child) ::part(rich-text-editor-toolbar-button){border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0px;border-bottom-right-radius:0px}.toolbar-btn-group>*:last-child:not(:first-child) ::part(rich-text-editor-toolbar-button){border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:4px;border-bottom-right-radius:4px}.toolbar-btn-group>*:not(:first-child) ::part(rich-text-editor-toolbar-button){margin-left:-1px}.toolbar-btn-group .toolbar-btn-color-preview-box{display:flex;border:1px solid rgba(var(--v-border-chip, 205, 209, 211, 1));box-sizing:border-box;border-radius:4px;width:16px;height:16px;justify-content:center;align-items:center;margin-left:6px}.toolbar-btn-group .toolbar-btn-color-preview-box.disabled{opacity:0.35}.toolbar-btn-group .toolbar-btn-link-wrapper{position:relative}.toolbar-btn-group .toolbar-btn-link-wrapper vega-rich-text-link-editor{position:absolute;bottom:0;left:0;right:0}.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-error, 189, 41, 71, 1));display:block;margin-top:12px}@media screen and (min-width: 768px) and (max-width: 1023px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}.vega-hidden{display:none}";
|
|
4816
4441
|
|
|
4817
4442
|
var __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
|
@@ -4868,6 +4493,7 @@ const VegaRichTextEditor = class {
|
|
|
4868
4493
|
this.lessIndentToolbarButtonSlimmer = new LessIndentToolbarButtonSlimmer();
|
|
4869
4494
|
this.bulletsNumbersToolbarButtonSlimmer = new BulletsNumbersToolbarButtonSlimmer();
|
|
4870
4495
|
this.horizontalAlignmentToolbarButtonSlimmer = new HorizontalAlignmentToolbarButtonSlimmer();
|
|
4496
|
+
this.codeBlockToolbarButtonSlimmer = new CodeBlockToolbarButtonSlimmer();
|
|
4871
4497
|
this.placeholderNotifySlimmer = createSubStateNotifySlimmer(VegaRichTextEditor, 'placeholder', 'watchPlaceholder');
|
|
4872
4498
|
this.disabledNotifySlimmer = createSubStateNotifySlimmer(VegaRichTextEditor, 'richTextContentEditable', 'watchRichTextContentEditable');
|
|
4873
4499
|
this.richTextContentController = new RichTextContentController(this);
|
|
@@ -4879,6 +4505,7 @@ const VegaRichTextEditor = class {
|
|
|
4879
4505
|
this.textNodeColorController = new TextNodeColorController();
|
|
4880
4506
|
this.deleteSelectedNodesController = new DeleteSelectedNodesController();
|
|
4881
4507
|
this.historyController = new HistoryController();
|
|
4508
|
+
this.internalCodeBlockSelectionController = new InternalCodeBlockSelectionController();
|
|
4882
4509
|
this.richTextContentEditable = true;
|
|
4883
4510
|
this.selectionMap = new Map();
|
|
4884
4511
|
this.isInDarkMode = VegaInternalThemeManager.isDarkMode();
|
|
@@ -5073,6 +4700,9 @@ __decorate$6([
|
|
|
5073
4700
|
__decorate$6([
|
|
5074
4701
|
InjectVegaSlimmer()
|
|
5075
4702
|
], VegaRichTextEditor.prototype, "horizontalAlignmentToolbarButtonSlimmer", void 0);
|
|
4703
|
+
__decorate$6([
|
|
4704
|
+
InjectVegaSlimmer()
|
|
4705
|
+
], VegaRichTextEditor.prototype, "codeBlockToolbarButtonSlimmer", void 0);
|
|
5076
4706
|
__decorate$6([
|
|
5077
4707
|
InjectVegaSlimmer()
|
|
5078
4708
|
], VegaRichTextEditor.prototype, "placeholderNotifySlimmer", void 0);
|
|
@@ -5106,6 +4736,9 @@ __decorate$6([
|
|
|
5106
4736
|
__decorate$6([
|
|
5107
4737
|
InjectVegaSlimmer()
|
|
5108
4738
|
], VegaRichTextEditor.prototype, "historyController", void 0);
|
|
4739
|
+
__decorate$6([
|
|
4740
|
+
InjectVegaSlimmer()
|
|
4741
|
+
], VegaRichTextEditor.prototype, "internalCodeBlockSelectionController", void 0);
|
|
5109
4742
|
VegaRichTextEditor.style = vegaRichTextEditorCss;
|
|
5110
4743
|
|
|
5111
4744
|
var __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|