@heartlandone/vega 2.94.0 → 2.96.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-d05c3410.js → app-globals-38afea36.js} +7 -7
- package/dist/cjs/{child-nodes-event-prevent-slimmer-e67ee84c.js → child-nodes-event-prevent-slimmer-e0ac8467.js} +1 -1
- package/dist/cjs/{code-block-493c7ce7.js → code-block-4126dc3b.js} +1501 -55
- package/dist/cjs/{component-value-history-controller-slimmer.abstract-ab21fcbf.js → component-value-history-controller-slimmer.abstract-38ba956e.js} +2 -2
- package/dist/cjs/{content-state-fc34a814.js → content-state-50e8a03c.js} +142 -580
- package/dist/cjs/{element-appender-slimmer-1d6323c2.js → element-appender-slimmer-7773fdab.js} +115 -0
- package/dist/cjs/{event-emit-slimmer-d234a619.js → event-emit-slimmer-34aa195e.js} +1 -1
- package/dist/cjs/{image-annotation-action-7c4cd316.js → image-annotation-action-89363de8.js} +2 -2
- package/dist/cjs/{image-extension-30a7c10f.js → image-extension-c881c454.js} +2 -2
- package/dist/cjs/index.cjs.js +11 -11
- package/dist/cjs/{internal-vega-event-manager-13c4012b.js → internal-vega-event-manager-7003c84a.js} +10 -2
- package/dist/cjs/{link-extension-92a63cb7.js → link-extension-b7f99a52.js} +2 -2
- package/dist/cjs/loader.cjs.js +9 -9
- package/dist/cjs/{public-rules-9e1ea1d9.js → public-rules-72894208.js} +3 -3
- package/dist/cjs/{range-30219330.js → range-95d41dea.js} +1 -1
- package/dist/cjs/{rich-text-editor-required-rule-23bf7485.js → rich-text-editor-required-rule-4d6d2493.js} +1 -1
- package/dist/cjs/shared-backdrop-manager-71e54fdb.js +199 -0
- package/dist/cjs/{split-cell-operation-43752212.js → split-cell-operation-70be116d.js} +2 -2
- package/dist/cjs/{token-extension-ea891d54.js → token-extension-eb828948.js} +36 -12
- package/dist/cjs/vega-accordion.cjs.entry.js +2 -2
- package/dist/cjs/vega-app-footer.cjs.entry.js +2 -2
- package/dist/cjs/vega-app-header-button.cjs.entry.js +3 -3
- package/dist/cjs/vega-banner.cjs.entry.js +2 -2
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +3 -3
- package/dist/cjs/vega-button-circle.cjs.entry.js +3 -3
- package/dist/cjs/vega-button-group_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-button-link.cjs.entry.js +3 -3
- package/dist/cjs/vega-button.cjs.entry.js +3 -3
- package/dist/cjs/vega-calendar_5.cjs.entry.js +3 -3
- package/dist/cjs/vega-carousel.cjs.entry.js +2 -2
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-chip.cjs.entry.js +3 -3
- package/dist/cjs/vega-code-block.cjs.entry.js +6 -6
- package/dist/cjs/vega-color-picker.cjs.entry.js +2 -2
- package/dist/cjs/vega-color-swatch-picker.cjs.entry.js +3 -3
- package/dist/cjs/vega-color-swatch.cjs.entry.js +2 -2
- package/dist/cjs/vega-combo-box.cjs.entry.js +22 -4
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +4 -4
- package/dist/cjs/vega-dialog_2.cjs.entry.js +160 -70
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +41 -13
- package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
- package/dist/cjs/vega-field-label.cjs.entry.js +2 -2
- package/dist/cjs/vega-file-uploader.cjs.entry.js +2 -2
- package/dist/cjs/vega-form.cjs.entry.js +3 -3
- package/dist/cjs/vega-image-uploader.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-numeric.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-passcode.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-phone-number.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-range.cjs.entry.js +3 -3
- package/dist/cjs/vega-input-select.cjs.entry.js +54 -5
- package/dist/cjs/vega-input.cjs.entry.js +2 -2
- package/dist/cjs/vega-item-toggle.cjs.entry.js +2 -2
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +32 -193
- package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +2 -2
- package/dist/cjs/vega-pagination.cjs.entry.js +3 -3
- package/dist/cjs/vega-popover_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +13 -3
- package/dist/cjs/vega-radio_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-rich-text-content.cjs.entry.js +58 -9
- package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +611 -93
- package/dist/cjs/vega-rich-text-find-replace-panel.cjs.entry.js +2 -2
- package/dist/cjs/vega-rich-text-special-characters-panel.cjs.entry.js +2 -2
- package/dist/cjs/vega-rich-text-table-properties_3.cjs.entry.js +5 -5
- package/dist/cjs/vega-section-title.cjs.entry.js +896 -14
- package/dist/cjs/vega-segment-control.cjs.entry.js +2 -2
- package/dist/cjs/vega-selection-chip_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-sidenav_3.cjs.entry.js +2 -2
- package/dist/cjs/vega-signature-capture.cjs.entry.js +2 -2
- package/dist/cjs/vega-stepper.cjs.entry.js +3 -3
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +3 -3
- package/dist/cjs/vega-table_11.cjs.entry.js +3 -3
- package/dist/cjs/vega-textarea.cjs.entry.js +3 -3
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +4 -4
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +2 -2
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +1 -1
- package/dist/cjs/vega.cjs.js +9 -9
- package/dist/collection/components/vega-combo-box/slimmers/renderers/vega-combo-box-dropdown-renderer.js +5 -1
- package/dist/collection/components/vega-combo-box/vega-combo-box.js +52 -1
- package/dist/collection/components/vega-dialog/vega-dialog.js +1 -1
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-render-mode-controller.js +7 -6
- package/dist/collection/components/vega-dropdown/vega-dropdown.js +36 -8
- package/dist/collection/components/vega-input-select/slimmers/controllers/vega-input-select-dropdown-controller.js +11 -1
- package/dist/collection/components/vega-input-select/slimmers/controllers/vega-input-select-items-slot-controler.js +23 -2
- package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.js +4 -0
- package/dist/collection/components/vega-input-select/vega-input-select.js +53 -2
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-backdrop-manager.js +141 -0
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.js +10 -17
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-z-index-controller.js +2 -2
- package/dist/collection/components/vega-modal/slimmers/renderers/vega-modal-renderer.js +3 -2
- package/dist/collection/components/vega-modal/vega-modal.js +77 -8
- package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-steps-controller.js +7 -0
- package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.js +6 -0
- package/dist/collection/components/vega-rich-text-content/vega-rich-text-content.css +4 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-node-content-strategy.js +29 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-text-or-decorator-node-strategy.js +10 -1
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-transform-to-list-strategy.js +8 -3
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-annotation-strategy.abstract.js +60 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-item-replace-nest-list-strategy.js +36 -4
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-items-strategy.abstract.js +27 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-nest-items-strategy.js +74 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-remove-list-item-strategy.js +81 -1
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-selection.js +30 -0
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-to-list-strategy.js +160 -9
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-to-paragraph-strategy.js +376 -10
- package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-unnest-items-strategy.js +104 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.js +2 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/nest-list-items-action.js +12 -0
- package/dist/collection/components/vega-rich-text-editor/dto/actions/unnest-list-items-action.js +12 -0
- package/dist/collection/components/vega-rich-text-editor/dto/annotations/list-annotation.js +12 -0
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-block.js +10 -1
- package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-item-block.js +11 -3
- package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +7 -1
- package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-block-filter-styles-strategy.js +8 -4
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/list-block-renderer.js +34 -1
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/list-item-block-renderer.js +20 -3
- package/dist/collection/components/vega-rich-text-editor/extensions/table/annotation-handler/table-annotation-handler-base.js +25 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/li-to-rte-list-item-block-strategy.js +2 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/abstract-delete-content-handler.js +29 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-numbers-toolbar-button-slimmer.js +30 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/abstract-list-keyboard-handler.js +204 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/list-shift-tab-outdent-handler.js +42 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/list-tab-indent-handler.js +34 -0
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/list-keyboard-slimmer.js +180 -0
- package/dist/collection/components/vega-section-title/slimmers/a11y-tree/build-section-title-a11y-tree.js +54 -0
- package/dist/collection/components/vega-section-title/slimmers/renderers/vega-section-title-renderer.js +4 -4
- package/dist/collection/components/vega-section-title/vega-section-title.js +18 -2
- package/dist/collection/helpers/a11y-tree/a11y-node-dto.js +210 -0
- package/dist/collection/helpers/a11y-tree/a11y-tree-applier.js +189 -0
- package/dist/collection/helpers/a11y-tree/a11y-tree.types.js +48 -0
- package/dist/collection/helpers/a11y-tree/strategies/baseline-strategy.js +78 -0
- package/dist/collection/helpers/a11y-tree/strategies/firefox-nvda-strategy.js +56 -0
- package/dist/collection/helpers/a11y-tree/strategies/webkit-voiceover-strategy.js +140 -0
- package/dist/collection/helpers/a11y-tree/strategy-resolver.js +172 -0
- package/dist/collection/helpers/backdrop/shared-backdrop-manager.js +32 -1
- package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +11 -3
- package/dist/collection/helpers/slimmers/a11y-tree-slimmer.js +54 -0
- package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +29 -0
- package/dist/collection/helpers/slimmers/element-appender/visibility-modifiers/clip-on-scroll-modifier.js +70 -0
- package/dist/collection/helpers/slimmers/element-appender/visibility-modifiers/visibility-modifier.interface.js +1 -0
- package/dist/collection/helpers/ui/element-appender.js +16 -0
- package/dist/esm/{app-globals-f2336686.js → app-globals-d7b651c1.js} +7 -7
- package/dist/esm/{child-nodes-event-prevent-slimmer-96c14f5a.js → child-nodes-event-prevent-slimmer-82626871.js} +1 -1
- package/dist/esm/{code-block-e12588fe.js → code-block-0a88b481.js} +1495 -51
- package/dist/esm/{component-value-history-controller-slimmer.abstract-4e8eb313.js → component-value-history-controller-slimmer.abstract-6846edfa.js} +2 -2
- package/dist/esm/{content-state-8032467a.js → content-state-79ca99e5.js} +105 -541
- package/dist/esm/{element-appender-slimmer-7fcb944b.js → element-appender-slimmer-73ad10ae.js} +115 -0
- package/dist/esm/{event-emit-slimmer-db4a82e0.js → event-emit-slimmer-2452278f.js} +1 -1
- package/dist/esm/{image-annotation-action-b3b6c308.js → image-annotation-action-bb299ef1.js} +3 -3
- package/dist/esm/{image-extension-b6c7e4a7.js → image-extension-48a96f98.js} +2 -2
- package/dist/esm/index.js +10 -10
- package/dist/esm/{internal-vega-event-manager-48690e5b.js → internal-vega-event-manager-2ecc9186.js} +11 -3
- package/dist/esm/{link-extension-97fcb8fb.js → link-extension-09534514.js} +2 -2
- package/dist/esm/loader.js +10 -10
- package/dist/esm/{public-rules-c06f0d2a.js → public-rules-5eb03ef0.js} +3 -3
- package/dist/esm/{range-e999837f.js → range-d4deb7df.js} +1 -1
- package/dist/esm/{rich-text-editor-required-rule-71f8ee98.js → rich-text-editor-required-rule-5bbbce23.js} +1 -1
- package/dist/esm/shared-backdrop-manager-a7c63838.js +197 -0
- package/dist/esm/{split-cell-operation-359f8082.js → split-cell-operation-7f3058ad.js} +2 -2
- package/dist/esm/{token-extension-9896879b.js → token-extension-40c32bcc.js} +32 -8
- package/dist/esm/vega-accordion.entry.js +3 -3
- package/dist/esm/vega-app-footer.entry.js +3 -3
- package/dist/esm/vega-app-header-button.entry.js +4 -4
- package/dist/esm/vega-banner.entry.js +3 -3
- package/dist/esm/vega-breadcrumb.entry.js +4 -4
- package/dist/esm/vega-button-circle.entry.js +4 -4
- package/dist/esm/vega-button-group_2.entry.js +4 -4
- package/dist/esm/vega-button-link.entry.js +4 -4
- package/dist/esm/vega-button.entry.js +4 -4
- package/dist/esm/vega-calendar_5.entry.js +4 -4
- package/dist/esm/vega-carousel.entry.js +3 -3
- package/dist/esm/vega-checkbox_2.entry.js +4 -4
- package/dist/esm/vega-chip.entry.js +4 -4
- package/dist/esm/vega-code-block.entry.js +7 -7
- package/dist/esm/vega-color-picker.entry.js +3 -3
- package/dist/esm/vega-color-swatch-picker.entry.js +4 -4
- package/dist/esm/vega-color-swatch.entry.js +3 -3
- package/dist/esm/vega-combo-box.entry.js +23 -5
- package/dist/esm/vega-date-picker_2.entry.js +5 -5
- package/dist/esm/vega-dialog_2.entry.js +161 -71
- package/dist/esm/vega-dropdown_5.entry.js +42 -14
- package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
- package/dist/esm/{vega-event-id-270fe47e.js → vega-event-id-f55f6977.js} +1 -1
- package/dist/esm/vega-field-label.entry.js +3 -3
- package/dist/esm/vega-file-uploader.entry.js +3 -3
- package/dist/esm/vega-form.entry.js +4 -4
- package/dist/esm/vega-image-uploader.entry.js +4 -4
- package/dist/esm/vega-input-credit-card.entry.js +4 -4
- package/dist/esm/vega-input-numeric.entry.js +4 -4
- package/dist/esm/vega-input-passcode.entry.js +4 -4
- package/dist/esm/vega-input-phone-number.entry.js +4 -4
- package/dist/esm/vega-input-range.entry.js +4 -4
- package/dist/esm/vega-input-select.entry.js +55 -6
- package/dist/esm/vega-input.entry.js +3 -3
- package/dist/esm/vega-item-toggle.entry.js +3 -3
- package/dist/esm/vega-left-nav_5.entry.js +32 -193
- package/dist/esm/vega-page-notification_2.entry.js +1 -1
- package/dist/esm/vega-pagination-page-selector-mobile.entry.js +3 -3
- package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +1 -1
- package/dist/esm/vega-pagination.entry.js +4 -4
- package/dist/esm/vega-popover_2.entry.js +4 -4
- package/dist/esm/vega-progress-tracker_2.entry.js +14 -4
- package/dist/esm/vega-radio_2.entry.js +4 -4
- package/dist/esm/vega-rich-text-content.entry.js +59 -10
- package/dist/esm/vega-rich-text-editor_4.entry.js +608 -90
- package/dist/esm/vega-rich-text-find-replace-panel.entry.js +3 -3
- package/dist/esm/vega-rich-text-special-characters-panel.entry.js +3 -3
- package/dist/esm/vega-rich-text-table-properties_3.entry.js +6 -6
- package/dist/esm/vega-section-title.entry.js +897 -15
- package/dist/esm/vega-segment-control.entry.js +3 -3
- package/dist/esm/vega-selection-chip_2.entry.js +4 -4
- package/dist/esm/vega-selection-tile_2.entry.js +4 -4
- package/dist/esm/vega-sidenav_3.entry.js +3 -3
- package/dist/esm/vega-signature-capture.entry.js +3 -3
- package/dist/esm/vega-stepper.entry.js +4 -4
- package/dist/esm/vega-tab-group_2.entry.js +4 -4
- package/dist/esm/vega-table_11.entry.js +4 -4
- package/dist/esm/vega-textarea.entry.js +4 -4
- package/dist/esm/vega-time-picker_2.entry.js +5 -5
- package/dist/esm/vega-toggle-switch.entry.js +3 -3
- package/dist/esm/vega-tooltip_2.entry.js +1 -1
- package/dist/esm/vega.js +10 -10
- package/dist/sri/vega-sri-manifest.json +272 -268
- package/dist/types/components/vega-combo-box/slimmers/renderers/vega-combo-box-dropdown-renderer.d.ts +1 -0
- package/dist/types/components/vega-combo-box/vega-combo-box.d.ts +21 -0
- package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-render-mode-controller.d.ts +2 -1
- package/dist/types/components/vega-dropdown/types.d.ts +2 -2
- package/dist/types/components/vega-dropdown/vega-dropdown.d.ts +36 -9
- package/dist/types/components/vega-input-select/slimmers/controllers/vega-input-select-dropdown-controller.d.ts +2 -0
- package/dist/types/components/vega-input-select/slimmers/controllers/vega-input-select-items-slot-controler.d.ts +10 -0
- package/dist/types/components/vega-input-select/types.d.ts +1 -0
- package/dist/types/components/vega-input-select/vega-input-select.d.ts +21 -0
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-backdrop-manager.d.ts +66 -0
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.d.ts +1 -5
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-z-index-controller.d.ts +1 -1
- package/dist/types/components/vega-modal/slimmers/renderers/vega-modal-renderer.d.ts +1 -1
- package/dist/types/components/vega-modal/vega-modal.d.ts +34 -6
- package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-steps-controller.d.ts +2 -0
- package/dist/types/components/vega-progress-tracker/vega-progress-tracker.d.ts +1 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-annotation-strategy.abstract.d.ts +36 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-item-replace-nest-list-strategy.d.ts +14 -2
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-items-strategy.abstract.d.ts +22 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-nest-items-strategy.d.ts +21 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-remove-list-item-strategy.d.ts +14 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-selection.d.ts +15 -0
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-to-list-strategy.d.ts +30 -3
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-transform-to-paragraph-strategy.d.ts +99 -3
- package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/list-unnest-items-strategy.d.ts +22 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.d.ts +2 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/nest-list-items-action.d.ts +11 -0
- package/dist/types/components/vega-rich-text-editor/dto/actions/unnest-list-items-action.d.ts +11 -0
- package/dist/types/components/vega-rich-text-editor/dto/annotations/list-annotation.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/dto/blocks/list-block.d.ts +6 -1
- package/dist/types/components/vega-rich-text-editor/dto/blocks/list-item-block.d.ts +5 -1
- package/dist/types/components/vega-rich-text-editor/dto/content-state.d.ts +2 -2
- package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/list-block-renderer.d.ts +2 -0
- package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/list-item-block-renderer.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/extensions/table/annotation-handler/table-annotation-handler-base.d.ts +18 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-numbers-toolbar-button-slimmer.d.ts +8 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/abstract-list-keyboard-handler.d.ts +99 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/list-shift-tab-outdent-handler.d.ts +15 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/helper/list-tab-indent-handler.d.ts +15 -0
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/list-keyboard-slimmer.d.ts +73 -0
- package/dist/types/components/vega-section-title/slimmers/a11y-tree/build-section-title-a11y-tree.d.ts +41 -0
- package/dist/types/components/vega-section-title/vega-section-title.d.ts +9 -0
- package/dist/types/components.d.ts +42 -8
- package/dist/types/helpers/a11y-tree/a11y-node-dto.d.ts +173 -0
- package/dist/types/helpers/a11y-tree/a11y-tree-applier.d.ts +28 -0
- package/dist/types/helpers/a11y-tree/a11y-tree.types.d.ts +137 -0
- package/dist/types/helpers/a11y-tree/strategies/baseline-strategy.d.ts +18 -0
- package/dist/types/helpers/a11y-tree/strategies/firefox-nvda-strategy.d.ts +16 -0
- package/dist/types/helpers/a11y-tree/strategies/webkit-voiceover-strategy.d.ts +23 -0
- package/dist/types/helpers/a11y-tree/strategy-resolver.d.ts +59 -0
- package/dist/types/helpers/backdrop/shared-backdrop-manager.d.ts +16 -0
- package/dist/types/helpers/slimmers/a11y-tree-slimmer.d.ts +49 -0
- package/dist/types/helpers/slimmers/element-appender/element-appender-slimmer.d.ts +9 -0
- package/dist/types/helpers/slimmers/element-appender/visibility-modifiers/clip-on-scroll-modifier.d.ts +37 -0
- package/dist/types/helpers/slimmers/element-appender/visibility-modifiers/visibility-modifier.interface.d.ts +56 -0
- package/dist/types/helpers/ui/element-appender.d.ts +7 -0
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/{p-3e8baeac.entry.js → p-0512308f.entry.js} +1 -1
- package/dist/vega/{p-46fe3154.entry.js → p-1d8312d3.entry.js} +1 -1
- package/dist/vega/{p-f5d7b89f.entry.js → p-1dfbc542.entry.js} +1 -1
- package/dist/vega/{p-fbd3be00.entry.js → p-200c8914.entry.js} +1 -1
- package/dist/vega/{p-e235020b.entry.js → p-22cc174e.entry.js} +1 -1
- package/dist/vega/{p-b1ff70bf.js → p-2c737fc8.js} +1 -1
- package/dist/vega/{p-782eb312.entry.js → p-2d77ae73.entry.js} +1 -1
- package/dist/vega/{p-cb90163a.entry.js → p-2d8d4d5b.entry.js} +1 -1
- package/dist/vega/{p-f651df3b.entry.js → p-2df5d59b.entry.js} +1 -1
- package/dist/vega/p-31216140.js +1 -0
- package/dist/vega/{p-f7e459cd.js → p-312d8205.js} +1 -1
- package/dist/vega/{p-a7209700.js → p-3345d903.js} +1 -1
- package/dist/vega/{p-44439ecc.entry.js → p-36d2df7a.entry.js} +1 -1
- package/dist/vega/{p-02355de8.js → p-3c23ec90.js} +1 -1
- package/dist/vega/{p-2bf17505.entry.js → p-3d6f761a.entry.js} +1 -1
- package/dist/vega/p-4151f53a.entry.js +1 -0
- package/dist/vega/{p-a057285e.entry.js → p-49e1cf4d.entry.js} +1 -1
- package/dist/vega/{p-698fbd73.js → p-5447a8e8.js} +1 -1
- package/dist/vega/p-55e0014a.js +3 -0
- package/dist/vega/{p-45e8424a.entry.js → p-56d19601.entry.js} +1 -1
- package/dist/vega/{p-addbca58.entry.js → p-5924adae.entry.js} +1 -1
- package/dist/vega/{p-9dca874d.entry.js → p-5e4517eb.entry.js} +1 -1
- package/dist/vega/p-5f377954.js +1 -1
- package/dist/vega/p-65fee02f.entry.js +1 -0
- package/dist/vega/{p-140616fe.js → p-66647244.js} +1 -1
- package/dist/vega/{p-62d6e063.entry.js → p-6680ba17.entry.js} +1 -1
- package/dist/vega/p-6a51d720.js +1 -0
- package/dist/vega/{p-fe24b459.js → p-6c7b6d45.js} +1 -1
- package/dist/vega/{p-288d65ad.entry.js → p-6fcec7c7.entry.js} +1 -1
- package/dist/vega/{p-d08ffdf1.entry.js → p-74f86ff9.entry.js} +1 -1
- package/dist/vega/{p-6ad7144a.entry.js → p-775ecfad.entry.js} +1 -1
- package/dist/vega/{p-6f70a10f.entry.js → p-7950f3e2.entry.js} +1 -1
- package/dist/vega/{p-f246f125.entry.js → p-80b7945a.entry.js} +1 -1
- package/dist/vega/p-8354cff0.entry.js +1 -0
- package/dist/vega/{p-5db61a12.entry.js → p-841b3281.entry.js} +1 -1
- package/dist/vega/{p-579cdeae.js → p-84b7a775.js} +1 -1
- package/dist/vega/p-87e5cb56.entry.js +1 -0
- package/dist/vega/p-8c30a60d.js +1 -0
- package/dist/vega/{p-f8a29127.entry.js → p-8d96f0e8.entry.js} +1 -1
- package/dist/vega/{p-95913e3c.entry.js → p-91303402.entry.js} +1 -1
- package/dist/vega/p-96da7d30.entry.js +1 -0
- package/dist/vega/{p-51b68d25.js → p-9d3f69cb.js} +1 -1
- package/dist/vega/{p-ed103a1a.entry.js → p-9d96d83f.entry.js} +1 -1
- package/dist/vega/{p-6dfe2407.js → p-9f11b579.js} +1 -1
- package/dist/vega/p-9f201152.entry.js +1 -0
- package/dist/vega/{p-48ee3e24.entry.js → p-a775825e.entry.js} +1 -1
- package/dist/vega/{p-9d18ba7f.entry.js → p-acaff62d.entry.js} +1 -1
- package/dist/vega/{p-b8f8e480.entry.js → p-ae146458.entry.js} +1 -1
- package/dist/vega/{p-e8ee70c5.entry.js → p-b3a2ce06.entry.js} +1 -1
- package/dist/vega/{p-5107277d.entry.js → p-b4c26035.entry.js} +1 -1
- package/dist/vega/p-b63319e9.entry.js +1 -0
- package/dist/vega/{p-c9daabe1.entry.js → p-b660f38c.entry.js} +1 -1
- package/dist/vega/{p-8c083255.entry.js → p-b8c13ac9.entry.js} +1 -1
- package/dist/vega/p-b8ffa42f.entry.js +1 -0
- package/dist/vega/{p-7b57a845.entry.js → p-b9e72de2.entry.js} +1 -1
- package/dist/vega/{p-0af32f31.entry.js → p-bb60e381.entry.js} +1 -1
- package/dist/vega/p-bbad318e.entry.js +1 -0
- package/dist/vega/p-c0e42c03.entry.js +1 -0
- package/dist/vega/{p-c67b9aba.entry.js → p-c41f5684.entry.js} +1 -1
- package/dist/vega/{p-4fe40b76.js → p-c4564904.js} +1 -1
- package/dist/vega/{p-341a6b32.entry.js → p-c54b5a8f.entry.js} +1 -1
- package/dist/vega/p-cd1e976c.entry.js +1 -0
- package/dist/vega/p-d9158512.js +1 -0
- package/dist/vega/{p-2dc5edd0.entry.js → p-db11134b.entry.js} +1 -1
- package/dist/vega/{p-14559974.entry.js → p-e1737c8e.entry.js} +1 -1
- package/dist/vega/{p-0b311599.entry.js → p-e1b57e8f.entry.js} +1 -1
- package/dist/vega/{p-9f38448c.entry.js → p-e5ff77f7.entry.js} +1 -1
- package/dist/vega/p-e62d41ee.js +1 -0
- package/dist/vega/{p-6f01a71a.entry.js → p-ebe32b25.entry.js} +1 -1
- package/dist/vega/p-ec162599.entry.js +1 -0
- package/dist/vega/{p-9f7154d2.js → p-ec5dee32.js} +1 -1
- package/dist/vega/{p-d3a36d19.entry.js → p-ec64cc59.entry.js} +1 -1
- package/dist/vega/p-f29d9707.entry.js +1 -0
- package/dist/vega/{p-5df2d6a1.entry.js → p-f78944d7.entry.js} +1 -1
- package/dist/vega/{p-c9c6daa6.entry.js → p-f9bfee81.entry.js} +1 -1
- package/dist/vega/{p-26c7fe8b.entry.js → p-fa65956c.entry.js} +1 -1
- package/dist/vega/{p-f96d0503.entry.js → p-fc7e4c8a.entry.js} +1 -1
- package/dist/vega/{p-b39d4a88.entry.js → p-fd23c365.entry.js} +1 -1
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +3 -2
- package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-backdrop-controller.js +0 -73
- package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-backdrop-controller.d.ts +0 -27
- package/dist/vega/p-0b9c7c79.entry.js +0 -1
- package/dist/vega/p-0be4df0a.js +0 -1
- package/dist/vega/p-2364be92.entry.js +0 -1
- package/dist/vega/p-270697c0.entry.js +0 -1
- package/dist/vega/p-282b37cb.js +0 -1
- package/dist/vega/p-38c9d782.js +0 -1
- package/dist/vega/p-52c6a399.entry.js +0 -1
- package/dist/vega/p-73f2c3c0.entry.js +0 -1
- package/dist/vega/p-762ea523.entry.js +0 -1
- package/dist/vega/p-7a88a3d3.entry.js +0 -1
- package/dist/vega/p-83a16285.entry.js +0 -1
- package/dist/vega/p-91287214.entry.js +0 -1
- package/dist/vega/p-c66d2a1e.js +0 -1
- package/dist/vega/p-cad5222a.entry.js +0 -1
- package/dist/vega/p-d25ca0c3.entry.js +0 -1
- package/dist/vega/p-f05a193e.entry.js +0 -1
- package/dist/vega/p-f4da615a.js +0 -3
- package/dist/vega/p-f906a7bc.entry.js +0 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { MapToComponentField, MapToComponentMethod, VegaSlimmer } from 'vega-slimmer/core';
|
|
8
|
+
import { RTETextNode } from '../../../../dto/nodes/text-node';
|
|
9
|
+
import { ListTabIndentHandler } from './helper/list-tab-indent-handler';
|
|
10
|
+
import { ListShiftTabOutdentHandler } from './helper/list-shift-tab-outdent-handler';
|
|
11
|
+
const LIST_TOOLBAR_ITEMS = ['bullets', 'numbers', 'bulletsNumbers'];
|
|
12
|
+
/**
|
|
13
|
+
* Handles list keyboard shortcuts (Tab/Shift+Tab) for list tooling.
|
|
14
|
+
*/
|
|
15
|
+
export class ListKeyboardSlimmer extends VegaSlimmer {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.isKeyboardListenerBound = false;
|
|
19
|
+
this.listTabIndentHandler = new ListTabIndentHandler();
|
|
20
|
+
this.listShiftTabOutdentHandler = new ListShiftTabOutdentHandler();
|
|
21
|
+
// Keyboard action execution
|
|
22
|
+
/**
|
|
23
|
+
* Handle Tab and Shift+Tab list keyboard interactions.
|
|
24
|
+
*
|
|
25
|
+
* @param {KeyboardEvent} e - Keyboard event to process.
|
|
26
|
+
* @returns {void}
|
|
27
|
+
*/
|
|
28
|
+
this.handleListKeyboardAction = (e) => {
|
|
29
|
+
if (e.key !== 'Tab') {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (this.hasNonShiftModifierForTab(e)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const selectedBlocks = this.selectionController.getSelectedBlocks();
|
|
36
|
+
const currentRange = this.selectionController.getCurrentRange().clone();
|
|
37
|
+
if (e.shiftKey) {
|
|
38
|
+
const selectionBoundaries = this.listShiftTabOutdentHandler.execute(selectedBlocks);
|
|
39
|
+
if (selectionBoundaries) {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
void this.valueController.flushChanges(this.value).then(() => {
|
|
42
|
+
this.restoreListSelection(selectionBoundaries, currentRange.startNode instanceof RTETextNode ? currentRange.startNode : null, currentRange.endNode instanceof RTETextNode ? currentRange.endNode : null, currentRange.startOffset, currentRange.endOffset);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const selectionBoundaries = this.listTabIndentHandler.execute(selectedBlocks);
|
|
48
|
+
if (!selectionBoundaries) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
void this.valueController.flushChanges(this.value).then(() => {
|
|
53
|
+
this.restoreListSelection(selectionBoundaries, currentRange.startNode instanceof RTETextNode ? currentRange.startNode : null, currentRange.endNode instanceof RTETextNode ? currentRange.endNode : null, currentRange.startOffset, currentRange.endOffset);
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Listener lifecycle and gating
|
|
58
|
+
/**
|
|
59
|
+
* @inheritDoc
|
|
60
|
+
*/
|
|
61
|
+
disconnectedCallback() {
|
|
62
|
+
this.removeListKeyboardListener();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @inheritDoc
|
|
66
|
+
*/
|
|
67
|
+
componentDidLoad() {
|
|
68
|
+
this.syncListKeyboardListener();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Re-sync keyboard listener when toolbarItems prop changes at runtime,
|
|
72
|
+
* ensuring list shortcuts are bound/unbound as tools are added/removed.
|
|
73
|
+
*/
|
|
74
|
+
watchToolbarItems() {
|
|
75
|
+
this.syncListKeyboardListener();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Synchronize the DOM keydown listener with the configured toolbar items.
|
|
79
|
+
*/
|
|
80
|
+
syncListKeyboardListener() {
|
|
81
|
+
if (this.hasListToolbarConfigured()) {
|
|
82
|
+
this.addListKeyboardListener();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this.removeListKeyboardListener();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Determine whether any list keyboard controls are enabled in the toolbar.
|
|
89
|
+
*
|
|
90
|
+
* @returns {boolean} True when any list toolbar item is configured.
|
|
91
|
+
*/
|
|
92
|
+
hasListToolbarConfigured() {
|
|
93
|
+
const flatToolbarItems = this.toolbarItems.flat();
|
|
94
|
+
return flatToolbarItems.some((item) => LIST_TOOLBAR_ITEMS.includes(item));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Attach the keydown listener to the current editable element when available.
|
|
98
|
+
* Handles element ref changes by rebinding when the target element differs.
|
|
99
|
+
*/
|
|
100
|
+
addListKeyboardListener() {
|
|
101
|
+
const editableElement = this.vegaRichTextEditorRenderer.getRTEEditableElementRef();
|
|
102
|
+
if (this.isKeyboardListenerBound && this.boundEditableElement === editableElement) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (this.isKeyboardListenerBound) {
|
|
106
|
+
this.removeListKeyboardListener();
|
|
107
|
+
}
|
|
108
|
+
if (!editableElement) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
editableElement.addEventListener('keydown', this.handleListKeyboardAction);
|
|
112
|
+
this.boundEditableElement = editableElement;
|
|
113
|
+
this.isKeyboardListenerBound = true;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Detach the keydown listener from the previously bound editable element.
|
|
117
|
+
*/
|
|
118
|
+
removeListKeyboardListener() {
|
|
119
|
+
if (!this.isKeyboardListenerBound || !this.boundEditableElement) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.boundEditableElement.removeEventListener('keydown', this.handleListKeyboardAction);
|
|
123
|
+
this.boundEditableElement = null;
|
|
124
|
+
this.isKeyboardListenerBound = false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check whether the Tab event includes modifiers other than Shift.
|
|
128
|
+
*
|
|
129
|
+
* @param {KeyboardEvent} e - Keyboard event to inspect.
|
|
130
|
+
* @returns {boolean} True when non-shift modifier keys are pressed.
|
|
131
|
+
*/
|
|
132
|
+
hasNonShiftModifierForTab(e) {
|
|
133
|
+
return e.altKey || e.ctrlKey || e.metaKey || e.getModifierState('AltGraph');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Restore the logical selection after a list keyboard action completes.
|
|
137
|
+
*
|
|
138
|
+
* @param {Array<Nullable<[RTETextNode, RTETextNode]>>} selectionBoundaries - Boundaries produced by the handler.
|
|
139
|
+
* @param {Nullable<RTETextNode>} preferredStartNode - Preferred start node from prior selection.
|
|
140
|
+
* @param {Nullable<RTETextNode>} preferredEndNode - Preferred end node from prior selection.
|
|
141
|
+
* @param {number} startOffset - Preferred start offset.
|
|
142
|
+
* @param {number} endOffset - Preferred end offset.
|
|
143
|
+
* @returns {void}
|
|
144
|
+
*/
|
|
145
|
+
restoreListSelection(selectionBoundaries, preferredStartNode, preferredEndNode, startOffset, endOffset) {
|
|
146
|
+
var _a, _b, _c, _d;
|
|
147
|
+
const firstBoundary = (_a = selectionBoundaries.find(Boolean)) !== null && _a !== void 0 ? _a : null;
|
|
148
|
+
const lastBoundary = (_b = [...selectionBoundaries].reverse().find(Boolean)) !== null && _b !== void 0 ? _b : null;
|
|
149
|
+
const firstNode = (_c = preferredStartNode !== null && preferredStartNode !== void 0 ? preferredStartNode : firstBoundary === null || firstBoundary === void 0 ? void 0 : firstBoundary[0]) !== null && _c !== void 0 ? _c : null;
|
|
150
|
+
const lastNode = (_d = preferredEndNode !== null && preferredEndNode !== void 0 ? preferredEndNode : lastBoundary === null || lastBoundary === void 0 ? void 0 : lastBoundary[1]) !== null && _d !== void 0 ? _d : null;
|
|
151
|
+
if (!firstNode || !lastNode) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.selectionController.enqueueSelectionRangeFutureState(firstNode, Math.min(startOffset, firstNode.getRangeEndOffset()), lastNode, Math.min(endOffset, lastNode.getRangeEndOffset()), true);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
__decorate([
|
|
158
|
+
MapToComponentField()
|
|
159
|
+
], ListKeyboardSlimmer.prototype, "selectionController", void 0);
|
|
160
|
+
__decorate([
|
|
161
|
+
MapToComponentField()
|
|
162
|
+
], ListKeyboardSlimmer.prototype, "valueController", void 0);
|
|
163
|
+
__decorate([
|
|
164
|
+
MapToComponentField()
|
|
165
|
+
], ListKeyboardSlimmer.prototype, "value", void 0);
|
|
166
|
+
__decorate([
|
|
167
|
+
MapToComponentField()
|
|
168
|
+
], ListKeyboardSlimmer.prototype, "toolbarItems", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
MapToComponentField()
|
|
171
|
+
], ListKeyboardSlimmer.prototype, "vegaRichTextEditorRenderer", void 0);
|
|
172
|
+
__decorate([
|
|
173
|
+
MapToComponentMethod('disconnectedCallback')
|
|
174
|
+
], ListKeyboardSlimmer.prototype, "disconnectedCallback", null);
|
|
175
|
+
__decorate([
|
|
176
|
+
MapToComponentMethod('componentDidLoad')
|
|
177
|
+
], ListKeyboardSlimmer.prototype, "componentDidLoad", null);
|
|
178
|
+
__decorate([
|
|
179
|
+
MapToComponentMethod('watchToolbarItems')
|
|
180
|
+
], ListKeyboardSlimmer.prototype, "watchToolbarItems", null);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { A11yHeadingNode, A11yIconNode } from '../../../../helpers/a11y-tree/a11y-node-dto';
|
|
2
|
+
/**
|
|
3
|
+
* Build the semantic A11y Tree for a `vega-section-title` instance.
|
|
4
|
+
*
|
|
5
|
+
* The structure uses a presentation wrapper so the container is transparent to
|
|
6
|
+
* assistive technology — the heading is the semantic anchor:
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* presentation "st-root" (role=none — AT-transparent wrapper)
|
|
10
|
+
* ├── heading "st-heading" (titleText, level=2 by default)
|
|
11
|
+
* └── icon "st-icon" (decorative — only when an icon prop is set)
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Description text is not wired into the A11y tree. It is exposed as plain
|
|
15
|
+
* visible text in the component's shadow DOM, read by screen readers via normal
|
|
16
|
+
* linear traversal. This avoids three VoiceOver regressions introduced when the
|
|
17
|
+
* container carried `role="group"` with `aria-label` + `aria-describedby`:
|
|
18
|
+
*
|
|
19
|
+
* - Bug 1 (Safari): webkit folded the description into the heading `aria-label`,
|
|
20
|
+
* so focusing the H2 announced both title AND description together.
|
|
21
|
+
* - Bug 2 (Chrome, no description): `role="group"` created an extra navigation
|
|
22
|
+
* boundary and announced the title twice (group label + heading).
|
|
23
|
+
* - Bug 3 (Chrome, with description): description read twice — once via the
|
|
24
|
+
* hidden `aria-describedby` span on the group, once via the visible div.
|
|
25
|
+
*
|
|
26
|
+
* **No inline ARIA / no double projection**: this function must NOT set
|
|
27
|
+
* `aria-*` or `role` attributes directly on the component. The A11y Tree
|
|
28
|
+
* slimmer (`A11yTreeSlimmer`) calls `applyA11yTree()` on every render to
|
|
29
|
+
* project the semantic intent through the chosen strategy.
|
|
30
|
+
*
|
|
31
|
+
* @param {BuildArgs} args - Section-title fields used to author the semantic tree.
|
|
32
|
+
* @returns {A11yNode} The semantic A11y Tree root for the section title.
|
|
33
|
+
*/
|
|
34
|
+
export function buildSectionTitleA11yTree(args) {
|
|
35
|
+
var _a;
|
|
36
|
+
const children = [];
|
|
37
|
+
// Only add heading if titleText is provided; avoid empty heading elements
|
|
38
|
+
// that cause cross-browser inconsistencies (Chrome skips them, Firefox may
|
|
39
|
+
// announce an empty group). The A11y Tree projection (via strategy) onto
|
|
40
|
+
// shadow DOM handles all ARIA semantics; no host-level ARIA is used.
|
|
41
|
+
if (args.titleText) {
|
|
42
|
+
children.push(new A11yHeadingNode('st-heading', {
|
|
43
|
+
level: (_a = args.headingLevel) !== null && _a !== void 0 ? _a : 2,
|
|
44
|
+
}).toA11yNode());
|
|
45
|
+
}
|
|
46
|
+
if (args.icon) {
|
|
47
|
+
children.push(new A11yIconNode('st-icon').toA11yNode());
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
id: 'st-root',
|
|
51
|
+
role: 'none',
|
|
52
|
+
children,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -8,13 +8,13 @@ import { h } from '@stencil/core';
|
|
|
8
8
|
import { MapToComponentField, VegaSlimmer } from 'vega-slimmer/core';
|
|
9
9
|
export class VegaSectionTitleRenderer extends VegaSlimmer {
|
|
10
10
|
render() {
|
|
11
|
-
return (h("vega-flex", { "
|
|
11
|
+
return (h("vega-flex", { "data-a11y-id": "st-root", "align-items": "start", "justify-content": "start", gap: "size-8", class: this.size === 'small' ? 'section-title-small' : undefined },
|
|
12
12
|
this.renderPrefixIcon(),
|
|
13
13
|
this.renderText()));
|
|
14
14
|
}
|
|
15
15
|
renderPrefixIcon() {
|
|
16
16
|
return (this.icon &&
|
|
17
|
-
this.iconAlign === 'left' && h("div", { class: "section-title-icon-container" }, this.renderIcon()));
|
|
17
|
+
this.iconAlign === 'left' && (h("div", { "data-a11y-id": "st-icon", class: "section-title-icon-container" }, this.renderIcon())));
|
|
18
18
|
}
|
|
19
19
|
renderText() {
|
|
20
20
|
return (h("vega-flex", { class: "vega-flex-grow", direction: "col", "align-items": "start", "justify-content": "start", gap: "size-4" },
|
|
@@ -23,7 +23,7 @@ export class VegaSectionTitleRenderer extends VegaSlimmer {
|
|
|
23
23
|
}
|
|
24
24
|
renderTitle() {
|
|
25
25
|
return (h("div", { class: "section-title-text vega-flex-grow" },
|
|
26
|
-
h("span",
|
|
26
|
+
h("span", { "data-a11y-id": "st-heading" }, this.titleText),
|
|
27
27
|
this.renderSuffixIcon()));
|
|
28
28
|
}
|
|
29
29
|
renderDescription() {
|
|
@@ -31,7 +31,7 @@ export class VegaSectionTitleRenderer extends VegaSlimmer {
|
|
|
31
31
|
}
|
|
32
32
|
renderSuffixIcon() {
|
|
33
33
|
return (this.icon &&
|
|
34
|
-
this.iconAlign === 'right' && h("div", { class: "right-icon-container" }, this.renderIcon()));
|
|
34
|
+
this.iconAlign === 'right' && (h("div", { "data-a11y-id": "st-icon", class: "right-icon-container" }, this.renderIcon())));
|
|
35
35
|
}
|
|
36
36
|
renderIcon() {
|
|
37
37
|
return (h("vega-icon", { icon: this.icon, color: this.iconColor, size: this.size === 'small' ? 'size-16' : 'size-20', class: "vega-flex-shrink-0" }));
|
|
@@ -9,6 +9,8 @@ import { sanitizeVegaComponent } from '../../utils/component';
|
|
|
9
9
|
import { InjectVegaGlobalSlimmer, InjectVegaSlimmer } from 'vega-slimmer/core';
|
|
10
10
|
import { VegaSectionTitleRenderer } from './slimmers/renderers/vega-section-title-renderer';
|
|
11
11
|
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
|
|
12
|
+
import { A11yTreeSlimmer } from '../../helpers/slimmers/a11y-tree-slimmer';
|
|
13
|
+
import { buildSectionTitleA11yTree } from './slimmers/a11y-tree/build-section-title-a11y-tree';
|
|
12
14
|
/**
|
|
13
15
|
* @vegaVersion 2.1.0
|
|
14
16
|
*/
|
|
@@ -17,6 +19,18 @@ export class VegaSectionTitle {
|
|
|
17
19
|
this.globalSlimmers = {};
|
|
18
20
|
this.renderer = new VegaSectionTitleRenderer();
|
|
19
21
|
this.vegaComponentUsageRuntimeMetricsSlimmer = new VegaComponentUsageRuntimeMetricsSlimmer();
|
|
22
|
+
/**
|
|
23
|
+
* Projects the component's semantic accessibility intent onto the shadow
|
|
24
|
+
* DOM via the A11y Tree foundation. Replaces the previous inline `role` /
|
|
25
|
+
* `aria-label` on the host element so ARIA is authored once, in
|
|
26
|
+
* `buildSectionTitleA11yTree`, and projected through the browser-engine
|
|
27
|
+
* strategy layer (no double projection).
|
|
28
|
+
*/
|
|
29
|
+
this.a11yTreeSlimmer = new A11yTreeSlimmer((host) => buildSectionTitleA11yTree({
|
|
30
|
+
titleText: host.titleText,
|
|
31
|
+
icon: host.icon,
|
|
32
|
+
iconAlign: host.iconAlign,
|
|
33
|
+
}));
|
|
20
34
|
/**
|
|
21
35
|
* Specifies the text content of the title displayed
|
|
22
36
|
* within the section title.
|
|
@@ -45,8 +59,7 @@ export class VegaSectionTitle {
|
|
|
45
59
|
this.size = 'default';
|
|
46
60
|
}
|
|
47
61
|
render() {
|
|
48
|
-
|
|
49
|
-
return sanitizeVegaComponent(h(Host, { role: ariaLabel ? 'group' : undefined, "aria-label": ariaLabel || undefined }, this.renderer.render()), this.host);
|
|
62
|
+
return sanitizeVegaComponent(h(Host, null, this.renderer.render()), this.host);
|
|
50
63
|
}
|
|
51
64
|
static get is() { return "vega-section-title"; }
|
|
52
65
|
static get encapsulation() { return "shadow"; }
|
|
@@ -208,3 +221,6 @@ __decorate([
|
|
|
208
221
|
__decorate([
|
|
209
222
|
InjectVegaSlimmer()
|
|
210
223
|
], VegaSectionTitle.prototype, "vegaComponentUsageRuntimeMetricsSlimmer", void 0);
|
|
224
|
+
__decorate([
|
|
225
|
+
InjectVegaSlimmer()
|
|
226
|
+
], VegaSectionTitle.prototype, "a11yTreeSlimmer", void 0);
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic DTO layer for the A11y Tree.
|
|
3
|
+
*
|
|
4
|
+
* Authoring an A11y Tree with raw `A11yNode` literals asks the developer to
|
|
5
|
+
* think in ARIA terms (`role: 'group'`, `decorative: true`, etc.). The DTO
|
|
6
|
+
* classes here provide a higher-level vocabulary that names the *content's
|
|
7
|
+
* meaning* — "this is a container", "this is a heading", "this is a
|
|
8
|
+
* decorative icon" — and lets the strategy layer translate intent into ARIA.
|
|
9
|
+
*
|
|
10
|
+
* ## Design (Visitor / Strategy + typed semantic DTOs)
|
|
11
|
+
*
|
|
12
|
+
* - DTOs are *type-holders for semantic intent*. They do NOT contain ARIA
|
|
13
|
+
* generation logic themselves.
|
|
14
|
+
* - Each DTO compiles to an `A11yNode` whose `kind` field carries the
|
|
15
|
+
* semantic discriminator. Strategies can then dispatch on `kind`
|
|
16
|
+
* (preferred) or fall back to `role` (for plain `A11yNode` authors).
|
|
17
|
+
* - This keeps strategies pure and independently testable, while letting
|
|
18
|
+
* authors write:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* new A11yContainerNode('st-root', { label, description })
|
|
22
|
+
* .childrenWith(
|
|
23
|
+
* new A11yHeadingNode('st-heading', { level: 2, label }),
|
|
24
|
+
* new A11yIconNode('st-icon'),
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* instead of hand-shaping `{ role: 'group', label, description, … }`.
|
|
29
|
+
*
|
|
30
|
+
* ## Migration path
|
|
31
|
+
*
|
|
32
|
+
* Phase 1 (this file): DTOs are an additive layer on top of `A11yNode`.
|
|
33
|
+
* Existing strategies continue to work unchanged because each DTO emits
|
|
34
|
+
* a fully-populated `A11yNode` with `role` set correctly.
|
|
35
|
+
*
|
|
36
|
+
* Phase 2 (follow-up): strategies grow `compileNode(node)` methods that
|
|
37
|
+
* dispatch on `node.kind` for cases where semantic intent is richer than
|
|
38
|
+
* `role` alone can express.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Base class for all semantic DTO nodes. Provides the `childrenWith()`
|
|
42
|
+
* composition helper and the abstract `toA11yNode()` contract.
|
|
43
|
+
*/
|
|
44
|
+
export class A11yNodeDto {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.childDtos = [];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Declare the semantic children of this node in reading order.
|
|
50
|
+
*
|
|
51
|
+
* @param {...A11yNodeDto} children - Semantic child DTOs in reading order.
|
|
52
|
+
* @returns {this} `this`, for fluent chaining.
|
|
53
|
+
*/
|
|
54
|
+
childrenWith(...children) {
|
|
55
|
+
this.childDtos = children;
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Compile the declared child DTOs into their `A11yNode` representations.
|
|
60
|
+
*
|
|
61
|
+
* @returns {A11yNode[] | undefined} The compiled children, or `undefined` when none.
|
|
62
|
+
*/
|
|
63
|
+
compileChildren() {
|
|
64
|
+
if (this.childDtos.length === 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
return this.childDtos.map((c) => c.toA11yNode());
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A generic container that groups related content. Maps to `role="group"`
|
|
71
|
+
* by default; strategies may upgrade to `role="region"` when a description
|
|
72
|
+
* is present and the platform benefits (e.g. Firefox+NVDA landmark
|
|
73
|
+
* navigation — see `firefox-nvda-strategy.ts`).
|
|
74
|
+
*/
|
|
75
|
+
export class A11yContainerNode extends A11yNodeDto {
|
|
76
|
+
constructor(id, opts = {}) {
|
|
77
|
+
super();
|
|
78
|
+
this.id = id;
|
|
79
|
+
this.opts = opts;
|
|
80
|
+
this.kind = 'container';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Compile this DTO into its `A11yNode` representation.
|
|
84
|
+
*
|
|
85
|
+
* @returns {A11yNode} The compiled semantic node.
|
|
86
|
+
*/
|
|
87
|
+
toA11yNode() {
|
|
88
|
+
return {
|
|
89
|
+
id: this.id,
|
|
90
|
+
kind: this.kind,
|
|
91
|
+
role: 'group',
|
|
92
|
+
label: this.opts.label,
|
|
93
|
+
description: this.opts.description,
|
|
94
|
+
children: this.compileChildren(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A navigable / discoverable section (landmark). Always renders as
|
|
100
|
+
* `role="region"` so it appears in AT landmark navigation.
|
|
101
|
+
*/
|
|
102
|
+
export class A11yLandmarkNode extends A11yNodeDto {
|
|
103
|
+
constructor(id, opts = {}) {
|
|
104
|
+
super();
|
|
105
|
+
this.id = id;
|
|
106
|
+
this.opts = opts;
|
|
107
|
+
this.kind = 'landmark';
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Compile this DTO into its `A11yNode` representation.
|
|
111
|
+
*
|
|
112
|
+
* @returns {A11yNode} The compiled semantic node.
|
|
113
|
+
*/
|
|
114
|
+
toA11yNode() {
|
|
115
|
+
return {
|
|
116
|
+
id: this.id,
|
|
117
|
+
kind: this.kind,
|
|
118
|
+
role: 'region',
|
|
119
|
+
label: this.opts.label,
|
|
120
|
+
description: this.opts.description,
|
|
121
|
+
children: this.compileChildren(),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A heading at the given level (1–6, defaults to 2).
|
|
127
|
+
*
|
|
128
|
+
* Use this instead of a raw `{ role: 'heading', level: 2 }` literal to
|
|
129
|
+
* benefit from the default-level guard and the `kind` discriminator.
|
|
130
|
+
*/
|
|
131
|
+
export class A11yHeadingNode extends A11yNodeDto {
|
|
132
|
+
constructor(id, opts = {}) {
|
|
133
|
+
super();
|
|
134
|
+
this.id = id;
|
|
135
|
+
this.opts = opts;
|
|
136
|
+
this.kind = 'heading';
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Compile this DTO into its `A11yNode` representation.
|
|
140
|
+
*
|
|
141
|
+
* @returns {A11yNode} The compiled semantic node.
|
|
142
|
+
*/
|
|
143
|
+
toA11yNode() {
|
|
144
|
+
var _a;
|
|
145
|
+
return {
|
|
146
|
+
id: this.id,
|
|
147
|
+
kind: this.kind,
|
|
148
|
+
role: 'heading',
|
|
149
|
+
level: (_a = this.opts.level) !== null && _a !== void 0 ? _a : 2,
|
|
150
|
+
label: this.opts.label,
|
|
151
|
+
children: this.compileChildren(),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* A purely decorative icon. `decorative` is always `true` so authors never
|
|
157
|
+
* have to remember the flag — that is the whole point of this DTO class.
|
|
158
|
+
*
|
|
159
|
+
* Produces `aria-hidden="true"` via the baseline strategy; webkit-voiceover
|
|
160
|
+
* additionally sets `role="none"` as a belt-and-suspenders guard.
|
|
161
|
+
*/
|
|
162
|
+
export class A11yIconNode extends A11yNodeDto {
|
|
163
|
+
constructor(id) {
|
|
164
|
+
super();
|
|
165
|
+
this.id = id;
|
|
166
|
+
this.kind = 'icon';
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Compile this DTO into its `A11yNode` representation.
|
|
170
|
+
*
|
|
171
|
+
* @returns {A11yNode} The compiled semantic node.
|
|
172
|
+
*/
|
|
173
|
+
toA11yNode() {
|
|
174
|
+
return {
|
|
175
|
+
id: this.id,
|
|
176
|
+
kind: this.kind,
|
|
177
|
+
role: 'img',
|
|
178
|
+
decorative: true,
|
|
179
|
+
children: this.compileChildren(),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* An informative image that requires an accessible label (alt text).
|
|
185
|
+
*
|
|
186
|
+
* Produces `role="img"` + `aria-label` via the baseline strategy.
|
|
187
|
+
* Contrast with `A11yIconNode` which is always decorative.
|
|
188
|
+
*/
|
|
189
|
+
export class A11yImageNode extends A11yNodeDto {
|
|
190
|
+
constructor(id, opts) {
|
|
191
|
+
super();
|
|
192
|
+
this.id = id;
|
|
193
|
+
this.opts = opts;
|
|
194
|
+
this.kind = 'image';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Compile this DTO into its `A11yNode` representation.
|
|
198
|
+
*
|
|
199
|
+
* @returns {A11yNode} The compiled semantic node.
|
|
200
|
+
*/
|
|
201
|
+
toA11yNode() {
|
|
202
|
+
return {
|
|
203
|
+
id: this.id,
|
|
204
|
+
kind: this.kind,
|
|
205
|
+
role: 'img',
|
|
206
|
+
label: this.opts.label,
|
|
207
|
+
children: this.compileChildren(),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|