@heartlandone/vega 2.71.0-RTE-table-preview → 2.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app-globals-c6be6013.js +432 -0
- package/dist/cjs/child-nodes-event-prevent-slimmer-871855df.js +158 -0
- package/dist/cjs/code-block-a7c8825f.js +4422 -0
- package/dist/cjs/component-value-history-controller-slimmer.abstract-868de3c4.js +736 -0
- package/dist/cjs/date-required-rule-99cca681.js +92 -0
- package/dist/cjs/design-token-d9c4dff6.js +402 -0
- package/dist/cjs/dom-node-subject-observer-factory-1c8f7880.js +305 -0
- package/dist/cjs/dto-renderer-manager-f3820a6b.js +3928 -0
- package/dist/cjs/element-appender-slimmer-3dc36dfa.js +1508 -0
- package/dist/cjs/event-emit-slimmer-f7255138.js +267 -0
- package/dist/cjs/form-field-controller-slimmer-57525f26.js +1267 -0
- package/dist/cjs/function-extension-d4fc3b7a.js +2927 -0
- package/dist/cjs/image-annotation-action-64414e40.js +312 -0
- package/dist/cjs/index-58ea899e.js +4 -8
- package/dist/cjs/index-c7fbf32b.js +43 -0
- package/dist/cjs/index.cjs.js +33 -38
- package/dist/cjs/inject-keyboard-manager-a6101379.js +37 -0
- package/dist/cjs/internal-vega-event-manager-0e1ba774.js +487 -0
- package/dist/cjs/keyboard-manager-d8adb0ed.js +140 -0
- package/dist/cjs/keyboard-manager-slimmer-15e65357.js +39 -0
- package/dist/cjs/language-extension-d23e5369.js +210 -0
- package/dist/cjs/loader.cjs.js +13 -15
- package/dist/cjs/month-view-generator-706c5477.js +102 -0
- package/dist/cjs/public-rules-0847e6fa.js +47 -0
- package/dist/cjs/range-14190f6b.js +178 -0
- package/dist/cjs/remote-invocation-registry-fc22fdd0.js +65 -0
- package/dist/cjs/responsive-format-facade-77d357fb.js +925 -0
- package/dist/cjs/rich-text-editor-required-rule-65d85060.js +64 -0
- package/dist/cjs/string-format-strategy.abstract-a8264fca.js +60 -0
- package/dist/cjs/string-input-formatter-slimmer-4332d1c7.js +230 -0
- package/dist/cjs/string-mask-strategy-4e7d3780.js +172 -0
- package/dist/cjs/style-formatter-4fd65f6f.js +34 -0
- package/dist/cjs/sub-state-notify-slimmer-9fe1ab65.js +81 -0
- package/dist/cjs/sub-state-observer-slimmer-2f6f4d28.js +134 -0
- package/dist/cjs/time-required-rule-9d39a620.js +141 -0
- package/dist/cjs/type-guard-69d2cf01.js +1965 -0
- package/dist/cjs/valid-credit-card-number-rule-9f40d1d9.js +173 -0
- package/dist/cjs/vega-accordion.cjs.entry.js +11 -14
- package/dist/cjs/vega-app-header-button.cjs.entry.js +16 -19
- package/dist/cjs/vega-banner.cjs.entry.js +3 -3
- package/dist/cjs/vega-box.cjs.entry.js +15 -18
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
- package/dist/cjs/vega-button-circle.cjs.entry.js +15 -18
- package/dist/cjs/vega-button-group_2.cjs.entry.js +60 -10
- package/dist/cjs/vega-button-link.cjs.entry.js +5 -5
- package/dist/cjs/vega-button.cjs.entry.js +15 -17
- package/dist/cjs/vega-calendar_4.cjs.entry.js +87 -909
- package/dist/cjs/vega-card.cjs.entry.js +14 -17
- package/dist/cjs/vega-carousel.cjs.entry.js +14 -16
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +7 -7
- package/dist/cjs/vega-chip.cjs.entry.js +16 -19
- package/dist/cjs/vega-code-block.cjs.entry.js +13 -13
- package/dist/cjs/vega-color-picker.cjs.entry.js +6 -6
- package/dist/cjs/vega-combo-box.cjs.entry.js +13 -13
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +1757 -1569
- package/dist/cjs/vega-dialog_2.cjs.entry.js +19 -22
- package/dist/cjs/vega-divider.cjs.entry.js +10 -13
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +20 -32
- package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
- package/dist/cjs/vega-field-label.cjs.entry.js +3 -3
- package/dist/cjs/vega-file-uploader.cjs.entry.js +6 -6
- package/dist/cjs/vega-flag-icon.cjs.entry.js +10 -13
- package/dist/cjs/vega-flex.cjs.entry.js +15 -18
- package/dist/cjs/vega-font.cjs.entry.js +14 -17
- package/dist/cjs/vega-form.cjs.entry.js +9 -9
- package/dist/cjs/vega-grid.cjs.entry.js +14 -17
- package/dist/cjs/vega-icon.cjs.entry.js +14 -17
- package/dist/cjs/vega-image-uploader.cjs.entry.js +16 -18
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +14 -14
- package/dist/cjs/vega-input-numeric.cjs.entry.js +13 -13
- package/dist/cjs/vega-input-passcode.cjs.entry.js +12 -12
- package/dist/cjs/vega-input-phone-number.cjs.entry.js +17 -18
- package/dist/cjs/vega-input-range.cjs.entry.js +7 -7
- package/dist/cjs/vega-input-select.cjs.entry.js +15 -16
- package/dist/cjs/vega-input.cjs.entry.js +11 -11
- package/dist/cjs/vega-internal-event-id-a5ef414b.js +112 -0
- package/dist/cjs/vega-item-toggle.cjs.entry.js +3 -3
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +18 -21
- package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +11 -13
- package/dist/cjs/vega-page-notification_2.cjs.entry.js +1 -1
- package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +4 -4
- package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +2 -2
- package/dist/cjs/vega-pagination.cjs.entry.js +12 -14
- package/dist/cjs/vega-popover_2.cjs.entry.js +20 -22
- package/dist/cjs/vega-progress-tracker.cjs.entry.js +313 -73
- package/dist/cjs/vega-radio_2.cjs.entry.js +10 -10
- package/dist/cjs/vega-rich-text-content.cjs.entry.js +9 -8
- package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +4648 -0
- package/dist/cjs/vega-segment-control.cjs.entry.js +3 -3
- package/dist/cjs/vega-selection-chip_2.cjs.entry.js +16 -18
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +8 -8
- package/dist/cjs/vega-sidenav_3.cjs.entry.js +16 -18
- package/dist/cjs/vega-signature-capture.cjs.entry.js +13 -16
- package/dist/cjs/vega-stepper.cjs.entry.js +7 -7
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +4 -4
- package/dist/cjs/vega-table_11.cjs.entry.js +38 -39
- package/dist/cjs/vega-textarea.cjs.entry.js +7 -7
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +38 -41
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +6 -6
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +14 -16
- package/dist/cjs/vega.cjs.js +13 -15
- package/dist/collection/collection-manifest.json +8 -16
- package/dist/collection/components/vega-button/vega-button.css +4 -0
- package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.js +7 -0
- package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.js +25 -2
- package/dist/collection/components/vega-button-group/vega-button-group-item/vega-button-group-item.js +31 -2
- package/dist/collection/components/vega-button-group/vega-button-group.js +37 -0
- package/dist/collection/components/vega-button-link/vega-button-link.css +4 -0
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.js +149 -0
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-format-controller.js +3 -1
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-keyboard-controller.js +1 -1
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-value-controller.js +10 -26
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.js +107 -445
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-input-renderer-base.abstract.js +5 -1
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-range-input-renderer.js +24 -17
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-renderer.js +15 -20
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-single-input-renderer.js +6 -17
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/constants.js +14 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/dto/calendar-selection.js +126 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-allow-repick-controller.js +70 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.js +204 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-min-max-date-controller.js +56 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.js +191 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-state-base.abstract.js +54 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-today-controller.js +37 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.js +76 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.js +192 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +168 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +669 -278
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.js +667 -3
- package/dist/collection/components/vega-date-picker/vega-date-picker.css +0 -11
- package/dist/collection/components/vega-date-picker/vega-date-picker.js +23 -40
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.js +3 -15
- package/dist/collection/components/vega-input/vega-input.js +1 -1
- package/dist/collection/components/vega-input-select/vega-input-select.js +1 -1
- package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.js +154 -0
- package/dist/collection/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.js +101 -0
- package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.css +68 -77
- package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.js +71 -86
- package/dist/collection/components/vega-rich-text-editor/dto/annotations/text-style-annotation.js +11 -63
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/block.abstract.js +1 -15
- package/dist/collection/components/vega-rich-text-editor/extensions/base-extension-renderer.js +1 -2
- package/dist/collection/components/vega-rich-text-editor/extensions/extension.abstract.js +0 -8
- package/dist/collection/components/vega-rich-text-editor/extensions/tokens/insert-token-node-strategy.js +5 -1
- package/dist/collection/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.js +12 -1
- package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.js +16 -10
- package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/public-api.js +0 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/extension-controller.js +0 -20
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/selection-controller.js +2 -23
- package/dist/collection/components/vega-rich-text-editor/test/dto/annotation-style.test.js +2 -1
- package/dist/collection/components/vega-rich-text-editor/test/dto/annotations.test.js +9 -0
- package/dist/collection/components/vega-rich-text-editor/test/dto/blocks/text-block.test.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/test/dto/content-state.test.js +15 -15
- package/dist/collection/components/vega-rich-text-editor/test/spec-utils.js +2 -5
- package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.css +0 -4
- package/dist/collection/constants/regex.js +1 -0
- package/dist/collection/constants/ui.js +3 -0
- package/dist/collection/global/scripts/before-vega-load.js +0 -2
- package/dist/collection/helpers/calendar/calendar-date.js +273 -1
- package/dist/collection/helpers/calendar/calendar-period/calendar-period.abstract.js +9 -0
- package/dist/collection/helpers/calendar/calendar-period/month-period.js +16 -4
- package/dist/collection/helpers/calendar/test/calendar-date.test.js +73 -0
- package/dist/collection/helpers/calendar/test/calendar-period/day-period.test.js +9 -0
- package/dist/collection/helpers/calendar/test/calendar-period/month-period.test.js +41 -0
- package/dist/collection/helpers/calendar/test/calendar-period/week-period.test.js +11 -0
- package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +3 -2
- package/dist/collection/helpers/event-manager/event-id/vega-event-id.js +3 -1
- package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +5 -2
- package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +2 -1
- package/dist/collection/helpers/slimmers/position-calculation/position-calculation-controller.js +7 -0
- package/dist/collection/helpers/ui/element-appender.js +35 -5
- package/dist/collection/types/type-guard.js +10 -0
- package/dist/collection/utils/date.js +14 -3
- package/dist/collection/utils/e2e-utils.js +8 -2
- package/dist/collection/utils/spec-utils.js +3 -4
- package/dist/collection/utils/test/date.test.js +2 -0
- package/dist/esm/app-globals-3d7e8bad.js +430 -0
- package/dist/esm/child-nodes-event-prevent-slimmer-6f7ae2c7.js +156 -0
- package/dist/esm/code-block-8fb548ff.js +4364 -0
- package/dist/esm/component-value-history-controller-slimmer.abstract-05f3ff05.js +730 -0
- package/dist/esm/date-required-rule-a9980386.js +90 -0
- package/dist/esm/design-token-ee017ea0.js +388 -0
- package/dist/esm/dom-node-subject-observer-factory-479cc5ef.js +248 -0
- package/dist/esm/dto-renderer-manager-d185c7ba.js +3910 -0
- package/dist/esm/element-appender-slimmer-00bc1a3c.js +1506 -0
- package/dist/esm/event-emit-slimmer-76fbfe1f.js +265 -0
- package/dist/esm/form-field-controller-slimmer-14379261.js +1265 -0
- package/dist/esm/function-extension-3f886d01.js +2908 -0
- package/dist/esm/image-annotation-action-3ce95526.js +306 -0
- package/dist/esm/index-03a016ed.js +40 -0
- package/dist/esm/index-090d31ca.js +4 -8
- package/dist/esm/index.js +18 -22
- package/dist/esm/inject-keyboard-manager-9241968c.js +35 -0
- package/dist/esm/internal-vega-event-manager-e44672ed.js +483 -0
- package/dist/esm/keyboard-manager-89acac79.js +138 -0
- package/dist/esm/keyboard-manager-slimmer-e303cb7d.js +37 -0
- package/dist/esm/language-extension-36c79ea1.js +207 -0
- package/dist/esm/loader.js +15 -17
- package/dist/esm/month-view-generator-4bec99fd.js +98 -0
- package/dist/esm/page-resize-observer-slimmer-8744cb44.js +171 -0
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- package/dist/esm/public-rules-0f5a36c2.js +32 -0
- package/dist/esm/range-f10f4c85.js +176 -0
- package/dist/esm/remote-invocation-registry-d69245c2.js +63 -0
- package/dist/esm/responsive-format-facade-6df7d17a.js +921 -0
- package/dist/esm/rich-text-editor-required-rule-d0cde24f.js +62 -0
- package/dist/esm/string-format-strategy.abstract-75540c16.js +58 -0
- package/dist/esm/string-input-formatter-slimmer-af085f0a.js +228 -0
- package/dist/esm/string-mask-strategy-4a18ed1a.js +170 -0
- package/dist/esm/style-formatter-e6879600.js +32 -0
- package/dist/esm/sub-state-notify-slimmer-430e150c.js +79 -0
- package/dist/esm/sub-state-observer-slimmer-17bb0328.js +132 -0
- package/dist/esm/time-required-rule-8ec1faf5.js +138 -0
- package/dist/esm/type-guard-b48aec98.js +1894 -0
- package/dist/esm/ui-28fd4193.js +38 -0
- package/dist/esm/valid-credit-card-number-rule-96eaf9b1.js +171 -0
- package/dist/esm/vega-accordion.entry.js +13 -16
- package/dist/esm/vega-app-header-button.entry.js +18 -21
- package/dist/esm/vega-banner.entry.js +3 -3
- package/dist/esm/vega-box.entry.js +17 -20
- package/dist/esm/vega-breadcrumb.entry.js +4 -4
- package/dist/esm/vega-button-circle.entry.js +17 -20
- package/dist/esm/vega-button-group_2.entry.js +60 -10
- package/dist/esm/vega-button-link.entry.js +5 -5
- package/dist/esm/vega-button.entry.js +17 -19
- package/dist/esm/vega-calendar_4.entry.js +46 -868
- package/dist/esm/vega-card.entry.js +16 -19
- package/dist/esm/vega-carousel.entry.js +16 -18
- package/dist/esm/vega-checkbox_2.entry.js +9 -9
- package/dist/esm/vega-chip.entry.js +18 -21
- package/dist/esm/vega-code-block.entry.js +14 -14
- package/dist/esm/vega-color-picker.entry.js +8 -8
- package/dist/esm/vega-combo-box.entry.js +15 -15
- package/dist/esm/vega-date-picker_2.entry.js +1744 -1556
- package/dist/esm/vega-dialog_2.entry.js +15 -18
- package/dist/esm/vega-divider.entry.js +12 -15
- package/dist/esm/vega-dropdown_5.entry.js +20 -32
- package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
- package/dist/esm/vega-field-label.entry.js +3 -3
- package/dist/esm/vega-file-uploader.entry.js +8 -8
- package/dist/esm/vega-flag-icon.entry.js +12 -15
- package/dist/esm/vega-flex.entry.js +17 -20
- package/dist/esm/vega-font.entry.js +16 -19
- package/dist/esm/vega-form.entry.js +11 -11
- package/dist/esm/vega-grid.entry.js +16 -19
- package/dist/esm/vega-icon.entry.js +16 -19
- package/dist/esm/vega-image-uploader.entry.js +17 -19
- package/dist/esm/vega-input-credit-card.entry.js +16 -16
- package/dist/esm/vega-input-numeric.entry.js +15 -15
- package/dist/esm/vega-input-passcode.entry.js +14 -14
- package/dist/esm/vega-input-phone-number.entry.js +16 -17
- package/dist/esm/vega-input-range.entry.js +9 -9
- package/dist/esm/vega-input-select.entry.js +16 -17
- package/dist/esm/vega-input.entry.js +13 -13
- package/dist/esm/vega-internal-event-id-71c67c39.js +66 -0
- package/dist/esm/vega-item-toggle.entry.js +4 -4
- package/dist/esm/vega-left-nav_5.entry.js +16 -19
- package/dist/esm/vega-loader-wrapper_2.entry.js +11 -13
- package/dist/esm/vega-page-notification_2.entry.js +1 -1
- package/dist/esm/vega-pagination-page-selector-mobile.entry.js +4 -4
- package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +2 -2
- package/dist/esm/vega-pagination.entry.js +14 -16
- package/dist/esm/vega-popover_2.entry.js +20 -22
- package/dist/esm/vega-progress-tracker.entry.js +315 -75
- package/dist/esm/vega-radio_2.entry.js +12 -12
- package/dist/esm/vega-rich-text-content.entry.js +10 -9
- package/dist/esm/vega-rich-text-editor_4.entry.js +4641 -0
- package/dist/esm/vega-segment-control.entry.js +5 -5
- package/dist/esm/vega-selection-chip_2.entry.js +18 -20
- package/dist/esm/vega-selection-tile_2.entry.js +10 -10
- package/dist/esm/vega-sidenav_3.entry.js +14 -16
- package/dist/esm/vega-signature-capture.entry.js +15 -18
- package/dist/esm/vega-stepper.entry.js +9 -9
- package/dist/esm/vega-tab-group_2.entry.js +6 -6
- package/dist/esm/vega-table_11.entry.js +15 -16
- package/dist/esm/vega-text.entry.js +2 -2
- package/dist/esm/vega-textarea.entry.js +9 -9
- package/dist/esm/vega-time-picker_2.entry.js +19 -22
- package/dist/esm/vega-toggle-switch.entry.js +8 -8
- package/dist/esm/vega-tooltip_2.entry.js +16 -18
- package/dist/esm/vega.js +15 -17
- package/dist/sri/vega-sri-manifest.json +335 -347
- package/dist/types/components/vega-button-group/types.d.ts +2 -1
- package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.d.ts +1 -0
- package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.d.ts +11 -0
- package/dist/types/components/vega-button-group/vega-button-group-item/vega-button-group-item.d.ts +7 -0
- package/dist/types/components/vega-button-group/vega-button-group.d.ts +8 -0
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.d.ts +60 -0
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-value-controller.d.ts +3 -4
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +29 -124
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-input-renderer-base.abstract.d.ts +1 -0
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-range-input-renderer.d.ts +5 -5
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-renderer.d.ts +2 -3
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-single-input-renderer.d.ts +1 -4
- package/dist/types/components/vega-date-picker/types.d.ts +9 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/constants.d.ts +1 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/dto/calendar-selection.d.ts +62 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-allow-repick-controller.d.ts +31 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.d.ts +78 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-min-max-date-controller.d.ts +20 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.d.ts +75 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-state-base.abstract.d.ts +29 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-today-controller.d.ts +15 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +18 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.d.ts +40 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.d.ts +32 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.d.ts +182 -0
- package/dist/types/components/vega-date-picker/vega-date-picker.d.ts +6 -14
- package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.d.ts +0 -4
- package/dist/types/components/vega-input/vega-input.d.ts +1 -1
- package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.d.ts +65 -0
- package/dist/types/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.d.ts +19 -0
- package/dist/types/components/vega-progress-tracker/type.d.ts +1 -0
- package/dist/types/components/vega-progress-tracker/vega-progress-tracker.d.ts +14 -10
- package/dist/types/components/vega-rich-text-editor/dto/annotations/annotation.abstract.d.ts +5 -2
- package/dist/types/components/vega-rich-text-editor/dto/annotations/block-annotation.abstract.d.ts +3 -3
- package/dist/types/components/vega-rich-text-editor/dto/annotations/text-style-annotation.d.ts +7 -0
- package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +6 -10
- package/dist/types/components/vega-rich-text-editor/extensions/extension.abstract.d.ts +0 -5
- package/dist/types/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.d.ts +7 -0
- package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-extension.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.d.ts +7 -0
- package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.d.ts +2 -2
- package/dist/types/components/vega-rich-text-editor/interface.d.ts +8 -21
- package/dist/types/components/vega-rich-text-editor/public-api.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/extension-controller.d.ts +0 -4
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/selection-controller.d.ts +6 -19
- package/dist/types/components/vega-rich-text-editor/test/spec-utils.d.ts +0 -4
- package/dist/types/components.d.ts +199 -71
- package/dist/types/constants/regex.d.ts +1 -0
- package/dist/types/constants/ui.d.ts +1 -1
- package/dist/types/helpers/calendar/calendar-date.d.ts +86 -2
- package/dist/types/helpers/calendar/calendar-period/calendar-period.abstract.d.ts +7 -0
- package/dist/types/helpers/event-manager/event-id/vega-event-id.d.ts +3 -1
- package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +5 -2
- package/dist/types/helpers/ui/element-appender.d.ts +14 -0
- package/dist/types/types/components.type.d.ts +4 -1
- package/dist/types/types/type-guard.d.ts +8 -0
- package/dist/types/utils/date.d.ts +11 -2
- package/dist/types/utils/e2e-utils.d.ts +7 -0
- package/dist/types/utils/spec-utils.d.ts +1 -2
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/p-06ab90c4.entry.js +1 -0
- package/dist/vega/p-09cd025a.entry.js +1 -0
- package/dist/vega/p-0b696b0e.entry.js +1 -0
- package/dist/vega/p-0f5453a7.entry.js +1 -0
- package/dist/vega/p-10ac8b57.js +1 -0
- package/dist/vega/p-154f39e4.entry.js +1 -0
- package/dist/vega/p-161b9c5b.js +1 -0
- package/dist/vega/p-169b7252.entry.js +1 -0
- package/dist/vega/p-17f3897a.js +1 -0
- package/dist/vega/p-1832e051.js +1 -0
- package/dist/vega/p-19728819.js +1 -0
- package/dist/vega/p-1e0d8228.entry.js +1 -0
- package/dist/vega/p-207cfa6a.js +1 -0
- package/dist/vega/p-213310e1.entry.js +1 -0
- package/dist/vega/p-27e641a0.entry.js +1 -0
- package/dist/vega/p-2872565e.js +1 -0
- package/dist/vega/p-294b0b76.js +1 -0
- package/dist/vega/p-2c744c20.js +1 -0
- package/dist/vega/p-314bf1d5.entry.js +1 -0
- package/dist/vega/p-34f624d6.entry.js +1 -0
- package/dist/vega/p-39b8dda9.entry.js +1 -0
- package/dist/vega/p-3af9421b.entry.js +1 -0
- package/dist/vega/p-3d128c07.js +1 -0
- package/dist/vega/p-3d85411d.js +1 -0
- package/dist/vega/p-3eb0d55c.entry.js +1 -0
- package/dist/vega/p-3fbfffa1.entry.js +9 -0
- package/dist/vega/p-40f39194.js +1 -0
- package/dist/vega/p-41026b90.js +1 -0
- package/dist/vega/p-4cc49d2b.entry.js +1 -0
- package/dist/vega/p-4ea28b2b.entry.js +1 -0
- package/dist/vega/p-4f56da1d.entry.js +1 -0
- package/dist/vega/p-563b67a0.entry.js +1 -0
- package/dist/vega/p-59e02528.js +1 -0
- package/dist/vega/p-5ac6bf4e.entry.js +1 -0
- package/dist/vega/p-5c379abd.entry.js +1 -0
- package/dist/vega/p-5c71a548.js +1 -0
- package/dist/vega/p-5f377954.js +1 -1
- package/dist/vega/p-5fdbff48.js +1 -0
- package/dist/vega/p-62e45daf.entry.js +1 -0
- package/dist/vega/p-65749591.entry.js +1 -0
- package/dist/vega/p-6c1ef2ed.js +1 -0
- package/dist/vega/p-6ee95368.entry.js +1 -0
- package/dist/vega/p-707d542e.js +1 -0
- package/dist/vega/p-7089cafe.entry.js +1 -0
- package/dist/vega/p-74f3516e.entry.js +1 -0
- package/dist/vega/p-77e64f26.js +1 -0
- package/dist/vega/p-7a5b3ad3.entry.js +1 -0
- package/dist/vega/p-7c22e766.entry.js +1 -0
- package/dist/vega/p-8233c5b6.entry.js +1 -0
- package/dist/vega/p-82bd84f9.js +1 -0
- package/dist/vega/p-86b1e8dd.entry.js +1 -0
- package/dist/vega/p-87960572.entry.js +1 -0
- package/dist/vega/p-883192ed.js +1 -0
- package/dist/vega/p-8c5acc0b.entry.js +1 -0
- package/dist/vega/p-94a58223.entry.js +1 -0
- package/dist/vega/p-95059e57.entry.js +1 -0
- package/dist/vega/p-990b11a7.entry.js +1 -0
- package/dist/vega/p-9a83a6b0.js +1 -0
- package/dist/vega/p-a23f6ed1.entry.js +1 -0
- package/dist/vega/p-a4ec6575.js +1 -0
- package/dist/vega/p-a7633138.entry.js +1 -0
- package/dist/vega/p-a8dad05d.js +1 -0
- package/dist/vega/p-a9268981.entry.js +1 -0
- package/dist/vega/p-afb834d8.js +1 -0
- package/dist/vega/p-b05ec86a.entry.js +1 -0
- package/dist/vega/p-b1ad3107.entry.js +1 -0
- package/dist/vega/p-b2eea369.js +1 -0
- package/dist/vega/p-b3d29c1e.entry.js +1 -0
- package/dist/vega/p-b6c92e7a.entry.js +1 -0
- package/dist/vega/p-b842f649.js +1 -0
- package/dist/vega/p-b8a7a54b.js +1 -0
- package/dist/vega/p-b96b7f33.entry.js +1 -0
- package/dist/vega/p-bc1cbd6c.js +1 -0
- package/dist/vega/p-bc7df5e7.entry.js +1 -0
- package/dist/vega/p-bca97027.entry.js +1 -0
- package/dist/vega/p-beed225e.entry.js +1 -0
- package/dist/vega/p-c1db0a81.entry.js +1 -0
- package/dist/vega/p-c4b010be.entry.js +1 -0
- package/dist/vega/p-c4b30117.entry.js +1 -0
- package/dist/vega/p-c5cf9a89.entry.js +1 -0
- package/dist/vega/p-cb7211c3.js +1 -0
- package/dist/vega/p-cb72ebb5.js +1 -0
- package/dist/vega/p-cbefc113.entry.js +1 -0
- package/dist/vega/p-d1d0f08a.js +1 -0
- package/dist/vega/p-d4413277.entry.js +1 -0
- package/dist/vega/p-d991fb11.js +1 -0
- package/dist/vega/p-de70aac1.js +1 -0
- package/dist/vega/p-e1e306c3.entry.js +1 -0
- package/dist/vega/p-e49c6368.js +1 -0
- package/dist/vega/p-e8d0e71c.js +1 -0
- package/dist/vega/p-e9838fb4.entry.js +1 -0
- package/dist/vega/p-ea0b6e85.entry.js +1 -0
- package/dist/vega/p-ec412511.entry.js +1 -0
- package/dist/vega/p-ec4c21d1.entry.js +1 -0
- package/dist/vega/p-eebe9176.js +1 -0
- package/dist/vega/p-efa4ee14.entry.js +1 -0
- package/dist/vega/p-f9facf79.entry.js +1 -0
- package/dist/vega/p-fa63b926.entry.js +1 -0
- package/dist/vega/p-fc6fca08.entry.js +1 -0
- package/dist/vega/p-fcb3ff5b.entry.js +1 -0
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +1 -2
- package/dist/cjs/app-globals-246e5160.js +0 -432
- package/dist/cjs/child-nodes-event-prevent-slimmer-f8840f1b.js +0 -158
- package/dist/cjs/code-block-36fb0e69.js +0 -4488
- package/dist/cjs/column-operation-aa0673f6.js +0 -1325
- package/dist/cjs/component-value-history-controller-slimmer.abstract-eec38ad7.js +0 -757
- package/dist/cjs/date-0a6bb035.js +0 -95
- package/dist/cjs/date-required-rule-4e1f84fd.js +0 -92
- package/dist/cjs/design-token-6f95b09f.js +0 -403
- package/dist/cjs/dom-node-subject-observer-factory-f040608b.js +0 -301
- package/dist/cjs/dto-renderer-manager-fbc93cb5.js +0 -3930
- package/dist/cjs/element-appender-slimmer-ec537994.js +0 -1470
- package/dist/cjs/event-emit-slimmer-7afe8d78.js +0 -267
- package/dist/cjs/form-field-controller-slimmer-f865d397.js +0 -1267
- package/dist/cjs/image-annotation-action-ae1310ef.js +0 -312
- package/dist/cjs/index-4b896e76.js +0 -43
- package/dist/cjs/inject-keyboard-manager-13c66257.js +0 -37
- package/dist/cjs/internal-vega-event-manager-45d451de.js +0 -486
- package/dist/cjs/keyboard-manager-af0d08a6.js +0 -140
- package/dist/cjs/keyboard-manager-slimmer-62f072cd.js +0 -39
- package/dist/cjs/language-extension-2df8cfd3.js +0 -210
- package/dist/cjs/mobilefriendly-aa2e50e9.js +0 -13
- package/dist/cjs/public-rules-6432194e.js +0 -47
- package/dist/cjs/range-d24916d7.js +0 -178
- package/dist/cjs/responsive-format-facade-0b610205.js +0 -925
- package/dist/cjs/rich-text-editor-required-rule-eb34a576.js +0 -64
- package/dist/cjs/state-background-color-formatter-aa5570f6.js +0 -85
- package/dist/cjs/string-format-strategy.abstract-07a95352.js +0 -60
- package/dist/cjs/string-input-formatter-slimmer-8236b5e1.js +0 -230
- package/dist/cjs/string-mask-strategy-6bdad95e.js +0 -172
- package/dist/cjs/style-formatter-1450a252.js +0 -34
- package/dist/cjs/sub-state-notify-slimmer-78682046.js +0 -81
- package/dist/cjs/sub-state-observer-slimmer-73aecfff.js +0 -134
- package/dist/cjs/table-extension-3b713932.js +0 -4815
- package/dist/cjs/time-required-rule-ccf178e7.js +0 -141
- package/dist/cjs/type-guard-f12b5bae.js +0 -742
- package/dist/cjs/valid-credit-card-number-rule-ce5c9147.js +0 -173
- package/dist/cjs/vega-internal-event-id-6d4a2c53.js +0 -110
- package/dist/cjs/vega-rich-text-editor_5.cjs.entry.js +0 -5135
- package/dist/cjs/vega-rich-text-table-selection-widget.cjs.entry.js +0 -179
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-controller.js +0 -282
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-element-appender-controller.js +0 -35
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-mobile-controller.js +0 -53
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-month-year-change-event-controller.js +0 -139
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-zindex-controller.js +0 -49
- package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.js +0 -341
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-children-remove-interceptor.js +0 -42
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-content-delete-interceptor.js +0 -25
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-row-insert-interceptor.js +0 -23
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-block-strategy.js +0 -25
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-column-strategy.js +0 -57
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-row-strategy.js +0 -57
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-block-strategy.js +0 -54
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-column-strategy.js +0 -42
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-row-strategy.js +0 -117
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/select-table-column-strategy.js +0 -22
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/table-column-strategy.abstract.js +0 -19
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-row-strategy.js +0 -133
- package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-table-column-strategy.js +0 -99
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-block-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-column-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-row-action.js +0 -18
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-block-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-column-action.js +0 -19
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-row-action.js +0 -26
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/select-table-column-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-annotations-action.js +0 -18
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-caption-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-cell-annotations-action.js +0 -18
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/toggle-header-row-action.js +0 -13
- package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/toggle-header-table-column-action.js +0 -15
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.js +0 -91
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.js +0 -57
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.js +0 -120
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-head-cell-annotation.js +0 -40
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-block.js +0 -117
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-body-block.js +0 -55
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.js +0 -65
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.js +0 -63
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-block.js +0 -59
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.js +0 -46
- package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-row-block.js +0 -59
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-body-renderer.js +0 -15
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.js +0 -22
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-cell-renderer.js +0 -74
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.js +0 -99
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-head-cell-renderer.js +0 -12
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-head-renderer.js +0 -15
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.js +0 -103
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-row-renderer.js +0 -15
- package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.js +0 -145
- package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/caption-operation.js +0 -78
- package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/column-operation.js +0 -109
- package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/row-operation.js +0 -132
- package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/setting-event-handler.abstract.js +0 -44
- package/dist/collection/components/vega-rich-text-editor/extensions/table/table-extension.js +0 -118
- package/dist/collection/components/vega-rich-text-editor/extensions/table/table-icon.js +0 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/table-selection.js +0 -348
- package/dist/collection/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.js +0 -229
- package/dist/collection/components/vega-rich-text-editor/extensions/table/utils/utils.js +0 -102
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/controllers/selection-widget-keyboard-controller.js +0 -36
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/renderers/selection-widget-renderer.js +0 -83
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.css +0 -41
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.js +0 -80
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/assets/icon.js +0 -20
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/caption-button-slimmer.js +0 -27
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/cell-properties-button-slimmer.js +0 -26
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/column-button-slimmer.js +0 -86
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.js +0 -101
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-properties-button-slimmer.js +0 -26
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.js +0 -75
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/vega-rich-text-table-setting-renderer.js +0 -50
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.css +0 -20
- package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.js +0 -166
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/caption-operation.test.js +0 -99
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-annotation.test.js +0 -89
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-caption-annotations.test.js +0 -79
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-cell-annotation.test.js +0 -128
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-dto.test.js +0 -517
- package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-test-utils.js +0 -172
- package/dist/esm/app-globals-e3ba8241.js +0 -430
- package/dist/esm/child-nodes-event-prevent-slimmer-66a11e63.js +0 -156
- package/dist/esm/code-block-f2f0cff5.js +0 -4430
- package/dist/esm/column-operation-9805e482.js +0 -1300
- package/dist/esm/component-value-history-controller-slimmer.abstract-400e0bd2.js +0 -751
- package/dist/esm/date-c55b97f0.js +0 -87
- package/dist/esm/date-required-rule-8944f3bf.js +0 -90
- package/dist/esm/design-token-6f4086a9.js +0 -389
- package/dist/esm/dom-node-subject-observer-factory-4401eb10.js +0 -246
- package/dist/esm/dto-renderer-manager-8b93cc6f.js +0 -3910
- package/dist/esm/element-appender-slimmer-cc465622.js +0 -1468
- package/dist/esm/event-emit-slimmer-7fade5b2.js +0 -265
- package/dist/esm/form-field-controller-slimmer-d88dc81a.js +0 -1265
- package/dist/esm/image-annotation-action-f62cfec3.js +0 -306
- package/dist/esm/index-e7660797.js +0 -40
- package/dist/esm/inject-keyboard-manager-ffd351b9.js +0 -35
- package/dist/esm/internal-vega-event-manager-c171f709.js +0 -482
- package/dist/esm/keyboard-manager-5d8f3582.js +0 -138
- package/dist/esm/keyboard-manager-slimmer-f39214e4.js +0 -37
- package/dist/esm/language-extension-87abdcf0.js +0 -207
- package/dist/esm/mobilefriendly-c5d0573d.js +0 -11
- package/dist/esm/page-resize-observer-slimmer-0bf7fbf3.js +0 -171
- package/dist/esm/public-rules-b6ad63e6.js +0 -32
- package/dist/esm/range-686c5d0c.js +0 -176
- package/dist/esm/responsive-format-facade-603dddd7.js +0 -921
- package/dist/esm/rich-text-editor-required-rule-4d14da42.js +0 -62
- package/dist/esm/state-background-color-formatter-0f01d27a.js +0 -82
- package/dist/esm/string-format-strategy.abstract-452f4398.js +0 -58
- package/dist/esm/string-input-formatter-slimmer-47305317.js +0 -228
- package/dist/esm/string-mask-strategy-6232a1c1.js +0 -170
- package/dist/esm/style-formatter-d76a67cb.js +0 -32
- package/dist/esm/sub-state-notify-slimmer-0a927f34.js +0 -79
- package/dist/esm/sub-state-observer-slimmer-33e0dd73.js +0 -132
- package/dist/esm/table-extension-5da1a8db.js +0 -4795
- package/dist/esm/time-required-rule-a01163b5.js +0 -138
- package/dist/esm/type-guard-12f7654b.js +0 -692
- package/dist/esm/ui-8424715a.js +0 -38
- package/dist/esm/valid-credit-card-number-rule-81443274.js +0 -171
- package/dist/esm/vega-internal-event-id-49fef150.js +0 -65
- package/dist/esm/vega-rich-text-editor_5.entry.js +0 -5127
- package/dist/esm/vega-rich-text-table-selection-widget.entry.js +0 -175
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-controller.d.ts +0 -96
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-element-appender-controller.d.ts +0 -12
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-mobile-controller.d.ts +0 -18
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-month-year-change-event-controller.d.ts +0 -46
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-zindex-controller.d.ts +0 -15
- package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.d.ts +0 -97
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-children-remove-interceptor.d.ts +0 -25
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-content-delete-interceptor.d.ts +0 -20
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-row-insert-interceptor.d.ts +0 -19
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-block-strategy.d.ts +0 -14
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-column-strategy.d.ts +0 -31
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-row-strategy.d.ts +0 -28
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-block-strategy.d.ts +0 -27
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-column-strategy.d.ts +0 -19
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-row-strategy.d.ts +0 -27
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/select-table-column-strategy.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/table-column-strategy.abstract.d.ts +0 -20
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-row-strategy.d.ts +0 -41
- package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-table-column-strategy.d.ts +0 -45
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-block-action.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-column-action.d.ts +0 -15
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-row-action.d.ts +0 -17
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-block-action.d.ts +0 -20
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-column-action.d.ts +0 -23
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-row-action.d.ts +0 -23
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/select-table-column-action.d.ts +0 -18
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-annotations-action.d.ts +0 -16
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-caption-action.d.ts +0 -14
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-cell-annotations-action.d.ts +0 -16
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/toggle-header-row-action.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/actions/toggle-header-table-column-action.d.ts +0 -16
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.d.ts +0 -64
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.d.ts +0 -26
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.d.ts +0 -66
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-head-cell-annotation.d.ts +0 -22
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-block.d.ts +0 -78
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-body-block.d.ts +0 -42
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.d.ts +0 -41
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.d.ts +0 -45
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-block.d.ts +0 -42
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.d.ts +0 -30
- package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-row-block.d.ts +0 -44
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-body-renderer.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.d.ts +0 -13
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-cell-renderer.d.ts +0 -37
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.d.ts +0 -51
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-head-cell-renderer.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-head-renderer.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.d.ts +0 -39
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-row-renderer.d.ts +0 -12
- package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.d.ts +0 -65
- package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/caption-operation.d.ts +0 -36
- package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/column-operation.d.ts +0 -55
- package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/row-operation.d.ts +0 -61
- package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/setting-event-handler.abstract.d.ts +0 -46
- package/dist/types/components/vega-rich-text-editor/extensions/table/table-extension.d.ts +0 -31
- package/dist/types/components/vega-rich-text-editor/extensions/table/table-icon.d.ts +0 -3
- package/dist/types/components/vega-rich-text-editor/extensions/table/table-selection.d.ts +0 -142
- package/dist/types/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.d.ts +0 -85
- package/dist/types/components/vega-rich-text-editor/extensions/table/utils/utils.d.ts +0 -53
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/controllers/selection-widget-keyboard-controller.d.ts +0 -15
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/renderers/selection-widget-renderer.d.ts +0 -31
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.d.ts +0 -27
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/assets/icon.d.ts +0 -2
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/caption-button-slimmer.d.ts +0 -11
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/cell-properties-button-slimmer.d.ts +0 -11
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/column-button-slimmer.d.ts +0 -28
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.d.ts +0 -36
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-properties-button-slimmer.d.ts +0 -11
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.d.ts +0 -36
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/vega-rich-text-table-setting-renderer.d.ts +0 -11
- package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.d.ts +0 -46
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/caption-operation.test.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-annotation.test.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-caption-annotations.test.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-cell-annotation.test.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-dto.test.d.ts +0 -1
- package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-test-utils.d.ts +0 -11
- package/dist/vega/p-0492fb42.entry.js +0 -1
- package/dist/vega/p-06840396.entry.js +0 -1
- package/dist/vega/p-06bc02cb.entry.js +0 -1
- package/dist/vega/p-070c3970.js +0 -1
- package/dist/vega/p-07c1a2a2.entry.js +0 -1
- package/dist/vega/p-08835909.js +0 -1
- package/dist/vega/p-10e142f1.js +0 -1
- package/dist/vega/p-12faf818.entry.js +0 -1
- package/dist/vega/p-1546855d.entry.js +0 -1
- package/dist/vega/p-18711501.js +0 -1
- package/dist/vega/p-194e32a2.js +0 -1
- package/dist/vega/p-19522949.js +0 -1
- package/dist/vega/p-197affbe.entry.js +0 -1
- package/dist/vega/p-1a282bfa.entry.js +0 -9
- package/dist/vega/p-1e5c2206.entry.js +0 -1
- package/dist/vega/p-1fb466db.js +0 -1
- package/dist/vega/p-24e66056.entry.js +0 -1
- package/dist/vega/p-26bde99c.entry.js +0 -1
- package/dist/vega/p-2762e4a7.entry.js +0 -1
- package/dist/vega/p-2b079386.entry.js +0 -1
- package/dist/vega/p-2c88b9c9.js +0 -1
- package/dist/vega/p-2de37a60.entry.js +0 -1
- package/dist/vega/p-2f866855.entry.js +0 -1
- package/dist/vega/p-3185b22d.entry.js +0 -1
- package/dist/vega/p-33cb78bd.entry.js +0 -1
- package/dist/vega/p-35609e2d.entry.js +0 -1
- package/dist/vega/p-36753b56.entry.js +0 -1
- package/dist/vega/p-37fd6859.entry.js +0 -1
- package/dist/vega/p-388953e4.entry.js +0 -1
- package/dist/vega/p-3925c16b.js +0 -1
- package/dist/vega/p-3ae691a0.entry.js +0 -1
- package/dist/vega/p-3ce90ecd.entry.js +0 -1
- package/dist/vega/p-4115d58a.entry.js +0 -1
- package/dist/vega/p-4a895707.js +0 -1
- package/dist/vega/p-502b7062.entry.js +0 -1
- package/dist/vega/p-532ff2d2.entry.js +0 -13
- package/dist/vega/p-5e1e91db.entry.js +0 -1
- package/dist/vega/p-5f53c228.entry.js +0 -1
- package/dist/vega/p-61519b5c.entry.js +0 -1
- package/dist/vega/p-62bf35fd.entry.js +0 -1
- package/dist/vega/p-64994265.entry.js +0 -1
- package/dist/vega/p-651ac54f.entry.js +0 -1
- package/dist/vega/p-67f159c3.js +0 -1
- package/dist/vega/p-70c898c6.entry.js +0 -1
- package/dist/vega/p-71f9c4d4.js +0 -1
- package/dist/vega/p-71fc7286.js +0 -1
- package/dist/vega/p-74168615.js +0 -1
- package/dist/vega/p-78d6dead.js +0 -1
- package/dist/vega/p-7d083222.entry.js +0 -1
- package/dist/vega/p-7d397c32.js +0 -1
- package/dist/vega/p-7d9cd9c8.js +0 -1
- package/dist/vega/p-7edd4b79.js +0 -1
- package/dist/vega/p-824a06ba.js +0 -1
- package/dist/vega/p-84d34816.js +0 -1
- package/dist/vega/p-853abdfd.entry.js +0 -1
- package/dist/vega/p-867a4970.js +0 -1
- package/dist/vega/p-8da8c2cf.entry.js +0 -1
- package/dist/vega/p-8daadaf3.entry.js +0 -1
- package/dist/vega/p-8eefbd15.entry.js +0 -1
- package/dist/vega/p-8fae8f9e.js +0 -1
- package/dist/vega/p-9112f67d.js +0 -1
- package/dist/vega/p-924b4e24.js +0 -1
- package/dist/vega/p-932c3efc.entry.js +0 -1
- package/dist/vega/p-9443c292.js +0 -1
- package/dist/vega/p-96c941d5.entry.js +0 -1
- package/dist/vega/p-9939e407.entry.js +0 -1
- package/dist/vega/p-99c52315.entry.js +0 -1
- package/dist/vega/p-99c6df1e.entry.js +0 -1
- package/dist/vega/p-9ce249a9.js +0 -1
- package/dist/vega/p-9f6632cc.entry.js +0 -1
- package/dist/vega/p-a10b9f2e.js +0 -12
- package/dist/vega/p-a6010b93.entry.js +0 -1
- package/dist/vega/p-a996636d.js +0 -1
- package/dist/vega/p-ae0edda4.entry.js +0 -1
- package/dist/vega/p-afe7bb0b.entry.js +0 -1
- package/dist/vega/p-b06ceb0f.entry.js +0 -1
- package/dist/vega/p-b1faebe0.js +0 -1
- package/dist/vega/p-b390be9d.entry.js +0 -1
- package/dist/vega/p-b555b253.js +0 -1
- package/dist/vega/p-baaf9264.js +0 -1
- package/dist/vega/p-bbc12975.js +0 -1
- package/dist/vega/p-bc749d3f.entry.js +0 -1
- package/dist/vega/p-c0b986af.js +0 -1
- package/dist/vega/p-c11c0d61.js +0 -1
- package/dist/vega/p-c4f6e01c.entry.js +0 -1
- package/dist/vega/p-c6ee2d47.entry.js +0 -1
- package/dist/vega/p-c8b76028.entry.js +0 -1
- package/dist/vega/p-cad733c8.js +0 -1
- package/dist/vega/p-d54a1453.entry.js +0 -1
- package/dist/vega/p-d94f149a.entry.js +0 -1
- package/dist/vega/p-de44727f.entry.js +0 -1
- package/dist/vega/p-e2a0f7ae.js +0 -1
- package/dist/vega/p-e6879699.entry.js +0 -1
- package/dist/vega/p-ec7bc15a.js +0 -1
- package/dist/vega/p-f14578ee.entry.js +0 -1
- package/dist/vega/p-f2de3d76.entry.js +0 -1
- package/dist/vega/p-f2f6f24d.entry.js +0 -1
- package/dist/vega/p-f41ef9e2.entry.js +0 -1
- package/dist/vega/p-f782a531.js +0 -1
- package/dist/vega/p-fc6617cb.entry.js +0 -1
- package/dist/vega/p-fc79b3c3.entry.js +0 -1
- package/dist/vega/p-ff67a25f.js +0 -1
- package/style/vega_min.css +0 -1
- package/style/visual-screenshots (1)/builds/master.json +0 -13385
- package/style/visual-screenshots (1)/compare.html +0 -26
- package/style/visual-screenshots (1)/connector.js +0 -10
- package/style/visual-screenshots (1)/images/00c9dbc329ca6b1ad78ea743b91ee0bc.png +0 -0
- package/style/visual-screenshots (1)/images/00deb6ff94de798b3fcc6414aedc040c.png +0 -0
- package/style/visual-screenshots (1)/images/014c955d050d2ebb917fd03590730572.png +0 -0
- package/style/visual-screenshots (1)/images/0182583c546dba469600a0251240cf21.png +0 -0
- package/style/visual-screenshots (1)/images/01a0575c0db1270ea83316b5c6c20601.png +0 -0
- package/style/visual-screenshots (1)/images/027defd97df9a5b4a7653be56ccdb0ac.png +0 -0
- package/style/visual-screenshots (1)/images/02ba6083bbf1c0e01a725f1f9f92aff9.png +0 -0
- package/style/visual-screenshots (1)/images/036795373db4daaf365beee11d8c25a7.png +0 -0
- package/style/visual-screenshots (1)/images/04a8eee512eeb23c1c2b87cda93a6776.png +0 -0
- package/style/visual-screenshots (1)/images/04bb561662f78f189085275de6678f41.png +0 -0
- package/style/visual-screenshots (1)/images/04eef932b78ca112212112ce585f27ab.png +0 -0
- package/style/visual-screenshots (1)/images/050cba57fa9a35e3803c85fbb59b4024.png +0 -0
- package/style/visual-screenshots (1)/images/051edd1219d1ddca517459b788cc9d2b.png +0 -0
- package/style/visual-screenshots (1)/images/0528ddc76f74747fa440e96db6907a43.png +0 -0
- package/style/visual-screenshots (1)/images/05395d74d64a1da223fb94b2874f2d66.png +0 -0
- package/style/visual-screenshots (1)/images/0545ef2f0796fa5f1d878254825adaf4.png +0 -0
- package/style/visual-screenshots (1)/images/0582c1933e54f696b632a1e1659073b2.png +0 -0
- package/style/visual-screenshots (1)/images/059772f121132ead0d6fa0a48168338b.png +0 -0
- package/style/visual-screenshots (1)/images/05feee4ecb06f066f3dafb653f33b6fb.png +0 -0
- package/style/visual-screenshots (1)/images/0640963c7a9fddb30a953c2624ba42eb.png +0 -0
- package/style/visual-screenshots (1)/images/065795600809ccab42d0f13ba71eb633.png +0 -0
- package/style/visual-screenshots (1)/images/0666dfce480647c3cb8857d2bb059847.png +0 -0
- package/style/visual-screenshots (1)/images/0700cef6f6f83545e2e7d3ecedc042d4.png +0 -0
- package/style/visual-screenshots (1)/images/0723f0263fa389ae876735ff57f46681.png +0 -0
- package/style/visual-screenshots (1)/images/073c1445dacdaac8c0aa6480212492f9.png +0 -0
- package/style/visual-screenshots (1)/images/073d4f053baf4c24d6af8de20eeae2aa.png +0 -0
- package/style/visual-screenshots (1)/images/076e14b0ccac0c02052e66256be50d47.png +0 -0
- package/style/visual-screenshots (1)/images/0775b2b66ba608e1677bb4bd032f707e.png +0 -0
- package/style/visual-screenshots (1)/images/078f2e93590c93c74f514e02ac05e4a3.png +0 -0
- package/style/visual-screenshots (1)/images/080f0f2d3f06372a9302e80f14aeb74e.png +0 -0
- package/style/visual-screenshots (1)/images/08872613981eb5e038fd62286300c583.png +0 -0
- package/style/visual-screenshots (1)/images/08cfa8c87053192e64e3b0b448d0dfaa.png +0 -0
- package/style/visual-screenshots (1)/images/08fc2250530bdc6b684a493406e75dcb.png +0 -0
- package/style/visual-screenshots (1)/images/0918181ef6fad9b51bbf411785719c7f.png +0 -0
- package/style/visual-screenshots (1)/images/091c16a1900c15eaf442677f7b7712a4.png +0 -0
- package/style/visual-screenshots (1)/images/09271a89642f3deb1534537363d82adf.png +0 -0
- package/style/visual-screenshots (1)/images/0968ada1c88a12c121d7e4cd9d1a4c31.png +0 -0
- package/style/visual-screenshots (1)/images/098cf2d4feb36daa5935d431b4cc2af9.png +0 -0
- package/style/visual-screenshots (1)/images/098ee2f12b7cd94ed7e3d9678dca8d9d.png +0 -0
- package/style/visual-screenshots (1)/images/09afb7f891103d16ca4e69cced183010.png +0 -0
- package/style/visual-screenshots (1)/images/0a8740f45dfa3ef686362af82744d0f8.png +0 -0
- package/style/visual-screenshots (1)/images/0aecce7dd5c65d8a1cd2bc3007aa039c.png +0 -0
- package/style/visual-screenshots (1)/images/0afce1548cbbf477be056364879ed645.png +0 -0
- package/style/visual-screenshots (1)/images/0b0e6917a067495e267dea6d4f1d2c89.png +0 -0
- package/style/visual-screenshots (1)/images/0b422eacde0c1264cc993d15ce94f3f2.png +0 -0
- package/style/visual-screenshots (1)/images/0b462aed27368fadffaf4042b4bf124f.png +0 -0
- package/style/visual-screenshots (1)/images/0bd41559a47131117d6b5d48f9384e2b.png +0 -0
- package/style/visual-screenshots (1)/images/0cdf8442f9e597e7782a97d05b9f0167.png +0 -0
- package/style/visual-screenshots (1)/images/0ce13d831ed54f898c0ddc60c7a3bfe9.png +0 -0
- package/style/visual-screenshots (1)/images/0d7e570e1a0f76d5114975280c8e36dc.png +0 -0
- package/style/visual-screenshots (1)/images/0dd901512ef46e6320b55ebb543c7a38.png +0 -0
- package/style/visual-screenshots (1)/images/0de77d7c6aedecc1948bf82730e77f9b.png +0 -0
- package/style/visual-screenshots (1)/images/0e588e87d0e0617c6fefe1e8203ceaf5.png +0 -0
- package/style/visual-screenshots (1)/images/0eb8a80ddc22191daad2b765098af978.png +0 -0
- package/style/visual-screenshots (1)/images/0ee82b520727d5a484ae47df46170f6b.png +0 -0
- package/style/visual-screenshots (1)/images/0ef7219055c2204179e5a87ce6393ecd.png +0 -0
- package/style/visual-screenshots (1)/images/0f20d9909852d49d83662e354d774330.png +0 -0
- package/style/visual-screenshots (1)/images/0fe5e32a6e5d62baa9eb9e9ef32b8ac0.png +0 -0
- package/style/visual-screenshots (1)/images/101fe127c73e1204c7b0a9532ddf5f33.png +0 -0
- package/style/visual-screenshots (1)/images/10dc76469583d7bb071c415b4c2500f5.png +0 -0
- package/style/visual-screenshots (1)/images/111ceb449af342ffefc9bf18313e9f2d.png +0 -0
- package/style/visual-screenshots (1)/images/116f44589ef708d63b88f72c07020d65.png +0 -0
- package/style/visual-screenshots (1)/images/11809d0dd4f56bd7e75c1ee424ea6049.png +0 -0
- package/style/visual-screenshots (1)/images/11e8c569dc91a4263915d38d41797b7c.png +0 -0
- package/style/visual-screenshots (1)/images/11f644637e7bf9e488c92e597243b372.png +0 -0
- package/style/visual-screenshots (1)/images/11f85d78db6278a0b9309de5e1971968.png +0 -0
- package/style/visual-screenshots (1)/images/126484246367b441a4874bf1c80eb701.png +0 -0
- package/style/visual-screenshots (1)/images/12b7614a6bca5fba19b2c207c9399eec.png +0 -0
- package/style/visual-screenshots (1)/images/12f9db657f5f215db4fd81d60e61ac05.png +0 -0
- package/style/visual-screenshots (1)/images/12fd30dca14bdb10e138bf9957cb67d6.png +0 -0
- package/style/visual-screenshots (1)/images/12ff293bb7a3fb35ba9e71b36d1ede58.png +0 -0
- package/style/visual-screenshots (1)/images/132fad75fe05d0c78d642c7d18b36364.png +0 -0
- package/style/visual-screenshots (1)/images/133df50a253039a25dc23c11be89ceb7.png +0 -0
- package/style/visual-screenshots (1)/images/13b9e970f1e6fc8dde0c10722f66bb73.png +0 -0
- package/style/visual-screenshots (1)/images/13d533f8842a49a2a160723a46eb8a32.png +0 -0
- package/style/visual-screenshots (1)/images/14391d1ca80560f5e01b72b0a32a2e43.png +0 -0
- package/style/visual-screenshots (1)/images/14b81ce49feb5c4033d2b6bf9ce8b584.png +0 -0
- package/style/visual-screenshots (1)/images/16548b7507dad1afa018cf73f656e123.png +0 -0
- package/style/visual-screenshots (1)/images/16bbd810a35c9542672c143620dd124b.png +0 -0
- package/style/visual-screenshots (1)/images/17f1ac08aef0b15a2a93576bd0c69a8b.png +0 -0
- package/style/visual-screenshots (1)/images/1823fb8764090e5f139555434673b999.png +0 -0
- package/style/visual-screenshots (1)/images/184a290d2680a6b9ed5fd3e875866f6c.png +0 -0
- package/style/visual-screenshots (1)/images/1853b22c2e9f57c3c0465f1ad677fd02.png +0 -0
- package/style/visual-screenshots (1)/images/1917b4c75462018e96fd444a55f92fdb.png +0 -0
- package/style/visual-screenshots (1)/images/19cb20f82a883631ec08e6fce09c9346.png +0 -0
- package/style/visual-screenshots (1)/images/19d6ef3f0f09ad264bd4565a890f4de3.png +0 -0
- package/style/visual-screenshots (1)/images/19f0f11a1678b49278906815b94aa63b.png +0 -0
- package/style/visual-screenshots (1)/images/1a334e822ac119215ecd18f1289048cf.png +0 -0
- package/style/visual-screenshots (1)/images/1a396fba8af913178a057a63bc2812ef.png +0 -0
- package/style/visual-screenshots (1)/images/1a4712761391165e44e0399e574800c7.png +0 -0
- package/style/visual-screenshots (1)/images/1a6407989995cf5d9451432c30bd8af5.png +0 -0
- package/style/visual-screenshots (1)/images/1a66f2485b63b12007df9713afc7abbd.png +0 -0
- package/style/visual-screenshots (1)/images/1a9961bc790f0e542d0e1df7ec61162c.png +0 -0
- package/style/visual-screenshots (1)/images/1aad56b95fdc16ee9739410e31f4b04b.png +0 -0
- package/style/visual-screenshots (1)/images/1ab773baf811c86dcc3fd48c486b948e.png +0 -0
- package/style/visual-screenshots (1)/images/1acd824e815dd8290f73aa3eac0e9aa7.png +0 -0
- package/style/visual-screenshots (1)/images/1b7e059b6e4adb5f3a15dc7737195bef.png +0 -0
- package/style/visual-screenshots (1)/images/1b83910bbcff965492bf79d17f7f3952.png +0 -0
- package/style/visual-screenshots (1)/images/1b8acd3ed0bb87d0b41963d3c4566324.png +0 -0
- package/style/visual-screenshots (1)/images/1bcb2ad6de61cbc5cb2bfbc40dcf3c75.png +0 -0
- package/style/visual-screenshots (1)/images/1c01fa461439431ed056e345914504aa.png +0 -0
- package/style/visual-screenshots (1)/images/1c1622f4ff1c0169e2efe5af5fab7238.png +0 -0
- package/style/visual-screenshots (1)/images/1c2ae0a43c9aea9e17e639f2486ad76c.png +0 -0
- package/style/visual-screenshots (1)/images/1c2c279749b3bab613be5efd8411a9fb.png +0 -0
- package/style/visual-screenshots (1)/images/1cdb0dbdb6a4398f94988e3d40162f2c.png +0 -0
- package/style/visual-screenshots (1)/images/1cfacd6c8ac80ee3c4a7f8584bd1441c.png +0 -0
- package/style/visual-screenshots (1)/images/1d1444203dac3cbe71c951d381126d03.png +0 -0
- package/style/visual-screenshots (1)/images/1d73f593bed08ad694e2b573a39ae06f.png +0 -0
- package/style/visual-screenshots (1)/images/1dac4a7712234a30253ab6f9160d50a6.png +0 -0
- package/style/visual-screenshots (1)/images/1ebaf53fb8db94bb9a8154e86a3e5ed2.png +0 -0
- package/style/visual-screenshots (1)/images/1ec0c1febc3f0dd1786eea003e0dee38.png +0 -0
- package/style/visual-screenshots (1)/images/1ec3bebcdac3683aad4e93ea70ee4a1e.png +0 -0
- package/style/visual-screenshots (1)/images/1f7f87a3bfb22d7b6d5489170a691439.png +0 -0
- package/style/visual-screenshots (1)/images/217dca423214acf6733443967bd4bb91.png +0 -0
- package/style/visual-screenshots (1)/images/21a4579340bd071933dc4222aca885e8.png +0 -0
- package/style/visual-screenshots (1)/images/21e702dbfac3ae3c84ad5cf4a3a5fd33.png +0 -0
- package/style/visual-screenshots (1)/images/2205a5e15323173cf82e53036b89f3d2.png +0 -0
- package/style/visual-screenshots (1)/images/2239056187956d81a9a7a3ff086123ec.png +0 -0
- package/style/visual-screenshots (1)/images/22a392ca2f7b01e9145de8a1d16d8ac1.png +0 -0
- package/style/visual-screenshots (1)/images/2395e15caf0facec892a787fbf1baa61.png +0 -0
- package/style/visual-screenshots (1)/images/2430226e2b211252d8793d0b24bd105b.png +0 -0
- package/style/visual-screenshots (1)/images/249af52548a661890ebb3990c81e7bec.png +0 -0
- package/style/visual-screenshots (1)/images/24adff266f0ccc120bbab22610a7afef.png +0 -0
- package/style/visual-screenshots (1)/images/250d4d8b44fd5e3f83114560684c7a33.png +0 -0
- package/style/visual-screenshots (1)/images/2517969a2f9a119f248ef574ce68957a.png +0 -0
- package/style/visual-screenshots (1)/images/251e0de35a82707d6372ae27e6a28f19.png +0 -0
- package/style/visual-screenshots (1)/images/25596d87f964d9e9e48bcdcb815d97b0.png +0 -0
- package/style/visual-screenshots (1)/images/257aafcb25e5c45c1fdb794c500845af.png +0 -0
- package/style/visual-screenshots (1)/images/25eeda071a6e8ec33338f621edfccce7.png +0 -0
- package/style/visual-screenshots (1)/images/260117a8a096031e2d4a00137e1fb6e7.png +0 -0
- package/style/visual-screenshots (1)/images/2609faace1c9661a650574dcc408030d.png +0 -0
- package/style/visual-screenshots (1)/images/2613cd2759c32063cc30bd0bd33358dc.png +0 -0
- package/style/visual-screenshots (1)/images/2694ff3a617c6cf218bdd37a19c83b8a.png +0 -0
- package/style/visual-screenshots (1)/images/26e2f8a3530bb0e0ea2384f2bdc9a81a.png +0 -0
- package/style/visual-screenshots (1)/images/2729771eeefd444ff898c491f1273357.png +0 -0
- package/style/visual-screenshots (1)/images/27f11a528d6b5f15d45f2c420edc00fb.png +0 -0
- package/style/visual-screenshots (1)/images/2818dab1bc771c7ed5eb71d561228863.png +0 -0
- package/style/visual-screenshots (1)/images/28cf1d93f7722430ee1437df8a14127f.png +0 -0
- package/style/visual-screenshots (1)/images/2939e1e89e29a3b71f5be665edf472c2.png +0 -0
- package/style/visual-screenshots (1)/images/2a3e1613614fa6bf58ebcb820d6fc84f.png +0 -0
- package/style/visual-screenshots (1)/images/2a8fce144b32ae297bcc8650d13cdb1c.png +0 -0
- package/style/visual-screenshots (1)/images/2aa7766d32787734fc8a534acc98bf77.png +0 -0
- package/style/visual-screenshots (1)/images/2ae27049402468e5e2baf2b664365f8a.png +0 -0
- package/style/visual-screenshots (1)/images/2b1b3ff73541c559ff4f0f22f70db3d1.png +0 -0
- package/style/visual-screenshots (1)/images/2b3af1d887b41d5123e82575fbfa3958.png +0 -0
- package/style/visual-screenshots (1)/images/2b8c160de3305bb7deef1bd108bd0850.png +0 -0
- package/style/visual-screenshots (1)/images/2b8df5a2aa5bea6bb21551b1ea4a5fe3.png +0 -0
- package/style/visual-screenshots (1)/images/2bb42f7f640cb97e6ddd996cc4bdf0da.png +0 -0
- package/style/visual-screenshots (1)/images/2c0ab17426c134629732d0a71b6a0745.png +0 -0
- package/style/visual-screenshots (1)/images/2c20e396014f9b12f047545579b878ca.png +0 -0
- package/style/visual-screenshots (1)/images/2c2c8816739b979c0a3dbdcbea9c8f98.png +0 -0
- package/style/visual-screenshots (1)/images/2c532e1252a0775b10aed847a4f06e4a.png +0 -0
- package/style/visual-screenshots (1)/images/2cdd6aee7de3219ce296baef83119f45.png +0 -0
- package/style/visual-screenshots (1)/images/2cebfc565448f890d0a3fa2de61cfd61.png +0 -0
- package/style/visual-screenshots (1)/images/2d76b6c335af030ecc073359d3565529.png +0 -0
- package/style/visual-screenshots (1)/images/2d7f41ff4f3900f029adbcdbdfdef905.png +0 -0
- package/style/visual-screenshots (1)/images/2d8b857c7a81cd7e90b75c9fcb974e09.png +0 -0
- package/style/visual-screenshots (1)/images/2e1f9e506e8e09a191c0d86899e8975a.png +0 -0
- package/style/visual-screenshots (1)/images/2e8755615c5b55dfeb5ced872b9b89f6.png +0 -0
- package/style/visual-screenshots (1)/images/2efe3ccdf954982fb10f12ceb79cc902.png +0 -0
- package/style/visual-screenshots (1)/images/2f2a4fe573c824c9c651ae5fb24e26f6.png +0 -0
- package/style/visual-screenshots (1)/images/2f426e5f71eae6eaf7bb54b4aafa88d6.png +0 -0
- package/style/visual-screenshots (1)/images/2f4e9578c9f11b5c8e2d034824689dce.png +0 -0
- package/style/visual-screenshots (1)/images/2f5ec86f7334a79914c09ee94eae2f8d.png +0 -0
- package/style/visual-screenshots (1)/images/2f76ed17b978cfa3e663760d5c651b0f.png +0 -0
- package/style/visual-screenshots (1)/images/2f8832e36833e875c53bdf68ac53de11.png +0 -0
- package/style/visual-screenshots (1)/images/2fe54d475ff814eaf2b323bfa6990a25.png +0 -0
- package/style/visual-screenshots (1)/images/30423ab0c5ce8c26a9b4e30fb4ad50b5.png +0 -0
- package/style/visual-screenshots (1)/images/3079876e71da7c207489af4b38314ca3.png +0 -0
- package/style/visual-screenshots (1)/images/30ac31802c8421ee59c2b0e64fdd40d1.png +0 -0
- package/style/visual-screenshots (1)/images/30efef6537f882daf60ba808d25ab35c.png +0 -0
- package/style/visual-screenshots (1)/images/3111d7bc39ef23e1d19a8022f2f78d4f.png +0 -0
- package/style/visual-screenshots (1)/images/3155c15ead85acf928e71fc4958b1e65.png +0 -0
- package/style/visual-screenshots (1)/images/317b0753146b2d6c57ef618e2d6c9aff.png +0 -0
- package/style/visual-screenshots (1)/images/31bb19c3949134774cce7f0af132f001.png +0 -0
- package/style/visual-screenshots (1)/images/32009df7a0440dc1227d6c59fcdc22a8.png +0 -0
- package/style/visual-screenshots (1)/images/3205ce4d4ec27524cb360e23cb250a2e.png +0 -0
- package/style/visual-screenshots (1)/images/3221fe82f718cdb8d3a013e35e75d966.png +0 -0
- package/style/visual-screenshots (1)/images/322755f4d634ab3e62663c98413cf4bb.png +0 -0
- package/style/visual-screenshots (1)/images/3263cb4ecdc16ecec1cf03d96c1d83d1.png +0 -0
- package/style/visual-screenshots (1)/images/329d69f11e6409b7e7855c3e576057f6.png +0 -0
- package/style/visual-screenshots (1)/images/32b3faa4eb5356a1ac8b30c722b7f282.png +0 -0
- package/style/visual-screenshots (1)/images/332160dde332162d8e3b9e12dd376546.png +0 -0
- package/style/visual-screenshots (1)/images/33519a891e6922542f2b3fc18ab26670.png +0 -0
- package/style/visual-screenshots (1)/images/33a7eaf167f347d52bc910511d2fc029.png +0 -0
- package/style/visual-screenshots (1)/images/33b0ac3141f5f2ea19f81d742269bcab.png +0 -0
- package/style/visual-screenshots (1)/images/343327cf17cc3b6a5e451c4d86577491.png +0 -0
- package/style/visual-screenshots (1)/images/3474b54aac010b234998e46521894bde.png +0 -0
- package/style/visual-screenshots (1)/images/34a84ed26a53ffb27dbcdabeaf10c665.png +0 -0
- package/style/visual-screenshots (1)/images/34efd6c9f4e5031eeb8c1f1a51bd3eaa.png +0 -0
- package/style/visual-screenshots (1)/images/3531a86fca237cc6d8764eb9eeb8e394.png +0 -0
- package/style/visual-screenshots (1)/images/3598a332200dbe7f32ab86015e6cd61e.png +0 -0
- package/style/visual-screenshots (1)/images/35a2ea7b24e787bdea1313703512d37f.png +0 -0
- package/style/visual-screenshots (1)/images/35ea4500d8a65ff3e52c0404ded68018.png +0 -0
- package/style/visual-screenshots (1)/images/363f015a5323e01c8f7c421607ba7a85.png +0 -0
- package/style/visual-screenshots (1)/images/365a47a407c464a973116590d1280542.png +0 -0
- package/style/visual-screenshots (1)/images/3666d49f301336a1d92abe8c48811dd0.png +0 -0
- package/style/visual-screenshots (1)/images/36a3aa27abb0e8fb45cbe4e842bb793b.png +0 -0
- package/style/visual-screenshots (1)/images/36be2d1cc4bbea216ebfa024f2b5d9d3.png +0 -0
- package/style/visual-screenshots (1)/images/36d5ce3a43f8a8bbaddb83a756174e09.png +0 -0
- package/style/visual-screenshots (1)/images/3715717d75b5ec943086b9392d05747a.png +0 -0
- package/style/visual-screenshots (1)/images/3718308a2535e0badb74e0ed39da3e98.png +0 -0
- package/style/visual-screenshots (1)/images/376d9c365f202b555efc6152eb4dbb7a.png +0 -0
- package/style/visual-screenshots (1)/images/37ff2d44fb6261e53203d05e1d130b48.png +0 -0
- package/style/visual-screenshots (1)/images/3829933c4a23d7033a63119484708ab4.png +0 -0
- package/style/visual-screenshots (1)/images/38c924efe546ddde14e0cb343a2ed551.png +0 -0
- package/style/visual-screenshots (1)/images/390f5b1f49dc988e023255d1878b769a.png +0 -0
- package/style/visual-screenshots (1)/images/394ab2b92eacbc9f634b3d0618b877d0.png +0 -0
- package/style/visual-screenshots (1)/images/3961f21e98b5d1f616215c9588f0c8ea.png +0 -0
- package/style/visual-screenshots (1)/images/396af4eab814a3a2dc1429581b3452b3.png +0 -0
- package/style/visual-screenshots (1)/images/3a3ec2d1cafe6685d14ef24be74aace4.png +0 -0
- package/style/visual-screenshots (1)/images/3ae1c7c33ebd96fe70ad90acc7b1d693.png +0 -0
- package/style/visual-screenshots (1)/images/3b19874ff7c8b2b92d6e200634b760c5.png +0 -0
- package/style/visual-screenshots (1)/images/3b4f2951c9cbd00ad924a358e0f24304.png +0 -0
- package/style/visual-screenshots (1)/images/3bc5adf4dec1f65342d09fa825073ee7.png +0 -0
- package/style/visual-screenshots (1)/images/3be29fbf67e05c10ef9effda5b0d1b9c.png +0 -0
- package/style/visual-screenshots (1)/images/3bfdd784ff28564271d8067439c72fb2.png +0 -0
- package/style/visual-screenshots (1)/images/3c101349056155ee16f6d40d67566bb2.png +0 -0
- package/style/visual-screenshots (1)/images/3c24263abc9fe6f48efe83953f33d38f.png +0 -0
- package/style/visual-screenshots (1)/images/3c4b7cb9bc584cc8d417763e4e332cad.png +0 -0
- package/style/visual-screenshots (1)/images/3cb9028699d3dc4a5ff9ed62acf26f38.png +0 -0
- package/style/visual-screenshots (1)/images/3d5e1f1170e3c54f19f3966925138df0.png +0 -0
- package/style/visual-screenshots (1)/images/3d7ee9ac11ff5492525a094beaa220b1.png +0 -0
- package/style/visual-screenshots (1)/images/3d82c97ab6d96c4026d0f3ca072b02ae.png +0 -0
- package/style/visual-screenshots (1)/images/3ec93ead42526589356ac0b756d043ec.png +0 -0
- package/style/visual-screenshots (1)/images/3f1b42c8f0cb41c374b0893eb31f2fda.png +0 -0
- package/style/visual-screenshots (1)/images/3ff96bd3c1034fe2a3af47eb4f729eeb.png +0 -0
- package/style/visual-screenshots (1)/images/400b3fe6558f8ae340d796c834456f82.png +0 -0
- package/style/visual-screenshots (1)/images/404d5c7fe65c1df1162feb7af57adadd.png +0 -0
- package/style/visual-screenshots (1)/images/4060b53b47c6e063d1770980ecb101b2.png +0 -0
- package/style/visual-screenshots (1)/images/40dd05574156c243449caad139d9b9a2.png +0 -0
- package/style/visual-screenshots (1)/images/40f479e6d12eaa5687a4ac9784aa717e.png +0 -0
- package/style/visual-screenshots (1)/images/40f48b85da52ec3ef05fa4696c72f7ff.png +0 -0
- package/style/visual-screenshots (1)/images/4169f0823fcd903e16d7c3f9344cc491.png +0 -0
- package/style/visual-screenshots (1)/images/419a4e8e4b8708b8e6ff45f643a7cf5d.png +0 -0
- package/style/visual-screenshots (1)/images/41c7990e66fbed660d2b55e76fd2ea25.png +0 -0
- package/style/visual-screenshots (1)/images/423ae4e26846f800ea31ed24d79e7472.png +0 -0
- package/style/visual-screenshots (1)/images/427c562ebb511d853cd3437eb8c73c0f.png +0 -0
- package/style/visual-screenshots (1)/images/428ec68c1c5771403f8939976018c14e.png +0 -0
- package/style/visual-screenshots (1)/images/4291cb1eaed75fba4800f0033b689208.png +0 -0
- package/style/visual-screenshots (1)/images/42ed1e77d86bf5e0d7a8f90acf2ab6b2.png +0 -0
- package/style/visual-screenshots (1)/images/4313e10ac1318b7526eed35c0d704f05.png +0 -0
- package/style/visual-screenshots (1)/images/438f453be7d1213a8e2872e4608a410c.png +0 -0
- package/style/visual-screenshots (1)/images/439f69b339c6f6ca820a4b62382ca877.png +0 -0
- package/style/visual-screenshots (1)/images/43f6607e4b8ff0d5f6c4c5d323c96677.png +0 -0
- package/style/visual-screenshots (1)/images/44caefac207b436ffeffdef86eaae21a.png +0 -0
- package/style/visual-screenshots (1)/images/44eaf11aa4495c9d8d76941a1254dcb0.png +0 -0
- package/style/visual-screenshots (1)/images/453742c5e578099953f9bff69e3982ef.png +0 -0
- package/style/visual-screenshots (1)/images/459214ef33a21425f776796767256e3c.png +0 -0
- package/style/visual-screenshots (1)/images/45a13beb6b9356d7b1b4690370914252.png +0 -0
- package/style/visual-screenshots (1)/images/45a569fd48a72db5047a02e192c35363.png +0 -0
- package/style/visual-screenshots (1)/images/45c1ac110c0dc20d35d2c2be1e469e49.png +0 -0
- package/style/visual-screenshots (1)/images/466d83d9df37025413fcc77e2528d150.png +0 -0
- package/style/visual-screenshots (1)/images/46ffc37786e06461d5ffc3c101841ea6.png +0 -0
- package/style/visual-screenshots (1)/images/4708081357611e1ad1adb36ea5f91ebe.png +0 -0
- package/style/visual-screenshots (1)/images/4799a82b4f5b3242bcf158dc12aeb8da.png +0 -0
- package/style/visual-screenshots (1)/images/47a4ae1ed1de0348708e630718bf58e0.png +0 -0
- package/style/visual-screenshots (1)/images/47cd6b92f4697a387f4392729f019da0.png +0 -0
- package/style/visual-screenshots (1)/images/47d36e03c0973961a65d47f31bbce64d.png +0 -0
- package/style/visual-screenshots (1)/images/48812bb1c24cf4529f36152c045aefe4.png +0 -0
- package/style/visual-screenshots (1)/images/48b348f52bcf73e7b84273b59414d9c0.png +0 -0
- package/style/visual-screenshots (1)/images/48ccc273160dcf8a8eee6caa44dacdd1.png +0 -0
- package/style/visual-screenshots (1)/images/4946b39b68b5cf6879cab368a43dde2d.png +0 -0
- package/style/visual-screenshots (1)/images/494f07c31c273d35487cbacefb179211.png +0 -0
- package/style/visual-screenshots (1)/images/495c33cb81b92e71a59064b036deacb3.png +0 -0
- package/style/visual-screenshots (1)/images/4988de5d9c64f2451adb83cc9781f31d.png +0 -0
- package/style/visual-screenshots (1)/images/4a5c84ab5b32f8b3652f31aca7f82547.png +0 -0
- package/style/visual-screenshots (1)/images/4abedbcd1f3c2b3cb5af44393cc4edd3.png +0 -0
- package/style/visual-screenshots (1)/images/4ac246764de2e6eaea78d1eee8fa0680.png +0 -0
- package/style/visual-screenshots (1)/images/4b49f29e64109f5d844bae574d9368e9.png +0 -0
- package/style/visual-screenshots (1)/images/4ba5027ab476151e2ba4f16cade9a316.png +0 -0
- package/style/visual-screenshots (1)/images/4be038b7049b5639096cdf45dc0166d5.png +0 -0
- package/style/visual-screenshots (1)/images/4be0509c9e49770d5d3ab93a9d824c0c.png +0 -0
- package/style/visual-screenshots (1)/images/4c007d54467c97735191d53b1b89700a.png +0 -0
- package/style/visual-screenshots (1)/images/4c04913dd6ac89f9c03580ffcfc9dce2.png +0 -0
- package/style/visual-screenshots (1)/images/4c39dc9b5530f8cfa389453f323f2562.png +0 -0
- package/style/visual-screenshots (1)/images/4cf7eb7fbbfcbad4194ef321b793a243.png +0 -0
- package/style/visual-screenshots (1)/images/4d34a53adeaf6b96b5f910e0e57f91f7.png +0 -0
- package/style/visual-screenshots (1)/images/4d3538775024b65cc11c656ee312bfb7.png +0 -0
- package/style/visual-screenshots (1)/images/4d614a3bd7821f52b699427abf3440e2.png +0 -0
- package/style/visual-screenshots (1)/images/4d85b89464845f56b18d7e329f1394a4.png +0 -0
- package/style/visual-screenshots (1)/images/4d9140a7a2defdf17daec4df653cccb8.png +0 -0
- package/style/visual-screenshots (1)/images/4e52657b6cd66fa0e8da6225c3923833.png +0 -0
- package/style/visual-screenshots (1)/images/4eb94875d887dfece7a7e2cc00425848.png +0 -0
- package/style/visual-screenshots (1)/images/4f3481e7bcab3c6a115931bdc7bde793.png +0 -0
- package/style/visual-screenshots (1)/images/4f736b3787086298b179837d13ea2e27.png +0 -0
- package/style/visual-screenshots (1)/images/4f7e9c28d6d15df090c3857fe8172a90.png +0 -0
- package/style/visual-screenshots (1)/images/4f831bf4925c85ef517fd84fed27cefc.png +0 -0
- package/style/visual-screenshots (1)/images/4f8cc269620de9911fba4dff6724c7a5.png +0 -0
- package/style/visual-screenshots (1)/images/4f9cf3ca13066408925b4d1cdc856337.png +0 -0
- package/style/visual-screenshots (1)/images/4fe4b5357ee618b9ca1265408d74ad97.png +0 -0
- package/style/visual-screenshots (1)/images/5018ce083222fefeb9e4686ed2e1edaf.png +0 -0
- package/style/visual-screenshots (1)/images/5022d94c55bd146ad125a05b5c9f15dd.png +0 -0
- package/style/visual-screenshots (1)/images/503a0b5aa58f32f0892efbb58b46b996.png +0 -0
- package/style/visual-screenshots (1)/images/50a9c832d93ea3ba546abb94fd08af87.png +0 -0
- package/style/visual-screenshots (1)/images/5118ecf3e50d06897080ed1b2bafcef3.png +0 -0
- package/style/visual-screenshots (1)/images/5158dd83988845a3839627ad959dbb01.png +0 -0
- package/style/visual-screenshots (1)/images/51923db19fef9e029f0893a8a2003614.png +0 -0
- package/style/visual-screenshots (1)/images/51f5169578f81f7fb04205fa02f761c6.png +0 -0
- package/style/visual-screenshots (1)/images/52525fe087784b1fdffe1cfc03eed02d.png +0 -0
- package/style/visual-screenshots (1)/images/5266c70656af2dd7ea757c126c555489.png +0 -0
- package/style/visual-screenshots (1)/images/5273adef332dbb60fac11c48a989c42d.png +0 -0
- package/style/visual-screenshots (1)/images/52cfe294a3f7300731ce4dbe4717bdea.png +0 -0
- package/style/visual-screenshots (1)/images/5328d69dc10bb02003c30fed0e25a64b.png +0 -0
- package/style/visual-screenshots (1)/images/53e6290d0b3f1294543ba28828558bae.png +0 -0
- package/style/visual-screenshots (1)/images/53eeaa26642fb7b44a83b9bf5d285b1a.png +0 -0
- package/style/visual-screenshots (1)/images/540524e243acf3f3f5bfa8c392ffba52.png +0 -0
- package/style/visual-screenshots (1)/images/5436543a753e26c1c2224e9b8ed3f30c.png +0 -0
- package/style/visual-screenshots (1)/images/54c4e2aa7af0622b71ab1b91e0216497.png +0 -0
- package/style/visual-screenshots (1)/images/54cf609aa15fa2609c3079a322e9f60a.png +0 -0
- package/style/visual-screenshots (1)/images/54e4e6b63e13d2f360b1bd0d1ade4ebd.png +0 -0
- package/style/visual-screenshots (1)/images/5505895e66a4d80a8eb40be714de2da1.png +0 -0
- package/style/visual-screenshots (1)/images/554637773a92e812811d95933b06d047.png +0 -0
- package/style/visual-screenshots (1)/images/55b1e1c7415f8f22ab377f2e4fd5a91d.png +0 -0
- package/style/visual-screenshots (1)/images/55c30ec12d513e3c365e94ef76330703.png +0 -0
- package/style/visual-screenshots (1)/images/5737582ac302d9b30b549c875dc0e823.png +0 -0
- package/style/visual-screenshots (1)/images/5838b2544ecf964a999cab746d5bd97d.png +0 -0
- package/style/visual-screenshots (1)/images/58b847761ee38a8c47f208aeb558e0a9.png +0 -0
- package/style/visual-screenshots (1)/images/58cae6127379fa56b766c6c3528a286a.png +0 -0
- package/style/visual-screenshots (1)/images/58cd807e8212d20223020a0c6404765b.png +0 -0
- package/style/visual-screenshots (1)/images/5909df37c419a947f3725ea71a9680c3.png +0 -0
- package/style/visual-screenshots (1)/images/590d2d0fa1c7e1204816f4badda94716.png +0 -0
- package/style/visual-screenshots (1)/images/592abe77a6d530f6d9c77c1fe68d1315.png +0 -0
- package/style/visual-screenshots (1)/images/593cacdf991a89066c6887dda6214279.png +0 -0
- package/style/visual-screenshots (1)/images/597612a74ca61e8e3cee1183251cac24.png +0 -0
- package/style/visual-screenshots (1)/images/59b59b3d221c4be96d27770926f6eb7c.png +0 -0
- package/style/visual-screenshots (1)/images/59d0c2dc9de3c7ca52811e6d03005db0.png +0 -0
- package/style/visual-screenshots (1)/images/59e20e58e24364f8ea8e94f2708de92f.png +0 -0
- package/style/visual-screenshots (1)/images/5a0638a95840412ad0883e0e14dd22f4.png +0 -0
- package/style/visual-screenshots (1)/images/5a251791db123f6cf0fc8207cd34d605.png +0 -0
- package/style/visual-screenshots (1)/images/5a8cf1ada7ead3e071e59c233e45d826.png +0 -0
- package/style/visual-screenshots (1)/images/5a98898f2c6c913e34e6370769a2e419.png +0 -0
- package/style/visual-screenshots (1)/images/5aa02d6e18a0fa7b46ad23263f5372f9.png +0 -0
- package/style/visual-screenshots (1)/images/5ab4fc80d22b19429b70cd3a6ab8bb05.png +0 -0
- package/style/visual-screenshots (1)/images/5acd13c49bb19fc300b6a7c2460945db.png +0 -0
- package/style/visual-screenshots (1)/images/5add1e2e0f9c785f9e969cce0b11e0a6.png +0 -0
- package/style/visual-screenshots (1)/images/5aeed5c2ec2ca7b5ae286bae76bb6f72.png +0 -0
- package/style/visual-screenshots (1)/images/5b2591966426d8c77601565dfa914b5c.png +0 -0
- package/style/visual-screenshots (1)/images/5b424b673e5f6814bbcc687a2f5ba7ff.png +0 -0
- package/style/visual-screenshots (1)/images/5bd4d4b7e0890bcb1d81ede114ee4b72.png +0 -0
- package/style/visual-screenshots (1)/images/5beea7f2f00f4db6f09fcf15bd6b73de.png +0 -0
- package/style/visual-screenshots (1)/images/5c02af94f4d5ed86c881612dcfb31b02.png +0 -0
- package/style/visual-screenshots (1)/images/5c0c0f1dbdb3aca383c35ec0cb67c599.png +0 -0
- package/style/visual-screenshots (1)/images/5c520e4228567e2374f5d96b7f15c0d9.png +0 -0
- package/style/visual-screenshots (1)/images/5cb10edf424ba13d586e83e60ac14a2d.png +0 -0
- package/style/visual-screenshots (1)/images/5cca63b3d493de7befd4382f24a2aabd.png +0 -0
- package/style/visual-screenshots (1)/images/5d5ef2d78f31c874edb28ebdfbfbd8f9.png +0 -0
- package/style/visual-screenshots (1)/images/5d8110526b6ba5e9621d0f2fa57aa132.png +0 -0
- package/style/visual-screenshots (1)/images/5d8f7a0eff0b6d546331f921490f25b9.png +0 -0
- package/style/visual-screenshots (1)/images/5eab49b89384ab1f74be37d4e905021a.png +0 -0
- package/style/visual-screenshots (1)/images/5ebfae0149ca72238011292fa3e486cb.png +0 -0
- package/style/visual-screenshots (1)/images/5ecd509cfe196a8262a7e85d3d4c64b0.png +0 -0
- package/style/visual-screenshots (1)/images/5f153464c343cd768216633b852073e7.png +0 -0
- package/style/visual-screenshots (1)/images/5f69e3fcc20bdb527e040185048788e4.png +0 -0
- package/style/visual-screenshots (1)/images/5fb4421e5a6d1eaef21a54bb431bdacb.png +0 -0
- package/style/visual-screenshots (1)/images/5fd1665ddd85bf70339a29ddf3a98915.png +0 -0
- package/style/visual-screenshots (1)/images/602fb4d5d2c9707f008b0d6a1a0487a7.png +0 -0
- package/style/visual-screenshots (1)/images/604007e0cd1142f4e425d57ad9a1c5ef.png +0 -0
- package/style/visual-screenshots (1)/images/605d581f35cd72dc9d7083dcc8066af1.png +0 -0
- package/style/visual-screenshots (1)/images/6188b93026521a32345a4319fb10271e.png +0 -0
- package/style/visual-screenshots (1)/images/621e7fcf64cbb08d121b599a81acb46a.png +0 -0
- package/style/visual-screenshots (1)/images/626302e61eedc90d62298f66f46b8ec0.png +0 -0
- package/style/visual-screenshots (1)/images/6289549bdd1f3ba4ee0ffa76fa3a8636.png +0 -0
- package/style/visual-screenshots (1)/images/62a7d5f3d5afe23177d5dbab5f1e4c79.png +0 -0
- package/style/visual-screenshots (1)/images/6355a9180ed5c4dd8df56c9ead71b0c8.png +0 -0
- package/style/visual-screenshots (1)/images/63981d8aaadcbe9b9e73af3669b3c180.png +0 -0
- package/style/visual-screenshots (1)/images/63bd485372b912309753349358f50eda.png +0 -0
- package/style/visual-screenshots (1)/images/6415c0bc3637ea962fb1761ae69b5dda.png +0 -0
- package/style/visual-screenshots (1)/images/64174556b9d8b4d18b7b8cfd531987a7.png +0 -0
- package/style/visual-screenshots (1)/images/64443c554e8813c1fff9032b53c52b76.png +0 -0
- package/style/visual-screenshots (1)/images/6478d52ea2380b15c4b549d9a1f77bac.png +0 -0
- package/style/visual-screenshots (1)/images/649745ba63be2d7bf9d4f766d7b8ca38.png +0 -0
- package/style/visual-screenshots (1)/images/64f2a771825679d512c73923c1bd5184.png +0 -0
- package/style/visual-screenshots (1)/images/65147f30150f68dd99a34e3de9adb4a2.png +0 -0
- package/style/visual-screenshots (1)/images/651e96edc124365985fcf260c7695452.png +0 -0
- package/style/visual-screenshots (1)/images/6542deed80a8908b2ba2e40b482a5829.png +0 -0
- package/style/visual-screenshots (1)/images/6548c65bf55806aa5acde87bc4d2017e.png +0 -0
- package/style/visual-screenshots (1)/images/65be34b043114b668dad4ce359310ad3.png +0 -0
- package/style/visual-screenshots (1)/images/65f1fc5ed87fb18c756988c6719c3b05.png +0 -0
- package/style/visual-screenshots (1)/images/6618ae614b5a59f18f1f9f627b81f0ba.png +0 -0
- package/style/visual-screenshots (1)/images/6710405c63cd71667e3533429bc8ac74.png +0 -0
- package/style/visual-screenshots (1)/images/675177ec55467292992f6c641b44352e.png +0 -0
- package/style/visual-screenshots (1)/images/679ff4b5301290556ec91463a47cf018.png +0 -0
- package/style/visual-screenshots (1)/images/67d9619b97865d42f5617413a025f62a.png +0 -0
- package/style/visual-screenshots (1)/images/686cdd39835b173225bd0b6ce4448b88.png +0 -0
- package/style/visual-screenshots (1)/images/6874ed35cef726f65cda16ed1d544b35.png +0 -0
- package/style/visual-screenshots (1)/images/68a92328d49b056ca74e3abe51c91d76.png +0 -0
- package/style/visual-screenshots (1)/images/68b78b4cec15c23fa5e7d0148bead95f.png +0 -0
- package/style/visual-screenshots (1)/images/68bca5cfcf4cb2cf91bbae3869730a14.png +0 -0
- package/style/visual-screenshots (1)/images/68c9260329ceafbae03b1cf59a2dc832.png +0 -0
- package/style/visual-screenshots (1)/images/698a7f9c8600bee3c0154879e8642fb8.png +0 -0
- package/style/visual-screenshots (1)/images/698be3296b927df039453c078d8c5e90.png +0 -0
- package/style/visual-screenshots (1)/images/69995300e1755ca4f61767ebb603e28d.png +0 -0
- package/style/visual-screenshots (1)/images/69b579e4e3d21f8d7c6bb64fa7dec383.png +0 -0
- package/style/visual-screenshots (1)/images/69c6368a387225497235ea4cabbbe05d.png +0 -0
- package/style/visual-screenshots (1)/images/69cdde73ed1979a49fa379514fb747ea.png +0 -0
- package/style/visual-screenshots (1)/images/69d4879c64376442acf44968fb02d9a6.png +0 -0
- package/style/visual-screenshots (1)/images/6a152f420237560d826a59b1ba95c6e8.png +0 -0
- package/style/visual-screenshots (1)/images/6a1e34197166e3475343c3ba9a4ce398.png +0 -0
- package/style/visual-screenshots (1)/images/6a2d5d8d6ff350c3b22a97e221506c72.png +0 -0
- package/style/visual-screenshots (1)/images/6a7102578dc5e69e6eed2dd81169959d.png +0 -0
- package/style/visual-screenshots (1)/images/6a76062bfc3391871480fbaed258138f.png +0 -0
- package/style/visual-screenshots (1)/images/6a98dfe1e3633e72cf1fc24d6f6b641b.png +0 -0
- package/style/visual-screenshots (1)/images/6abbbe132416f98c6a1cb3a1897cc551.png +0 -0
- package/style/visual-screenshots (1)/images/6b443b374cbe7fd349b21cd82a439dd6.png +0 -0
- package/style/visual-screenshots (1)/images/6bb098fcece5553a617d03e539e2b14d.png +0 -0
- package/style/visual-screenshots (1)/images/6bcde51c95aafa27fed83fd83b8f0397.png +0 -0
- package/style/visual-screenshots (1)/images/6c156cba7e8245e73aefe4afbd35276d.png +0 -0
- package/style/visual-screenshots (1)/images/6c569ef8ad97932e1a82ac1ed9e30960.png +0 -0
- package/style/visual-screenshots (1)/images/6c91461ed0c3153c9c403d1ab687dbe5.png +0 -0
- package/style/visual-screenshots (1)/images/6cae73cd2745b0af1530ae4e9cb9ebfa.png +0 -0
- package/style/visual-screenshots (1)/images/6d470bf081f9dfcf72f63d5ef93e627e.png +0 -0
- package/style/visual-screenshots (1)/images/6d6fcb40cbe35f57b4a2caced4ab52c1.png +0 -0
- package/style/visual-screenshots (1)/images/6d8758b4434c1abb115eb61256323a84.png +0 -0
- package/style/visual-screenshots (1)/images/6d8bd755e87330765b74bce670116692.png +0 -0
- package/style/visual-screenshots (1)/images/6e42402b7dd8bc3a23292b766284e384.png +0 -0
- package/style/visual-screenshots (1)/images/6e9e15b49f9bd7e2b60f666b85f4c3b7.png +0 -0
- package/style/visual-screenshots (1)/images/6ecd70c7e06430c86fd514a412dcc6f4.png +0 -0
- package/style/visual-screenshots (1)/images/6f3b3334cd7e0046e583348aa29babcf.png +0 -0
- package/style/visual-screenshots (1)/images/6f5da1c8d233cf9d5e8e88fd2ef3ec0a.png +0 -0
- package/style/visual-screenshots (1)/images/6fa2cf8bec030e4a0749e769ba026482.png +0 -0
- package/style/visual-screenshots (1)/images/6fe1a8093050cb06ea5b1c3334503e24.png +0 -0
- package/style/visual-screenshots (1)/images/7005941c708d4fec5abcdc7e6e10bab8.png +0 -0
- package/style/visual-screenshots (1)/images/700ade8610923958d3f90d68dfa4e05b.png +0 -0
- package/style/visual-screenshots (1)/images/7038ca0faeb969aa8e7e62cd4f626e6f.png +0 -0
- package/style/visual-screenshots (1)/images/706755c17ed932b4bef33524f6daa4f5.png +0 -0
- package/style/visual-screenshots (1)/images/706dfb70e1074e2aad57ab8526b0f360.png +0 -0
- package/style/visual-screenshots (1)/images/70a28845b5c345c56575b55667b70da1.png +0 -0
- package/style/visual-screenshots (1)/images/70b41db21992f19bda5e6b0f70c1fc09.png +0 -0
- package/style/visual-screenshots (1)/images/70bdf7355dba6c76a2d79bde106e6d1d.png +0 -0
- package/style/visual-screenshots (1)/images/70be87330902c743947ed9e77285f871.png +0 -0
- package/style/visual-screenshots (1)/images/70c8dce297f073384a4e8079bff68adf.png +0 -0
- package/style/visual-screenshots (1)/images/7129b9342de7f5e37c6eeeb9e174e2de.png +0 -0
- package/style/visual-screenshots (1)/images/715b51ef2b67f378bba07e7ad9343754.png +0 -0
- package/style/visual-screenshots (1)/images/71efbcd39c9d1ace0e25003ceb0db23e.png +0 -0
- package/style/visual-screenshots (1)/images/7245e631025f99f3554df69b14a843fa.png +0 -0
- package/style/visual-screenshots (1)/images/7268f09b0b1a0e124434eca4bbd818fa.png +0 -0
- package/style/visual-screenshots (1)/images/7329d3d684fa7430845616c496c3e3d5.png +0 -0
- package/style/visual-screenshots (1)/images/73ff7a530dde350815d23ff6a24031a0.png +0 -0
- package/style/visual-screenshots (1)/images/743a4ff37dbc8c26ed1379fad764407d.png +0 -0
- package/style/visual-screenshots (1)/images/745ce91134a9c726aee22be8e5dfcd28.png +0 -0
- package/style/visual-screenshots (1)/images/7476eb8a4b6b6c21d7366cd7b839cd8e.png +0 -0
- package/style/visual-screenshots (1)/images/74a5d110629e8bed44951ecc69d46e37.png +0 -0
- package/style/visual-screenshots (1)/images/74d2a451e8fe666e4cdd4ee104e3fbcb.png +0 -0
- package/style/visual-screenshots (1)/images/76dcdcc9887459636f81578fa8e72f0d.png +0 -0
- package/style/visual-screenshots (1)/images/772fd7072ade47ddd50f5daf9fe78b06.png +0 -0
- package/style/visual-screenshots (1)/images/77555003b57945e07b81f4bbc8da45a5.png +0 -0
- package/style/visual-screenshots (1)/images/7845c6559ae2b8cfa3eec51d52e628c1.png +0 -0
- package/style/visual-screenshots (1)/images/784772bde66cc378572a46b681b6cafe.png +0 -0
- package/style/visual-screenshots (1)/images/791f88fcb8a69681a876b21c6059e038.png +0 -0
- package/style/visual-screenshots (1)/images/7a14e2ed34311c3ddd03ab2b7e8b57e5.png +0 -0
- package/style/visual-screenshots (1)/images/7a5376f8127ccbce92efa2dc7d6e434a.png +0 -0
- package/style/visual-screenshots (1)/images/7b05dd84aacb821c812f835a0580c001.png +0 -0
- package/style/visual-screenshots (1)/images/7b11547ab77114942b3590f5274ccb36.png +0 -0
- package/style/visual-screenshots (1)/images/7b6676b606f3fd4fa89d824c97473517.png +0 -0
- package/style/visual-screenshots (1)/images/7b6e5af31520f5e8813017dd4f98c8d6.png +0 -0
- package/style/visual-screenshots (1)/images/7b89bf68bb12f5cee6947bd5af2520d7.png +0 -0
- package/style/visual-screenshots (1)/images/7b90db4c1dcaeed7cf71f5bae65d327a.png +0 -0
- package/style/visual-screenshots (1)/images/7bb540ca4abee17cdffe6944c8ff0948.png +0 -0
- package/style/visual-screenshots (1)/images/7c01812ede9c4d58571ccf59904bb1b1.png +0 -0
- package/style/visual-screenshots (1)/images/7c096666a0954392e0d657c8759963eb.png +0 -0
- package/style/visual-screenshots (1)/images/7c7593da4f5a9d04f800284023edb554.png +0 -0
- package/style/visual-screenshots (1)/images/7c82ecbc586641289f31f0cc27b017cd.png +0 -0
- package/style/visual-screenshots (1)/images/7c8e1def6b12da12f07536140e2b88b3.png +0 -0
- package/style/visual-screenshots (1)/images/7c916534306207f114d952bfe9340e5e.png +0 -0
- package/style/visual-screenshots (1)/images/7d3331d3cf93defe00a04cd10c57c6c6.png +0 -0
- package/style/visual-screenshots (1)/images/7da3d1c71e1e4b088f77e751a940b6a2.png +0 -0
- package/style/visual-screenshots (1)/images/7da65ded5bfe4c858e0c24ff1e1aa22d.png +0 -0
- package/style/visual-screenshots (1)/images/7daca2b5b705d27e8d5090f7dbb8acac.png +0 -0
- package/style/visual-screenshots (1)/images/7e8b4c9c2ac796fd5c5c730a430ef2e4.png +0 -0
- package/style/visual-screenshots (1)/images/7f06654399aca40b333099bec24468af.png +0 -0
- package/style/visual-screenshots (1)/images/7f8ae3d8e54291115e892c51d485df16.png +0 -0
- package/style/visual-screenshots (1)/images/7fb8ddb922c39be025d60076f51efcbd.png +0 -0
- package/style/visual-screenshots (1)/images/7fc57b3e4c1d14d0a86891a6c80ff12f.png +0 -0
- package/style/visual-screenshots (1)/images/8062b189081773e44a640a8d067046a0.png +0 -0
- package/style/visual-screenshots (1)/images/8083c957effa18fb290a5b0bdf2ad6cb.png +0 -0
- package/style/visual-screenshots (1)/images/80bbb318ca9792a3f16de017ea346d0c.png +0 -0
- package/style/visual-screenshots (1)/images/81c89f3dbeafdd793458d9339c7c607b.png +0 -0
- package/style/visual-screenshots (1)/images/81d7507828e5d8d66f7e161f74e45405.png +0 -0
- package/style/visual-screenshots (1)/images/82045c605de46b4aa7f386601ddb8884.png +0 -0
- package/style/visual-screenshots (1)/images/8245fbfd4b80b96b0254563f86b726ba.png +0 -0
- package/style/visual-screenshots (1)/images/82497fc1570674a5421e926475feac1b.png +0 -0
- package/style/visual-screenshots (1)/images/8252196c9f384ba181cc026acd29d928.png +0 -0
- package/style/visual-screenshots (1)/images/82706af2011a1e7149813131c420a1fa.png +0 -0
- package/style/visual-screenshots (1)/images/82a37a51e30a418ac408149f02adbbee.png +0 -0
- package/style/visual-screenshots (1)/images/83080cdc524b169211c70c9dfdb6fd9e.png +0 -0
- package/style/visual-screenshots (1)/images/830ba1a526dd905bce415b056de3ddb9.png +0 -0
- package/style/visual-screenshots (1)/images/833dc08e69770233fa3915653b3dfb4d.png +0 -0
- package/style/visual-screenshots (1)/images/8375d9df6b63faa9f30eda79e8c80a83.png +0 -0
- package/style/visual-screenshots (1)/images/839c2b39bcaa6830906b9da5d890c1ae.png +0 -0
- package/style/visual-screenshots (1)/images/8431110776be033ec282fd895a9ae813.png +0 -0
- package/style/visual-screenshots (1)/images/851318a57f46c9da1144fe8faf984da4.png +0 -0
- package/style/visual-screenshots (1)/images/8514c1d4ee26054ee07d11a0fe33f0db.png +0 -0
- package/style/visual-screenshots (1)/images/855d767000e9a4a272a2e753628a8474.png +0 -0
- package/style/visual-screenshots (1)/images/85d83f9f94a1adc9dcb60e0c13db29c1.png +0 -0
- package/style/visual-screenshots (1)/images/86236e1f7726cc775fdfbd9d967b892e.png +0 -0
- package/style/visual-screenshots (1)/images/865d7994dfb71cc52f659c784ab77089.png +0 -0
- package/style/visual-screenshots (1)/images/867dba1a3a0e5d10d9852a57eaf4f7f2.png +0 -0
- package/style/visual-screenshots (1)/images/868a694b756597afd5cbd8991ed9fa6e.png +0 -0
- package/style/visual-screenshots (1)/images/86fd1791a257ca240a96d32f587a6798.png +0 -0
- package/style/visual-screenshots (1)/images/8731210b8a1307c635c914344026cd7c.png +0 -0
- package/style/visual-screenshots (1)/images/874d6a50e723c879a585b73e4e54229b.png +0 -0
- package/style/visual-screenshots (1)/images/8753b744d14e6bf1be2fd926a564c3e9.png +0 -0
- package/style/visual-screenshots (1)/images/87eeecd4041819cac6f766c67f879a0d.png +0 -0
- package/style/visual-screenshots (1)/images/8816c9e1431fdfd5465d5a40c052309b.png +0 -0
- package/style/visual-screenshots (1)/images/885b77ceaf7e7a8908fd5b147c5a5217.png +0 -0
- package/style/visual-screenshots (1)/images/8923cdd532219aac9e71558dbd1186f9.png +0 -0
- package/style/visual-screenshots (1)/images/894bd3d4137d2ca7f4f71b2d53de379c.png +0 -0
- package/style/visual-screenshots (1)/images/8a801b5532051d67612de96df713f59a.png +0 -0
- package/style/visual-screenshots (1)/images/8aca19545cb02a7fd00f5d84a1fc4ee1.png +0 -0
- package/style/visual-screenshots (1)/images/8ae35388a8ed4604acc175b6953b1a12.png +0 -0
- package/style/visual-screenshots (1)/images/8b12f8f1234a0fdcd5cb800f5fdd4704.png +0 -0
- package/style/visual-screenshots (1)/images/8b674a86e1db9dda1dedaa07cc25a569.png +0 -0
- package/style/visual-screenshots (1)/images/8b7cd1fafd046cdd7200189a3a8e424f.png +0 -0
- package/style/visual-screenshots (1)/images/8ba1ee43c2d10f779da98898000d6d6f.png +0 -0
- package/style/visual-screenshots (1)/images/8bfc88f25acf24bb557f3790231b9cc5.png +0 -0
- package/style/visual-screenshots (1)/images/8c0bc63f7d57338b59338292b4d20e1c.png +0 -0
- package/style/visual-screenshots (1)/images/8c2a062564d8b55e5686d80995c0132e.png +0 -0
- package/style/visual-screenshots (1)/images/8c98ce176a13df14843cbb6423fd6440.png +0 -0
- package/style/visual-screenshots (1)/images/8cc5eded9abb67747e8a18cefb51df6d.png +0 -0
- package/style/visual-screenshots (1)/images/8d31ec4d9f7bbc9f753f70f2e2fe7781.png +0 -0
- package/style/visual-screenshots (1)/images/8d4761d0c860b4bdc923c78a60c6c7db.png +0 -0
- package/style/visual-screenshots (1)/images/8d8c786a27f502d297333e0f65e5fe7e.png +0 -0
- package/style/visual-screenshots (1)/images/8da3dcbc2a7e12489844a3d5e034ce78.png +0 -0
- package/style/visual-screenshots (1)/images/8e4e5baa65c536003c41d48d4a9d468c.png +0 -0
- package/style/visual-screenshots (1)/images/8e8f3e052eed01419d45167ec3d31705.png +0 -0
- package/style/visual-screenshots (1)/images/8ec5450454d067c364839f82e25a956d.png +0 -0
- package/style/visual-screenshots (1)/images/8ed1408bb2065b8a868349005c1f140d.png +0 -0
- package/style/visual-screenshots (1)/images/8f1c9b14d29c9264c5491f98fa9de9e8.png +0 -0
- package/style/visual-screenshots (1)/images/8f5f36e9fcfb73d98fc44d844ead6bcd.png +0 -0
- package/style/visual-screenshots (1)/images/8f69a3e8bb80e42b327daa0413f484a3.png +0 -0
- package/style/visual-screenshots (1)/images/8fbd2b83ca71d26193f78355c1a7469d.png +0 -0
- package/style/visual-screenshots (1)/images/9026dfe577f38e5be6fec9dafa010056.png +0 -0
- package/style/visual-screenshots (1)/images/906cf5fcfc43ec7f7a1743b1fbba08d0.png +0 -0
- package/style/visual-screenshots (1)/images/909185691877d3ab730fbc98e563b5cc.png +0 -0
- package/style/visual-screenshots (1)/images/9093d74b6c429faa6d6098bb3b42122e.png +0 -0
- package/style/visual-screenshots (1)/images/90b4a73410a4a0f48bf9d2803fc71b38.png +0 -0
- package/style/visual-screenshots (1)/images/90c068953b90c743da83a12da5204a0e.png +0 -0
- package/style/visual-screenshots (1)/images/914841508f534fc579907f3ff4e94eda.png +0 -0
- package/style/visual-screenshots (1)/images/926a60a1ac5968259e786e8c4c8c9d26.png +0 -0
- package/style/visual-screenshots (1)/images/93f5b096a1eb89744a98d090479f90c9.png +0 -0
- package/style/visual-screenshots (1)/images/946bbf46e754018058a8a17e5781b37c.png +0 -0
- package/style/visual-screenshots (1)/images/94a53d14a1e5f3fcb2f22b91642dc2cb.png +0 -0
- package/style/visual-screenshots (1)/images/94f93fc2109c3efac0cc508846fc09c6.png +0 -0
- package/style/visual-screenshots (1)/images/953979d501129c69e5cc0e1fd9acedf9.png +0 -0
- package/style/visual-screenshots (1)/images/9554d90e572ac282fec64cefe1d65eae.png +0 -0
- package/style/visual-screenshots (1)/images/95a3854979faaf7e3da15b81212fdddd.png +0 -0
- package/style/visual-screenshots (1)/images/95d64ce8dc7d7f80747dbb433cbd69b2.png +0 -0
- package/style/visual-screenshots (1)/images/95f250a29638c7a592e162fe065bc851.png +0 -0
- package/style/visual-screenshots (1)/images/962f28dd09eac1fa2811894bf4be9b70.png +0 -0
- package/style/visual-screenshots (1)/images/964706df4434f4e905f967de3d3dc125.png +0 -0
- package/style/visual-screenshots (1)/images/9681d81d32fb1f90ca44c3f69b9f0921.png +0 -0
- package/style/visual-screenshots (1)/images/97660bd70cc5e96d6258c1ed95c0935c.png +0 -0
- package/style/visual-screenshots (1)/images/976ebf4299d8ca702219b1e74419f704.png +0 -0
- package/style/visual-screenshots (1)/images/97cf49835bd0c2bf7811a7bdf3be89bc.png +0 -0
- package/style/visual-screenshots (1)/images/97e8a0e95dcff699c46f9b1b88b87d8a.png +0 -0
- package/style/visual-screenshots (1)/images/9807fabc447e7dae30fbbe6754e02c0d.png +0 -0
- package/style/visual-screenshots (1)/images/98ee9e5fb88515a8dbf5fe0e091c993a.png +0 -0
- package/style/visual-screenshots (1)/images/9997cd9e92d50b13a900ecb22fc74e83.png +0 -0
- package/style/visual-screenshots (1)/images/9a0b82d87e48b2c9e146bfbd4b51a177.png +0 -0
- package/style/visual-screenshots (1)/images/9a41a04f72770185eb42d3941627c6a1.png +0 -0
- package/style/visual-screenshots (1)/images/9a5b6ff3d85a26850b93d3129de94bbc.png +0 -0
- package/style/visual-screenshots (1)/images/9a9397907d86e4bdce381d4017ec5c33.png +0 -0
- package/style/visual-screenshots (1)/images/9ae63f1d387740d15676acf9a5bc48b8.png +0 -0
- package/style/visual-screenshots (1)/images/9b00734aa8cbf1a9acd3fbf08c137b0a.png +0 -0
- package/style/visual-screenshots (1)/images/9b07449ac15dc7e1d1deb9b825be0924.png +0 -0
- package/style/visual-screenshots (1)/images/9b18a6ddb96cbd44795e2bbc536f4f2a.png +0 -0
- package/style/visual-screenshots (1)/images/9b4014c74037f975344b9ac678229e65.png +0 -0
- package/style/visual-screenshots (1)/images/9b5118241eb4c97880a8a53129b9ea63.png +0 -0
- package/style/visual-screenshots (1)/images/9b594e815378bc9a2ef6cd6251dc9d6b.png +0 -0
- package/style/visual-screenshots (1)/images/9bc0a1284fc2c56e95ff22ae764e02c0.png +0 -0
- package/style/visual-screenshots (1)/images/9bdf5a8be0ecbe48e58b74552e4c5888.png +0 -0
- package/style/visual-screenshots (1)/images/9ce93b76501e11f52d1d6c27c6d3afb7.png +0 -0
- package/style/visual-screenshots (1)/images/9d272894b4135cdb24bd6dd6d23dd421.png +0 -0
- package/style/visual-screenshots (1)/images/9d3806b2870669edff4fea8574250bf7.png +0 -0
- package/style/visual-screenshots (1)/images/9d6ec965e5a23731bd189dfbb3c80e84.png +0 -0
- package/style/visual-screenshots (1)/images/9da4037f79a0f2ad50f8adc04687eb12.png +0 -0
- package/style/visual-screenshots (1)/images/9dcd7eda71b2347d026409b2342b3e39.png +0 -0
- package/style/visual-screenshots (1)/images/9de702c3bb72425b0e61d0b4d5a30b82.png +0 -0
- package/style/visual-screenshots (1)/images/9e08fce5233bbc69e681eb1ef349acc0.png +0 -0
- package/style/visual-screenshots (1)/images/9ea6570856b521aa566047e92d0f8305.png +0 -0
- package/style/visual-screenshots (1)/images/9ebdf4d34c2713e0f0cedb0c778b2c35.png +0 -0
- package/style/visual-screenshots (1)/images/9ec5435fc1248519bcc369f282c010c9.png +0 -0
- package/style/visual-screenshots (1)/images/9ee6d0e821a1f9c789514aef157a40ee.png +0 -0
- package/style/visual-screenshots (1)/images/9f1bfd0ae43a5c83303dcf205dc86aac.png +0 -0
- package/style/visual-screenshots (1)/images/9f268b6848b910b5d9c8094077405609.png +0 -0
- package/style/visual-screenshots (1)/images/9f3bdce5cba7a4c333f3e4e32697ed1e.png +0 -0
- package/style/visual-screenshots (1)/images/9fa64b6dd5e2432e5ac5be0125de88c5.png +0 -0
- package/style/visual-screenshots (1)/images/a00ff5334e96e86b5de74ca70e158365.png +0 -0
- package/style/visual-screenshots (1)/images/a0273543e221b5e74f2f92eedff87bbf.png +0 -0
- package/style/visual-screenshots (1)/images/a0860b4739ea0bf437f0fa1dc983edcc.png +0 -0
- package/style/visual-screenshots (1)/images/a09b998ff83fe0c8ba190c43be2c8281.png +0 -0
- package/style/visual-screenshots (1)/images/a0a9b6948dfa55de2c2391e66f116bef.png +0 -0
- package/style/visual-screenshots (1)/images/a0d9fd7c91a3666c82a8a1d1473647ff.png +0 -0
- package/style/visual-screenshots (1)/images/a122b735ee40793efef3ad06ff66c62a.png +0 -0
- package/style/visual-screenshots (1)/images/a1595ea5cac31981a01027ab16de609d.png +0 -0
- package/style/visual-screenshots (1)/images/a19c2ba30b43cb891f2536ebda33b5b9.png +0 -0
- package/style/visual-screenshots (1)/images/a19daa3bfb03b36036e5954c38b3c09b.png +0 -0
- package/style/visual-screenshots (1)/images/a1c13afc2158133f6f248eeec0c213c9.png +0 -0
- package/style/visual-screenshots (1)/images/a234da24efdb5886b5017293c9ec4983.png +0 -0
- package/style/visual-screenshots (1)/images/a267c84cc70ffcfd9f9098872b4d0e33.png +0 -0
- package/style/visual-screenshots (1)/images/a29ab04f7b14796a43ec1004d07e1191.png +0 -0
- package/style/visual-screenshots (1)/images/a331b266be3fe60d1510fc44c8462f8b.png +0 -0
- package/style/visual-screenshots (1)/images/a3b55159499c5529bdb159350ea483f8.png +0 -0
- package/style/visual-screenshots (1)/images/a3d54f0bbe60534633595f92c0af0606.png +0 -0
- package/style/visual-screenshots (1)/images/a3f82ac3c6348fa4452a198cb503860d.png +0 -0
- package/style/visual-screenshots (1)/images/a481b24ed810261cbae6bce62a1fd6da.png +0 -0
- package/style/visual-screenshots (1)/images/a4da8641e0ebce45d567a27b1b9d71c9.png +0 -0
- package/style/visual-screenshots (1)/images/a4e17fa06168594ff442f3d84ca346e0.png +0 -0
- package/style/visual-screenshots (1)/images/a4ec66bb6e0a2bf7d26898a7ec6fa6cb.png +0 -0
- package/style/visual-screenshots (1)/images/a4f5b46346578f27b509ab8ba9062b2a.png +0 -0
- package/style/visual-screenshots (1)/images/a524cc5916040ea0985aa14f5039cd08.png +0 -0
- package/style/visual-screenshots (1)/images/a56c0004f5f488bc5f4f8812479ff919.png +0 -0
- package/style/visual-screenshots (1)/images/a5760e6af3aac912f3c69d88eabc9571.png +0 -0
- package/style/visual-screenshots (1)/images/a5823b26b36bef69818dc786e72722c7.png +0 -0
- package/style/visual-screenshots (1)/images/a59e098a82b3b2b4a8e6e6e0ae9a82ee.png +0 -0
- package/style/visual-screenshots (1)/images/a5b60fb10746df7698e43bccb21df11b.png +0 -0
- package/style/visual-screenshots (1)/images/a5e9bd136ccd404fa0c0a275e757246f.png +0 -0
- package/style/visual-screenshots (1)/images/a62e4c8295a725e4a66cc2ec4408c4bd.png +0 -0
- package/style/visual-screenshots (1)/images/a6492327cb0dabcd2d74dbd1816f422d.png +0 -0
- package/style/visual-screenshots (1)/images/a6cfa33b833e8507b5f3cbfa260ee54f.png +0 -0
- package/style/visual-screenshots (1)/images/a75a60a4aa5b275fd399051abf56d08e.png +0 -0
- package/style/visual-screenshots (1)/images/a770465023ed9653c5209e93264e927e.png +0 -0
- package/style/visual-screenshots (1)/images/a83dbd9419c386d226bee5eda2e6673b.png +0 -0
- package/style/visual-screenshots (1)/images/a87075c6eb331fcab77dedffee6c8321.png +0 -0
- package/style/visual-screenshots (1)/images/a8b8f7209998b3d0a72b9719083dc02a.png +0 -0
- package/style/visual-screenshots (1)/images/a9a1de0b8dd7b6ccab5b47f73dd7f842.png +0 -0
- package/style/visual-screenshots (1)/images/a9c7c835f865512a77038fc5c15de21b.png +0 -0
- package/style/visual-screenshots (1)/images/aa30e7b644de69d60faa5380ca95c5a1.png +0 -0
- package/style/visual-screenshots (1)/images/aa4abb72226bb8321d4b9258f9857b71.png +0 -0
- package/style/visual-screenshots (1)/images/aa51db31d331669430896690342d81dc.png +0 -0
- package/style/visual-screenshots (1)/images/aa9b522302f4dd7150ecbfbb275320e6.png +0 -0
- package/style/visual-screenshots (1)/images/aaa1b0619e13093f63d4156375b60010.png +0 -0
- package/style/visual-screenshots (1)/images/ab5d93b635bae2b5fe23f583eac012ce.png +0 -0
- package/style/visual-screenshots (1)/images/abb03b840550301215bf11bcfc214de4.png +0 -0
- package/style/visual-screenshots (1)/images/ac03f528e1ea478ed33ba9fb5322e3fb.png +0 -0
- package/style/visual-screenshots (1)/images/ac1974812f40ea59d34307ac02a5f70c.png +0 -0
- package/style/visual-screenshots (1)/images/ac2cf23c673a4453be9f71a678bf457e.png +0 -0
- package/style/visual-screenshots (1)/images/ac4258921c4fac19bf9d885fe18d1783.png +0 -0
- package/style/visual-screenshots (1)/images/ac5b064d25b63e5ecd63a91d495dfe5b.png +0 -0
- package/style/visual-screenshots (1)/images/ac8524eb52a8b18d3727f9755658f457.png +0 -0
- package/style/visual-screenshots (1)/images/acd224f13e0e43e4d81990ea06b683f1.png +0 -0
- package/style/visual-screenshots (1)/images/acd8684a795357b531129eb92d03dbf0.png +0 -0
- package/style/visual-screenshots (1)/images/ace6a74377e1fd6f83aa5dba48c8f4ee.png +0 -0
- package/style/visual-screenshots (1)/images/ad0b716887153cae4ebdd7a50e332ad1.png +0 -0
- package/style/visual-screenshots (1)/images/ad74bf7ecefe38d32f843eac59d05bcf.png +0 -0
- package/style/visual-screenshots (1)/images/adad3039bbf24803cc0c800fa1ab52b2.png +0 -0
- package/style/visual-screenshots (1)/images/add742b5f9addb0c591ef066157dd0d7.png +0 -0
- package/style/visual-screenshots (1)/images/adf3ec3a8e97c3b33e77394946ad2434.png +0 -0
- package/style/visual-screenshots (1)/images/adfd03e01df5610028a7b8c22de1d1b5.png +0 -0
- package/style/visual-screenshots (1)/images/ae308ee925b5ad76aea7d7c989003c6c.png +0 -0
- package/style/visual-screenshots (1)/images/ae5ba79ab620185002de1e0e2869fea8.png +0 -0
- package/style/visual-screenshots (1)/images/aed0d8ffabcb9d4680499b39bb909cfb.png +0 -0
- package/style/visual-screenshots (1)/images/af5ce31cf5f312b6bda76f748fabb52f.png +0 -0
- package/style/visual-screenshots (1)/images/af77365d82e0f07b3957f3c77dfa5810.png +0 -0
- package/style/visual-screenshots (1)/images/afc1be11da46a18bb8982a85c65fb4b0.png +0 -0
- package/style/visual-screenshots (1)/images/b011549fe677ebb17fa307dbc03d36d9.png +0 -0
- package/style/visual-screenshots (1)/images/b0bff9f5d7141b079b666e5fb16abd22.png +0 -0
- package/style/visual-screenshots (1)/images/b0dbbbef7ff3804d58ce28e9685b88e0.png +0 -0
- package/style/visual-screenshots (1)/images/b0dfa6af25989c4c3d2e9aef64daab17.png +0 -0
- package/style/visual-screenshots (1)/images/b10bf8e372bca5d68241320f75bc1748.png +0 -0
- package/style/visual-screenshots (1)/images/b10ed3d6ec38c9c253a4446e106e75ea.png +0 -0
- package/style/visual-screenshots (1)/images/b141a65b0038d524dd290c00eddace3d.png +0 -0
- package/style/visual-screenshots (1)/images/b16111054dc7e5c31d822180d54ea0e6.png +0 -0
- package/style/visual-screenshots (1)/images/b1776e0a89f070ea680f256ed27ebf1e.png +0 -0
- package/style/visual-screenshots (1)/images/b27ff00e501d23c43b509c1a0168ef39.png +0 -0
- package/style/visual-screenshots (1)/images/b2aa4c06bcefcb7c92204acdd30d3197.png +0 -0
- package/style/visual-screenshots (1)/images/b2fef056d1f15f4ba8619f31541dd0e5.png +0 -0
- package/style/visual-screenshots (1)/images/b35f5b3650f7806ab3390e0ba67df1a4.png +0 -0
- package/style/visual-screenshots (1)/images/b3dd87d68dcdfd82fa97cdf4e39c2b27.png +0 -0
- package/style/visual-screenshots (1)/images/b3e5876c63e8256843b4090dc4b441ad.png +0 -0
- package/style/visual-screenshots (1)/images/b3f19d58a18bfd34f92764ec41877c3c.png +0 -0
- package/style/visual-screenshots (1)/images/b43533c13c416aad326bc67d0f44929e.png +0 -0
- package/style/visual-screenshots (1)/images/b4382971635528760348cbe2b70605fe.png +0 -0
- package/style/visual-screenshots (1)/images/b45844d5501be7c8431cc1306e3f3ae5.png +0 -0
- package/style/visual-screenshots (1)/images/b468a14b6c8e54db94b61c71b9662af0.png +0 -0
- package/style/visual-screenshots (1)/images/b4a02c9fc04ef4dc159e7beccd7ccfa7.png +0 -0
- package/style/visual-screenshots (1)/images/b4b41ceb35d80f9f629859558b75b19e.png +0 -0
- package/style/visual-screenshots (1)/images/b4edb5a1c390edd5c541c18e1a4ab68f.png +0 -0
- package/style/visual-screenshots (1)/images/b513f66c5fdbab3a28e7db1b23bfb8c2.png +0 -0
- package/style/visual-screenshots (1)/images/b5160b2c865a5e7b7d8b1e1abbf8d002.png +0 -0
- package/style/visual-screenshots (1)/images/b52890091cf696f0150eae61232cb1dd.png +0 -0
- package/style/visual-screenshots (1)/images/b56bb2b3dd4141b8e698820a515b8798.png +0 -0
- package/style/visual-screenshots (1)/images/b5af14253c4cc74f16ddb0b6164f185c.png +0 -0
- package/style/visual-screenshots (1)/images/b63069789fa7ac11755ea759d30a64a5.png +0 -0
- package/style/visual-screenshots (1)/images/b651f7f296cf9f30e419d94a8c4895cf.png +0 -0
- package/style/visual-screenshots (1)/images/b65482e30ffb8bec6c85103dcb71113d.png +0 -0
- package/style/visual-screenshots (1)/images/b65b4bdb5c82820722ea76182517bc74.png +0 -0
- package/style/visual-screenshots (1)/images/b65b9d44dcba156ab3152a6ee2592277.png +0 -0
- package/style/visual-screenshots (1)/images/b68552f8eb800b1891a49bf1cd4d987d.png +0 -0
- package/style/visual-screenshots (1)/images/b68eacd41b21135a2c2431a3ddc2dae5.png +0 -0
- package/style/visual-screenshots (1)/images/b6a9a44405f5e4034c95f55ee8aed681.png +0 -0
- package/style/visual-screenshots (1)/images/b6d2d0f7d50094fd163351d07a5e9251.png +0 -0
- package/style/visual-screenshots (1)/images/b6ec4162d1414d4011b787dd127bad96.png +0 -0
- package/style/visual-screenshots (1)/images/b6fe711492d73a1ad83be68fd782b5be.png +0 -0
- package/style/visual-screenshots (1)/images/b702cca4b4fe43f208a58f37e4a7d0c8.png +0 -0
- package/style/visual-screenshots (1)/images/b74e84ef684b263e0390552911c7b630.png +0 -0
- package/style/visual-screenshots (1)/images/b76dc3cd48583a70f3f99348e259a192.png +0 -0
- package/style/visual-screenshots (1)/images/b79d300707e6efd85959e1727354cda9.png +0 -0
- package/style/visual-screenshots (1)/images/b7f774a62a166681f5e34f4f92e7df96.png +0 -0
- package/style/visual-screenshots (1)/images/b85b4a6d8172ec3d4fe3875d1d5be438.png +0 -0
- package/style/visual-screenshots (1)/images/b8fd7356a98d56ee49951392bc0a19f5.png +0 -0
- package/style/visual-screenshots (1)/images/b9239778dee867ed3f14d2f3ffecd8d5.png +0 -0
- package/style/visual-screenshots (1)/images/b936ab1e543d95bd0c818b0d2ddade05.png +0 -0
- package/style/visual-screenshots (1)/images/b9afd9043e717ea55cd0a7c2e8768ec0.png +0 -0
- package/style/visual-screenshots (1)/images/b9b032bae3f927fc7492af0717480a7c.png +0 -0
- package/style/visual-screenshots (1)/images/ba1fea1b865b3beef1a1135bd779a706.png +0 -0
- package/style/visual-screenshots (1)/images/ba2cbf010b08ef17e500a9a6f09756eb.png +0 -0
- package/style/visual-screenshots (1)/images/ba900133c62ae20a043c8145deb72e61.png +0 -0
- package/style/visual-screenshots (1)/images/bab341bf211ffe1d1cdcff9735458a37.png +0 -0
- package/style/visual-screenshots (1)/images/bb54094e275897982cdadf3573cae164.png +0 -0
- package/style/visual-screenshots (1)/images/bb551e3ba230869e0f7f74597ebdc929.png +0 -0
- package/style/visual-screenshots (1)/images/bb5dc88ef581957bcde4779c0b6f96be.png +0 -0
- package/style/visual-screenshots (1)/images/bb671a54edc0e2807e0ee792010765ce.png +0 -0
- package/style/visual-screenshots (1)/images/bb6a7307e19bf9e4c588df181c01cf82.png +0 -0
- package/style/visual-screenshots (1)/images/bb9c61c2c52257e6ac08122fc873e0a5.png +0 -0
- package/style/visual-screenshots (1)/images/bb9d4ba104d323a504b867a9e7c26fa7.png +0 -0
- package/style/visual-screenshots (1)/images/bbfc81ede881c3480dedc09c932b357c.png +0 -0
- package/style/visual-screenshots (1)/images/bc69c3fc828d0ccd43620f5d7789f687.png +0 -0
- package/style/visual-screenshots (1)/images/bc6a45c5e234c06fe2909be16df5cd68.png +0 -0
- package/style/visual-screenshots (1)/images/bc7fbfc8cfa6fbaf42c181a83bc8f12e.png +0 -0
- package/style/visual-screenshots (1)/images/bc812929e7194062888770b42ea680fa.png +0 -0
- package/style/visual-screenshots (1)/images/bcf29c250245fcd6d4cd80fbb2076fe6.png +0 -0
- package/style/visual-screenshots (1)/images/bd0adcbbc6b9f54fd8dc2c45f91118cf.png +0 -0
- package/style/visual-screenshots (1)/images/bd2c0d240faaa73548693dd8792bd334.png +0 -0
- package/style/visual-screenshots (1)/images/bd3c8aca71ef1e1bfcf54c9bdf7ec0c1.png +0 -0
- package/style/visual-screenshots (1)/images/bd742a3ba78f04988baceee07b34b4c8.png +0 -0
- package/style/visual-screenshots (1)/images/bde82fcc550d92789d65c593e33b9fa1.png +0 -0
- package/style/visual-screenshots (1)/images/be0d5c5d87ffd9eb20686d37ded21477.png +0 -0
- package/style/visual-screenshots (1)/images/be2d1a5e2a20ec9e70974dfd8ad15c05.png +0 -0
- package/style/visual-screenshots (1)/images/be343f108940ac377accd7cd07cdd1e7.png +0 -0
- package/style/visual-screenshots (1)/images/be40fd335f837d2f5a1d803b3aed4c94.png +0 -0
- package/style/visual-screenshots (1)/images/bea6a7939bf5c8f3034f9f36d3aa83a0.png +0 -0
- package/style/visual-screenshots (1)/images/bed34ed4f9077f51952b51283f4b473b.png +0 -0
- package/style/visual-screenshots (1)/images/bedd63152750246fbfff2f3b8694840a.png +0 -0
- package/style/visual-screenshots (1)/images/bf112e6d28f4ea8ab3c84b88d685cb92.png +0 -0
- package/style/visual-screenshots (1)/images/bf1e7977779e36731e8cf90de8a2c018.png +0 -0
- package/style/visual-screenshots (1)/images/bfbf13672d796f88652747c1c627c225.png +0 -0
- package/style/visual-screenshots (1)/images/c14ed538a5d1e19c581b8a480a410873.png +0 -0
- package/style/visual-screenshots (1)/images/c1a6e457a74e6f1e39d8056a575c6b61.png +0 -0
- package/style/visual-screenshots (1)/images/c1bf639cb4ef73d3097a86bbe242e67b.png +0 -0
- package/style/visual-screenshots (1)/images/c1e92e74a76d59360620dd36a44b48d7.png +0 -0
- package/style/visual-screenshots (1)/images/c25a03ca4b6a75b60ca989c922a8c0ea.png +0 -0
- package/style/visual-screenshots (1)/images/c29a6ce74d404486b42547c80ac64827.png +0 -0
- package/style/visual-screenshots (1)/images/c2a8fd8eb01504bdf199bc631948fd65.png +0 -0
- package/style/visual-screenshots (1)/images/c2b2a82c12745e02edc5a4296e64952e.png +0 -0
- package/style/visual-screenshots (1)/images/c2e70eb9bba973017e04fde58f20439f.png +0 -0
- package/style/visual-screenshots (1)/images/c31b279c27c044ff8023b74161774d65.png +0 -0
- package/style/visual-screenshots (1)/images/c3de791621e788d6d096d488fdbf7eb7.png +0 -0
- package/style/visual-screenshots (1)/images/c4347eb0e8a14227ad18be6b9de1cbc7.png +0 -0
- package/style/visual-screenshots (1)/images/c45a7afc0498379e5b620ff4394e1759.png +0 -0
- package/style/visual-screenshots (1)/images/c4bd15f6119ec6a9f86c7311605b8e9a.png +0 -0
- package/style/visual-screenshots (1)/images/c5d033ba89e8621d33f0c1251f26cb94.png +0 -0
- package/style/visual-screenshots (1)/images/c5f4925f4e800c08c097ac6cb57973c4.png +0 -0
- package/style/visual-screenshots (1)/images/c645ca1d792395177ed9f550dc65ef98.png +0 -0
- package/style/visual-screenshots (1)/images/c66f1911986c1798aa132cfda4c757c1.png +0 -0
- package/style/visual-screenshots (1)/images/c6835996ac4b2b3f962a7c89245faa9e.png +0 -0
- package/style/visual-screenshots (1)/images/c7295480cd7fd4a11a50458bb4bfc9c3.png +0 -0
- package/style/visual-screenshots (1)/images/c76344aa17e7856258e6a7aba903caab.png +0 -0
- package/style/visual-screenshots (1)/images/c7bbfb83d1e415c898256cc0fdcce3ca.png +0 -0
- package/style/visual-screenshots (1)/images/c7c0f8a05585087c37d8209208bbcb54.png +0 -0
- package/style/visual-screenshots (1)/images/c7de1a12552658b7fe3ce32a7f7ffb3e.png +0 -0
- package/style/visual-screenshots (1)/images/c914e1a43cca34efae86f296ac56fdee.png +0 -0
- package/style/visual-screenshots (1)/images/c9861de44663e597f55adc84ea88e5fc.png +0 -0
- package/style/visual-screenshots (1)/images/c99d35eeb0dc348c34f4c8a9fe1c5f1d.png +0 -0
- package/style/visual-screenshots (1)/images/ca32c8781f959efc16e24eeda14cc2d5.png +0 -0
- package/style/visual-screenshots (1)/images/ca9c87751da7c73377da05d1cbf34974.png +0 -0
- package/style/visual-screenshots (1)/images/cab16e07722c54b790e38a8b9995af8f.png +0 -0
- package/style/visual-screenshots (1)/images/cb4e5d44970f3d22cfd664c95d5c23c6.png +0 -0
- package/style/visual-screenshots (1)/images/cb99b0bf33401c42eebea1020004a1a8.png +0 -0
- package/style/visual-screenshots (1)/images/cba574213771f455a9bd90fdd5711b82.png +0 -0
- package/style/visual-screenshots (1)/images/cc30aaecf3c497e88d6e7aecae1b7583.png +0 -0
- package/style/visual-screenshots (1)/images/cc690d6b70d361022b64cfd7e15aced7.png +0 -0
- package/style/visual-screenshots (1)/images/ccc7eefe88ff7124ce9b7256a2754224.png +0 -0
- package/style/visual-screenshots (1)/images/cd0ec559f03f247915ac7f28d051477f.png +0 -0
- package/style/visual-screenshots (1)/images/cda5b907bdad7cc13b55cb525ff72402.png +0 -0
- package/style/visual-screenshots (1)/images/ce19129cba94fa6ccfd2ab5416d93033.png +0 -0
- package/style/visual-screenshots (1)/images/ce3c54aab036c6395dd8817abc6acfc6.png +0 -0
- package/style/visual-screenshots (1)/images/ce4c143e3f25acaecf95fc6c74091386.png +0 -0
- package/style/visual-screenshots (1)/images/ce639e1186fedb84b5d709bf36126612.png +0 -0
- package/style/visual-screenshots (1)/images/ceca1dbf2a40a6524da989acf8c45825.png +0 -0
- package/style/visual-screenshots (1)/images/cecd8cd95992457e1748c3bb0dd14f35.png +0 -0
- package/style/visual-screenshots (1)/images/ced9cb27f2fe15debe7cae42e1b6347d.png +0 -0
- package/style/visual-screenshots (1)/images/cf8ad194e11dfdb8aea6017def809c6f.png +0 -0
- package/style/visual-screenshots (1)/images/cf95c3fcdb08ca9fd096c2aa90538a9f.png +0 -0
- package/style/visual-screenshots (1)/images/d055162ca44e10714f581c72517de67a.png +0 -0
- package/style/visual-screenshots (1)/images/d0907dbf3bbf9051d9ab0090a74eb8a2.png +0 -0
- package/style/visual-screenshots (1)/images/d0dbadb5f8a71fe6a666cf4741ba583e.png +0 -0
- package/style/visual-screenshots (1)/images/d0fc1daaab9d8154ac99b9923aca965e.png +0 -0
- package/style/visual-screenshots (1)/images/d10379d630b08ba69cdbadef68160b74.png +0 -0
- package/style/visual-screenshots (1)/images/d1dec19c84cc7d9d44d9bdbdc4ed0113.png +0 -0
- package/style/visual-screenshots (1)/images/d1ecf153cbe7e6e5ab9df3ba963ac56a.png +0 -0
- package/style/visual-screenshots (1)/images/d2085cde486b22d26ed3ed7dd092ac67.png +0 -0
- package/style/visual-screenshots (1)/images/d21f0611ffb064596292ba09f7ae0aa7.png +0 -0
- package/style/visual-screenshots (1)/images/d26da906f6e40a9f2de474ef00ffe192.png +0 -0
- package/style/visual-screenshots (1)/images/d32bdba3c211974c488f05e49fdbd38e.png +0 -0
- package/style/visual-screenshots (1)/images/d3f2e40808a135432120eec842002667.png +0 -0
- package/style/visual-screenshots (1)/images/d3f4fb7a3520050add88a228446786c0.png +0 -0
- package/style/visual-screenshots (1)/images/d42695727875489f5c823fc6a7637fc0.png +0 -0
- package/style/visual-screenshots (1)/images/d43099f8107adb7d25c029fd861236c7.png +0 -0
- package/style/visual-screenshots (1)/images/d465de97945852f83e9cfec896fda7fd.png +0 -0
- package/style/visual-screenshots (1)/images/d4cb357a97d0069493f671c36973b023.png +0 -0
- package/style/visual-screenshots (1)/images/d507e6178365edabfc44712f507b1ad4.png +0 -0
- package/style/visual-screenshots (1)/images/d5c0ef8532ff82ac36069cd1a325ef27.png +0 -0
- package/style/visual-screenshots (1)/images/d5d677892ed26746228c30990678ac38.png +0 -0
- package/style/visual-screenshots (1)/images/d5ea4a9c77534f236c32e8f31e078587.png +0 -0
- package/style/visual-screenshots (1)/images/d5f1ba6ddf9bbc40e86be0e2b82118af.png +0 -0
- package/style/visual-screenshots (1)/images/d6069a71d1cf53673964d866460d32c8.png +0 -0
- package/style/visual-screenshots (1)/images/d6242fd259465d2ba316d672684afcf7.png +0 -0
- package/style/visual-screenshots (1)/images/d6b1c4c2db737fef0105bc33cda83309.png +0 -0
- package/style/visual-screenshots (1)/images/d6c65a3c2f45d3f68984a0be5f3490bb.png +0 -0
- package/style/visual-screenshots (1)/images/d6f1781682597261b255669cebe81e42.png +0 -0
- package/style/visual-screenshots (1)/images/d7d9fb5a7dfc870527fb24b3642a56e3.png +0 -0
- package/style/visual-screenshots (1)/images/d7deed321c78b937b9aac780d75a67e6.png +0 -0
- package/style/visual-screenshots (1)/images/d8291cc7ad6e1607c344ed2ed1368ea3.png +0 -0
- package/style/visual-screenshots (1)/images/d8560f2f2aeb2cf5601aac513f502b55.png +0 -0
- package/style/visual-screenshots (1)/images/d8ba46aafe0f9c6e1a513c118e4ed9bc.png +0 -0
- package/style/visual-screenshots (1)/images/d95148fef77af3db17d99a9e6d582f37.png +0 -0
- package/style/visual-screenshots (1)/images/d9579cafca730bedcd047d6b5e00d6a4.png +0 -0
- package/style/visual-screenshots (1)/images/d98fa9b6727f84959b2953eb2fb4bbd9.png +0 -0
- package/style/visual-screenshots (1)/images/d9ccd1f0853f04288d98faaa99ffd839.png +0 -0
- package/style/visual-screenshots (1)/images/d9d48b2652b1aec6a09d29ff489a2559.png +0 -0
- package/style/visual-screenshots (1)/images/d9d72a2b10b10048726ee220b48fa527.png +0 -0
- package/style/visual-screenshots (1)/images/d9d8147e7f3bb24b517f342fcccde022.png +0 -0
- package/style/visual-screenshots (1)/images/d9df19d7691aa789d2a8bc95bf35da2c.png +0 -0
- package/style/visual-screenshots (1)/images/da1074f521e0588e392120962859f25f.png +0 -0
- package/style/visual-screenshots (1)/images/da3533dfa11d516896891b192864e447.png +0 -0
- package/style/visual-screenshots (1)/images/dae067c3ccb9466b05711591ecd99896.png +0 -0
- package/style/visual-screenshots (1)/images/db652f7540592f22fce8d51c2db86e93.png +0 -0
- package/style/visual-screenshots (1)/images/db68bc1a1dabafb95a485a230f9a8891.png +0 -0
- package/style/visual-screenshots (1)/images/db9207243bf814e40de5d4f04ca70316.png +0 -0
- package/style/visual-screenshots (1)/images/db9f75240f51bca9b761494cedeccff2.png +0 -0
- package/style/visual-screenshots (1)/images/dbc774ff92faa624b4987219fa52042d.png +0 -0
- package/style/visual-screenshots (1)/images/dc0de0f379b7b76e387beb9d57e912eb.png +0 -0
- package/style/visual-screenshots (1)/images/dd3dcde1007bc96a7e41eeb1436699a5.png +0 -0
- package/style/visual-screenshots (1)/images/dda39199ff0717086ab54dd718ad525f.png +0 -0
- package/style/visual-screenshots (1)/images/ddcd258c6ad4c8489c1b51df313691e9.png +0 -0
- package/style/visual-screenshots (1)/images/ddcf43a676ca66b76dd293e2217bff54.png +0 -0
- package/style/visual-screenshots (1)/images/ddf8772071d057082129df7ddb91cb63.png +0 -0
- package/style/visual-screenshots (1)/images/de538ffe7bb41fe54ed51f548dbe2fba.png +0 -0
- package/style/visual-screenshots (1)/images/df18d193dd77c73ceb593e100945b30d.png +0 -0
- package/style/visual-screenshots (1)/images/df7a11e9552448272332cb2a6d8194b8.png +0 -0
- package/style/visual-screenshots (1)/images/df8a111e64e1601833438a267e53d53e.png +0 -0
- package/style/visual-screenshots (1)/images/dfb1101ae11b4e4cbcd14e109f2c2810.png +0 -0
- package/style/visual-screenshots (1)/images/dfd25ea8862f0ef09292b87930278f8b.png +0 -0
- package/style/visual-screenshots (1)/images/e010fa0f10828dfec180f664eb3b904e.png +0 -0
- package/style/visual-screenshots (1)/images/e019e72c9310bf80c7d8a060b05b9c37.png +0 -0
- package/style/visual-screenshots (1)/images/e0fad740e1ea1190ae5bafcc312b7345.png +0 -0
- package/style/visual-screenshots (1)/images/e129f142d3b5053ef5be1eb5b2c3e892.png +0 -0
- package/style/visual-screenshots (1)/images/e166d553d849e0c78ef876004aad7a5f.png +0 -0
- package/style/visual-screenshots (1)/images/e16f3ba70a3637f3220f043e2135e130.png +0 -0
- package/style/visual-screenshots (1)/images/e1e5fe1fd5d6ee275513f269c86d6305.png +0 -0
- package/style/visual-screenshots (1)/images/e23bd037d12d40a0719647cc0e872a58.png +0 -0
- package/style/visual-screenshots (1)/images/e2a3a5bb4365d8f726c66cdd0502df93.png +0 -0
- package/style/visual-screenshots (1)/images/e2c01035d03336301a1d9b296c8d9ab3.png +0 -0
- package/style/visual-screenshots (1)/images/e2d8e8137e7670d15c4607f1d656477f.png +0 -0
- package/style/visual-screenshots (1)/images/e302c8e4a9ea160a0a19968825d55dab.png +0 -0
- package/style/visual-screenshots (1)/images/e34b18aac8583e91e021b41bbfd7fd5f.png +0 -0
- package/style/visual-screenshots (1)/images/e356cf56ccaa076bbc8d34dc8f793843.png +0 -0
- package/style/visual-screenshots (1)/images/e35d22101819324c038cd263e9c8f518.png +0 -0
- package/style/visual-screenshots (1)/images/e3805efcd137ad98512fa1c3f8d54a1d.png +0 -0
- package/style/visual-screenshots (1)/images/e39ce053c84fc3a5528ac4b5641ac9cf.png +0 -0
- package/style/visual-screenshots (1)/images/e3a3c7767a5eb9522dea438bff6728cc.png +0 -0
- package/style/visual-screenshots (1)/images/e3aab7603407b6e1b444b0eac170a7ec.png +0 -0
- package/style/visual-screenshots (1)/images/e43a752514e8b393cb628520b605b584.png +0 -0
- package/style/visual-screenshots (1)/images/e442163823ed8edcc7160818be69b398.png +0 -0
- package/style/visual-screenshots (1)/images/e4b10dde183f07a84513d76d429a6958.png +0 -0
- package/style/visual-screenshots (1)/images/e4d50b654335e71fc4967b82c344dbfe.png +0 -0
- package/style/visual-screenshots (1)/images/e51ca2c2a84b03fc98f79f02fe7068aa.png +0 -0
- package/style/visual-screenshots (1)/images/e58ef5ed950fbb2b1079d74d45b7c881.png +0 -0
- package/style/visual-screenshots (1)/images/e5ade203143dc82491aa076121660e52.png +0 -0
- package/style/visual-screenshots (1)/images/e605ecbc474952712389539463a04aa7.png +0 -0
- package/style/visual-screenshots (1)/images/e6262e247906000955ae8374d655a906.png +0 -0
- package/style/visual-screenshots (1)/images/e6595c721f80b610721aaeeb5e2f75a6.png +0 -0
- package/style/visual-screenshots (1)/images/e6709d9c191735263eb3b486e7a72f85.png +0 -0
- package/style/visual-screenshots (1)/images/e6d314422345a30bf6c0ef3e18e583a0.png +0 -0
- package/style/visual-screenshots (1)/images/e6d939c8648a17c13549f5f2adb346e7.png +0 -0
- package/style/visual-screenshots (1)/images/e6dbee568bfdc18e352b077e374ff82f.png +0 -0
- package/style/visual-screenshots (1)/images/e703bac13e2532ce5533d2a57a8a5fa6.png +0 -0
- package/style/visual-screenshots (1)/images/e716cb5e49fdadf37afefab471babf94.png +0 -0
- package/style/visual-screenshots (1)/images/e7441187368963e6b130042df812ef91.png +0 -0
- package/style/visual-screenshots (1)/images/e7c2f6b6c968145071f9cb8636dfbc3e.png +0 -0
- package/style/visual-screenshots (1)/images/e7e9cbbc3d0dd144406d6a315ec0ddc0.png +0 -0
- package/style/visual-screenshots (1)/images/e7fa6277441b9b69cc3b5306e16b7cf1.png +0 -0
- package/style/visual-screenshots (1)/images/e83fb6530e1c56b78ecf6b7ecf9093b4.png +0 -0
- package/style/visual-screenshots (1)/images/e84d5f9378fbad753243b00f534b5a2b.png +0 -0
- package/style/visual-screenshots (1)/images/e874c84e2c3efc6531e1ed444ef48e0c.png +0 -0
- package/style/visual-screenshots (1)/images/e880df04bcd581fdc14320972bb587c7.png +0 -0
- package/style/visual-screenshots (1)/images/e888e0e6d4a78e02b76328fa84356ca8.png +0 -0
- package/style/visual-screenshots (1)/images/e8ae475c96c0350cab5788186441a468.png +0 -0
- package/style/visual-screenshots (1)/images/e8b5543222dd07074f913c0ee347cc2a.png +0 -0
- package/style/visual-screenshots (1)/images/e92d837bf473dd88b1644ce81eeb8271.png +0 -0
- package/style/visual-screenshots (1)/images/e9690ff4793f30325dfc007d07f11515.png +0 -0
- package/style/visual-screenshots (1)/images/e9a4edf0d472871407e3de2a94491d38.png +0 -0
- package/style/visual-screenshots (1)/images/e9da22cdb0b57bbbb78d72fa243613f1.png +0 -0
- package/style/visual-screenshots (1)/images/e9f7a5fc6028e6009408ba7587604837.png +0 -0
- package/style/visual-screenshots (1)/images/ea87140d4d01e99436eb8517e1a59744.png +0 -0
- package/style/visual-screenshots (1)/images/eb1e5e278264b3344fd8251f8e3a567c.png +0 -0
- package/style/visual-screenshots (1)/images/eb270de24170c48625abe27e1add013b.png +0 -0
- package/style/visual-screenshots (1)/images/eb321262ddafb26c0121bd595505ffd4.png +0 -0
- package/style/visual-screenshots (1)/images/eb89e9322f47193680a195eedec9ca1f.png +0 -0
- package/style/visual-screenshots (1)/images/eb8ba90ad716449ab1fbe18715131465.png +0 -0
- package/style/visual-screenshots (1)/images/ebea496ec420dde6eb11929ef25c9d4e.png +0 -0
- package/style/visual-screenshots (1)/images/ec06a26e681c9d07ecb4aa29d4e551f4.png +0 -0
- package/style/visual-screenshots (1)/images/ec418171a7341bd39a64ee5e1405de5c.png +0 -0
- package/style/visual-screenshots (1)/images/ec801a1f7ded7e4f72b3b83d56ef137b.png +0 -0
- package/style/visual-screenshots (1)/images/eceac800e5e5ec35a7ac973102588b9a.png +0 -0
- package/style/visual-screenshots (1)/images/ed32af8a6de2ef712782d8c700d5ea9c.png +0 -0
- package/style/visual-screenshots (1)/images/ed996049ed03540673123208a1939af9.png +0 -0
- package/style/visual-screenshots (1)/images/edea0089834ada9ac7c1955bbc7b60e8.png +0 -0
- package/style/visual-screenshots (1)/images/ee0321657e33c16d1cafb4124cc8b84e.png +0 -0
- package/style/visual-screenshots (1)/images/ee2e3f6e90b8c2a479d187d5c33257d9.png +0 -0
- package/style/visual-screenshots (1)/images/ee5c6318a17593c06dc4893c84e64535.png +0 -0
- package/style/visual-screenshots (1)/images/ee880fd8c1965895a4c79cf4c744feac.png +0 -0
- package/style/visual-screenshots (1)/images/eed96dc07ed46b9585a3fa2f9655268f.png +0 -0
- package/style/visual-screenshots (1)/images/efcf97ad2d48fcce21b8052fb8e1f02d.png +0 -0
- package/style/visual-screenshots (1)/images/f02927c03369f309483a9c4ddf1dd918.png +0 -0
- package/style/visual-screenshots (1)/images/f033f0f98be280ace4c6d4b0366bb46f.png +0 -0
- package/style/visual-screenshots (1)/images/f039bdda30367e329cf997e85fe4c5e8.png +0 -0
- package/style/visual-screenshots (1)/images/f04add34ff27aa15ee72e77d143d3ed8.png +0 -0
- package/style/visual-screenshots (1)/images/f05fc5650db3e0ecc2baf3860da0d195.png +0 -0
- package/style/visual-screenshots (1)/images/f095476fc0248cf27fa814706177534f.png +0 -0
- package/style/visual-screenshots (1)/images/f0ca029abc93f4e8105da3e5ab56e1c4.png +0 -0
- package/style/visual-screenshots (1)/images/f136123d6a6e67a75080296043b5e5de.png +0 -0
- package/style/visual-screenshots (1)/images/f14f173c0407db4e2e0d465809e3035f.png +0 -0
- package/style/visual-screenshots (1)/images/f1c37fd272da405acfb07e2bcd9e2e86.png +0 -0
- package/style/visual-screenshots (1)/images/f1d9cb85975d8f2259098078a9801e0f.png +0 -0
- package/style/visual-screenshots (1)/images/f1ec44ad9bd197b6cf6709425b1f493c.png +0 -0
- package/style/visual-screenshots (1)/images/f2357c90c5bc52def3fac87e0ec9997a.png +0 -0
- package/style/visual-screenshots (1)/images/f27d1e0db5abfe19d41b8158d4d2e864.png +0 -0
- package/style/visual-screenshots (1)/images/f28b1b0716ee2f45646a13b5b5c25ece.png +0 -0
- package/style/visual-screenshots (1)/images/f2a9936c632f6d5df93af4b94ca90234.png +0 -0
- package/style/visual-screenshots (1)/images/f2e3472901c35c71c0182432ed609d7f.png +0 -0
- package/style/visual-screenshots (1)/images/f3492d235f8072e4adf1060958453ee6.png +0 -0
- package/style/visual-screenshots (1)/images/f3e92ee96aa91f49801ea4202f6081ac.png +0 -0
- package/style/visual-screenshots (1)/images/f43bdfc49eaa4bc64a3d388173c76744.png +0 -0
- package/style/visual-screenshots (1)/images/f43fae61c6f1cfb638fd3741f3742d5b.png +0 -0
- package/style/visual-screenshots (1)/images/f44444b4e7bcd9cc38987cfbca3c88bc.png +0 -0
- package/style/visual-screenshots (1)/images/f457b6c69704125d620b062e0a63c81d.png +0 -0
- package/style/visual-screenshots (1)/images/f49bdba18143e37cebfccebb84983aaa.png +0 -0
- package/style/visual-screenshots (1)/images/f4a592740204a611f064fd861eea879f.png +0 -0
- package/style/visual-screenshots (1)/images/f4b874f85d61abcdb5d4dac56574e983.png +0 -0
- package/style/visual-screenshots (1)/images/f4d48a8d20e7217ab3bd4eb920e2e90b.png +0 -0
- package/style/visual-screenshots (1)/images/f4fa32cbd842631dda4967bb7b0805f4.png +0 -0
- package/style/visual-screenshots (1)/images/f5a634ee1f8883b9a9910709b1a70dd9.png +0 -0
- package/style/visual-screenshots (1)/images/f5f154f17b8ddd7fe6584229e3e433dc.png +0 -0
- package/style/visual-screenshots (1)/images/f5f5aa0c94bc0096ca632bde832e4ac0.png +0 -0
- package/style/visual-screenshots (1)/images/f611a4b1de325f7426c8b29b43cfae35.png +0 -0
- package/style/visual-screenshots (1)/images/f63233f9dc04d7dcfd4ff56369f0b130.png +0 -0
- package/style/visual-screenshots (1)/images/f692554ff308ca1cd0fbe7a22b3b22ca.png +0 -0
- package/style/visual-screenshots (1)/images/f75eda47bbe4bbe2ea30a65b7856a44b.png +0 -0
- package/style/visual-screenshots (1)/images/f781be55c666aac6c83ca4d07e9c42ca.png +0 -0
- package/style/visual-screenshots (1)/images/f7bf00972a29fdf599c8217b28de96d6.png +0 -0
- package/style/visual-screenshots (1)/images/f86fea7ffab0866bda8a3b414f7cd3b7.png +0 -0
- package/style/visual-screenshots (1)/images/f87eb71c300ab4b2d498be9a55ee1618.png +0 -0
- package/style/visual-screenshots (1)/images/f8b36602184f5158860506fe64079c89.png +0 -0
- package/style/visual-screenshots (1)/images/f8ee607f6421ba60f973b9bff376ae28.png +0 -0
- package/style/visual-screenshots (1)/images/f9080ba22d397d83f09047ebdfe84239.png +0 -0
- package/style/visual-screenshots (1)/images/f9145ef284d04f6336229ff666af70e3.png +0 -0
- package/style/visual-screenshots (1)/images/f93aaf6c9ea9f70abb350f5255767c3f.png +0 -0
- package/style/visual-screenshots (1)/images/f95685e60e185b4b3da22bb8bf70e7e2.png +0 -0
- package/style/visual-screenshots (1)/images/f97ab81b758db662a2eb1617a6efe217.png +0 -0
- package/style/visual-screenshots (1)/images/fa7325e4f52bb809c79c2f8df2699b93.png +0 -0
- package/style/visual-screenshots (1)/images/fa793989f4717dd55b1c603086785688.png +0 -0
- package/style/visual-screenshots (1)/images/faab9362d2ff082b2ec255bd3f87f52c.png +0 -0
- package/style/visual-screenshots (1)/images/fad9c13edad825e537ef70d1f5ac9ffc.png +0 -0
- package/style/visual-screenshots (1)/images/faf67bf2491d228a3147ca1b197ce7c0.png +0 -0
- package/style/visual-screenshots (1)/images/fb0bba6fa80d2f1d58b9fe1a3cae80fd.png +0 -0
- package/style/visual-screenshots (1)/images/fb21968682604e963f859ce4a3063449.png +0 -0
- package/style/visual-screenshots (1)/images/fb2756dae46b9f5078e264cd3419bb7f.png +0 -0
- package/style/visual-screenshots (1)/images/fc344f5b8408cc30060f888515927391.png +0 -0
- package/style/visual-screenshots (1)/images/fca29f7a114d6e4df2ca093e1d9cf90a.png +0 -0
- package/style/visual-screenshots (1)/images/fced6958bf1d22d95b4609bb6cb90c07.png +0 -0
- package/style/visual-screenshots (1)/images/fd92b9e1229dbd6160436f5b92cd21b0.png +0 -0
- package/style/visual-screenshots (1)/images/fdf7376c972f3c4f40789c0f217c0480.png +0 -0
- package/style/visual-screenshots (1)/images/fe13a66e7e5ede78792937bf010f022c.png +0 -0
- package/style/visual-screenshots (1)/images/fe2c4234c413f4ad2d054fd091242f8e.png +0 -0
- package/style/visual-screenshots (1)/images/fe4603d37d7b7abc55ebda66bb81b8d9.png +0 -0
- package/style/visual-screenshots (1)/images/fe9188d474135ba66971a9ea60921c3d.png +0 -0
- package/style/visual-screenshots (1)/images/febb9b60ded19124b91a836fcbc37936.png +0 -0
- package/style/visual-screenshots (1)/images/fedb6514016e34df2fcb29eef107d385.png +0 -0
- package/style/visual-screenshots (1)/images/ff5d801d62c71a38028c2d406af30b8f.png +0 -0
- package/style/visual-screenshots (1)/images/ffa3e2813a91c22ec33346792ba47461.png +0 -0
- package/style/visual-screenshots (1)/images/ffb7b8ff61c2ce675eaeaa8104a3f178.png +0 -0
|
@@ -1,4430 +0,0 @@
|
|
|
1
|
-
import { C as ChangeManager } from './change-manager-6a7eb88c.js';
|
|
2
|
-
import { d as domNodeSubjectFactory } from './dom-node-subject-observer-factory-4401eb10.js';
|
|
3
|
-
import { c as VegaInternalRichTextEditorFlushChanges, d as VegaInternalRichTextEditorSelectionRangeChange } from './vega-internal-event-id-49fef150.js';
|
|
4
|
-
import { c as camelToDashCase } from './string-a953eafc.js';
|
|
5
|
-
import { L as LogUtility } from './global-slimmer-registry-17c4efd4.js';
|
|
6
|
-
import { i as isNonNullable } from './type-guard-12f7654b.js';
|
|
7
|
-
import { g as generateUUID } from './create-public-api-runtime-metrics-slimmer-bedf3a1e.js';
|
|
8
|
-
import { V as VegaInternalThemeManager } from './dark-mode-style-controller-de88a117.js';
|
|
9
|
-
import { c as cleanObject } from './object-66c37948.js';
|
|
10
|
-
import { f as findParent } from './ui-bb99c0c2.js';
|
|
11
|
-
|
|
12
|
-
var InternalAnnotationTypeEnum;
|
|
13
|
-
(function (InternalAnnotationTypeEnum) {
|
|
14
|
-
InternalAnnotationTypeEnum["SELECTION_RANGE"] = "SELECTION_RANGE";
|
|
15
|
-
InternalAnnotationTypeEnum["CLEAR_FORMATTING"] = "CLEAR_FORMATTING";
|
|
16
|
-
InternalAnnotationTypeEnum["LINK_GROUP"] = "LINK_GROUP";
|
|
17
|
-
})(InternalAnnotationTypeEnum || (InternalAnnotationTypeEnum = {}));
|
|
18
|
-
/**
|
|
19
|
-
* Abstract class for all annotations
|
|
20
|
-
*/
|
|
21
|
-
class Annotation {
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
var BlockAnnotationTypeEnum;
|
|
25
|
-
(function (BlockAnnotationTypeEnum) {
|
|
26
|
-
BlockAnnotationTypeEnum["ALIGNMENT"] = "ALIGNMENT";
|
|
27
|
-
BlockAnnotationTypeEnum["TEXT_STYLE"] = "TEXT_STYLE";
|
|
28
|
-
BlockAnnotationTypeEnum["INDENT"] = "INDENT";
|
|
29
|
-
BlockAnnotationTypeEnum["LIST"] = "LIST";
|
|
30
|
-
BlockAnnotationTypeEnum["INTERNAL_WRAPPER"] = "INTERNAL_WRAPPER";
|
|
31
|
-
})(BlockAnnotationTypeEnum || (BlockAnnotationTypeEnum = {}));
|
|
32
|
-
/**
|
|
33
|
-
* BlockAnnotation is an abstract class that represents a block annotation.
|
|
34
|
-
*/
|
|
35
|
-
class BlockAnnotation extends Annotation {
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* This class is responsible for keeping track of the DOM elements and their corresponding entities.
|
|
40
|
-
*/
|
|
41
|
-
class StateEntityRenderingRegistry {
|
|
42
|
-
constructor() {
|
|
43
|
-
this.domToEntity = new WeakMap();
|
|
44
|
-
this.entityToDOM = new WeakMap();
|
|
45
|
-
this.contentEntityToRootDom = new Map();
|
|
46
|
-
this.rootDomToContentEntity = new WeakMap();
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Registers a DOM element and its corresponding entity.
|
|
50
|
-
*
|
|
51
|
-
* @param {HTMLElement} dom The DOM element to register.
|
|
52
|
-
* @param {RTEBlock | RTENode | VegaRTEContent} entity The entity to register.
|
|
53
|
-
*/
|
|
54
|
-
register(dom, entity) {
|
|
55
|
-
if (!this.isVegaRTEContent(entity)) {
|
|
56
|
-
this.domToEntity.set(dom, entity);
|
|
57
|
-
this.entityToDOM.set(entity, dom);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
this.registerRootDomAndContentEntity(dom, entity);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Retrieves the entity corresponding to a DOM element.
|
|
65
|
-
*
|
|
66
|
-
* @param {HTMLElement} dom The DOM element to retrieve the entity for.
|
|
67
|
-
* @returns {Nullable<RTEBlock | RTENode>} The entity corresponding to the DOM element, or null if not found.
|
|
68
|
-
*/
|
|
69
|
-
getEntityByDOM(dom) {
|
|
70
|
-
return this.domToEntity.get(dom);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Retrieves the DOM element corresponding to an entity.
|
|
74
|
-
*
|
|
75
|
-
* @param {RTEBlock | RTENode} entity The entity to retrieve the DOM element for.
|
|
76
|
-
* @returns {Nullable<HTMLElement>} The DOM element corresponding to the entity, or null if not found.
|
|
77
|
-
*/
|
|
78
|
-
getDOMByEntity(entity) {
|
|
79
|
-
if (!this.isVegaRTEContent(entity)) {
|
|
80
|
-
return this.entityToDOM.get(entity);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
return this.contentEntityToRootDom.get(entity);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Delete the dirty element to entity ref.
|
|
88
|
-
*
|
|
89
|
-
* @example Convert text node to the link node, the old span will change to the link wrapper element, and there will be a new text span, so we need remove the old span ref from the map.
|
|
90
|
-
* @param {HTMLElement} dom - The dirty element ref.
|
|
91
|
-
*/
|
|
92
|
-
removeDirtyDomRef(dom) {
|
|
93
|
-
this.domToEntity.delete(dom);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Bind the root dom ref and content entity.
|
|
97
|
-
*
|
|
98
|
-
* @param {HTMLElement} dom - The vega rich text editor ref.
|
|
99
|
-
* @param {VegaRTEContent} contentEntity - The rich text editor value content.
|
|
100
|
-
*/
|
|
101
|
-
registerRootDomAndContentEntity(dom, contentEntity) {
|
|
102
|
-
const oldContent = this.rootDomToContentEntity.get(dom);
|
|
103
|
-
if (oldContent && oldContent !== contentEntity) {
|
|
104
|
-
this.contentEntityToRootDom.delete(oldContent);
|
|
105
|
-
}
|
|
106
|
-
this.rootDomToContentEntity.set(dom, contentEntity);
|
|
107
|
-
this.contentEntityToRootDom.set(contentEntity, dom);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Check the entity is VegaRTEContent instance.
|
|
111
|
-
*
|
|
112
|
-
* @param {VegaRTEContent | RTEBlock | RTENode} entity - The entity to check.
|
|
113
|
-
* @returns {entity is VegaRTEContent} - True if the entity is a VegaRTEContent instance, false otherwise.
|
|
114
|
-
*/
|
|
115
|
-
isVegaRTEContent(entity) {
|
|
116
|
-
return entity && entity.constructor.name === 'VegaRTEContent';
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const stateEntityRenderingRegistry = new StateEntityRenderingRegistry();
|
|
120
|
-
|
|
121
|
-
var ModifyContentActionType;
|
|
122
|
-
(function (ModifyContentActionType) {
|
|
123
|
-
ModifyContentActionType["DELETE_CHILDREN"] = "DELETE_CHILDREN";
|
|
124
|
-
ModifyContentActionType["DELETE_NEST_LIST"] = "DELETE_NEST_LIST";
|
|
125
|
-
ModifyContentActionType["UPDATE_TEXT"] = "UPDATE_TEXT";
|
|
126
|
-
ModifyContentActionType["REPLACE_SELECTED_TEXT"] = "REPLACE_SELECTED_TEXT";
|
|
127
|
-
ModifyContentActionType["APPEND_CHILDREN"] = "APPEND_CHILDREN";
|
|
128
|
-
ModifyContentActionType["INSERT_CHILDREN_AFTER"] = "INSERT_CHILDREN_AFTER";
|
|
129
|
-
ModifyContentActionType["INSERT_CHILDREN_BEFORE"] = "INSERT_CHILDREN_BEFORE";
|
|
130
|
-
ModifyContentActionType["SPLIT_BLOCK_WITH_NODE"] = "SPLIT_BLOCK_WITH_NODE";
|
|
131
|
-
ModifyContentActionType["REPLACE_CHILD_NODES"] = "REPLACE_CHILD_NODES";
|
|
132
|
-
ModifyContentActionType["REPLACE_NEST_LIST"] = "REPLACE_NEST_LIST";
|
|
133
|
-
ModifyContentActionType["MERGE_TWO_BLOCKS_NODES"] = "MERGE_TWO_BLOCKS_NODES";
|
|
134
|
-
ModifyContentActionType["INSERT_NEW_PARAGRAPH"] = "INSERT_NEW_PARAGRAPH";
|
|
135
|
-
ModifyContentActionType["LINE_BREAK_SINGLE_BLOCK"] = "LINE_BREAK_SINGLE_BLOCK";
|
|
136
|
-
ModifyContentActionType["LINE_BREAK_MULTIPLE_BLOCKS"] = "LINE_BREAK_MULTIPLE_BLOCKS";
|
|
137
|
-
ModifyContentActionType["TRANSFORM_LIST_BLOCK"] = "TRANSFORM_LIST_BLOCK";
|
|
138
|
-
ModifyContentActionType["TRANSFORM_PARAGRAPH_BLOCK"] = "TRANSFORM_PARAGRAPH_BLOCK";
|
|
139
|
-
ModifyContentActionType["DELETE_BLOCK_CONTENT"] = "DELETE_BLOCK_CONTENT";
|
|
140
|
-
ModifyContentActionType["INSERT_IMAGE_TO_BLOCK"] = "INSERT_IMAGE_TO_BLOCK";
|
|
141
|
-
ModifyContentActionType["UPDATE_IMAGE_NODE_URL"] = "UPDATE_IMAGE_NODE_URL";
|
|
142
|
-
ModifyContentActionType["TRANSFORM_TO_CODE_BLOCK"] = "TRANSFORM_TO_CODE_BLOCK";
|
|
143
|
-
ModifyContentActionType["UPDATE_CODE_BLOCK"] = "UPDATE_CODE_BLOCK";
|
|
144
|
-
ModifyContentActionType["SWITCH_OUT_FROM_CODE_BLOCK"] = "SWITCH_OUT_FROM_CODE_BLOCK";
|
|
145
|
-
ModifyContentActionType["DELETE_CODE_BLOCK"] = "DELETE_CODE_BLOCK";
|
|
146
|
-
ModifyContentActionType["UNLINK_LINK_GROUP"] = "UNLINK_LINK_GROUP";
|
|
147
|
-
ModifyContentActionType["LINK_GROUP_NODE_SPLIT"] = "LINK_GROUP_NODE_SPLIT";
|
|
148
|
-
ModifyContentActionType["DELETE_LINK_GROUP"] = "DELETE_LINK_GROUP";
|
|
149
|
-
ModifyContentActionType["UPDATE_CURSOR_POSITION"] = "UPDATE_CURSOR_POSITION";
|
|
150
|
-
ModifyContentActionType["INSERT_TEXT_TO_DECORATOR_NODE"] = "INSERT_TEXT_TO_DECORATOR_NODE";
|
|
151
|
-
ModifyContentActionType["INSERT_NODE_TO_NEAREST_ROOT"] = "INSERT_NODE_TO_NEAREST_ROOT";
|
|
152
|
-
ModifyContentActionType["PASTE_CONTENT"] = "PASTE_CONTENT";
|
|
153
|
-
})(ModifyContentActionType || (ModifyContentActionType = {}));
|
|
154
|
-
/**
|
|
155
|
-
* Abstract class for update node content, delete node, insert node
|
|
156
|
-
*/
|
|
157
|
-
class ModifyContentAction {
|
|
158
|
-
constructor() {
|
|
159
|
-
this.isFlushable = false;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Annotation to represent a link of grouped nodes
|
|
165
|
-
*/
|
|
166
|
-
class LinkGroupAnnotation extends Annotation {
|
|
167
|
-
constructor(groupKey) {
|
|
168
|
-
super();
|
|
169
|
-
this.type = InternalAnnotationTypeEnum.LINK_GROUP;
|
|
170
|
-
this.linkGroups = new Map();
|
|
171
|
-
this.linkGroups = new Map([[groupKey, []]]);
|
|
172
|
-
}
|
|
173
|
-
clone() {
|
|
174
|
-
const clonedAnnotation = new LinkGroupAnnotation('');
|
|
175
|
-
this.linkGroups.forEach((nodes, key) => {
|
|
176
|
-
clonedAnnotation.linkGroups.set(key, nodes.map((node) => node.clone(node.parent)));
|
|
177
|
-
});
|
|
178
|
-
return clonedAnnotation;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Convert the custom style, class and attribute to string which html can used
|
|
182
|
-
*
|
|
183
|
-
* @param {linkAnnotation} linkAnnotation current link annotation which saved custom style, class and attribute.
|
|
184
|
-
* @param {RTERenderContext} options - options.
|
|
185
|
-
* @returns {string} - string.
|
|
186
|
-
*/
|
|
187
|
-
toString(linkAnnotation, options) {
|
|
188
|
-
const attributes = this.toJsx(linkAnnotation, options);
|
|
189
|
-
return Object.entries(attributes)
|
|
190
|
-
.map(([key, value]) => {
|
|
191
|
-
const valueString = typeof value === 'string' ? value : this.formatStyleToString(value);
|
|
192
|
-
return `${camelToDashCase(key)}="${valueString}"`;
|
|
193
|
-
})
|
|
194
|
-
.join(' ');
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Convert the custom style, class and attribute to JSX attributes
|
|
198
|
-
*
|
|
199
|
-
* @param {linkAnnotation} linkAnnotation current link annotation which saved custom style, class and attribute.
|
|
200
|
-
* @param {RTERenderContext} options - options.
|
|
201
|
-
* @returns {Record<string, string | AnnotationStyle>} JSX used attributes.
|
|
202
|
-
*/
|
|
203
|
-
toJsx(linkAnnotation, options) {
|
|
204
|
-
const linkStyle = this.getStyle(linkAnnotation, options);
|
|
205
|
-
const linkClass = this.getClass(linkAnnotation, options);
|
|
206
|
-
const attributes = this.getAttribute(linkAnnotation);
|
|
207
|
-
if (linkClass.length > 0) {
|
|
208
|
-
attributes.class = linkClass.join(' ');
|
|
209
|
-
}
|
|
210
|
-
if (linkStyle && Object.keys(linkStyle).length > 0) {
|
|
211
|
-
attributes.style = linkStyle;
|
|
212
|
-
}
|
|
213
|
-
return attributes;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get the custom class for the annotation
|
|
217
|
-
*
|
|
218
|
-
* @param {linkAnnotation} linkAnnotation current link annotation which saved custom style, class and attribute.
|
|
219
|
-
* @param {RTERenderContext} options - options.
|
|
220
|
-
* @returns {string[]} Link class
|
|
221
|
-
*/
|
|
222
|
-
getClass(linkAnnotation, options) {
|
|
223
|
-
const linkClass = [];
|
|
224
|
-
if (linkAnnotation.link.customClass)
|
|
225
|
-
linkClass.push(...linkAnnotation.link.customClass);
|
|
226
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone) && linkAnnotation.useInternalStyle)
|
|
227
|
-
linkClass.push('v-rte--link');
|
|
228
|
-
return linkClass;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Get the custom style for the annotation
|
|
232
|
-
*
|
|
233
|
-
* @param {LinkAnnotation} linkAnnotation current link annotation which saved custom style, class and attribute.
|
|
234
|
-
* @param {RTERenderContext} options - options.
|
|
235
|
-
* @returns {AnnotationStyle} Link style
|
|
236
|
-
*/
|
|
237
|
-
getStyle(linkAnnotation, options) {
|
|
238
|
-
const linkStyle = {};
|
|
239
|
-
if (linkAnnotation.link.customStyle)
|
|
240
|
-
Object.assign(linkStyle, linkAnnotation.link.customStyle);
|
|
241
|
-
if ((options === null || options === void 0 ? void 0 : options.standalone) && linkAnnotation.useInternalStyle) {
|
|
242
|
-
linkStyle.color = 'rgba(var(--v-text-link, 19, 98, 226, 1))';
|
|
243
|
-
}
|
|
244
|
-
return linkStyle;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Get the custom attribute for the annotation
|
|
248
|
-
*
|
|
249
|
-
* @param {LinkAnnotation} linkAnnotation current link annotation which saved custom style, class and attribute.
|
|
250
|
-
* @returns {Record<string, string>} Link attributes
|
|
251
|
-
*/
|
|
252
|
-
getAttribute(linkAnnotation) {
|
|
253
|
-
const { href, customAttribute = {} } = linkAnnotation.link;
|
|
254
|
-
const useInternalStyle = linkAnnotation.useInternalStyle;
|
|
255
|
-
const target = customAttribute.target || (useInternalStyle ? '_blank' : '');
|
|
256
|
-
return Object.assign(Object.assign(Object.assign({}, customAttribute), (href ? { href } : useInternalStyle ? { href } : {})), (target ? { target } : {}));
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Convert style to string which can be used to html string.
|
|
260
|
-
*
|
|
261
|
-
* @param {AnnotationStyle} style Style object.
|
|
262
|
-
* @returns {string} Style string
|
|
263
|
-
*/
|
|
264
|
-
formatStyleToString(style) {
|
|
265
|
-
return Object.entries(style)
|
|
266
|
-
.map(([key, value]) => `${camelToDashCase(key)}: ${value};`)
|
|
267
|
-
.join(' ');
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Annotation to make block with horizontal alignment
|
|
273
|
-
*/
|
|
274
|
-
class HorizontalAlignmentAnnotation extends BlockAnnotation {
|
|
275
|
-
constructor(textAlign) {
|
|
276
|
-
super();
|
|
277
|
-
this.type = BlockAnnotationTypeEnum.ALIGNMENT;
|
|
278
|
-
this.textAlign = textAlign;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Generate the map item for the annotation
|
|
282
|
-
*
|
|
283
|
-
* @param {VegaRTEBlockAlignment} textAlign - Text alignment
|
|
284
|
-
* @returns {[BlockAnnotationTypeEnum.ALIGNMENT, HorizontalAlignmentAnnotation]} Map item for the annotation
|
|
285
|
-
*/
|
|
286
|
-
static from(textAlign) {
|
|
287
|
-
return [BlockAnnotationTypeEnum.ALIGNMENT, new HorizontalAlignmentAnnotation(textAlign)];
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Generate the JSON item of the annotation
|
|
291
|
-
*
|
|
292
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
293
|
-
*/
|
|
294
|
-
toJSON() {
|
|
295
|
-
return {
|
|
296
|
-
textAlign: this.textAlign,
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* @inheritDoc
|
|
301
|
-
*/
|
|
302
|
-
renderClass(options) {
|
|
303
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
304
|
-
return null;
|
|
305
|
-
switch (this.textAlign) {
|
|
306
|
-
case 'right':
|
|
307
|
-
case 'center':
|
|
308
|
-
case 'justify':
|
|
309
|
-
return `v-rte--horizontal-alignment-${this.textAlign}`;
|
|
310
|
-
case 'left':
|
|
311
|
-
default:
|
|
312
|
-
return `v-rte--horizontal-alignment-left`;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* @inheritDoc
|
|
317
|
-
*/
|
|
318
|
-
clone() {
|
|
319
|
-
return new HorizontalAlignmentAnnotation(this.textAlign);
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* @inheritDoc
|
|
323
|
-
*/
|
|
324
|
-
renderStyle(options) {
|
|
325
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
326
|
-
return null;
|
|
327
|
-
switch (this.textAlign) {
|
|
328
|
-
case 'right':
|
|
329
|
-
case 'center':
|
|
330
|
-
case 'justify':
|
|
331
|
-
return { textAlign: this.textAlign };
|
|
332
|
-
case 'left':
|
|
333
|
-
default:
|
|
334
|
-
return { textAlign: 'left' };
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* Annotation for block indentation
|
|
341
|
-
*/
|
|
342
|
-
class IndentAnnotation extends BlockAnnotation {
|
|
343
|
-
constructor(indent) {
|
|
344
|
-
super();
|
|
345
|
-
this.type = BlockAnnotationTypeEnum.INDENT;
|
|
346
|
-
this.indent = Math.max(0, indent);
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Generate the map item for the annotation
|
|
350
|
-
*
|
|
351
|
-
* @param {number} indent - Text alignment
|
|
352
|
-
* @returns {[BlockAnnotationTypeEnum.INDENT, IndentAnnotation]} Map item for the annotation
|
|
353
|
-
*/
|
|
354
|
-
static from(indent) {
|
|
355
|
-
return [BlockAnnotationTypeEnum.INDENT, new IndentAnnotation(indent)];
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Generate the JSON item of the annotation
|
|
359
|
-
*
|
|
360
|
-
* @returns {Nullable<Record<string, unknown>>} JSON representation of the annotation
|
|
361
|
-
*/
|
|
362
|
-
toJSON() {
|
|
363
|
-
return this.indent > 0 ? { indent: this.indent } : null;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* @inheritDoc
|
|
367
|
-
*/
|
|
368
|
-
clone() {
|
|
369
|
-
return new IndentAnnotation(this.indent);
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* @inheritDoc
|
|
373
|
-
*/
|
|
374
|
-
renderClass() {
|
|
375
|
-
return null;
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Generate the style for the annotation
|
|
379
|
-
*
|
|
380
|
-
* @returns {Nullable<AnnotationStyle>} - Annotation style
|
|
381
|
-
*/
|
|
382
|
-
renderStyle() {
|
|
383
|
-
return this.indent > 0 ? { marginLeft: `${this.indent * 16}px` } : null;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
* Registry for action handler interceptors, which can register and retrieve interceptors for specific actions and targets.
|
|
389
|
-
*/
|
|
390
|
-
class ActionHandlerInterceptorRegistry {
|
|
391
|
-
/**
|
|
392
|
-
* Bind a specific strategy to a special action type of the rich text node.
|
|
393
|
-
*
|
|
394
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
395
|
-
* @param {string} targetClass - The rich text node class name.
|
|
396
|
-
* @param {ActionHandlerInterceptor} strategy - The action handle strategy instance.
|
|
397
|
-
*/
|
|
398
|
-
static register(actionType, targetClass, strategy) {
|
|
399
|
-
if (!this.registry.has(targetClass)) {
|
|
400
|
-
this.registry.set(targetClass, new Map());
|
|
401
|
-
}
|
|
402
|
-
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
403
|
-
if (!this.registry.get(targetClass).has(actionType)) {
|
|
404
|
-
this.registry.get(targetClass).set(actionType, new Set());
|
|
405
|
-
}
|
|
406
|
-
this.registry.get(targetClass).get(actionType).add(strategy);
|
|
407
|
-
/* eslint-enable @typescript-eslint/no-non-null-assertion */
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Unregister the strategy for the specific action type and target class.
|
|
411
|
-
*
|
|
412
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
413
|
-
* @param {string} targetClass - The rich text node class name.
|
|
414
|
-
* @param {ActionHandlerInterceptor} strategy - The action handler interceptor instance.
|
|
415
|
-
*/
|
|
416
|
-
static unregister(actionType, targetClass, strategy) {
|
|
417
|
-
const strategyMap = this.registry.get(targetClass);
|
|
418
|
-
if (strategyMap) {
|
|
419
|
-
const strategySet = strategyMap.get(actionType);
|
|
420
|
-
if (strategySet) {
|
|
421
|
-
strategySet.delete(strategy);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Get the special interceptor strategy that before handle the action logic.
|
|
427
|
-
*
|
|
428
|
-
* @typedef T generic type
|
|
429
|
-
* @typedef target generic type
|
|
430
|
-
* @param {RTEActionType} action - The special action .
|
|
431
|
-
* @param {string} targetClass - The rich text node class name.
|
|
432
|
-
* @returns {Nullable<ActionHandlerInterceptor<T, target>>} - The action handler interceptor instance or null if not found.
|
|
433
|
-
*/
|
|
434
|
-
static get(action, targetClass) {
|
|
435
|
-
const targetClassName = targetClass.constructor.name;
|
|
436
|
-
const actionType = action instanceof ModifyContentAction ? action.type : action.constructor.name;
|
|
437
|
-
const strategyMap = this.registry.get(targetClassName);
|
|
438
|
-
if (strategyMap) {
|
|
439
|
-
const set = strategyMap.get(actionType);
|
|
440
|
-
if (set && set.size > 0) {
|
|
441
|
-
return Array.from(set).find((interceptor) => interceptor.canIntercept(action, targetClass));
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
ActionHandlerInterceptorRegistry.registry = new Map();
|
|
447
|
-
|
|
448
|
-
/**
|
|
449
|
-
* The strategies registry, contains static methods `register`, `get` and `getStrategyAndExecute`.
|
|
450
|
-
*/
|
|
451
|
-
class ActionHandleStrategyRegistry {
|
|
452
|
-
/**
|
|
453
|
-
* Bind a specific strategy to a special action type of the rich text node.
|
|
454
|
-
*
|
|
455
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
456
|
-
* @param {string} targetClass - The rich text node class name.
|
|
457
|
-
* @param {ActionHandleStrategy} strategy - The action handle strategy instance.
|
|
458
|
-
*/
|
|
459
|
-
static register(actionType, targetClass, strategy) {
|
|
460
|
-
if (!this.registry.has(targetClass)) {
|
|
461
|
-
this.registry.set(targetClass, new Map());
|
|
462
|
-
}
|
|
463
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
464
|
-
this.registry.get(targetClass).set(actionType, strategy);
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Unregister the strategy for the specific action type and target class.
|
|
468
|
-
*
|
|
469
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
470
|
-
* @param {string} targetClass - The rich text node class name.
|
|
471
|
-
*/
|
|
472
|
-
static unregister(actionType, targetClass) {
|
|
473
|
-
const strategyMap = this.registry.get(targetClass);
|
|
474
|
-
if (strategyMap) {
|
|
475
|
-
strategyMap.delete(actionType);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Get the special strategy that handle the action logic.
|
|
480
|
-
*
|
|
481
|
-
* @typedef T generic type
|
|
482
|
-
* @typedef target generic type
|
|
483
|
-
* @typedef R generic type
|
|
484
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
485
|
-
* @param {string} targetClass - The rich text node class name.
|
|
486
|
-
* @returns {Nullable<ActionHandleStrategy<T, target, R>>} - The action handle strategy instance if defined.
|
|
487
|
-
*/
|
|
488
|
-
static get(actionType, targetClass) {
|
|
489
|
-
const strategyMap = this.registry.get(targetClass);
|
|
490
|
-
if (strategyMap) {
|
|
491
|
-
return strategyMap.get(actionType);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
/**
|
|
495
|
-
* Get the special strategy from the registry and run the strategy execute method.
|
|
496
|
-
*
|
|
497
|
-
* @typedef R generic type
|
|
498
|
-
* @param {ModifyContentAction | AnnotationAction} action - The update node action instance.
|
|
499
|
-
* @param {RTENode | RTEBlock | VegaRTEContent} RTEInstance - The rich text editor node.
|
|
500
|
-
* @returns {R | undefined} The return value of the strategy method execute invoke result.
|
|
501
|
-
*/
|
|
502
|
-
static executeTheStrategy(action, RTEInstance) {
|
|
503
|
-
const interceptor = ActionHandlerInterceptorRegistry.get(action, RTEInstance);
|
|
504
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
505
|
-
const executeStrategy = () => {
|
|
506
|
-
const actionType = action instanceof ModifyContentAction ? action.type : action.constructor.name;
|
|
507
|
-
const strategy = ActionHandleStrategyRegistry.get(actionType, RTEInstance.constructor.name);
|
|
508
|
-
if (strategy) {
|
|
509
|
-
action['executedFlag'] = true;
|
|
510
|
-
return strategy.execute(action, RTEInstance);
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
LogUtility.warn(`Type ${actionType} action handle strategy is not registered in class ${RTEInstance.constructor.name}`);
|
|
514
|
-
}
|
|
515
|
-
};
|
|
516
|
-
if (interceptor) {
|
|
517
|
-
return interceptor.intercept(executeStrategy, action, RTEInstance);
|
|
518
|
-
}
|
|
519
|
-
else {
|
|
520
|
-
return executeStrategy();
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* Check if the action type can be handled by strategy for the specific RTE instance.
|
|
525
|
-
*
|
|
526
|
-
* @param {string} actionType - The special action type or the action class name.
|
|
527
|
-
* @param {RTENode | RTEBlock | VegaRTEContent} RTEInstance - The rich text editor node.
|
|
528
|
-
* @returns {boolean} - Whether the action type can be handled by the strategy.
|
|
529
|
-
*/
|
|
530
|
-
static canHandle(actionType, RTEInstance) {
|
|
531
|
-
const strategy = ActionHandleStrategyRegistry.get(actionType, RTEInstance.constructor.name);
|
|
532
|
-
return strategy ? true : false;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
ActionHandleStrategyRegistry.registry = new Map();
|
|
536
|
-
|
|
537
|
-
var CommonAnnotationTypeEnum;
|
|
538
|
-
(function (CommonAnnotationTypeEnum) {
|
|
539
|
-
CommonAnnotationTypeEnum["CUSTOM_ATTRIBUTE"] = "CUSTOM_ATTRIBUTE";
|
|
540
|
-
CommonAnnotationTypeEnum["CUSTOM_CLASS"] = "CUSTOM_CLASS";
|
|
541
|
-
CommonAnnotationTypeEnum["CUSTOM_STYLE"] = "CUSTOM_STYLE";
|
|
542
|
-
})(CommonAnnotationTypeEnum || (CommonAnnotationTypeEnum = {}));
|
|
543
|
-
/**
|
|
544
|
-
* CommonAnnotation is an abstract class that represents common annotation for block and node.
|
|
545
|
-
*/
|
|
546
|
-
class CommonAnnotation extends Annotation {
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
/**
|
|
550
|
-
* Annotation to add custom attributes of element
|
|
551
|
-
*/
|
|
552
|
-
class CustomAttributeAnnotation extends CommonAnnotation {
|
|
553
|
-
constructor(customAttribute) {
|
|
554
|
-
super();
|
|
555
|
-
this.type = CommonAnnotationTypeEnum.CUSTOM_ATTRIBUTE;
|
|
556
|
-
this.BOOLEAN_ATTRS = new Set([
|
|
557
|
-
'controls',
|
|
558
|
-
'disabled',
|
|
559
|
-
'checked',
|
|
560
|
-
'readonly',
|
|
561
|
-
'multiple',
|
|
562
|
-
'required',
|
|
563
|
-
'autoplay',
|
|
564
|
-
'muted',
|
|
565
|
-
]);
|
|
566
|
-
this.customAttribute = customAttribute;
|
|
567
|
-
}
|
|
568
|
-
/**
|
|
569
|
-
* Generate the map item for the annotation
|
|
570
|
-
*
|
|
571
|
-
* @param {Record<string, string>} customizeAttribute - custom attribute annotation
|
|
572
|
-
* @returns {[CommonAnnotationTypeEnum.CUSTOM_ATTRIBUTE, CustomAttributeAnnotation]} Map item for the annotation
|
|
573
|
-
*/
|
|
574
|
-
static from(customizeAttribute) {
|
|
575
|
-
return [CommonAnnotationTypeEnum.CUSTOM_ATTRIBUTE, new CustomAttributeAnnotation(customizeAttribute)];
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Generate the JSON representation of the annotation
|
|
579
|
-
*
|
|
580
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
581
|
-
*/
|
|
582
|
-
toJSON() {
|
|
583
|
-
return {
|
|
584
|
-
customAttribute: this.customAttribute,
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
/**
|
|
588
|
-
* Create a new custom attribute annotation
|
|
589
|
-
*
|
|
590
|
-
* @returns {CustomAttributeAnnotation} - Custom attribute annotation
|
|
591
|
-
*/
|
|
592
|
-
clone() {
|
|
593
|
-
return new CustomAttributeAnnotation(this.customAttribute);
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Generate the custom attribute of current element, excluding 'style' and 'class'
|
|
597
|
-
*
|
|
598
|
-
* @param {string[]} filterAttr - should filter these existed attrs
|
|
599
|
-
* @returns {string[]} - Custom attributes
|
|
600
|
-
*/
|
|
601
|
-
toString(filterAttr = []) {
|
|
602
|
-
const filterAttrKeys = filterAttr.map((attr) => attr.split('=')[0]);
|
|
603
|
-
return Object.keys(this.customAttribute)
|
|
604
|
-
.map((key) => {
|
|
605
|
-
return !filterAttrKeys.includes(key) ? `${key}="${this.customAttribute[key]}"` : null;
|
|
606
|
-
})
|
|
607
|
-
.filter(isNonNullable);
|
|
608
|
-
}
|
|
609
|
-
/**
|
|
610
|
-
* Generate the custom attribute for the annotation
|
|
611
|
-
*
|
|
612
|
-
* @param {RTERenderCustomAttributes} options - should filter these certain attrs
|
|
613
|
-
* @returns {Record<string, string>} custom attribute
|
|
614
|
-
*/
|
|
615
|
-
render(options = {}) {
|
|
616
|
-
var _a;
|
|
617
|
-
const customAttribute = Object.assign({}, this.customAttribute);
|
|
618
|
-
(_a = options.filterAttributes) === null || _a === void 0 ? void 0 : _a.forEach((attr) => delete customAttribute[attr]);
|
|
619
|
-
Object.keys(customAttribute).forEach((key) => {
|
|
620
|
-
if (this.BOOLEAN_ATTRS.has(key) && customAttribute[key] === '') {
|
|
621
|
-
customAttribute[key] = 'true';
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
return customAttribute;
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
/**
|
|
629
|
-
* Annotation to add custom class of element
|
|
630
|
-
*/
|
|
631
|
-
class CustomClassAnnotation extends CommonAnnotation {
|
|
632
|
-
constructor(customClass) {
|
|
633
|
-
super();
|
|
634
|
-
this.type = CommonAnnotationTypeEnum.CUSTOM_CLASS;
|
|
635
|
-
this.customClass = customClass;
|
|
636
|
-
}
|
|
637
|
-
/**
|
|
638
|
-
* Generate the map item for the annotation
|
|
639
|
-
*
|
|
640
|
-
* @param {string[]} customClass - custom class annotation
|
|
641
|
-
* @returns {[CommonAnnotationTypeEnum.CUSTOM_CLASS, CustomClassAnnotation]} Map item for the annotation
|
|
642
|
-
*/
|
|
643
|
-
static from(customClass) {
|
|
644
|
-
return [CommonAnnotationTypeEnum.CUSTOM_CLASS, new CustomClassAnnotation(customClass)];
|
|
645
|
-
}
|
|
646
|
-
/**
|
|
647
|
-
* Generate the JSON representation of the annotation
|
|
648
|
-
*
|
|
649
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
650
|
-
*/
|
|
651
|
-
toJSON() {
|
|
652
|
-
return {
|
|
653
|
-
customClass: this.customClass,
|
|
654
|
-
};
|
|
655
|
-
}
|
|
656
|
-
/**
|
|
657
|
-
* Create a new custom class annotation
|
|
658
|
-
*
|
|
659
|
-
* @returns {CustomClassAnnotation} - Custom class annotation
|
|
660
|
-
*/
|
|
661
|
-
clone() {
|
|
662
|
-
return new CustomClassAnnotation(this.customClass);
|
|
663
|
-
}
|
|
664
|
-
/**
|
|
665
|
-
* Generate the custom class of current element
|
|
666
|
-
*
|
|
667
|
-
* @returns {string} - Custom class
|
|
668
|
-
*/
|
|
669
|
-
toString() {
|
|
670
|
-
return `class="${this.customClass.join(' ')}"`;
|
|
671
|
-
}
|
|
672
|
-
/**
|
|
673
|
-
* Generate the custom attribute for the annotation
|
|
674
|
-
*
|
|
675
|
-
* @returns {string[]} custom classes
|
|
676
|
-
*/
|
|
677
|
-
renderClass() {
|
|
678
|
-
return this.customClass;
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
/**
|
|
683
|
-
* Annotation to add custom attributes of element
|
|
684
|
-
*/
|
|
685
|
-
class CustomStyleAnnotation extends CommonAnnotation {
|
|
686
|
-
constructor(customStyle) {
|
|
687
|
-
super();
|
|
688
|
-
this.type = CommonAnnotationTypeEnum.CUSTOM_STYLE;
|
|
689
|
-
this.customStyle = customStyle;
|
|
690
|
-
}
|
|
691
|
-
/**
|
|
692
|
-
* Generate the map item for the annotation
|
|
693
|
-
*
|
|
694
|
-
* @param {AnnotationStyle} customStyle - custom attribute annotation
|
|
695
|
-
* @returns {[CommonAnnotationTypeEnum.CUSTOM_STYLE, CustomStyleAnnotation]} Map item for the annotation
|
|
696
|
-
*/
|
|
697
|
-
static from(customStyle) {
|
|
698
|
-
return [CommonAnnotationTypeEnum.CUSTOM_STYLE, new CustomStyleAnnotation(customStyle)];
|
|
699
|
-
}
|
|
700
|
-
/**
|
|
701
|
-
* Generate the JSON representation of the annotation
|
|
702
|
-
*
|
|
703
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
704
|
-
*/
|
|
705
|
-
toJSON() {
|
|
706
|
-
return {
|
|
707
|
-
customStyle: this.customStyle,
|
|
708
|
-
};
|
|
709
|
-
}
|
|
710
|
-
/**
|
|
711
|
-
* Create a new custom attribute annotation
|
|
712
|
-
*
|
|
713
|
-
* @returns {CustomStyleAnnotation} - Custom attribute annotation
|
|
714
|
-
*/
|
|
715
|
-
clone() {
|
|
716
|
-
return new CustomStyleAnnotation(this.customStyle);
|
|
717
|
-
}
|
|
718
|
-
/**
|
|
719
|
-
* Generate the custom attribute for the annotation
|
|
720
|
-
*
|
|
721
|
-
* @returns {AnnotationStyle} custom attribute
|
|
722
|
-
*/
|
|
723
|
-
renderStyle() {
|
|
724
|
-
return this.customStyle;
|
|
725
|
-
}
|
|
726
|
-
/**
|
|
727
|
-
* Remove the style
|
|
728
|
-
*
|
|
729
|
-
* @param {string[]} styleKeys - custom attribute annotation
|
|
730
|
-
* @returns {AnnotationStyle} Map item for the annotation
|
|
731
|
-
*/
|
|
732
|
-
removeStyles(styleKeys) {
|
|
733
|
-
const customStyle = Object.assign({}, this.customStyle);
|
|
734
|
-
styleKeys.forEach((item) => delete customStyle[item]);
|
|
735
|
-
return customStyle;
|
|
736
|
-
}
|
|
737
|
-
/**
|
|
738
|
-
* Generate the custom style string for the annotation
|
|
739
|
-
*
|
|
740
|
-
* @returns {string} custom style string
|
|
741
|
-
*/
|
|
742
|
-
toString() {
|
|
743
|
-
return `style="${Object.entries(this.customStyle)
|
|
744
|
-
.map(([key, value]) => `${key}: ${value};`)
|
|
745
|
-
.join(' ')}"`;
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
/**
|
|
750
|
-
* Internal wrapper annotation for block node.
|
|
751
|
-
*/
|
|
752
|
-
class InternalWrapperAnnotation extends BlockAnnotation {
|
|
753
|
-
constructor(internalWrapper) {
|
|
754
|
-
super();
|
|
755
|
-
this.type = BlockAnnotationTypeEnum.INTERNAL_WRAPPER;
|
|
756
|
-
this.internalWrapper = internalWrapper;
|
|
757
|
-
}
|
|
758
|
-
/**
|
|
759
|
-
* @inheritDoc
|
|
760
|
-
*/
|
|
761
|
-
static from(internalWrapper) {
|
|
762
|
-
return [BlockAnnotationTypeEnum.INTERNAL_WRAPPER, new InternalWrapperAnnotation(internalWrapper)];
|
|
763
|
-
}
|
|
764
|
-
/**
|
|
765
|
-
* @inheritDoc
|
|
766
|
-
*/
|
|
767
|
-
clone() {
|
|
768
|
-
return new InternalWrapperAnnotation(this.internalWrapper);
|
|
769
|
-
}
|
|
770
|
-
/**
|
|
771
|
-
* @inheritDoc
|
|
772
|
-
*/
|
|
773
|
-
renderClass() {
|
|
774
|
-
return undefined;
|
|
775
|
-
}
|
|
776
|
-
/**
|
|
777
|
-
* @inheritDoc
|
|
778
|
-
*/
|
|
779
|
-
renderStyle() {
|
|
780
|
-
return undefined;
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* @inheritDoc
|
|
784
|
-
*/
|
|
785
|
-
toJSON() {
|
|
786
|
-
return this.internalWrapper ? { internalWrapper: this.internalWrapper } : undefined;
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
var NodeAnnotationTypeEnum;
|
|
791
|
-
(function (NodeAnnotationTypeEnum) {
|
|
792
|
-
NodeAnnotationTypeEnum["BOLD"] = "BOLD";
|
|
793
|
-
NodeAnnotationTypeEnum["ITALIC"] = "ITALIC";
|
|
794
|
-
NodeAnnotationTypeEnum["UNDERLINE"] = "UNDERLINE";
|
|
795
|
-
NodeAnnotationTypeEnum["STRIKETHROUGH"] = "STRIKETHROUGH";
|
|
796
|
-
NodeAnnotationTypeEnum["SELECTION_RANGE"] = "SELECTION_RANGE";
|
|
797
|
-
NodeAnnotationTypeEnum["IMAGE"] = "IMAGE";
|
|
798
|
-
NodeAnnotationTypeEnum["CODE"] = "CODE";
|
|
799
|
-
NodeAnnotationTypeEnum["TEXT_COLOR"] = "TEXT_COLOR";
|
|
800
|
-
NodeAnnotationTypeEnum["LINK"] = "LINK";
|
|
801
|
-
NodeAnnotationTypeEnum["INLINE_HTML"] = "INLINE_HTML";
|
|
802
|
-
NodeAnnotationTypeEnum["PLAIN_TEXT"] = "PLAIN_TEXT";
|
|
803
|
-
})(NodeAnnotationTypeEnum || (NodeAnnotationTypeEnum = {}));
|
|
804
|
-
/**
|
|
805
|
-
* Abstract class for all annotations
|
|
806
|
-
*/
|
|
807
|
-
class NodeAnnotation extends Annotation {
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
/**
|
|
811
|
-
* Class to handle the style representation of annotations for RTE blocks and nodes.
|
|
812
|
-
*/
|
|
813
|
-
class RTEAnnotationStyle {
|
|
814
|
-
constructor(dto) {
|
|
815
|
-
this.dtoType = dto instanceof RTEBlock ? 'block' : 'node';
|
|
816
|
-
this.annotationMap = dto.annotationMap;
|
|
817
|
-
}
|
|
818
|
-
/**
|
|
819
|
-
* Convert an AnnotationStyle object to a CSS text string.
|
|
820
|
-
*
|
|
821
|
-
* @param {RTERenderContext} options - Rendering context options.
|
|
822
|
-
* @param {string[]} canMergeKeyList - List of style keys that can be merged by concatenation.
|
|
823
|
-
* @param {Nullable<AnnotationStyle>} annotationStyle - The annotation style object, if null, get from toJSON().
|
|
824
|
-
* @returns {string} A string representing the CSS text.
|
|
825
|
-
*/
|
|
826
|
-
toCssText(options = { standalone: false }, canMergeKeyList, annotationStyle) {
|
|
827
|
-
annotationStyle = annotationStyle ? annotationStyle : this.toJSON(options, canMergeKeyList);
|
|
828
|
-
return Object.entries(Object.assign({}, annotationStyle))
|
|
829
|
-
.map(([key, value]) => `${camelToDashCase(key)}: ${value};`)
|
|
830
|
-
.join('');
|
|
831
|
-
}
|
|
832
|
-
/**
|
|
833
|
-
* Convert the annotation map to a JSON representation.
|
|
834
|
-
*
|
|
835
|
-
* @param {RTERenderContext} options - Rendering context options.
|
|
836
|
-
* @param {string[]} canMergeKeyList - List of style keys that can be merged by concatenation.
|
|
837
|
-
* @returns {AnnotationStyle} - The JSON representation of the annotation styles.
|
|
838
|
-
*/
|
|
839
|
-
toJSON(options = { standalone: false }, canMergeKeyList) {
|
|
840
|
-
const styles = Array.from(this.annotationMap.values())
|
|
841
|
-
.filter((annotation) => this.filterAnnotation(annotation) || annotation instanceof CustomStyleAnnotation)
|
|
842
|
-
.map((annotation) => annotation.renderStyle(options))
|
|
843
|
-
.filter(isNonNullable);
|
|
844
|
-
if (canMergeKeyList && canMergeKeyList.length > 0) {
|
|
845
|
-
return this.mergeAnnotationStyles(styles, canMergeKeyList);
|
|
846
|
-
}
|
|
847
|
-
else {
|
|
848
|
-
return styles.reduce((current, obj) => (Object.assign(Object.assign({}, current), obj)), {});
|
|
849
|
-
}
|
|
850
|
-
}
|
|
851
|
-
/**
|
|
852
|
-
* Filter annotations based on whether they are block or node annotations.
|
|
853
|
-
*
|
|
854
|
-
* @param {RTENodeAnnotationMapValue | RTEBlockAnnotationMapValue} annotation - The annotation to filter.
|
|
855
|
-
* @returns {boolean} - True if the annotation matches the DTO type, false otherwise.
|
|
856
|
-
*/
|
|
857
|
-
filterAnnotation(annotation) {
|
|
858
|
-
return this.dtoType === 'block'
|
|
859
|
-
? annotation instanceof BlockAnnotation
|
|
860
|
-
: annotation instanceof NodeAnnotation;
|
|
861
|
-
}
|
|
862
|
-
/**
|
|
863
|
-
* Merge an array of annotation styles into a single style object.
|
|
864
|
-
* e.g.,
|
|
865
|
-
* { textDecoration: 'underline', textDecoration: 'line-through' }
|
|
866
|
-
* -> { textDecoration: 'underline line-through' }
|
|
867
|
-
*
|
|
868
|
-
* @param {AnnotationStyle[]} styles - Array of annotation style objects to merge.
|
|
869
|
-
* @param {string[]} canMergeKeyList - List of style keys that can be merged by concatenation.
|
|
870
|
-
* @returns {AnnotationStyle} - The merged annotation style object.
|
|
871
|
-
*/
|
|
872
|
-
mergeAnnotationStyles(styles, canMergeKeyList) {
|
|
873
|
-
const merged = {};
|
|
874
|
-
for (const style of styles) {
|
|
875
|
-
for (const key in style) {
|
|
876
|
-
const value = style[key];
|
|
877
|
-
const existing = merged[key];
|
|
878
|
-
if (typeof existing === 'string' &&
|
|
879
|
-
typeof value === 'string' &&
|
|
880
|
-
canMergeKeyList.includes(key)) {
|
|
881
|
-
merged[key] = Array.from(new Set(`${existing} ${value}`.split(/\s+/).filter(Boolean))).join(' ');
|
|
882
|
-
}
|
|
883
|
-
else {
|
|
884
|
-
merged[key] = value;
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
return merged;
|
|
889
|
-
}
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
var NodeTypeEnum;
|
|
893
|
-
(function (NodeTypeEnum) {
|
|
894
|
-
NodeTypeEnum["TEXT"] = "TEXT";
|
|
895
|
-
NodeTypeEnum["IMAGE"] = "IMAGE";
|
|
896
|
-
NodeTypeEnum["CODE_BLOCK_NODE"] = "CODE_BLOCK_NODE";
|
|
897
|
-
})(NodeTypeEnum || (NodeTypeEnum = {}));
|
|
898
|
-
/**
|
|
899
|
-
* Abstract class for all nodes
|
|
900
|
-
*/
|
|
901
|
-
class RTENode {
|
|
902
|
-
constructor(id, annotationMap) {
|
|
903
|
-
this.annotationMap = new Map();
|
|
904
|
-
this.id = id;
|
|
905
|
-
if (annotationMap) {
|
|
906
|
-
this.annotationMap = annotationMap;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
/**
|
|
910
|
-
* Creates a new instance of the RTENode from the given JSON data.
|
|
911
|
-
*
|
|
912
|
-
* @param {unknown} json - The JSON data to create the node from.
|
|
913
|
-
* @param {RTEBlock} parentBlock - The parent block of the node.
|
|
914
|
-
* @param {VegaRTETransformOptions} options - Options for transforming the node.
|
|
915
|
-
*/
|
|
916
|
-
static from(json, parentBlock, options) {
|
|
917
|
-
throw new Error(`[Vega] ${this.constructor.name}.from(${JSON.stringify(json)}, ${parentBlock}, ${options}) is not implemented. Please implement this method in the subclass.`);
|
|
918
|
-
}
|
|
919
|
-
/**
|
|
920
|
-
* Creates different types of text annotations based on the provided type and value.
|
|
921
|
-
*
|
|
922
|
-
* @param {keyof VegaRTETextAnnotations} type - The key of the type.
|
|
923
|
-
* @param {unknown} value - The value that will be used to create the specific type of annotation entity based on the `type` provided.
|
|
924
|
-
* @returns {Nullable<[RTENodeAnnotationMapKey, RTENodeAnnotationMapValue]>} Returning a nullable tuple containing a key and a
|
|
925
|
-
* value from the `RTENodeAnnotationMapKey` and `RTENodeAnnotationMapValue` types.
|
|
926
|
-
*/
|
|
927
|
-
static createAnnotationEntity(type, value) {
|
|
928
|
-
switch (type) {
|
|
929
|
-
case 'customAttribute':
|
|
930
|
-
return CustomAttributeAnnotation.from(value);
|
|
931
|
-
case 'customClass':
|
|
932
|
-
return CustomClassAnnotation.from(value);
|
|
933
|
-
case 'customStyle':
|
|
934
|
-
return CustomStyleAnnotation.from(value);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
/**
|
|
938
|
-
* Get annotation by type
|
|
939
|
-
*
|
|
940
|
-
* @typedef T generic type
|
|
941
|
-
* @param {RTENodeAnnotationMapKey} type - Annotation type
|
|
942
|
-
* @returns {Nullable<T>} - Annotation
|
|
943
|
-
*/
|
|
944
|
-
getAnnotationByType(type) {
|
|
945
|
-
return this.annotationMap.get(type);
|
|
946
|
-
}
|
|
947
|
-
/**
|
|
948
|
-
* Delete annotation by type
|
|
949
|
-
*
|
|
950
|
-
* @param {RTENodeAnnotationMapKey} type - Annotation type
|
|
951
|
-
*/
|
|
952
|
-
deleteAnnotationByType(type) {
|
|
953
|
-
this.annotationMap.delete(type);
|
|
954
|
-
this.flushChange();
|
|
955
|
-
}
|
|
956
|
-
/**
|
|
957
|
-
* Apply action to node
|
|
958
|
-
*
|
|
959
|
-
* @param {AnnotationAction} action - Annotation action
|
|
960
|
-
* @returns {this} - Node
|
|
961
|
-
*/
|
|
962
|
-
apply(action) {
|
|
963
|
-
this.doApply(action);
|
|
964
|
-
if (action.isFlushable) {
|
|
965
|
-
this.flushChange();
|
|
966
|
-
}
|
|
967
|
-
return this;
|
|
968
|
-
}
|
|
969
|
-
/**
|
|
970
|
-
* Get styles from annotations
|
|
971
|
-
*
|
|
972
|
-
* @param {RTERenderContext} [options={ standalone: false }] - Options to control style mode
|
|
973
|
-
* @returns {AnnotationStyle} - Annotation styles
|
|
974
|
-
*/
|
|
975
|
-
getStyles(options = { standalone: false }) {
|
|
976
|
-
const rteAnnotationStyle = new RTEAnnotationStyle(this);
|
|
977
|
-
return rteAnnotationStyle.toJSON(options, ['textDecoration']);
|
|
978
|
-
}
|
|
979
|
-
/**
|
|
980
|
-
* Get classes from annotations
|
|
981
|
-
*
|
|
982
|
-
* @param {RTERenderContext} [options={ standalone: false }] - Options to control style mode
|
|
983
|
-
* @returns {string} - Annotation style
|
|
984
|
-
*/
|
|
985
|
-
getClasses(options = { standalone: false }) {
|
|
986
|
-
return Array.from(this.annotationMap.values())
|
|
987
|
-
.filter((annotation) => annotation instanceof NodeAnnotation || annotation instanceof CustomClassAnnotation)
|
|
988
|
-
.map((annotation) => annotation.renderClass(options))
|
|
989
|
-
.filter(isNonNullable)
|
|
990
|
-
.reduce((pre, cur) => [pre, cur].join(' ').trim(), '');
|
|
991
|
-
}
|
|
992
|
-
/**
|
|
993
|
-
* Get custom attribute annotation, excluding "class" and "style"
|
|
994
|
-
*
|
|
995
|
-
* @returns {CustomAttributeAnnotation} - custom attribute annotation
|
|
996
|
-
*/
|
|
997
|
-
getCustomAttributesAnnotation() {
|
|
998
|
-
return this.annotationMap.get(CommonAnnotationTypeEnum.CUSTOM_ATTRIBUTE);
|
|
999
|
-
}
|
|
1000
|
-
/**
|
|
1001
|
-
* Check if the node is a text node.
|
|
1002
|
-
*
|
|
1003
|
-
* @returns {boolean} - True if the node is a text node, false otherwise.
|
|
1004
|
-
*/
|
|
1005
|
-
isTextNode() {
|
|
1006
|
-
return false;
|
|
1007
|
-
}
|
|
1008
|
-
/**
|
|
1009
|
-
* Get the HTMLElement reference associated with this node.
|
|
1010
|
-
*
|
|
1011
|
-
* @returns {Nullable<HTMLElement>} The HTMLElement reference or null if not found.
|
|
1012
|
-
*/
|
|
1013
|
-
getElementRef() {
|
|
1014
|
-
return stateEntityRenderingRegistry.getDOMByEntity(this);
|
|
1015
|
-
}
|
|
1016
|
-
/**
|
|
1017
|
-
* Generate attributes as string
|
|
1018
|
-
*
|
|
1019
|
-
* @param {...string} attrs - Additional attributes to include
|
|
1020
|
-
* @returns {string} - Attributes as string
|
|
1021
|
-
*/
|
|
1022
|
-
generateAttributeString(...attrs) {
|
|
1023
|
-
var _a;
|
|
1024
|
-
const nodeAnnotationStyle = new RTEAnnotationStyle(this);
|
|
1025
|
-
const styles = nodeAnnotationStyle.toCssText({ standalone: true }, [
|
|
1026
|
-
'textDecoration',
|
|
1027
|
-
]);
|
|
1028
|
-
const customClassAnnotation = this.annotationMap.get(CommonAnnotationTypeEnum.CUSTOM_CLASS);
|
|
1029
|
-
const customAttributeString = ((_a = this.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.toString(attrs)) || [];
|
|
1030
|
-
const attributes = [
|
|
1031
|
-
...customAttributeString,
|
|
1032
|
-
customClassAnnotation === null || customClassAnnotation === void 0 ? void 0 : customClassAnnotation.toString(),
|
|
1033
|
-
styles ? `style="${styles}"` : null,
|
|
1034
|
-
...attrs,
|
|
1035
|
-
].filter(isNonNullable);
|
|
1036
|
-
return attributes.length ? ` ${attributes.join(' ')}` : '';
|
|
1037
|
-
}
|
|
1038
|
-
/**
|
|
1039
|
-
* apply annotation action or modify content action
|
|
1040
|
-
*
|
|
1041
|
-
* @param {AnnotationAction | ModifyContentAction} action annotation type action or modify content type action
|
|
1042
|
-
*/
|
|
1043
|
-
doApply(action) {
|
|
1044
|
-
if (action instanceof ModifyContentAction) {
|
|
1045
|
-
this.doModifyActionApply(action);
|
|
1046
|
-
}
|
|
1047
|
-
else {
|
|
1048
|
-
this.doAnnotationActionApply(action);
|
|
1049
|
-
}
|
|
1050
|
-
}
|
|
1051
|
-
/**
|
|
1052
|
-
* Flush the value change
|
|
1053
|
-
*/
|
|
1054
|
-
flushChange() {
|
|
1055
|
-
const domNode = stateEntityRenderingRegistry.getDOMByEntity(this);
|
|
1056
|
-
if (domNode) {
|
|
1057
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(domNode, VegaInternalRichTextEditorFlushChanges);
|
|
1058
|
-
if (nodeSubject) {
|
|
1059
|
-
ChangeManager.notify(nodeSubject, {});
|
|
1060
|
-
}
|
|
1061
|
-
}
|
|
1062
|
-
}
|
|
1063
|
-
/**
|
|
1064
|
-
* Clones the annotations of the current RTETextNode.
|
|
1065
|
-
*
|
|
1066
|
-
* @returns {NodeAnnotations} A new Map containing cloned annotations.
|
|
1067
|
-
*/
|
|
1068
|
-
cloneAnnotations() {
|
|
1069
|
-
return new Map(Array.from(this.annotationMap.entries()).map(([key, value]) => [key, value.clone()]));
|
|
1070
|
-
}
|
|
1071
|
-
/* istanbul ignore next */
|
|
1072
|
-
/**
|
|
1073
|
-
* Placeholder for the method to be implemented in sub classes.
|
|
1074
|
-
*
|
|
1075
|
-
* @param {AnnotationAction} action Annotation action
|
|
1076
|
-
*/
|
|
1077
|
-
doAnnotationActionApply(action) {
|
|
1078
|
-
}
|
|
1079
|
-
/* istanbul ignore next */
|
|
1080
|
-
/**
|
|
1081
|
-
* Placeholder for the method to be implemented in sub classes.
|
|
1082
|
-
*
|
|
1083
|
-
* @param {ModifyContentAction} action ModifyContentAction
|
|
1084
|
-
*/
|
|
1085
|
-
doModifyActionApply(action) {
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
/**
|
|
1090
|
-
* RTEDTOClassManager is a singleton class that manages the registration and retrieval of RTE DTO classes.
|
|
1091
|
-
* It allows for the dynamic handling of different RTE blocks and nodes by their types.
|
|
1092
|
-
*/
|
|
1093
|
-
class RTEDTOClassManager {
|
|
1094
|
-
constructor() {
|
|
1095
|
-
// Register RTE Block DTO classes.
|
|
1096
|
-
this.RTE_BLOCK_DTO_CLASS_MAP = new Map();
|
|
1097
|
-
// Register RTE Block DTO classes.
|
|
1098
|
-
this.RTE_NODE_DTO_CLASS_MAP = new Map();
|
|
1099
|
-
}
|
|
1100
|
-
/**
|
|
1101
|
-
* Registers a new RTE DTO class.
|
|
1102
|
-
*
|
|
1103
|
-
* @typedef T - The type of the RTE DTO class to register.
|
|
1104
|
-
* @param {string} type - The type identifier for the RTE DTO class.
|
|
1105
|
-
* @param {ClassType<T>} RTEDTOClass - The class constructor for the RTE DTO.
|
|
1106
|
-
*/
|
|
1107
|
-
registerRTEDTOClass(type, RTEDTOClass) {
|
|
1108
|
-
if (RTEDTOClass.prototype instanceof RTEBlock) {
|
|
1109
|
-
this.RTE_BLOCK_DTO_CLASS_MAP.set(type, RTEDTOClass);
|
|
1110
|
-
}
|
|
1111
|
-
else if (RTEDTOClass.prototype instanceof RTENode) {
|
|
1112
|
-
this.RTE_NODE_DTO_CLASS_MAP.set(type, RTEDTOClass);
|
|
1113
|
-
}
|
|
1114
|
-
else {
|
|
1115
|
-
throw new Error(`Invalid RTE DTO class type: ${type}`);
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
/**
|
|
1119
|
-
* Retrieves the RTE block class for a given type.
|
|
1120
|
-
*
|
|
1121
|
-
* @param {string} type - The type identifier for the RTE block.
|
|
1122
|
-
* @returns {Nullable<RTEBlockDTOClass>} - The class constructor for the RTE block, or null if not found.
|
|
1123
|
-
*/
|
|
1124
|
-
getRTEBlockClass(type) {
|
|
1125
|
-
return this.RTE_BLOCK_DTO_CLASS_MAP.get(type);
|
|
1126
|
-
}
|
|
1127
|
-
/**
|
|
1128
|
-
* Retrieves the RTE node class for a given type.
|
|
1129
|
-
*
|
|
1130
|
-
* @param {string} type - The type identifier for the RTE node.
|
|
1131
|
-
* @returns {Nullable<RTENodeDTOClass>} - The class constructor for the RTE node, or null if not found.
|
|
1132
|
-
*/
|
|
1133
|
-
getRTENodeClass(type) {
|
|
1134
|
-
return this.RTE_NODE_DTO_CLASS_MAP.get(type);
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
const RTEDTOClassManager$1 = new RTEDTOClassManager();
|
|
1138
|
-
|
|
1139
|
-
/**
|
|
1140
|
-
* Abstract class for block
|
|
1141
|
-
*/
|
|
1142
|
-
class RTEBlock {
|
|
1143
|
-
constructor(id) {
|
|
1144
|
-
this.annotationMap = new Map();
|
|
1145
|
-
this.id = id;
|
|
1146
|
-
}
|
|
1147
|
-
/**
|
|
1148
|
-
* Creates a new instance of the block from the given JSON object.
|
|
1149
|
-
*
|
|
1150
|
-
* @param {unknown} json - The JSON object to create the block from.
|
|
1151
|
-
* @param {VegaRTETransformOptions} options - Options for transforming the block.
|
|
1152
|
-
*/
|
|
1153
|
-
static from(json, options) {
|
|
1154
|
-
throw new Error(`[Vega] ${this.constructor.name}.from(${JSON.stringify(json)}, ${options}) is not implemented. Please implement this method in the subclass.`);
|
|
1155
|
-
}
|
|
1156
|
-
/**
|
|
1157
|
-
* Generates block children from an array of VegaRTEContentBlock.
|
|
1158
|
-
*
|
|
1159
|
-
* @param {VegaRTEContentBlock[]} blockArray - The array of VegaRTEContentBlock to generate children from.
|
|
1160
|
-
* @param {VegaRTETransformOptions} [options] - Optional transformation options.
|
|
1161
|
-
* @param {VegaRTEContent | RTEBlock} [parentBlock] - Optional parent block.
|
|
1162
|
-
* @returns {RTEBlock[]} An array of generated RTEBlock children.
|
|
1163
|
-
*/
|
|
1164
|
-
static generateBlockChildren(blockArray, options, parentBlock) {
|
|
1165
|
-
return blockArray
|
|
1166
|
-
.map((child) => {
|
|
1167
|
-
const BlockClass = RTEDTOClassManager$1.getRTEBlockClass(child.type);
|
|
1168
|
-
if (BlockClass) {
|
|
1169
|
-
const block = BlockClass.from(child, options);
|
|
1170
|
-
block.parent = parentBlock;
|
|
1171
|
-
return block;
|
|
1172
|
-
}
|
|
1173
|
-
})
|
|
1174
|
-
.filter(isNonNullable);
|
|
1175
|
-
}
|
|
1176
|
-
/**
|
|
1177
|
-
* The function `createAnnotationEntity` creates a block annotation entity based on the provided type
|
|
1178
|
-
* and value.
|
|
1179
|
-
*
|
|
1180
|
-
* @param {keyof VegaRTEBlockAnnotations} type - The `type` parameter is a key of the `VegaRTEBlockAnnotations` enum, which specifies
|
|
1181
|
-
* the type of annotation entity to create.
|
|
1182
|
-
* @param {unknown} value - The `value` parameter in the `createAnnotationEntity` function is the value
|
|
1183
|
-
* that will be used to create the annotation entity. It can be of any type depending on the specific
|
|
1184
|
-
* annotation being created.
|
|
1185
|
-
* @returns {Nullable<BlockAnnotationsEntity>} The `createAnnotationEntity` function returns a nullable tuple containing a
|
|
1186
|
-
* `BlockAnnotationTypeEnum` and a `BlockAnnotation` object.
|
|
1187
|
-
*/
|
|
1188
|
-
static createAnnotationEntity(type, value) {
|
|
1189
|
-
switch (type) {
|
|
1190
|
-
case 'textAlign':
|
|
1191
|
-
return HorizontalAlignmentAnnotation.from(value);
|
|
1192
|
-
case 'indent':
|
|
1193
|
-
return IndentAnnotation.from(value);
|
|
1194
|
-
case 'customAttribute':
|
|
1195
|
-
return CustomAttributeAnnotation.from(value);
|
|
1196
|
-
case 'customClass':
|
|
1197
|
-
return CustomClassAnnotation.from(value);
|
|
1198
|
-
case 'customStyle':
|
|
1199
|
-
return CustomStyleAnnotation.from(value);
|
|
1200
|
-
case 'internalWrapper':
|
|
1201
|
-
return InternalWrapperAnnotation.from(value);
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
/**
|
|
1205
|
-
* Converts annotations to an array of block annotation entities.
|
|
1206
|
-
*
|
|
1207
|
-
* @param {BlockAnnotations} annotationMap - The map to store the converted annotations.
|
|
1208
|
-
* @param {VegaRTEBlockAnnotations} annotations - The annotations to convert.
|
|
1209
|
-
*/
|
|
1210
|
-
static convertAnnotationsToMap(annotationMap, annotations) {
|
|
1211
|
-
Object.entries(annotations).forEach(([type, value]) => {
|
|
1212
|
-
const item = this.createAnnotationEntity(type, value);
|
|
1213
|
-
if (isNonNullable(item)) {
|
|
1214
|
-
annotationMap.set(...item);
|
|
1215
|
-
}
|
|
1216
|
-
});
|
|
1217
|
-
}
|
|
1218
|
-
/**
|
|
1219
|
-
* Check if the block should be rendered as a wrapper.
|
|
1220
|
-
*
|
|
1221
|
-
* @returns {boolean} - Returns true if the block is an internal wrapper.
|
|
1222
|
-
*/
|
|
1223
|
-
shouldRenderAsInternalWrapper() {
|
|
1224
|
-
const internalWrapperAnnotation = this.getAnnotationByType(BlockAnnotationTypeEnum.INTERNAL_WRAPPER);
|
|
1225
|
-
if (internalWrapperAnnotation) {
|
|
1226
|
-
return (internalWrapperAnnotation.internalWrapper &&
|
|
1227
|
-
Array.from(this.annotationMap.values()).filter((annotation) => !(annotation instanceof LinkGroupAnnotation) &&
|
|
1228
|
-
!(annotation instanceof InternalWrapperAnnotation)).length === 0);
|
|
1229
|
-
}
|
|
1230
|
-
else {
|
|
1231
|
-
return false;
|
|
1232
|
-
}
|
|
1233
|
-
}
|
|
1234
|
-
/**
|
|
1235
|
-
* Class to JSON object
|
|
1236
|
-
*
|
|
1237
|
-
* @returns {VegaRTEBlockBase} - JSON object
|
|
1238
|
-
*/
|
|
1239
|
-
toJSON() {
|
|
1240
|
-
const annotations = Array.from(this.annotationMap.values())
|
|
1241
|
-
.filter((annotation) => annotation instanceof BlockAnnotation || annotation instanceof CommonAnnotation)
|
|
1242
|
-
.reduce((record, annotation) => {
|
|
1243
|
-
return Object.assign(Object.assign({}, record), annotation.toJSON());
|
|
1244
|
-
}, {});
|
|
1245
|
-
return Object.assign({ id: this.id }, (Object.keys(annotations).length > 0 ? { annotations } : {}));
|
|
1246
|
-
}
|
|
1247
|
-
/**
|
|
1248
|
-
* Get annotation by type
|
|
1249
|
-
*
|
|
1250
|
-
* @typedef T generic type
|
|
1251
|
-
* @param {string} type - Annotation type
|
|
1252
|
-
* @returns {Nullable<T>} - Annotation
|
|
1253
|
-
*/
|
|
1254
|
-
getAnnotationByType(type) {
|
|
1255
|
-
return this.annotationMap.get(type);
|
|
1256
|
-
}
|
|
1257
|
-
/**
|
|
1258
|
-
* Apply action to block
|
|
1259
|
-
*
|
|
1260
|
-
* @param {AnnotationAction} action - Annotation action
|
|
1261
|
-
*/
|
|
1262
|
-
apply(action) {
|
|
1263
|
-
this.doApply(action);
|
|
1264
|
-
if (action.isFlushable) {
|
|
1265
|
-
const domNode = stateEntityRenderingRegistry.getDOMByEntity(this);
|
|
1266
|
-
if (domNode) {
|
|
1267
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(domNode, VegaInternalRichTextEditorFlushChanges);
|
|
1268
|
-
if (nodeSubject) {
|
|
1269
|
-
ChangeManager.notify(nodeSubject, {});
|
|
1270
|
-
}
|
|
1271
|
-
}
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
/**
|
|
1275
|
-
* Get the first node of the block
|
|
1276
|
-
*
|
|
1277
|
-
* @returns {Nullable<RTENode>} The first RTENode or null if no children exist.
|
|
1278
|
-
*/
|
|
1279
|
-
getFirstNode() {
|
|
1280
|
-
if (!this.children || !this.children[0])
|
|
1281
|
-
return null;
|
|
1282
|
-
const firstItem = this.children[0];
|
|
1283
|
-
if (firstItem instanceof RTEBlock) {
|
|
1284
|
-
return firstItem.getFirstNode();
|
|
1285
|
-
}
|
|
1286
|
-
return firstItem;
|
|
1287
|
-
}
|
|
1288
|
-
/**
|
|
1289
|
-
* Check if the block is a list item block
|
|
1290
|
-
*
|
|
1291
|
-
* @returns {boolean} True if the block is a list item block, false otherwise.
|
|
1292
|
-
*/
|
|
1293
|
-
isListItemBlock() {
|
|
1294
|
-
return this.type === 'list-item';
|
|
1295
|
-
}
|
|
1296
|
-
/**
|
|
1297
|
-
* Get styles from annotations
|
|
1298
|
-
*
|
|
1299
|
-
* @param {RTERenderContext} [options={ standalone: false }] - Options to control style mode
|
|
1300
|
-
* @returns {AnnotationStyle} - Annotation styles
|
|
1301
|
-
*/
|
|
1302
|
-
getStyles(options = { standalone: false }) {
|
|
1303
|
-
const rteAnnotationStyle = new RTEAnnotationStyle(this);
|
|
1304
|
-
const blockAnnotationStyle = rteAnnotationStyle.toJSON(options);
|
|
1305
|
-
return Object.assign(Object.assign({}, blockAnnotationStyle), (this.shouldRenderAsInternalWrapper() ? { display: 'contents' } : {}));
|
|
1306
|
-
}
|
|
1307
|
-
/**
|
|
1308
|
-
* Get classes from annotations
|
|
1309
|
-
*
|
|
1310
|
-
* @param {RTERenderContext} [options={ standalone: false }] - Options to control standalone mode
|
|
1311
|
-
* @returns {string} - Annotation style
|
|
1312
|
-
*/
|
|
1313
|
-
getClasses(options = { standalone: false }) {
|
|
1314
|
-
return Array.from(this.annotationMap.values())
|
|
1315
|
-
.filter((annotation) => annotation instanceof BlockAnnotation || annotation instanceof CustomClassAnnotation)
|
|
1316
|
-
.map((annotation) => annotation.renderClass(options))
|
|
1317
|
-
.filter(isNonNullable)
|
|
1318
|
-
.reduce((pre, cur) => [pre, cur].join(' ').trim(), '');
|
|
1319
|
-
}
|
|
1320
|
-
/**
|
|
1321
|
-
* Get custom attribute annotation, excluding "class" and "style"
|
|
1322
|
-
*
|
|
1323
|
-
* @returns {Nullable<CustomAttributeAnnotation>} - custom attribute annotation
|
|
1324
|
-
*/
|
|
1325
|
-
getCustomAttributesAnnotation() {
|
|
1326
|
-
return this.annotationMap.get(CommonAnnotationTypeEnum.CUSTOM_ATTRIBUTE);
|
|
1327
|
-
}
|
|
1328
|
-
/**
|
|
1329
|
-
* Generate attributes as string
|
|
1330
|
-
*
|
|
1331
|
-
* @param {...string} attrs - Additional attributes to include
|
|
1332
|
-
* @returns {string} - Attributes as string
|
|
1333
|
-
*/
|
|
1334
|
-
generateAttributeString(...attrs) {
|
|
1335
|
-
var _a;
|
|
1336
|
-
const blockAnnotationStyle = new RTEAnnotationStyle(this);
|
|
1337
|
-
const styles = blockAnnotationStyle.toCssText({ standalone: true });
|
|
1338
|
-
const customClassAnnotation = this.annotationMap.get(CommonAnnotationTypeEnum.CUSTOM_CLASS);
|
|
1339
|
-
const customAttributeString = ((_a = this.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.toString(attrs)) || [];
|
|
1340
|
-
const attributes = [
|
|
1341
|
-
...customAttributeString,
|
|
1342
|
-
customClassAnnotation === null || customClassAnnotation === void 0 ? void 0 : customClassAnnotation.toString(),
|
|
1343
|
-
styles ? `style="${styles}"` : null,
|
|
1344
|
-
...attrs,
|
|
1345
|
-
].filter(isNonNullable);
|
|
1346
|
-
return attributes.length ? ` ${attributes.join(' ')}` : '';
|
|
1347
|
-
}
|
|
1348
|
-
/**
|
|
1349
|
-
* Apply action to block
|
|
1350
|
-
*
|
|
1351
|
-
* @param {AnnotationAction|ModifyContentAction} action - Annotation action
|
|
1352
|
-
*/
|
|
1353
|
-
doApply(action) {
|
|
1354
|
-
if (action instanceof ModifyContentAction) {
|
|
1355
|
-
ActionHandleStrategyRegistry.executeTheStrategy(action, this);
|
|
1356
|
-
}
|
|
1357
|
-
else {
|
|
1358
|
-
this.applyAnnotationAction(action);
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
/**
|
|
1362
|
-
* Apply annotation action to block
|
|
1363
|
-
*
|
|
1364
|
-
* @param {AnnotationAction} action - Annotation action
|
|
1365
|
-
*/
|
|
1366
|
-
applyAnnotationAction(action) {
|
|
1367
|
-
const annotation = action.toAnnotation();
|
|
1368
|
-
if (!(annotation instanceof LinkGroupAnnotation)) {
|
|
1369
|
-
this.annotationMap.set(annotation.type, annotation);
|
|
1370
|
-
}
|
|
1371
|
-
typeof this.doAnnotationActionApply === 'function' && this.doAnnotationActionApply(action);
|
|
1372
|
-
}
|
|
1373
|
-
/**
|
|
1374
|
-
* clone annotations of the block
|
|
1375
|
-
*
|
|
1376
|
-
* @returns {BlockAnnotations} - Cloned annotations
|
|
1377
|
-
*/
|
|
1378
|
-
cloneAnnotations() {
|
|
1379
|
-
return new Map(Array.from(this.annotationMap.entries()).map(([key, value]) => [key, value.clone()]));
|
|
1380
|
-
}
|
|
1381
|
-
}
|
|
1382
|
-
|
|
1383
|
-
/**
|
|
1384
|
-
* Abstract class for annotation actions
|
|
1385
|
-
*/
|
|
1386
|
-
class AnnotationAction {
|
|
1387
|
-
}
|
|
1388
|
-
|
|
1389
|
-
/**
|
|
1390
|
-
* Abstract class for which can be splittable
|
|
1391
|
-
*/
|
|
1392
|
-
class TextSplittableAction extends AnnotationAction {
|
|
1393
|
-
constructor() {
|
|
1394
|
-
super(...arguments);
|
|
1395
|
-
/**
|
|
1396
|
-
* Whether the action should split the node
|
|
1397
|
-
*/
|
|
1398
|
-
this.doSplit = true;
|
|
1399
|
-
}
|
|
1400
|
-
}
|
|
1401
|
-
|
|
1402
|
-
/**
|
|
1403
|
-
* Annotation to represent a selection range
|
|
1404
|
-
*/
|
|
1405
|
-
class SelectionRangeAnnotation extends Annotation {
|
|
1406
|
-
constructor(range) {
|
|
1407
|
-
super();
|
|
1408
|
-
this.type = InternalAnnotationTypeEnum.SELECTION_RANGE;
|
|
1409
|
-
this.range = range;
|
|
1410
|
-
}
|
|
1411
|
-
/**
|
|
1412
|
-
* Clone the selection range annotation
|
|
1413
|
-
*
|
|
1414
|
-
* @returns {SelectionRangeAnnotation} A cloned instance of the selection range annotation
|
|
1415
|
-
*/
|
|
1416
|
-
clone() {
|
|
1417
|
-
return new SelectionRangeAnnotation(this.range);
|
|
1418
|
-
}
|
|
1419
|
-
}
|
|
1420
|
-
|
|
1421
|
-
/**
|
|
1422
|
-
* Annotation to make text with strikethrough
|
|
1423
|
-
*/
|
|
1424
|
-
class StrikethroughAnnotation extends NodeAnnotation {
|
|
1425
|
-
constructor(underline) {
|
|
1426
|
-
super();
|
|
1427
|
-
this.type = NodeAnnotationTypeEnum.STRIKETHROUGH;
|
|
1428
|
-
this.strikethrough = underline;
|
|
1429
|
-
}
|
|
1430
|
-
/**
|
|
1431
|
-
* Generate the map item for the annotation
|
|
1432
|
-
*
|
|
1433
|
-
* @param {Nullable<boolean>} strikethrough - Strikethrough annotation
|
|
1434
|
-
* @returns {[NodeAnnotationTypeEnum.STRIKETHROUGH, StrikethroughAnnotation]} Map item for the annotation
|
|
1435
|
-
*/
|
|
1436
|
-
static from(strikethrough) {
|
|
1437
|
-
return [NodeAnnotationTypeEnum.STRIKETHROUGH, new StrikethroughAnnotation(strikethrough)];
|
|
1438
|
-
}
|
|
1439
|
-
/**
|
|
1440
|
-
* Generate the JSON representation of the annotation
|
|
1441
|
-
*
|
|
1442
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1443
|
-
*/
|
|
1444
|
-
toJSON() {
|
|
1445
|
-
return {
|
|
1446
|
-
strikethrough: this.strikethrough,
|
|
1447
|
-
};
|
|
1448
|
-
}
|
|
1449
|
-
/**
|
|
1450
|
-
* @inheritDoc
|
|
1451
|
-
*/
|
|
1452
|
-
clone() {
|
|
1453
|
-
return new StrikethroughAnnotation(this.strikethrough);
|
|
1454
|
-
}
|
|
1455
|
-
/**
|
|
1456
|
-
* @inheritDoc
|
|
1457
|
-
*/
|
|
1458
|
-
renderClass(options) {
|
|
1459
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
1460
|
-
return null;
|
|
1461
|
-
return this.strikethrough ? 'v-rte--strikethrough' : null;
|
|
1462
|
-
}
|
|
1463
|
-
/**
|
|
1464
|
-
* @inheritDoc
|
|
1465
|
-
*/
|
|
1466
|
-
renderStyle(options) {
|
|
1467
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
1468
|
-
return null;
|
|
1469
|
-
return this.strikethrough ? { textDecoration: 'line-through' } : null;
|
|
1470
|
-
}
|
|
1471
|
-
}
|
|
1472
|
-
|
|
1473
|
-
/**
|
|
1474
|
-
* Annotation to make text with underline
|
|
1475
|
-
*/
|
|
1476
|
-
class UnderlineAnnotation extends NodeAnnotation {
|
|
1477
|
-
constructor(underline) {
|
|
1478
|
-
super();
|
|
1479
|
-
this.type = NodeAnnotationTypeEnum.UNDERLINE;
|
|
1480
|
-
this.underline = underline;
|
|
1481
|
-
}
|
|
1482
|
-
/**
|
|
1483
|
-
* Generate the map item for the annotation
|
|
1484
|
-
*
|
|
1485
|
-
* @param {boolean} underline - Underline annotation
|
|
1486
|
-
* @returns {[NodeAnnotationTypeEnum.UNDERLINE, UnderlineAnnotation]} Map item for the annotation
|
|
1487
|
-
*/
|
|
1488
|
-
static from(underline) {
|
|
1489
|
-
return [NodeAnnotationTypeEnum.UNDERLINE, new UnderlineAnnotation(underline)];
|
|
1490
|
-
}
|
|
1491
|
-
/**
|
|
1492
|
-
* Generate the JSON representation of the annotation
|
|
1493
|
-
*
|
|
1494
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1495
|
-
*/
|
|
1496
|
-
toJSON() {
|
|
1497
|
-
return {
|
|
1498
|
-
underline: this.underline,
|
|
1499
|
-
};
|
|
1500
|
-
}
|
|
1501
|
-
/**
|
|
1502
|
-
* @inheritDoc
|
|
1503
|
-
*/
|
|
1504
|
-
clone() {
|
|
1505
|
-
return new UnderlineAnnotation(this.underline);
|
|
1506
|
-
}
|
|
1507
|
-
/**
|
|
1508
|
-
* @inheritDoc
|
|
1509
|
-
*/
|
|
1510
|
-
renderClass(options) {
|
|
1511
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
1512
|
-
return null;
|
|
1513
|
-
return this.underline ? 'v-rte--underline' : null;
|
|
1514
|
-
}
|
|
1515
|
-
/**
|
|
1516
|
-
* @inheritDoc
|
|
1517
|
-
*/
|
|
1518
|
-
renderStyle(options) {
|
|
1519
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
1520
|
-
return null;
|
|
1521
|
-
return this.underline ? { textDecoration: 'underline' } : null;
|
|
1522
|
-
}
|
|
1523
|
-
}
|
|
1524
|
-
|
|
1525
|
-
/**
|
|
1526
|
-
* Annotation to make text Italic
|
|
1527
|
-
*/
|
|
1528
|
-
class ItalicAnnotation extends NodeAnnotation {
|
|
1529
|
-
constructor(italic) {
|
|
1530
|
-
super();
|
|
1531
|
-
this.type = NodeAnnotationTypeEnum.ITALIC;
|
|
1532
|
-
this.italic = italic;
|
|
1533
|
-
}
|
|
1534
|
-
/**
|
|
1535
|
-
* Generate the map item for the annotation
|
|
1536
|
-
*
|
|
1537
|
-
* @param {boolean} italic - Italic annotation
|
|
1538
|
-
* @returns {[NodeAnnotationTypeEnum.ITALIC, ItalicAnnotation]} Map item for the annotation
|
|
1539
|
-
*/
|
|
1540
|
-
static from(italic) {
|
|
1541
|
-
return [NodeAnnotationTypeEnum.ITALIC, new ItalicAnnotation(italic)];
|
|
1542
|
-
}
|
|
1543
|
-
/**
|
|
1544
|
-
* Generate the JSON representation of the annotation
|
|
1545
|
-
*
|
|
1546
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1547
|
-
*/
|
|
1548
|
-
toJSON() {
|
|
1549
|
-
return {
|
|
1550
|
-
italic: this.italic,
|
|
1551
|
-
};
|
|
1552
|
-
}
|
|
1553
|
-
/**
|
|
1554
|
-
* @inheritDoc
|
|
1555
|
-
*/
|
|
1556
|
-
clone() {
|
|
1557
|
-
return new ItalicAnnotation(this.italic);
|
|
1558
|
-
}
|
|
1559
|
-
/**
|
|
1560
|
-
* @inheritDoc
|
|
1561
|
-
*/
|
|
1562
|
-
renderClass(options) {
|
|
1563
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
1564
|
-
return null;
|
|
1565
|
-
return this.italic ? 'v-rte--italic' : null;
|
|
1566
|
-
}
|
|
1567
|
-
/**
|
|
1568
|
-
* @inheritDoc
|
|
1569
|
-
*/
|
|
1570
|
-
renderStyle(options) {
|
|
1571
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
1572
|
-
return null;
|
|
1573
|
-
return this.italic ? { fontStyle: 'italic' } : null;
|
|
1574
|
-
}
|
|
1575
|
-
}
|
|
1576
|
-
|
|
1577
|
-
/**
|
|
1578
|
-
* Annotation to make text bold
|
|
1579
|
-
*/
|
|
1580
|
-
class BoldAnnotation extends NodeAnnotation {
|
|
1581
|
-
constructor(bold) {
|
|
1582
|
-
super();
|
|
1583
|
-
this.type = NodeAnnotationTypeEnum.BOLD;
|
|
1584
|
-
this.bold = bold;
|
|
1585
|
-
}
|
|
1586
|
-
/**
|
|
1587
|
-
* Generate the map item for the annotation
|
|
1588
|
-
*
|
|
1589
|
-
* @param {boolean} bold - Bold annotation
|
|
1590
|
-
* @returns {[NodeAnnotationTypeEnum.BOLD, BoldAnnotation]} Map item for the annotation
|
|
1591
|
-
*/
|
|
1592
|
-
static from(bold) {
|
|
1593
|
-
return [NodeAnnotationTypeEnum.BOLD, new BoldAnnotation(bold)];
|
|
1594
|
-
}
|
|
1595
|
-
/**
|
|
1596
|
-
* Generate the JSON representation of the annotation
|
|
1597
|
-
*
|
|
1598
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1599
|
-
*/
|
|
1600
|
-
toJSON() {
|
|
1601
|
-
return {
|
|
1602
|
-
bold: this.bold,
|
|
1603
|
-
};
|
|
1604
|
-
}
|
|
1605
|
-
/**
|
|
1606
|
-
* @inheritDoc
|
|
1607
|
-
*/
|
|
1608
|
-
clone() {
|
|
1609
|
-
return new BoldAnnotation(this.bold);
|
|
1610
|
-
}
|
|
1611
|
-
/**
|
|
1612
|
-
* @inheritDoc
|
|
1613
|
-
*/
|
|
1614
|
-
renderClass(options) {
|
|
1615
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
1616
|
-
return null;
|
|
1617
|
-
return this.bold ? 'v-rte--bold' : null;
|
|
1618
|
-
}
|
|
1619
|
-
/**
|
|
1620
|
-
* @inheritDoc
|
|
1621
|
-
*/
|
|
1622
|
-
renderStyle(options) {
|
|
1623
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
1624
|
-
return null;
|
|
1625
|
-
return this.bold ? { fontWeight: '700' } : null;
|
|
1626
|
-
}
|
|
1627
|
-
}
|
|
1628
|
-
|
|
1629
|
-
/**
|
|
1630
|
-
* Annotation to make text code
|
|
1631
|
-
*/
|
|
1632
|
-
class CodeAnnotation extends NodeAnnotation {
|
|
1633
|
-
constructor(code, useInternalStyle = true) {
|
|
1634
|
-
super();
|
|
1635
|
-
this.type = NodeAnnotationTypeEnum.CODE;
|
|
1636
|
-
this.code = code;
|
|
1637
|
-
this.useInternalStyle = useInternalStyle;
|
|
1638
|
-
}
|
|
1639
|
-
/**
|
|
1640
|
-
* Generate the map item for the annotation
|
|
1641
|
-
*
|
|
1642
|
-
* @param {boolean} code - Bold annotation
|
|
1643
|
-
* @param {boolean} useInternalStyle - Whether to use default style for the link
|
|
1644
|
-
* @returns {[NodeAnnotationTypeEnum.CODE, CodeAnnotation]} Map item for the annotation
|
|
1645
|
-
*/
|
|
1646
|
-
static from(code, useInternalStyle) {
|
|
1647
|
-
return [NodeAnnotationTypeEnum.CODE, new CodeAnnotation(code, useInternalStyle)];
|
|
1648
|
-
}
|
|
1649
|
-
/**
|
|
1650
|
-
* Generate the JSON representation of the annotation
|
|
1651
|
-
*
|
|
1652
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1653
|
-
*/
|
|
1654
|
-
toJSON() {
|
|
1655
|
-
return {
|
|
1656
|
-
code: this.code,
|
|
1657
|
-
};
|
|
1658
|
-
}
|
|
1659
|
-
/**
|
|
1660
|
-
* @inheritDoc
|
|
1661
|
-
*/
|
|
1662
|
-
clone() {
|
|
1663
|
-
return new CodeAnnotation(this.code, this.useInternalStyle);
|
|
1664
|
-
}
|
|
1665
|
-
/**
|
|
1666
|
-
* @inheritDoc
|
|
1667
|
-
*/
|
|
1668
|
-
renderClass(options) {
|
|
1669
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
1670
|
-
return null;
|
|
1671
|
-
return this.code && this.useInternalStyle ? 'v-rte--code' : null;
|
|
1672
|
-
}
|
|
1673
|
-
/**
|
|
1674
|
-
* @inheritDoc
|
|
1675
|
-
*/
|
|
1676
|
-
renderStyle(options) {
|
|
1677
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
1678
|
-
return null;
|
|
1679
|
-
return this.code && this.useInternalStyle
|
|
1680
|
-
? {
|
|
1681
|
-
fontFamily: 'Roboto Mono',
|
|
1682
|
-
whiteSpace: 'pre-wrap',
|
|
1683
|
-
}
|
|
1684
|
-
: null;
|
|
1685
|
-
}
|
|
1686
|
-
}
|
|
1687
|
-
|
|
1688
|
-
const RTE_DEFAULT_TEXT_COLOR = {
|
|
1689
|
-
key: 'black',
|
|
1690
|
-
light: '#111128',
|
|
1691
|
-
dark: '#E3E3E8',
|
|
1692
|
-
};
|
|
1693
|
-
const RTE_TEXT_COLORS = [
|
|
1694
|
-
RTE_DEFAULT_TEXT_COLOR,
|
|
1695
|
-
{
|
|
1696
|
-
key: 'gray',
|
|
1697
|
-
light: '#5E5E6D',
|
|
1698
|
-
dark: '#B9B9C1',
|
|
1699
|
-
},
|
|
1700
|
-
{
|
|
1701
|
-
key: 'green',
|
|
1702
|
-
light: '#01801F',
|
|
1703
|
-
dark: '#59D977',
|
|
1704
|
-
},
|
|
1705
|
-
{
|
|
1706
|
-
key: 'red',
|
|
1707
|
-
light: '#BD2947',
|
|
1708
|
-
dark: '#FFB2B5',
|
|
1709
|
-
},
|
|
1710
|
-
{
|
|
1711
|
-
key: 'purple',
|
|
1712
|
-
light: '#563D82',
|
|
1713
|
-
dark: '#BEB2FF',
|
|
1714
|
-
},
|
|
1715
|
-
{
|
|
1716
|
-
key: 'teal',
|
|
1717
|
-
light: '#17758F',
|
|
1718
|
-
dark: '#4CD8FF',
|
|
1719
|
-
},
|
|
1720
|
-
];
|
|
1721
|
-
const ZERO_WIDTH_SPACE = '\u200b';
|
|
1722
|
-
const VegaRTEPresetToolbarItems = [
|
|
1723
|
-
['textStyles'],
|
|
1724
|
-
['bold', 'italic', 'underline', 'strikethrough', 'code'],
|
|
1725
|
-
['textColor'],
|
|
1726
|
-
['horizontalAlignment', 'bulletsNumbers'],
|
|
1727
|
-
['moreIndent', 'lessIndent'],
|
|
1728
|
-
['link'],
|
|
1729
|
-
['image'],
|
|
1730
|
-
['clearStyle'],
|
|
1731
|
-
];
|
|
1732
|
-
|
|
1733
|
-
/**
|
|
1734
|
-
* Annotation to make text with text color
|
|
1735
|
-
*/
|
|
1736
|
-
class TextColorAnnotation extends NodeAnnotation {
|
|
1737
|
-
constructor(textColor) {
|
|
1738
|
-
super();
|
|
1739
|
-
this.type = NodeAnnotationTypeEnum.TEXT_COLOR;
|
|
1740
|
-
this.textColor = this.formatTextColor(textColor);
|
|
1741
|
-
}
|
|
1742
|
-
/**
|
|
1743
|
-
* Generate the map item for the annotation
|
|
1744
|
-
*
|
|
1745
|
-
* @param {string} textColor - text color annotation
|
|
1746
|
-
* @returns {[NodeAnnotationTypeEnum.TEXT_COLOR, TextColorAnnotation]} Map item for the annotation
|
|
1747
|
-
*/
|
|
1748
|
-
static from(textColor) {
|
|
1749
|
-
return [NodeAnnotationTypeEnum.TEXT_COLOR, new TextColorAnnotation(textColor)];
|
|
1750
|
-
}
|
|
1751
|
-
/**
|
|
1752
|
-
* Generate the JSON representation of the annotation
|
|
1753
|
-
*
|
|
1754
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
1755
|
-
*/
|
|
1756
|
-
toJSON() {
|
|
1757
|
-
return {
|
|
1758
|
-
textColor: this.textColor.key,
|
|
1759
|
-
};
|
|
1760
|
-
}
|
|
1761
|
-
/**
|
|
1762
|
-
* @inheritDoc
|
|
1763
|
-
*/
|
|
1764
|
-
clone() {
|
|
1765
|
-
return new TextColorAnnotation(this.textColor.key);
|
|
1766
|
-
}
|
|
1767
|
-
/**
|
|
1768
|
-
* @inheritDoc
|
|
1769
|
-
*/
|
|
1770
|
-
renderClass() {
|
|
1771
|
-
return null;
|
|
1772
|
-
}
|
|
1773
|
-
/**
|
|
1774
|
-
* @inheritDoc
|
|
1775
|
-
*/
|
|
1776
|
-
renderStyle() {
|
|
1777
|
-
return {
|
|
1778
|
-
color: VegaInternalThemeManager.isDarkMode() ? this.textColor.dark : this.textColor.light,
|
|
1779
|
-
};
|
|
1780
|
-
}
|
|
1781
|
-
/**
|
|
1782
|
-
* format text color
|
|
1783
|
-
*
|
|
1784
|
-
* @param {string} textColor - text color
|
|
1785
|
-
* @returns {VegaRTEColorSchema} - VegaRTEColorSchema
|
|
1786
|
-
*/
|
|
1787
|
-
formatTextColor(textColor) {
|
|
1788
|
-
return (RTE_TEXT_COLORS.find((item) => item.key === textColor) || RTE_TEXT_COLORS[0]);
|
|
1789
|
-
}
|
|
1790
|
-
}
|
|
1791
|
-
|
|
1792
|
-
/**
|
|
1793
|
-
* Annotation to make text a link
|
|
1794
|
-
*/
|
|
1795
|
-
class LinkAnnotation extends NodeAnnotation {
|
|
1796
|
-
constructor(link, useInternalStyle = true) {
|
|
1797
|
-
super();
|
|
1798
|
-
this.type = NodeAnnotationTypeEnum.LINK;
|
|
1799
|
-
this.link = link;
|
|
1800
|
-
this.useInternalStyle = useInternalStyle;
|
|
1801
|
-
}
|
|
1802
|
-
/**
|
|
1803
|
-
* Generate the map item for the annotation
|
|
1804
|
-
*
|
|
1805
|
-
* @param {VegaRTELink} link - Bold annotation
|
|
1806
|
-
* @param {boolean} useInternalStyle - Whether to use default style for the link
|
|
1807
|
-
* @returns {[NodeAnnotationTypeEnum.LINK, LinkAnnotation]} Map item for the annotation
|
|
1808
|
-
*/
|
|
1809
|
-
static from(link, useInternalStyle = true) {
|
|
1810
|
-
return [NodeAnnotationTypeEnum.LINK, new LinkAnnotation(link, useInternalStyle)];
|
|
1811
|
-
}
|
|
1812
|
-
/**
|
|
1813
|
-
* Generate the JSON representation of the annotation
|
|
1814
|
-
*
|
|
1815
|
-
* @returns {Record<'link', VegaRTELink>} JSON representation of the annotation
|
|
1816
|
-
*/
|
|
1817
|
-
toJSON() {
|
|
1818
|
-
return {
|
|
1819
|
-
link: this.link,
|
|
1820
|
-
};
|
|
1821
|
-
}
|
|
1822
|
-
/**
|
|
1823
|
-
* @inheritDoc
|
|
1824
|
-
*/
|
|
1825
|
-
clone() {
|
|
1826
|
-
return new LinkAnnotation(this.link, this.useInternalStyle);
|
|
1827
|
-
}
|
|
1828
|
-
/**
|
|
1829
|
-
* Verify whether two link annotation is same or not
|
|
1830
|
-
*
|
|
1831
|
-
* @param {LinkAnnotation} annotation - Compared annotation
|
|
1832
|
-
* @returns {boolean} Whether two link annotation is same or not
|
|
1833
|
-
*/
|
|
1834
|
-
toEqual(annotation) {
|
|
1835
|
-
return this.link.groupKey === annotation.link.groupKey;
|
|
1836
|
-
}
|
|
1837
|
-
/**
|
|
1838
|
-
* @inheritDoc
|
|
1839
|
-
*/
|
|
1840
|
-
renderClass() {
|
|
1841
|
-
return null;
|
|
1842
|
-
}
|
|
1843
|
-
/**
|
|
1844
|
-
* @inheritDoc
|
|
1845
|
-
*/
|
|
1846
|
-
renderStyle() {
|
|
1847
|
-
return null;
|
|
1848
|
-
}
|
|
1849
|
-
}
|
|
1850
|
-
|
|
1851
|
-
/**
|
|
1852
|
-
* Action to link a group of nodes
|
|
1853
|
-
*/
|
|
1854
|
-
class LinkGroupAnnotationAction extends AnnotationAction {
|
|
1855
|
-
constructor(groupKey, nodes, type) {
|
|
1856
|
-
super();
|
|
1857
|
-
this.isFlushable = false;
|
|
1858
|
-
this.groupKey = groupKey;
|
|
1859
|
-
this.nodes = nodes;
|
|
1860
|
-
this.type = type;
|
|
1861
|
-
}
|
|
1862
|
-
/**
|
|
1863
|
-
* Converts the action to an annotation
|
|
1864
|
-
*
|
|
1865
|
-
* @returns {Annotation} The annotation
|
|
1866
|
-
*/
|
|
1867
|
-
toAnnotation() {
|
|
1868
|
-
return new LinkGroupAnnotation(this.groupKey);
|
|
1869
|
-
}
|
|
1870
|
-
}
|
|
1871
|
-
|
|
1872
|
-
/**
|
|
1873
|
-
* Sync up selection action
|
|
1874
|
-
*/
|
|
1875
|
-
class SyncUpSelectionAction extends AnnotationAction {
|
|
1876
|
-
constructor() {
|
|
1877
|
-
super();
|
|
1878
|
-
this.isFlushable = false;
|
|
1879
|
-
}
|
|
1880
|
-
/**
|
|
1881
|
-
* annotation null
|
|
1882
|
-
*
|
|
1883
|
-
* @returns {Nullable<Annotation>} null
|
|
1884
|
-
*/
|
|
1885
|
-
toAnnotation() {
|
|
1886
|
-
return null;
|
|
1887
|
-
}
|
|
1888
|
-
}
|
|
1889
|
-
|
|
1890
|
-
/**
|
|
1891
|
-
* The base action handle strategy class, use to modify the rich text node content or modify the annotation.
|
|
1892
|
-
*/
|
|
1893
|
-
class ActionHandleStrategy {
|
|
1894
|
-
/**
|
|
1895
|
-
* Public method to invoke the handle logic.
|
|
1896
|
-
*
|
|
1897
|
-
* @typedef R generic type
|
|
1898
|
-
* @param {ModifyContentAction | AnnotationAction} action - The action instance. Contains the action type and necessary params.
|
|
1899
|
-
* @param {RTENode | RTEBlock | VegaRTEContent} target - The rich text node instance that will be modified.
|
|
1900
|
-
* @returns {R} - The invoke result in special strategy.
|
|
1901
|
-
*/
|
|
1902
|
-
execute(action, target) {
|
|
1903
|
-
LogUtility.log(`Executing action ${action.constructor.name} on ${target.constructor.name} ${target['id']}`);
|
|
1904
|
-
return this.handleAction(action, target);
|
|
1905
|
-
}
|
|
1906
|
-
/**
|
|
1907
|
-
* Update the custom style annotation of a block or node
|
|
1908
|
-
*
|
|
1909
|
-
* @param {RTEBlock | RTETextNode} item - block or node
|
|
1910
|
-
* @param {string[]} styleKeys - custom style keys, for examples ['fontSize', 'fontWeight'].
|
|
1911
|
-
*/
|
|
1912
|
-
updateCustomStyleAnnotation(item, styleKeys) {
|
|
1913
|
-
const customStyleAnnotation = item.annotationMap.get(CommonAnnotationTypeEnum.CUSTOM_STYLE);
|
|
1914
|
-
if (customStyleAnnotation && this.isCustomStyle(customStyleAnnotation, styleKeys)) {
|
|
1915
|
-
item.annotationMap.set(customStyleAnnotation.type, new CustomStyleAnnotation(customStyleAnnotation.removeStyles(styleKeys)));
|
|
1916
|
-
}
|
|
1917
|
-
}
|
|
1918
|
-
/**
|
|
1919
|
-
* Create a new paragraph block with the given text.
|
|
1920
|
-
*
|
|
1921
|
-
* @param {string} text - The text content for the new paragraph.
|
|
1922
|
-
* @returns {Nullable<RTETextBlock>} - The newly created paragraph block, or null if creation failed.
|
|
1923
|
-
*/
|
|
1924
|
-
createNewParagraph(text) {
|
|
1925
|
-
const dtoClass = RTEDTOClassManager$1.getRTEBlockClass('paragraph');
|
|
1926
|
-
if (dtoClass) {
|
|
1927
|
-
const newParagraph = dtoClass.from({
|
|
1928
|
-
id: generateUUID(),
|
|
1929
|
-
type: 'paragraph',
|
|
1930
|
-
nodes: [{ id: generateUUID(), type: 'text', text }],
|
|
1931
|
-
});
|
|
1932
|
-
return newParagraph;
|
|
1933
|
-
}
|
|
1934
|
-
}
|
|
1935
|
-
/**
|
|
1936
|
-
* Get the root content from a child block or node.
|
|
1937
|
-
*
|
|
1938
|
-
* @param {RTEBlock | RTENode} child - The child block or node.
|
|
1939
|
-
* @returns {Nullable<VegaRTEContent>} The root content, if found.
|
|
1940
|
-
*/
|
|
1941
|
-
getRootContent(child) {
|
|
1942
|
-
const parent = child.parent;
|
|
1943
|
-
if (parent) {
|
|
1944
|
-
if (parent.constructor.name === 'VegaRTEContent') {
|
|
1945
|
-
return parent;
|
|
1946
|
-
}
|
|
1947
|
-
else {
|
|
1948
|
-
return this.getRootContent(parent);
|
|
1949
|
-
}
|
|
1950
|
-
}
|
|
1951
|
-
}
|
|
1952
|
-
/**
|
|
1953
|
-
* Check the caret position at the start of a block.
|
|
1954
|
-
*
|
|
1955
|
-
* @param {RTEBlock} block - The RTE Block.
|
|
1956
|
-
* @param {RTENode} node - The RTE Node.
|
|
1957
|
-
* @param {number} offset - The offset position.
|
|
1958
|
-
* @returns {boolean} - Whether the caret is at the start of the block.
|
|
1959
|
-
*/
|
|
1960
|
-
isCaretPositionAtBlockStart(block, node, offset) {
|
|
1961
|
-
return node === block.children[0] && offset === 0;
|
|
1962
|
-
}
|
|
1963
|
-
/**
|
|
1964
|
-
* Check the caret position at the end of a block.
|
|
1965
|
-
*
|
|
1966
|
-
* @param {RTEBlock} block - The RTE Block.
|
|
1967
|
-
* @param {RTENode} node - The RTE Node.
|
|
1968
|
-
* @param {number} offset - The offset position.
|
|
1969
|
-
* @returns {boolean} - Whether the caret is at the end of the block.
|
|
1970
|
-
*/
|
|
1971
|
-
isCaretPositionAtBlockEnd(block, node, offset) {
|
|
1972
|
-
if (!node.isContentEditable()) {
|
|
1973
|
-
return this.isCaretPositionAtDecoratorBlockEnd(block, node, offset);
|
|
1974
|
-
}
|
|
1975
|
-
else {
|
|
1976
|
-
return this.isCaretPositionAtTextBlockEnd(block, node, offset);
|
|
1977
|
-
}
|
|
1978
|
-
}
|
|
1979
|
-
/**
|
|
1980
|
-
* Checks if the caret position is at the end of a specified RTETextNode.
|
|
1981
|
-
*
|
|
1982
|
-
* @param {RTETextBlock} textBlock - `RTETextBlock` - a text block.
|
|
1983
|
-
* @param {RTETextNode} node - `RTETextNode` - a node representing an image in a rich text editor.
|
|
1984
|
-
* @param {number} startOffset - The position within the text node where the caret is located.
|
|
1985
|
-
* @returns {boolean} a boolean value, which indicates whether the caret position is at the start of the RTETextNode.
|
|
1986
|
-
*/
|
|
1987
|
-
isCaretPositionAtTextBlockEnd(textBlock, node, startOffset) {
|
|
1988
|
-
const lastNode = textBlock.children[textBlock.children.length - 1];
|
|
1989
|
-
return node === lastNode && (node.isEmpty() || startOffset === lastNode.text.length);
|
|
1990
|
-
}
|
|
1991
|
-
/**
|
|
1992
|
-
* Checks if the caret position is at the end of a given decorator node.
|
|
1993
|
-
*
|
|
1994
|
-
* @param {RTEBlock} target - The image block.
|
|
1995
|
-
* @param {RTENode} node - `node` is a RTEDecoratorNode or non-editable text node.
|
|
1996
|
-
* @param {number} startOffset - The position within the `RTEDecoratorNode` where the caret is located.
|
|
1997
|
-
* @returns {boolean}Returns a boolean value indicating whether the caret position is at the end of the `RTEDecoratorNode`.
|
|
1998
|
-
*/
|
|
1999
|
-
isCaretPositionAtDecoratorBlockEnd(target, node, startOffset) {
|
|
2000
|
-
return node === target.children[target.children.length - 1] && startOffset !== 0;
|
|
2001
|
-
}
|
|
2002
|
-
/**
|
|
2003
|
-
* Determines if the custom style annotation includes any the custom style.
|
|
2004
|
-
*
|
|
2005
|
-
* @param {CustomStyleAnnotation} customStyleAnnotation - custom style annotation
|
|
2006
|
-
* @param {string[]} styleKeys - custom style keys, for examples ['fontSize', 'fontWeight'].
|
|
2007
|
-
* @returns {boolean} - True if the custom key includes the custom style, false otherwise.
|
|
2008
|
-
*/
|
|
2009
|
-
isCustomStyle(customStyleAnnotation, styleKeys) {
|
|
2010
|
-
return styleKeys.some((item) => Object.keys(customStyleAnnotation.customStyle).includes(item));
|
|
2011
|
-
}
|
|
2012
|
-
}
|
|
2013
|
-
|
|
2014
|
-
/**
|
|
2015
|
-
* Split the corresponding link group nodes *
|
|
2016
|
-
*/
|
|
2017
|
-
class LinkGroupNodeSplitAction extends ModifyContentAction {
|
|
2018
|
-
constructor(splittedTextNodes) {
|
|
2019
|
-
super();
|
|
2020
|
-
this.type = ModifyContentActionType.LINK_GROUP_NODE_SPLIT;
|
|
2021
|
-
this.splittedTextNodes = splittedTextNodes;
|
|
2022
|
-
}
|
|
2023
|
-
}
|
|
2024
|
-
|
|
2025
|
-
/**
|
|
2026
|
-
* Split the text node into two or there nodes according to the rules.
|
|
2027
|
-
*/
|
|
2028
|
-
class NodeSplitTextStrategy extends ActionHandleStrategy {
|
|
2029
|
-
constructor() {
|
|
2030
|
-
super(...arguments);
|
|
2031
|
-
// The new create node that need apply annotation or the current target. This property used to export after the execute method invoke.
|
|
2032
|
-
this.applyTargetNode = null;
|
|
2033
|
-
}
|
|
2034
|
-
/**
|
|
2035
|
-
* Split the text node.
|
|
2036
|
-
*
|
|
2037
|
-
* @param {TextSplittableAction} action - The split action.
|
|
2038
|
-
* @param {RTETextNode} target - The text node that need to be splited.
|
|
2039
|
-
* @returns {Nullable<RTETextNode>} - The new insert text node or the current text node that need to apply the action.
|
|
2040
|
-
*/
|
|
2041
|
-
handleAction(action, target) {
|
|
2042
|
-
const selectionRangeAnnotation = target.getAnnotationByType(InternalAnnotationTypeEnum.SELECTION_RANGE);
|
|
2043
|
-
this.setApplyTargetNode(null);
|
|
2044
|
-
if (action instanceof TextSplittableAction && action.doSplit && selectionRangeAnnotation) {
|
|
2045
|
-
const { startContainer, endContainer, startOffset, endOffset } = selectionRangeAnnotation.range;
|
|
2046
|
-
const noTextRangeSelected = startContainer === endContainer && startOffset === endOffset;
|
|
2047
|
-
target.parent.children = target.parent.children.flatMap((item) => {
|
|
2048
|
-
if (item.id === target.id) {
|
|
2049
|
-
if (noTextRangeSelected) {
|
|
2050
|
-
return this.insertNewNode(startOffset, target);
|
|
2051
|
-
}
|
|
2052
|
-
if (this.shouldSplitSelection(selectionRangeAnnotation.range) &&
|
|
2053
|
-
target.isContentEditable()) {
|
|
2054
|
-
const splittedTextNodes = this.splitTextNode(selectionRangeAnnotation.range, target);
|
|
2055
|
-
if (item.annotationMap.has('LINK')) {
|
|
2056
|
-
item.apply(new LinkGroupNodeSplitAction(splittedTextNodes));
|
|
2057
|
-
}
|
|
2058
|
-
return splittedTextNodes;
|
|
2059
|
-
}
|
|
2060
|
-
else {
|
|
2061
|
-
this.setApplyTargetNode(target);
|
|
2062
|
-
return target;
|
|
2063
|
-
}
|
|
2064
|
-
}
|
|
2065
|
-
return item;
|
|
2066
|
-
});
|
|
2067
|
-
}
|
|
2068
|
-
return this.applyTargetNode;
|
|
2069
|
-
}
|
|
2070
|
-
/**
|
|
2071
|
-
* Insert the new node at the start offset
|
|
2072
|
-
*
|
|
2073
|
-
* @param {number} startOffset - The start position offset
|
|
2074
|
-
* @param {RTETextNode} target - RTETextNode
|
|
2075
|
-
* @returns {RTETextNode[]} - RTETextNode array
|
|
2076
|
-
*/
|
|
2077
|
-
insertNewNode(startOffset, target) {
|
|
2078
|
-
const newNode = target.cloneWithText('');
|
|
2079
|
-
this.setApplyTargetNode(newNode);
|
|
2080
|
-
const index = target.parent.children.findIndex((node) => node === target);
|
|
2081
|
-
if (startOffset === 0 || (!target.isContentEditable() && startOffset === index)) {
|
|
2082
|
-
return [newNode, target];
|
|
2083
|
-
}
|
|
2084
|
-
if (startOffset === target.text.length ||
|
|
2085
|
-
(!target.isContentEditable() && startOffset === index + 1)) {
|
|
2086
|
-
return [target, newNode];
|
|
2087
|
-
}
|
|
2088
|
-
const beforeNode = target.cloneWithText(target.text.substring(0, startOffset));
|
|
2089
|
-
const afterNode = target.cloneWithText(target.text.substring(startOffset));
|
|
2090
|
-
return [beforeNode, newNode, afterNode];
|
|
2091
|
-
}
|
|
2092
|
-
/**
|
|
2093
|
-
* Whether a given range should be split based on various conditions within the range.
|
|
2094
|
-
*
|
|
2095
|
-
* @param {Range} range - Selection range
|
|
2096
|
-
* @returns {boolean} Returns a boolean value indicating whether the selection range should be split.
|
|
2097
|
-
*/
|
|
2098
|
-
shouldSplitSelection(range) {
|
|
2099
|
-
const { startContainer, endContainer, startOffset, endOffset } = range;
|
|
2100
|
-
const isCrossNode = startContainer !== endContainer;
|
|
2101
|
-
const isPartialStart = startOffset > 0;
|
|
2102
|
-
const isPartialEnd = endOffset < (endContainer.textContent ? endContainer.textContent.length : 0);
|
|
2103
|
-
const isPartialSelection = isPartialStart || isPartialEnd;
|
|
2104
|
-
return isCrossNode || isPartialSelection;
|
|
2105
|
-
}
|
|
2106
|
-
/**
|
|
2107
|
-
* Split text node with range
|
|
2108
|
-
*
|
|
2109
|
-
* @param {Range} range - Selection range
|
|
2110
|
-
* @param {RTETextNode} target - RTETextNode
|
|
2111
|
-
* @returns {RTETextNode[] | RTETextNode} RTETextNode array
|
|
2112
|
-
*/
|
|
2113
|
-
splitTextNode(range, target) {
|
|
2114
|
-
const { startContainer, endContainer, startOffset } = range;
|
|
2115
|
-
const startNode = startContainer.parentElement;
|
|
2116
|
-
const endNode = endContainer.parentElement;
|
|
2117
|
-
/**
|
|
2118
|
-
* Split the text from the start offset to the end offset
|
|
2119
|
-
*
|
|
2120
|
-
* @param {string} text - The text string
|
|
2121
|
-
* @param {number} startOffset - The start offset position
|
|
2122
|
-
* @param {number} endOffset - The end offset position
|
|
2123
|
-
* @returns {RTETextNode[]} - The split text node array
|
|
2124
|
-
*/
|
|
2125
|
-
const splitText = (text, startOffset, endOffset) => {
|
|
2126
|
-
const beforeText = text.substring(0, startOffset);
|
|
2127
|
-
const selectedText = text.substring(startOffset, endOffset);
|
|
2128
|
-
const afterText = text.substring(endOffset);
|
|
2129
|
-
return [
|
|
2130
|
-
target.cloneWithText(beforeText),
|
|
2131
|
-
target.cloneWithText(selectedText),
|
|
2132
|
-
target.cloneWithText(afterText),
|
|
2133
|
-
];
|
|
2134
|
-
};
|
|
2135
|
-
const startItemDto = startNode && stateEntityRenderingRegistry.getEntityByDOM(startNode);
|
|
2136
|
-
const endItemDto = endNode && stateEntityRenderingRegistry.getEntityByDOM(endNode);
|
|
2137
|
-
if (startItemDto && startItemDto.id === target.id) {
|
|
2138
|
-
const endOffset = startContainer === endContainer ? range.endOffset : target.text.length;
|
|
2139
|
-
const [beforeNode, selectedNode, afterNode] = splitText(target.text, startOffset, endOffset);
|
|
2140
|
-
this.setApplyTargetNode(selectedNode);
|
|
2141
|
-
return [beforeNode, selectedNode, afterNode].filter((node) => !!node.text);
|
|
2142
|
-
}
|
|
2143
|
-
else if (endItemDto && endItemDto.id === target.id) {
|
|
2144
|
-
const [beforeNode, selectedNode, afterNode] = splitText(target.text, 0, range.endOffset);
|
|
2145
|
-
this.setApplyTargetNode(selectedNode);
|
|
2146
|
-
return [beforeNode, selectedNode, afterNode].filter((node) => !!node.text);
|
|
2147
|
-
}
|
|
2148
|
-
else {
|
|
2149
|
-
this.setApplyTargetNode(target);
|
|
2150
|
-
return target;
|
|
2151
|
-
}
|
|
2152
|
-
}
|
|
2153
|
-
/**
|
|
2154
|
-
* Store the text node which need to apply the annotation. Clear the value if the input is null.
|
|
2155
|
-
*
|
|
2156
|
-
* @param {RTETextNode | null} node - The new text node.
|
|
2157
|
-
*/
|
|
2158
|
-
setApplyTargetNode(node) {
|
|
2159
|
-
this.applyTargetNode = node;
|
|
2160
|
-
}
|
|
2161
|
-
}
|
|
2162
|
-
|
|
2163
|
-
/**
|
|
2164
|
-
* Action to toggle bold annotation
|
|
2165
|
-
*/
|
|
2166
|
-
class BoldAnnotationAction extends TextSplittableAction {
|
|
2167
|
-
constructor(bold) {
|
|
2168
|
-
super();
|
|
2169
|
-
this.isFlushable = true;
|
|
2170
|
-
this.bold = bold;
|
|
2171
|
-
}
|
|
2172
|
-
/**
|
|
2173
|
-
* Converts the action to an annotation
|
|
2174
|
-
*
|
|
2175
|
-
* @returns {BoldAnnotation} the annotation
|
|
2176
|
-
*/
|
|
2177
|
-
toAnnotation() {
|
|
2178
|
-
return new BoldAnnotation(this.bold);
|
|
2179
|
-
}
|
|
2180
|
-
}
|
|
2181
|
-
|
|
2182
|
-
/**
|
|
2183
|
-
* Annotation to host which annotations will be clear formatting
|
|
2184
|
-
*/
|
|
2185
|
-
class ClearFormattingAnnotation extends Annotation {
|
|
2186
|
-
constructor() {
|
|
2187
|
-
super(...arguments);
|
|
2188
|
-
this.type = InternalAnnotationTypeEnum.CLEAR_FORMATTING;
|
|
2189
|
-
this.items = [
|
|
2190
|
-
NodeAnnotationTypeEnum.BOLD,
|
|
2191
|
-
NodeAnnotationTypeEnum.ITALIC,
|
|
2192
|
-
NodeAnnotationTypeEnum.UNDERLINE,
|
|
2193
|
-
NodeAnnotationTypeEnum.STRIKETHROUGH,
|
|
2194
|
-
NodeAnnotationTypeEnum.TEXT_COLOR,
|
|
2195
|
-
NodeAnnotationTypeEnum.CODE,
|
|
2196
|
-
CommonAnnotationTypeEnum.CUSTOM_STYLE,
|
|
2197
|
-
];
|
|
2198
|
-
}
|
|
2199
|
-
}
|
|
2200
|
-
|
|
2201
|
-
/**
|
|
2202
|
-
* Action to toggle clear formatting
|
|
2203
|
-
*/
|
|
2204
|
-
class ClearFormattingAnnotationAction extends TextSplittableAction {
|
|
2205
|
-
constructor() {
|
|
2206
|
-
super(...arguments);
|
|
2207
|
-
this.isFlushable = true;
|
|
2208
|
-
}
|
|
2209
|
-
/**
|
|
2210
|
-
* Converts the action to an annotation
|
|
2211
|
-
*
|
|
2212
|
-
* @returns {Annotation} the annotation
|
|
2213
|
-
*/
|
|
2214
|
-
toAnnotation() {
|
|
2215
|
-
return new ClearFormattingAnnotation();
|
|
2216
|
-
}
|
|
2217
|
-
}
|
|
2218
|
-
|
|
2219
|
-
/**
|
|
2220
|
-
* Action to toggle code annotation
|
|
2221
|
-
*/
|
|
2222
|
-
class CodeAnnotationAction extends TextSplittableAction {
|
|
2223
|
-
constructor(code) {
|
|
2224
|
-
super();
|
|
2225
|
-
this.isFlushable = true;
|
|
2226
|
-
this.code = code;
|
|
2227
|
-
}
|
|
2228
|
-
/**
|
|
2229
|
-
* Converts the action to an annotation
|
|
2230
|
-
*
|
|
2231
|
-
* @returns {CodeAnnotation} the annotation
|
|
2232
|
-
*/
|
|
2233
|
-
toAnnotation() {
|
|
2234
|
-
return new CodeAnnotation(this.code);
|
|
2235
|
-
}
|
|
2236
|
-
}
|
|
2237
|
-
|
|
2238
|
-
/**
|
|
2239
|
-
* Delete the node annotation by type
|
|
2240
|
-
*/
|
|
2241
|
-
class DeleteNodeAnnotationAction extends AnnotationAction {
|
|
2242
|
-
constructor(annotationType) {
|
|
2243
|
-
super();
|
|
2244
|
-
this.isFlushable = true;
|
|
2245
|
-
this.annotationType = annotationType;
|
|
2246
|
-
}
|
|
2247
|
-
/**
|
|
2248
|
-
* Don't need this for this action
|
|
2249
|
-
*
|
|
2250
|
-
* @returns {Nullable<Annotation>} undefined
|
|
2251
|
-
*/
|
|
2252
|
-
toAnnotation() {
|
|
2253
|
-
return undefined;
|
|
2254
|
-
}
|
|
2255
|
-
}
|
|
2256
|
-
|
|
2257
|
-
/**
|
|
2258
|
-
* Action to toggle the italic annotation
|
|
2259
|
-
*/
|
|
2260
|
-
class ItalicAnnotationAction extends TextSplittableAction {
|
|
2261
|
-
constructor(italic) {
|
|
2262
|
-
super();
|
|
2263
|
-
this.isFlushable = true;
|
|
2264
|
-
this.italic = italic;
|
|
2265
|
-
}
|
|
2266
|
-
/**
|
|
2267
|
-
* Converts the action to an annotation
|
|
2268
|
-
*
|
|
2269
|
-
* @returns {ItalicAnnotation} The annotation
|
|
2270
|
-
*/
|
|
2271
|
-
toAnnotation() {
|
|
2272
|
-
return new ItalicAnnotation(this.italic);
|
|
2273
|
-
}
|
|
2274
|
-
}
|
|
2275
|
-
|
|
2276
|
-
/**
|
|
2277
|
-
* Action to toggle link annotation
|
|
2278
|
-
*/
|
|
2279
|
-
class LinkAnnotationAction extends TextSplittableAction {
|
|
2280
|
-
constructor({ link, newText, needMergeNode, doSplit, type, }) {
|
|
2281
|
-
super();
|
|
2282
|
-
this.isFlushable = true;
|
|
2283
|
-
this.link = link;
|
|
2284
|
-
this.needMergeNode = needMergeNode;
|
|
2285
|
-
this.newText = newText;
|
|
2286
|
-
this.type = type;
|
|
2287
|
-
if (isNonNullable(doSplit)) {
|
|
2288
|
-
this.doSplit = doSplit;
|
|
2289
|
-
}
|
|
2290
|
-
}
|
|
2291
|
-
/**
|
|
2292
|
-
* Converts the action to an annotation
|
|
2293
|
-
*
|
|
2294
|
-
* @returns {LinkAnnotation} the annotation
|
|
2295
|
-
*/
|
|
2296
|
-
toAnnotation() {
|
|
2297
|
-
return new LinkAnnotation(this.link);
|
|
2298
|
-
}
|
|
2299
|
-
}
|
|
2300
|
-
|
|
2301
|
-
/**
|
|
2302
|
-
* Action to toggle the strikethrough annotation
|
|
2303
|
-
*/
|
|
2304
|
-
class StrikethroughAnnotationAction extends TextSplittableAction {
|
|
2305
|
-
constructor(underline) {
|
|
2306
|
-
super();
|
|
2307
|
-
this.isFlushable = true;
|
|
2308
|
-
this.strikethrough = underline;
|
|
2309
|
-
}
|
|
2310
|
-
/**
|
|
2311
|
-
* Converts the action to an annotation
|
|
2312
|
-
*
|
|
2313
|
-
* @returns {Annotation} the annotation
|
|
2314
|
-
*/
|
|
2315
|
-
toAnnotation() {
|
|
2316
|
-
return new StrikethroughAnnotation(this.strikethrough);
|
|
2317
|
-
}
|
|
2318
|
-
}
|
|
2319
|
-
|
|
2320
|
-
/**
|
|
2321
|
-
* Action to toggle the underline annotation
|
|
2322
|
-
*/
|
|
2323
|
-
class UnderlineAnnotationAction extends TextSplittableAction {
|
|
2324
|
-
constructor(underline) {
|
|
2325
|
-
super();
|
|
2326
|
-
this.isFlushable = true;
|
|
2327
|
-
this.underline = underline;
|
|
2328
|
-
}
|
|
2329
|
-
/**
|
|
2330
|
-
* Converts the action to an annotation
|
|
2331
|
-
*
|
|
2332
|
-
* @returns {Annotation} the annotation
|
|
2333
|
-
*/
|
|
2334
|
-
toAnnotation() {
|
|
2335
|
-
return new UnderlineAnnotation(this.underline);
|
|
2336
|
-
}
|
|
2337
|
-
}
|
|
2338
|
-
|
|
2339
|
-
/**
|
|
2340
|
-
* The current strategy used to modify the text node annotation map.
|
|
2341
|
-
*/
|
|
2342
|
-
class NodeUpdateAnnotationMapStrategy extends ActionHandleStrategy {
|
|
2343
|
-
/**
|
|
2344
|
-
* Remove or set annotation to the text node annotation map.
|
|
2345
|
-
*
|
|
2346
|
-
* @param {AnnotationAction} action - The annotation action instance.
|
|
2347
|
-
* @param {RTETextNode} target - The current text node.
|
|
2348
|
-
*/
|
|
2349
|
-
handleAction(action, target) {
|
|
2350
|
-
const annotation = action.toAnnotation();
|
|
2351
|
-
if (action instanceof DeleteNodeAnnotationAction) {
|
|
2352
|
-
target.annotationMap.delete(action.annotationType);
|
|
2353
|
-
return;
|
|
2354
|
-
}
|
|
2355
|
-
if (annotation instanceof ClearFormattingAnnotation) {
|
|
2356
|
-
annotation.items.forEach((item) => {
|
|
2357
|
-
target.deleteAnnotationByType(item);
|
|
2358
|
-
});
|
|
2359
|
-
return;
|
|
2360
|
-
}
|
|
2361
|
-
if (annotation instanceof NodeAnnotation || annotation instanceof SelectionRangeAnnotation) {
|
|
2362
|
-
if (action instanceof LinkAnnotationAction) {
|
|
2363
|
-
if (isNonNullable(action.newText)) {
|
|
2364
|
-
target.text = action.newText;
|
|
2365
|
-
}
|
|
2366
|
-
target.parent.apply(new LinkGroupAnnotationAction(action.link.groupKey, [target], action.type));
|
|
2367
|
-
}
|
|
2368
|
-
if (action instanceof CodeAnnotationAction) {
|
|
2369
|
-
this.handleAction(new ClearFormattingAnnotationAction(), target);
|
|
2370
|
-
}
|
|
2371
|
-
if (action instanceof BoldAnnotationAction) {
|
|
2372
|
-
this.updateCustomStyleAnnotation(target, ['fontWeight']);
|
|
2373
|
-
}
|
|
2374
|
-
if (action instanceof ItalicAnnotationAction) {
|
|
2375
|
-
this.updateCustomStyleAnnotation(target, ['fontStyle']);
|
|
2376
|
-
}
|
|
2377
|
-
if (action instanceof UnderlineAnnotationAction ||
|
|
2378
|
-
action instanceof StrikethroughAnnotationAction) {
|
|
2379
|
-
this.updateCustomStyleAnnotation(target, ['textDecoration']);
|
|
2380
|
-
}
|
|
2381
|
-
target.annotationMap.set(annotation.type, annotation);
|
|
2382
|
-
return;
|
|
2383
|
-
}
|
|
2384
|
-
}
|
|
2385
|
-
}
|
|
2386
|
-
|
|
2387
|
-
/**
|
|
2388
|
-
* Delete the corresponding link group according to the text node *
|
|
2389
|
-
*/
|
|
2390
|
-
class DeleteLinkGroupAction extends ModifyContentAction {
|
|
2391
|
-
constructor() {
|
|
2392
|
-
super(...arguments);
|
|
2393
|
-
this.type = ModifyContentActionType.DELETE_LINK_GROUP;
|
|
2394
|
-
}
|
|
2395
|
-
}
|
|
2396
|
-
|
|
2397
|
-
/**
|
|
2398
|
-
* Update the editor text node text content strategy.
|
|
2399
|
-
*/
|
|
2400
|
-
class NodeUpdateTextStrategy extends ActionHandleStrategy {
|
|
2401
|
-
/**
|
|
2402
|
-
* Updates the text content of a node and unlink the node if it is a link node and the text is deleted.
|
|
2403
|
-
*
|
|
2404
|
-
* @param {UpdateTextAction} action - The update text action instance.
|
|
2405
|
-
* @param {RTETextNode} target - The text node instance which need update the text.
|
|
2406
|
-
*/
|
|
2407
|
-
handleAction(action, target) {
|
|
2408
|
-
target.text = action.newTextContent;
|
|
2409
|
-
// The link node should unlink when delete all text
|
|
2410
|
-
if (!target.text && target.annotationMap.has('LINK')) {
|
|
2411
|
-
target.apply(new DeleteLinkGroupAction());
|
|
2412
|
-
}
|
|
2413
|
-
}
|
|
2414
|
-
}
|
|
2415
|
-
|
|
2416
|
-
/**
|
|
2417
|
-
* Update the text node property text action
|
|
2418
|
-
*
|
|
2419
|
-
* @example textNode.apply(new UpdateTextAction(newText))
|
|
2420
|
-
*/
|
|
2421
|
-
class UpdateTextAction extends ModifyContentAction {
|
|
2422
|
-
constructor(text) {
|
|
2423
|
-
super();
|
|
2424
|
-
this.type = ModifyContentActionType.UPDATE_TEXT;
|
|
2425
|
-
this.newTextContent = '';
|
|
2426
|
-
this.newTextContent = text;
|
|
2427
|
-
}
|
|
2428
|
-
}
|
|
2429
|
-
|
|
2430
|
-
/**
|
|
2431
|
-
* Replaces the rich text node selected text strategy.
|
|
2432
|
-
*/
|
|
2433
|
-
class NodeReplaceSelectedTextStrategy extends ActionHandleStrategy {
|
|
2434
|
-
/**
|
|
2435
|
-
* @inheritDoc
|
|
2436
|
-
*/
|
|
2437
|
-
handleAction(action, target) {
|
|
2438
|
-
this.replaceSelectedText(action.textToBeInsert, action.currentRange, target);
|
|
2439
|
-
}
|
|
2440
|
-
/**
|
|
2441
|
-
* Replaces the selected text within a given range with a new text in a TypeScript class.
|
|
2442
|
-
*
|
|
2443
|
-
* @param {string} text - The new text that will replace the currently selected text within the specified range.
|
|
2444
|
-
* @param {RTERange} currentRange - A range of text within a Rich Text Editor (RTE).
|
|
2445
|
-
* @param {RTETextNode} target - The RTE text node instance.
|
|
2446
|
-
*/
|
|
2447
|
-
replaceSelectedText(text, currentRange, target) {
|
|
2448
|
-
if (currentRange && currentRange.startContainer && currentRange.endContainer) {
|
|
2449
|
-
const { startContainer, endContainer, startOffset, endOffset } = currentRange;
|
|
2450
|
-
let newText = target.text;
|
|
2451
|
-
if (startContainer === endContainer && startOffset === endOffset && text) {
|
|
2452
|
-
newText = target.text.slice(0, startOffset) + text + target.text.slice(startOffset);
|
|
2453
|
-
}
|
|
2454
|
-
else {
|
|
2455
|
-
const startNode = startContainer.parentElement;
|
|
2456
|
-
const endNode = endContainer.parentElement;
|
|
2457
|
-
const startItemDto = startNode && stateEntityRenderingRegistry.getEntityByDOM(startNode);
|
|
2458
|
-
const endItemDto = endNode && stateEntityRenderingRegistry.getEntityByDOM(endNode);
|
|
2459
|
-
let startIndex = 0, endIndex = target.text.length;
|
|
2460
|
-
if (startItemDto && startItemDto === target) {
|
|
2461
|
-
startIndex = startOffset;
|
|
2462
|
-
endIndex = startContainer === endContainer ? endOffset : endIndex;
|
|
2463
|
-
}
|
|
2464
|
-
else if (endItemDto && endItemDto === target) {
|
|
2465
|
-
endIndex = endOffset;
|
|
2466
|
-
}
|
|
2467
|
-
newText = target.text.slice(0, startIndex) + text + target.text.slice(endIndex);
|
|
2468
|
-
}
|
|
2469
|
-
target.apply(new UpdateTextAction(newText));
|
|
2470
|
-
}
|
|
2471
|
-
}
|
|
2472
|
-
}
|
|
2473
|
-
|
|
2474
|
-
/**
|
|
2475
|
-
* Inline HTML annotation
|
|
2476
|
-
*/
|
|
2477
|
-
class InlineHtmlAnnotation extends Annotation {
|
|
2478
|
-
constructor(htmlTag) {
|
|
2479
|
-
super();
|
|
2480
|
-
this.type = NodeAnnotationTypeEnum.INLINE_HTML;
|
|
2481
|
-
this.htmlTag = htmlTag;
|
|
2482
|
-
}
|
|
2483
|
-
/**
|
|
2484
|
-
* Generate the map item for the annotation
|
|
2485
|
-
*
|
|
2486
|
-
* @param {VegaInlineHtmlSchema} inlineHtml - Inline HTML node
|
|
2487
|
-
* @returns {[NodeAnnotationTypeEnum.INLINE_HTML, InlineHtmlAnnotation]} Map item for the annotation
|
|
2488
|
-
*/
|
|
2489
|
-
static from(inlineHtml) {
|
|
2490
|
-
const { htmlTag, child, customStyle, customClass, customAttribute } = inlineHtml;
|
|
2491
|
-
const inlineHtmlAnnotation = new InlineHtmlAnnotation(htmlTag);
|
|
2492
|
-
inlineHtmlAnnotation.child = child ? InlineHtmlAnnotation.from(child)[1] : undefined;
|
|
2493
|
-
inlineHtmlAnnotation.customAttribute = customAttribute
|
|
2494
|
-
? CustomAttributeAnnotation.from(customAttribute)[1]
|
|
2495
|
-
: undefined;
|
|
2496
|
-
inlineHtmlAnnotation.customClass = customClass
|
|
2497
|
-
? CustomClassAnnotation.from(customClass)[1]
|
|
2498
|
-
: undefined;
|
|
2499
|
-
inlineHtmlAnnotation.customStyle = customStyle
|
|
2500
|
-
? CustomStyleAnnotation.from(customStyle)[1]
|
|
2501
|
-
: undefined;
|
|
2502
|
-
return [NodeAnnotationTypeEnum.INLINE_HTML, inlineHtmlAnnotation];
|
|
2503
|
-
}
|
|
2504
|
-
/**
|
|
2505
|
-
* Create a new inline HTML annotation
|
|
2506
|
-
*
|
|
2507
|
-
* @returns {InlineHtmlAnnotation} - Inline HTML annotation
|
|
2508
|
-
*/
|
|
2509
|
-
clone() {
|
|
2510
|
-
var _a, _b, _c, _d;
|
|
2511
|
-
const inlineHtmlAnnotation = new InlineHtmlAnnotation(this.htmlTag);
|
|
2512
|
-
inlineHtmlAnnotation.child = (_a = this.child) === null || _a === void 0 ? void 0 : _a.clone();
|
|
2513
|
-
inlineHtmlAnnotation.customAttribute = (_b = this.customAttribute) === null || _b === void 0 ? void 0 : _b.clone();
|
|
2514
|
-
inlineHtmlAnnotation.customClass = (_c = this.customClass) === null || _c === void 0 ? void 0 : _c.clone();
|
|
2515
|
-
inlineHtmlAnnotation.customStyle = (_d = this.customStyle) === null || _d === void 0 ? void 0 : _d.clone();
|
|
2516
|
-
return inlineHtmlAnnotation;
|
|
2517
|
-
}
|
|
2518
|
-
/**
|
|
2519
|
-
* Generate the JSON representation of the annotation
|
|
2520
|
-
*
|
|
2521
|
-
* @returns {Record<string, unknown>} JSON representation of the annotation
|
|
2522
|
-
*/
|
|
2523
|
-
toJSON() {
|
|
2524
|
-
var _a, _b, _c, _d;
|
|
2525
|
-
return {
|
|
2526
|
-
inlineHtml: cleanObject({
|
|
2527
|
-
htmlTag: this.htmlTag,
|
|
2528
|
-
child: (_a = this.child) === null || _a === void 0 ? void 0 : _a.toJSON().inlineHtml,
|
|
2529
|
-
customAttribute: (_b = this.customAttribute) === null || _b === void 0 ? void 0 : _b.toJSON().customAttribute,
|
|
2530
|
-
customClass: (_c = this.customClass) === null || _c === void 0 ? void 0 : _c.toJSON().customClass,
|
|
2531
|
-
customStyle: (_d = this.customStyle) === null || _d === void 0 ? void 0 : _d.toJSON().customStyle,
|
|
2532
|
-
}),
|
|
2533
|
-
};
|
|
2534
|
-
}
|
|
2535
|
-
}
|
|
2536
|
-
|
|
2537
|
-
/**
|
|
2538
|
-
* Split the link nodes in the corresponding link group
|
|
2539
|
-
*/
|
|
2540
|
-
class LinkGroupNodeSplitStrategy extends ActionHandleStrategy {
|
|
2541
|
-
/**
|
|
2542
|
-
* Split the text node.
|
|
2543
|
-
*
|
|
2544
|
-
* @param {LinkGroupNodeSplitAction} action - The split action.
|
|
2545
|
-
* @param {RTETextNode} target - The text node that need to be splitted.
|
|
2546
|
-
*/
|
|
2547
|
-
handleAction(action, target) {
|
|
2548
|
-
const linkGroupAnnotation = target.parent.getAnnotationByType(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
2549
|
-
if (linkGroupAnnotation) {
|
|
2550
|
-
const currentGroupKey = target.annotationMap.get('LINK').link
|
|
2551
|
-
.groupKey;
|
|
2552
|
-
const currentLinkGroup = linkGroupAnnotation.linkGroups.get(currentGroupKey);
|
|
2553
|
-
if (currentLinkGroup) {
|
|
2554
|
-
const index = currentLinkGroup.indexOf(target);
|
|
2555
|
-
if (index !== -1) {
|
|
2556
|
-
/* istanbul ignore next */
|
|
2557
|
-
currentLinkGroup.splice(index, 1, ...(Array.isArray(action.splittedTextNodes)
|
|
2558
|
-
? action.splittedTextNodes
|
|
2559
|
-
: [action.splittedTextNodes]));
|
|
2560
|
-
linkGroupAnnotation.linkGroups.set(currentGroupKey, currentLinkGroup);
|
|
2561
|
-
}
|
|
2562
|
-
}
|
|
2563
|
-
}
|
|
2564
|
-
}
|
|
2565
|
-
}
|
|
2566
|
-
|
|
2567
|
-
/**
|
|
2568
|
-
* Delete the corresponding link group
|
|
2569
|
-
*/
|
|
2570
|
-
class DeleteLinkGroupStrategy extends ActionHandleStrategy {
|
|
2571
|
-
/**
|
|
2572
|
-
* Delete the corresponding link group
|
|
2573
|
-
*
|
|
2574
|
-
* @param {DeleteLinkGroupAction} _action - The delete link group action.
|
|
2575
|
-
* @param {RTETextNode} target - The text node that need to remove link annotation.
|
|
2576
|
-
*/
|
|
2577
|
-
handleAction(_action, target) {
|
|
2578
|
-
const linkGroupAnnotation = target.parent.getAnnotationByType(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
2579
|
-
if (linkGroupAnnotation) {
|
|
2580
|
-
const currentGroupKey = target.annotationMap.get(NodeAnnotationTypeEnum.LINK).link.groupKey;
|
|
2581
|
-
const currentLinkGroup = linkGroupAnnotation.linkGroups.get(currentGroupKey);
|
|
2582
|
-
if (currentLinkGroup) {
|
|
2583
|
-
const index = currentLinkGroup.indexOf(target);
|
|
2584
|
-
if (index !== -1) {
|
|
2585
|
-
currentLinkGroup.splice(index, 1);
|
|
2586
|
-
}
|
|
2587
|
-
if (currentLinkGroup.length === 0) {
|
|
2588
|
-
linkGroupAnnotation.linkGroups.delete(currentGroupKey);
|
|
2589
|
-
}
|
|
2590
|
-
if (linkGroupAnnotation.linkGroups.size === 0) {
|
|
2591
|
-
target.parent.annotationMap.delete(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
2592
|
-
}
|
|
2593
|
-
}
|
|
2594
|
-
}
|
|
2595
|
-
target.annotationMap.delete(NodeAnnotationTypeEnum.LINK);
|
|
2596
|
-
}
|
|
2597
|
-
}
|
|
2598
|
-
|
|
2599
|
-
/**
|
|
2600
|
-
* Annotation to make text as plain text
|
|
2601
|
-
*/
|
|
2602
|
-
class PlainTextAnnotation extends NodeAnnotation {
|
|
2603
|
-
constructor(plainText) {
|
|
2604
|
-
super();
|
|
2605
|
-
this.type = NodeAnnotationTypeEnum.PLAIN_TEXT;
|
|
2606
|
-
this.plainText = true;
|
|
2607
|
-
this.plainText = plainText;
|
|
2608
|
-
}
|
|
2609
|
-
/**
|
|
2610
|
-
* @inheritDoc
|
|
2611
|
-
*/
|
|
2612
|
-
static from(plainText) {
|
|
2613
|
-
return [NodeAnnotationTypeEnum.PLAIN_TEXT, new PlainTextAnnotation(plainText)];
|
|
2614
|
-
}
|
|
2615
|
-
/**
|
|
2616
|
-
* @inheritDoc
|
|
2617
|
-
*/
|
|
2618
|
-
clone() {
|
|
2619
|
-
return new PlainTextAnnotation(this.plainText);
|
|
2620
|
-
}
|
|
2621
|
-
/**
|
|
2622
|
-
* @inheritDoc
|
|
2623
|
-
*/
|
|
2624
|
-
renderClass() {
|
|
2625
|
-
return undefined;
|
|
2626
|
-
}
|
|
2627
|
-
/**
|
|
2628
|
-
* @inheritDoc
|
|
2629
|
-
*/
|
|
2630
|
-
renderStyle() {
|
|
2631
|
-
return undefined;
|
|
2632
|
-
}
|
|
2633
|
-
/**
|
|
2634
|
-
* @inheritDoc
|
|
2635
|
-
*/
|
|
2636
|
-
toJSON() {
|
|
2637
|
-
return { plainText: this.plainText };
|
|
2638
|
-
}
|
|
2639
|
-
}
|
|
2640
|
-
|
|
2641
|
-
/**
|
|
2642
|
-
* Action to toggle the text color annotation visibility/state.
|
|
2643
|
-
*/
|
|
2644
|
-
class TextColorAnnotationAction extends TextSplittableAction {
|
|
2645
|
-
constructor(textColor) {
|
|
2646
|
-
super();
|
|
2647
|
-
this.isFlushable = true;
|
|
2648
|
-
this.textColor = textColor;
|
|
2649
|
-
}
|
|
2650
|
-
/**
|
|
2651
|
-
* Converts the action into a text color annotation.
|
|
2652
|
-
*
|
|
2653
|
-
* @returns {Annotation} the annotation
|
|
2654
|
-
*/
|
|
2655
|
-
toAnnotation() {
|
|
2656
|
-
return new TextColorAnnotation(this.textColor);
|
|
2657
|
-
}
|
|
2658
|
-
}
|
|
2659
|
-
|
|
2660
|
-
/**
|
|
2661
|
-
* Text node
|
|
2662
|
-
*/
|
|
2663
|
-
class RTETextNode extends RTENode {
|
|
2664
|
-
constructor(id, text, parentBlock, annotationMap) {
|
|
2665
|
-
super(id, annotationMap);
|
|
2666
|
-
this.type = NodeTypeEnum.TEXT;
|
|
2667
|
-
this.parent = parentBlock;
|
|
2668
|
-
this.text = text;
|
|
2669
|
-
this.registerModifyStrategy();
|
|
2670
|
-
}
|
|
2671
|
-
/**
|
|
2672
|
-
* Determines if the given HTML tag is supported by the RTETextNode.
|
|
2673
|
-
*
|
|
2674
|
-
* @param {string} tag - The HTML tag to check.
|
|
2675
|
-
* @returns {boolean} `true` if the tag is supported, otherwise `false`.
|
|
2676
|
-
*/
|
|
2677
|
-
static supportsHtmlTag(tag) {
|
|
2678
|
-
return ['span', 'code'].includes(tag);
|
|
2679
|
-
}
|
|
2680
|
-
/**
|
|
2681
|
-
* Creates an RTETextNode from a VegaRTETextNode with annotations and a parent RTETextBlock.
|
|
2682
|
-
*
|
|
2683
|
-
* @param {VegaRTETextNode} richText - A rich text node
|
|
2684
|
-
* @param {RTETextBlock} parentBlock - Parent block
|
|
2685
|
-
* @param {VegaRTETransformOptions} options - Optional transformation options.
|
|
2686
|
-
* @returns {RTETextNode} an RTETextNode
|
|
2687
|
-
*/
|
|
2688
|
-
static from(richText, parentBlock, options = { autoMatchFormat: true }) {
|
|
2689
|
-
const textNode = new RTETextNode(richText.id, richText.text, parentBlock);
|
|
2690
|
-
const { annotations } = richText;
|
|
2691
|
-
if (annotations) {
|
|
2692
|
-
textNode.annotationMap = this.generateTextAnnotationMap(annotations, options, parentBlock, textNode);
|
|
2693
|
-
}
|
|
2694
|
-
return textNode;
|
|
2695
|
-
}
|
|
2696
|
-
/**
|
|
2697
|
-
* Generates a map of text annotations for the given set of annotations.
|
|
2698
|
-
*
|
|
2699
|
-
* @param {VegaRTETextAnnotations} annotations - The annotations to be converted into a map.
|
|
2700
|
-
* @param {VegaRTETransformOptions} options - Optional transformation options.
|
|
2701
|
-
* @param {RTETextBlock} parentBlock - The parent text block.
|
|
2702
|
-
* @param {RTETextNode} textNode - The text node.
|
|
2703
|
-
* @returns {NodeAnnotations} The map of text annotations.
|
|
2704
|
-
*/
|
|
2705
|
-
static generateTextAnnotationMap(annotations, options, parentBlock, textNode) {
|
|
2706
|
-
return new Map(Object.keys(annotations)
|
|
2707
|
-
.map((type) => {
|
|
2708
|
-
if (type === 'link' && annotations.link && parentBlock && textNode) {
|
|
2709
|
-
parentBlock.apply(new LinkGroupAnnotationAction(annotations.link.groupKey, [textNode], 'link'));
|
|
2710
|
-
}
|
|
2711
|
-
return this.createAnnotationEntity(type, annotations[type], options);
|
|
2712
|
-
})
|
|
2713
|
-
.filter(isNonNullable));
|
|
2714
|
-
}
|
|
2715
|
-
/**
|
|
2716
|
-
* Creates different types of text annotations based on the provided type and value.
|
|
2717
|
-
*
|
|
2718
|
-
* @param {keyof VegaRTETextAnnotations} type - The key of the type.
|
|
2719
|
-
* @param {unknown} value - The value that will be used to create the specific type of annotation entity based on the `type` provided.
|
|
2720
|
-
* @param {VegaRTETransformOptions} [options] - Optional transformation options that may be used for creating the annotation entity.
|
|
2721
|
-
* @returns {Nullable<[RTENodeAnnotationMapKey, RTENodeAnnotationMapValue]>} Returning a nullable tuple containing a key and a
|
|
2722
|
-
* value from the `RTENodeAnnotationMapKey` and `RTENodeAnnotationMapValue` types.
|
|
2723
|
-
*/
|
|
2724
|
-
static createAnnotationEntity(type, value, options) {
|
|
2725
|
-
const autoMatchFormat = !!(options && options.autoMatchFormat);
|
|
2726
|
-
switch (type) {
|
|
2727
|
-
case 'bold':
|
|
2728
|
-
return BoldAnnotation.from(value);
|
|
2729
|
-
case 'italic':
|
|
2730
|
-
return ItalicAnnotation.from(value);
|
|
2731
|
-
case 'underline':
|
|
2732
|
-
return UnderlineAnnotation.from(value);
|
|
2733
|
-
case 'strikethrough':
|
|
2734
|
-
return StrikethroughAnnotation.from(value);
|
|
2735
|
-
case 'code':
|
|
2736
|
-
return CodeAnnotation.from(value, autoMatchFormat);
|
|
2737
|
-
case 'textColor':
|
|
2738
|
-
return TextColorAnnotation.from(value);
|
|
2739
|
-
case 'link':
|
|
2740
|
-
return LinkAnnotation.from(value, autoMatchFormat);
|
|
2741
|
-
case 'inlineHtml': {
|
|
2742
|
-
return InlineHtmlAnnotation.from(value);
|
|
2743
|
-
}
|
|
2744
|
-
case 'plainText': {
|
|
2745
|
-
return PlainTextAnnotation.from(value);
|
|
2746
|
-
}
|
|
2747
|
-
}
|
|
2748
|
-
return RTENode.createAnnotationEntity(type, value);
|
|
2749
|
-
}
|
|
2750
|
-
/**
|
|
2751
|
-
* @inheritDoc
|
|
2752
|
-
*/
|
|
2753
|
-
toJSON() {
|
|
2754
|
-
const annotations = Array.from(this.annotationMap.values())
|
|
2755
|
-
.filter((annotation) => annotation instanceof NodeAnnotation ||
|
|
2756
|
-
annotation instanceof CommonAnnotation ||
|
|
2757
|
-
annotation instanceof InlineHtmlAnnotation)
|
|
2758
|
-
.reduce((record, annotation) => {
|
|
2759
|
-
return Object.assign(Object.assign({}, record), annotation.toJSON());
|
|
2760
|
-
}, {});
|
|
2761
|
-
return Object.assign(Object.assign({ id: this.id }, (Object.keys(annotations).length > 0 ? { annotations } : {})), { type: 'text', text: this.text });
|
|
2762
|
-
}
|
|
2763
|
-
/**
|
|
2764
|
-
* @inheritDoc
|
|
2765
|
-
*/
|
|
2766
|
-
toHtml() {
|
|
2767
|
-
const inlineHtmlAnnotation = this.getAnnotationByType(NodeAnnotationTypeEnum.INLINE_HTML);
|
|
2768
|
-
return inlineHtmlAnnotation ? this.renderWithWrapperStr(inlineHtmlAnnotation) : this.renderTextStr();
|
|
2769
|
-
}
|
|
2770
|
-
/**
|
|
2771
|
-
* Creates a new RTETextNode with the specified text and copies the parent block and annotation map from the original node.
|
|
2772
|
-
*
|
|
2773
|
-
* @param {string} text - The text content of the RTETextNode that will be created.
|
|
2774
|
-
* @returns {RTETextNode} An new RTETextNode
|
|
2775
|
-
*/
|
|
2776
|
-
cloneWithText(text) {
|
|
2777
|
-
const cloned = new RTETextNode(generateUUID(), text, this.parent, super.cloneAnnotations());
|
|
2778
|
-
return cloned;
|
|
2779
|
-
}
|
|
2780
|
-
/**
|
|
2781
|
-
* @inheritDoc
|
|
2782
|
-
*/
|
|
2783
|
-
clone(parent) {
|
|
2784
|
-
const cloned = new RTETextNode(this.id, this.text, parent, super.cloneAnnotations());
|
|
2785
|
-
return cloned;
|
|
2786
|
-
}
|
|
2787
|
-
/**
|
|
2788
|
-
* Checks if a node is empty
|
|
2789
|
-
*
|
|
2790
|
-
* @returns {boolean} It returns `true` if the node is empty
|
|
2791
|
-
*/
|
|
2792
|
-
isEmpty() {
|
|
2793
|
-
return !this.text || this.text === ZERO_WIDTH_SPACE || this.text === '\n';
|
|
2794
|
-
}
|
|
2795
|
-
/**
|
|
2796
|
-
* @inheritDoc
|
|
2797
|
-
*/
|
|
2798
|
-
isTextNode() {
|
|
2799
|
-
return true;
|
|
2800
|
-
}
|
|
2801
|
-
/**
|
|
2802
|
-
* @inheritDoc
|
|
2803
|
-
*/
|
|
2804
|
-
getRangeEndOffset() {
|
|
2805
|
-
if (!this.isContentEditable() && this.parent) {
|
|
2806
|
-
const parent = this.parent;
|
|
2807
|
-
const nodeIndex = parent.children.indexOf(this);
|
|
2808
|
-
return nodeIndex + 1; // place the cursor after the non-editable text node;
|
|
2809
|
-
}
|
|
2810
|
-
return this.text === '\n' ? 0 : this.text.length;
|
|
2811
|
-
}
|
|
2812
|
-
/**
|
|
2813
|
-
* @inheritDoc
|
|
2814
|
-
*/
|
|
2815
|
-
getRangeContainer() {
|
|
2816
|
-
const element = this.getElementRef();
|
|
2817
|
-
if (element) {
|
|
2818
|
-
if (this.isContentEditable()) {
|
|
2819
|
-
return element.firstChild;
|
|
2820
|
-
}
|
|
2821
|
-
else {
|
|
2822
|
-
return element.parentElement;
|
|
2823
|
-
}
|
|
2824
|
-
}
|
|
2825
|
-
}
|
|
2826
|
-
/**
|
|
2827
|
-
* @inheritDoc
|
|
2828
|
-
*/
|
|
2829
|
-
isContentEditable() {
|
|
2830
|
-
return true;
|
|
2831
|
-
}
|
|
2832
|
-
/**
|
|
2833
|
-
* Registers the action strategies for the RTETextNode.
|
|
2834
|
-
*/
|
|
2835
|
-
registerModifyStrategy() {
|
|
2836
|
-
const dtoClassName = this.constructor.name;
|
|
2837
|
-
if (!RTETextNode.registerActionStrategyStatus[dtoClassName]) {
|
|
2838
|
-
if (this.isContentEditable()) {
|
|
2839
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.UPDATE_TEXT, dtoClassName, new NodeUpdateTextStrategy());
|
|
2840
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.REPLACE_SELECTED_TEXT, dtoClassName, new NodeReplaceSelectedTextStrategy());
|
|
2841
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.LINK_GROUP_NODE_SPLIT, dtoClassName, new LinkGroupNodeSplitStrategy());
|
|
2842
|
-
ActionHandleStrategyRegistry.register(LinkAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2843
|
-
}
|
|
2844
|
-
ActionHandleStrategyRegistry.register(TextSplittableAction.name, dtoClassName, new NodeSplitTextStrategy());
|
|
2845
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.DELETE_LINK_GROUP, dtoClassName, new DeleteLinkGroupStrategy());
|
|
2846
|
-
ActionHandleStrategyRegistry.register(BoldAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2847
|
-
ActionHandleStrategyRegistry.register(ClearFormattingAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2848
|
-
ActionHandleStrategyRegistry.register(ItalicAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2849
|
-
ActionHandleStrategyRegistry.register(UnderlineAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2850
|
-
ActionHandleStrategyRegistry.register(TextColorAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2851
|
-
ActionHandleStrategyRegistry.register(StrikethroughAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2852
|
-
ActionHandleStrategyRegistry.register(CodeAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2853
|
-
ActionHandleStrategyRegistry.register(AnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
|
|
2854
|
-
RTETextNode.registerActionStrategyStatus[dtoClassName] = true;
|
|
2855
|
-
}
|
|
2856
|
-
}
|
|
2857
|
-
/**
|
|
2858
|
-
* @inheritDoc
|
|
2859
|
-
*/
|
|
2860
|
-
doAnnotationActionApply(action) {
|
|
2861
|
-
const selectionRangeAnnotation = this.getAnnotationByType(InternalAnnotationTypeEnum.SELECTION_RANGE);
|
|
2862
|
-
if (action instanceof TextSplittableAction && action.doSplit && selectionRangeAnnotation) {
|
|
2863
|
-
const splitStrategy = ActionHandleStrategyRegistry.get(TextSplittableAction.name, this.constructor.name);
|
|
2864
|
-
if (splitStrategy) {
|
|
2865
|
-
const newNode = splitStrategy.execute(action, this);
|
|
2866
|
-
if (newNode) {
|
|
2867
|
-
this.applyActionToNode(newNode, action);
|
|
2868
|
-
}
|
|
2869
|
-
}
|
|
2870
|
-
}
|
|
2871
|
-
else {
|
|
2872
|
-
this.applyActionToNode(this, action);
|
|
2873
|
-
}
|
|
2874
|
-
if (typeof this.parent.mergeNodes === 'function') {
|
|
2875
|
-
this.parent.mergeNodes(action);
|
|
2876
|
-
}
|
|
2877
|
-
}
|
|
2878
|
-
/**
|
|
2879
|
-
* @inheritDoc
|
|
2880
|
-
*/
|
|
2881
|
-
doModifyActionApply(action) {
|
|
2882
|
-
ActionHandleStrategyRegistry.executeTheStrategy(action, this);
|
|
2883
|
-
}
|
|
2884
|
-
/**
|
|
2885
|
-
* Apply action to node
|
|
2886
|
-
*
|
|
2887
|
-
* @param {RTETextNode} node - Text node
|
|
2888
|
-
* @param {AnnotationAction} action - AnnotationAction
|
|
2889
|
-
*/
|
|
2890
|
-
applyActionToNode(node, action) {
|
|
2891
|
-
const annotation = action.toAnnotation();
|
|
2892
|
-
if (action instanceof SyncUpSelectionAction) {
|
|
2893
|
-
this.syncUpSelectedNodes(node);
|
|
2894
|
-
return;
|
|
2895
|
-
}
|
|
2896
|
-
// Sync up RTETextNode selected state to selection controller for any action apply, except selection range change.
|
|
2897
|
-
if (!(annotation instanceof SelectionRangeAnnotation)) {
|
|
2898
|
-
this.syncUpSelectedNodes(node);
|
|
2899
|
-
}
|
|
2900
|
-
/**
|
|
2901
|
-
* 1. Try to get the specific strategy for the action and node type first (e.g., LinkAnnotationAction on RTETextNode).
|
|
2902
|
-
* 2. If no specific strategy found, try to get the generic NodeUpdateAnnotationMapStrategy for AnnotationAction on RTETextNode.
|
|
2903
|
-
*/
|
|
2904
|
-
const strategy = ActionHandleStrategyRegistry.get(action.constructor.name, node.constructor.name);
|
|
2905
|
-
if (strategy) {
|
|
2906
|
-
strategy.execute(action, node);
|
|
2907
|
-
return;
|
|
2908
|
-
}
|
|
2909
|
-
const updateAnnotationMapStrategy = ActionHandleStrategyRegistry.get(AnnotationAction.name, RTETextNode.name);
|
|
2910
|
-
if (updateAnnotationMapStrategy) {
|
|
2911
|
-
updateAnnotationMapStrategy.execute(action, node);
|
|
2912
|
-
return;
|
|
2913
|
-
}
|
|
2914
|
-
}
|
|
2915
|
-
/**
|
|
2916
|
-
* Sync up the selected node by change manager
|
|
2917
|
-
*
|
|
2918
|
-
* @param {RTETextNode} selectedNode - The selected node
|
|
2919
|
-
*/
|
|
2920
|
-
syncUpSelectedNodes(selectedNode) {
|
|
2921
|
-
const currentNodeDom = this.getElementRef();
|
|
2922
|
-
if (currentNodeDom) {
|
|
2923
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(currentNodeDom, VegaInternalRichTextEditorSelectionRangeChange);
|
|
2924
|
-
if (nodeSubject) {
|
|
2925
|
-
ChangeManager.notify(nodeSubject, { node: selectedNode });
|
|
2926
|
-
}
|
|
2927
|
-
}
|
|
2928
|
-
}
|
|
2929
|
-
/**
|
|
2930
|
-
* Render the text node with the inline HTML wrapper.
|
|
2931
|
-
*
|
|
2932
|
-
* @param {VegaInlineHtmlSchema} inlineHtmlNode - The inline HTML schema to wrap the text node.
|
|
2933
|
-
* @returns {string} The HTML string representation of the text node wrapped with the inline HTML.
|
|
2934
|
-
*/
|
|
2935
|
-
renderWithWrapperStr(inlineHtmlNode) {
|
|
2936
|
-
const { htmlTag, customAttribute, customClass, customStyle, child } = inlineHtmlNode;
|
|
2937
|
-
const attrs = [
|
|
2938
|
-
...((customAttribute === null || customAttribute === void 0 ? void 0 : customAttribute.toString()) || []),
|
|
2939
|
-
customClass === null || customClass === void 0 ? void 0 : customClass.toString(),
|
|
2940
|
-
customStyle === null || customStyle === void 0 ? void 0 : customStyle.toString(),
|
|
2941
|
-
].filter(isNonNullable);
|
|
2942
|
-
const attrStr = attrs.length > 0 ? ` ${attrs.join(' ')}` : '';
|
|
2943
|
-
if (!child) {
|
|
2944
|
-
return `<${htmlTag}${attrStr}>${this.renderTextStr()}</${htmlTag}>`;
|
|
2945
|
-
}
|
|
2946
|
-
return `<${htmlTag}${attrStr}>${this.renderWithWrapperStr(child)}</${htmlTag}>`;
|
|
2947
|
-
}
|
|
2948
|
-
/**
|
|
2949
|
-
* Generates the HTML representation of the text node.
|
|
2950
|
-
*
|
|
2951
|
-
* @returns {string} The HTML string representation of the text node.
|
|
2952
|
-
*/
|
|
2953
|
-
renderTextStr() {
|
|
2954
|
-
var _a;
|
|
2955
|
-
const NodeTag = ((_a = this.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code)
|
|
2956
|
-
? 'code'
|
|
2957
|
-
: 'span';
|
|
2958
|
-
const attrStr = super.generateAttributeString();
|
|
2959
|
-
// If the text contains a newline character, we need to replace it with a <br> tag.
|
|
2960
|
-
if (this.text === '\n') {
|
|
2961
|
-
return `<br>`;
|
|
2962
|
-
}
|
|
2963
|
-
return this.shouldRenderAsPlainText() ? this.text : `<${NodeTag}${attrStr}>${this.text}</${NodeTag}>`;
|
|
2964
|
-
}
|
|
2965
|
-
/**
|
|
2966
|
-
* Determines if the text node should be rendered as plain text.
|
|
2967
|
-
*
|
|
2968
|
-
* @returns {boolean} `true` if the text node should be rendered as plain text, otherwise `false`.
|
|
2969
|
-
*/
|
|
2970
|
-
shouldRenderAsPlainText() {
|
|
2971
|
-
const plainTextAnnotation = super.getAnnotationByType(NodeAnnotationTypeEnum.PLAIN_TEXT);
|
|
2972
|
-
if (plainTextAnnotation) {
|
|
2973
|
-
return (plainTextAnnotation.plainText &&
|
|
2974
|
-
Array.from(this.annotationMap.values()).filter((annotation) => (annotation instanceof NodeAnnotation &&
|
|
2975
|
-
!(annotation instanceof LinkAnnotation) &&
|
|
2976
|
-
!(annotation instanceof PlainTextAnnotation)) ||
|
|
2977
|
-
annotation instanceof CommonAnnotation).length === 0);
|
|
2978
|
-
}
|
|
2979
|
-
else {
|
|
2980
|
-
return false;
|
|
2981
|
-
}
|
|
2982
|
-
}
|
|
2983
|
-
}
|
|
2984
|
-
RTETextNode.registerActionStrategyStatus = {};
|
|
2985
|
-
RTETextNode.htmlTag = 'span';
|
|
2986
|
-
|
|
2987
|
-
/**
|
|
2988
|
-
* Append children to a block or rte content
|
|
2989
|
-
*
|
|
2990
|
-
* @example parent.apply(new AppendChildrenAction([newChildren]))
|
|
2991
|
-
*/
|
|
2992
|
-
class AppendChildrenAction extends ModifyContentAction {
|
|
2993
|
-
constructor(childNodes) {
|
|
2994
|
-
super();
|
|
2995
|
-
this.type = ModifyContentActionType.APPEND_CHILDREN;
|
|
2996
|
-
this.entityToBeAppended = childNodes;
|
|
2997
|
-
}
|
|
2998
|
-
}
|
|
2999
|
-
|
|
3000
|
-
/**
|
|
3001
|
-
* Text style annotation
|
|
3002
|
-
*/
|
|
3003
|
-
class TextStyleAnnotation extends BlockAnnotation {
|
|
3004
|
-
constructor(textStyle) {
|
|
3005
|
-
super();
|
|
3006
|
-
this.type = BlockAnnotationTypeEnum.TEXT_STYLE;
|
|
3007
|
-
this.textStyle = textStyle;
|
|
3008
|
-
}
|
|
3009
|
-
/**
|
|
3010
|
-
* Generate the map item for the annotations
|
|
3011
|
-
*
|
|
3012
|
-
* @param {VegaRTETextStyleType} textStyle - the text style type
|
|
3013
|
-
* @returns {[BlockAnnotationTypeEnum.TEXT_STYLE, TextStyleAnnotation]} Map item for the annotation
|
|
3014
|
-
*/
|
|
3015
|
-
static from(textStyle) {
|
|
3016
|
-
return [BlockAnnotationTypeEnum.TEXT_STYLE, new TextStyleAnnotation(textStyle)];
|
|
3017
|
-
}
|
|
3018
|
-
/**
|
|
3019
|
-
* Generate the JSON representation of the annotation
|
|
3020
|
-
*
|
|
3021
|
-
* @returns {Nullable<Record<string, unknown>>} JSON representation of the annotation
|
|
3022
|
-
*/
|
|
3023
|
-
toJSON() {
|
|
3024
|
-
return { textStyle: this.textStyle };
|
|
3025
|
-
}
|
|
3026
|
-
/**
|
|
3027
|
-
* @inheritDoc
|
|
3028
|
-
*/
|
|
3029
|
-
clone() {
|
|
3030
|
-
return new TextStyleAnnotation(this.textStyle);
|
|
3031
|
-
}
|
|
3032
|
-
/**
|
|
3033
|
-
* @inheritDoc
|
|
3034
|
-
*/
|
|
3035
|
-
renderClass(options) {
|
|
3036
|
-
if (options === null || options === void 0 ? void 0 : options.standalone)
|
|
3037
|
-
return null;
|
|
3038
|
-
return this.textStyle ? `v-rte--text-style-${this.textStyle}` : null;
|
|
3039
|
-
}
|
|
3040
|
-
/**
|
|
3041
|
-
* @inheritDoc
|
|
3042
|
-
*/
|
|
3043
|
-
renderStyle(options) {
|
|
3044
|
-
if (!(options === null || options === void 0 ? void 0 : options.standalone))
|
|
3045
|
-
return null;
|
|
3046
|
-
const paragraphStyle = {
|
|
3047
|
-
fontFamily: 'Inter',
|
|
3048
|
-
fontSize: '16px',
|
|
3049
|
-
lineHeight: '22px',
|
|
3050
|
-
fontWeight: '500',
|
|
3051
|
-
marginTop: '0px',
|
|
3052
|
-
marginBottom: '0px',
|
|
3053
|
-
};
|
|
3054
|
-
switch (this.textStyle) {
|
|
3055
|
-
case 'paragraph': {
|
|
3056
|
-
return paragraphStyle;
|
|
3057
|
-
}
|
|
3058
|
-
case 'title': {
|
|
3059
|
-
return {
|
|
3060
|
-
fontFamily: 'Inter',
|
|
3061
|
-
fontSize: '36px',
|
|
3062
|
-
lineHeight: '40px',
|
|
3063
|
-
fontWeight: '500',
|
|
3064
|
-
};
|
|
3065
|
-
}
|
|
3066
|
-
case 'subtitle': {
|
|
3067
|
-
return {
|
|
3068
|
-
fontFamily: 'Inter',
|
|
3069
|
-
fontSize: '28px',
|
|
3070
|
-
lineHeight: '32px',
|
|
3071
|
-
fontWeight: '500',
|
|
3072
|
-
};
|
|
3073
|
-
}
|
|
3074
|
-
case 'heading-1': {
|
|
3075
|
-
return {
|
|
3076
|
-
fontFamily: 'Inter',
|
|
3077
|
-
fontSize: '22px',
|
|
3078
|
-
lineHeight: '24px',
|
|
3079
|
-
fontWeight: '500',
|
|
3080
|
-
marginTop: '0px',
|
|
3081
|
-
marginBottom: '0px',
|
|
3082
|
-
};
|
|
3083
|
-
}
|
|
3084
|
-
case 'heading-2': {
|
|
3085
|
-
return {
|
|
3086
|
-
fontFamily: 'Inter',
|
|
3087
|
-
fontSize: '20px',
|
|
3088
|
-
lineHeight: '24px',
|
|
3089
|
-
fontWeight: '500',
|
|
3090
|
-
marginTop: '0px',
|
|
3091
|
-
marginBottom: '0px',
|
|
3092
|
-
};
|
|
3093
|
-
}
|
|
3094
|
-
case 'heading-3': {
|
|
3095
|
-
return {
|
|
3096
|
-
fontFamily: 'Inter',
|
|
3097
|
-
fontSize: '18px',
|
|
3098
|
-
lineHeight: '22px',
|
|
3099
|
-
fontWeight: '500',
|
|
3100
|
-
marginTop: '0px',
|
|
3101
|
-
marginBottom: '0px',
|
|
3102
|
-
};
|
|
3103
|
-
}
|
|
3104
|
-
case 'heading-4': {
|
|
3105
|
-
return {
|
|
3106
|
-
fontFamily: 'Inter',
|
|
3107
|
-
fontSize: '16px',
|
|
3108
|
-
lineHeight: '22px',
|
|
3109
|
-
fontWeight: '500',
|
|
3110
|
-
marginTop: '0px',
|
|
3111
|
-
marginBottom: '0px',
|
|
3112
|
-
};
|
|
3113
|
-
}
|
|
3114
|
-
case 'heading-5': {
|
|
3115
|
-
return {
|
|
3116
|
-
fontFamily: 'Inter',
|
|
3117
|
-
fontSize: '14px',
|
|
3118
|
-
lineHeight: '22px',
|
|
3119
|
-
fontWeight: '500',
|
|
3120
|
-
marginTop: '0px',
|
|
3121
|
-
marginBottom: '0px',
|
|
3122
|
-
};
|
|
3123
|
-
}
|
|
3124
|
-
case 'heading-6': {
|
|
3125
|
-
return {
|
|
3126
|
-
fontFamily: 'Inter',
|
|
3127
|
-
fontSize: '12px',
|
|
3128
|
-
lineHeight: '22px',
|
|
3129
|
-
fontWeight: '500',
|
|
3130
|
-
marginTop: '0px',
|
|
3131
|
-
marginBottom: '0px',
|
|
3132
|
-
};
|
|
3133
|
-
}
|
|
3134
|
-
}
|
|
3135
|
-
}
|
|
3136
|
-
}
|
|
3137
|
-
|
|
3138
|
-
/**
|
|
3139
|
-
* Action to change the text style of a block
|
|
3140
|
-
*/
|
|
3141
|
-
class TextStyleAnnotationAction extends AnnotationAction {
|
|
3142
|
-
constructor(textStyle, bold) {
|
|
3143
|
-
super();
|
|
3144
|
-
this.isFlushable = true;
|
|
3145
|
-
this.textStyle = textStyle;
|
|
3146
|
-
this.bold = bold;
|
|
3147
|
-
}
|
|
3148
|
-
/**
|
|
3149
|
-
* Converts the action to a block annotation
|
|
3150
|
-
*
|
|
3151
|
-
* @returns {BlockAnnotation} the block annotation
|
|
3152
|
-
*/
|
|
3153
|
-
toAnnotation() {
|
|
3154
|
-
return new TextStyleAnnotation(this.textStyle);
|
|
3155
|
-
}
|
|
3156
|
-
}
|
|
3157
|
-
|
|
3158
|
-
/**
|
|
3159
|
-
* Update the text block text style strategy.
|
|
3160
|
-
*/
|
|
3161
|
-
class BlockUpdateTextStyleStrategy extends ActionHandleStrategy {
|
|
3162
|
-
/**
|
|
3163
|
-
* Update the text block type and add or remove the bold style from child nodes.
|
|
3164
|
-
*
|
|
3165
|
-
* @param {TextStyleAnnotationAction} action - The text style annotation action.
|
|
3166
|
-
* @param {RTETextBlock} target - The current text block.
|
|
3167
|
-
*/
|
|
3168
|
-
handleAction(action, target) {
|
|
3169
|
-
if (target.type !== 'list-item') {
|
|
3170
|
-
target.type = action.textStyle;
|
|
3171
|
-
}
|
|
3172
|
-
if (action.bold) {
|
|
3173
|
-
target.children.forEach((node) => {
|
|
3174
|
-
const boldAnnotationAction = new BoldAnnotationAction(true);
|
|
3175
|
-
boldAnnotationAction.doSplit = false;
|
|
3176
|
-
node.apply(boldAnnotationAction);
|
|
3177
|
-
});
|
|
3178
|
-
}
|
|
3179
|
-
else {
|
|
3180
|
-
target.children.forEach((node) => {
|
|
3181
|
-
node.apply(new DeleteNodeAnnotationAction(NodeAnnotationTypeEnum.BOLD));
|
|
3182
|
-
});
|
|
3183
|
-
}
|
|
3184
|
-
this.updateCustomStyleAnnotation(target, ['fontFamily', 'lineHeight', 'fontWeight', 'fontSize']);
|
|
3185
|
-
}
|
|
3186
|
-
}
|
|
3187
|
-
|
|
3188
|
-
/**
|
|
3189
|
-
* Update the text block link group annotation strategy.
|
|
3190
|
-
*/
|
|
3191
|
-
class BlockUpdateLinkGroupStrategy extends ActionHandleStrategy {
|
|
3192
|
-
/**
|
|
3193
|
-
* Update link group after the child link node update.
|
|
3194
|
-
*
|
|
3195
|
-
* @param {LinkGroupAnnotationAction} action - The link group annotation action instance.
|
|
3196
|
-
* @param {RTETextBlock} target - The current text block.
|
|
3197
|
-
*/
|
|
3198
|
-
handleAction(action, target) {
|
|
3199
|
-
let linkGroupAnnotation = target.getAnnotationByType(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
3200
|
-
if (action.type === 'update_link') {
|
|
3201
|
-
if (linkGroupAnnotation) {
|
|
3202
|
-
const linkGroup = linkGroupAnnotation.linkGroups.get(action.groupKey);
|
|
3203
|
-
if (linkGroup) {
|
|
3204
|
-
linkGroupAnnotation.linkGroups.set(action.groupKey, [linkGroup[0]]);
|
|
3205
|
-
}
|
|
3206
|
-
}
|
|
3207
|
-
}
|
|
3208
|
-
else {
|
|
3209
|
-
if (linkGroupAnnotation) {
|
|
3210
|
-
const linkGroup = linkGroupAnnotation.linkGroups.get(action.groupKey) || [];
|
|
3211
|
-
linkGroupAnnotation.linkGroups.set(action.groupKey, [...linkGroup, ...action.nodes]);
|
|
3212
|
-
}
|
|
3213
|
-
else {
|
|
3214
|
-
linkGroupAnnotation = action.toAnnotation();
|
|
3215
|
-
linkGroupAnnotation.linkGroups.set(action.groupKey, [...action.nodes]);
|
|
3216
|
-
}
|
|
3217
|
-
target.annotationMap.set(InternalAnnotationTypeEnum.LINK_GROUP, linkGroupAnnotation);
|
|
3218
|
-
}
|
|
3219
|
-
}
|
|
3220
|
-
}
|
|
3221
|
-
|
|
3222
|
-
/**
|
|
3223
|
-
* Insert a new children after a existing children
|
|
3224
|
-
*
|
|
3225
|
-
* @example parent.apply(new InsertChildrenAfterAction(existingChildren, newChildren, ...))
|
|
3226
|
-
*/
|
|
3227
|
-
class InsertChildrenAfterAction extends ModifyContentAction {
|
|
3228
|
-
constructor(referBlock, ...blocksToBeInserted) {
|
|
3229
|
-
super();
|
|
3230
|
-
this.type = ModifyContentActionType.INSERT_CHILDREN_AFTER;
|
|
3231
|
-
this.referChildren = referBlock;
|
|
3232
|
-
this.childrenToBeInserted = blocksToBeInserted;
|
|
3233
|
-
}
|
|
3234
|
-
}
|
|
3235
|
-
|
|
3236
|
-
/**
|
|
3237
|
-
* Clear the current block nodes and append new nodes
|
|
3238
|
-
*
|
|
3239
|
-
* @example block.apply(new ReplaceChildNodesAction(newNodes))
|
|
3240
|
-
*/
|
|
3241
|
-
class ReplaceChildNodesAction extends ModifyContentAction {
|
|
3242
|
-
constructor(newChildNodes) {
|
|
3243
|
-
super();
|
|
3244
|
-
this.type = ModifyContentActionType.REPLACE_CHILD_NODES;
|
|
3245
|
-
this.newChildNodes = newChildNodes;
|
|
3246
|
-
}
|
|
3247
|
-
}
|
|
3248
|
-
|
|
3249
|
-
/**
|
|
3250
|
-
* Split the current node with a special position strategy.
|
|
3251
|
-
*/
|
|
3252
|
-
class BlockSplitWithTextNodeStrategy extends ActionHandleStrategy {
|
|
3253
|
-
/**
|
|
3254
|
-
* @inheritDoc
|
|
3255
|
-
*/
|
|
3256
|
-
handleAction(action, target) {
|
|
3257
|
-
action.newBlock = this.splitTextNodeBlock(action.splitPointNode, action.startOffsetOfNode, target);
|
|
3258
|
-
}
|
|
3259
|
-
/**
|
|
3260
|
-
* Splits a text node at a specified offset within a block of nodes and returns a new block with the split nodes.
|
|
3261
|
-
*
|
|
3262
|
-
* @param {RTETextNode} splitNode - The text node that will be split
|
|
3263
|
-
* @param {number} startOffsetOfNode - The index at which will split the text content of the `splitNode`.
|
|
3264
|
-
* @param {RTETextBlock} textBlock - The text block need to be splited.
|
|
3265
|
-
* @returns {Nullable<RTEBlock>} return either an RTEBlock object or null.
|
|
3266
|
-
*/
|
|
3267
|
-
splitTextNodeBlock(splitNode, startOffsetOfNode, textBlock) {
|
|
3268
|
-
if (splitNode) {
|
|
3269
|
-
const beforeText = splitNode.text.slice(0, startOffsetOfNode);
|
|
3270
|
-
const afterText = splitNode.text.slice(startOffsetOfNode);
|
|
3271
|
-
const nodesSplitIndex = textBlock.children.indexOf(splitNode);
|
|
3272
|
-
if (nodesSplitIndex > -1) {
|
|
3273
|
-
const beforeNodes = textBlock.children.slice(0, nodesSplitIndex);
|
|
3274
|
-
const afterNodes = textBlock.children.slice(nodesSplitIndex + 1);
|
|
3275
|
-
if (beforeText) {
|
|
3276
|
-
beforeNodes.push(splitNode.cloneWithText(beforeText));
|
|
3277
|
-
}
|
|
3278
|
-
if (afterText) {
|
|
3279
|
-
afterNodes.unshift(splitNode.cloneWithText(afterText));
|
|
3280
|
-
}
|
|
3281
|
-
textBlock.apply(new ReplaceChildNodesAction(beforeNodes));
|
|
3282
|
-
const newBlock = textBlock.cloneWithNodes(afterNodes);
|
|
3283
|
-
textBlock.parent.apply(new InsertChildrenAfterAction(textBlock, newBlock));
|
|
3284
|
-
return newBlock;
|
|
3285
|
-
}
|
|
3286
|
-
}
|
|
3287
|
-
}
|
|
3288
|
-
}
|
|
3289
|
-
|
|
3290
|
-
/**
|
|
3291
|
-
* Remove all nodes and append new nodes strategy.
|
|
3292
|
-
*/
|
|
3293
|
-
class BlockReplaceNodesStrategy extends ActionHandleStrategy {
|
|
3294
|
-
/**
|
|
3295
|
-
* Empty the text block or image block nodes and add new nodes.
|
|
3296
|
-
*
|
|
3297
|
-
* @param {ReplaceChildNodesAction} action - The replace child nodes action instance.
|
|
3298
|
-
* @param {RTETextBlock | RTEImageBlock} target - The text block or the image block.
|
|
3299
|
-
*/
|
|
3300
|
-
handleAction(action, target) {
|
|
3301
|
-
target.children = [];
|
|
3302
|
-
target.apply(new AppendChildrenAction(action.newChildNodes));
|
|
3303
|
-
}
|
|
3304
|
-
}
|
|
3305
|
-
|
|
3306
|
-
/**
|
|
3307
|
-
* Remove a children from the current block
|
|
3308
|
-
*
|
|
3309
|
-
* @example needRemovedChildren.parent.apply(new RemoveChildrenAction(needRemovedChildren))
|
|
3310
|
-
*/
|
|
3311
|
-
class RemoveChildrenAction extends ModifyContentAction {
|
|
3312
|
-
constructor(childNode) {
|
|
3313
|
-
super();
|
|
3314
|
-
this.type = ModifyContentActionType.DELETE_CHILDREN;
|
|
3315
|
-
this.entityToBeRemoved = childNode;
|
|
3316
|
-
}
|
|
3317
|
-
}
|
|
3318
|
-
|
|
3319
|
-
/**
|
|
3320
|
-
* Append the second block child nodes to the first block child nodes and remove the second block strategy.
|
|
3321
|
-
*/
|
|
3322
|
-
class BlockMergeNodesStrategy extends ActionHandleStrategy {
|
|
3323
|
-
/**
|
|
3324
|
-
* Merges the child nodes of two RTEBlocks if they have the same type or both are not images.
|
|
3325
|
-
*
|
|
3326
|
-
* @param {MergeTwoBlocksNodesAction} action - The merge block nodes action instance.
|
|
3327
|
-
* @param {RTETextBlock | RTEImageBlock} target - The first text block or image block.
|
|
3328
|
-
*/
|
|
3329
|
-
handleAction(action, target) {
|
|
3330
|
-
const anotherBlock = action.blockNeedToBeMerged;
|
|
3331
|
-
if (target.type === anotherBlock.type || (target.type !== 'image' && anotherBlock.type !== 'image')) {
|
|
3332
|
-
let shouldMergeNodes = anotherBlock.children;
|
|
3333
|
-
if (anotherBlock.type !== 'image') {
|
|
3334
|
-
shouldMergeNodes = anotherBlock.children.filter((node) => node.text);
|
|
3335
|
-
}
|
|
3336
|
-
target.apply(new AppendChildrenAction(shouldMergeNodes));
|
|
3337
|
-
anotherBlock.parent.apply(new RemoveChildrenAction(anotherBlock));
|
|
3338
|
-
}
|
|
3339
|
-
}
|
|
3340
|
-
}
|
|
3341
|
-
|
|
3342
|
-
/**
|
|
3343
|
-
* Insert a line break node into current text block at special position strategy.
|
|
3344
|
-
*/
|
|
3345
|
-
class BlockInsertLineBreakStrategy extends ActionHandleStrategy {
|
|
3346
|
-
/**
|
|
3347
|
-
* @inheritDoc
|
|
3348
|
-
*/
|
|
3349
|
-
handleAction(action, target) {
|
|
3350
|
-
action.lineBreakNode = this.lineBreakSingleBlock(action.startContainerNode, action.startOffset, target);
|
|
3351
|
-
}
|
|
3352
|
-
/**
|
|
3353
|
-
* lineBreakSingleBlock
|
|
3354
|
-
*
|
|
3355
|
-
* @param {RTETextNode} splitNode -
|
|
3356
|
-
* @param {number} startOffsetOfNode -
|
|
3357
|
-
* @param {RTETextBlock} target -
|
|
3358
|
-
* @returns {Nullable<RTETextNode>} Nullable<RTETextNode>
|
|
3359
|
-
*/
|
|
3360
|
-
lineBreakSingleBlock(splitNode, startOffsetOfNode, target) {
|
|
3361
|
-
if (splitNode) {
|
|
3362
|
-
const lineBreakNode = new RTETextNode(generateUUID(), '\n', target);
|
|
3363
|
-
const beforeText = splitNode.text.slice(0, startOffsetOfNode);
|
|
3364
|
-
const afterText = splitNode.text.slice(startOffsetOfNode);
|
|
3365
|
-
const nodesSplitIndex = target.children.indexOf(splitNode);
|
|
3366
|
-
if (nodesSplitIndex > -1) {
|
|
3367
|
-
const beforeNodes = target.children.slice(0, nodesSplitIndex);
|
|
3368
|
-
const afterNodes = target.children.slice(nodesSplitIndex + 1);
|
|
3369
|
-
if (beforeText) {
|
|
3370
|
-
beforeNodes.push(splitNode.cloneWithText(beforeText));
|
|
3371
|
-
}
|
|
3372
|
-
if (afterText) {
|
|
3373
|
-
afterNodes.unshift(splitNode.cloneWithText(afterText));
|
|
3374
|
-
}
|
|
3375
|
-
this.mergeLineBreakNodes(beforeNodes, lineBreakNode, afterNodes, target);
|
|
3376
|
-
}
|
|
3377
|
-
return lineBreakNode;
|
|
3378
|
-
}
|
|
3379
|
-
}
|
|
3380
|
-
/**
|
|
3381
|
-
* mergeLineBreakNodes
|
|
3382
|
-
*
|
|
3383
|
-
* @param {RTENode[]} beforeNodes -
|
|
3384
|
-
* @param {RTETextNode} lineBreakNode -
|
|
3385
|
-
* @param {RTENode[]} afterNodes -
|
|
3386
|
-
* @param {RTETextBlock} target -
|
|
3387
|
-
*/
|
|
3388
|
-
mergeLineBreakNodes(beforeNodes, lineBreakNode, afterNodes, target) {
|
|
3389
|
-
if (afterNodes.length === 0 || (afterNodes[0] && afterNodes[0].text === '')) {
|
|
3390
|
-
afterNodes.push(new RTETextNode(generateUUID(), '\n', target, beforeNodes[beforeNodes.length - 1] && beforeNodes[beforeNodes.length - 1].annotationMap));
|
|
3391
|
-
}
|
|
3392
|
-
target.apply(new ReplaceChildNodesAction([...beforeNodes, lineBreakNode, ...afterNodes]));
|
|
3393
|
-
}
|
|
3394
|
-
}
|
|
3395
|
-
|
|
3396
|
-
/**
|
|
3397
|
-
* Insert a line break node into multiple blocks selection at special position strategy.
|
|
3398
|
-
*/
|
|
3399
|
-
class BlockInsertLineBreakWithBlocksStrategy extends ActionHandleStrategy {
|
|
3400
|
-
/**
|
|
3401
|
-
* @inheritDoc
|
|
3402
|
-
*/
|
|
3403
|
-
handleAction(action, target) {
|
|
3404
|
-
action.lineBreakNode = this.lineBreakMultipleBlocks(action.selectedBlocks, target);
|
|
3405
|
-
}
|
|
3406
|
-
/**
|
|
3407
|
-
* lineBreakMultipleBlocks
|
|
3408
|
-
*
|
|
3409
|
-
* @param {RTEBlock[]} selectedBlocks -
|
|
3410
|
-
* @param {RTETextBlock} target -
|
|
3411
|
-
* @returns {Nullable<RTETextNode>} Nullable<RTETextNode>
|
|
3412
|
-
*/
|
|
3413
|
-
lineBreakMultipleBlocks(selectedBlocks, target) {
|
|
3414
|
-
const beforeNodes = target.children;
|
|
3415
|
-
const lineBreakNode = new RTETextNode(generateUUID(), '\n', target);
|
|
3416
|
-
const afterNodes = this.concatBlocksNodes(selectedBlocks.slice(1));
|
|
3417
|
-
this.mergeLineBreakNodes(beforeNodes, lineBreakNode, afterNodes, target);
|
|
3418
|
-
return lineBreakNode;
|
|
3419
|
-
}
|
|
3420
|
-
/**
|
|
3421
|
-
* Concat the child nodes of multiple RTEBlocks if both are not images.
|
|
3422
|
-
*
|
|
3423
|
-
* @param {RTEBlock[]} blocks - multiple block of content in a rich text editor, such as a paragraph, heading, image, etc.
|
|
3424
|
-
* @returns {RTENode[]} Array of connected block nodes
|
|
3425
|
-
*/
|
|
3426
|
-
concatBlocksNodes(blocks) {
|
|
3427
|
-
const nodes = [];
|
|
3428
|
-
blocks.map((block) => {
|
|
3429
|
-
if (block.type !== 'image') {
|
|
3430
|
-
nodes.push(...block.children);
|
|
3431
|
-
block.parent.apply(new RemoveChildrenAction(block));
|
|
3432
|
-
}
|
|
3433
|
-
});
|
|
3434
|
-
return nodes;
|
|
3435
|
-
}
|
|
3436
|
-
/**
|
|
3437
|
-
* mergeLineBreakNodes
|
|
3438
|
-
*
|
|
3439
|
-
* @param {RTENode[]} beforeNodes -
|
|
3440
|
-
* @param {RTETextNode} lineBreakNode -
|
|
3441
|
-
* @param {RTENode[]} afterNodes -
|
|
3442
|
-
* @param {RTETextBlock} target -
|
|
3443
|
-
*/
|
|
3444
|
-
mergeLineBreakNodes(beforeNodes, lineBreakNode, afterNodes, target) {
|
|
3445
|
-
if (afterNodes.length === 0 || (afterNodes[0] && afterNodes[0].text === '')) {
|
|
3446
|
-
afterNodes.push(new RTETextNode(generateUUID(), '\n', target, beforeNodes[beforeNodes.length - 1] && beforeNodes[beforeNodes.length - 1].annotationMap));
|
|
3447
|
-
}
|
|
3448
|
-
target.apply(new ReplaceChildNodesAction([...beforeNodes, lineBreakNode, ...afterNodes]));
|
|
3449
|
-
}
|
|
3450
|
-
}
|
|
3451
|
-
|
|
3452
|
-
/**
|
|
3453
|
-
* Insert a children before a existing children
|
|
3454
|
-
*
|
|
3455
|
-
* @example parent.apply(new InsertChildrenBeforeAction(existingChildren, newChildren, ...))
|
|
3456
|
-
*/
|
|
3457
|
-
class InsertChildrenBeforeAction extends ModifyContentAction {
|
|
3458
|
-
constructor(referChildren, ...childrenToBeInserted) {
|
|
3459
|
-
super();
|
|
3460
|
-
this.type = ModifyContentActionType.INSERT_CHILDREN_BEFORE;
|
|
3461
|
-
this.referChildren = referChildren;
|
|
3462
|
-
this.childrenToBeInserted = childrenToBeInserted;
|
|
3463
|
-
}
|
|
3464
|
-
}
|
|
3465
|
-
|
|
3466
|
-
/**
|
|
3467
|
-
* Split the block with a split point node.
|
|
3468
|
-
* The property `newBlock` use to store the new create block if need.
|
|
3469
|
-
*
|
|
3470
|
-
* @example block.apply(new SplitBlockWithNodeAction(node, offset))
|
|
3471
|
-
*/
|
|
3472
|
-
class SplitBlockWithNodeAction extends ModifyContentAction {
|
|
3473
|
-
constructor(splitPointNode, startOffsetOfNode) {
|
|
3474
|
-
super();
|
|
3475
|
-
this.type = ModifyContentActionType.SPLIT_BLOCK_WITH_NODE;
|
|
3476
|
-
this.splitPointNode = splitPointNode;
|
|
3477
|
-
this.startOffsetOfNode = startOffsetOfNode;
|
|
3478
|
-
}
|
|
3479
|
-
}
|
|
3480
|
-
|
|
3481
|
-
/**
|
|
3482
|
-
* Insert a image block into the text block at special position strategy.
|
|
3483
|
-
*/
|
|
3484
|
-
class BlockInsertImageIntoTextStrategy extends ActionHandleStrategy {
|
|
3485
|
-
/**
|
|
3486
|
-
* insertImage
|
|
3487
|
-
*
|
|
3488
|
-
* @param {InsertImageToBlockAction} action - Insert image action instance.
|
|
3489
|
-
* @param {RTETextBlock} target - The text block.
|
|
3490
|
-
*/
|
|
3491
|
-
handleAction(action, target) {
|
|
3492
|
-
const splitNode = action.splitPointNode;
|
|
3493
|
-
const startOffsetOfNode = action.startOffsetOfNode;
|
|
3494
|
-
const newImageBlock = action.imageBlockToBeInserted;
|
|
3495
|
-
if (this.isCaretPositionAtBlockEnd(target, splitNode, startOffsetOfNode)) {
|
|
3496
|
-
target.parent.apply(new InsertChildrenAfterAction(target, newImageBlock));
|
|
3497
|
-
}
|
|
3498
|
-
else if (this.isCaretPositionAtBlockStart(target, splitNode, startOffsetOfNode)) {
|
|
3499
|
-
target.parent.apply(new InsertChildrenBeforeAction(target, newImageBlock));
|
|
3500
|
-
}
|
|
3501
|
-
else {
|
|
3502
|
-
const splitBlockAction = new SplitBlockWithNodeAction(splitNode, startOffsetOfNode);
|
|
3503
|
-
target.apply(splitBlockAction);
|
|
3504
|
-
target.parent.apply(new InsertChildrenAfterAction(target, newImageBlock));
|
|
3505
|
-
}
|
|
3506
|
-
}
|
|
3507
|
-
}
|
|
3508
|
-
|
|
3509
|
-
/**
|
|
3510
|
-
* Convert the selected blocks to list strategy.
|
|
3511
|
-
*/
|
|
3512
|
-
class BlockTransformToListStrategy extends ActionHandleStrategy {
|
|
3513
|
-
/**
|
|
3514
|
-
* This method will create a empty list block and append all selected blocks as list item block.
|
|
3515
|
-
*
|
|
3516
|
-
* @param {TransformListAction} action - The transform list action instance.
|
|
3517
|
-
* @param {RTETextBlock} target - The first item of the selected block.
|
|
3518
|
-
*/
|
|
3519
|
-
handleAction(action, target) {
|
|
3520
|
-
const contentState = target.parent;
|
|
3521
|
-
const bulletList = contentState.createList(action.listType);
|
|
3522
|
-
const selectedBlocks = action.selectedBlocks;
|
|
3523
|
-
const listItems = selectedBlocks.map((block) => contentState.toListItem(block));
|
|
3524
|
-
bulletList.apply(new AppendChildrenAction(listItems));
|
|
3525
|
-
contentState.apply(new InsertChildrenAfterAction(action.selectedBlocks[0], bulletList));
|
|
3526
|
-
selectedBlocks.forEach((block) => {
|
|
3527
|
-
block.parent.apply(new RemoveChildrenAction(block));
|
|
3528
|
-
});
|
|
3529
|
-
}
|
|
3530
|
-
}
|
|
3531
|
-
|
|
3532
|
-
/**
|
|
3533
|
-
* Action to toggle block horizontal alignment annotation
|
|
3534
|
-
*/
|
|
3535
|
-
class HorizontalAlignmentAnnotationAction extends AnnotationAction {
|
|
3536
|
-
constructor(textAlign) {
|
|
3537
|
-
super();
|
|
3538
|
-
this.isFlushable = true;
|
|
3539
|
-
this.textAlign = textAlign;
|
|
3540
|
-
}
|
|
3541
|
-
/**
|
|
3542
|
-
* Converts the action to an annotation
|
|
3543
|
-
*
|
|
3544
|
-
* @returns {HorizontalAlignmentAnnotation} The annotation
|
|
3545
|
-
*/
|
|
3546
|
-
toAnnotation() {
|
|
3547
|
-
return new HorizontalAlignmentAnnotation(this.textAlign);
|
|
3548
|
-
}
|
|
3549
|
-
}
|
|
3550
|
-
|
|
3551
|
-
/**
|
|
3552
|
-
* Update the text block and image block horizontal alignment strategy.
|
|
3553
|
-
*/
|
|
3554
|
-
class BlockUpdateHorizontalAlignmentStrategy extends ActionHandleStrategy {
|
|
3555
|
-
/**
|
|
3556
|
-
* Updating the horizontal alignment of a block requires cascading updates to the custom style.
|
|
3557
|
-
*
|
|
3558
|
-
* @param {HorizontalAlignmentAnnotationAction} _action - The horizontal alignment annotation action.
|
|
3559
|
-
* @param {RTETextBlock} target - The current text block.
|
|
3560
|
-
*/
|
|
3561
|
-
handleAction(_action, target) {
|
|
3562
|
-
this.updateCustomStyleAnnotation(target, ['textAlign']);
|
|
3563
|
-
}
|
|
3564
|
-
}
|
|
3565
|
-
|
|
3566
|
-
/**
|
|
3567
|
-
* Update the text block and image block horizontal alignment strategy.
|
|
3568
|
-
*/
|
|
3569
|
-
class BlockUpdateIndentStrategy extends ActionHandleStrategy {
|
|
3570
|
-
/**
|
|
3571
|
-
* Updating the indent of a block requires cascading updates to the custom style.
|
|
3572
|
-
*
|
|
3573
|
-
* @param {IndentAnnotationAction} _action - The indent annotation action.
|
|
3574
|
-
* @param {RTETextBlock} target - The current text block.
|
|
3575
|
-
*/
|
|
3576
|
-
handleAction(_action, target) {
|
|
3577
|
-
this.updateCustomStyleAnnotation(target, ['marginLeft']);
|
|
3578
|
-
}
|
|
3579
|
-
}
|
|
3580
|
-
|
|
3581
|
-
/**
|
|
3582
|
-
* Action to toggle block indent annotation
|
|
3583
|
-
*/
|
|
3584
|
-
class IndentAnnotationAction extends AnnotationAction {
|
|
3585
|
-
constructor(indent) {
|
|
3586
|
-
super();
|
|
3587
|
-
this.isFlushable = true;
|
|
3588
|
-
this.indent = indent;
|
|
3589
|
-
}
|
|
3590
|
-
/**
|
|
3591
|
-
* Converts the action to an annotation
|
|
3592
|
-
*
|
|
3593
|
-
* @returns {Annotation} The annotation
|
|
3594
|
-
*/
|
|
3595
|
-
toAnnotation() {
|
|
3596
|
-
return new IndentAnnotation(this.indent);
|
|
3597
|
-
}
|
|
3598
|
-
}
|
|
3599
|
-
|
|
3600
|
-
/**
|
|
3601
|
-
* Unlink the text block link group annotation strategy.
|
|
3602
|
-
*/
|
|
3603
|
-
class BlockUnlinkLinkGroupStrategy extends ActionHandleStrategy {
|
|
3604
|
-
/**
|
|
3605
|
-
* Unlink the link group based on group key
|
|
3606
|
-
*
|
|
3607
|
-
* @param {UnlinkLinkGroupAction} action - The unlink link group action instance.
|
|
3608
|
-
* @param {RTETextBlock} target - The current text block.
|
|
3609
|
-
*/
|
|
3610
|
-
handleAction(action, target) {
|
|
3611
|
-
const linkGroupAnnotation = target.getAnnotationByType(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
3612
|
-
if (linkGroupAnnotation) {
|
|
3613
|
-
if (linkGroupAnnotation.linkGroups.size > 1) {
|
|
3614
|
-
linkGroupAnnotation.linkGroups.delete(action.groupKey);
|
|
3615
|
-
}
|
|
3616
|
-
else {
|
|
3617
|
-
target.annotationMap.delete(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
3618
|
-
}
|
|
3619
|
-
}
|
|
3620
|
-
}
|
|
3621
|
-
}
|
|
3622
|
-
|
|
3623
|
-
/**
|
|
3624
|
-
* Text block
|
|
3625
|
-
*/
|
|
3626
|
-
class RTETextBlock extends RTEBlock {
|
|
3627
|
-
constructor(id, type, options) {
|
|
3628
|
-
super(id);
|
|
3629
|
-
this.children = [];
|
|
3630
|
-
this.type = type;
|
|
3631
|
-
const { autoMatchFormat } = options || { autoMatchFormat: true };
|
|
3632
|
-
if (autoMatchFormat) {
|
|
3633
|
-
if (RTETextBlock.isAcceptableTextStyle(type)) {
|
|
3634
|
-
this.annotationMap = new Map([TextStyleAnnotation.from(type)]);
|
|
3635
|
-
}
|
|
3636
|
-
else {
|
|
3637
|
-
this.annotationMap = new Map([TextStyleAnnotation.from('paragraph')]);
|
|
3638
|
-
}
|
|
3639
|
-
}
|
|
3640
|
-
}
|
|
3641
|
-
/**
|
|
3642
|
-
* Converts a VegaRTETextBlock into an RTETextBlock.
|
|
3643
|
-
*
|
|
3644
|
-
* @param {VegaRTETextBlock} block - The block object
|
|
3645
|
-
* @param {VegaRTETransformOptions} options - Optional transformation options.
|
|
3646
|
-
* @returns {RTETextBlock} A RTETextBlock class
|
|
3647
|
-
*/
|
|
3648
|
-
static from(block, options = { autoMatchFormat: true }) {
|
|
3649
|
-
var _a, _b;
|
|
3650
|
-
const textBlock = new RTETextBlock(block.id, block.type, options);
|
|
3651
|
-
const annotations = options.autoMatchFormat
|
|
3652
|
-
? Object.assign(Object.assign({}, block.annotations), { textStyle: (_b = (_a = block.annotations) === null || _a === void 0 ? void 0 : _a.textStyle) !== null && _b !== void 0 ? _b : textBlock.type }) : block.annotations;
|
|
3653
|
-
textBlock.children = block.nodes
|
|
3654
|
-
.map((richText) => {
|
|
3655
|
-
const NodeClass = RTEDTOClassManager$1.getRTENodeClass(richText.type);
|
|
3656
|
-
if (NodeClass) {
|
|
3657
|
-
return NodeClass.from(richText, textBlock, options);
|
|
3658
|
-
}
|
|
3659
|
-
})
|
|
3660
|
-
.filter(isNonNullable);
|
|
3661
|
-
if (annotations) {
|
|
3662
|
-
super.convertAnnotationsToMap(textBlock.annotationMap, annotations);
|
|
3663
|
-
}
|
|
3664
|
-
return textBlock;
|
|
3665
|
-
}
|
|
3666
|
-
/**
|
|
3667
|
-
* The function `createAnnotationEntity` creates a block annotation entity based on the provided type
|
|
3668
|
-
* and value.
|
|
3669
|
-
*
|
|
3670
|
-
* @param {keyof VegaRTEBlockAnnotations} type - The `type` parameter is a key of the `VegaRTEBlockAnnotations` enum, which specifies
|
|
3671
|
-
* the type of annotation entity to create.
|
|
3672
|
-
* @param {unknown} value - The `value` parameter in the `createAnnotationEntity` function is the value
|
|
3673
|
-
* that will be used to create the annotation entity. It can be of any type depending on the specific
|
|
3674
|
-
* annotation being created.
|
|
3675
|
-
* @returns {Nullable<BlockAnnotationsEntity>} The `createAnnotationEntity` function returns a nullable tuple containing a
|
|
3676
|
-
* `BlockAnnotationTypeEnum` and a `BlockAnnotation` object.
|
|
3677
|
-
*/
|
|
3678
|
-
static createAnnotationEntity(type, value) {
|
|
3679
|
-
if (type === 'textStyle') {
|
|
3680
|
-
return TextStyleAnnotation.from(value);
|
|
3681
|
-
}
|
|
3682
|
-
else {
|
|
3683
|
-
return super.createAnnotationEntity(type, value);
|
|
3684
|
-
}
|
|
3685
|
-
}
|
|
3686
|
-
/**
|
|
3687
|
-
* Checks if a given text block type is one of the acceptable text styles.
|
|
3688
|
-
*
|
|
3689
|
-
* @param {VegaRTETextBlockType} type - The text block type
|
|
3690
|
-
* @returns {boolean} Return a boolean value indicating whether the `type` parameter is valid.
|
|
3691
|
-
*/
|
|
3692
|
-
static isAcceptableTextStyle(type) {
|
|
3693
|
-
return [
|
|
3694
|
-
'title',
|
|
3695
|
-
'subtitle',
|
|
3696
|
-
'paragraph',
|
|
3697
|
-
'heading-1',
|
|
3698
|
-
'heading-2',
|
|
3699
|
-
'heading-3',
|
|
3700
|
-
'heading-4',
|
|
3701
|
-
'heading-5',
|
|
3702
|
-
'heading-6',
|
|
3703
|
-
].includes(type);
|
|
3704
|
-
}
|
|
3705
|
-
/**
|
|
3706
|
-
* Merges RTETextNode nodes based on certain conditions.
|
|
3707
|
-
*
|
|
3708
|
-
* @param {AnnotationAction} action - AnnotationAction
|
|
3709
|
-
*/
|
|
3710
|
-
mergeNodes(action) {
|
|
3711
|
-
this.children = this.children.reduce((prev, cur) => {
|
|
3712
|
-
const lastNode = prev.at(-1);
|
|
3713
|
-
if (action instanceof LinkAnnotationAction && action.needMergeNode) {
|
|
3714
|
-
const lastNodeLinkAnnotation = lastNode === null || lastNode === void 0 ? void 0 : lastNode.getAnnotationByType(NodeAnnotationTypeEnum.LINK);
|
|
3715
|
-
const curNodeLinkAnnotation = cur.getAnnotationByType(NodeAnnotationTypeEnum.LINK);
|
|
3716
|
-
if (lastNodeLinkAnnotation &&
|
|
3717
|
-
curNodeLinkAnnotation &&
|
|
3718
|
-
lastNodeLinkAnnotation.toEqual(curNodeLinkAnnotation)) {
|
|
3719
|
-
return prev;
|
|
3720
|
-
}
|
|
3721
|
-
}
|
|
3722
|
-
// TODO: handle other cases like merge bold nodes
|
|
3723
|
-
return [...prev, cur];
|
|
3724
|
-
}, []);
|
|
3725
|
-
}
|
|
3726
|
-
/**
|
|
3727
|
-
* @inheritDoc
|
|
3728
|
-
*/
|
|
3729
|
-
toJSON() {
|
|
3730
|
-
return Object.assign(Object.assign({}, super.toJSON()), { type: this.type, nodes: this.children.map((node) => node.toJSON()) });
|
|
3731
|
-
}
|
|
3732
|
-
/**
|
|
3733
|
-
* @inheritDoc
|
|
3734
|
-
*/
|
|
3735
|
-
toHtml() {
|
|
3736
|
-
const BlockTag = this.getBlockTag();
|
|
3737
|
-
const attrStr = super.generateAttributeString();
|
|
3738
|
-
const nodesHtml = this.getChildrenHtml();
|
|
3739
|
-
return super.shouldRenderAsInternalWrapper()
|
|
3740
|
-
? nodesHtml
|
|
3741
|
-
: [`<${BlockTag}${attrStr}>`, nodesHtml, `</${BlockTag}>`].join('');
|
|
3742
|
-
}
|
|
3743
|
-
/**
|
|
3744
|
-
* Clone the nodes to a new block
|
|
3745
|
-
*
|
|
3746
|
-
* @param {RTEBlock} nodes - The nodes will be copied
|
|
3747
|
-
* @returns {RTETextBlock} New block
|
|
3748
|
-
*/
|
|
3749
|
-
cloneWithNodes(nodes) {
|
|
3750
|
-
const block = new RTETextBlock(generateUUID(), this.type);
|
|
3751
|
-
block.annotationMap = super.cloneAnnotations();
|
|
3752
|
-
block.apply(new AppendChildrenAction(nodes));
|
|
3753
|
-
return block;
|
|
3754
|
-
}
|
|
3755
|
-
/**
|
|
3756
|
-
* @inheritDoc
|
|
3757
|
-
*/
|
|
3758
|
-
clone(parent) {
|
|
3759
|
-
const clonedBlock = new RTETextBlock(this.id, this.type);
|
|
3760
|
-
clonedBlock.children = this.children.map((node) => node.clone(clonedBlock));
|
|
3761
|
-
clonedBlock.annotationMap = super.cloneAnnotations();
|
|
3762
|
-
clonedBlock.parent = parent;
|
|
3763
|
-
return clonedBlock;
|
|
3764
|
-
}
|
|
3765
|
-
/**
|
|
3766
|
-
* @inheritDoc
|
|
3767
|
-
*/
|
|
3768
|
-
isNotEmpty() {
|
|
3769
|
-
return this.children.length > 0 && this.children.some((node) => !node.isEmpty());
|
|
3770
|
-
}
|
|
3771
|
-
/**
|
|
3772
|
-
* @inheritDoc
|
|
3773
|
-
*/
|
|
3774
|
-
getLastNode() {
|
|
3775
|
-
return this.children[this.children.length - 1];
|
|
3776
|
-
}
|
|
3777
|
-
/**
|
|
3778
|
-
* Get the HTML tag for the block based on its type.
|
|
3779
|
-
*
|
|
3780
|
-
* @returns {RTETextBlockTagType} The HTML tag for the block.
|
|
3781
|
-
*/
|
|
3782
|
-
getBlockTag() {
|
|
3783
|
-
switch (this.type) {
|
|
3784
|
-
case 'title':
|
|
3785
|
-
case 'subtitle':
|
|
3786
|
-
return `div`;
|
|
3787
|
-
case 'heading-1':
|
|
3788
|
-
return `h1`;
|
|
3789
|
-
case 'heading-2':
|
|
3790
|
-
return `h2`;
|
|
3791
|
-
case 'heading-3':
|
|
3792
|
-
return `h3`;
|
|
3793
|
-
case 'heading-4':
|
|
3794
|
-
return `h4`;
|
|
3795
|
-
case 'heading-5':
|
|
3796
|
-
return `h5`;
|
|
3797
|
-
case 'heading-6':
|
|
3798
|
-
return `h6`;
|
|
3799
|
-
case 'paragraph':
|
|
3800
|
-
default:
|
|
3801
|
-
return 'p';
|
|
3802
|
-
}
|
|
3803
|
-
}
|
|
3804
|
-
/**
|
|
3805
|
-
* Get the HTML string for the children nodes, including handling link group annotations.
|
|
3806
|
-
*
|
|
3807
|
-
* @returns {string} The HTML string representing the children nodes.
|
|
3808
|
-
*/
|
|
3809
|
-
getChildrenHtml() {
|
|
3810
|
-
const linkGroupAnnotation = this.getAnnotationByType(InternalAnnotationTypeEnum.LINK_GROUP);
|
|
3811
|
-
let nodesHtml = this.children.map((node) => node.toHtml()).join('');
|
|
3812
|
-
if (linkGroupAnnotation && this.children.length > 0) {
|
|
3813
|
-
nodesHtml = this.generateLinkHtml(linkGroupAnnotation, nodesHtml);
|
|
3814
|
-
}
|
|
3815
|
-
return nodesHtml;
|
|
3816
|
-
}
|
|
3817
|
-
/**
|
|
3818
|
-
* @inheritDoc
|
|
3819
|
-
*/
|
|
3820
|
-
doAnnotationActionApply(action) {
|
|
3821
|
-
const strategy = ActionHandleStrategyRegistry.get(action.constructor.name, RTETextBlock.name);
|
|
3822
|
-
if (strategy) {
|
|
3823
|
-
strategy.execute(action, this);
|
|
3824
|
-
}
|
|
3825
|
-
}
|
|
3826
|
-
/**
|
|
3827
|
-
* Generate Link Html
|
|
3828
|
-
*
|
|
3829
|
-
* @param {LinkGroupAnnotation} linkGroupAnnotation - linkGroupAnnotation
|
|
3830
|
-
* @param {string} nodesHtml - The nodes html
|
|
3831
|
-
* @returns {string} link html
|
|
3832
|
-
*/
|
|
3833
|
-
generateLinkHtml(linkGroupAnnotation, nodesHtml) {
|
|
3834
|
-
nodesHtml = '';
|
|
3835
|
-
let linkGroupNodes = [];
|
|
3836
|
-
for (let i = 0; i < this.children.length; i++) {
|
|
3837
|
-
const currentLinkAnnotation = this.children[i].getAnnotationByType(NodeAnnotationTypeEnum.LINK);
|
|
3838
|
-
const nextLinkAnnotation = this.children[i + 1]
|
|
3839
|
-
? this.children[i + 1].getAnnotationByType(NodeAnnotationTypeEnum.LINK)
|
|
3840
|
-
: null;
|
|
3841
|
-
if (currentLinkAnnotation) {
|
|
3842
|
-
linkGroupNodes.push(this.children[i]);
|
|
3843
|
-
if (!nextLinkAnnotation ||
|
|
3844
|
-
currentLinkAnnotation.link.groupKey !== nextLinkAnnotation.link.groupKey) {
|
|
3845
|
-
const linkAttributes = linkGroupAnnotation.toString(currentLinkAnnotation, {
|
|
3846
|
-
standalone: true,
|
|
3847
|
-
});
|
|
3848
|
-
nodesHtml += [
|
|
3849
|
-
`<a${linkAttributes ? ` ${linkAttributes}` : ''}>`,
|
|
3850
|
-
linkGroupNodes.map((linkNode) => linkNode.toHtml()).join(''),
|
|
3851
|
-
`</a>`,
|
|
3852
|
-
].join('');
|
|
3853
|
-
linkGroupNodes = [];
|
|
3854
|
-
}
|
|
3855
|
-
}
|
|
3856
|
-
else {
|
|
3857
|
-
nodesHtml += this.children[i].toHtml();
|
|
3858
|
-
}
|
|
3859
|
-
}
|
|
3860
|
-
return nodesHtml;
|
|
3861
|
-
}
|
|
3862
|
-
}
|
|
3863
|
-
(() => {
|
|
3864
|
-
ActionHandleStrategyRegistry.register(TextStyleAnnotationAction.name, RTETextBlock.name, new BlockUpdateTextStyleStrategy());
|
|
3865
|
-
ActionHandleStrategyRegistry.register(HorizontalAlignmentAnnotationAction.name, RTETextBlock.name, new BlockUpdateHorizontalAlignmentStrategy());
|
|
3866
|
-
ActionHandleStrategyRegistry.register(IndentAnnotationAction.name, RTETextBlock.name, new BlockUpdateIndentStrategy());
|
|
3867
|
-
ActionHandleStrategyRegistry.register(LinkGroupAnnotationAction.name, RTETextBlock.name, new BlockUpdateLinkGroupStrategy());
|
|
3868
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.UNLINK_LINK_GROUP, RTETextBlock.name, new BlockUnlinkLinkGroupStrategy());
|
|
3869
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.SPLIT_BLOCK_WITH_NODE, RTETextBlock.name, new BlockSplitWithTextNodeStrategy());
|
|
3870
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.REPLACE_CHILD_NODES, RTETextBlock.name, new BlockReplaceNodesStrategy());
|
|
3871
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.MERGE_TWO_BLOCKS_NODES, RTETextBlock.name, new BlockMergeNodesStrategy());
|
|
3872
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.LINE_BREAK_SINGLE_BLOCK, RTETextBlock.name, new BlockInsertLineBreakStrategy());
|
|
3873
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.LINE_BREAK_MULTIPLE_BLOCKS, RTETextBlock.name, new BlockInsertLineBreakWithBlocksStrategy());
|
|
3874
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.INSERT_IMAGE_TO_BLOCK, RTETextBlock.name, new BlockInsertImageIntoTextStrategy());
|
|
3875
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.TRANSFORM_LIST_BLOCK, RTETextBlock.name, new BlockTransformToListStrategy());
|
|
3876
|
-
})();
|
|
3877
|
-
|
|
3878
|
-
/**
|
|
3879
|
-
* The delete node content contains some common functions that used for image block delete the image node or text block delete text node.
|
|
3880
|
-
*/
|
|
3881
|
-
class BlockDeleteNodeContentStrategy extends ActionHandleStrategy {
|
|
3882
|
-
/**
|
|
3883
|
-
* Returns the previous node relative to the current node in a rich text editor structure.
|
|
3884
|
-
*
|
|
3885
|
-
* @param {RTENode} currentNode - An object of type `RTENode`.
|
|
3886
|
-
* @returns {Nullable<RTENode>} the previous block last node
|
|
3887
|
-
*/
|
|
3888
|
-
getPreviousNode(currentNode) {
|
|
3889
|
-
const currentBlock = currentNode.parent;
|
|
3890
|
-
const currentIndex = currentBlock.children.indexOf(currentNode);
|
|
3891
|
-
if (currentIndex > 0) {
|
|
3892
|
-
return currentBlock.children[currentIndex - 1];
|
|
3893
|
-
}
|
|
3894
|
-
else if (currentBlock.parent) {
|
|
3895
|
-
const previousBlock = this.getPreviousBlock(currentBlock);
|
|
3896
|
-
if (previousBlock) {
|
|
3897
|
-
return this.getBlockLastNode(previousBlock);
|
|
3898
|
-
}
|
|
3899
|
-
}
|
|
3900
|
-
}
|
|
3901
|
-
/**
|
|
3902
|
-
* Returns the next node relative to the current node in a rich text editor structure.
|
|
3903
|
-
*
|
|
3904
|
-
* @param {RTENode} currentNode - An object of type `RTENode`.
|
|
3905
|
-
* @returns {Nullable<RTENode>} the next block first node
|
|
3906
|
-
*/
|
|
3907
|
-
getNextNode(currentNode) {
|
|
3908
|
-
const currentBlock = currentNode.parent;
|
|
3909
|
-
const currentIndex = currentBlock.children.indexOf(currentNode);
|
|
3910
|
-
if (currentBlock.children[currentIndex + 1]) {
|
|
3911
|
-
return currentBlock.children[currentIndex + 1];
|
|
3912
|
-
}
|
|
3913
|
-
else if (currentBlock.parent) {
|
|
3914
|
-
const nextBlock = this.getNextBlock(currentBlock);
|
|
3915
|
-
if (nextBlock) {
|
|
3916
|
-
return this.getBlockFirstNode(nextBlock);
|
|
3917
|
-
}
|
|
3918
|
-
}
|
|
3919
|
-
}
|
|
3920
|
-
/**
|
|
3921
|
-
* Determines if a given node is the first node within the current state.
|
|
3922
|
-
*
|
|
3923
|
-
* @param {RTENode} currentNode - An object representing a node in a rich text editor (RTE).
|
|
3924
|
-
* @returns {boolean} True or false;
|
|
3925
|
-
*/
|
|
3926
|
-
isContentFirstNode(currentNode) {
|
|
3927
|
-
const currentBlock = currentNode.parent;
|
|
3928
|
-
const currentIndex = currentBlock.children.indexOf(currentNode);
|
|
3929
|
-
const parent = currentBlock.parent;
|
|
3930
|
-
if (currentBlock.isListItemBlock()) {
|
|
3931
|
-
const listParent = parent.parent;
|
|
3932
|
-
return (currentIndex === 0 &&
|
|
3933
|
-
Array.isArray(parent.children) &&
|
|
3934
|
-
parent.children[0] === currentBlock &&
|
|
3935
|
-
listParent['type'] !== 'list-item' &&
|
|
3936
|
-
Array.isArray(listParent.children) &&
|
|
3937
|
-
listParent.children[0] === parent);
|
|
3938
|
-
}
|
|
3939
|
-
else {
|
|
3940
|
-
return (currentIndex === 0 && Array.isArray(parent.children) && parent.children[0] === currentBlock);
|
|
3941
|
-
}
|
|
3942
|
-
}
|
|
3943
|
-
/**
|
|
3944
|
-
* TODO: The getPreviousBlock add nest list support
|
|
3945
|
-
* This function retrieves the previous block in a rich text editor, considering different scenarios such as being in a bullet list.
|
|
3946
|
-
*
|
|
3947
|
-
* @param {RTEBlock} currentBlock - Used to retrieve the previous block relative to the given `currentBlock` within a rich text editor context.
|
|
3948
|
-
* @returns {Nullable<RTEBlock>} The previous block if existing
|
|
3949
|
-
*/
|
|
3950
|
-
getPreviousBlock(currentBlock) {
|
|
3951
|
-
if (currentBlock && currentBlock.parent && currentBlock.parent.children) {
|
|
3952
|
-
const currentBlockIndex = currentBlock.parent.children.indexOf(currentBlock);
|
|
3953
|
-
if (currentBlockIndex > 0) {
|
|
3954
|
-
return currentBlock.parent.children[currentBlockIndex - 1];
|
|
3955
|
-
}
|
|
3956
|
-
else if (this.isRTEBlock(currentBlock.parent) && currentBlockIndex === 0) {
|
|
3957
|
-
return this.getPreviousBlock(currentBlock.parent);
|
|
3958
|
-
}
|
|
3959
|
-
}
|
|
3960
|
-
}
|
|
3961
|
-
/**
|
|
3962
|
-
* Returns the last node within a given RTE block, handling different block types accordingly.
|
|
3963
|
-
*
|
|
3964
|
-
* @param {RTEBlock} currentBlock - Returns the last node within that block.
|
|
3965
|
-
* @returns {Nullable<RTENode>} Returns the last node of the given `currentBlock` object.
|
|
3966
|
-
*/
|
|
3967
|
-
getBlockLastNode(currentBlock) {
|
|
3968
|
-
return currentBlock.getLastNode();
|
|
3969
|
-
}
|
|
3970
|
-
/**
|
|
3971
|
-
* Returns the first node within a given RTE block, handling different block types accordingly.
|
|
3972
|
-
*
|
|
3973
|
-
* @param {RTEBlock} currentBlock - Returns the first node within that block.
|
|
3974
|
-
* @returns {Nullable<RTENode>} Returns the first node of the given `currentBlock` object.
|
|
3975
|
-
*/
|
|
3976
|
-
getBlockFirstNode(currentBlock) {
|
|
3977
|
-
if (currentBlock.type === 'number-list' || currentBlock.type === 'bullet-list') {
|
|
3978
|
-
if (currentBlock.children) {
|
|
3979
|
-
const firstListItem = currentBlock.children[0];
|
|
3980
|
-
return this.getBlockFirstNode(firstListItem);
|
|
3981
|
-
}
|
|
3982
|
-
}
|
|
3983
|
-
else {
|
|
3984
|
-
if (currentBlock.children) {
|
|
3985
|
-
return currentBlock.children[0];
|
|
3986
|
-
}
|
|
3987
|
-
}
|
|
3988
|
-
}
|
|
3989
|
-
/**
|
|
3990
|
-
* This function retrieves the next block in a rich text editor, considering different scenarios such as being in a bullet list.
|
|
3991
|
-
*
|
|
3992
|
-
* @param {RTEBlock} currentBlock - Used to retrieve the next block relative to the given `currentBlock` within a rich text editor context.
|
|
3993
|
-
* @returns {Nullable<RTEBlock>} The next block if existing
|
|
3994
|
-
*/
|
|
3995
|
-
getNextBlock(currentBlock) {
|
|
3996
|
-
if (currentBlock && currentBlock.parent && currentBlock.parent.children) {
|
|
3997
|
-
const currentBlockIndex = currentBlock.parent.children.indexOf(currentBlock);
|
|
3998
|
-
if (currentBlock.parent.children[currentBlockIndex + 1]) {
|
|
3999
|
-
return currentBlock.parent.children[currentBlockIndex + 1];
|
|
4000
|
-
}
|
|
4001
|
-
else if (currentBlock.type === 'list-item' &&
|
|
4002
|
-
currentBlock.parent.children.length === currentBlockIndex + 1) {
|
|
4003
|
-
return this.getNextBlock(currentBlock.parent);
|
|
4004
|
-
}
|
|
4005
|
-
}
|
|
4006
|
-
}
|
|
4007
|
-
/**
|
|
4008
|
-
* Checks if the given instance is not the root content block.
|
|
4009
|
-
*
|
|
4010
|
-
* @param {RTEBlock | VegaRTEContent} block - The instance to check.
|
|
4011
|
-
* @returns {boolean} True if the block is not the root content block, false otherwise.
|
|
4012
|
-
*/
|
|
4013
|
-
isRTEBlock(block) {
|
|
4014
|
-
return block && block.constructor.name !== 'VegaRTEContent';
|
|
4015
|
-
}
|
|
4016
|
-
}
|
|
4017
|
-
|
|
4018
|
-
/**
|
|
4019
|
-
* Remove the code block from the value, call this action if want to flush value after action.
|
|
4020
|
-
*/
|
|
4021
|
-
class CodeBlockRemoveSelfStrategy extends BlockDeleteNodeContentStrategy {
|
|
4022
|
-
/**
|
|
4023
|
-
* @inheritDoc
|
|
4024
|
-
*/
|
|
4025
|
-
handleAction(_action, target) {
|
|
4026
|
-
const node = target.children[0];
|
|
4027
|
-
const parent = target.parent;
|
|
4028
|
-
if (parent) {
|
|
4029
|
-
let focusNode = this.getPreviousNode(node);
|
|
4030
|
-
let offset = this.getRTENodeEndOffset(focusNode);
|
|
4031
|
-
if (!focusNode) {
|
|
4032
|
-
focusNode = this.getNextNode(node);
|
|
4033
|
-
offset = 0;
|
|
4034
|
-
}
|
|
4035
|
-
parent.apply(new RemoveChildrenAction(target));
|
|
4036
|
-
const focusElement = focusNode
|
|
4037
|
-
? stateEntityRenderingRegistry.getDOMByEntity(focusNode)
|
|
4038
|
-
: null;
|
|
4039
|
-
if (parent.children.length === 0) {
|
|
4040
|
-
const defaultParagraph = RTETextBlock.from({
|
|
4041
|
-
id: generateUUID(),
|
|
4042
|
-
type: 'paragraph',
|
|
4043
|
-
nodes: [{ id: generateUUID(), type: 'text', text: '' }],
|
|
4044
|
-
});
|
|
4045
|
-
target.parent.apply(new AppendChildrenAction([defaultParagraph]));
|
|
4046
|
-
focusNode = defaultParagraph.children[0];
|
|
4047
|
-
offset = 0;
|
|
4048
|
-
}
|
|
4049
|
-
this.notifyUpdateSelection(focusNode, focusElement, offset, target);
|
|
4050
|
-
}
|
|
4051
|
-
}
|
|
4052
|
-
/**
|
|
4053
|
-
* Update the rich text next selection range.
|
|
4054
|
-
*
|
|
4055
|
-
* @param {RTENode} focusNode - The next focus node dto.
|
|
4056
|
-
* @param {Nullable<HTMLElement>} focusElement - The next focus element. The update selection task could run directly when the element is exist.
|
|
4057
|
-
* @param {number} offset - The next focus text offset.
|
|
4058
|
-
* @param {RTECodeBlock} target - The code block dto.
|
|
4059
|
-
*/
|
|
4060
|
-
notifyUpdateSelection(focusNode, focusElement, offset, target) {
|
|
4061
|
-
const targetDom = stateEntityRenderingRegistry.getDOMByEntity(target);
|
|
4062
|
-
if (targetDom) {
|
|
4063
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(targetDom, VegaInternalRichTextEditorSelectionRangeChange);
|
|
4064
|
-
if (nodeSubject) {
|
|
4065
|
-
ChangeManager.notify(nodeSubject, {
|
|
4066
|
-
node: focusNode,
|
|
4067
|
-
updateDirectly: focusElement ? true : false,
|
|
4068
|
-
offset,
|
|
4069
|
-
});
|
|
4070
|
-
}
|
|
4071
|
-
}
|
|
4072
|
-
}
|
|
4073
|
-
/**
|
|
4074
|
-
* Get the node content end offset.
|
|
4075
|
-
*
|
|
4076
|
-
* @param {Nullable<RTENode>} node - The RTENode.
|
|
4077
|
-
* @returns {number} - The number value.
|
|
4078
|
-
*/
|
|
4079
|
-
getRTENodeEndOffset(node) {
|
|
4080
|
-
if (node) {
|
|
4081
|
-
return node.getRangeEndOffset();
|
|
4082
|
-
}
|
|
4083
|
-
return 0;
|
|
4084
|
-
}
|
|
4085
|
-
}
|
|
4086
|
-
|
|
4087
|
-
/**
|
|
4088
|
-
* Update the code block content or language action.
|
|
4089
|
-
*
|
|
4090
|
-
* @example codeNode.apply(new UpdateCodeBlockAction(content, language))
|
|
4091
|
-
*/
|
|
4092
|
-
class UpdateCodeBlockAction extends ModifyContentAction {
|
|
4093
|
-
constructor(content, language) {
|
|
4094
|
-
super();
|
|
4095
|
-
this.isFlushable = true;
|
|
4096
|
-
this.type = ModifyContentActionType.UPDATE_CODE_BLOCK;
|
|
4097
|
-
this.content = content;
|
|
4098
|
-
this.language = language;
|
|
4099
|
-
}
|
|
4100
|
-
}
|
|
4101
|
-
|
|
4102
|
-
/**
|
|
4103
|
-
* Remove the line break and insert new paragraph after code block.
|
|
4104
|
-
*/
|
|
4105
|
-
class SwitchOutFromCodeBlockStrategy extends ActionHandleStrategy {
|
|
4106
|
-
/**
|
|
4107
|
-
* @inheritDoc
|
|
4108
|
-
*/
|
|
4109
|
-
handleAction(action, target) {
|
|
4110
|
-
const { content, language } = action;
|
|
4111
|
-
const textArray = content.split('\n');
|
|
4112
|
-
const updateAction = new UpdateCodeBlockAction(textArray.slice(0, textArray.length - 2).join('\n'), language);
|
|
4113
|
-
updateAction.isFlushable = false;
|
|
4114
|
-
target.children[0].apply(updateAction);
|
|
4115
|
-
const textBlock = RTETextBlock.from({
|
|
4116
|
-
id: generateUUID(),
|
|
4117
|
-
type: 'paragraph',
|
|
4118
|
-
nodes: [{ id: generateUUID(), text: '', type: 'text' }],
|
|
4119
|
-
});
|
|
4120
|
-
target.parent.apply(new InsertChildrenAfterAction(target, textBlock));
|
|
4121
|
-
// Focus the next text node after value update.
|
|
4122
|
-
const currentNodeDom = stateEntityRenderingRegistry.getDOMByEntity(target);
|
|
4123
|
-
if (currentNodeDom) {
|
|
4124
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(currentNodeDom, VegaInternalRichTextEditorSelectionRangeChange);
|
|
4125
|
-
if (nodeSubject) {
|
|
4126
|
-
ChangeManager.notify(nodeSubject, { node: textBlock.children[0] });
|
|
4127
|
-
}
|
|
4128
|
-
}
|
|
4129
|
-
}
|
|
4130
|
-
}
|
|
4131
|
-
|
|
4132
|
-
/**
|
|
4133
|
-
* Update the language or content of code block strategy.
|
|
4134
|
-
*/
|
|
4135
|
-
class UpdateCodeBlockStrategy extends ActionHandleStrategy {
|
|
4136
|
-
/**
|
|
4137
|
-
* @inheritDoc
|
|
4138
|
-
*/
|
|
4139
|
-
handleAction(action, target) {
|
|
4140
|
-
const { content, language } = action;
|
|
4141
|
-
target.language = language;
|
|
4142
|
-
target.text = content;
|
|
4143
|
-
}
|
|
4144
|
-
}
|
|
4145
|
-
|
|
4146
|
-
/**
|
|
4147
|
-
* Action to change the selection range
|
|
4148
|
-
*/
|
|
4149
|
-
class SelectionChangeAction extends AnnotationAction {
|
|
4150
|
-
constructor(range) {
|
|
4151
|
-
super();
|
|
4152
|
-
this.isFlushable = false;
|
|
4153
|
-
this.range = range;
|
|
4154
|
-
}
|
|
4155
|
-
/**
|
|
4156
|
-
* Converts the action to an annotation
|
|
4157
|
-
*
|
|
4158
|
-
* @returns {SelectionRangeAnnotation} The annotation
|
|
4159
|
-
*/
|
|
4160
|
-
toAnnotation() {
|
|
4161
|
-
return new SelectionRangeAnnotation(this.range);
|
|
4162
|
-
}
|
|
4163
|
-
}
|
|
4164
|
-
|
|
4165
|
-
/**
|
|
4166
|
-
* Update the code block node annotation map strategy.
|
|
4167
|
-
*/
|
|
4168
|
-
class CodeNodeSetSelectionRangeAnnotationStrategy extends ActionHandleStrategy {
|
|
4169
|
-
/**
|
|
4170
|
-
* @inheritDoc
|
|
4171
|
-
*/
|
|
4172
|
-
handleAction(action, target) {
|
|
4173
|
-
target.annotationMap.set(InternalAnnotationTypeEnum.SELECTION_RANGE, action.toAnnotation());
|
|
4174
|
-
}
|
|
4175
|
-
}
|
|
4176
|
-
|
|
4177
|
-
/**
|
|
4178
|
-
* Abstract class for decorator nodes. A decorator node modifies content like an image node that will delete the whole node when the delete button is pressed.
|
|
4179
|
-
*/
|
|
4180
|
-
class RTEDecoratorNode extends RTENode {
|
|
4181
|
-
constructor() {
|
|
4182
|
-
super(...arguments);
|
|
4183
|
-
this.type = 'decorator-node';
|
|
4184
|
-
this.isSelected = false;
|
|
4185
|
-
}
|
|
4186
|
-
/**
|
|
4187
|
-
* Check the element is a decorator node container.
|
|
4188
|
-
*
|
|
4189
|
-
* @param {HTMLElement} element - The checked element.
|
|
4190
|
-
* @returns {boolean} - The result of the check.
|
|
4191
|
-
*/
|
|
4192
|
-
static isDecoratorNodeContainerElement(element) {
|
|
4193
|
-
return element && element.classList.contains(RTEDecoratorNode.DECORATOR_CONTAINER_CLASS);
|
|
4194
|
-
}
|
|
4195
|
-
/**
|
|
4196
|
-
* Get the decorator node element within the container.
|
|
4197
|
-
*
|
|
4198
|
-
* @param {HTMLElement} container - The container element.
|
|
4199
|
-
* @returns {Nullable<HTMLElement>} - The decorator node element, if found.
|
|
4200
|
-
*/
|
|
4201
|
-
static getDecoratorNodeElement(container) {
|
|
4202
|
-
return container.querySelector(`.${RTEDecoratorNode.DECORATOR_NODE_CLASS}`);
|
|
4203
|
-
}
|
|
4204
|
-
/**
|
|
4205
|
-
* @inheritDoc
|
|
4206
|
-
*/
|
|
4207
|
-
getRangeEndOffset() {
|
|
4208
|
-
return 1;
|
|
4209
|
-
}
|
|
4210
|
-
/**
|
|
4211
|
-
* @inheritDoc
|
|
4212
|
-
*/
|
|
4213
|
-
getRangeContainer() {
|
|
4214
|
-
const element = this.getElementRef();
|
|
4215
|
-
if (element) {
|
|
4216
|
-
return findParent(element, `.${RTEDecoratorNode.DECORATOR_CONTAINER_CLASS}`);
|
|
4217
|
-
}
|
|
4218
|
-
}
|
|
4219
|
-
/**
|
|
4220
|
-
* The decorator node is not content editable from the outside.
|
|
4221
|
-
*
|
|
4222
|
-
* @returns {boolean} - Always returns false for decorator nodes.
|
|
4223
|
-
*/
|
|
4224
|
-
isContentEditable() {
|
|
4225
|
-
return false;
|
|
4226
|
-
}
|
|
4227
|
-
}
|
|
4228
|
-
// CSS class names for the decorator node parent element
|
|
4229
|
-
RTEDecoratorNode.DECORATOR_CONTAINER_CLASS = 'v-internal-decorator-container';
|
|
4230
|
-
// CSS class names for the decorator node element
|
|
4231
|
-
RTEDecoratorNode.DECORATOR_NODE_CLASS = 'v-internal-decorator-node';
|
|
4232
|
-
|
|
4233
|
-
/**
|
|
4234
|
-
* RTE code node DTO class.
|
|
4235
|
-
*/
|
|
4236
|
-
class RTECodeBlockNode extends RTEDecoratorNode {
|
|
4237
|
-
constructor(id, content, language, parentBlock) {
|
|
4238
|
-
super(id);
|
|
4239
|
-
this.type = NodeTypeEnum.CODE_BLOCK_NODE;
|
|
4240
|
-
this.text = '';
|
|
4241
|
-
this.annotationMap = new Map();
|
|
4242
|
-
this.text = content;
|
|
4243
|
-
this.parent = parentBlock;
|
|
4244
|
-
this.language = language;
|
|
4245
|
-
}
|
|
4246
|
-
/**
|
|
4247
|
-
* The code node toJSON method will called internal.
|
|
4248
|
-
*
|
|
4249
|
-
* @returns {VegaRTECodeNode} - An object contains content property.
|
|
4250
|
-
*/
|
|
4251
|
-
toJSON() {
|
|
4252
|
-
return { id: this.id, type: 'text', text: this.text, language: this.language };
|
|
4253
|
-
}
|
|
4254
|
-
/**
|
|
4255
|
-
* @inheritDoc
|
|
4256
|
-
*/
|
|
4257
|
-
toHtml() {
|
|
4258
|
-
return `<code style='box-sizing: border-box;color: rgba(var(--v-text-primary, 32, 54, 69, 1));text-align: left;font-family: "Roboto Mono";font-weight: 400;line-height: 22px;font-size: 16px;white-space: pre-wrap;min-height: 22px;tab-size: 2px;'>${this.text}</code>`;
|
|
4259
|
-
}
|
|
4260
|
-
/**
|
|
4261
|
-
* @inheritDoc
|
|
4262
|
-
*/
|
|
4263
|
-
clone(parent) {
|
|
4264
|
-
const cloned = new RTECodeBlockNode(this.id, this.text, this.language, parent);
|
|
4265
|
-
return cloned;
|
|
4266
|
-
}
|
|
4267
|
-
/**
|
|
4268
|
-
* @inheritDoc
|
|
4269
|
-
*/
|
|
4270
|
-
doAnnotationActionApply(action) {
|
|
4271
|
-
ActionHandleStrategyRegistry.executeTheStrategy(action, this);
|
|
4272
|
-
}
|
|
4273
|
-
/**
|
|
4274
|
-
* @inheritDoc
|
|
4275
|
-
*/
|
|
4276
|
-
doModifyActionApply(action) {
|
|
4277
|
-
ActionHandleStrategyRegistry.executeTheStrategy(action, this);
|
|
4278
|
-
}
|
|
4279
|
-
}
|
|
4280
|
-
(() => {
|
|
4281
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.UPDATE_CODE_BLOCK, RTECodeBlockNode.name, new UpdateCodeBlockStrategy());
|
|
4282
|
-
ActionHandleStrategyRegistry.register(SelectionChangeAction.name, RTECodeBlockNode.name, new CodeNodeSetSelectionRangeAnnotationStrategy());
|
|
4283
|
-
})();
|
|
4284
|
-
|
|
4285
|
-
/**
|
|
4286
|
-
* Insert image behind after code block strategy.
|
|
4287
|
-
*/
|
|
4288
|
-
class CodeBlockInsertImageStrategy extends ActionHandleStrategy {
|
|
4289
|
-
/**
|
|
4290
|
-
* Insert image block at behind of the RTE code block.
|
|
4291
|
-
*
|
|
4292
|
-
* @param {InsertImageToBlockAction} action - The insert image action instance.
|
|
4293
|
-
* @param {RTECodeBlock} target - The code block.
|
|
4294
|
-
*/
|
|
4295
|
-
handleAction(action, target) {
|
|
4296
|
-
const imageBlock = action.imageBlockToBeInserted;
|
|
4297
|
-
target.parent.apply(new InsertChildrenAfterAction(target, imageBlock));
|
|
4298
|
-
}
|
|
4299
|
-
}
|
|
4300
|
-
|
|
4301
|
-
var CodeLanguage;
|
|
4302
|
-
(function (CodeLanguage) {
|
|
4303
|
-
CodeLanguage["CSS"] = "css";
|
|
4304
|
-
CodeLanguage["HTML"] = "html";
|
|
4305
|
-
CodeLanguage["JavaScript"] = "js";
|
|
4306
|
-
CodeLanguage["JSX"] = "jsx";
|
|
4307
|
-
CodeLanguage["Plain Text"] = "plainText";
|
|
4308
|
-
CodeLanguage["TypeScript"] = "ts";
|
|
4309
|
-
CodeLanguage["TSX"] = "tsx";
|
|
4310
|
-
})(CodeLanguage || (CodeLanguage = {}));
|
|
4311
|
-
|
|
4312
|
-
/**
|
|
4313
|
-
* Remove the node from the text block or image block strategy.
|
|
4314
|
-
*/
|
|
4315
|
-
class RemoveChildrenStrategy extends ActionHandleStrategy {
|
|
4316
|
-
/**
|
|
4317
|
-
* Remove the node or block from the parent.
|
|
4318
|
-
* Remove the block if the block children is empty after delete the current element.
|
|
4319
|
-
*
|
|
4320
|
-
* @param {RemoveChildrenAction} action - The remove child action instance.
|
|
4321
|
-
* @param {RTEBlock | VegaRTEContent} target - The parent block of the node that will be removed.
|
|
4322
|
-
*/
|
|
4323
|
-
handleAction(action, target) {
|
|
4324
|
-
const arrayFixed = target.children;
|
|
4325
|
-
target.children = arrayFixed.filter((node) => node !== action.entityToBeRemoved);
|
|
4326
|
-
if (target.children.length === 0 && 'parent' in target && target.parent) {
|
|
4327
|
-
if (!target.isListItemBlock()) {
|
|
4328
|
-
target.parent.apply(new RemoveChildrenAction(target));
|
|
4329
|
-
}
|
|
4330
|
-
else if (!target.nestList || !target.nestList.length) {
|
|
4331
|
-
target.parent.apply(new RemoveChildrenAction(target));
|
|
4332
|
-
}
|
|
4333
|
-
}
|
|
4334
|
-
}
|
|
4335
|
-
}
|
|
4336
|
-
|
|
4337
|
-
/**
|
|
4338
|
-
* The code block DTO class.
|
|
4339
|
-
*/
|
|
4340
|
-
class RTECodeBlock extends RTEBlock {
|
|
4341
|
-
constructor(id, content, language) {
|
|
4342
|
-
super(id);
|
|
4343
|
-
this.type = 'code-block';
|
|
4344
|
-
this.children = [new RTECodeBlockNode(`${id}-1`, content, language, this)];
|
|
4345
|
-
}
|
|
4346
|
-
/**
|
|
4347
|
-
* Converts a VegaRTECodeBlock into an RTECodeBlock.
|
|
4348
|
-
*
|
|
4349
|
-
* @param {VegaRTECodeBlock} block - The block object
|
|
4350
|
-
* @returns {RTECodeBlock} A RTECodeBlock class
|
|
4351
|
-
*/
|
|
4352
|
-
static from(block) {
|
|
4353
|
-
return new RTECodeBlock(block.id, block.content, block.language);
|
|
4354
|
-
}
|
|
4355
|
-
/**
|
|
4356
|
-
* @inheritDoc
|
|
4357
|
-
*/
|
|
4358
|
-
toJSON() {
|
|
4359
|
-
const { language, text } = this.children[0];
|
|
4360
|
-
return {
|
|
4361
|
-
id: this.id,
|
|
4362
|
-
type: 'code-block',
|
|
4363
|
-
content: text,
|
|
4364
|
-
language,
|
|
4365
|
-
};
|
|
4366
|
-
}
|
|
4367
|
-
/**
|
|
4368
|
-
* @inheritDoc
|
|
4369
|
-
*/
|
|
4370
|
-
toHtml() {
|
|
4371
|
-
const { language = CodeLanguage['Plain Text'] } = this.children[0];
|
|
4372
|
-
return `<pre data-language="${language}" style="background-color: rgba(var(--v-bg-secondary, 245, 247, 247, 1)); padding: 12px">${this.children.map((node) => node.toHtml())}</pre>`;
|
|
4373
|
-
}
|
|
4374
|
-
/**
|
|
4375
|
-
* @inheritDoc
|
|
4376
|
-
*/
|
|
4377
|
-
clone(parent) {
|
|
4378
|
-
const cloneCodeBlock = RTECodeBlock.from(this.toJSON());
|
|
4379
|
-
cloneCodeBlock.parent = parent;
|
|
4380
|
-
return cloneCodeBlock;
|
|
4381
|
-
}
|
|
4382
|
-
/**
|
|
4383
|
-
* Apply action to block
|
|
4384
|
-
*
|
|
4385
|
-
* @param {ModifyContentAction} action - modify content action.
|
|
4386
|
-
*/
|
|
4387
|
-
apply(action) {
|
|
4388
|
-
if (action instanceof ModifyContentAction) {
|
|
4389
|
-
ActionHandleStrategyRegistry.executeTheStrategy(action, this);
|
|
4390
|
-
}
|
|
4391
|
-
if (action.isFlushable) {
|
|
4392
|
-
const domNode = stateEntityRenderingRegistry.getDOMByEntity(this);
|
|
4393
|
-
if (domNode) {
|
|
4394
|
-
const nodeSubject = domNodeSubjectFactory.getSubjectFromParentNodeByEventId(domNode, VegaInternalRichTextEditorFlushChanges);
|
|
4395
|
-
if (nodeSubject) {
|
|
4396
|
-
ChangeManager.notify(nodeSubject, {});
|
|
4397
|
-
}
|
|
4398
|
-
}
|
|
4399
|
-
}
|
|
4400
|
-
}
|
|
4401
|
-
/**
|
|
4402
|
-
* @inheritDoc
|
|
4403
|
-
*/
|
|
4404
|
-
isNotEmpty() {
|
|
4405
|
-
return !!this.children.length;
|
|
4406
|
-
}
|
|
4407
|
-
/**
|
|
4408
|
-
* @inheritDoc
|
|
4409
|
-
*/
|
|
4410
|
-
getLastNode() {
|
|
4411
|
-
return this.children[0];
|
|
4412
|
-
}
|
|
4413
|
-
/**
|
|
4414
|
-
* The code block is selected or not.
|
|
4415
|
-
*
|
|
4416
|
-
* @returns {boolean} - The boolean result.
|
|
4417
|
-
*/
|
|
4418
|
-
isSelected() {
|
|
4419
|
-
return this.children[0].annotationMap.has(InternalAnnotationTypeEnum.SELECTION_RANGE);
|
|
4420
|
-
}
|
|
4421
|
-
}
|
|
4422
|
-
(() => {
|
|
4423
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.DELETE_CODE_BLOCK, RTECodeBlock.name, new CodeBlockRemoveSelfStrategy());
|
|
4424
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.DELETE_CHILDREN, RTECodeBlock.name, new RemoveChildrenStrategy());
|
|
4425
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.SWITCH_OUT_FROM_CODE_BLOCK, RTECodeBlock.name, new SwitchOutFromCodeBlockStrategy());
|
|
4426
|
-
ActionHandleStrategyRegistry.register(ModifyContentActionType.INSERT_IMAGE_TO_BLOCK, RTECodeBlock.name, new CodeBlockInsertImageStrategy());
|
|
4427
|
-
})();
|
|
4428
|
-
RTECodeBlock.CODE_BLOCK_PLACEHOLDER_CLASS_NAME = 'code-block-placeholder-element';
|
|
4429
|
-
|
|
4430
|
-
export { TextColorAnnotationAction as $, ActionHandleStrategyRegistry as A, BlockAnnotation as B, CustomStyleAnnotation as C, NodeTypeEnum as D, CommonAnnotation as E, AnnotationAction as F, ReplaceChildNodesAction as G, HorizontalAlignmentAnnotationAction as H, InsertChildrenAfterAction as I, SplitBlockWithNodeAction as J, BlockDeleteNodeContentStrategy as K, RemoveChildrenStrategy as L, ModifyContentAction as M, NodeAnnotation as N, RTE_TEXT_COLORS as O, RTE_DEFAULT_TEXT_COLOR as P, CodeLanguage as Q, RTEDTOClassManager$1 as R, SyncUpSelectionAction as S, TextStyleAnnotationAction as T, UpdateTextAction as U, VegaRTEPresetToolbarItems as V, LinkAnnotationAction as W, CommonAnnotationTypeEnum as X, UpdateCodeBlockAction as Y, ZERO_WIDTH_SPACE as Z, SelectionChangeAction as _, ActionHandlerInterceptorRegistry as a, RTECodeBlockNode as a0, BoldAnnotationAction as a1, ItalicAnnotationAction as a2, UnderlineAnnotationAction as a3, TextStyleAnnotation as a4, BoldAnnotation as a5, ClearFormattingAnnotationAction as a6, CodeAnnotationAction as a7, StrikethroughAnnotationAction as a8, IndentAnnotationAction as a9, RTETextNode as b, ModifyContentActionType as c, ActionHandleStrategy as d, RTETextBlock as e, RTEBlock as f, RTEAnnotationStyle as g, AppendChildrenAction as h, RTENode as i, InsertChildrenBeforeAction as j, InternalAnnotationTypeEnum as k, RemoveChildrenAction as l, BlockUpdateTextStyleStrategy as m, BlockUpdateHorizontalAlignmentStrategy as n, BlockInsertLineBreakStrategy as o, BlockInsertLineBreakWithBlocksStrategy as p, BlockSplitWithTextNodeStrategy as q, BlockReplaceNodesStrategy as r, stateEntityRenderingRegistry as s, BlockMergeNodesStrategy as t, BlockAnnotationTypeEnum as u, CustomClassAnnotation as v, CustomAttributeAnnotation as w, RTECodeBlock as x, NodeAnnotationTypeEnum as y, RTEDecoratorNode as z };
|