@globalpayments/vega 2.77.0 → 2.78.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-04e7024b.js → app-globals-55e26945.js} +6 -6
- package/dist/cjs/{aria-attributes-value-mapper-f58c73f8.js → aria-attributes-value-mapper-9a41b9cf.js} +10 -3
- package/dist/cjs/{breakpoints-751d433a.js → breakpoints-a8ff22f0.js} +1 -1
- package/dist/cjs/{child-nodes-event-prevent-slimmer-cc6d2919.js → child-nodes-event-prevent-slimmer-dd0bb8b6.js} +1 -1
- package/dist/cjs/{code-block-f1480ec3.js → code-block-1a5fafed.js} +2 -2
- package/dist/cjs/{component-value-history-controller-slimmer.abstract-a9264cc8.js → component-value-history-controller-slimmer.abstract-42683f23.js} +4 -4
- package/dist/cjs/{date-required-rule-912469e0.js → date-required-rule-ad536cb5.js} +1 -1
- package/dist/cjs/{design-token-c49717c8.js → design-token-45ebd5e4.js} +3 -3
- package/dist/cjs/{dto-renderer-manager-809c947b.js → dto-renderer-manager-7557d562.js} +3 -3
- package/dist/cjs/{element-appender-slimmer-38583ca9.js → element-appender-slimmer-16ec8591.js} +181 -22
- package/dist/cjs/{event-emit-slimmer-062cdcb8.js → event-emit-slimmer-c84121c8.js} +1 -1
- package/dist/cjs/{form-field-controller-slimmer-102f37c7.js → form-field-controller-slimmer-73f5849e.js} +4 -4
- package/dist/cjs/{image-annotation-action-8d9fa20c.js → image-annotation-action-f275863e.js} +3 -3
- package/dist/cjs/index.cjs.js +18 -18
- package/dist/cjs/{inject-keyboard-manager-0f5bd568.js → inject-keyboard-manager-6667c0f1.js} +1 -1
- package/dist/cjs/{internal-translation-controller-053eb0f1.js → internal-translation-controller-24df468f.js} +16 -0
- package/dist/cjs/{internal-vega-event-manager-f7ecf3d4.js → internal-vega-event-manager-cc0f511c.js} +2 -2
- package/dist/cjs/{keyboard-manager-055e9f67.js → keyboard-manager-7de7ecfd.js} +1 -1
- package/dist/cjs/{keyboard-manager-slimmer-0cc0c1c7.js → keyboard-manager-slimmer-b44f0dc9.js} +1 -1
- package/dist/cjs/loader.cjs.js +14 -14
- package/dist/cjs/{month-view-generator-6a6dd527.js → month-view-generator-36c42772.js} +1 -1
- package/dist/cjs/{page-resize-observer-slimmer-7f065ee1.js → page-resize-observer-slimmer-e050cd26.js} +1 -1
- package/dist/cjs/{public-rules-922849f3.js → public-rules-6c6cb4ac.js} +9 -9
- package/dist/cjs/{range-8aa49b08.js → range-e298d4aa.js} +1 -1
- package/dist/cjs/{responsive-format-facade-acc39a40.js → responsive-format-facade-bddac47c.js} +3 -3
- package/dist/cjs/{rich-text-editor-required-rule-22225840.js → rich-text-editor-required-rule-6346a888.js} +1 -1
- package/dist/cjs/{string-format-strategy.abstract-f2575647.js → string-format-strategy.abstract-814d66c4.js} +1 -1
- package/dist/cjs/{string-input-formatter-slimmer-0a334fc6.js → string-input-formatter-slimmer-749e3cfe.js} +3 -3
- package/dist/cjs/{string-mask-strategy-dda58395.js → string-mask-strategy-d00871c2.js} +2 -2
- package/dist/cjs/{style-formatter-028af284.js → style-formatter-94c1a1ff.js} +2 -2
- package/dist/cjs/{sub-state-notify-slimmer-58121111.js → sub-state-notify-slimmer-ac1dae32.js} +1 -1
- package/dist/cjs/{sub-state-observer-slimmer-1dfbc4c3.js → sub-state-observer-slimmer-e692d849.js} +1 -1
- package/dist/cjs/{time-required-rule-d6fa7aa8.js → time-required-rule-f1f3c8c2.js} +1 -1
- package/dist/cjs/{token-extension-ffcaeae0.js → token-extension-1e98ddf3.js} +7 -7
- package/dist/cjs/{translation-slimmer-4533bd67.js → translation-slimmer-3fa03d81.js} +1 -1
- package/dist/cjs/{type-guard-407ba0b8.js → type-guard-a0d9ff1f.js} +37 -2
- package/dist/cjs/{ui-32e69595.js → ui-024696c0.js} +8 -1
- package/dist/cjs/{valid-credit-card-number-rule-41a8b51b.js → valid-credit-card-number-rule-cba7d66a.js} +1 -1
- package/dist/cjs/vega-accordion.cjs.entry.js +9 -9
- package/dist/cjs/vega-app-header-button.cjs.entry.js +31 -13
- package/dist/cjs/vega-banner.cjs.entry.js +3 -3
- package/dist/cjs/vega-box.cjs.entry.js +8 -8
- package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
- package/dist/cjs/vega-button-circle.cjs.entry.js +12 -12
- package/dist/cjs/vega-button-group_2.cjs.entry.js +7 -7
- package/dist/cjs/vega-button-link.cjs.entry.js +20 -4
- package/dist/cjs/vega-button.cjs.entry.js +11 -11
- package/dist/cjs/vega-calendar_4.cjs.entry.js +15 -15
- package/dist/cjs/vega-card.cjs.entry.js +6 -6
- package/dist/cjs/vega-carousel.cjs.entry.js +9 -9
- package/dist/cjs/vega-checkbox_2.cjs.entry.js +11 -11
- package/dist/cjs/vega-chip.cjs.entry.js +11 -11
- package/dist/cjs/vega-code-block.cjs.entry.js +16 -15
- package/dist/cjs/vega-color-picker.cjs.entry.js +10 -10
- package/dist/cjs/vega-combo-box.cjs.entry.js +14 -14
- package/dist/cjs/vega-date-picker_2.cjs.entry.js +113 -32
- package/dist/cjs/vega-dialog_2.cjs.entry.js +11 -11
- package/dist/cjs/vega-divider.cjs.entry.js +7 -7
- package/dist/cjs/vega-dropdown_5.cjs.entry.js +41 -17
- package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
- package/dist/cjs/{vega-event-id-ee01d8dd.js → vega-event-id-c08ce3d3.js} +2 -0
- package/dist/cjs/vega-field-label.cjs.entry.js +3 -3
- package/dist/cjs/vega-file-uploader.cjs.entry.js +11 -11
- package/dist/cjs/vega-flag-icon.cjs.entry.js +6 -6
- package/dist/cjs/vega-flex.cjs.entry.js +9 -9
- package/dist/cjs/vega-font.cjs.entry.js +7 -7
- package/dist/cjs/vega-form.cjs.entry.js +13 -13
- package/dist/cjs/vega-grid.cjs.entry.js +6 -6
- package/dist/cjs/vega-icon.cjs.entry.js +6 -6
- package/dist/cjs/vega-image-uploader.cjs.entry.js +14 -14
- package/dist/cjs/vega-input-credit-card.cjs.entry.js +16 -16
- package/dist/cjs/vega-input-numeric.cjs.entry.js +102 -42
- package/dist/cjs/vega-input-passcode.cjs.entry.js +109 -36
- package/dist/cjs/vega-input-phone-number.cjs.entry.js +91 -41
- package/dist/cjs/vega-input-range.cjs.entry.js +27 -12
- package/dist/cjs/vega-input-select.cjs.entry.js +17 -17
- package/dist/cjs/vega-input.cjs.entry.js +414 -187
- package/dist/cjs/{vega-internal-event-id-f2465f1b.js → vega-internal-event-id-e0aeac45.js} +2 -0
- package/dist/cjs/vega-item-toggle.cjs.entry.js +4 -4
- package/dist/cjs/vega-left-nav_5.cjs.entry.js +15 -16
- package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +6 -6
- 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 +4 -4
- package/dist/cjs/vega-pagination.cjs.entry.js +12 -12
- package/dist/cjs/vega-popover_2.cjs.entry.js +15 -15
- package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +12 -12
- package/dist/cjs/vega-radio_2.cjs.entry.js +14 -14
- package/dist/cjs/vega-rich-text-content.cjs.entry.js +17 -11
- package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +589 -396
- package/dist/cjs/vega-segment-control.cjs.entry.js +6 -6
- package/dist/cjs/vega-selection-chip_2.cjs.entry.js +14 -14
- package/dist/cjs/vega-selection-tile_2.cjs.entry.js +12 -12
- package/dist/cjs/vega-sidenav_3.cjs.entry.js +12 -12
- package/dist/cjs/vega-signature-capture.cjs.entry.js +14 -14
- package/dist/cjs/vega-stepper.cjs.entry.js +12 -12
- package/dist/cjs/vega-tab-group_2.cjs.entry.js +7 -7
- package/dist/cjs/vega-table_11.cjs.entry.js +14 -14
- package/dist/cjs/vega-text.cjs.entry.js +3 -3
- package/dist/cjs/vega-textarea.cjs.entry.js +110 -42
- package/dist/cjs/vega-time-picker_2.cjs.entry.js +18 -18
- package/dist/cjs/vega-toggle-switch.cjs.entry.js +10 -10
- package/dist/cjs/vega-tooltip_2.cjs.entry.js +11 -11
- package/dist/cjs/vega.cjs.js +14 -14
- package/dist/cjs/{wait-for-component-did-render-70a01bf9.js → wait-for-component-did-render-cbebfc33.js} +1 -1
- package/dist/collection/components/vega-app-header-button/vega-app-header-button.js +44 -2
- package/dist/collection/components/vega-button-link/vega-button-link.js +16 -1
- package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-preview-popover-renderer.js +1 -1
- package/dist/collection/components/vega-checkbox/vega-checkbox-group/vega-checkbox-group.js +1 -1
- package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-content-renderer.js +4 -0
- package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.js +64 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.js +3 -0
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-header-render.js +3 -3
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.js +19 -1
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.js +3 -2
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +3 -2
- package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +12 -0
- package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.js +25 -0
- package/dist/collection/components/vega-flex/vega-flex.css +32 -0
- package/dist/collection/components/vega-flex/vega-flex.js +1 -1
- package/dist/collection/components/vega-grid/vega-grid.js +2 -2
- package/dist/collection/components/vega-input/slimmers/controllers/vega-input-render-mode-controller.js +1 -3
- package/dist/collection/components/vega-input/slimmers/renderers/vega-input-input-container-renderer.js +1 -5
- package/dist/collection/components/vega-input/slimmers/renderers/vega-input-input-renderer.js +1 -4
- package/dist/collection/components/vega-input/slimmers/renderers/vega-input-input-suggestions-renderer.js +5 -2
- package/dist/collection/components/vega-input/slimmers/renderers/vega-input-prefix-slot-renderer.js +1 -1
- package/dist/collection/components/vega-input/vega-input.js +382 -101
- package/dist/collection/components/vega-input-credit-card/vega-input-credit-card.js +1 -1
- package/dist/collection/components/vega-input-numeric/vega-input-numeric.js +175 -49
- package/dist/collection/components/vega-input-passcode/slimmers/controllers/vega-input-passcode-keyboard-controller.js +2 -0
- package/dist/collection/components/vega-input-passcode/slimmers/renderers/vega-input-passcode-renderer.js +30 -2
- package/dist/collection/components/vega-input-passcode/vega-input-passcode.js +123 -35
- package/dist/collection/components/vega-input-phone-number/vega-input-phone-number.js +145 -56
- package/dist/collection/components/vega-input-range/slimmers/renderers/vega-input-range-input-renderer.js +15 -0
- package/dist/collection/components/vega-input-select/vega-input-select.js +6 -5
- package/dist/collection/components/vega-nav/vega-left-nav-link/slimmers/renderers/vega-left-nav-link-renderer.js +2 -3
- package/dist/collection/components/vega-popover/vega-popover-content-box/vega-popover-content-box.css +5 -0
- package/dist/collection/components/vega-radio/vega-radio-group/vega-radio-group.js +1 -1
- package/dist/collection/components/vega-rich-text-editor/dto/renderers/nodes/image-node-renderer.js +7 -1
- package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/insert-image-controller.js +7 -4
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/image-toolbar-button-slimmer.js +113 -12
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.js +2 -2
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-renderer.js +4 -17
- package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.js +102 -0
- package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +49 -1
- package/dist/collection/components/vega-rich-text-editor/vega-rich-text-image-editor/slimmers/renderers/vega-rich-text-image-editor-renderer.js +1 -1
- package/dist/collection/components/vega-stepper/vega-stepper.js +1 -1
- package/dist/collection/components/vega-textarea/vega-textarea.js +183 -52
- package/dist/collection/components/vega-tooltip/vega-tooltip-content-box/vega-tooltip-content-box.css +5 -0
- package/dist/collection/constants/ui.js +9 -1
- package/dist/collection/helpers/calendar/test/utils.test.js +54 -1
- package/dist/collection/helpers/calendar/utils.js +35 -0
- package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +2 -2
- package/dist/collection/helpers/event-manager/event-id/vega-event-id.js +1 -0
- package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +1 -0
- package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +27 -0
- package/dist/collection/helpers/slimmers/element-appender/test/element-appender-slimmer.test.js +50 -0
- package/dist/collection/helpers/slimmers/mutation-observer/aria-attributes-value-mapper.js +10 -3
- package/dist/collection/helpers/slimmers/mutation-observer/data-tab-index-value-mapper.js +80 -0
- package/dist/collection/helpers/slimmers/mutation-observer/test/aria-attributes-value-mapper.test.js +55 -3
- package/dist/collection/helpers/slimmers/mutation-observer/test/data-tab-index-value-mapper.test.js +120 -0
- package/dist/collection/helpers/slimmers/position-calculation/base-position-calculation-strategy.js +123 -9
- package/dist/collection/helpers/slimmers/position-calculation/position-calculation-controller.js +14 -4
- package/dist/collection/helpers/slimmers/position-calculation/screen-position-calculation-strategy.js +13 -4
- package/dist/collection/helpers/slimmers/position-calculation/test/body-position-calculation-strategy.test.js +7 -6
- package/dist/collection/helpers/slimmers/position-calculation/test/screen-position-calculation-strategy.test.js +162 -7
- package/dist/collection/helpers/translation/locales/en.js +16 -0
- package/dist/collection/helpers/translation/tests/internal-translation-controller.test.js +17 -0
- package/dist/collection/helpers/translation/tests/translation.test.js +14 -0
- package/dist/collection/helpers/ui/test/element-appender.test.js +7 -5
- package/dist/collection/utils/e2e-utils.js +6 -0
- package/dist/esm/{app-globals-32055795.js → app-globals-3b97bb20.js} +6 -6
- package/dist/esm/{aria-attributes-value-mapper-d4fef46a.js → aria-attributes-value-mapper-2c632641.js} +10 -3
- package/dist/esm/{breakpoints-56e5407b.js → breakpoints-13353e09.js} +1 -1
- package/dist/esm/{child-nodes-event-prevent-slimmer-331312b8.js → child-nodes-event-prevent-slimmer-4feabae0.js} +1 -1
- package/dist/esm/{code-block-b6247a45.js → code-block-d65bab61.js} +2 -2
- package/dist/esm/{component-value-history-controller-slimmer.abstract-2bb8533d.js → component-value-history-controller-slimmer.abstract-556fcf2a.js} +4 -4
- package/dist/esm/{date-required-rule-e771e7d9.js → date-required-rule-4ffd9cae.js} +1 -1
- package/dist/esm/{design-token-5bc034e1.js → design-token-b518a2aa.js} +3 -3
- package/dist/esm/{dto-renderer-manager-6fd22ab7.js → dto-renderer-manager-73df5cbe.js} +3 -3
- package/dist/esm/{element-appender-slimmer-9ea377d0.js → element-appender-slimmer-36b7a572.js} +181 -22
- package/dist/esm/{event-emit-slimmer-ffaecb9a.js → event-emit-slimmer-f879fd58.js} +1 -1
- package/dist/esm/{form-field-controller-slimmer-5817d14d.js → form-field-controller-slimmer-9a880420.js} +4 -4
- package/dist/esm/{image-annotation-action-6701b4c9.js → image-annotation-action-eb3dcad5.js} +3 -3
- package/dist/esm/index.js +18 -18
- package/dist/esm/{inject-keyboard-manager-78730062.js → inject-keyboard-manager-e5481833.js} +1 -1
- package/dist/esm/{internal-translation-controller-911515f9.js → internal-translation-controller-0787a7a7.js} +16 -0
- package/dist/esm/{internal-vega-event-manager-32a3d848.js → internal-vega-event-manager-3aebbe55.js} +2 -2
- package/dist/esm/{keyboard-manager-38934f94.js → keyboard-manager-4dfc625f.js} +1 -1
- package/dist/esm/{keyboard-manager-slimmer-9984d922.js → keyboard-manager-slimmer-87bf68f1.js} +1 -1
- package/dist/esm/loader.js +14 -14
- package/dist/esm/{month-view-generator-eaf9029c.js → month-view-generator-94134ec5.js} +1 -1
- package/dist/esm/{page-resize-observer-slimmer-d6af0d86.js → page-resize-observer-slimmer-e0505250.js} +1 -1
- package/dist/esm/{public-rules-25cc3a39.js → public-rules-49912d52.js} +9 -9
- package/dist/esm/{range-663f44dc.js → range-0a22b512.js} +1 -1
- package/dist/esm/{responsive-format-facade-aa705823.js → responsive-format-facade-b3799ff9.js} +3 -3
- package/dist/esm/{rich-text-editor-required-rule-a238b862.js → rich-text-editor-required-rule-d86e3a51.js} +1 -1
- package/dist/esm/{string-format-strategy.abstract-713fba36.js → string-format-strategy.abstract-e40a0df7.js} +1 -1
- package/dist/esm/{string-input-formatter-slimmer-5b413ff9.js → string-input-formatter-slimmer-076764fc.js} +3 -3
- package/dist/esm/{string-mask-strategy-6beaf664.js → string-mask-strategy-df1f5707.js} +2 -2
- package/dist/esm/{style-formatter-28138f5c.js → style-formatter-95255392.js} +2 -2
- package/dist/esm/{sub-state-notify-slimmer-5133f1a8.js → sub-state-notify-slimmer-f4b3b0b9.js} +1 -1
- package/dist/esm/{sub-state-observer-slimmer-478c9f41.js → sub-state-observer-slimmer-058feaf0.js} +1 -1
- package/dist/esm/{time-required-rule-e4138a76.js → time-required-rule-b4af75ae.js} +1 -1
- package/dist/esm/{token-extension-73e4460a.js → token-extension-ffd98170.js} +7 -7
- package/dist/esm/{translation-slimmer-2394b173.js → translation-slimmer-e788cae4.js} +1 -1
- package/dist/esm/{type-guard-f50e34d6.js → type-guard-f69d2935.js} +37 -3
- package/dist/esm/{ui-28fd4193.js → ui-41f725b7.js} +8 -1
- package/dist/esm/{valid-credit-card-number-rule-22ce81db.js → valid-credit-card-number-rule-c023326d.js} +1 -1
- package/dist/esm/vega-accordion.entry.js +9 -9
- package/dist/esm/vega-app-header-button.entry.js +31 -13
- package/dist/esm/vega-banner.entry.js +3 -3
- package/dist/esm/vega-box.entry.js +8 -8
- package/dist/esm/vega-breadcrumb.entry.js +4 -4
- package/dist/esm/vega-button-circle.entry.js +12 -12
- package/dist/esm/vega-button-group_2.entry.js +7 -7
- package/dist/esm/vega-button-link.entry.js +20 -4
- package/dist/esm/vega-button.entry.js +11 -11
- package/dist/esm/vega-calendar_4.entry.js +15 -15
- package/dist/esm/vega-card.entry.js +6 -6
- package/dist/esm/vega-carousel.entry.js +9 -9
- package/dist/esm/vega-checkbox_2.entry.js +11 -11
- package/dist/esm/vega-chip.entry.js +11 -11
- package/dist/esm/vega-code-block.entry.js +16 -15
- package/dist/esm/vega-color-picker.entry.js +10 -10
- package/dist/esm/vega-combo-box.entry.js +14 -14
- package/dist/esm/vega-date-picker_2.entry.js +114 -33
- package/dist/esm/vega-dialog_2.entry.js +11 -11
- package/dist/esm/vega-divider.entry.js +7 -7
- package/dist/esm/vega-dropdown_5.entry.js +42 -18
- package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
- package/dist/esm/{vega-event-id-38aa77a0.js → vega-event-id-fdc58a67.js} +2 -1
- package/dist/esm/vega-field-label.entry.js +3 -3
- package/dist/esm/vega-file-uploader.entry.js +11 -11
- package/dist/esm/vega-flag-icon.entry.js +6 -6
- package/dist/esm/vega-flex.entry.js +9 -9
- package/dist/esm/vega-font.entry.js +7 -7
- package/dist/esm/vega-form.entry.js +13 -13
- package/dist/esm/vega-grid.entry.js +6 -6
- package/dist/esm/vega-icon.entry.js +6 -6
- package/dist/esm/vega-image-uploader.entry.js +14 -14
- package/dist/esm/vega-input-credit-card.entry.js +16 -16
- package/dist/esm/vega-input-numeric.entry.js +102 -42
- package/dist/esm/vega-input-passcode.entry.js +109 -36
- package/dist/esm/vega-input-phone-number.entry.js +91 -41
- package/dist/esm/vega-input-range.entry.js +27 -12
- package/dist/esm/vega-input-select.entry.js +17 -17
- package/dist/esm/vega-input.entry.js +414 -187
- package/dist/esm/{vega-internal-event-id-799d012e.js → vega-internal-event-id-12783594.js} +2 -1
- package/dist/esm/vega-item-toggle.entry.js +4 -4
- package/dist/esm/vega-left-nav_5.entry.js +15 -16
- package/dist/esm/vega-loader-wrapper_2.entry.js +6 -6
- 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 +4 -4
- package/dist/esm/vega-pagination.entry.js +12 -12
- package/dist/esm/vega-popover_2.entry.js +15 -15
- package/dist/esm/vega-progress-tracker_2.entry.js +12 -12
- package/dist/esm/vega-radio_2.entry.js +14 -14
- package/dist/esm/vega-rich-text-content.entry.js +17 -11
- package/dist/esm/vega-rich-text-editor_4.entry.js +589 -396
- package/dist/esm/vega-segment-control.entry.js +6 -6
- package/dist/esm/vega-selection-chip_2.entry.js +14 -14
- package/dist/esm/vega-selection-tile_2.entry.js +12 -12
- package/dist/esm/vega-sidenav_3.entry.js +12 -12
- package/dist/esm/vega-signature-capture.entry.js +14 -14
- package/dist/esm/vega-stepper.entry.js +12 -12
- package/dist/esm/vega-tab-group_2.entry.js +7 -7
- package/dist/esm/vega-table_11.entry.js +14 -14
- package/dist/esm/vega-text.entry.js +3 -3
- package/dist/esm/vega-textarea.entry.js +110 -42
- package/dist/esm/vega-time-picker_2.entry.js +18 -18
- package/dist/esm/vega-toggle-switch.entry.js +10 -10
- package/dist/esm/vega-tooltip_2.entry.js +11 -11
- package/dist/esm/vega.js +14 -14
- package/dist/esm/{wait-for-component-did-render-b08ef07b.js → wait-for-component-did-render-4d0a3428.js} +1 -1
- package/dist/sri/vega-sri-manifest.json +341 -341
- package/dist/types/components/vega-app-header-button/types.d.ts +18 -0
- package/dist/types/components/vega-app-header-button/vega-app-header-button.d.ts +8 -1
- package/dist/types/components/vega-button-link/vega-button-link.d.ts +2 -0
- package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.d.ts +21 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.d.ts +1 -0
- package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +7 -0
- package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.d.ts +11 -0
- package/dist/types/components/vega-input/slimmers/controllers/vega-input-render-mode-controller.d.ts +0 -1
- package/dist/types/components/vega-input/slimmers/renderers/vega-input-input-renderer.d.ts +0 -1
- package/dist/types/components/vega-input/vega-input.d.ts +321 -79
- package/dist/types/components/vega-input-numeric/vega-input-numeric.d.ts +117 -42
- package/dist/types/components/vega-input-passcode/slimmers/renderers/vega-input-passcode-renderer.d.ts +14 -0
- package/dist/types/components/vega-input-passcode/vega-input-passcode.d.ts +82 -28
- package/dist/types/components/vega-input-phone-number/vega-input-phone-number.d.ts +99 -34
- package/dist/types/components/vega-input-range/slimmers/renderers/vega-input-range-input-renderer.d.ts +8 -0
- package/dist/types/components/vega-input-select/vega-input-select.d.ts +2 -2
- package/dist/types/components/vega-rich-text-editor/slimmers/controllers/insert-image-controller.d.ts +7 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/image-toolbar-button-slimmer.d.ts +30 -2
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.d.ts +1 -1
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-renderer.d.ts +1 -3
- package/dist/types/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.d.ts +37 -0
- package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor.d.ts +16 -0
- package/dist/types/components/vega-textarea/vega-textarea.d.ts +123 -41
- package/dist/types/components.d.ts +429 -219
- package/dist/types/constants/ui.d.ts +2 -2
- package/dist/types/helpers/calendar/utils.d.ts +17 -0
- package/dist/types/helpers/event-manager/event-id/vega-event-id.d.ts +1 -0
- package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +1 -0
- package/dist/types/helpers/slimmers/element-appender/element-appender-slimmer.d.ts +12 -0
- package/dist/types/helpers/slimmers/mutation-observer/aria-attributes-value-mapper.d.ts +2 -1
- package/dist/types/helpers/slimmers/mutation-observer/data-tab-index-value-mapper.d.ts +35 -0
- package/dist/types/helpers/slimmers/mutation-observer/test/data-tab-index-value-mapper.test.d.ts +1 -0
- package/dist/types/helpers/slimmers/position-calculation/base-position-calculation-strategy.d.ts +60 -3
- package/dist/types/helpers/slimmers/position-calculation/screen-position-calculation-strategy.d.ts +3 -2
- package/dist/types/helpers/slimmers/position-calculation/test/body-position-calculation-strategy.test.d.ts +1 -1
- package/dist/types/helpers/translation/interface.d.ts +17 -1
- package/dist/types/types/components.type.d.ts +1 -0
- package/dist/types/types/type-guard.d.ts +3 -3
- package/dist/types/types/ui.type.d.ts +3 -2
- package/dist/types/utils/e2e-utils.d.ts +2 -0
- package/dist/vega/index.esm.js +1 -1
- package/dist/vega/{p-9441f2ba.entry.js → p-0009e0bc.entry.js} +1 -1
- package/dist/vega/{p-2d69632d.js → p-02976501.js} +1 -1
- package/dist/vega/{p-bf6fc19f.entry.js → p-03280f85.entry.js} +1 -1
- package/dist/vega/{p-f3e6483c.js → p-03b1e442.js} +1 -1
- package/dist/vega/{p-33f9ad94.entry.js → p-0681ffee.entry.js} +1 -1
- package/dist/vega/{p-3ce2b05c.entry.js → p-093aa0cb.entry.js} +1 -1
- package/dist/vega/{p-ffd48e37.entry.js → p-1828f9e6.entry.js} +1 -1
- package/dist/vega/{p-f428086c.entry.js → p-19883e27.entry.js} +1 -1
- package/dist/vega/p-1e015382.js +1 -0
- package/dist/vega/{p-7425cedc.entry.js → p-1ff45314.entry.js} +1 -1
- package/dist/vega/{p-9339c6c4.js → p-24b4c64f.js} +1 -1
- package/dist/vega/{p-5833f33b.entry.js → p-2e7ec8e0.entry.js} +1 -1
- package/dist/vega/{p-1a3236e7.entry.js → p-309b5016.entry.js} +1 -1
- package/dist/vega/{p-857069a5.entry.js → p-3592a26d.entry.js} +1 -1
- package/dist/vega/{p-560d2f48.entry.js → p-383e235a.entry.js} +1 -1
- package/dist/vega/p-3992038a.js +1 -0
- package/dist/vega/{p-02c9796a.js → p-3a537cd0.js} +1 -1
- package/dist/vega/{p-daa60a59.entry.js → p-3b7ad04b.entry.js} +1 -1
- package/dist/vega/{p-5485c387.entry.js → p-3d4b8066.entry.js} +1 -1
- package/dist/vega/{p-7d7aaff9.entry.js → p-3e484d99.entry.js} +1 -1
- package/dist/vega/{p-c165232c.entry.js → p-3fd3861c.entry.js} +1 -1
- package/dist/vega/{p-d78f6ede.js → p-4079e932.js} +1 -1
- package/dist/vega/{p-5eb7f382.js → p-43df17a1.js} +1 -1
- package/dist/vega/{p-db5fa164.entry.js → p-473ceda5.entry.js} +1 -1
- package/dist/vega/{p-67745549.entry.js → p-474b97cf.entry.js} +1 -1
- package/dist/vega/{p-242fbcad.entry.js → p-47c202eb.entry.js} +1 -1
- package/dist/vega/p-4e0344bc.entry.js +1 -0
- package/dist/vega/{p-e6cf2ace.entry.js → p-4efe9cd8.entry.js} +1 -1
- package/dist/vega/{p-36a09524.entry.js → p-536ad3d7.entry.js} +1 -1
- package/dist/vega/{p-22056609.entry.js → p-53e0b2bd.entry.js} +1 -1
- package/dist/vega/p-57180993.entry.js +1 -0
- package/dist/vega/{p-e827d56d.js → p-5b238c6d.js} +1 -1
- package/dist/vega/{p-464559e3.js → p-5ba34330.js} +1 -1
- package/dist/vega/p-5e1d0f21.entry.js +1 -0
- package/dist/vega/{p-a786259a.js → p-5ed5aa26.js} +1 -1
- package/dist/vega/p-5f377954.js +1 -1
- package/dist/vega/{p-d64fab3d.js → p-5f81beae.js} +1 -1
- package/dist/vega/{p-34bcf4ed.entry.js → p-6a8ac66d.entry.js} +1 -1
- package/dist/vega/{p-4bffdb28.js → p-6b3776ec.js} +1 -1
- package/dist/vega/{p-2b142818.entry.js → p-6b4021f0.entry.js} +1 -1
- package/dist/vega/{p-2a10e2e5.js → p-6cf28c27.js} +1 -1
- package/dist/vega/{p-0037068c.entry.js → p-71cd1d9e.entry.js} +1 -1
- package/dist/vega/{p-4aa52ed2.entry.js → p-7440325c.entry.js} +1 -1
- package/dist/vega/p-764425e4.entry.js +1 -0
- package/dist/vega/p-77908e45.entry.js +1 -0
- package/dist/vega/{p-a0b66c25.js → p-7ade785e.js} +1 -1
- package/dist/vega/{p-f2b0b58a.js → p-7db5e003.js} +1 -1
- package/dist/vega/{p-021d4ae4.js → p-7db918f4.js} +1 -1
- package/dist/vega/{p-0572c393.entry.js → p-7f398d23.entry.js} +1 -1
- package/dist/vega/p-7f665911.entry.js +1 -0
- package/dist/vega/p-840f156e.entry.js +1 -0
- package/dist/vega/{p-95528b47.js → p-87379d3c.js} +1 -1
- package/dist/vega/p-87ed06cd.entry.js +1 -0
- package/dist/vega/{p-a8792e3d.js → p-882a220c.js} +1 -1
- package/dist/vega/{p-6b6f0fb4.js → p-898bcb24.js} +1 -1
- package/dist/vega/{p-d07f5d5a.entry.js → p-8fbb677e.entry.js} +1 -1
- package/dist/vega/p-9493d87a.js +1 -0
- package/dist/vega/{p-81b044b9.js → p-951c0172.js} +1 -1
- package/dist/vega/p-95919581.entry.js +1 -0
- package/dist/vega/{p-7c39ce96.js → p-95d1b547.js} +1 -1
- package/dist/vega/{p-50d074ed.entry.js → p-99c8f9a4.entry.js} +1 -1
- package/dist/vega/{p-e632475e.js → p-9c713bc0.js} +1 -1
- package/dist/vega/{p-3afc025e.entry.js → p-9dc77b66.entry.js} +1 -1
- package/dist/vega/{p-415ffa35.js → p-9f467a59.js} +1 -1
- package/dist/vega/p-a113fd15.entry.js +1 -0
- package/dist/vega/{p-4742feef.entry.js → p-a253e791.entry.js} +1 -1
- package/dist/vega/{p-0d4cb1c7.entry.js → p-a3272850.entry.js} +1 -1
- package/dist/vega/{p-b1773281.entry.js → p-a432708d.entry.js} +1 -1
- package/dist/vega/p-a57a7ab8.entry.js +1 -0
- package/dist/vega/{p-6d219c44.entry.js → p-a58bd510.entry.js} +1 -1
- package/dist/vega/{p-4ea30592.js → p-a957e15f.js} +1 -1
- package/dist/vega/{p-bff57aa4.js → p-abb81b7b.js} +1 -1
- package/dist/vega/{p-100b44c3.entry.js → p-ae6ed091.entry.js} +1 -1
- package/dist/vega/{p-03004a05.entry.js → p-b5e31243.entry.js} +1 -1
- package/dist/vega/{p-49845a91.js → p-b88ca09b.js} +1 -1
- package/dist/vega/{p-c2d2faa0.js → p-b901d624.js} +1 -1
- package/dist/vega/p-ba475520.entry.js +1 -0
- package/dist/vega/p-bdb5180c.js +1 -0
- package/dist/vega/p-bf04ff19.js +1 -0
- package/dist/vega/{p-1a51bf6f.js → p-c208a3b7.js} +1 -1
- package/dist/vega/{p-3c05abd9.entry.js → p-c25577ae.entry.js} +1 -1
- package/dist/vega/{p-1f3cd061.entry.js → p-c2560608.entry.js} +1 -1
- package/dist/vega/{p-0e679d8c.js → p-c2df94f6.js} +1 -1
- package/dist/vega/{p-cfecc1cb.entry.js → p-c3eec160.entry.js} +1 -1
- package/dist/vega/p-c6031d3f.entry.js +1 -0
- package/dist/vega/{p-70df91fb.entry.js → p-c87cf96a.entry.js} +1 -1
- package/dist/vega/{p-592296d7.entry.js → p-cc243e62.entry.js} +1 -1
- package/dist/vega/{p-cccd7648.entry.js → p-cd3d177b.entry.js} +1 -1
- package/dist/vega/{p-be1a210b.js → p-d0687ec0.js} +1 -1
- package/dist/vega/{p-b201f379.js → p-d25db724.js} +1 -1
- package/dist/vega/{p-aa1174dc.js → p-d42dbe39.js} +1 -1
- package/dist/vega/{p-9fb877c1.entry.js → p-d5570331.entry.js} +1 -1
- package/dist/vega/p-d5797747.js +1 -0
- package/dist/vega/{p-1a011d47.entry.js → p-d7434f44.entry.js} +1 -1
- package/dist/vega/p-db92453f.entry.js +1 -0
- package/dist/vega/{p-0a3a285b.entry.js → p-e5be807b.entry.js} +1 -1
- package/dist/vega/p-e6f0097f.js +1 -0
- package/dist/vega/{p-e8775a56.entry.js → p-e7a8b61e.entry.js} +1 -1
- package/dist/vega/{p-d2ee5711.entry.js → p-f46f6679.entry.js} +1 -1
- package/dist/vega/{p-1fa0c7da.entry.js → p-f49e8cc5.entry.js} +1 -1
- package/dist/vega/p-f5b6059d.entry.js +1 -0
- package/dist/vega/p-fb40a829.js +1 -0
- package/dist/vega/vega.esm.js +1 -1
- package/package.json +3 -2
- package/dist/vega/p-010ff53d.entry.js +0 -1
- package/dist/vega/p-168bb296.entry.js +0 -1
- package/dist/vega/p-40f39194.js +0 -1
- package/dist/vega/p-43ff48c0.entry.js +0 -1
- package/dist/vega/p-4aa94940.entry.js +0 -1
- package/dist/vega/p-4bee4202.entry.js +0 -1
- package/dist/vega/p-5cfce62d.entry.js +0 -1
- package/dist/vega/p-60f77f5f.entry.js +0 -1
- package/dist/vega/p-641cdb5c.entry.js +0 -1
- package/dist/vega/p-ab834f06.js +0 -1
- package/dist/vega/p-ac82b9f9.entry.js +0 -1
- package/dist/vega/p-b54dc37c.entry.js +0 -1
- package/dist/vega/p-b597393b.entry.js +0 -1
- package/dist/vega/p-b5f18f4b.entry.js +0 -1
- package/dist/vega/p-b7f3221f.js +0 -1
- package/dist/vega/p-c292ade4.entry.js +0 -1
- package/dist/vega/p-c3d2f316.js +0 -1
- package/dist/vega/p-cc5eaa1b.js +0 -1
- package/dist/vega/p-d1cfe972.entry.js +0 -1
- package/dist/vega/p-dad3ba5f.js +0 -1
- package/dist/vega/p-de64f6e6.js +0 -1
- package/dist/vega/p-e7fbef97.js +0 -1
- package/dist/vega/p-fc9ac6e9.entry.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { VegaInternalTranslation } from '../translation/internal-translation-controller';
|
|
1
2
|
/**
|
|
2
3
|
* Get a week days array
|
|
3
4
|
*
|
|
@@ -26,3 +27,37 @@ export var WeekdayLongNames;
|
|
|
26
27
|
export const getSystemTimezone = () => {
|
|
27
28
|
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
28
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Build an aria announcement string for date picker selection.
|
|
32
|
+
* TODO: consider to implement i18n for aria announcement .
|
|
33
|
+
*
|
|
34
|
+
* @param {object} options - The options for building the announcement.
|
|
35
|
+
* @param {'single' | 'range'} options.mode - The date picker selection mode.
|
|
36
|
+
* @param {Nullable<CalendarDate>} options.startDate - The start date.
|
|
37
|
+
* @param {Nullable<CalendarDate>} [options.endDate] - The end date (used in range mode).
|
|
38
|
+
* @returns {string} - The aria announcement string.
|
|
39
|
+
*/
|
|
40
|
+
export const buildDatePickerAnnouncement = (options) => {
|
|
41
|
+
const mode = options.mode;
|
|
42
|
+
const startDate = options.startDate;
|
|
43
|
+
const endDate = options.endDate;
|
|
44
|
+
if (!startDate && !endDate) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
48
|
+
const formatDate = (d) => `${d.getMonthName()} ${d.date} ${d.year}`;
|
|
49
|
+
if (mode === 'single' && startDate) {
|
|
50
|
+
return `${VegaInternalTranslation.t('Selected result')}: ${formatDate(startDate)}`;
|
|
51
|
+
}
|
|
52
|
+
if (mode === 'range') {
|
|
53
|
+
const startDateLabel = VegaInternalTranslation.t('Start Date');
|
|
54
|
+
const endDateLabel = VegaInternalTranslation.t('End Date');
|
|
55
|
+
if (startDate && endDate) {
|
|
56
|
+
return `${VegaInternalTranslation.t('Selected result')} ${startDateLabel}: ${formatDate(startDate)}. ${endDateLabel}: ${formatDate(endDate)}.`;
|
|
57
|
+
}
|
|
58
|
+
if (startDate) {
|
|
59
|
+
return `${VegaInternalTranslation.t('Selected result')} ${startDateLabel}: ${formatDate(startDate)}.`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return '';
|
|
63
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VegaExpand, VegaClick, VegaDropdownClick, VegaReset, VegaClose, VegaActionButtonClick, VegaChange, VegaEventClick, VegaDateDblClick, VegaMoreActionClick, VegaDateClick, VegaPageUpdate, VegaRemove, VegaCreate, VegaSearch, VegaMonthYearChange, VegaClear, VegaSelectionChange, VegaDropdownShow, VegaDropdownHide, VegaDropdownSearch, VegaSearchTrigger, VegaLabelButtonClick, VegaSelectFileChange, VegaRetry, VegaPreview, VegaFormSubmit, VegaFormReset, VegaValidate, VegaCancel, VegaNativeInputChange, VegaFocus, VegaBlur, VegaSuggestionItemClick, VegaPaste, VegaComplete, VegaCountryChange, VegaShow, VegaHide, VegaToggleStatus, VegaOpen, VegaStateUpdate, VegaGroupClick, VegaMenuClick, VegaActionClick, VegaPageSizeChange, VegaPopoverShow, VegaPopoverHide, VegaCurrentStepUpdate, VegaImageInserted, VegaSelectChange, VegaSelectAllChange, VegaRowClick, VegaRowExpand, VegaRowSelect, VegaRowSelectAll, } from './vega-event-id';
|
|
1
|
+
import { VegaExpand, VegaClick, VegaDropdownClick, VegaReset, VegaClose, VegaActionButtonClick, VegaChange, VegaEventClick, VegaDateDblClick, VegaMoreActionClick, VegaDateClick, VegaPageUpdate, VegaRemove, VegaCreate, VegaSearch, VegaMonthYearChange, VegaClear, VegaSelectionChange, VegaDropdownShow, VegaDropdownHide, VegaDropdownSearch, VegaSearchTrigger, VegaLabelButtonClick, VegaSelectFileChange, VegaRetry, VegaPreview, VegaFormSubmit, VegaFormReset, VegaValidate, VegaCancel, VegaNativeInputChange, VegaFocus, VegaBlur, VegaSuggestionItemClick, VegaPaste, VegaComplete, VegaCountryChange, VegaShow, VegaHide, VegaToggleStatus, VegaOpen, VegaStateUpdate, VegaGroupClick, VegaMenuClick, VegaActionClick, VegaPageSizeChange, VegaPopoverShow, VegaPopoverHide, VegaCurrentStepUpdate, VegaImageInserted, VegaSourceCodeChange, VegaSelectChange, VegaSelectAllChange, VegaRowClick, VegaRowExpand, VegaRowSelect, VegaRowSelectAll, } from './vega-event-id';
|
|
2
2
|
const entries = [
|
|
3
3
|
['vega-accordion', [VegaExpand]],
|
|
4
4
|
['vega-app-header-button', [VegaClick, VegaDropdownClick, VegaReset]],
|
|
@@ -67,7 +67,7 @@ const entries = [
|
|
|
67
67
|
['vega-progress-tracker', [VegaCurrentStepUpdate]],
|
|
68
68
|
['vega-radio', [VegaChange, VegaFocus, VegaBlur]],
|
|
69
69
|
['vega-radio-group', [VegaChange]],
|
|
70
|
-
['vega-rich-text-editor', [VegaChange, VegaImageInserted]],
|
|
70
|
+
['vega-rich-text-editor', [VegaChange, VegaImageInserted, VegaSourceCodeChange]],
|
|
71
71
|
['vega-rich-text-editor-toolbar-button', [VegaClick]],
|
|
72
72
|
['vega-rich-text-image-editor', [VegaChange]],
|
|
73
73
|
['vega-rich-text-link-editor', [VegaChange]],
|
|
@@ -109,3 +109,4 @@ export const VegaMonthYearChange = new VegaEventID('vegaMonthYearChange', 'month
|
|
|
109
109
|
export const VegaSelectionChange = new VegaEventID('vegaSelectionChange', 'selectionChange');
|
|
110
110
|
export const VegaSuggestionItemClick = new VegaEventID('vegaSuggestionItemClick', 'suggestionItemClick');
|
|
111
111
|
export const VegaNativeInputChange = new VegaEventID('vegaNativeInputChange', 'nativeInputChange');
|
|
112
|
+
export const VegaSourceCodeChange = new VegaEventID('vegaSourceCodeChange', 'sourceCodeChange');
|
|
@@ -67,3 +67,4 @@ export const VegaInternalDatePickerCalendarUpdatePeriodByUser = new VegaInternal
|
|
|
67
67
|
export const VegaInternalUpdateVegaInputValue = new VegaInternalEventID('updateVegaInputValue');
|
|
68
68
|
export const VegaInternalFocusVegaInput = new VegaInternalEventID('focusVegaInput');
|
|
69
69
|
export const VegaInternalSetupVegaInputMaskConfig = new VegaInternalEventID('setupVegaInputMaskConfig');
|
|
70
|
+
export const VegaInternalCodeBlockBlur = new VegaInternalEventID('codeBlockBlur');
|
|
@@ -173,6 +173,7 @@ export class ElementAppenderSlimmer extends VegaSlimmer {
|
|
|
173
173
|
show() {
|
|
174
174
|
this.elementAppender && this.elementAppender.show();
|
|
175
175
|
this[this.isDropdownShowName] = true;
|
|
176
|
+
this.setAriaOwns();
|
|
176
177
|
}
|
|
177
178
|
hide() {
|
|
178
179
|
this.elementAppender && this.elementAppender.hide();
|
|
@@ -182,6 +183,7 @@ export class ElementAppenderSlimmer extends VegaSlimmer {
|
|
|
182
183
|
});
|
|
183
184
|
}
|
|
184
185
|
destroy() {
|
|
186
|
+
this.removeAriaOwns();
|
|
185
187
|
this.destroyElementAppender();
|
|
186
188
|
this[this.isDropdownShowName] = false;
|
|
187
189
|
}
|
|
@@ -264,6 +266,31 @@ export class ElementAppenderSlimmer extends VegaSlimmer {
|
|
|
264
266
|
return new NoneTriggerStrategy();
|
|
265
267
|
}
|
|
266
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Sets `ariaOwnsElements` on the target element to reference the appendable element directly.
|
|
271
|
+
* Uses the Element Reflection API which works across shadow DOM boundaries by using
|
|
272
|
+
* direct element references instead of IDREF strings.
|
|
273
|
+
* This ensures screen readers (e.g. VoiceOver) can navigate to the portal-appended
|
|
274
|
+
* content immediately after the trigger, rather than at the end of the document.
|
|
275
|
+
*/
|
|
276
|
+
setAriaOwns() {
|
|
277
|
+
if (this.showConfig) {
|
|
278
|
+
const target = this.showConfig.target;
|
|
279
|
+
const appendableElement = this.showConfig.appendableElement;
|
|
280
|
+
if (target && appendableElement) {
|
|
281
|
+
target.ariaOwnsElements = [appendableElement];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Removes `ariaOwnsElements` from the target element when the popup is hidden or destroyed.
|
|
287
|
+
*/
|
|
288
|
+
removeAriaOwns() {
|
|
289
|
+
var _a;
|
|
290
|
+
if ((_a = this.showConfig) === null || _a === void 0 ? void 0 : _a.target) {
|
|
291
|
+
this.showConfig.target.ariaOwnsElements = [];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
267
294
|
}
|
|
268
295
|
ElementAppenderSlimmer.DELAY_HIDE_TIME = 100;
|
|
269
296
|
__decorate([
|
package/dist/collection/helpers/slimmers/element-appender/test/element-appender-slimmer.test.js
CHANGED
|
@@ -568,4 +568,54 @@ describe('ElementAppender slimmer test suite', () => {
|
|
|
568
568
|
expect(child2.appendableElement).toHaveClass('vega-force-hidden');
|
|
569
569
|
});
|
|
570
570
|
});
|
|
571
|
+
describe('AriaOwns management', () => {
|
|
572
|
+
test('should set ariaOwnsElements on target when show is called', () => {
|
|
573
|
+
const mockedComponent = new MockedComponent();
|
|
574
|
+
const target = new MockHTMLElement('body', 'div');
|
|
575
|
+
const appendableElement = new MockHTMLElement('body', 'div');
|
|
576
|
+
appendableElement.classList.add('vega-force-hidden');
|
|
577
|
+
mockedComponent.target = target;
|
|
578
|
+
mockedComponent.appendableElement = appendableElement;
|
|
579
|
+
mockedComponent.componentDidLoad();
|
|
580
|
+
mockedComponent.show();
|
|
581
|
+
expect(target.ariaOwnsElements).toEqual([
|
|
582
|
+
appendableElement,
|
|
583
|
+
]);
|
|
584
|
+
});
|
|
585
|
+
test('should remove ariaOwnsElements from target when destroy is called', () => {
|
|
586
|
+
const mockedComponent = new MockedComponent();
|
|
587
|
+
const target = new MockHTMLElement('body', 'div');
|
|
588
|
+
const appendableElement = new MockHTMLElement('body', 'div');
|
|
589
|
+
appendableElement.classList.add('vega-force-hidden');
|
|
590
|
+
mockedComponent.target = target;
|
|
591
|
+
mockedComponent.appendableElement = appendableElement;
|
|
592
|
+
mockedComponent.componentDidLoad();
|
|
593
|
+
mockedComponent.show();
|
|
594
|
+
expect(target.ariaOwnsElements).toEqual([
|
|
595
|
+
appendableElement,
|
|
596
|
+
]);
|
|
597
|
+
mockedComponent.destroy();
|
|
598
|
+
expect(target.ariaOwnsElements).toEqual([]);
|
|
599
|
+
});
|
|
600
|
+
test('should not throw when show is called without showConfig', () => {
|
|
601
|
+
const mockedComponent = new MockedComponent();
|
|
602
|
+
mockedComponent.target = null;
|
|
603
|
+
mockedComponent.appendableElement = null;
|
|
604
|
+
spyOn(LogUtility, 'error');
|
|
605
|
+
mockedComponent.componentDidLoad();
|
|
606
|
+
expect(() => mockedComponent.show()).not.toThrow();
|
|
607
|
+
});
|
|
608
|
+
test('should not throw when destroy is called without target', () => {
|
|
609
|
+
const mockedComponent = new MockedComponent();
|
|
610
|
+
mockedComponent.target = null;
|
|
611
|
+
mockedComponent.appendableElement = null;
|
|
612
|
+
spyOn(LogUtility, 'error');
|
|
613
|
+
mockedComponent.componentDidLoad();
|
|
614
|
+
expect(() => mockedComponent.destroy()).not.toThrow();
|
|
615
|
+
});
|
|
616
|
+
test('should not throw when destroy is called before componentDidLoad', () => {
|
|
617
|
+
const mockedComponent = new MockedComponent();
|
|
618
|
+
expect(() => mockedComponent.destroy()).not.toThrow();
|
|
619
|
+
});
|
|
620
|
+
});
|
|
571
621
|
});
|
|
@@ -102,7 +102,7 @@ export class AriaAttributesValueMapper extends MutationObserverSlimmer {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
if (finalValue === null || finalValue === undefined || String(finalValue).trim() === '') {
|
|
105
|
-
finalValue = defaultValue
|
|
105
|
+
finalValue = defaultValue;
|
|
106
106
|
}
|
|
107
107
|
try {
|
|
108
108
|
if (String(finalValue).trim() === '') {
|
|
@@ -110,8 +110,15 @@ export class AriaAttributesValueMapper extends MutationObserverSlimmer {
|
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
112
|
const existing = target.getAttribute(ariaAttr);
|
|
113
|
-
if (
|
|
114
|
-
|
|
113
|
+
if (finalValue === null || finalValue === undefined) {
|
|
114
|
+
if (existing !== null) {
|
|
115
|
+
target.removeAttribute(ariaAttr);
|
|
116
|
+
}
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const stringValue = String(finalValue);
|
|
120
|
+
if (existing !== stringValue) {
|
|
121
|
+
target.setAttribute(ariaAttr, stringValue);
|
|
115
122
|
}
|
|
116
123
|
}
|
|
117
124
|
catch (e) {
|
|
@@ -0,0 +1,80 @@
|
|
|
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 { MapToComponentMethod } from 'vega-slimmer/core';
|
|
8
|
+
import { MutationObserverSlimmer } from './mutation-observer-slimmer';
|
|
9
|
+
/**
|
|
10
|
+
* Maps host data-tabindex to inner native input tabindex.
|
|
11
|
+
*/
|
|
12
|
+
export class DataTabIndexValueMapper extends MutationObserverSlimmer {
|
|
13
|
+
/**
|
|
14
|
+
* Constructor for DataTabIndexValueMapper
|
|
15
|
+
*
|
|
16
|
+
* @param {() => HTMLElement} targetGetter - Function to get the target HTMLElement
|
|
17
|
+
*/
|
|
18
|
+
constructor(targetGetter) {
|
|
19
|
+
super({
|
|
20
|
+
options: { attributes: true, attributeFilter: [DataTabIndexValueMapper.OBSERVED_ATTRIBUTE] },
|
|
21
|
+
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
22
|
+
callback: () => {
|
|
23
|
+
this.performMapping();
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
this.targetGetter = targetGetter;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Component lifecycle - [componentDidLoad]
|
|
30
|
+
*/
|
|
31
|
+
componentDidLoad() {
|
|
32
|
+
this.performMapping();
|
|
33
|
+
super.componentDidLoad && super.componentDidLoad();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Component lifecycle - [componentDidRender]
|
|
37
|
+
*/
|
|
38
|
+
componentDidRender() {
|
|
39
|
+
this.performMapping();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Performs the mapping of host data-tabindex to target element's tabindex.
|
|
43
|
+
* If the host attribute value is null, undefined, or empty string, it removes the tabindex attribute from the target.
|
|
44
|
+
* Otherwise, it sets the target's tabindex to the host attribute value.
|
|
45
|
+
*/
|
|
46
|
+
performMapping() {
|
|
47
|
+
const target = this.targetGetter ? this.targetGetter() : null;
|
|
48
|
+
if (!target)
|
|
49
|
+
return;
|
|
50
|
+
const hostValue = this.host.getAttribute(DataTabIndexValueMapper.OBSERVED_ATTRIBUTE);
|
|
51
|
+
if (this.shouldRemoveTabIndex(hostValue)) {
|
|
52
|
+
target.removeAttribute('tabindex');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const tabIndexValue = String(hostValue);
|
|
56
|
+
if (target.getAttribute('tabindex') !== tabIndexValue) {
|
|
57
|
+
target.setAttribute('tabindex', tabIndexValue);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Determines whether the tabindex attribute should be removed from the target element.
|
|
62
|
+
*
|
|
63
|
+
* @param {string | null} hostValue - The value of the host element's data-tabindex attribute
|
|
64
|
+
* @returns {boolean} True if the tabindex should be removed, false otherwise
|
|
65
|
+
*/
|
|
66
|
+
shouldRemoveTabIndex(hostValue) {
|
|
67
|
+
if (hostValue === null || hostValue === undefined) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
const normalizedValue = String(hostValue).trim().toLowerCase();
|
|
71
|
+
return normalizedValue === '' || normalizedValue === 'null' || normalizedValue === 'undefined';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
DataTabIndexValueMapper.OBSERVED_ATTRIBUTE = 'data-tabindex';
|
|
75
|
+
__decorate([
|
|
76
|
+
MapToComponentMethod('componentDidLoad')
|
|
77
|
+
], DataTabIndexValueMapper.prototype, "componentDidLoad", null);
|
|
78
|
+
__decorate([
|
|
79
|
+
MapToComponentMethod('componentDidRender')
|
|
80
|
+
], DataTabIndexValueMapper.prototype, "componentDidRender", null);
|
package/dist/collection/helpers/slimmers/mutation-observer/test/aria-attributes-value-mapper.test.js
CHANGED
|
@@ -168,7 +168,7 @@ describe('AriaAttributesValueMapper', () => {
|
|
|
168
168
|
comp.componentDidLoad();
|
|
169
169
|
}).not.toThrow();
|
|
170
170
|
});
|
|
171
|
-
it('should
|
|
171
|
+
it('should omit aria attribute when no defaultValue provided', () => {
|
|
172
172
|
const comp = new MockedComponent();
|
|
173
173
|
const button = document.createElement('button');
|
|
174
174
|
// no dependencies present on host and no defaultValue in map
|
|
@@ -177,8 +177,47 @@ describe('AriaAttributesValueMapper', () => {
|
|
|
177
177
|
}));
|
|
178
178
|
comp.connectedCallback();
|
|
179
179
|
comp.componentDidLoad();
|
|
180
|
-
|
|
181
|
-
|
|
180
|
+
expect(button.hasAttribute('aria-label')).toBeFalsy();
|
|
181
|
+
});
|
|
182
|
+
it('should omit aria attribute when defaultValue is null', () => {
|
|
183
|
+
const comp = new MockedComponent();
|
|
184
|
+
const button = document.createElement('button');
|
|
185
|
+
comp.setMapper(new AriaAttributesValueMapper(() => button, {
|
|
186
|
+
'aria-label': {
|
|
187
|
+
dependency: ['data-aria-label', 'label'],
|
|
188
|
+
defaultValue: null,
|
|
189
|
+
},
|
|
190
|
+
}));
|
|
191
|
+
comp.connectedCallback();
|
|
192
|
+
comp.componentDidLoad();
|
|
193
|
+
expect(button.hasAttribute('aria-label')).toBeFalsy();
|
|
194
|
+
});
|
|
195
|
+
it('should omit aria attribute when defaultValue is undefined', () => {
|
|
196
|
+
const comp = new MockedComponent();
|
|
197
|
+
const button = document.createElement('button');
|
|
198
|
+
comp.setMapper(new AriaAttributesValueMapper(() => button, {
|
|
199
|
+
'aria-label': {
|
|
200
|
+
dependency: ['data-aria-label', 'label'],
|
|
201
|
+
defaultValue: undefined,
|
|
202
|
+
},
|
|
203
|
+
}));
|
|
204
|
+
comp.connectedCallback();
|
|
205
|
+
comp.componentDidLoad();
|
|
206
|
+
expect(button.hasAttribute('aria-label')).toBeFalsy();
|
|
207
|
+
});
|
|
208
|
+
it('should remove existing aria attribute when resolved value is undefined', () => {
|
|
209
|
+
const comp = new MockedComponent();
|
|
210
|
+
const button = document.createElement('button');
|
|
211
|
+
button.setAttribute('aria-label', 'legacy-value');
|
|
212
|
+
comp.setMapper(new AriaAttributesValueMapper(() => button, {
|
|
213
|
+
'aria-label': {
|
|
214
|
+
dependency: ['data-aria-label', 'label'],
|
|
215
|
+
defaultValue: undefined,
|
|
216
|
+
},
|
|
217
|
+
}));
|
|
218
|
+
comp.connectedCallback();
|
|
219
|
+
comp.componentDidLoad();
|
|
220
|
+
expect(button.hasAttribute('aria-label')).toBeFalsy();
|
|
182
221
|
});
|
|
183
222
|
it('should handle empty mutations array (pass undefined to performMapping)', () => {
|
|
184
223
|
const comp = new MockedComponent();
|
|
@@ -193,4 +232,17 @@ describe('AriaAttributesValueMapper', () => {
|
|
|
193
232
|
MockedMutationObserver.mock.instances[0].trigger([]);
|
|
194
233
|
expect(button.getAttribute('aria-label')).toBe('test');
|
|
195
234
|
});
|
|
235
|
+
it('should be null for aria attribute when defaultValue is empty string', () => {
|
|
236
|
+
const comp = new MockedComponent();
|
|
237
|
+
const button = document.createElement('button');
|
|
238
|
+
comp.setMapper(new AriaAttributesValueMapper(() => button, {
|
|
239
|
+
'aria-label': {
|
|
240
|
+
dependency: ['data-aria-label', 'label'],
|
|
241
|
+
defaultValue: '',
|
|
242
|
+
},
|
|
243
|
+
}));
|
|
244
|
+
comp.connectedCallback();
|
|
245
|
+
comp.componentDidLoad();
|
|
246
|
+
expect(button.getAttribute('aria-label')).toBe(null);
|
|
247
|
+
});
|
|
196
248
|
});
|
package/dist/collection/helpers/slimmers/mutation-observer/test/data-tab-index-value-mapper.test.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
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 { MockHTMLElement } from '@stencil/core/mock-doc';
|
|
8
|
+
import { InjectVegaSlimmer } from 'vega-slimmer/core';
|
|
9
|
+
import { MockedMutationObserver } from '../../../../utils/spec-utils';
|
|
10
|
+
import { DataTabIndexValueMapper } from '../data-tab-index-value-mapper';
|
|
11
|
+
describe('DataTabIndexValueMapper', () => {
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
global.MutationObserver = MockedMutationObserver;
|
|
14
|
+
MockedMutationObserver.mockClear();
|
|
15
|
+
});
|
|
16
|
+
class MockedComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.host = new MockHTMLElement('body', 'mocked-component');
|
|
19
|
+
}
|
|
20
|
+
connectedCallback() {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
componentDidLoad() {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setMapper(mapper) {
|
|
27
|
+
this.dataTabIndexValueMapper = mapper;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
__decorate([
|
|
31
|
+
InjectVegaSlimmer()
|
|
32
|
+
], MockedComponent.prototype, "dataTabIndexValueMapper", void 0);
|
|
33
|
+
it('should map host data-tabindex to native input tabindex on load', () => {
|
|
34
|
+
const comp = new MockedComponent();
|
|
35
|
+
const input = document.createElement('input');
|
|
36
|
+
comp.host.setAttribute('data-tabindex', '-1');
|
|
37
|
+
comp.setMapper(new DataTabIndexValueMapper(() => input));
|
|
38
|
+
comp.connectedCallback();
|
|
39
|
+
comp.componentDidLoad();
|
|
40
|
+
expect(input.getAttribute('tabindex')).toBe('-1');
|
|
41
|
+
expect(MockedMutationObserver.mock.instances[0].observe).toHaveBeenCalledWith(comp.host, {
|
|
42
|
+
attributes: true,
|
|
43
|
+
attributeFilter: ['data-tabindex'],
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it('should update native input tabindex when host data-tabindex changes', () => {
|
|
47
|
+
const comp = new MockedComponent();
|
|
48
|
+
const input = document.createElement('input');
|
|
49
|
+
comp.host.setAttribute('data-tabindex', '0');
|
|
50
|
+
comp.setMapper(new DataTabIndexValueMapper(() => input));
|
|
51
|
+
comp.connectedCallback();
|
|
52
|
+
comp.componentDidLoad();
|
|
53
|
+
expect(input.getAttribute('tabindex')).toBe('0');
|
|
54
|
+
comp.host.setAttribute('data-tabindex', '-1');
|
|
55
|
+
MockedMutationObserver.mock.instances[0].trigger([{ attributeName: 'data-tabindex', oldValue: '0' }]);
|
|
56
|
+
expect(input.getAttribute('tabindex')).toBe('-1');
|
|
57
|
+
});
|
|
58
|
+
it('should remove native input tabindex when host data-tabindex is empty or missing', () => {
|
|
59
|
+
const comp = new MockedComponent();
|
|
60
|
+
const input = document.createElement('input');
|
|
61
|
+
comp.host.setAttribute('data-tabindex', '0');
|
|
62
|
+
comp.setMapper(new DataTabIndexValueMapper(() => input));
|
|
63
|
+
comp.connectedCallback();
|
|
64
|
+
comp.componentDidLoad();
|
|
65
|
+
expect(input.getAttribute('tabindex')).toBe('0');
|
|
66
|
+
comp.host.setAttribute('data-tabindex', '');
|
|
67
|
+
MockedMutationObserver.mock.instances[0].trigger([{ attributeName: 'data-tabindex', oldValue: '0' }]);
|
|
68
|
+
expect(input.hasAttribute('tabindex')).toBeFalsy();
|
|
69
|
+
comp.host.removeAttribute('data-tabindex');
|
|
70
|
+
MockedMutationObserver.mock.instances[0].trigger([{ attributeName: 'data-tabindex', oldValue: '' }]);
|
|
71
|
+
expect(input.hasAttribute('tabindex')).toBeFalsy();
|
|
72
|
+
});
|
|
73
|
+
it('should remove native input tabindex when host data-tabindex is "null" or "undefined" string', () => {
|
|
74
|
+
const comp = new MockedComponent();
|
|
75
|
+
const input = document.createElement('input');
|
|
76
|
+
comp.host.setAttribute('data-tabindex', '0');
|
|
77
|
+
comp.setMapper(new DataTabIndexValueMapper(() => input));
|
|
78
|
+
comp.connectedCallback();
|
|
79
|
+
comp.componentDidLoad();
|
|
80
|
+
expect(input.getAttribute('tabindex')).toBe('0');
|
|
81
|
+
comp.host.setAttribute('data-tabindex', 'null');
|
|
82
|
+
MockedMutationObserver.mock.instances[0].trigger([{ attributeName: 'data-tabindex', oldValue: '0' }]);
|
|
83
|
+
expect(input.hasAttribute('tabindex')).toBeFalsy();
|
|
84
|
+
comp.host.setAttribute('data-tabindex', 'undefined');
|
|
85
|
+
MockedMutationObserver.mock.instances[0].trigger([
|
|
86
|
+
{ attributeName: 'data-tabindex', oldValue: 'null' },
|
|
87
|
+
]);
|
|
88
|
+
expect(input.hasAttribute('tabindex')).toBeFalsy();
|
|
89
|
+
});
|
|
90
|
+
it('should return early when targetGetter returns null', () => {
|
|
91
|
+
const comp = new MockedComponent();
|
|
92
|
+
comp.host.setAttribute('data-tabindex', '0');
|
|
93
|
+
comp.setMapper(new DataTabIndexValueMapper(() => null));
|
|
94
|
+
expect(() => {
|
|
95
|
+
comp.connectedCallback();
|
|
96
|
+
comp.componentDidLoad();
|
|
97
|
+
MockedMutationObserver.mock.instances[0].trigger([
|
|
98
|
+
{ attributeName: 'data-tabindex', oldValue: null },
|
|
99
|
+
]);
|
|
100
|
+
}).not.toThrow();
|
|
101
|
+
});
|
|
102
|
+
it('should return early when targetGetter field is null', () => {
|
|
103
|
+
const comp = new MockedComponent();
|
|
104
|
+
const input = document.createElement('input');
|
|
105
|
+
comp.host.setAttribute('data-tabindex', '1');
|
|
106
|
+
const mapper = new DataTabIndexValueMapper(() => input);
|
|
107
|
+
// force the private readonly field to null so ternary fallback branch is executed
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
109
|
+
mapper.targetGetter = null;
|
|
110
|
+
comp.setMapper(mapper);
|
|
111
|
+
expect(() => {
|
|
112
|
+
comp.connectedCallback();
|
|
113
|
+
comp.componentDidLoad();
|
|
114
|
+
MockedMutationObserver.mock.instances[0].trigger([
|
|
115
|
+
{ attributeName: 'data-tabindex', oldValue: null },
|
|
116
|
+
]);
|
|
117
|
+
}).not.toThrow();
|
|
118
|
+
expect(input.hasAttribute('tabindex')).toBeFalsy();
|
|
119
|
+
});
|
|
120
|
+
});
|
package/dist/collection/helpers/slimmers/position-calculation/base-position-calculation-strategy.js
CHANGED
|
@@ -27,19 +27,24 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
27
27
|
* returns an ElementPositionBox.
|
|
28
28
|
*/
|
|
29
29
|
getPositionBox(placement, alignment) {
|
|
30
|
-
const placements = placement
|
|
31
|
-
const alignments = alignment
|
|
30
|
+
const placements = placement && placement.length > 0 ? placement : this.getPlacements();
|
|
31
|
+
const alignments = alignment && alignment.length > 0 ? alignment : this.getAlignments();
|
|
32
32
|
const targetBox = this.getTargetBoundBox();
|
|
33
33
|
const elementBox = this.getElementBoundBox();
|
|
34
34
|
const containerBox = this.getElementScrollDimension();
|
|
35
35
|
const suitablePlacement = this.getSuitablePlacement(containerBox, elementBox, targetBox, placements);
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
36
|
+
const activePlacement = suitablePlacement || placements[0];
|
|
37
|
+
const suitableAlignment = this.getSuitableAlignment(containerBox, elementBox, targetBox, activePlacement, alignments);
|
|
38
|
+
const activeAlignment = suitableAlignment || alignments[0];
|
|
39
|
+
const positionBox = this.calculatePosition(elementBox, targetBox, activePlacement, activeAlignment);
|
|
40
|
+
const translocationBox = this.getTranslocationBox(activePlacement);
|
|
39
41
|
positionBox.placement = suitablePlacement;
|
|
40
42
|
positionBox.alignment = suitableAlignment;
|
|
41
43
|
positionBox.left += translocationBox.X;
|
|
42
44
|
positionBox.top += translocationBox.Y;
|
|
45
|
+
if (!this.showConfig.positionRelativeTo) {
|
|
46
|
+
this.adjustPositionForViewport(positionBox, elementBox, targetBox, activePlacement);
|
|
47
|
+
}
|
|
43
48
|
return positionBox;
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
@@ -178,7 +183,7 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
178
183
|
* @param {ElementBoundBox} elementBox - The box of the element to be placed.
|
|
179
184
|
* @param {ElementBoundBox} targetBox - The box of the target element.
|
|
180
185
|
* @param {PlacementType[]} placements - The placements that we want to try.
|
|
181
|
-
* @returns {PlacementType} A function that takes in a containerBox, elementBox, targetBox, placements, and element.
|
|
186
|
+
* @returns {Nullable<PlacementType>} A function that takes in a containerBox, elementBox, targetBox, placements, and element.
|
|
182
187
|
*/
|
|
183
188
|
getSuitablePlacement(containerBox, elementBox, targetBox, placements) {
|
|
184
189
|
const defaultPlacement = placements[0];
|
|
@@ -191,7 +196,7 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
191
196
|
No enough space found for placing element and we will keep using the defined placement:
|
|
192
197
|
${defaultPlacement}
|
|
193
198
|
`);
|
|
194
|
-
return
|
|
199
|
+
return null;
|
|
195
200
|
}
|
|
196
201
|
}
|
|
197
202
|
/**
|
|
@@ -257,6 +262,115 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
257
262
|
left: this.calculateLeft(elementBox, targetBox, placement, alignment),
|
|
258
263
|
};
|
|
259
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Keeps the vertical position within the visible viewport
|
|
267
|
+
*
|
|
268
|
+
* @param {number} top - The calculated top position.
|
|
269
|
+
* @param {number} elementHeight - The height of the element.
|
|
270
|
+
* @returns {number} The top position constrained to the viewport.
|
|
271
|
+
*/
|
|
272
|
+
keepVerticallyInView(top, elementHeight) {
|
|
273
|
+
return Math.max(0, Math.min(top, window.innerHeight - elementHeight));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Keeps the horizontal position within the visible viewport
|
|
277
|
+
*
|
|
278
|
+
* @param {number} left - The calculated left position.
|
|
279
|
+
* @param {number} elementWidth - The width of the element.
|
|
280
|
+
* @returns {number} The left position constrained to the viewport.
|
|
281
|
+
*/
|
|
282
|
+
keepHorizontallyInView(left, elementWidth) {
|
|
283
|
+
return Math.max(0, Math.min(left, window.innerWidth - elementWidth));
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Checks if the target element is visible in the viewport
|
|
287
|
+
*
|
|
288
|
+
* @param {ElementBoundBox} targetBox - The bounding box of the target element.
|
|
289
|
+
* @returns {boolean} True if target is visible in viewport.
|
|
290
|
+
*/
|
|
291
|
+
isTargetInView(targetBox) {
|
|
292
|
+
const innerHeight = window.innerHeight;
|
|
293
|
+
const innerWidth = window.innerWidth;
|
|
294
|
+
const targetBottom = targetBox.top + targetBox.height;
|
|
295
|
+
const targetRight = targetBox.left + targetBox.width;
|
|
296
|
+
return (targetBox.top <= innerHeight &&
|
|
297
|
+
targetBottom >= 0 &&
|
|
298
|
+
targetBox.left <= innerWidth &&
|
|
299
|
+
targetRight >= 0);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Corrects `positionBox` so the element stays within the viewport after translocation.
|
|
303
|
+
* Only runs when the target is visible; skips correction entirely if the target has
|
|
304
|
+
* scrolled out of view so the element simply follows it.
|
|
305
|
+
*
|
|
306
|
+
* @param {ElementPositionBox} positionBox - The final position box to adjust (mutated in place).
|
|
307
|
+
* @param {ElementBoundBox} elementBox - Dimensions of the positioned element.
|
|
308
|
+
* @param {ElementBoundBox} targetBox - Bounding box of the target element.
|
|
309
|
+
* @param {PlacementType} placement - Active placement used to select the correction axis.
|
|
310
|
+
*/
|
|
311
|
+
adjustPositionForViewport(positionBox, elementBox, targetBox, placement) {
|
|
312
|
+
if (!this.isTargetInView(targetBox)) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if (placement === 'top' || placement === 'bottom') {
|
|
316
|
+
positionBox.top = this.adjustForVerticalOverflow(positionBox.top, elementBox.height, targetBox.height);
|
|
317
|
+
}
|
|
318
|
+
else if (placement === 'left' || placement === 'right') {
|
|
319
|
+
positionBox.left = this.adjustForHorizontalOverflow(positionBox.left, elementBox.width, targetBox.width);
|
|
320
|
+
}
|
|
321
|
+
positionBox.top = this.keepVerticallyInView(positionBox.top, elementBox.height);
|
|
322
|
+
positionBox.left = this.keepHorizontallyInView(positionBox.left, elementBox.width);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Nudges `top` so the element stays within the viewport vertically.
|
|
326
|
+
* Only corrects when the overflow is less than `targetHeight` to keep the element
|
|
327
|
+
* visually anchored to its target; larger overflows are handled by `keepVerticallyInView`.
|
|
328
|
+
*
|
|
329
|
+
* @param {number} top - The calculated top position.
|
|
330
|
+
* @param {number} elementHeight - Height of the positioned element.
|
|
331
|
+
* @param {number} targetHeight - Height of the target, used as the max correctable overflow.
|
|
332
|
+
* @returns {number} The adjusted top position.
|
|
333
|
+
*/
|
|
334
|
+
adjustForVerticalOverflow(top, elementHeight, targetHeight) {
|
|
335
|
+
// Pixels the element bleeds past the bottom of the viewport (positive = overflow).
|
|
336
|
+
const overflowBottom = top + elementHeight - window.innerHeight;
|
|
337
|
+
// Pixels the element bleeds past the top of the viewport (positive = overflow).
|
|
338
|
+
const overflowTop = -top;
|
|
339
|
+
// Only nudge when overflow is smaller than targetHeight; larger overflows are left to
|
|
340
|
+
// keepVerticallyInView to hard-clamp, since nudging that far would detach from the target.
|
|
341
|
+
if (overflowBottom > 0 && overflowBottom < targetHeight) {
|
|
342
|
+
return top - overflowBottom; // shift up until bottom edge is flush with viewport bottom
|
|
343
|
+
}
|
|
344
|
+
if (overflowTop > 0 && overflowTop < targetHeight) {
|
|
345
|
+
return top + overflowTop; // shift down until top edge is flush with viewport top
|
|
346
|
+
}
|
|
347
|
+
return top;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Nudges `left` so the element stays within the viewport horizontally.
|
|
351
|
+
* Only corrects when the overflow is less than `targetWidth` to keep the element
|
|
352
|
+
* visually anchored to its target; larger overflows are handled by `keepHorizontallyInView`.
|
|
353
|
+
*
|
|
354
|
+
* @param {number} left - The calculated left position.
|
|
355
|
+
* @param {number} elementWidth - Width of the positioned element.
|
|
356
|
+
* @param {number} targetWidth - Width of the target, used as the max correctable overflow.
|
|
357
|
+
* @returns {number} The adjusted left position.
|
|
358
|
+
*/
|
|
359
|
+
adjustForHorizontalOverflow(left, elementWidth, targetWidth) {
|
|
360
|
+
// Pixels the element bleeds past the right edge of the viewport (positive = overflow).
|
|
361
|
+
const overflowRight = left + elementWidth - window.innerWidth;
|
|
362
|
+
// Pixels the element bleeds past the left edge of the viewport (positive = overflow).
|
|
363
|
+
const overflowLeft = -left;
|
|
364
|
+
// Only nudge when overflow is smaller than targetWidth; larger overflows are left to
|
|
365
|
+
// keepHorizontallyInView to hard-clamp, since nudging that far would detach from the target.
|
|
366
|
+
if (overflowRight > 0 && overflowRight < targetWidth) {
|
|
367
|
+
return left - overflowRight; // shift left until right edge is flush with viewport right
|
|
368
|
+
}
|
|
369
|
+
if (overflowLeft > 0 && overflowLeft < targetWidth) {
|
|
370
|
+
return left + overflowLeft; // shift right until left edge is flush with viewport left
|
|
371
|
+
}
|
|
372
|
+
return left;
|
|
373
|
+
}
|
|
260
374
|
/**
|
|
261
375
|
* It returns the translocation of the element relative to the target element
|
|
262
376
|
*
|
|
@@ -301,7 +415,7 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
301
415
|
* @param {ElementBoundBox} targetBox - The box of the element that the element to be positioned is aligned to.
|
|
302
416
|
* @param {PlacementType} placement - The placement of the element relative to the target.
|
|
303
417
|
* @param {PositionAlignmentType[]} alignments - An array of alignments to try.
|
|
304
|
-
* @returns {PositionAlignmentType} the alignment that is suitable for the element.
|
|
418
|
+
* @returns {Nullable<PositionAlignmentType>} the alignment that is suitable for the element.
|
|
305
419
|
*/
|
|
306
420
|
getSuitableAlignment(containerBox, elementBox, targetBox, placement, alignments) {
|
|
307
421
|
const defaultAlignment = alignments[0];
|
|
@@ -314,7 +428,7 @@ export class BasePositionCalculationStrategy extends VegaSlimmer {
|
|
|
314
428
|
No enough space found for placing element and we will keep using the defined alignment:
|
|
315
429
|
${defaultAlignment}
|
|
316
430
|
`);
|
|
317
|
-
return
|
|
431
|
+
return null;
|
|
318
432
|
}
|
|
319
433
|
}
|
|
320
434
|
/**
|